diff --git a/.env b/.env index 082038858c..9acf28056a 100644 --- a/.env +++ b/.env @@ -1,5 +1,4 @@ COMPOSE_PROJECT_NAME=joystream -PROJECT_NAME=query_node # We use a single postgres service for both the query node indexer and processor. # The default `DB_*` environment variables point to query node processor's database. diff --git a/.github/workflows/create-release.yml b/.github/workflows/create-release.yml index 555cd2151f..2f18f24993 100644 --- a/.github/workflows/create-release.yml +++ b/.github/workflows/create-release.yml @@ -65,18 +65,18 @@ jobs: docker run -d --entrypoint tail --name temp-container-joystream-node $IMAGE-amd64 -f /dev/null - RESULT=$(docker exec temp-container-joystream-node b2sum -l 256 runtime.compact.wasm | awk '{print $1}') - VERSION_AND_COMMIT=$(docker exec temp-container-joystream-node /joystream/node --version | awk '{print $2}' | cut -d- -f -2) + RESULT=`docker exec temp-container-joystream-node b2sum -l 256 runtime.compact.compressed.wasm | awk '{print $1}'` + VERSION_AND_COMMIT=`docker exec temp-container-joystream-node /joystream/node --version | awk '{print $2}' | cut -d- -f -2` echo "::set-output name=blob_hash::${RESULT}" echo "::set-output name=version_and_commit::${VERSION_AND_COMMIT}" - docker cp temp-container-joystream-node:/joystream/runtime.compact.wasm ./joystream_runtime_${{ github.event.inputs.tag }}.wasm + docker cp temp-container-joystream-node:/joystream/runtime.compact.compressed.wasm ./joystream_runtime_${{ github.event.inputs.tag }}.wasm docker cp temp-container-joystream-node:/joystream/node ./joystream-node tar -czvf joystream-node-$VERSION_AND_COMMIT-x86_64-linux-gnu.tar.gz joystream-node docker rm --force temp-container-joystream-node - docker cp $(docker create --rm $IMAGE-arm64):/joystream/node ./joystream-node + docker cp `docker create --rm $IMAGE-arm64`:/joystream/node ./joystream-node tar -czvf joystream-node-$VERSION_AND_COMMIT-arm64-linux-gnu.tar.gz joystream-node - name: Retrieve saved MacOS binary diff --git a/.github/workflows/deploy-node-network.yml b/.github/workflows/deploy-node-network.yml index 3e7757207c..5d51135494 100644 --- a/.github/workflows/deploy-node-network.yml +++ b/.github/workflows/deploy-node-network.yml @@ -94,9 +94,9 @@ jobs: run: | VAL1="${{ steps.deploy_stack.outputs.Val1PublicIp }}" VAL2="${{ steps.deploy_stack.outputs.Val2PublicIp }}" - VAL3="${{ steps.deploy_stack.outputs.Val3PublicIp }}" + BOOT1="${{ steps.deploy_stack.outputs.Val3PublicIp }}" echo -e "[validators]\n$VAL1\n$VAL2\n\n" >> inventory - echo -e "[boot]\n$VAL3\n\n" >> inventory + echo -e "[boot]\n$BOOT1\n\n" >> inventory echo -e "[build]\n${{ steps.deploy_stack.outputs.BuildPublicIp }}\n\n" >> inventory echo -e "[rpc]\n${{ steps.deploy_stack.outputs.RPCPublicIp }}\n" >> inventory cat inventory diff --git a/.github/workflows/deploy-playground.yml b/.github/workflows/deploy-playground.yml index 67f54c8378..2c5abe6813 100644 --- a/.github/workflows/deploy-playground.yml +++ b/.github/workflows/deploy-playground.yml @@ -12,7 +12,7 @@ on: required: false default: 'master' runtimeProfile: - description: 'STAGING | PLAYGROUND | TESTING - leave balnk for production' + description: 'PLAYGROUND | TESTING' default: 'PLAYGROUND' required: false sshPubKey: diff --git a/.github/workflows/joystream-apps-docker.yml b/.github/workflows/joystream-apps-docker.yml index de706b772d..d33ef333b5 100644 --- a/.github/workflows/joystream-apps-docker.yml +++ b/.github/workflows/joystream-apps-docker.yml @@ -25,9 +25,9 @@ jobs: id: extract_versions shell: bash run: | - echo "colossus_version=$(cat storage-node/package.json | jq -r '.version')" >> $GITHUB_OUTPUT - echo "argus_version=$(cat distributor-node/package.json | jq -r '.version')" >> $GITHUB_OUTPUT - echo "qn_version=$(cat query-node/package.json | jq -r '.version')" >> $GITHUB_OUTPUT + echo "colossus_version=`cat storage-node/package.json | jq -r '.version'`" >> $GITHUB_OUTPUT + echo "argus_version=`cat distributor-node/package.json | jq -r '.version'`" >> $GITHUB_OUTPUT + echo "qn_version=`cat query-node/package.json | jq -r '.version'`" >> $GITHUB_OUTPUT - name: Make some space shell: bash @@ -48,7 +48,10 @@ jobs: - name: Build joystream-node if: github.event_name == 'pull_request' - run: RUNTIME_PROFILE=TESTING ./build-node-docker.sh + run: | + RUNTIME_PROFILE=TESTING ./build-node-docker.sh + # reclaim some disk space + docker system prune --force # docker/build-push-action doc: # Be careful because any file mutation in the steps that precede the @@ -65,6 +68,8 @@ jobs: push: false load: true tags: joystream/storage-node:latest + - name: reclaim disk space + run: docker system prune --force - name: Build distributor-node uses: docker/build-push-action@v3 with: @@ -74,6 +79,8 @@ jobs: push: false load: true tags: joystream/distributor-node:latest + - name: reclaim disk space + run: docker system prune --force - name: Build query-node uses: docker/build-push-action@v3 with: @@ -87,6 +94,7 @@ jobs: - name: Test with latest images if: github.event_name == 'pull_request' run: | + docker system prune --force yarn build cp docker-compose-no-bind-volumes.yml docker-compose.yml ./tests/network-tests/run-tests.sh content-directory diff --git a/.github/workflows/joystream-node-docker-dev.yml b/.github/workflows/joystream-node-docker-dev.yml index 943c9dccf7..b7c4f075c2 100644 --- a/.github/workflows/joystream-node-docker-dev.yml +++ b/.github/workflows/joystream-node-docker-dev.yml @@ -15,10 +15,10 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - runtime_profile: ['STAGING', 'PLAYGROUND', 'TESTING'] + runtime_profile: ['FAST-PROD', 'PLAYGROUND', 'TESTING'] include: - - runtime_profile: 'STAGING' - cargo_features: 'staging-runtime' + - runtime_profile: 'FAST-PROD' + cargo_features: 'warp-time' - runtime_profile: 'PLAYGROUND' cargo_features: 'playground-runtime' - runtime_profile: 'TESTING' @@ -27,6 +27,13 @@ jobs: RUNTIME_PROFILE: ${{ matrix.runtime_profile }} steps: + - name: Make some space + shell: bash + run: | + sudo rm -rf /usr/share/dotnet + sudo rm -rf /opt/ghc + sudo rm -rf "/usr/local/share/boost" + sudo rm -rf "$AGENT_TOOLSDIRECTORY" - name: Checkout sources uses: actions/checkout@v3 - id: compute_shasum @@ -47,15 +54,37 @@ jobs: export IMAGE_EXISTS=$(docker manifest inspect ${{ env.REPOSITORY }}:${{ steps.compute_shasum.outputs.shasum }} > /dev/null ; echo $?) echo "::set-output name=image_exists::${IMAGE_EXISTS}" + # Emulation only needed if cross compiling + # - name: Set up QEMU + # uses: docker/setup-qemu-action@v2 + + - name: Set up Docker Buildx + # uses: docker/setup-buildx-action@dc7b9719a96d48369863986a06765841d7ea23f6 # v1.7 + uses: docker/setup-buildx-action@v2 + id: builder1 + if: ${{ steps.compute_image_exists.outputs.image_exists == 1 }} + + - name: Cache Docker layers + uses: actions/cache@v3 + with: + path: /tmp/.buildx-cache + key: ${{ runner.os }}-buildx-dev + if: ${{ steps.compute_image_exists.outputs.image_exists == 1 }} + - name: Build and push - uses: docker/build-push-action@v3 + uses: docker/build-push-action@v4 with: context: . file: joystream-node.Dockerfile + # arm64 cross compiling takes longer than 6h, so we only build for amd64 + # platforms: linux/amd64,linux/arm64 platforms: linux/amd64 build-args: | CARGO_FEATURES=${{ matrix.cargo_features }} CODE_SHASUM=${{ steps.compute_shasum.outputs.shasum }} push: true tags: ${{ env.REPOSITORY }}:${{ steps.compute_shasum.outputs.shasum }} + cache-from: type=local,src=/tmp/.buildx-cache + cache-to: type=local,dest=/tmp/.buildx-cache + builder: ${{ steps.builder1.outputs.name }} if: ${{ steps.compute_image_exists.outputs.image_exists == 1 }} diff --git a/.github/workflows/joystream-node.yml b/.github/workflows/joystream-node.yml index a6857498f3..a5770102a2 100644 --- a/.github/workflows/joystream-node.yml +++ b/.github/workflows/joystream-node.yml @@ -36,16 +36,15 @@ jobs: - name: Build env: - WASM_BUILD_TOOLCHAIN: nightly-2022-05-11 + WASM_BUILD_TOOLCHAIN: nightly-2022-11-15 run: | - cargo +nightly-2022-05-11 clippy --release --features runtime-benchmarks && - cargo +nightly-2022-05-11 test --release --features runtime-benchmarks && - cargo +nightly-2022-05-11 build --release --features runtime-benchmarks + ./scripts/cargo-checks-with-benchmarking.sh && + ./scripts/cargo-build-with-benchmarking.sh if: env.GIT_DIFF - name: Test Generate Weights run: | - ./scripts/generate-weights.sh 1 1 && git diff + ./scripts/generate-weights.sh 2 1 && git diff if: env.GIT_DIFF # Build and test joystream-node with all runtime profiles @@ -96,3 +95,47 @@ jobs: run: | yarn cargo-checks && yarn cargo-build if: env.GIT_DIFF + - name: Fast Production Runtime + env: + RUNTIME_PROFILE: "FAST-PROD" + run: | + yarn cargo-checks && yarn cargo-build + if: env.GIT_DIFF + + # Test runtime upgrade with "try-runtime" feature + runtime_upgrade: + name: Runtime Upgrade + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - uses: actions/setup-node@v3 + with: + node-version: '18.x' + - uses: technote-space/get-diff-action@v3 + with: + PREFIX_FILTER: | + bin + runtime + runtime-modules + SUFFIX_FILTER: | + .rs + FILES: | + Cargo.lock + Cargo.toml + - name: Toolchains + run: | + ./setup.sh + if: env.GIT_DIFF + - name: OnRuntimeUpgrade (try-runtime) + run: | + cargo +nightly-2022-11-15 build --release --features try-runtime + RUST_LOG=info,runtime=debug ./target/release/joystream-node try-runtime \ + --runtime ./target/release/wbuild/joystream-node-runtime/joystream_node_runtime.compact.compressed.wasm \ + on-runtime-upgrade \ + live \ + --uri wss://rpc.joystream.org:9944/ + if: env.GIT_DIFF + - name: run_migrations test + run: | + RUN_MIGRATION_TESTS=true RUST_LOG=info cargo +nightly-2022-11-15 test remote_tests::run_migrations --release --features try-runtime + if: env.GIT_DIFF diff --git a/.github/workflows/run-network-tests.yml b/.github/workflows/run-network-tests.yml index 806e64d06a..df8ee85d2b 100644 --- a/.github/workflows/run-network-tests.yml +++ b/.github/workflows/run-network-tests.yml @@ -47,6 +47,13 @@ jobs: use_artifact: ${{ steps.compute_shasum.outputs.shasum }}-joystream-node-docker-image.tar.gz runtime: ${{ steps.compute_shasum.outputs.shasum }} steps: + - name: Make some space + shell: bash + run: | + sudo rm -rf /usr/share/dotnet + sudo rm -rf /opt/ghc + sudo rm -rf "/usr/local/share/boost" + sudo rm -rf "$AGENT_TOOLSDIRECTORY" - uses: actions/checkout@v3 - uses: actions/setup-node@v3 with: @@ -104,7 +111,7 @@ jobs: uses: actions/cache@v3 with: path: /tmp/.buildx-cache - key: ${{ runner.os }}-buildx + key: ${{ runner.os }}-buildx-tests if: steps.check_files.outputs.files_exists == 'false' - name: Build @@ -179,7 +186,11 @@ jobs: name: Runtime Upgrade from production runtime needs: build_images runs-on: ubuntu-latest - if: github.ref != 'refs/heads/master' + # Disabling until we find a workaround + # as it is no longer practical to start the node + # while importing huge state from production network in genesis block. + # if: github.ref != 'refs/heads/master' + if: false steps: # Checkout master branch - name: check out master repo diff --git a/.pipelines/deploy-node-network-inputs.json b/.pipelines/deploy-node-network-inputs.json index bfa595b484..ea377dca4c 100644 --- a/.pipelines/deploy-node-network-inputs.json +++ b/.pipelines/deploy-node-network-inputs.json @@ -5,7 +5,7 @@ }, "branchName": { "description": "Branch to deploy", - "value": "carthage" + "value": "master" }, "instanceType": { "description": "AWS EC2 instance type for Validators and Rpc (t2.micro, t2.large, t2.xlarge)", @@ -28,15 +28,15 @@ "value": "" }, "deploymentType": { - "description": "Chain deployment type (live, dev etc.)", - "value": "staging" + "description": "Chain deployment type (testnet, mainnet)", + "value": "testnet" }, "encryptionKey": { "description": "Password to encrypt the artifacts", - "value": "staging" + "value": "testnet" }, "runtimeProfile": { - "description": "STAGING | PLAYGROUND | TESTING - leave empty for production", + "description": "STAGING | PLAYGROUND | TESTING | FAST-PROD (leave empty for production)", "value": "PLAYGROUND" }, "endowAccounts": { diff --git a/Cargo.lock b/Cargo.lock index 891b15f830..829c8b219f 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -18,7 +18,16 @@ version = "0.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b9ecd88a8c8378ca913a680cd98f0f13ac67383d35993f86c90a70e3f137816b" dependencies = [ - "gimli", + "gimli 0.26.2", +] + +[[package]] +name = "addr2line" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a76fd60b23679b7d19bd066031410fb7e458ccc5e958eb5c325888ce4baedc97" +dependencies = [ + "gimli 0.27.2", ] [[package]] @@ -27,6 +36,15 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" +[[package]] +name = "aead" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7fc95d1bdb8e6666b2b217308eeeb09f2d6728d104be3e31916cc74d15420331" +dependencies = [ + "generic-array 0.14.6", +] + [[package]] name = "aead" version = "0.4.3" @@ -34,6 +52,28 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0b613b8e1e3cf911a086f53f03bf286f52fd7a7258e4fa606f0ef220d39d8877" dependencies = [ "generic-array 0.14.6", + "rand_core 0.6.4", +] + +[[package]] +name = "aead" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c192eb8f11fc081b0fe4259ba5af04217d4e0faddd02417310a927911abd7c8" +dependencies = [ + "crypto-common", + "generic-array 0.14.6", +] + +[[package]] +name = "aes" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "884391ef1066acaa41e766ba8f596341b96e93ce34f9a43e7d24bf0a0eaf0561" +dependencies = [ + "aes-soft", + "aesni", + "cipher 0.2.5", ] [[package]] @@ -43,41 +83,98 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9e8b47f52ea9bae42228d07ec09eb676433d7c4ed1ebdf0f1d1c29ed446f1ab8" dependencies = [ "cfg-if", - "cipher", + "cipher 0.3.0", "cpufeatures", "opaque-debug 0.3.0", ] +[[package]] +name = "aes" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "433cfd6710c9986c576a25ca913c39d66a6474107b406f34f91d4a8923395241" +dependencies = [ + "cfg-if", + "cipher 0.4.4", + "cpufeatures", +] + [[package]] name = "aes-gcm" version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "df5f85a83a7d8b0442b6aa7b504b8212c1733da07b98aae43d4bc21b2cb3cdf6" dependencies = [ - "aead", - "aes", - "cipher", - "ctr", - "ghash", + "aead 0.4.3", + "aes 0.7.5", + "cipher 0.3.0", + "ctr 0.8.0", + "ghash 0.4.4", + "subtle", +] + +[[package]] +name = "aes-gcm" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "82e1366e0c69c9f927b1fa5ce2c7bf9eafc8f9268c0b9800729e8b267612447c" +dependencies = [ + "aead 0.5.1", + "aes 0.8.2", + "cipher 0.4.4", + "ctr 0.9.2", + "ghash 0.5.0", "subtle", ] +[[package]] +name = "aes-soft" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be14c7498ea50828a38d0e24a765ed2effe92a705885b57d029cd67d45744072" +dependencies = [ + "cipher 0.2.5", + "opaque-debug 0.3.0", +] + +[[package]] +name = "aesni" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea2e11f5e94c2f7d386164cc2aa1f97823fed6f259e486940a71c174dd01b0ce" +dependencies = [ + "cipher 0.2.5", + "opaque-debug 0.3.0", +] + [[package]] name = "ahash" version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fcb51a0695d8f838b1ee009b3fbf66bda078cd64590202a864a8f3e8c4315c47" dependencies = [ - "getrandom 0.2.7", + "getrandom 0.2.8", + "once_cell", + "version_check", +] + +[[package]] +name = "ahash" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c99f64d1e06488f620f932677e24bc6e2897582980441ae90a671415bd7ec2f" +dependencies = [ + "cfg-if", + "getrandom 0.2.8", "once_cell", "version_check", ] [[package]] name = "aho-corasick" -version = "0.7.19" +version = "0.7.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4f55bd91a0978cbfd91c457a164bab8b4001c833b7f323132c0a4e1922dd44e" +checksum = "cc936419f96fa211c1b9166887b38e5e40b19958e5b895be7c1f93adec7071ac" dependencies = [ "memchr", ] @@ -100,11 +197,17 @@ dependencies = [ "winapi", ] +[[package]] +name = "anstyle" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23ea9e81bd02e310c216d080f6223c179012256e5151c41db88d12c88a1684d2" + [[package]] name = "anyhow" -version = "1.0.65" +version = "1.0.70" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "98161a4e3e2184da77bb14f02184cdd111e83bbbcc9979dfee3c44b9a85f5602" +checksum = "7de8ce5e0f9f8d88245311066a578d72b7af3e7088f32783804676302df237e4" [[package]] name = "approx" @@ -115,6 +218,18 @@ dependencies = [ "num-traits", ] +[[package]] +name = "arc-swap" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bddcadddf5e9015d310179a59bb28c4d4b9920ad0f11e8e14dbadf654890c9a6" + +[[package]] +name = "array-bytes" +version = "4.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f52f63c5c1316a16a4b35eaac8b76a98248961a533f061684cb2a7cb0eafb6c6" + [[package]] name = "arrayref" version = "0.3.6" @@ -123,24 +238,82 @@ checksum = "a4c527152e37cf757a3f78aae5a06fbeefdb07ccc535c980a3208ee3060dd544" [[package]] name = "arrayvec" -version = "0.4.12" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23b62fc65de8e4e7f52534fb52b0f3ed04746ae267519eef2a83941e8085068b" + +[[package]] +name = "arrayvec" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8da52d66c7071e2e3fa2a1e5c6d088fec47b593032b254f5e980de8ea54454d6" + +[[package]] +name = "asn1-rs" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd9fd44efafa8690358b7408d253adf110036b88f55672a933f01d616ad9b1b9" +checksum = "30ff05a702273012438132f449575dbc804e27b2f3cbe3069aa237d26c98fa33" dependencies = [ - "nodrop", + "asn1-rs-derive 0.1.0", + "asn1-rs-impl", + "displaydoc", + "nom", + "num-traits", + "rusticata-macros", + "thiserror", + "time 0.3.20", ] [[package]] -name = "arrayvec" +name = "asn1-rs" version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23b62fc65de8e4e7f52534fb52b0f3ed04746ae267519eef2a83941e8085068b" +checksum = "7f6fd5ddaf0351dff5b8da21b2fb4ff8e08ddd02857f0bf69c47639106c0fff0" +dependencies = [ + "asn1-rs-derive 0.4.0", + "asn1-rs-impl", + "displaydoc", + "nom", + "num-traits", + "rusticata-macros", + "thiserror", + "time 0.3.20", +] [[package]] -name = "arrayvec" -version = "0.7.2" +name = "asn1-rs-derive" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8da52d66c7071e2e3fa2a1e5c6d088fec47b593032b254f5e980de8ea54454d6" +checksum = "db8b7511298d5b7784b40b092d9e9dcd3a627a5707e4b5e507931ab0d44eeebf" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", + "synstructure", +] + +[[package]] +name = "asn1-rs-derive" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "726535892e8eae7e70657b4c8ea93d26b8553afb1ce617caee529ef96d7dee6c" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", + "synstructure", +] + +[[package]] +name = "asn1-rs-impl" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2777730b2039ac0f95f093556e61b6d26cebed5393ca6f152717777cec3a42ed" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] [[package]] name = "asn1_der" @@ -150,13 +323,14 @@ checksum = "e22d1f4b888c298a027c99dc9048015fac177587de20fc30232a057dfbe24a21" [[package]] name = "assert_cmd" -version = "2.0.4" +version = "2.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93ae1ddd39efd67689deb1979d80bad3bf7f2b09c6e6117c8d1f2443b5e2f83e" +checksum = "ec0b2340f55d9661d76793b2bfc2eb0e62689bd79d067a95707ea762afd5e9dd" dependencies = [ + "anstyle", "bstr", "doc-comment", - "predicates", + "predicates 3.0.1", "predicates-core", "predicates-tree", "wait-timeout", @@ -169,14 +343,14 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a3203e79f4dd9bdda415ed03cf14dae5a2bf775c683a00f94e9cd1faf0f596e5" dependencies = [ "quote", - "syn 1.0.102", + "syn 1.0.109", ] [[package]] name = "async-channel" -version = "1.7.1" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e14485364214912d3b19cc3435dde4df66065127f05fa0d75c712f36f12c2f28" +checksum = "cf46fee83e5ccffc220104713af3292ff9bc7c64c7de289f66dae8e38d826833" dependencies = [ "concurrent-queue", "event-listener", @@ -185,23 +359,23 @@ dependencies = [ [[package]] name = "async-executor" -version = "1.4.1" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "871f9bb5e0a22eeb7e8cf16641feb87c9dc67032ccf8ff49e772eb9941d3a965" +checksum = "17adb73da160dfb475c183343c8cccd80721ea5a605d3eb57125f0a7b7a92d0b" dependencies = [ + "async-lock", "async-task", "concurrent-queue", "fastrand", "futures-lite", - "once_cell", "slab", ] [[package]] name = "async-global-executor" -version = "2.3.0" +version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0da5b41ee986eed3f524c380e6d64965aea573882a8907682ad100f7859305ca" +checksum = "f1b6f5d7df27bd294849f8eec66ecfc63d11814df7a4f5d74168a2394467b776" dependencies = [ "async-channel", "async-executor", @@ -214,49 +388,31 @@ dependencies = [ [[package]] name = "async-io" -version = "1.9.0" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83e21f3a490c72b3b0cf44962180e60045de2925d8dff97918f7ee43c8f637c7" +checksum = "8c374dda1ed3e7d8f0d9ba58715f924862c63eae6849c92d3a18e7fbde9e2794" dependencies = [ + "async-lock", "autocfg", "concurrent-queue", "futures-lite", "libc", "log", - "once_cell", "parking", "polling", "slab", "socket2", "waker-fn", - "winapi", + "windows-sys 0.42.0", ] [[package]] name = "async-lock" -version = "2.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e97a171d191782fba31bb902b14ad94e24a68145032b7eedf871ab0bc0d077b6" -dependencies = [ - "event-listener", -] - -[[package]] -name = "async-process" -version = "1.5.0" +version = "2.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02111fd8655a613c25069ea89fc8d9bb89331fa77486eb3bc059ee757cfa481c" +checksum = "fa24f727524730b077666307f2734b4a1a1c57acb79193127dcc8914d5242dd7" dependencies = [ - "async-io", - "autocfg", - "blocking", - "cfg-if", "event-listener", - "futures-lite", - "libc", - "once_cell", - "signal-hook", - "winapi", ] [[package]] @@ -270,7 +426,6 @@ dependencies = [ "async-global-executor", "async-io", "async-lock", - "async-process", "crossbeam-utils", "futures-channel", "futures-core", @@ -287,21 +442,6 @@ dependencies = [ "wasm-bindgen-futures", ] -[[package]] -name = "async-std-resolver" -version = "0.21.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f2f8a4a203be3325981310ab243a28e6e4ea55b6519bffce05d41ab60e09ad8" -dependencies = [ - "async-std", - "async-trait", - "futures-io", - "futures-util", - "pin-utils", - "socket2", - "trust-dns-resolver", -] - [[package]] name = "async-task" version = "4.3.0" @@ -310,20 +450,20 @@ checksum = "7a40729d2133846d9ed0ea60a8b9541bccddab49cd30f0715a1da672fe9a2524" [[package]] name = "async-trait" -version = "0.1.57" +version = "0.1.67" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76464446b8bc32758d7e88ee1a804d9914cd9b1cb264c029899680b0be29826f" +checksum = "86ea188f25f0255d8f92797797c97ebf5631fa88178beb1a46fdf5622c9a00e4" dependencies = [ "proc-macro2", "quote", - "syn 1.0.102", + "syn 2.0.2", ] [[package]] name = "asynchronous-codec" -version = "0.6.0" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0de5164e5edbf51c45fb8c2d9664ae1c095cce1b265ecf7569093c0d66ef690" +checksum = "06a0daa378f5fd10634e44b0a29b2a87b890657658e072a30d6f26e57ddee182" dependencies = [ "bytes", "futures-sink", @@ -334,9 +474,9 @@ dependencies = [ [[package]] name = "atomic-waker" -version = "1.0.0" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "065374052e7df7ee4047b1160cca5e1467a12351a40b3da123c870ba0b8eda2a" +checksum = "debc29dde2e69f9e47506b525f639ed42300fc014a3e007832592448fa8e4599" [[package]] name = "atty" @@ -344,7 +484,7 @@ version = "0.2.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8" dependencies = [ - "hermit-abi", + "hermit-abi 0.1.19", "libc", "winapi", ] @@ -357,16 +497,16 @@ checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" [[package]] name = "backtrace" -version = "0.3.66" +version = "0.3.67" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cab84319d616cfb654d03394f38ab7e6f0919e181b1b57e1fd15e7fb4077d9a7" +checksum = "233d376d6d185f2a3093e58f283f60f880315b6c60075b01f36b3b85154564ca" dependencies = [ - "addr2line", + "addr2line 0.19.0", "cc", "cfg-if", "libc", "miniz_oxide", - "object 0.29.0", + "object 0.30.3", "rustc-demangle", ] @@ -390,9 +530,21 @@ checksum = "6107fe1be6682a68940da878d9e9f5e90ca5745b3dec9fd1bb393c8777d4f581" [[package]] name = "base64" -version = "0.13.0" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" + +[[package]] +name = "base64" +version = "0.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4a4ddaa51a5bc52a6948f74c06d20aaaddb71924eab79b8c97a8c556e942d6a" + +[[package]] +name = "base64ct" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "904dfeac50f3cdaba28fc6f57fdcddb75f49ed61346676a78c4ffe55877802fd" +checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b" [[package]] name = "beef" @@ -404,25 +556,14 @@ dependencies = [ ] [[package]] -name = "beefy-primitives" +name = "binary-merkle-tree" version = "4.0.0-dev" -source = "git+https://github.com/joystream/substrate.git?rev=d29a53b11c3e530d1656eef502cb0f1f8fff3522#d29a53b11c3e530d1656eef502cb0f1f8fff3522" +source = "git+https://github.com/joystream/substrate.git?rev=1d0eefca86ef31b9e7727df01a6ed23ad65491e9#1d0eefca86ef31b9e7727df01a6ed23ad65491e9" dependencies = [ - "parity-scale-codec", - "scale-info", - "sp-api", - "sp-application-crypto", - "sp-core", - "sp-runtime", - "sp-std", + "hash-db", + "log", ] -[[package]] -name = "bimap" -version = "0.6.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc0455254eb5c6964c4545d8bac815e1a1be4f3afe0ae695ea539c12d728d44b" - [[package]] name = "bincode" version = "1.3.3" @@ -434,23 +575,22 @@ dependencies = [ [[package]] name = "bindgen" -version = "0.65.1" +version = "0.64.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cfdf7b466f9a4903edc73f95d6d2bcd5baf8ae620638762244d3f60143643cc5" +checksum = "c4243e6031260db77ede97ad86c27e501d646a27ab57b59a574f725d98ab1fb4" dependencies = [ - "bitflags", + "bitflags 1.3.2", "cexpr", "clang-sys", "lazy_static", "lazycell", "peeking_take_while", - "prettyplease", "proc-macro2", "quote", "regex", "rustc-hash", "shlex", - "syn 2.0.15", + "syn 1.0.109", ] [[package]] @@ -459,6 +599,12 @@ version = "1.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" +[[package]] +name = "bitflags" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "487f1e0fcbe47deb8b0574e646def1c903389d95241dd1bbcc6ce4a715dfc0c1" + [[package]] name = "bitvec" version = "1.0.1" @@ -473,28 +619,18 @@ dependencies = [ [[package]] name = "blake2" -version = "0.10.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9cf849ee05b2ee5fba5e36f97ff8ec2533916700fc0758d40d92136a42f3388" -dependencies = [ - "digest 0.10.5", -] - -[[package]] -name = "blake2-rfc" -version = "0.2.18" +version = "0.10.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d6d530bdd2d52966a6d03b7a964add7ae1a288d25214066fd4b600f0f796400" +checksum = "46502ad458c9a52b69d4d4d32775c788b7a1b85e8bc9d482d92250fc0e3f8efe" dependencies = [ - "arrayvec 0.4.12", - "constant_time_eq", + "digest 0.10.6", ] [[package]] name = "blake2b_simd" -version = "1.0.0" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72936ee4afc7f8f736d1c38383b56480b5497b4617b4a77bdbf1d2ababc76127" +checksum = "3c2f0dc9a68c6317d884f97cc36cf5a3d20ba14ce404227df55e1af708ab04bc" dependencies = [ "arrayref", "arrayvec 0.7.2", @@ -503,9 +639,9 @@ dependencies = [ [[package]] name = "blake2s_simd" -version = "1.0.0" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db539cc2b5f6003621f1cd9ef92d7ded8ea5232c7de0f9faa2de251cd98730d4" +checksum = "6637f448b9e61dfadbdcbae9a885fadee1f3eaffb1f8d3c1965d3ade8bdfd44f" dependencies = [ "arrayref", "arrayvec 0.7.2", @@ -514,9 +650,9 @@ dependencies = [ [[package]] name = "blake3" -version = "1.3.1" +version = "1.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a08e53fc5a564bb15bfe6fae56bd71522205f1f91893f9c0116edad6496c183f" +checksum = "42ae2468a89544a466886840aa467a25b766499f4f04bf7d9fcd10ecee9fccef" dependencies = [ "arrayref", "arrayvec 0.7.2", @@ -543,19 +679,28 @@ version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4" dependencies = [ - "block-padding 0.2.1", "generic-array 0.14.6", ] [[package]] name = "block-buffer" -version = "0.10.3" +version = "0.10.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69cce20737498f97b993470a6e536b8523f0af7892a4f928cceb1ac5e52ebe7e" +checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" dependencies = [ "generic-array 0.14.6", ] +[[package]] +name = "block-modes" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57a0e8073e8baa88212fb5823574c02ebccb395136ba9a164ab89379ec6072f0" +dependencies = [ + "block-padding 0.2.1", + "cipher 0.2.5", +] + [[package]] name = "block-padding" version = "0.1.5" @@ -573,16 +718,28 @@ checksum = "8d696c370c750c948ada61c69a0ee2cbbb9c50b1019ddb86d9317157a99c2cae" [[package]] name = "blocking" -version = "1.2.0" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6ccb65d468978a086b69884437ded69a90faab3bbe6e67f242173ea728acccc" +checksum = "3c67b173a56acffd6d2326fb7ab938ba0b00a71480e14902b2591c87bc5741e8" dependencies = [ "async-channel", + "async-lock", "async-task", "atomic-waker", "fastrand", "futures-lite", - "once_cell", +] + +[[package]] +name = "bounded-collections" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a071c348a5ef6da1d3a87166b408170b46002382b1dda83992b5c2208cefb370" +dependencies = [ + "log", + "parity-scale-codec", + "scale-info", + "serde", ] [[package]] @@ -593,12 +750,12 @@ checksum = "771fe0050b883fcc3ea2359b1a96bcfbc090b7116eae7c3c512c7a083fdf23d3" [[package]] name = "bstr" -version = "0.2.17" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba3569f383e8f1598449f1a423e72e99569137b47740b1da11ef19af3d5c3223" +checksum = "c3d4260bcc2e8fc9df1eac4919a720effeb63a3f0952f5bf4944adfa18897f09" dependencies = [ - "lazy_static", "memchr", + "once_cell", "regex-automata", "serde", ] @@ -614,15 +771,15 @@ dependencies = [ [[package]] name = "bumpalo" -version = "3.11.0" +version = "3.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1ad822118d20d2c234f427000d5acc36eabe1e29a348c89b63dd60b13f28e5d" +checksum = "0d261e256854913907f67ed06efbc3338dfe6179796deefc1ff763fc1aee5535" [[package]] name = "byte-slice-cast" -version = "1.2.1" +version = "1.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87c5fdd0166095e1d463fc6cc01aa8ce547ad77a4e84d42eb6762b084e28067e" +checksum = "c3ac9f8b63eca6fd385229b3675f6cc0dc5c8a5c8a54a59d4f52ffd670d87b0c" [[package]] name = "byte-tools" @@ -630,6 +787,12 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e3b5ca7a04898ad4bcd41c90c5285445ff5b791899bb1b0abdd2a2aa791211d7" +[[package]] +name = "bytemuck" +version = "1.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17febce684fd15d89027105661fec94afb475cb995fbc59d2865198446ba2eea" + [[package]] name = "byteorder" version = "1.4.3" @@ -638,9 +801,9 @@ checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" [[package]] name = "bytes" -version = "1.2.1" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec8a7b6a70fde80372154c65702f00a0f56f3e1c36abbc6c440484be248856db" +checksum = "89b2fd2a0dcf38d7971e2194b6b6eebab45ae01067456a7fd93d5547a61b70be" [[package]] name = "bzip2-sys" @@ -653,12 +816,6 @@ dependencies = [ "pkg-config", ] -[[package]] -name = "cache-padded" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1db59621ec70f09c5e9b597b220c7a2b43611f4710dc03ceb8748637775692c" - [[package]] name = "call-sizes" version = "1.0.0" @@ -670,6 +827,7 @@ dependencies = [ "pallet-content", "pallet-council", "pallet-forum", + "pallet-joystream-utility", "pallet-membership", "pallet-project-token", "pallet-proposals-codex", @@ -678,15 +836,14 @@ dependencies = [ "pallet-referendum", "pallet-staking-handler", "pallet-storage", - "pallet-utility 2.0.0", "pallet-working-group", ] [[package]] name = "camino" -version = "1.1.1" +version = "1.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88ad0e1e3e88dd237a156ab9f571021b8a158caa0ae44b1968a241efb5144c1e" +checksum = "c530edf18f37068ac2d977409ed5cd50d53d73bc653c7647b48eb78976ac9ae2" dependencies = [ "serde", ] @@ -702,15 +859,16 @@ dependencies = [ [[package]] name = "cargo_metadata" -version = "0.14.2" +version = "0.15.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4acbb09d9ee8e23699b9634375c72795d095bf268439da88562cf9b501f181fa" +checksum = "08a1ec454bc3eead8719cb56e15dbbfecdbc14e4b3a3ae4936cc6e31f5fc0d07" dependencies = [ "camino", "cargo-platform", - "semver 1.0.14", + "semver 1.0.17", "serde", "serde_json", + "thiserror", ] [[package]] @@ -721,13 +879,24 @@ checksum = "37b2a672a2cb129a2e41c10b1224bb368f9f37a2b16b612598138befd7b37eb5" [[package]] name = "cc" -version = "1.0.73" +version = "1.0.79" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2fff2a6927b3bb87f9595d67196a70493f627687a71d87a0d692242c33f58c11" +checksum = "50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f" dependencies = [ "jobserver", ] +[[package]] +name = "ccm" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5aca1a8fbc20b50ac9673ff014abfb2b5f4085ee1a850d408f14a159c5853ac7" +dependencies = [ + "aead 0.3.2", + "cipher 0.2.5", + "subtle", +] + [[package]] name = "cexpr" version = "0.6.0" @@ -737,12 +906,27 @@ dependencies = [ "nom", ] +[[package]] +name = "cfg-expr" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0aacacf4d96c24b2ad6eb8ee6df040e4f27b0d0b39a5710c30091baa830485db" +dependencies = [ + "smallvec", +] + [[package]] name = "cfg-if" version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" +[[package]] +name = "cfg_aliases" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd16c4719339c4530435d38e511904438d07cce7950afa3718a84ac36c10e89e" + [[package]] name = "chacha20" version = "0.8.2" @@ -750,7 +934,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5c80e5460aa66fe3b91d40bcbdab953a597b60053e34d684ac6903f863b680a6" dependencies = [ "cfg-if", - "cipher", + "cipher 0.3.0", "cpufeatures", "zeroize", ] @@ -761,19 +945,19 @@ version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a18446b09be63d457bbec447509e85f662f32952b035ce892290396bc0b0cff5" dependencies = [ - "aead", + "aead 0.4.3", "chacha20", - "cipher", + "cipher 0.3.0", "poly1305", "zeroize", ] [[package]] name = "chain-spec-builder" -version = "8.3.0" +version = "8.4.0" dependencies = [ "async-std", - "clap 3.2.22", + "clap 3.2.23", "enum-utils", "futures-util", "joystream-node", @@ -787,15 +971,15 @@ dependencies = [ [[package]] name = "chrono" -version = "0.4.22" +version = "0.4.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfd4d1b31faaa3a89d7934dbded3111da0d2ef28e3ebccdb4f0179f5929d1ef1" +checksum = "4e3c5919066adf22df73762e50cffcde3a758f2a848b113b586d1f86728b673b" dependencies = [ "iana-time-zone", "js-sys", "num-integer", "num-traits", - "time", + "time 0.1.45", "wasm-bindgen", "winapi", ] @@ -808,11 +992,20 @@ checksum = "f6ed9c8b2d17acb8110c46f1da5bf4a696d745e1474a16db0cd2b49cd0249bf2" dependencies = [ "core2", "multibase", - "multihash", + "multihash 0.16.3", "serde", "unsigned-varint", ] +[[package]] +name = "cipher" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "12f8e7987cbd042a63249497f41aed09f8e65add917ea6566effbc56578d6801" +dependencies = [ + "generic-array 0.14.6", +] + [[package]] name = "cipher" version = "0.3.0" @@ -822,15 +1015,34 @@ dependencies = [ "generic-array 0.14.6", ] +[[package]] +name = "cipher" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad" +dependencies = [ + "crypto-common", + "inout", +] + +[[package]] +name = "ckb-merkle-mountain-range" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56ccb671c5921be8a84686e6212ca184cb1d7c51cadcdbfcbd1cc3f042f5dfb8" +dependencies = [ + "cfg-if", +] + [[package]] name = "clang-sys" -version = "1.4.0" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa2e27ae6ab525c3d369ded447057bca5438d86dc3a68f6faafb8269ba82ebf3" +checksum = "77ed9a53e5d4d9c573ae844bfac6872b159cb1d1585a83b29e7a64b7eef7332a" dependencies = [ "glob", "libc", - "libloading 0.7.3", + "libloading", ] [[package]] @@ -839,35 +1051,50 @@ version = "2.34.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a0610544180c38b88101fecf2dd634b174a62eef6946f84dfc6a7127512b381c" dependencies = [ - "bitflags", + "bitflags 1.3.2", "textwrap 0.11.0", "unicode-width", ] [[package]] name = "clap" -version = "3.2.22" +version = "3.2.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86447ad904c7fb335a790c9d7fe3d0d971dc523b8ccd1561a520de9a85302750" +checksum = "71655c45cb9845d3270c9d6df84ebe72b4dad3c2ba3f7023ad47c144e4e473a5" dependencies = [ "atty", - "bitflags", - "clap_derive", - "clap_lex", + "bitflags 1.3.2", + "clap_derive 3.2.18", + "clap_lex 0.2.4", "indexmap", "once_cell", "strsim", "termcolor", - "textwrap 0.15.1", + "textwrap 0.16.0", +] + +[[package]] +name = "clap" +version = "4.1.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42dfd32784433290c51d92c438bb72ea5063797fc3cc9a21a8c4346bebbb2098" +dependencies = [ + "bitflags 2.0.2", + "clap_derive 4.1.9", + "clap_lex 0.3.3", + "is-terminal", + "once_cell", + "strsim", + "termcolor", ] [[package]] name = "clap_complete" -version = "3.2.5" +version = "4.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f7a2e0a962c45ce25afce14220bc24f9dade0a1787f185cecf96bfba7847cd8" +checksum = "37686beaba5ac9f3ab01ee3172f792fc6ffdd685bfb9e63cfef02c0571a4e8e1" dependencies = [ - "clap 3.2.22", + "clap 4.1.11", ] [[package]] @@ -876,11 +1103,24 @@ version = "3.2.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ea0c8bce528c4be4da13ea6fead8965e95b6073585a2f05204bd8f4119f82a65" dependencies = [ - "heck 0.4.0", + "heck 0.4.1", + "proc-macro-error", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "clap_derive" +version = "4.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fddf67631444a3a3e3e5ac51c36a5e01335302de677bd78759eaa90ab1f46644" +dependencies = [ + "heck 0.4.1", "proc-macro-error", "proc-macro2", "quote", - "syn 1.0.102", + "syn 1.0.109", ] [[package]] @@ -893,12 +1133,12 @@ dependencies = [ ] [[package]] -name = "cmake" -version = "0.1.48" +name = "clap_lex" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8ad8cef104ac57b68b89df3208164d228503abbdce70f6880ffa3d970e7443a" +checksum = "033f6b7a4acb1f358c742aaca805c939ee73b4c6209ae4318ec7aca81c42e646" dependencies = [ - "cc", + "os_str_bytes", ] [[package]] @@ -913,35 +1153,35 @@ dependencies = [ [[package]] name = "comfy-table" -version = "5.0.1" +version = "6.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b103d85ca6e209388771bfb7aa6b68a7aeec4afbf6f0a0264bfbf50360e5212e" +checksum = "6e7b787b0dc42e8111badfdbe4c3059158ccb2db8780352fa1b01e8ccf45cc4d" dependencies = [ - "strum 0.23.0", - "strum_macros 0.23.1", + "strum 0.24.1", + "strum_macros 0.24.3", "unicode-width", ] [[package]] name = "concurrent-queue" -version = "1.2.4" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af4780a44ab5696ea9e28294517f1fffb421a83a25af521333c838635509db9c" +checksum = "c278839b831783b70278b14df4d45e1beb1aad306c07bb796637de9a0e323e8e" dependencies = [ - "cache-padded", + "crossbeam-utils", ] [[package]] name = "const-oid" -version = "0.7.1" +version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e4c78c047431fee22c1a7bb92e00ad095a02a983affe4d8a72e2a2c62c1b94f3" +checksum = "520fbf3c07483f94e3e3ca9d0cfd913d7718ef2483d2cfd91c0d9e91474ab913" [[package]] name = "constant_time_eq" -version = "0.1.5" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "245097e9a4535ee1e3e3931fcfcd55a796a44c643e8596ff6566d68f09b87bbc" +checksum = "13418e745008f7349ec7e449155f419a61b92b58a99cc3616942b926825ec76b" [[package]] name = "core-foundation" @@ -988,59 +1228,63 @@ dependencies = [ [[package]] name = "cranelift-bforest" -version = "0.82.3" +version = "0.93.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38faa2a16616c8e78a18d37b4726b98bfd2de192f2fdc8a39ddf568a408a0f75" +checksum = "2bc42ba2e232e5b20ff7dc299a812d53337dadce9a7e39a238e6a5cb82d2e57b" dependencies = [ "cranelift-entity", ] [[package]] name = "cranelift-codegen" -version = "0.82.3" +version = "0.93.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26f192472a3ba23860afd07d2b0217dc628f21fcc72617aa1336d98e1671f33b" +checksum = "253531aca9b6f56103c9420369db3263e784df39aa1c90685a1f69cfbba0623e" dependencies = [ + "arrayvec 0.7.2", + "bumpalo", "cranelift-bforest", "cranelift-codegen-meta", "cranelift-codegen-shared", "cranelift-entity", - "gimli", + "cranelift-isle", + "gimli 0.26.2", + "hashbrown 0.12.3", "log", - "regalloc", + "regalloc2", "smallvec", "target-lexicon", ] [[package]] name = "cranelift-codegen-meta" -version = "0.82.3" +version = "0.93.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f32ddb89e9b89d3d9b36a5b7d7ea3261c98235a76ac95ba46826b8ec40b1a24" +checksum = "72f2154365e2bff1b1b8537a7181591fdff50d8e27fa6e40d5c69c3bad0ca7c8" dependencies = [ "cranelift-codegen-shared", ] [[package]] name = "cranelift-codegen-shared" -version = "0.82.3" +version = "0.93.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01fd0d9f288cc1b42d9333b7a776b17e278fc888c28e6a0f09b5573d45a150bc" +checksum = "687e14e3f5775248930e0d5a84195abef8b829958e9794bf8d525104993612b4" [[package]] name = "cranelift-entity" -version = "0.82.3" +version = "0.93.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e3bfe172b83167604601faf9dc60453e0d0a93415b57a9c4d1a7ae6849185cf" +checksum = "f42ea692c7b450ad18b8c9889661505d51c09ec4380cf1c2d278dbb2da22cae1" dependencies = [ "serde", ] [[package]] name = "cranelift-frontend" -version = "0.82.3" +version = "0.93.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a006e3e32d80ce0e4ba7f1f9ddf66066d052a8c884a110b91d05404d6ce26dce" +checksum = "8483c2db6f45fe9ace984e5adc5d058102227e4c62e5aa2054e16b0275fd3a6e" dependencies = [ "cranelift-codegen", "log", @@ -1048,11 +1292,17 @@ dependencies = [ "target-lexicon", ] +[[package]] +name = "cranelift-isle" +version = "0.93.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e9793158837678902446c411741d87b43f57dadfb944f2440db4287cda8cbd59" + [[package]] name = "cranelift-native" -version = "0.82.3" +version = "0.93.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "501241b0cdf903412ec9075385ac9f2b1eb18a89044d1538e97fab603231f70c" +checksum = "72668c7755f2b880665cb422c8ad2d56db58a88b9bebfef0b73edc2277c13c49" dependencies = [ "cranelift-codegen", "libc", @@ -1061,9 +1311,9 @@ dependencies = [ [[package]] name = "cranelift-wasm" -version = "0.82.3" +version = "0.93.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16d9e4211bbc3268042a96dd4de5bd979cda22434991d035f5f8eacba987fad2" +checksum = "3852ce4b088b44ac4e29459573943009a70d1b192c8d77ef949b4e814f656fc1" dependencies = [ "cranelift-codegen", "cranelift-entity", @@ -1075,6 +1325,21 @@ dependencies = [ "wasmtime-types", ] +[[package]] +name = "crc" +version = "3.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "86ec7a15cbe22e59248fc7eadb1907dab5ba09372595da4d73dd805ed4417dfe" +dependencies = [ + "crc-catalog", +] + +[[package]] +name = "crc-catalog" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9cace84e55f07e7301bae1c519df89cdad8cc3cd868413d3fdbdeca9ff3db484" + [[package]] name = "crc32fast" version = "1.3.2" @@ -1124,9 +1389,9 @@ dependencies = [ [[package]] name = "crossbeam-channel" -version = "0.5.6" +version = "0.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2dd04ddaf88237dc3b8d8f9a3c1004b506b54b3313403944054d23c0870c521" +checksum = "cf2b3e8478797446514c91ef04bafcb59faba183e621ad488df88983cc14128c" dependencies = [ "cfg-if", "crossbeam-utils", @@ -1134,9 +1399,9 @@ dependencies = [ [[package]] name = "crossbeam-deque" -version = "0.8.2" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "715e8152b692bba2d374b53d4875445368fdf21a94751410af607a5ac677d1fc" +checksum = "ce6fd6f855243022dcecf8702fef0c297d4338e226845fe067f6341ad9fa0cef" dependencies = [ "cfg-if", "crossbeam-epoch", @@ -1145,22 +1410,22 @@ dependencies = [ [[package]] name = "crossbeam-epoch" -version = "0.9.11" +version = "0.9.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f916dfc5d356b0ed9dae65f1db9fc9770aa2851d2662b988ccf4fe3516e86348" +checksum = "46bd5f3f85273295a9d14aedfb86f6aadbff6d8f5295c4a9edb08e819dcf5695" dependencies = [ "autocfg", "cfg-if", "crossbeam-utils", - "memoffset", + "memoffset 0.8.0", "scopeguard", ] [[package]] name = "crossbeam-utils" -version = "0.8.12" +version = "0.8.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edbafec5fa1f196ca66527c1b12c2ec4745ca14b50f1ad8f9f6f720b55d11fac" +checksum = "3c063cd8cc95f5c377ed0d4b49a4b21f632396ff690e8470c29b3359b346984b" dependencies = [ "cfg-if", ] @@ -1173,9 +1438,9 @@ checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" [[package]] name = "crypto-bigint" -version = "0.3.2" +version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03c6a1d5fa1de37e071642dfa44ec552ca5b299adb128fab16138e24b548fd21" +checksum = "ef2b4b23cddf68b89b8f8069890e8c270d54e2d5fe1b143820234805e4cb17ef" dependencies = [ "generic-array 0.14.6", "rand_core 0.6.4", @@ -1190,6 +1455,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" dependencies = [ "generic-array 0.14.6", + "rand_core 0.6.4", "typenum", ] @@ -1215,13 +1481,12 @@ dependencies = [ [[package]] name = "csv" -version = "1.1.6" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22813a6dc45b335f9bade10bf7271dc477e81113e89eb251a0bc2a8a81c536e1" +checksum = "0b015497079b9a9d69c02ad25de6c0a6edef051ea6360a327d0bd05802ef64ad" dependencies = [ - "bstr", "csv-core", - "itoa 0.4.8", + "itoa", "ryu", "serde", ] @@ -1237,12 +1502,12 @@ dependencies = [ [[package]] name = "ctor" -version = "0.1.23" +version = "0.1.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cdffe87e1d521a10f9696f833fe502293ea446d7f256c06128293a4119bdf4cb" +checksum = "6d2301688392eb071b0bf1a37be05c469d3cc4dbbd95df672fe28ab021e6a096" dependencies = [ "quote", - "syn 1.0.102", + "syn 1.0.109", ] [[package]] @@ -1251,18 +1516,16 @@ version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "049bb91fb4aaf0e3c7efa6cd5ef877dbbbd15b39dad06d9948de4ec8a75761ea" dependencies = [ - "cipher", + "cipher 0.3.0", ] [[package]] -name = "cuckoofilter" -version = "0.5.0" +name = "ctr" +version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b810a8449931679f64cd7eef1bbd0fa315801b6d5d9cdc1ace2804d6529eee18" +checksum = "0369ee1ad671834580515889b80f2ea915f23b8be8d0daa4bbaf2ac5c7590835" dependencies = [ - "byteorder", - "fnv", - "rand 0.7.3", + "cipher 0.4.4", ] [[package]] @@ -1293,22 +1556,23 @@ dependencies = [ [[package]] name = "curve25519-dalek" -version = "4.0.0-pre.1" +version = "4.0.0-rc.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4033478fbf70d6acf2655ac70da91ee65852d69daf7a67bf7a2f518fb47aafcf" +checksum = "8d4ba9852b42210c7538b75484f9daa0655e9a3ac04f693747bb0f02cf3cfe16" dependencies = [ - "byteorder", - "digest 0.9.0", - "rand_core 0.6.4", + "cfg-if", + "fiat-crypto", + "packed_simd_2", + "platforms 3.0.2", "subtle", "zeroize", ] [[package]] name = "cxx" -version = "1.0.78" +version = "1.0.93" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19f39818dcfc97d45b03953c1292efc4e80954e1583c4aa770bac1383e2310a4" +checksum = "a9c00419335c41018365ddf7e4d5f1c12ee3659ddcf3e01974650ba1de73d038" dependencies = [ "cc", "cxxbridge-flags", @@ -1318,9 +1582,9 @@ dependencies = [ [[package]] name = "cxx-build" -version = "1.0.78" +version = "1.0.93" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e580d70777c116df50c390d1211993f62d40302881e54d4b79727acb83d0199" +checksum = "fb8307ad413a98fff033c8545ecf133e3257747b3bae935e7602aab8aa92d4ca" dependencies = [ "cc", "codespan-reporting", @@ -1328,31 +1592,66 @@ dependencies = [ "proc-macro2", "quote", "scratch", - "syn 1.0.102", + "syn 2.0.2", ] [[package]] name = "cxxbridge-flags" -version = "1.0.78" +version = "1.0.93" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56a46460b88d1cec95112c8c363f0e2c39afdb237f60583b0b36343bf627ea9c" +checksum = "edc52e2eb08915cb12596d29d55f0b5384f00d697a646dbd269b6ecb0fbd9d31" [[package]] name = "cxxbridge-macro" -version = "1.0.78" +version = "1.0.93" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "631569015d0d8d54e6c241733f944042623ab6df7bc3be7466874b05fcdb1c5f" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.2", +] + +[[package]] +name = "darling" +version = "0.14.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b750cb3417fd1b327431a470f388520309479ab0bf5e323505daf0290cd3850" +dependencies = [ + "darling_core", + "darling_macro", +] + +[[package]] +name = "darling_core" +version = "0.14.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "747b608fecf06b0d72d440f27acc99288207324b793be2c17991839f3d4995ea" +checksum = "109c1ca6e6b7f82cc233a97004ea8ed7ca123a9af07a8230878fcfda9b158bf0" dependencies = [ + "fnv", + "ident_case", "proc-macro2", "quote", - "syn 1.0.102", + "strsim", + "syn 1.0.109", +] + +[[package]] +name = "darling_macro" +version = "0.14.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4aab4dbc9f7611d8b55048a3a16d2d010c2c8334e46304b40ac1cc14bf3b48e" +dependencies = [ + "darling_core", + "quote", + "syn 1.0.109", ] [[package]] name = "data-encoding" -version = "2.3.2" +version = "2.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ee2393c4a91429dffb4bedf19f4d6abf27d8a732c8ce4980305d782e5426d57" +checksum = "23d8666cb01533c39dde32bcbab8e227b4ed6679b2c925eba05feabea39508fb" [[package]] name = "data-encoding-macro" @@ -1371,16 +1670,46 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a5bbed42daaa95e780b60a50546aa345b8413a1e46f9a40a12907d3598f038db" dependencies = [ "data-encoding", - "syn 1.0.102", + "syn 1.0.109", ] [[package]] name = "der" -version = "0.5.1" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6919815d73839e7ad218de758883aae3a257ba6759ce7a9992501efbb53d705c" +checksum = "f1a467a65c5e759bce6e65eaf91cc29f466cdc57cb65777bd646872a8a1fd4de" dependencies = [ "const-oid", + "pem-rfc7468", + "zeroize", +] + +[[package]] +name = "der-parser" +version = "7.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fe398ac75057914d7d07307bf67dc7f3f574a26783b4fc7805a20ffa9f506e82" +dependencies = [ + "asn1-rs 0.3.1", + "displaydoc", + "nom", + "num-bigint", + "num-traits", + "rusticata-macros", +] + +[[package]] +name = "der-parser" +version = "8.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dbd676fbbab537128ef0278adb5576cf363cff6aa22a7b24effe97347cfab61e" +dependencies = [ + "asn1-rs 0.5.2", + "displaydoc", + "nom", + "num-bigint", + "num-traits", + "rusticata-macros", ] [[package]] @@ -1389,7 +1718,7 @@ version = "0.1.0" dependencies = [ "proc-macro2", "quote", - "syn 1.0.102", + "syn 1.0.109", ] [[package]] @@ -1400,7 +1729,49 @@ checksum = "3418329ca0ad70234b9735dc4ceed10af4df60eff9c8e7b06cb5e520d92c3535" dependencies = [ "proc-macro2", "quote", - "syn 1.0.102", + "syn 1.0.109", +] + +[[package]] +name = "derive-syn-parse" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e79116f119dd1dba1abf1f3405f03b9b0e79a27a3883864bfebded8a3dc768cd" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "derive_builder" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d07adf7be193b71cc36b193d0f5fe60b918a3a9db4dad0449f57bcfd519704a3" +dependencies = [ + "derive_builder_macro", +] + +[[package]] +name = "derive_builder_core" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f91d4cfa921f1c05904dc3c57b4a32c38aed3340cce209f3a6fd1478babafc4" +dependencies = [ + "darling", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "derive_builder_macro" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f0314b72bed045f3a68671b3c86328386762c93f82d98c65c3cb5e5f573dd68" +dependencies = [ + "derive_builder_core", + "syn 1.0.109", ] [[package]] @@ -1411,7 +1782,7 @@ checksum = "4fb810d30a7c1953f91334de7244731fc3f3c10d7fe163338a35b9f640960321" dependencies = [ "proc-macro2", "quote", - "syn 1.0.102", + "syn 1.0.109", ] [[package]] @@ -1440,11 +1811,11 @@ dependencies = [ [[package]] name = "digest" -version = "0.10.5" +version = "0.10.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adfbc57365a37acbd2ebf2b64d7e69bb766e2fea813521ed536f5d0520dcf86c" +checksum = "8168378f4e5023e7218c89c891c0fd8ecdb5e5e4f18cb78f38cf245dd021e76f" dependencies = [ - "block-buffer 0.10.3", + "block-buffer 0.10.4", "crypto-common", "subtle", ] @@ -1491,13 +1862,14 @@ dependencies = [ ] [[package]] -name = "dns-parser" -version = "0.8.0" +name = "displaydoc" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4d33be9473d06f75f58220f71f7a9317aca647dc061dbd3c361b0bef505fbea" +checksum = "3bf95dc3f046b9da4f2d51833c0d3547d8564ef6910f5c1ed130306a75b92886" dependencies = [ - "byteorder", - "quick-error", + "proc-macro2", + "quote", + "syn 1.0.109", ] [[package]] @@ -1506,6 +1878,12 @@ version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fea41bba32d969b513997752735605054bc0dfa92b4c56bf1189f2e174be7a10" +[[package]] +name = "downcast" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1435fa1053d8b2fbbe9be7e97eca7f33d37b28409959813daefc1446a14247f1" + [[package]] name = "downcast-rs" version = "1.2.0" @@ -1514,9 +1892,9 @@ checksum = "9ea835d29036a4087793836fa931b08837ad5e957da9e23886b29586fb9b6650" [[package]] name = "dtoa" -version = "1.0.4" +version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8a6eee2d5d0d113f015688310da018bd1d864d86bd567c8fca9c266889e1bfa" +checksum = "65d09067bfacaa79114679b279d7f5885b53295b1e2cfb4e79c8e4bd3d633169" [[package]] name = "dyn-clonable" @@ -1536,20 +1914,20 @@ checksum = "558e40ea573c374cf53507fd240b7ee2f5477df7cfebdb97323ec61c719399c5" dependencies = [ "proc-macro2", "quote", - "syn 1.0.102", + "syn 1.0.109", ] [[package]] name = "dyn-clone" -version = "1.0.9" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f94fa09c2aeea5b8839e414b7b841bf429fd25b9c522116ac97ee87856d88b2" +checksum = "68b0cf012f1230e43cd00ebb729c6bb58707ecfa8ad08b52ef3a4ccd2697fc30" [[package]] name = "ecdsa" -version = "0.13.4" +version = "0.14.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0d69ae62e0ce582d56380743515fefaf1a8c70cec685d9677636d7e30ae9dc9" +checksum = "413301934810f597c1d19ca71c8710e99a3f1ba28a0d2ebc01551a2daeea3c5c" dependencies = [ "der", "elliptic-curve", @@ -1559,9 +1937,9 @@ dependencies = [ [[package]] name = "ed25519" -version = "1.5.2" +version = "1.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e9c280362032ea4203659fc489832d0204ef09f247a0506f170dafcac08c369" +checksum = "91cff35c70bba8a626e3185d8cd48cc11b5437e1a5bcd15b9b5fa3c64b6dfee7" dependencies = [ "signature", ] @@ -1580,24 +1958,42 @@ dependencies = [ "zeroize", ] +[[package]] +name = "ed25519-zebra" +version = "3.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c24f403d068ad0b359e577a77f92392118be3f3c927538f2bb544a5ecd828c6" +dependencies = [ + "curve25519-dalek 3.2.0", + "hashbrown 0.12.3", + "hex", + "rand_core 0.6.4", + "sha2 0.9.9", + "zeroize", +] + [[package]] name = "either" -version = "1.8.0" +version = "1.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90e5c1c8368803113bf0c9584fc495a58b86dc8a29edbf8fe877d21d9507e797" +checksum = "7fcaabb2fef8c910e7f4c7ce9f67a1283a1715879a7c230ca9d6d1ae31f16d91" [[package]] name = "elliptic-curve" -version = "0.11.12" +version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25b477563c2bfed38a3b7a60964c49e058b2510ad3f12ba3483fd8f62c2306d6" +checksum = "e7bb888ab5300a19b8e5bceef25ac745ad065f3c9f7efc6de1b91958110891d3" dependencies = [ "base16ct", "crypto-bigint", "der", + "digest 0.10.6", "ff", "generic-array 0.14.6", "group", + "hkdf", + "pem-rfc7468", + "pkcs8", "rand_core 0.6.4", "sec1", "subtle", @@ -1606,14 +2002,14 @@ dependencies = [ [[package]] name = "enum-as-inner" -version = "0.4.0" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21cdad81446a7f7dc43f6a77409efeb9733d2fa65553efef6018ef257c959b73" +checksum = "c9720bba047d567ffc8a3cba48bf19126600e249ab7f128e9233e6376976a116" dependencies = [ - "heck 0.4.0", + "heck 0.4.1", "proc-macro2", "quote", - "syn 1.0.102", + "syn 1.0.109", ] [[package]] @@ -1627,7 +2023,7 @@ dependencies = [ "proc-macro2", "quote", "serde_derive_internals", - "syn 1.0.102", + "syn 1.0.109", ] [[package]] @@ -1642,12 +2038,12 @@ dependencies = [ [[package]] name = "env_logger" -version = "0.9.1" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c90bf5f19754d10198ccb95b70664fc925bd1fc090a0fd9a6ebc54acc8cd6272" +checksum = "85cdab6a89accf66733ad5a1693a4dcced6aeff64602b634530dd73c1f3ee9f0" dependencies = [ - "atty", "humantime", + "is-terminal", "log", "regex", "termcolor", @@ -1655,9 +2051,9 @@ dependencies = [ [[package]] name = "environmental" -version = "1.1.3" +version = "1.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68b91989ae21441195d7d9b9993a2f9295c7e1a8c96255d8b729accddc124797" +checksum = "e48c92028aaa870e83d51c64e5d4e0b6981b360c522198c23959f219a4e1b15b" [[package]] name = "errno" @@ -1695,6 +2091,19 @@ dependencies = [ "futures", ] +[[package]] +name = "expander" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f360349150728553f92e4c997a16af8915f418d3a0f21b440d34c5632f16ed84" +dependencies = [ + "blake2", + "fs-err", + "proc-macro2", + "quote", + "syn 1.0.109", +] + [[package]] name = "failure" version = "0.1.8" @@ -1718,9 +2127,9 @@ checksum = "4443176a9f2c162692bd3d352d745ef9413eec5782a80d8fd6f8a1ac692a07f7" [[package]] name = "fastrand" -version = "1.8.0" +version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7a407cfaa3385c4ae6b23e84623d48c2798d06e3e6a1878f7f59f17b3f86499" +checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be" dependencies = [ "instant", ] @@ -1736,29 +2145,47 @@ dependencies = [ [[package]] name = "ff" -version = "0.11.1" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "131655483be284720a17d74ff97592b8e76576dc25563148601df2d7c9080924" +checksum = "d013fc25338cc558c5c2cfbad646908fb23591e2404481826742b651c9af7160" dependencies = [ "rand_core 0.6.4", "subtle", ] +[[package]] +name = "fiat-crypto" +version = "0.1.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93ace6ec7cc19c8ed33a32eaa9ea692d7faea05006b5356b9e2b668ec4bc3955" + [[package]] name = "file-per-thread-logger" -version = "0.1.5" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21e16290574b39ee41c71aeb90ae960c504ebaf1e2a1c87bd52aa56ed6e1a02f" +checksum = "84f2e425d9790201ba4af4630191feac6dcc98765b118d4d18e91d23c2353866" dependencies = [ "env_logger", "log", ] +[[package]] +name = "filetime" +version = "0.2.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a3de6e8d11b22ff9edc6d916f890800597d60f8b2da1caf2955c274638d6412" +dependencies = [ + "cfg-if", + "libc", + "redox_syscall", + "windows-sys 0.45.0", +] + [[package]] name = "finality-grandpa" -version = "0.15.0" +version = "0.16.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9def033d8505edf199f6a5d07aa7e6d2d6185b164293b77f0efd108f4f3e11d" +checksum = "36530797b9bf31cd4ff126dcfee8170f86b00cfdcea3269d73133cc0415945c3" dependencies = [ "either", "futures", @@ -1766,15 +2193,15 @@ dependencies = [ "log", "num-traits", "parity-scale-codec", - "parking_lot 0.11.2", + "parking_lot 0.12.1", "scale-info", ] [[package]] name = "fixed-hash" -version = "0.7.0" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cfcf0ed7fe52a17a03854ec54a9f76d6d84508d1c0e66bc1793301c73fc8493c" +checksum = "835c052cb0c08c1acf6ffd71c022172e18723949c8282f2b9f27efbc51e64534" dependencies = [ "byteorder", "rand 0.8.5", @@ -1790,15 +2217,24 @@ checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" [[package]] name = "flate2" -version = "1.0.24" +version = "1.0.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f82b0f4c27ad9f8bfd1f3208d882da2b09c301bc1c828fd3a00d0216d2fbbff6" +checksum = "a8a2db397cb1c8772f31494cb8917e48cd1e64f0fa7efac59fbd741a0a8ce841" dependencies = [ "crc32fast", "libz-sys", "miniz_oxide", ] +[[package]] +name = "float-cmp" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "98de4bbd547a563b716d8dfa9aad1cb19bfab00f4fa09a6a4ed21dbcf44ce9c4" +dependencies = [ + "num-traits", +] + [[package]] name = "fnv" version = "1.0.7" @@ -1808,7 +2244,7 @@ checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" [[package]] name = "fork-tree" version = "3.0.0" -source = "git+https://github.com/joystream/substrate.git?rev=d29a53b11c3e530d1656eef502cb0f1f8fff3522#d29a53b11c3e530d1656eef502cb0f1f8fff3522" +source = "git+https://github.com/joystream/substrate.git?rev=1d0eefca86ef31b9e7727df01a6ed23ad65491e9#1d0eefca86ef31b9e7727df01a6ed23ad65491e9" dependencies = [ "parity-scale-codec", ] @@ -1822,52 +2258,59 @@ dependencies = [ "percent-encoding", ] +[[package]] +name = "fragile" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c2141d6d6c8512188a7891b4b01590a45f6dac67afb4f255c4124dbb86d4eaa" + [[package]] name = "frame-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/joystream/substrate.git?rev=d29a53b11c3e530d1656eef502cb0f1f8fff3522#d29a53b11c3e530d1656eef502cb0f1f8fff3522" +source = "git+https://github.com/joystream/substrate.git?rev=1d0eefca86ef31b9e7727df01a6ed23ad65491e9#1d0eefca86ef31b9e7727df01a6ed23ad65491e9" dependencies = [ "frame-support", + "frame-support-procedural", "frame-system", "linregress", "log", "parity-scale-codec", - "paste 1.0.9", + "paste 1.0.12", "scale-info", "serde", "sp-api", "sp-application-crypto", + "sp-core", "sp-io", "sp-runtime", "sp-runtime-interface", "sp-std", "sp-storage", + "static_assertions", ] [[package]] name = "frame-benchmarking-cli" version = "4.0.0-dev" -source = "git+https://github.com/joystream/substrate.git?rev=d29a53b11c3e530d1656eef502cb0f1f8fff3522#d29a53b11c3e530d1656eef502cb0f1f8fff3522" +source = "git+https://github.com/joystream/substrate.git?rev=1d0eefca86ef31b9e7727df01a6ed23ad65491e9#1d0eefca86ef31b9e7727df01a6ed23ad65491e9" dependencies = [ "Inflector", + "array-bytes", "chrono", - "clap 3.2.22", + "clap 4.1.11", "comfy-table", "frame-benchmarking", "frame-support", "frame-system", + "gethostname", "handlebars", - "hash-db", - "hex", "itertools", - "kvdb", "lazy_static", "linked-hash-map", "log", - "memory-db", "parity-scale-codec", "rand 0.8.5", - "rand_pcg 0.3.1", + "rand_pcg", "sc-block-builder", "sc-cli", "sc-client-api", @@ -1877,7 +2320,6 @@ dependencies = [ "sc-sysinfo", "serde", "serde_json", - "serde_nanos", "sp-api", "sp-blockchain", "sp-core", @@ -1887,9 +2329,9 @@ dependencies = [ "sp-keystore", "sp-runtime", "sp-state-machine", + "sp-std", "sp-storage", "sp-trie", - "tempfile", "thiserror", "thousands", ] @@ -1897,18 +2339,18 @@ dependencies = [ [[package]] name = "frame-election-provider-solution-type" version = "4.0.0-dev" -source = "git+https://github.com/joystream/substrate.git?rev=d29a53b11c3e530d1656eef502cb0f1f8fff3522#d29a53b11c3e530d1656eef502cb0f1f8fff3522" +source = "git+https://github.com/joystream/substrate.git?rev=1d0eefca86ef31b9e7727df01a6ed23ad65491e9#1d0eefca86ef31b9e7727df01a6ed23ad65491e9" dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn 1.0.102", + "syn 1.0.109", ] [[package]] name = "frame-election-provider-support" version = "4.0.0-dev" -source = "git+https://github.com/joystream/substrate.git?rev=d29a53b11c3e530d1656eef502cb0f1f8fff3522#d29a53b11c3e530d1656eef502cb0f1f8fff3522" +source = "git+https://github.com/joystream/substrate.git?rev=1d0eefca86ef31b9e7727df01a6ed23ad65491e9#1d0eefca86ef31b9e7727df01a6ed23ad65491e9" dependencies = [ "frame-election-provider-solution-type", "frame-support", @@ -1916,6 +2358,7 @@ dependencies = [ "parity-scale-codec", "scale-info", "sp-arithmetic", + "sp-core", "sp-npos-elections", "sp-runtime", "sp-std", @@ -1924,10 +2367,11 @@ dependencies = [ [[package]] name = "frame-executive" version = "4.0.0-dev" -source = "git+https://github.com/joystream/substrate.git?rev=d29a53b11c3e530d1656eef502cb0f1f8fff3522#d29a53b11c3e530d1656eef502cb0f1f8fff3522" +source = "git+https://github.com/joystream/substrate.git?rev=1d0eefca86ef31b9e7727df01a6ed23ad65491e9#1d0eefca86ef31b9e7727df01a6ed23ad65491e9" dependencies = [ "frame-support", "frame-system", + "frame-try-runtime", "parity-scale-codec", "scale-info", "sp-core", @@ -1949,12 +2393,29 @@ dependencies = [ "serde", ] +[[package]] +name = "frame-remote-externalities" +version = "0.10.0-dev" +source = "git+https://github.com/joystream/substrate.git?rev=1d0eefca86ef31b9e7727df01a6ed23ad65491e9#1d0eefca86ef31b9e7727df01a6ed23ad65491e9" +dependencies = [ + "futures", + "log", + "parity-scale-codec", + "serde", + "sp-core", + "sp-io", + "sp-runtime", + "substrate-rpc-client", + "tokio", +] + [[package]] name = "frame-support" version = "4.0.0-dev" -source = "git+https://github.com/joystream/substrate.git?rev=d29a53b11c3e530d1656eef502cb0f1f8fff3522#d29a53b11c3e530d1656eef502cb0f1f8fff3522" +source = "git+https://github.com/joystream/substrate.git?rev=1d0eefca86ef31b9e7727df01a6ed23ad65491e9#1d0eefca86ef31b9e7727df01a6ed23ad65491e9" dependencies = [ - "bitflags", + "bitflags 1.3.2", + "environmental", "frame-metadata", "frame-support-procedural", "impl-trait-for-tuples", @@ -1962,10 +2423,11 @@ dependencies = [ "log", "once_cell", "parity-scale-codec", - "paste 1.0.9", + "paste 1.0.12", "scale-info", "serde", "smallvec", + "sp-api", "sp-arithmetic", "sp-core", "sp-core-hashing-proc-macro", @@ -1976,47 +2438,51 @@ dependencies = [ "sp-state-machine", "sp-std", "sp-tracing", + "sp-weights", "tt-call", ] [[package]] name = "frame-support-procedural" version = "4.0.0-dev" -source = "git+https://github.com/joystream/substrate.git?rev=d29a53b11c3e530d1656eef502cb0f1f8fff3522#d29a53b11c3e530d1656eef502cb0f1f8fff3522" +source = "git+https://github.com/joystream/substrate.git?rev=1d0eefca86ef31b9e7727df01a6ed23ad65491e9#1d0eefca86ef31b9e7727df01a6ed23ad65491e9" dependencies = [ "Inflector", + "cfg-expr", + "derive-syn-parse", "frame-support-procedural-tools", + "itertools", "proc-macro2", "quote", - "syn 1.0.102", + "syn 1.0.109", ] [[package]] name = "frame-support-procedural-tools" version = "4.0.0-dev" -source = "git+https://github.com/joystream/substrate.git?rev=d29a53b11c3e530d1656eef502cb0f1f8fff3522#d29a53b11c3e530d1656eef502cb0f1f8fff3522" +source = "git+https://github.com/joystream/substrate.git?rev=1d0eefca86ef31b9e7727df01a6ed23ad65491e9#1d0eefca86ef31b9e7727df01a6ed23ad65491e9" dependencies = [ "frame-support-procedural-tools-derive", "proc-macro-crate", "proc-macro2", "quote", - "syn 1.0.102", + "syn 1.0.109", ] [[package]] name = "frame-support-procedural-tools-derive" version = "3.0.0" -source = "git+https://github.com/joystream/substrate.git?rev=d29a53b11c3e530d1656eef502cb0f1f8fff3522#d29a53b11c3e530d1656eef502cb0f1f8fff3522" +source = "git+https://github.com/joystream/substrate.git?rev=1d0eefca86ef31b9e7727df01a6ed23ad65491e9#1d0eefca86ef31b9e7727df01a6ed23ad65491e9" dependencies = [ "proc-macro2", "quote", - "syn 1.0.102", + "syn 1.0.109", ] [[package]] name = "frame-system" version = "4.0.0-dev" -source = "git+https://github.com/joystream/substrate.git?rev=d29a53b11c3e530d1656eef502cb0f1f8fff3522#d29a53b11c3e530d1656eef502cb0f1f8fff3522" +source = "git+https://github.com/joystream/substrate.git?rev=1d0eefca86ef31b9e7727df01a6ed23ad65491e9#1d0eefca86ef31b9e7727df01a6ed23ad65491e9" dependencies = [ "frame-support", "log", @@ -2028,12 +2494,13 @@ dependencies = [ "sp-runtime", "sp-std", "sp-version", + "sp-weights", ] [[package]] name = "frame-system-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/joystream/substrate.git?rev=d29a53b11c3e530d1656eef502cb0f1f8fff3522#d29a53b11c3e530d1656eef502cb0f1f8fff3522" +source = "git+https://github.com/joystream/substrate.git?rev=1d0eefca86ef31b9e7727df01a6ed23ad65491e9#1d0eefca86ef31b9e7727df01a6ed23ad65491e9" dependencies = [ "frame-benchmarking", "frame-support", @@ -2048,24 +2515,30 @@ dependencies = [ [[package]] name = "frame-system-rpc-runtime-api" version = "4.0.0-dev" -source = "git+https://github.com/joystream/substrate.git?rev=d29a53b11c3e530d1656eef502cb0f1f8fff3522#d29a53b11c3e530d1656eef502cb0f1f8fff3522" +source = "git+https://github.com/joystream/substrate.git?rev=1d0eefca86ef31b9e7727df01a6ed23ad65491e9#1d0eefca86ef31b9e7727df01a6ed23ad65491e9" dependencies = [ "parity-scale-codec", "sp-api", ] [[package]] -name = "fs-swap" -version = "0.2.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03d47dad3685eceed8488986cad3d5027165ea5edb164331770e2059555f10a5" +name = "frame-try-runtime" +version = "0.10.0-dev" +source = "git+https://github.com/joystream/substrate.git?rev=1d0eefca86ef31b9e7727df01a6ed23ad65491e9#1d0eefca86ef31b9e7727df01a6ed23ad65491e9" dependencies = [ - "lazy_static", - "libc", - "libloading 0.5.2", - "winapi", + "frame-support", + "parity-scale-codec", + "sp-api", + "sp-runtime", + "sp-std", ] +[[package]] +name = "fs-err" +version = "2.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0845fa252299212f0389d64ba26f34fa32cfe41588355f21ed507c59a0f64541" + [[package]] name = "fs2" version = "0.4.3" @@ -2077,10 +2550,15 @@ dependencies = [ ] [[package]] -name = "fs_extra" -version = "1.2.0" +name = "fs4" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2022715d62ab30faffd124d40b76f4134a550a87792276512b18d63272333394" +checksum = "8ea55201cc351fdb478217c0fb641b59813da9b4efe4c414a9d8f989a657d149" +dependencies = [ + "libc", + "rustix 0.35.15", + "winapi", +] [[package]] name = "funty" @@ -2090,9 +2568,9 @@ checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" [[package]] name = "futures" -version = "0.3.24" +version = "0.3.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f21eda599937fba36daeb58a22e8f5cee2d14c4a17b5b7739c7c8e5e3b8230c" +checksum = "531ac96c6ff5fd7c62263c5e3c67a603af4fcaee2e1a0ae5565ba3a11e69e549" dependencies = [ "futures-channel", "futures-core", @@ -2105,9 +2583,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.24" +version = "0.3.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30bdd20c28fadd505d0fd6712cdfcb0d4b5648baf45faef7f852afb2399bb050" +checksum = "164713a5a0dcc3e7b4b1ed7d3b433cabc18025386f9339346e8daf15963cf7ac" dependencies = [ "futures-core", "futures-sink", @@ -2115,15 +2593,15 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.24" +version = "0.3.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e5aa3de05362c3fb88de6531e6296e85cde7739cccad4b9dfeeb7f6ebce56bf" +checksum = "86d7a0c1aa76363dac491de0ee99faf6941128376f1cf96f07db7603b7de69dd" [[package]] name = "futures-executor" -version = "0.3.24" +version = "0.3.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ff63c23854bee61b6e9cd331d523909f238fc7636290b96826e9cfa5faa00ab" +checksum = "1997dd9df74cdac935c76252744c1ed5794fac083242ea4fe77ef3ed60ba0f83" dependencies = [ "futures-core", "futures-task", @@ -2133,9 +2611,9 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.24" +version = "0.3.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbf4d2a7a308fd4578637c0b17c7e1c7ba127b8f6ba00b29f717e9655d85eb68" +checksum = "89d422fa3cbe3b40dca574ab087abb5bc98258ea57eea3fd6f1fa7162c778b91" [[package]] name = "futures-lite" @@ -2154,13 +2632,13 @@ dependencies = [ [[package]] name = "futures-macro" -version = "0.3.24" +version = "0.3.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42cd15d1c7456c04dbdf7e88bcd69760d74f3a798d6444e16974b505b0e62f17" +checksum = "3eb14ed937631bd8b8b8977f2c198443447a8355b6e3ca599f38c975e5a963b6" dependencies = [ "proc-macro2", "quote", - "syn 1.0.102", + "syn 1.0.109", ] [[package]] @@ -2170,21 +2648,21 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d2411eed028cdf8c8034eaf21f9915f956b6c3abec4d4c7949ee67f0721127bd" dependencies = [ "futures-io", - "rustls", - "webpki", + "rustls 0.20.8", + "webpki 0.22.0", ] [[package]] name = "futures-sink" -version = "0.3.24" +version = "0.3.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21b20ba5a92e727ba30e72834706623d94ac93a725410b6a6b6fbc1b07f7ba56" +checksum = "ec93083a4aecafb2a80a885c9de1f0ccae9dbd32c2bb54b0c3a65690e0b8d2f2" [[package]] name = "futures-task" -version = "0.3.24" +version = "0.3.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a6508c467c73851293f390476d4491cf4d227dbabcd4170f3bb6044959b294f1" +checksum = "fd65540d33b37b16542a0438c12e6aeead10d4ac5d05bd3f805b8f35ab592879" [[package]] name = "futures-timer" @@ -2194,9 +2672,9 @@ checksum = "e64b03909df88034c26dc1547e8970b91f98bdb65165d6a4e9110d94263dbb2c" [[package]] name = "futures-util" -version = "0.3.24" +version = "0.3.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44fb6cb1be61cc1d2e43b262516aafcf63b241cffdb1d3fa115f91d9c7b09c90" +checksum = "3ef6b17e481503ec85211fed8f39d1970f128935ca1f814cd32ac4a6842e84ab" dependencies = [ "futures-channel", "futures-core", @@ -2210,6 +2688,15 @@ dependencies = [ "slab", ] +[[package]] +name = "fxhash" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c31b6d751ae2c7f11320402d34e41349dd1016f8d5d45e48c4312bc8625af50c" +dependencies = [ + "byteorder", +] + [[package]] name = "generic-array" version = "0.12.4" @@ -2229,6 +2716,16 @@ dependencies = [ "version_check", ] +[[package]] +name = "gethostname" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1ebd34e35c46e00bb73e81363248d627782724609fe1b6396f553f68fe3862e" +dependencies = [ + "libc", + "winapi", +] + [[package]] name = "getrandom" version = "0.1.16" @@ -2236,17 +2733,15 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce" dependencies = [ "cfg-if", - "js-sys", "libc", "wasi 0.9.0+wasi-snapshot-preview1", - "wasm-bindgen", ] [[package]] name = "getrandom" -version = "0.2.7" +version = "0.2.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4eb1a864a501629691edf6c15a593b7a51eebaa1e8468e9ddc623de7c9b58ec6" +checksum = "c05aeb6a22b8f62540c194aac980f2115af067bfe15a0734d7277a768d396b31" dependencies = [ "cfg-if", "js-sys", @@ -2262,7 +2757,17 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1583cc1656d7839fd3732b80cf4f38850336cdb9b8ded1cd399ca62958de3c99" dependencies = [ "opaque-debug 0.3.0", - "polyval", + "polyval 0.5.3", +] + +[[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 0.6.0", ] [[package]] @@ -2276,17 +2781,23 @@ dependencies = [ "stable_deref_trait", ] +[[package]] +name = "gimli" +version = "0.27.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad0a93d233ebf96623465aad4046a8d3aa4da22d4f4beba5388838c8a434bbb4" + [[package]] name = "glob" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b919933a397b79c37e33b77bb2aa3dc8eb6e165ad809e58ff75bc7db2e34574" +checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" [[package]] name = "globset" -version = "0.4.9" +version = "0.4.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a1e17342619edbc21a964c2afbeb6c820c6a2560032872f397bb97ea127bd0a" +checksum = "029d74589adefde59de1a0c4f4732695c32805624aec7b68d91503d4dba79afc" dependencies = [ "aho-corasick", "bstr", @@ -2297,9 +2808,9 @@ dependencies = [ [[package]] name = "gloo-timers" -version = "0.2.4" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5fb7d06c1c8cc2a29bee7ec961009a0b2caa0793ee4900c2ffb348734ba1c8f9" +checksum = "9b995a66bb87bebce9a0f4a95aed01daca4872c050bfcb21653361c03bc35e5c" dependencies = [ "futures-channel", "futures-core", @@ -2309,9 +2820,9 @@ dependencies = [ [[package]] name = "group" -version = "0.11.0" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc5ac374b108929de78460075f3dc439fa66df9d8fc77e8f12caa5165fcf0c89" +checksum = "5dfbfb3a6cfbd390d5c9564ab283a0349b9b9fcd46a706c1eb10e0db70bfbac7" dependencies = [ "ff", "rand_core 0.6.4", @@ -2320,9 +2831,9 @@ dependencies = [ [[package]] name = "h2" -version = "0.3.14" +version = "0.3.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ca32592cf21ac7ccab1825cd87f6c9b3d9022c44d086172ed0966bec8af30be" +checksum = "5be7b54589b581f624f566bf5d8eb2bab1db736c51528720b6bd36b96b55924d" dependencies = [ "bytes", "fnv", @@ -2345,9 +2856,9 @@ checksum = "eabb4a44450da02c90444cf74558da904edde8fb4e9035a9a6a4e15445af0bd7" [[package]] name = "handlebars" -version = "4.3.5" +version = "4.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "433e4ab33f1213cdc25b5fa45c76881240cfe79284cf2b395e8b9e312a30a2fd" +checksum = "035ef95d03713f2c347a72547b7cd38cbc9af7cd51e6099fb62d586d4a6dee3a" dependencies = [ "log", "pest", @@ -2359,9 +2870,9 @@ dependencies = [ [[package]] name = "hash-db" -version = "0.15.2" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d23bd4e7b5eda0d0f3a307e8b381fdc8ba9000f26fbe912250c0a4cc3956364a" +checksum = "8e7d7786361d7425ae2fe4f9e407eb0efaa0840f5212d109cc018c40c35c6ab4" [[package]] name = "hash256-std-hasher" @@ -2378,7 +2889,16 @@ version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" dependencies = [ - "ahash", + "ahash 0.7.6", +] + +[[package]] +name = "hashbrown" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e" +dependencies = [ + "ahash 0.8.3", ] [[package]] @@ -2392,9 +2912,9 @@ dependencies = [ [[package]] name = "heck" -version = "0.4.0" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2540771e65fc8cb83cd6e8a237f70c319bd5c29f78ed1084ba5d50eeac86f7f9" +checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" [[package]] name = "hermit-abi" @@ -2405,6 +2925,21 @@ dependencies = [ "libc", ] +[[package]] +name = "hermit-abi" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee512640fe35acbfb4bb779db6f0d80704c2cacfa2e39b601ef3e3f47d1ae4c7" +dependencies = [ + "libc", +] + +[[package]] +name = "hermit-abi" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fed44880c466736ef9a5c5b5facefb5ed0785676d0c02d612db14e54f0d84286" + [[package]] name = "hex" version = "0.4.3" @@ -2418,10 +2953,13 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7ebdb29d2ea9ed0083cd8cece49bbd968021bd99b0849edb4a9a7ee0fdf6a4e0" [[package]] -name = "hex_fmt" -version = "0.3.0" +name = "hkdf" +version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b07f60793ff0a4d9cef0f18e63b5357e06209987153a64648c972c1e5aff336f" +checksum = "791a029f6b9fc27657f6f188ec6e5e43f6911f6f878e0dc5501396e09809d437" +dependencies = [ + "hmac 0.12.1", +] [[package]] name = "hmac" @@ -2443,6 +2981,15 @@ dependencies = [ "digest 0.9.0", ] +[[package]] +name = "hmac" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" +dependencies = [ + "digest 0.10.6", +] + [[package]] name = "hmac-drbg" version = "0.3.0" @@ -2467,13 +3014,13 @@ dependencies = [ [[package]] name = "http" -version = "0.2.8" +version = "0.2.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75f43d41e26995c17e71ee126451dd3941010b0514a81a9d11f3b341debc2399" +checksum = "bd6effc99afb63425aff9b05836f029929e345a6148a14b7ecd5ab67af944482" dependencies = [ "bytes", "fnv", - "itoa 1.0.4", + "itoa", ] [[package]] @@ -2487,6 +3034,12 @@ dependencies = [ "pin-project-lite 0.2.9", ] +[[package]] +name = "http-range-header" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0bfe8eed0a9285ef776bb792479ea3834e8b94e13d615c2f66d03dd50a435a29" + [[package]] name = "httparse" version = "1.8.0" @@ -2507,9 +3060,9 @@ checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" [[package]] name = "hyper" -version = "0.14.20" +version = "0.14.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02c929dc5c39e335a03c405292728118860721b10190d98c2a0f0efd5baafbac" +checksum = "cc5e554ff619822309ffd57d8734d77cd5ce6238bc956f037ea06c58238c9899" dependencies = [ "bytes", "futures-channel", @@ -2520,7 +3073,7 @@ dependencies = [ "http-body", "httparse", "httpdate", - "itoa 1.0.4", + "itoa", "pin-project-lite 0.2.9", "socket2", "tokio", @@ -2531,14 +3084,14 @@ dependencies = [ [[package]] name = "hyper-rustls" -version = "0.23.0" +version = "0.23.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d87c48c02e0dc5e3b849a2041db3029fd066650f8f717c07bf8ed78ccb895cac" +checksum = "1788965e61b367cd03a62950836d5cd41560c3577d90e40e0819373194d1661c" dependencies = [ "http", "hyper", "log", - "rustls", + "rustls 0.20.8", "rustls-native-certs", "tokio", "tokio-rustls", @@ -2546,9 +3099,9 @@ dependencies = [ [[package]] name = "iana-time-zone" -version = "0.1.51" +version = "0.1.53" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f5a6ef98976b22b3b7f2f3a806f858cb862044cfa66805aa3ad84cb3d3b785ed" +checksum = "64c122667b287044802d6ce17ee2ddf13207ed924c712de9a66a5814d5b64765" dependencies = [ "android_system_properties", "core-foundation-sys", @@ -2560,14 +3113,20 @@ dependencies = [ [[package]] name = "iana-time-zone-haiku" -version = "0.1.0" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fde6edd6cef363e9359ed3c98ba64590ba9eecba2293eb5a723ab32aee8926aa" +checksum = "0703ae284fc167426161c2e3f1da3ea71d94b21bedbcc9494e92b28e334e3dca" dependencies = [ "cxx", "cxx-build", ] +[[package]] +name = "ident_case" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" + [[package]] name = "idna" version = "0.2.3" @@ -2601,9 +3160,9 @@ dependencies = [ [[package]] name = "if-watch" -version = "1.1.1" +version = "3.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "015a7df1eb6dda30df37f34b63ada9b7b352984b0e84de2a20ed526345000791" +checksum = "ba7abdbb86e485125dad06c2691e1e393bf3b08c7b743b43aa162a00fd39062e" dependencies = [ "async-io", "core-foundation", @@ -2614,6 +3173,7 @@ dependencies = [ "log", "rtnetlink", "system-configuration", + "tokio", "windows", ] @@ -2635,6 +3195,15 @@ dependencies = [ "serde", ] +[[package]] +name = "impl-serde" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ebc88fc67028ae3db0c853baa36269d398d5f45b6982f95549ff5def78c935cd" +dependencies = [ + "serde", +] + [[package]] name = "impl-trait-for-tuples" version = "0.2.2" @@ -2643,20 +3212,29 @@ checksum = "11d7a9f6330b71fea57921c9b61c47ee6e84f72d394754eff6163ae67e7395eb" dependencies = [ "proc-macro2", "quote", - "syn 1.0.102", + "syn 1.0.109", ] [[package]] name = "indexmap" -version = "1.9.1" +version = "1.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10a35a97730320ffe8e2d410b5d3b69279b98d2c14bdb8b70ea89ecf7888d41e" +checksum = "1885e79c1fc4b10f0e172c475f458b7f7b93061064d98c3293e98c5ba0c8b399" dependencies = [ "autocfg", - "hashbrown", + "hashbrown 0.12.3", "serde", ] +[[package]] +name = "inout" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a0c10553d664a4d0bcff9f4215d0aac67a639cc68ef660840afe309b807bc9f5" +dependencies = [ + "generic-array 0.14.6", +] + [[package]] name = "instant" version = "0.1.12" @@ -2675,11 +3253,41 @@ dependencies = [ "num-traits", ] +[[package]] +name = "interceptor" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e8a11ae2da61704edada656798b61c94b35ecac2c58eb955156987d5e6be90b" +dependencies = [ + "async-trait", + "bytes", + "log", + "rand 0.8.5", + "rtcp", + "rtp", + "thiserror", + "tokio", + "waitgroup", + "webrtc-srtp", + "webrtc-util", +] + [[package]] name = "io-lifetimes" -version = "0.5.3" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59ce5ef949d49ee85593fc4d3f3f95ad61657076395cbbce23e2121fc5542074" + +[[package]] +name = "io-lifetimes" +version = "1.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec58677acfea8a15352d42fc87d11d63596ade9239e0a7c9352914417515dbe6" +checksum = "0dd6da19f25979c7270e70fa95ab371ec3b701cd0eefc47667a09785b3c59155" +dependencies = [ + "hermit-abi 0.3.1", + "libc", + "windows-sys 0.45.0", +] [[package]] name = "ip_network" @@ -2689,9 +3297,9 @@ checksum = "aa2f047c0a98b2f299aa5d6d7088443570faae494e9ae1305e48be000c9e0eb1" [[package]] name = "ipconfig" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "723519edce41262b05d4143ceb95050e4c614f483e78e9fd9e39a8275a84ad98" +checksum = "bd302af1b90f2463a98fa5ad469fc212c8e3175a41c3068601bfa2727591c5be" dependencies = [ "socket2", "widestring", @@ -2701,9 +3309,21 @@ dependencies = [ [[package]] name = "ipnet" -version = "2.5.0" +version = "2.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "30e22bd8629359895450b59ea7a776c850561b96a3b1d31321c1949d9e6c9146" + +[[package]] +name = "is-terminal" +version = "0.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "879d54834c8c76457ef4293a689b2a8c59b076067ad77b15efafbb05f92a592b" +checksum = "8687c819457e979cc940d09cb16e42a1bf70aa6b60a549de6d3a62a0ee90c69e" +dependencies = [ + "hermit-abi 0.3.1", + "io-lifetimes 1.0.8", + "rustix 0.36.10", + "windows-sys 0.45.0", +] [[package]] name = "itertools" @@ -2716,36 +3336,31 @@ dependencies = [ [[package]] name = "itoa" -version = "0.4.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b71991ff56294aa922b450139ee08b3bfc70982c6b2c7562771375cf73542dd4" - -[[package]] -name = "itoa" -version = "1.0.4" +version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4217ad341ebadf8d8e724e264f13e593e0648f5b3e94b3896a5df283be015ecc" +checksum = "453ad9f582a441959e5f0d088b02ce04cfe8d51a8eaf077f12ac6d3e94164ca6" [[package]] name = "jobserver" -version = "0.1.25" +version = "0.1.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "068b1ee6743e4d11fb9c6a1e6064b3693a1b600e7f5f5988047d98b3dc9fb90b" +checksum = "936cfd212a0155903bcbc060e316fb6cc7cbf2e1907329391ebadc1fe0ce77c2" dependencies = [ "libc", ] [[package]] name = "joystream-node" -version = "8.4.0" +version = "8.5.0" dependencies = [ "assert_cmd", "async-std", - "clap 3.2.22", + "clap 4.1.11", "clap_complete", "criterion", "frame-benchmarking", "frame-benchmarking-cli", + "frame-remote-externalities", "frame-system", "frame-system-rpc-runtime-api", "futures", @@ -2754,7 +3369,7 @@ dependencies = [ "joystream-node-runtime", "jsonrpsee", "log", - "nix 0.23.1", + "nix 0.23.2", "node-inspect", "overrides", "pallet-balances", @@ -2765,10 +3380,9 @@ dependencies = [ "pallet-transaction-payment-rpc", "pallet-transaction-storage", "parity-scale-codec", - "platforms", + "platforms 2.0.0", "rand 0.8.5", "regex", - "remote-externalities", "sc-authority-discovery", "sc-basic-authorship", "sc-block-builder", @@ -2780,17 +3394,20 @@ dependencies = [ "sc-consensus-babe", "sc-consensus-babe-rpc", "sc-consensus-epochs", + "sc-consensus-grandpa", + "sc-consensus-grandpa-rpc", "sc-consensus-slots", - "sc-consensus-uncles", "sc-executor", - "sc-finality-grandpa", - "sc-finality-grandpa-rpc", "sc-keystore", "sc-network", + "sc-network-common", + "sc-network-sync", "sc-rpc", "sc-rpc-api", + "sc-rpc-spec-v2", "sc-service", "sc-service-test", + "sc-storage-monitor", "sc-sync-state-rpc", "sc-sysinfo", "sc-telemetry", @@ -2801,14 +3418,14 @@ dependencies = [ "soketto", "sp-api", "sp-authority-discovery", - "sp-authorship", "sp-block-builder", "sp-blockchain", "sp-consensus", "sp-consensus-babe", + "sp-consensus-grandpa", "sp-core", - "sp-finality-grandpa", "sp-inherents", + "sp-io", "sp-keyring", "sp-keystore", "sp-runtime", @@ -2823,23 +3440,26 @@ dependencies = [ "substrate-state-trie-migration-rpc", "tempfile", "tokio", + "try-runtime-cli", "wait-timeout", ] [[package]] name = "joystream-node-runtime" -version = "12.2001.0" +version = "12.2002.0" dependencies = [ "frame-benchmarking", "frame-election-provider-support", "frame-executive", + "frame-remote-externalities", "frame-support", "frame-system", "frame-system-benchmarking", "frame-system-rpc-runtime-api", - "getrandom 0.2.7", + "frame-try-runtime", + "getrandom 0.2.8", "hex-literal", - "impl-serde", + "impl-serde 0.3.1", "lazy_static", "lite-json", "log", @@ -2858,6 +3478,8 @@ dependencies = [ "pallet-forum", "pallet-grandpa", "pallet-im-online", + "pallet-insecure-randomness-collective-flip", + "pallet-joystream-utility", "pallet-membership", "pallet-multisig", "pallet-offences", @@ -2866,19 +3488,18 @@ dependencies = [ "pallet-proposals-codex", "pallet-proposals-discussion", "pallet-proposals-engine", - "pallet-randomness-collective-flip", "pallet-referendum", "pallet-session", "pallet-session-benchmarking", "pallet-staking", "pallet-staking-handler", "pallet-staking-reward-curve", + "pallet-staking-runtime-api", "pallet-storage", "pallet-timestamp", "pallet-transaction-payment", "pallet-transaction-payment-rpc-runtime-api", - "pallet-utility 2.0.0", - "pallet-utility 4.0.0-dev", + "pallet-utility", "pallet-vesting", "pallet-working-group", "parity-scale-codec", @@ -2898,48 +3519,50 @@ dependencies = [ "sp-session", "sp-staking", "sp-std", + "sp-tracing", "sp-transaction-pool", "sp-version", + "sp-weights", "static_assertions", "strum 0.19.5", "substrate-wasm-builder", + "tokio", ] [[package]] name = "js-sys" -version = "0.3.60" +version = "0.3.61" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49409df3e3bf0856b916e2ceaca09ee28e6871cf7d9ce97a692cacfdb2a25a47" +checksum = "445dde2150c55e483f3d8416706b97ec8e8237c307e5b7b4b8dd15e6af2a0730" dependencies = [ "wasm-bindgen", ] [[package]] name = "jsonrpsee" -version = "0.13.1" +version = "0.16.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1f2ab5a60e558e74ea93bcf5164ebc47939a7fff8938fa9b5233bbc63e16061" +checksum = "7d291e3a5818a2384645fd9756362e6d89cf0541b0b916fa7702ea4a9833608e" dependencies = [ "jsonrpsee-core", - "jsonrpsee-http-server", "jsonrpsee-proc-macros", + "jsonrpsee-server", "jsonrpsee-types", "jsonrpsee-ws-client", - "jsonrpsee-ws-server", "tracing", ] [[package]] name = "jsonrpsee-client-transport" -version = "0.13.1" +version = "0.16.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26d682f4a55081a2be3e639280c640523070e4aeb8ee2fd8dd9168fdae57a9db" +checksum = "965de52763f2004bc91ac5bcec504192440f0b568a5d621c59d9dbd6f886c3fb" dependencies = [ "futures-util", "http", "jsonrpsee-core", "jsonrpsee-types", - "pin-project 1.0.12", + "pin-project", "rustls-native-certs", "soketto", "thiserror", @@ -2952,9 +3575,9 @@ dependencies = [ [[package]] name = "jsonrpsee-core" -version = "0.13.1" +version = "0.16.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e27462b21279edf9a6a91f46ffbe125e9cdc58b901d2e08bf59b31a47d7d0ab" +checksum = "a4e70b4439a751a5de7dd5ed55eacff78ebf4ffe0fc009cb1ebb11417f5b536b" dependencies = [ "anyhow", "arrayvec 0.7.2", @@ -2964,6 +3587,7 @@ dependencies = [ "futures-channel", "futures-timer", "futures-util", + "globset", "hyper", "jsonrpsee-types", "parking_lot 0.12.1", @@ -2978,41 +3602,45 @@ dependencies = [ ] [[package]] -name = "jsonrpsee-http-server" -version = "0.13.1" +name = "jsonrpsee-proc-macros" +version = "0.16.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baa6da1e4199c10d7b1d0a6e5e8bd8e55f351163b6f4b3cbb044672a69bd4c1c" +dependencies = [ + "heck 0.4.1", + "proc-macro-crate", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "jsonrpsee-server" +version = "0.16.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7178f16eabd7154c094e24d295b9ee355ec1e5f24c328759c56255ff7bbd4548" +checksum = "1fb69dad85df79527c019659a992498d03f8495390496da2f07e6c24c2b356fc" dependencies = [ "futures-channel", "futures-util", - "globset", + "http", "hyper", "jsonrpsee-core", "jsonrpsee-types", - "lazy_static", + "serde", "serde_json", + "soketto", "tokio", + "tokio-stream", + "tokio-util", + "tower", "tracing", - "unicase", -] - -[[package]] -name = "jsonrpsee-proc-macros" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b8d7f449cab3b747f12c3efc27f5cad537f3b597c6a3838b0fac628f4bf730a" -dependencies = [ - "proc-macro-crate", - "proc-macro2", - "quote", - "syn 1.0.102", ] [[package]] name = "jsonrpsee-types" -version = "0.13.1" +version = "0.16.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fd11763134104122ddeb0f97e4bbe393058017dfb077db63fbf44b4dd0dd86e" +checksum = "5bd522fe1ce3702fd94812965d7bb7a3364b1c9aba743944c5a00529aae80f8c" dependencies = [ "anyhow", "beef", @@ -3024,49 +3652,36 @@ dependencies = [ [[package]] name = "jsonrpsee-ws-client" -version = "0.13.1" +version = "0.16.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76f15180afb3761c7a3a32c0a8b680788176dcfdfe725b24c1758c90b1d1595b" +checksum = "0b83daeecfc6517cfe210df24e570fb06213533dfb990318fae781f4c7119dd9" dependencies = [ + "http", "jsonrpsee-client-transport", "jsonrpsee-core", "jsonrpsee-types", ] -[[package]] -name = "jsonrpsee-ws-server" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfb6c21556c551582b56e4e8e6e6249b0bbdb69bb7fa39efe9b9a6b54af9f206" -dependencies = [ - "futures-channel", - "futures-util", - "jsonrpsee-core", - "jsonrpsee-types", - "serde_json", - "soketto", - "tokio", - "tokio-util", - "tracing", -] - [[package]] name = "k256" -version = "0.10.4" +version = "0.11.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19c3a5e0a0b8450278feda242592512e09f61c72e018b8cd5c859482802daf2d" +checksum = "72c1e0b51e7ec0a97369623508396067a486bd0cbed95a2659a4b863d28cfc8b" dependencies = [ "cfg-if", "ecdsa", "elliptic-curve", - "sec1", + "sha2 0.10.6", ] [[package]] name = "keccak" -version = "0.1.2" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9b7d56ba4a8344d6be9729995e6b06f928af29998cdf79fe390cbf6b1fee838" +checksum = "3afef3b6eff9ce9d8ff9b3601125eec7f0c8cbac7abd14f355d053fa56c98768" +dependencies = [ + "cpufeatures", +] [[package]] name = "kv-log-macro" @@ -3079,37 +3694,31 @@ dependencies = [ [[package]] name = "kvdb" -version = "0.11.0" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a301d8ecb7989d4a6e2c57a49baca77d353bdbf879909debe3f375fe25d61f86" +checksum = "e7d770dcb02bf6835887c3a979b5107a04ff4bbde97a5f0928d27404a155add9" dependencies = [ - "parity-util-mem", "smallvec", ] [[package]] name = "kvdb-memorydb" -version = "0.11.0" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ece7e668abd21387aeb6628130a6f4c802787f014fa46bc83221448322250357" +checksum = "bf7a85fe66f9ff9cd74e169fdd2c94c6e1e74c412c99a73b4df3200b5d3760b2" dependencies = [ "kvdb", - "parity-util-mem", "parking_lot 0.12.1", ] [[package]] name = "kvdb-rocksdb" -version = "0.15.2" +version = "0.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca7fbdfd71cd663dceb0faf3367a99f8cf724514933e9867cec4995b6027cbc1" +checksum = "2182b8219fee6bd83aacaab7344e840179ae079d5216aa4e249b4d704646a844" dependencies = [ - "fs-swap", "kvdb", - "log", "num_cpus", - "owning_ref", - "parity-util-mem", "parking_lot 0.12.1", "regex", "rocksdb", @@ -3133,54 +3742,45 @@ checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" [[package]] name = "libc" -version = "0.2.135" +version = "0.2.140" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68783febc7782c6c5cb401fbda4de5a9898be1762314da0bb2c10ced61f18b0c" +checksum = "99227334921fae1a979cf0bfdfcc6b3e5ce376ef57e16fb6fb3ea2ed6095f80c" [[package]] name = "libloading" -version = "0.5.2" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2b111a074963af1d37a139918ac6d49ad1d0d5e47f72fd55388619691a7d753" +checksum = "b67380fd3b2fbe7527a606e18729d21c6f3951633d0500574c4dc22d2d638b9f" dependencies = [ - "cc", + "cfg-if", "winapi", ] [[package]] -name = "libloading" -version = "0.7.3" +name = "libm" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "efbc0f03f9a775e9f6aed295c6a1ba2253c5757a9e03d55c6caa46a681abcddd" -dependencies = [ - "cfg-if", - "winapi", -] +checksum = "7fc7aa29613bd6a620df431842069224d8bc9011086b1db4c0e0cd47fa03ec9a" [[package]] name = "libm" -version = "0.2.5" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "292a948cd991e376cf75541fe5b97a1081d713c618b4f1b9500f8844e49eb565" +checksum = "348108ab3fba42ec82ff6e9564fc4ca0247bdccdc68dd8af9764bbc79c3c8ffb" [[package]] name = "libp2p" -version = "0.45.1" +version = "0.50.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41726ee8f662563fafba2d2d484b14037cc8ecb8c953fbfc8439d4ce3a0a9029" +checksum = "9c7b0104790be871edcf97db9bd2356604984e623a08d825c3f27852290266b8" dependencies = [ "bytes", "futures", "futures-timer", - "getrandom 0.2.7", + "getrandom 0.2.8", "instant", - "lazy_static", - "libp2p-autonat", - "libp2p-core 0.33.0", - "libp2p-deflate", + "libp2p-core 0.38.0", "libp2p-dns", - "libp2p-floodsub", - "libp2p-gossipsub", "libp2p-identify", "libp2p-kad", "libp2p-mdns", @@ -3188,49 +3788,25 @@ dependencies = [ "libp2p-mplex", "libp2p-noise", "libp2p-ping", - "libp2p-plaintext", - "libp2p-pnet", - "libp2p-relay", - "libp2p-rendezvous", + "libp2p-quic", "libp2p-request-response", "libp2p-swarm", - "libp2p-swarm-derive", "libp2p-tcp", - "libp2p-uds", "libp2p-wasm-ext", + "libp2p-webrtc", "libp2p-websocket", "libp2p-yamux", - "multiaddr", + "multiaddr 0.16.0", "parking_lot 0.12.1", - "pin-project 1.0.12", - "rand 0.7.3", + "pin-project", "smallvec", ] -[[package]] -name = "libp2p-autonat" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d45945fd2f96c4b133c23d5c28a8b7fc8d7138e6dd8d5a8cd492dd384f888e3" -dependencies = [ - "async-trait", - "futures", - "futures-timer", - "instant", - "libp2p-core 0.33.0", - "libp2p-request-response", - "libp2p-swarm", - "log", - "prost 0.10.4", - "prost-build 0.10.4", - "rand 0.8.5", -] - [[package]] name = "libp2p-core" -version = "0.32.1" +version = "0.38.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db5b02602099fb75cb2d16f9ea860a320d6eb82ce41e95ab680912c454805cd5" +checksum = "b6a8fcd392ff67af6cc3f03b1426c41f7f26b6b9aff2dc632c1c56dd649e571f" dependencies = [ "asn1_der", "bs58", @@ -3240,18 +3816,18 @@ dependencies = [ "futures", "futures-timer", "instant", - "lazy_static", "log", - "multiaddr", - "multihash", + "multiaddr 0.16.0", + "multihash 0.16.3", "multistream-select", + "once_cell", "parking_lot 0.12.1", - "pin-project 1.0.12", - "prost 0.9.0", - "prost-build 0.9.0", + "pin-project", + "prost", + "prost-build", "rand 0.8.5", - "ring", - "rw-stream-sink 0.2.1", + "rw-stream-sink", + "sec1", "sha2 0.10.6", "smallvec", "thiserror", @@ -3262,59 +3838,40 @@ dependencies = [ [[package]] name = "libp2p-core" -version = "0.33.0" +version = "0.39.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42d46fca305dee6757022e2f5a4f6c023315084d0ed7441c3ab244e76666d979" +checksum = "9b7f8b7d65c070a5a1b5f8f0510648189da08f787b8963f8e21219e0710733af" dependencies = [ - "asn1_der", - "bs58", - "ed25519-dalek", "either", "fnv", "futures", "futures-timer", "instant", - "lazy_static", - "libsecp256k1", + "libp2p-identity", "log", - "multiaddr", - "multihash", + "multiaddr 0.17.0", + "multihash 0.17.0", "multistream-select", + "once_cell", "parking_lot 0.12.1", - "pin-project 1.0.12", - "prost 0.10.4", - "prost-build 0.10.4", + "pin-project", + "quick-protobuf", "rand 0.8.5", - "ring", - "rw-stream-sink 0.3.0", - "sha2 0.10.6", + "rw-stream-sink", "smallvec", "thiserror", "unsigned-varint", "void", - "zeroize", -] - -[[package]] -name = "libp2p-deflate" -version = "0.33.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86adefc55ea4ed8201149f052fb441210727481dff1fb0b8318460206a79f5fb" -dependencies = [ - "flate2", - "futures", - "libp2p-core 0.33.0", ] [[package]] name = "libp2p-dns" -version = "0.33.0" +version = "0.38.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbb462ec3a51fab457b4b44ac295e8b0a4b04dc175127e615cf996b1f0f1a268" +checksum = "8e42a271c1b49f789b92f7fc87749fa79ce5c7bdc88cbdfacb818a4bca47fec5" dependencies = [ - "async-std-resolver", "futures", - "libp2p-core 0.33.0", + "libp2p-core 0.38.0", "log", "parking_lot 0.12.1", "smallvec", @@ -3322,77 +3879,50 @@ dependencies = [ ] [[package]] -name = "libp2p-floodsub" -version = "0.36.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a505d0c6f851cbf2919535150198e530825def8bd3757477f13dc3a57f46cbcc" -dependencies = [ - "cuckoofilter", - "fnv", - "futures", - "libp2p-core 0.33.0", - "libp2p-swarm", - "log", - "prost 0.10.4", - "prost-build 0.10.4", - "rand 0.7.3", - "smallvec", -] - -[[package]] -name = "libp2p-gossipsub" -version = "0.38.1" +name = "libp2p-identify" +version = "0.41.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43e064ba4d7832e01c738626c6b274ae100baba05f5ffcc7b265c2a3ed398108" +checksum = "c052d0026f4817b44869bfb6810f4e1112f43aec8553f2cb38881c524b563abf" dependencies = [ "asynchronous-codec", - "base64", - "byteorder", - "bytes", - "fnv", "futures", - "hex_fmt", - "instant", - "libp2p-core 0.33.0", + "futures-timer", + "libp2p-core 0.38.0", "libp2p-swarm", "log", - "prometheus-client", - "prost 0.10.4", - "prost-build 0.10.4", - "rand 0.7.3", - "regex", - "sha2 0.10.6", + "lru", + "prost", + "prost-build", + "prost-codec", "smallvec", - "unsigned-varint", - "wasm-timer", + "thiserror", + "void", ] [[package]] -name = "libp2p-identify" -version = "0.36.1" +name = "libp2p-identity" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b84b53490442d086db1fa5375670c9666e79143dccadef3f7c74a4346899a984" +checksum = "ff6c9cb71e2333d31f18e7556b9a5f1d0a2e013effc9325e36f436be65fe7bd2" dependencies = [ - "asynchronous-codec", - "futures", - "futures-timer", - "libp2p-core 0.33.0", - "libp2p-swarm", + "bs58", + "ed25519-dalek", "log", - "lru", - "prost 0.10.4", - "prost-build 0.10.4", - "prost-codec", - "smallvec", + "multiaddr 0.17.0", + "multihash 0.17.0", + "prost", + "prost-build", + "quick-protobuf", + "rand 0.8.5", "thiserror", - "void", + "zeroize", ] [[package]] name = "libp2p-kad" -version = "0.37.1" +version = "0.42.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f6b5d4de90fcd35feb65ea6223fd78f3b747a64ca4b65e0813fbe66a27d56aa" +checksum = "2766dcd2be8c87d5e1f35487deb22d765f49c6ae1251b3633efe3b25698bd3d2" dependencies = [ "arrayvec 0.7.2", "asynchronous-codec", @@ -3402,12 +3932,12 @@ dependencies = [ "futures", "futures-timer", "instant", - "libp2p-core 0.33.0", + "libp2p-core 0.38.0", "libp2p-swarm", "log", - "prost 0.10.4", - "prost-build 0.10.4", - "rand 0.7.3", + "prost", + "prost-build", + "rand 0.8.5", "sha2 0.10.6", "smallvec", "thiserror", @@ -3418,282 +3948,261 @@ dependencies = [ [[package]] name = "libp2p-mdns" -version = "0.37.0" +version = "0.42.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4783f8cf00c7b6c1ff0f1870b4fcf50b042b45533d2e13b6fb464caf447a6951" +checksum = "04f378264aade9872d6ccd315c0accc18be3a35d15fc1b9c36e5b6f983b62b5b" dependencies = [ - "async-io", "data-encoding", - "dns-parser", "futures", "if-watch", - "lazy_static", - "libp2p-core 0.33.0", + "libp2p-core 0.38.0", "libp2p-swarm", "log", "rand 0.8.5", "smallvec", "socket2", + "tokio", + "trust-dns-proto", "void", ] [[package]] name = "libp2p-metrics" -version = "0.6.1" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "564a7e5284d7d9b3140fdfc3cb6567bc32555e86a21de5604c2ec85da05cf384" +checksum = "5ad8a64f29da86005c86a4d2728b8a0719e9b192f4092b609fd8790acb9dec55" dependencies = [ - "libp2p-core 0.33.0", - "libp2p-gossipsub", + "libp2p-core 0.38.0", "libp2p-identify", "libp2p-kad", "libp2p-ping", - "libp2p-relay", "libp2p-swarm", "prometheus-client", ] [[package]] name = "libp2p-mplex" -version = "0.33.0" +version = "0.38.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ff9c893f2367631a711301d703c47432af898c9bb8253bea0e2c051a13f7640" +checksum = "03805b44107aa013e7cbbfa5627b31c36cbedfdfb00603c0311998882bc4bace" dependencies = [ "asynchronous-codec", "bytes", "futures", - "libp2p-core 0.33.0", + "libp2p-core 0.38.0", "log", "nohash-hasher", "parking_lot 0.12.1", - "rand 0.7.3", + "rand 0.8.5", "smallvec", "unsigned-varint", ] [[package]] name = "libp2p-noise" -version = "0.36.0" +version = "0.41.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf2cee1dad1c83325bbd182a8e94555778699cec8a9da00086efb7522c4c15ad" +checksum = "a978cb57efe82e892ec6f348a536bfbd9fee677adbe5689d7a93ad3a9bffbf2e" dependencies = [ "bytes", "curve25519-dalek 3.2.0", "futures", - "lazy_static", - "libp2p-core 0.33.0", + "libp2p-core 0.38.0", "log", - "prost 0.10.4", - "prost-build 0.10.4", + "once_cell", + "prost", + "prost-build", "rand 0.8.5", "sha2 0.10.6", "snow", "static_assertions", - "x25519-dalek", + "thiserror", + "x25519-dalek 1.1.1", "zeroize", ] [[package]] name = "libp2p-ping" -version = "0.36.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d41516c82fe8dd148ec925eead0c5ec08a0628f7913597e93e126e4dfb4e0787" -dependencies = [ - "futures", - "futures-timer", - "instant", - "libp2p-core 0.33.0", - "libp2p-swarm", - "log", - "rand 0.7.3", - "void", -] - -[[package]] -name = "libp2p-plaintext" -version = "0.33.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db007e737adc5d28b2e03223b0210164928ad742591127130796a72aa8eaf54f" -dependencies = [ - "asynchronous-codec", - "bytes", - "futures", - "libp2p-core 0.33.0", - "log", - "prost 0.10.4", - "prost-build 0.10.4", - "unsigned-varint", - "void", -] - -[[package]] -name = "libp2p-pnet" -version = "0.22.0" +version = "0.41.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f1a458bbda880107b5b36fcb9b5a1ef0c329685da0e203ed692a8ebe64cc92c" +checksum = "929fcace45a112536e22b3dcfd4db538723ef9c3cb79f672b98be2cc8e25f37f" dependencies = [ - "futures", - "log", - "pin-project 1.0.12", - "rand 0.7.3", - "salsa20", - "sha3 0.9.1", -] - -[[package]] -name = "libp2p-relay" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "624ead3406f64437a0d4567c31bd128a9a0b8226d5f16c074038f5d0fc32f650" -dependencies = [ - "asynchronous-codec", - "bytes", - "either", "futures", "futures-timer", "instant", - "libp2p-core 0.33.0", + "libp2p-core 0.38.0", "libp2p-swarm", "log", - "pin-project 1.0.12", - "prost 0.10.4", - "prost-build 0.10.4", - "prost-codec", "rand 0.8.5", - "smallvec", - "static_assertions", - "thiserror", "void", ] [[package]] -name = "libp2p-rendezvous" -version = "0.6.0" +name = "libp2p-quic" +version = "0.7.0-alpha" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c59967ea2db2c7560f641aa58ac05982d42131863fcd3dd6dcf0dd1daf81c60c" +checksum = "01e7c867e95c8130667b24409d236d37598270e6da69b3baf54213ba31ffca59" dependencies = [ - "asynchronous-codec", - "bimap", + "bytes", "futures", "futures-timer", - "instant", - "libp2p-core 0.33.0", - "libp2p-swarm", + "if-watch", + "libp2p-core 0.38.0", + "libp2p-tls", "log", - "prost 0.10.4", - "prost-build 0.10.4", + "parking_lot 0.12.1", + "quinn-proto", "rand 0.8.5", - "sha2 0.10.6", + "rustls 0.20.8", "thiserror", - "unsigned-varint", - "void", + "tokio", ] [[package]] name = "libp2p-request-response" -version = "0.18.0" +version = "0.23.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b02e0acb725e5a757d77c96b95298fd73a7394fe82ba7b8bbeea510719cbe441" +checksum = "3236168796727bfcf4927f766393415361e2c644b08bedb6a6b13d957c9a4884" dependencies = [ "async-trait", "bytes", "futures", "instant", - "libp2p-core 0.33.0", + "libp2p-core 0.38.0", "libp2p-swarm", "log", - "rand 0.7.3", + "rand 0.8.5", "smallvec", "unsigned-varint", ] [[package]] name = "libp2p-swarm" -version = "0.36.1" +version = "0.41.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f4bb21c5abadbf00360c734f16bf87f1712ed4f23cd46148f625d2ddb867346" +checksum = "b2a35472fe3276b3855c00f1c032ea8413615e030256429ad5349cdf67c6e1a0" dependencies = [ "either", "fnv", "futures", "futures-timer", "instant", - "libp2p-core 0.33.0", + "libp2p-core 0.38.0", + "libp2p-swarm-derive", "log", - "pin-project 1.0.12", - "rand 0.7.3", + "pin-project", + "rand 0.8.5", "smallvec", "thiserror", + "tokio", "void", ] [[package]] name = "libp2p-swarm-derive" -version = "0.27.2" +version = "0.31.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f693c8c68213034d472cbb93a379c63f4f307d97c06f1c41e4985de481687a5" +checksum = "9d527d5827582abd44a6d80c07ff8b50b4ee238a8979e05998474179e79dc400" dependencies = [ + "heck 0.4.1", "quote", - "syn 1.0.102", + "syn 1.0.109", ] [[package]] name = "libp2p-tcp" -version = "0.33.0" +version = "0.38.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f4933e38ef21b50698aefc87799c24f2a365c9d3f6cf50471f3f6a0bc410892" +checksum = "b4b257baf6df8f2df39678b86c578961d48cc8b68642a12f0f763f56c8e5858d" dependencies = [ - "async-io", "futures", "futures-timer", "if-watch", - "ipnet", "libc", - "libp2p-core 0.33.0", + "libp2p-core 0.38.0", "log", "socket2", + "tokio", ] [[package]] -name = "libp2p-uds" -version = "0.32.0" +name = "libp2p-tls" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24bdab114f7f2701757d6541266e1131b429bbae382008f207f2114ee4222dcb" +checksum = "ff08d13d0dc66e5e9ba6279c1de417b84fa0d0adc3b03e5732928c180ec02781" dependencies = [ - "async-std", "futures", - "libp2p-core 0.32.1", - "log", + "futures-rustls", + "libp2p-core 0.39.1", + "libp2p-identity", + "rcgen 0.10.0", + "ring", + "rustls 0.20.8", + "thiserror", + "webpki 0.22.0", + "x509-parser 0.14.0", + "yasna", ] [[package]] name = "libp2p-wasm-ext" -version = "0.33.0" +version = "0.38.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f066f2b8b1a1d64793f05da2256e6842ecd0293d6735ca2e9bda89831a1bdc06" +checksum = "1bb1a35299860e0d4b3c02a3e74e3b293ad35ae0cee8a056363b0c862d082069" dependencies = [ "futures", "js-sys", - "libp2p-core 0.33.0", + "libp2p-core 0.38.0", "parity-send-wrapper", "wasm-bindgen", "wasm-bindgen-futures", ] +[[package]] +name = "libp2p-webrtc" +version = "0.4.0-alpha" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cdb6cd86dd68cba72308ea05de1cebf3ba0ae6e187c40548167955d4e3970f6a" +dependencies = [ + "async-trait", + "asynchronous-codec", + "bytes", + "futures", + "futures-timer", + "hex", + "if-watch", + "libp2p-core 0.38.0", + "libp2p-noise", + "log", + "multihash 0.16.3", + "prost", + "prost-build", + "prost-codec", + "rand 0.8.5", + "rcgen 0.9.3", + "serde", + "stun", + "thiserror", + "tinytemplate", + "tokio", + "tokio-util", + "webrtc", +] + [[package]] name = "libp2p-websocket" -version = "0.35.0" +version = "0.40.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39d398fbb29f432c4128fabdaac2ed155c3bcaf1b9bd40eeeb10a471eefacbf5" +checksum = "1d705506030d5c0aaf2882437c70dab437605f21c5f9811978f694e6917a3b54" dependencies = [ "either", "futures", "futures-rustls", - "libp2p-core 0.33.0", + "libp2p-core 0.38.0", "log", "parking_lot 0.12.1", "quicksink", - "rw-stream-sink 0.3.0", + "rw-stream-sink", "soketto", "url", "webpki-roots", @@ -3701,12 +4210,13 @@ dependencies = [ [[package]] name = "libp2p-yamux" -version = "0.37.0" +version = "0.42.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fe653639ad74877c759720febb0cbcbf4caa221adde4eed2d3126ce5c6f381f" +checksum = "4f63594a0aa818642d9d4915c791945053877253f08a3626f13416b5cd928a29" dependencies = [ "futures", - "libp2p-core 0.33.0", + "libp2p-core 0.38.0", + "log", "parking_lot 0.12.1", "thiserror", "yamux", @@ -3714,9 +4224,9 @@ dependencies = [ [[package]] name = "librocksdb-sys" -version = "0.6.3+6.28.2" +version = "0.8.3+7.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "184ce2a189a817be2731070775ad053b6804a340fee05c6686d711db27455917" +checksum = "557b255ff04123fcc176162f56ed0c9cd42d8f357cf55b3fabeb60f7413741b3" dependencies = [ "bindgen", "bzip2-sys", @@ -3734,7 +4244,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "95b09eff1b35ed3b33b877ced3a691fc7a481919c7e29c53c906226fcf55e2a1" dependencies = [ "arrayref", - "base64", + "base64 0.13.1", "digest 0.9.0", "hmac-drbg", "libsecp256k1-core", @@ -3788,9 +4298,9 @@ dependencies = [ [[package]] name = "link-cplusplus" -version = "1.0.7" +version = "1.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9272ab7b96c9046fbc5bc56c06c117cb639fe2d509df0c421cad82d2915cf369" +checksum = "ecd207c9c713c34f95a097a5b029ac2ce6010530c7b49d7fea24d977dede04f5" dependencies = [ "cc", ] @@ -3812,19 +4322,24 @@ dependencies = [ [[package]] name = "linregress" -version = "0.4.4" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6c601a85f5ecd1aba625247bca0031585fb1c446461b142878a16f8245ddeb8" +checksum = "475015a7f8f017edb28d2e69813be23500ad4b32cfe3421c4148efc97324ee52" dependencies = [ "nalgebra", - "statrs", ] [[package]] name = "linux-raw-sys" -version = "0.0.42" +version = "0.0.46" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5284f00d480e1c39af34e72f8ad60b94f47007e3481cd3b731c1d67190ddc7b7" +checksum = "d4d2456c373231a208ad294c33dc5bff30051eafd954cd4caae83a712b12854d" + +[[package]] +name = "linux-raw-sys" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f051f77a7c8e6957c0696eac88f26b0117e54f52d3fc682ab19397a8812846a4" [[package]] name = "lite-json" @@ -3866,11 +4381,11 @@ dependencies = [ [[package]] name = "lru" -version = "0.7.8" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e999beba7b6e8345721bd280141ed958096a2e4abdf74f67ff4ce49b4b54e47a" +checksum = "b6e8aaa3f231bb4bd57b84b2d5dc3ae7f350265df8aa96492e0bc394a1571909" dependencies = [ - "hashbrown", + "hashbrown 0.12.3", ] [[package]] @@ -3928,9 +4443,9 @@ dependencies = [ [[package]] name = "matches" -version = "0.1.9" +version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3e378b66a060d48947b590737b30a1be76706c8dd7b8ba0f2fe3989c68a853f" +checksum = "2532096657941c2fea9c289d370a250971c689d4f143798ff67113ec042024a5" [[package]] name = "matrixmultiply" @@ -3941,6 +4456,15 @@ dependencies = [ "rawpointer", ] +[[package]] +name = "md-5" +version = "0.10.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6365506850d44bff6e2fbcb5176cf63650e48bd45ef2fe2665ae1570e0f4b9ca" +dependencies = [ + "digest 0.10.6", +] + [[package]] name = "memchr" version = "2.5.0" @@ -3949,18 +4473,18 @@ checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" [[package]] name = "memfd" -version = "0.4.1" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6627dc657574b49d6ad27105ed671822be56e0d2547d413bfbf3e8d8fa92e7a" +checksum = "b20a59d985586e4a5aef64564ac77299f8586d8be6cf9106a5a40207e8908efb" dependencies = [ - "libc", + "rustix 0.36.10", ] [[package]] name = "memmap2" -version = "0.5.7" +version = "0.5.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95af15f345b17af2efc8ead6080fb8bc376f8cec1b35277b935637595fe77498" +checksum = "83faa42c0a078c393f6b29d5db232d8be22776a891f8f56e5284faee4a20b327" dependencies = [ "libc", ] @@ -3974,22 +4498,29 @@ dependencies = [ "autocfg", ] +[[package]] +name = "memoffset" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d61c719bcfbcf5d62b3a09efa6088de8c54bc0bfcd3ea7ae39fcc186108b8de1" +dependencies = [ + "autocfg", +] + [[package]] name = "memory-db" -version = "0.29.0" +version = "0.32.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6566c70c1016f525ced45d7b7f97730a2bafb037c788211d0c186ef5b2189f0a" +checksum = "808b50db46293432a45e63bc15ea51e0ab4c0a1647b8eb114e31a3e698dd6fbe" dependencies = [ "hash-db", - "hashbrown", - "parity-util-mem", ] [[package]] name = "memory_units" -version = "0.3.0" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "71d96e3f3c0b6325d8ccd83c33b28acb183edcb6c67938ba104ec546854b0882" +checksum = "8452105ba047068f40ff7093dd1d9da90898e63dd61736462e9cdda6a90ad3c3" [[package]] name = "merlin" @@ -4011,42 +4542,63 @@ checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" [[package]] name = "miniz_oxide" -version = "0.5.4" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96590ba8f175222643a85693f33d26e9c8a015f599c216509b1a6894af675d34" +checksum = "b275950c28b37e794e8c55d88aeb5e139d0ce23fdbbeda68f8d7174abdf9e8fa" dependencies = [ "adler", ] [[package]] name = "mio" -version = "0.8.4" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57ee1c23c7c63b0c9250c339ffdc69255f110b298b901b9f6c82547b7b87caaf" +checksum = "5b9d9a46eff5b4ff64b45a9e316a6d1e0bc719ef429cbec4dc630684212bfdf9" dependencies = [ "libc", "log", "wasi 0.11.0+wasi-snapshot-preview1", - "windows-sys", + "windows-sys 0.45.0", ] [[package]] -name = "more-asserts" -version = "0.2.2" +name = "mockall" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50e4a1c770583dac7ab5e2f6c139153b783a53a1bbee9729613f193e59828326" +dependencies = [ + "cfg-if", + "downcast", + "fragile", + "lazy_static", + "mockall_derive", + "predicates 2.1.5", + "predicates-tree", +] + +[[package]] +name = "mockall_derive" +version = "0.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7843ec2de400bcbc6a6328c958dc38e5359da6e93e72e37bc5246bf1ae776389" +checksum = "832663583d5fa284ca8810bf7015e46c9fff9622d3cf34bd1eea5003fec06dd0" +dependencies = [ + "cfg-if", + "proc-macro2", + "quote", + "syn 1.0.109", +] [[package]] name = "multiaddr" -version = "0.14.0" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c580bfdd8803cce319b047d239559a22f809094aaea4ac13902a1fdcfcd4261" +checksum = "a4aebdb21e90f81d13ed01dc84123320838e53963c2ca94b60b305d3fa64f31e" dependencies = [ "arrayref", - "bs58", "byteorder", "data-encoding", - "multihash", + "multibase", + "multihash 0.16.3", "percent-encoding", "serde", "static_assertions", @@ -4055,12 +4607,30 @@ dependencies = [ ] [[package]] -name = "multibase" -version = "0.9.1" +name = "multiaddr" +version = "0.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b3539ec3c1f04ac9748a260728e855f261b4977f5c3406612c884564f329404" +checksum = "3b53e0cc5907a5c216ba6584bf74be8ab47d6d6289f72793b2dddbf15dc3bf8c" dependencies = [ - "base-x", + "arrayref", + "byteorder", + "data-encoding", + "multibase", + "multihash 0.17.0", + "percent-encoding", + "serde", + "static_assertions", + "unsigned-varint", + "url", +] + +[[package]] +name = "multibase" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b3539ec3c1f04ac9748a260728e855f261b4977f5c3406612c884564f329404" +dependencies = [ + "base-x", "data-encoding", "data-encoding-macro", ] @@ -4075,24 +4645,37 @@ dependencies = [ "blake2s_simd", "blake3", "core2", - "digest 0.10.5", + "digest 0.10.6", + "multihash-derive", + "sha2 0.10.6", + "sha3", + "unsigned-varint", +] + +[[package]] +name = "multihash" +version = "0.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "835d6ff01d610179fbce3de1694d007e500bf33a7f29689838941d6bf783ae40" +dependencies = [ + "core2", + "digest 0.10.6", "multihash-derive", "sha2 0.10.6", - "sha3 0.10.5", "unsigned-varint", ] [[package]] name = "multihash-derive" -version = "0.8.0" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc076939022111618a5026d3be019fd8b366e76314538ff9a1b59ffbcbf98bcd" +checksum = "1d6d4752e6230d8ef7adf7bd5d8c4b1f6561c1014c5ba9a37445ccefe18aa1db" dependencies = [ "proc-macro-crate", "proc-macro-error", "proc-macro2", "quote", - "syn 1.0.102", + "syn 1.0.109", "synstructure", ] @@ -4104,45 +4687,43 @@ checksum = "e5ce46fe64a9d73be07dcbe690a38ce1b293be448fd8ce1e6c1b8062c9f72c6a" [[package]] name = "multistream-select" -version = "0.11.0" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "363a84be6453a70e63513660f4894ef815daf88e3356bffcda9ca27d810ce83b" +checksum = "c8552ab875c1313b97b8d20cb857b9fd63e2d1d6a0a1b53ce9821e575405f27a" dependencies = [ "bytes", "futures", "log", - "pin-project 1.0.12", + "pin-project", "smallvec", "unsigned-varint", ] [[package]] name = "nalgebra" -version = "0.27.1" +version = "0.32.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "462fffe4002f4f2e1f6a9dcf12cc1a6fc0e15989014efc02a941d3e0f5dc2120" +checksum = "d68d47bba83f9e2006d117a9a33af1524e655516b8919caac694427a6fb1e511" dependencies = [ "approx", "matrixmultiply", "nalgebra-macros", "num-complex", - "num-rational 0.4.1", + "num-rational", "num-traits", - "rand 0.8.5", - "rand_distr", "simba", "typenum", ] [[package]] name = "nalgebra-macros" -version = "0.1.0" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01fcc0b8149b4632adc89ac3b7b31a12fb6099a0317a4eb2ebff574ef7de7218" +checksum = "d232c68884c0c99810a5a4d333ef7e47689cfd0edc85efc9e54e1e6bf5212766" dependencies = [ "proc-macro2", "quote", - "syn 1.0.102", + "syn 1.0.109", ] [[package]] @@ -4173,7 +4754,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d9ea4302b9759a7a88242299225ea3688e63c85ea136371bb6cf94fd674efaab" dependencies = [ "anyhow", - "bitflags", + "bitflags 1.3.2", "byteorder", "libc", "netlink-packet-core", @@ -4182,13 +4763,13 @@ dependencies = [ [[package]] name = "netlink-packet-utils" -version = "0.5.1" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25af9cf0dc55498b7bd94a1508af7a78706aa0ab715a73c5169273e03c84845e" +checksum = "0ede8a08c71ad5a95cdd0e4e52facd37190977039a4704eb82a283f713747d34" dependencies = [ "anyhow", "byteorder", - "paste 1.0.9", + "paste 1.0.12", "thiserror", ] @@ -4209,46 +4790,47 @@ dependencies = [ [[package]] name = "netlink-sys" -version = "0.8.3" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92b654097027250401127914afb37cb1f311df6610a9891ff07a757e94199027" +checksum = "6471bf08e7ac0135876a9581bf3217ef0333c191c128d34878079f42ee150411" dependencies = [ - "async-io", "bytes", "futures", "libc", "log", + "tokio", ] [[package]] name = "nix" -version = "0.23.1" +version = "0.23.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f866317acbd3a240710c63f065ffb1e4fd466259045ccb504130b7f668f35c6" +checksum = "8f3790c00a0150112de0f4cd161e3d7fc4b2d8a5542ffc35f099a2562aecb35c" dependencies = [ - "bitflags", + "bitflags 1.3.2", "cc", "cfg-if", "libc", - "memoffset", + "memoffset 0.6.5", ] [[package]] name = "nix" -version = "0.24.2" +version = "0.24.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "195cdbc1741b8134346d515b3a56a1c94b0912758009cfd53f99ea0f57b065fc" +checksum = "fa52e972a9a719cecb6864fb88568781eb706bac2cd1d4f04a648542dbf78069" dependencies = [ - "bitflags", + "bitflags 1.3.2", "cfg-if", "libc", + "memoffset 0.6.5", ] [[package]] name = "node-inspect" version = "0.9.0-dev" dependencies = [ - "clap 3.2.22", + "clap 4.1.11", "overrides", "parity-scale-codec", "sc-cli", @@ -4261,12 +4843,6 @@ dependencies = [ "thiserror", ] -[[package]] -name = "nodrop" -version = "0.1.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72ef4a56884ca558e5ddb05a1d1e7e1bfd9a68d9ed024c21704cc98872dae1bb" - [[package]] name = "nohash-hasher" version = "0.2.0" @@ -4275,19 +4851,25 @@ checksum = "2bf50223579dc7cdcfb3bfcacf7069ff68243f8c363f62ffa99cf000a6b9c451" [[package]] name = "nom" -version = "7.1.1" +version = "7.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8903e5a29a317527874d0402f867152a3d21c908bb0b933e416c65e301d4c36" +checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" dependencies = [ "memchr", "minimal-lexical", ] +[[package]] +name = "normalize-line-endings" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "61807f77802ff30975e01f4f071c8ba10c022052f98b3294119f3e615d13e5be" + [[package]] name = "num-bigint" -version = "0.2.6" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "090c7f9998ee0ff65aa5b723e4009f7b217707f1fb5ea551329cc4d6231fb304" +checksum = "f93ab6289c7b344a8a9f60f88d80aa20032336fe78da341afc91c8a2341fc75f" dependencies = [ "autocfg", "num-integer", @@ -4296,21 +4878,21 @@ dependencies = [ [[package]] name = "num-complex" -version = "0.4.2" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ae39348c8bc5fbd7f40c727a9925f03517afd2ab27d46702108b6a7e5414c19" +checksum = "02e0d21255c828d6f128a1e41534206671e8c3ea0c62f32291e808dc82cff17d" dependencies = [ "num-traits", ] [[package]] name = "num-format" -version = "0.4.3" +version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54b862ff8df690cf089058c98b183676a7ed0f974cc08b426800093227cbff3b" +checksum = "a652d9771a63711fd3c3deb670acfbe5c30a4072e664d7a3bf5a9e1056ac72c3" dependencies = [ "arrayvec 0.7.2", - "itoa 1.0.4", + "itoa", ] [[package]] @@ -4323,18 +4905,6 @@ dependencies = [ "num-traits", ] -[[package]] -name = "num-rational" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c000134b5dbf44adc5cb772486d335293351644b801551abe8f75c84cfa4aef" -dependencies = [ - "autocfg", - "num-bigint", - "num-integer", - "num-traits", -] - [[package]] name = "num-rational" version = "0.4.1" @@ -4342,6 +4912,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0638a1c9d0a3c0914158145bc76cff373a75a627e6ecbfb71cbe6f453a5a19b0" dependencies = [ "autocfg", + "num-bigint", "num-integer", "num-traits", ] @@ -4353,44 +4924,62 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd" dependencies = [ "autocfg", - "libm", ] [[package]] name = "num_cpus" -version = "1.13.1" +version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19e64526ebdee182341572e50e9ad03965aa510cd94427a4549448f285e957a1" +checksum = "0fac9e2da13b5eb447a6ce3d392f23a29d8694bff781bf03a16cd9ac8697593b" dependencies = [ - "hermit-abi", + "hermit-abi 0.2.6", "libc", ] [[package]] name = "object" -version = "0.27.1" +version = "0.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67ac1d3f9a1d3616fd9a60c8d74296f22406a238b6a72f5cc1e6f314df4ffbf9" +checksum = "21158b2c33aa6d4561f1c0a6ea283ca92bc54802a93b263e910746d679a7eb53" dependencies = [ "crc32fast", + "hashbrown 0.12.3", "indexmap", "memchr", ] [[package]] name = "object" -version = "0.29.0" +version = "0.30.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21158b2c33aa6d4561f1c0a6ea283ca92bc54802a93b263e910746d679a7eb53" +checksum = "ea86265d3d3dcb6a27fc51bd29a4bf387fae9d2986b823079d4986af253eb439" dependencies = [ "memchr", ] +[[package]] +name = "oid-registry" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38e20717fa0541f39bd146692035c37bedfa532b3e5071b35761082407546b2a" +dependencies = [ + "asn1-rs 0.3.1", +] + +[[package]] +name = "oid-registry" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9bedf36ffb6ba96c2eb7144ef6270557b52e54b20c0a8e1eb2ff99a6c6959bff" +dependencies = [ + "asn1-rs 0.5.2", +] + [[package]] name = "once_cell" -version = "1.15.0" +version = "1.17.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e82dad04139b71a90c080c8463fe0dc7902db5192d939bd0950f074d014339e1" +checksum = "b7e5500299e16ebb147ae15a00a942af264cf3688f47923b8fc2cd5858f23ad3" [[package]] name = "oorandom" @@ -4418,27 +5007,50 @@ checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" [[package]] name = "os_str_bytes" -version = "6.3.0" +version = "6.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ff7415e9ae3fff1225851df9e0d9e4e5479f947619774677a63572e55e80eff" +checksum = "ceedf44fb00f2d1984b0bc98102627ce622e083e49a5bacdb3e514fa4238e267" [[package]] name = "overrides" version = "0.1.0" [[package]] -name = "owning_ref" -version = "0.4.1" +name = "p256" +version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ff55baddef9e4ad00f88b6c743a2a8062d4c6ade126c2a528644b8e444d52ce" +checksum = "51f44edd08f51e2ade572f141051021c5af22677e42b7dd28a88155151c33594" dependencies = [ - "stable_deref_trait", + "ecdsa", + "elliptic-curve", + "sha2 0.10.6", +] + +[[package]] +name = "p384" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dfc8c5bf642dde52bb9e87c0ecd8ca5a76faac2eeed98dedb7c717997e1080aa" +dependencies = [ + "ecdsa", + "elliptic-curve", + "sha2 0.10.6", +] + +[[package]] +name = "packed_simd_2" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1914cd452d8fccd6f9db48147b29fd4ae05bea9dc5d9ad578509f72415de282" +dependencies = [ + "cfg-if", + "libm 0.1.4", ] [[package]] name = "pallet-authority-discovery" version = "4.0.0-dev" -source = "git+https://github.com/joystream/substrate.git?rev=d29a53b11c3e530d1656eef502cb0f1f8fff3522#d29a53b11c3e530d1656eef502cb0f1f8fff3522" +source = "git+https://github.com/joystream/substrate.git?rev=1d0eefca86ef31b9e7727df01a6ed23ad65491e9#1d0eefca86ef31b9e7727df01a6ed23ad65491e9" dependencies = [ "frame-support", "frame-system", @@ -4454,14 +5066,13 @@ dependencies = [ [[package]] name = "pallet-authorship" version = "4.0.0-dev" -source = "git+https://github.com/joystream/substrate.git?rev=d29a53b11c3e530d1656eef502cb0f1f8fff3522#d29a53b11c3e530d1656eef502cb0f1f8fff3522" +source = "git+https://github.com/joystream/substrate.git?rev=1d0eefca86ef31b9e7727df01a6ed23ad65491e9#1d0eefca86ef31b9e7727df01a6ed23ad65491e9" dependencies = [ "frame-support", "frame-system", "impl-trait-for-tuples", "parity-scale-codec", "scale-info", - "sp-authorship", "sp-runtime", "sp-std", ] @@ -4469,7 +5080,7 @@ dependencies = [ [[package]] name = "pallet-babe" version = "4.0.0-dev" -source = "git+https://github.com/joystream/substrate.git?rev=d29a53b11c3e530d1656eef502cb0f1f8fff3522#d29a53b11c3e530d1656eef502cb0f1f8fff3522" +source = "git+https://github.com/joystream/substrate.git?rev=1d0eefca86ef31b9e7727df01a6ed23ad65491e9#1d0eefca86ef31b9e7727df01a6ed23ad65491e9" dependencies = [ "frame-benchmarking", "frame-support", @@ -4493,7 +5104,7 @@ dependencies = [ [[package]] name = "pallet-bags-list" version = "4.0.0-dev" -source = "git+https://github.com/joystream/substrate.git?rev=d29a53b11c3e530d1656eef502cb0f1f8fff3522#d29a53b11c3e530d1656eef502cb0f1f8fff3522" +source = "git+https://github.com/joystream/substrate.git?rev=1d0eefca86ef31b9e7727df01a6ed23ad65491e9#1d0eefca86ef31b9e7727df01a6ed23ad65491e9" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -4513,7 +5124,7 @@ dependencies = [ [[package]] name = "pallet-balances" version = "4.0.0-dev" -source = "git+https://github.com/joystream/substrate.git?rev=d29a53b11c3e530d1656eef502cb0f1f8fff3522#d29a53b11c3e530d1656eef502cb0f1f8fff3522" +source = "git+https://github.com/joystream/substrate.git?rev=1d0eefca86ef31b9e7727df01a6ed23ad65491e9#1d0eefca86ef31b9e7727df01a6ed23ad65491e9" dependencies = [ "frame-benchmarking", "frame-support", @@ -4525,6 +5136,49 @@ dependencies = [ "sp-std", ] +[[package]] +name = "pallet-beefy" +version = "4.0.0-dev" +source = "git+https://github.com/joystream/substrate.git?rev=1d0eefca86ef31b9e7727df01a6ed23ad65491e9#1d0eefca86ef31b9e7727df01a6ed23ad65491e9" +dependencies = [ + "frame-support", + "frame-system", + "pallet-authorship", + "pallet-session", + "parity-scale-codec", + "scale-info", + "serde", + "sp-consensus-beefy", + "sp-runtime", + "sp-session", + "sp-staking", + "sp-std", +] + +[[package]] +name = "pallet-beefy-mmr" +version = "4.0.0-dev" +source = "git+https://github.com/joystream/substrate.git?rev=1d0eefca86ef31b9e7727df01a6ed23ad65491e9#1d0eefca86ef31b9e7727df01a6ed23ad65491e9" +dependencies = [ + "array-bytes", + "binary-merkle-tree", + "frame-support", + "frame-system", + "log", + "pallet-beefy", + "pallet-mmr", + "pallet-session", + "parity-scale-codec", + "scale-info", + "serde", + "sp-api", + "sp-consensus-beefy", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", +] + [[package]] name = "pallet-bounty" version = "2.0.0" @@ -4558,6 +5212,7 @@ dependencies = [ "frame-system", "pallet-balances", "pallet-timestamp", + "parameterized", "parity-scale-codec", "scale-info", "serde", @@ -4595,11 +5250,12 @@ dependencies = [ "frame-benchmarking", "frame-support", "frame-system", + "log", "pallet-balances", "pallet-common", + "pallet-insecure-randomness-collective-flip", "pallet-membership", "pallet-project-token", - "pallet-randomness-collective-flip", "pallet-staking-handler", "pallet-storage", "pallet-timestamp", @@ -4644,15 +5300,16 @@ dependencies = [ [[package]] name = "pallet-election-provider-multi-phase" version = "4.0.0-dev" -source = "git+https://github.com/joystream/substrate.git?rev=d29a53b11c3e530d1656eef502cb0f1f8fff3522#d29a53b11c3e530d1656eef502cb0f1f8fff3522" +source = "git+https://github.com/joystream/substrate.git?rev=1d0eefca86ef31b9e7727df01a6ed23ad65491e9#1d0eefca86ef31b9e7727df01a6ed23ad65491e9" dependencies = [ "frame-benchmarking", "frame-election-provider-support", "frame-support", "frame-system", "log", + "pallet-election-provider-support-benchmarking", "parity-scale-codec", - "rand 0.7.3", + "rand 0.8.5", "scale-info", "sp-arithmetic", "sp-core", @@ -4660,14 +5317,13 @@ dependencies = [ "sp-npos-elections", "sp-runtime", "sp-std", - "static_assertions", - "strum 0.23.0", + "strum 0.24.1", ] [[package]] name = "pallet-election-provider-support-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/joystream/substrate.git?rev=d29a53b11c3e530d1656eef502cb0f1f8fff3522#d29a53b11c3e530d1656eef502cb0f1f8fff3522" +source = "git+https://github.com/joystream/substrate.git?rev=1d0eefca86ef31b9e7727df01a6ed23ad65491e9#1d0eefca86ef31b9e7727df01a6ed23ad65491e9" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -4703,7 +5359,7 @@ dependencies = [ [[package]] name = "pallet-grandpa" version = "4.0.0-dev" -source = "git+https://github.com/joystream/substrate.git?rev=d29a53b11c3e530d1656eef502cb0f1f8fff3522#d29a53b11c3e530d1656eef502cb0f1f8fff3522" +source = "git+https://github.com/joystream/substrate.git?rev=1d0eefca86ef31b9e7727df01a6ed23ad65491e9#1d0eefca86ef31b9e7727df01a6ed23ad65491e9" dependencies = [ "frame-benchmarking", "frame-support", @@ -4714,8 +5370,8 @@ dependencies = [ "parity-scale-codec", "scale-info", "sp-application-crypto", + "sp-consensus-grandpa", "sp-core", - "sp-finality-grandpa", "sp-io", "sp-runtime", "sp-session", @@ -4726,7 +5382,7 @@ dependencies = [ [[package]] name = "pallet-im-online" version = "4.0.0-dev" -source = "git+https://github.com/joystream/substrate.git?rev=d29a53b11c3e530d1656eef502cb0f1f8fff3522#d29a53b11c3e530d1656eef502cb0f1f8fff3522" +source = "git+https://github.com/joystream/substrate.git?rev=1d0eefca86ef31b9e7727df01a6ed23ad65491e9#1d0eefca86ef31b9e7727df01a6ed23ad65491e9" dependencies = [ "frame-benchmarking", "frame-support", @@ -4743,6 +5399,46 @@ dependencies = [ "sp-std", ] +[[package]] +name = "pallet-insecure-randomness-collective-flip" +version = "4.0.0-dev" +source = "git+https://github.com/joystream/substrate.git?rev=1d0eefca86ef31b9e7727df01a6ed23ad65491e9#1d0eefca86ef31b9e7727df01a6ed23ad65491e9" +dependencies = [ + "frame-support", + "frame-system", + "parity-scale-codec", + "safe-mix", + "scale-info", + "sp-runtime", + "sp-std", +] + +[[package]] +name = "pallet-joystream-utility" +version = "2.0.0" +dependencies = [ + "frame-benchmarking", + "frame-support", + "frame-system", + "pallet-balances", + "pallet-common", + "pallet-council", + "pallet-membership", + "pallet-referendum", + "pallet-staking-handler", + "pallet-timestamp", + "pallet-working-group", + "parity-scale-codec", + "scale-info", + "serde", + "sp-arithmetic", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", + "strum 0.19.5", +] + [[package]] name = "pallet-membership" version = "6.0.0" @@ -4764,14 +5460,32 @@ dependencies = [ "sp-std", ] +[[package]] +name = "pallet-mmr" +version = "4.0.0-dev" +source = "git+https://github.com/joystream/substrate.git?rev=1d0eefca86ef31b9e7727df01a6ed23ad65491e9#1d0eefca86ef31b9e7727df01a6ed23ad65491e9" +dependencies = [ + "frame-benchmarking", + "frame-support", + "frame-system", + "parity-scale-codec", + "scale-info", + "sp-core", + "sp-io", + "sp-mmr-primitives", + "sp-runtime", + "sp-std", +] + [[package]] name = "pallet-multisig" version = "4.0.0-dev" -source = "git+https://github.com/joystream/substrate.git?rev=d29a53b11c3e530d1656eef502cb0f1f8fff3522#d29a53b11c3e530d1656eef502cb0f1f8fff3522" +source = "git+https://github.com/joystream/substrate.git?rev=1d0eefca86ef31b9e7727df01a6ed23ad65491e9#1d0eefca86ef31b9e7727df01a6ed23ad65491e9" dependencies = [ "frame-benchmarking", "frame-support", "frame-system", + "log", "parity-scale-codec", "scale-info", "sp-io", @@ -4782,7 +5496,7 @@ dependencies = [ [[package]] name = "pallet-offences" version = "4.0.0-dev" -source = "git+https://github.com/joystream/substrate.git?rev=d29a53b11c3e530d1656eef502cb0f1f8fff3522#d29a53b11c3e530d1656eef502cb0f1f8fff3522" +source = "git+https://github.com/joystream/substrate.git?rev=1d0eefca86ef31b9e7727df01a6ed23ad65491e9#1d0eefca86ef31b9e7727df01a6ed23ad65491e9" dependencies = [ "frame-support", "frame-system", @@ -4799,12 +5513,13 @@ dependencies = [ [[package]] name = "pallet-offences-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/joystream/substrate.git?rev=d29a53b11c3e530d1656eef502cb0f1f8fff3522#d29a53b11c3e530d1656eef502cb0f1f8fff3522" +source = "git+https://github.com/joystream/substrate.git?rev=1d0eefca86ef31b9e7727df01a6ed23ad65491e9#1d0eefca86ef31b9e7727df01a6ed23ad65491e9" dependencies = [ "frame-benchmarking", "frame-election-provider-support", "frame-support", "frame-system", + "log", "pallet-babe", "pallet-balances", "pallet-grandpa", @@ -4828,8 +5543,8 @@ dependencies = [ "frame-system", "pallet-balances", "pallet-common", + "pallet-insecure-randomness-collective-flip", "pallet-membership", - "pallet-randomness-collective-flip", "pallet-staking-handler", "pallet-storage", "pallet-timestamp", @@ -4858,6 +5573,7 @@ dependencies = [ "pallet-content", "pallet-council", "pallet-membership", + "pallet-project-token", "pallet-proposals-discussion", "pallet-proposals-engine", "pallet-referendum", @@ -4926,20 +5642,6 @@ dependencies = [ "sp-std", ] -[[package]] -name = "pallet-randomness-collective-flip" -version = "4.0.0-dev" -source = "git+https://github.com/joystream/substrate.git?rev=d29a53b11c3e530d1656eef502cb0f1f8fff3522#d29a53b11c3e530d1656eef502cb0f1f8fff3522" -dependencies = [ - "frame-support", - "frame-system", - "parity-scale-codec", - "safe-mix", - "scale-info", - "sp-runtime", - "sp-std", -] - [[package]] name = "pallet-referendum" version = "6.0.0" @@ -4966,7 +5668,7 @@ dependencies = [ [[package]] name = "pallet-session" version = "4.0.0-dev" -source = "git+https://github.com/joystream/substrate.git?rev=d29a53b11c3e530d1656eef502cb0f1f8fff3522#d29a53b11c3e530d1656eef502cb0f1f8fff3522" +source = "git+https://github.com/joystream/substrate.git?rev=1d0eefca86ef31b9e7727df01a6ed23ad65491e9#1d0eefca86ef31b9e7727df01a6ed23ad65491e9" dependencies = [ "frame-support", "frame-system", @@ -4987,14 +5689,14 @@ dependencies = [ [[package]] name = "pallet-session-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/joystream/substrate.git?rev=d29a53b11c3e530d1656eef502cb0f1f8fff3522#d29a53b11c3e530d1656eef502cb0f1f8fff3522" +source = "git+https://github.com/joystream/substrate.git?rev=1d0eefca86ef31b9e7727df01a6ed23ad65491e9#1d0eefca86ef31b9e7727df01a6ed23ad65491e9" dependencies = [ "frame-benchmarking", "frame-support", "frame-system", "pallet-session", "pallet-staking", - "rand 0.7.3", + "rand 0.8.5", "sp-runtime", "sp-session", "sp-std", @@ -5003,7 +5705,7 @@ dependencies = [ [[package]] name = "pallet-staking" version = "4.0.0-dev" -source = "git+https://github.com/joystream/substrate.git?rev=d29a53b11c3e530d1656eef502cb0f1f8fff3522#d29a53b11c3e530d1656eef502cb0f1f8fff3522" +source = "git+https://github.com/joystream/substrate.git?rev=1d0eefca86ef31b9e7727df01a6ed23ad65491e9#1d0eefca86ef31b9e7727df01a6ed23ad65491e9" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -5045,12 +5747,21 @@ dependencies = [ [[package]] name = "pallet-staking-reward-curve" version = "4.0.0-dev" -source = "git+https://github.com/joystream/substrate.git?rev=d29a53b11c3e530d1656eef502cb0f1f8fff3522#d29a53b11c3e530d1656eef502cb0f1f8fff3522" +source = "git+https://github.com/joystream/substrate.git?rev=1d0eefca86ef31b9e7727df01a6ed23ad65491e9#1d0eefca86ef31b9e7727df01a6ed23ad65491e9" dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn 1.0.102", + "syn 1.0.109", +] + +[[package]] +name = "pallet-staking-runtime-api" +version = "4.0.0-dev" +source = "git+https://github.com/joystream/substrate.git?rev=1d0eefca86ef31b9e7727df01a6ed23ad65491e9#1d0eefca86ef31b9e7727df01a6ed23ad65491e9" +dependencies = [ + "parity-scale-codec", + "sp-api", ] [[package]] @@ -5064,8 +5775,8 @@ dependencies = [ "frame-system", "pallet-balances", "pallet-common", + "pallet-insecure-randomness-collective-flip", "pallet-membership", - "pallet-randomness-collective-flip", "pallet-staking-handler", "pallet-timestamp", "pallet-working-group", @@ -5082,7 +5793,7 @@ dependencies = [ [[package]] name = "pallet-timestamp" version = "4.0.0-dev" -source = "git+https://github.com/joystream/substrate.git?rev=d29a53b11c3e530d1656eef502cb0f1f8fff3522#d29a53b11c3e530d1656eef502cb0f1f8fff3522" +source = "git+https://github.com/joystream/substrate.git?rev=1d0eefca86ef31b9e7727df01a6ed23ad65491e9#1d0eefca86ef31b9e7727df01a6ed23ad65491e9" dependencies = [ "frame-benchmarking", "frame-support", @@ -5100,7 +5811,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment" version = "4.0.0-dev" -source = "git+https://github.com/joystream/substrate.git?rev=d29a53b11c3e530d1656eef502cb0f1f8fff3522#d29a53b11c3e530d1656eef502cb0f1f8fff3522" +source = "git+https://github.com/joystream/substrate.git?rev=1d0eefca86ef31b9e7727df01a6ed23ad65491e9#1d0eefca86ef31b9e7727df01a6ed23ad65491e9" dependencies = [ "frame-support", "frame-system", @@ -5116,7 +5827,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment-rpc" version = "4.0.0-dev" -source = "git+https://github.com/joystream/substrate.git?rev=d29a53b11c3e530d1656eef502cb0f1f8fff3522#d29a53b11c3e530d1656eef502cb0f1f8fff3522" +source = "git+https://github.com/joystream/substrate.git?rev=1d0eefca86ef31b9e7727df01a6ed23ad65491e9#1d0eefca86ef31b9e7727df01a6ed23ad65491e9" dependencies = [ "jsonrpsee", "pallet-transaction-payment-rpc-runtime-api", @@ -5126,26 +5837,29 @@ dependencies = [ "sp-core", "sp-rpc", "sp-runtime", + "sp-weights", ] [[package]] name = "pallet-transaction-payment-rpc-runtime-api" version = "4.0.0-dev" -source = "git+https://github.com/joystream/substrate.git?rev=d29a53b11c3e530d1656eef502cb0f1f8fff3522#d29a53b11c3e530d1656eef502cb0f1f8fff3522" +source = "git+https://github.com/joystream/substrate.git?rev=1d0eefca86ef31b9e7727df01a6ed23ad65491e9#1d0eefca86ef31b9e7727df01a6ed23ad65491e9" dependencies = [ "pallet-transaction-payment", "parity-scale-codec", "sp-api", "sp-runtime", + "sp-weights", ] [[package]] name = "pallet-transaction-storage" version = "4.0.0-dev" -source = "git+https://github.com/joystream/substrate.git?rev=d29a53b11c3e530d1656eef502cb0f1f8fff3522#d29a53b11c3e530d1656eef502cb0f1f8fff3522" +source = "git+https://github.com/joystream/substrate.git?rev=1d0eefca86ef31b9e7727df01a6ed23ad65491e9#1d0eefca86ef31b9e7727df01a6ed23ad65491e9" dependencies = [ "frame-support", "frame-system", + "log", "pallet-balances", "parity-scale-codec", "scale-info", @@ -5156,36 +5870,10 @@ dependencies = [ "sp-transaction-storage-proof", ] -[[package]] -name = "pallet-utility" -version = "2.0.0" -dependencies = [ - "frame-benchmarking", - "frame-support", - "frame-system", - "pallet-balances", - "pallet-common", - "pallet-council", - "pallet-membership", - "pallet-referendum", - "pallet-staking-handler", - "pallet-timestamp", - "pallet-working-group", - "parity-scale-codec", - "scale-info", - "serde", - "sp-arithmetic", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", - "strum 0.19.5", -] - [[package]] name = "pallet-utility" version = "4.0.0-dev" -source = "git+https://github.com/joystream/substrate.git?rev=d29a53b11c3e530d1656eef502cb0f1f8fff3522#d29a53b11c3e530d1656eef502cb0f1f8fff3522" +source = "git+https://github.com/joystream/substrate.git?rev=1d0eefca86ef31b9e7727df01a6ed23ad65491e9#1d0eefca86ef31b9e7727df01a6ed23ad65491e9" dependencies = [ "frame-benchmarking", "frame-support", @@ -5201,7 +5889,7 @@ dependencies = [ [[package]] name = "pallet-vesting" version = "4.0.0-dev" -source = "git+https://github.com/joystream/substrate.git?rev=d29a53b11c3e530d1656eef502cb0f1f8fff3522#d29a53b11c3e530d1656eef502cb0f1f8fff3522" +source = "git+https://github.com/joystream/substrate.git?rev=1d0eefca86ef31b9e7727df01a6ed23ad65491e9#1d0eefca86ef31b9e7727df01a6ed23ad65491e9" dependencies = [ "frame-benchmarking", "frame-support", @@ -5236,33 +5924,56 @@ dependencies = [ ] [[package]] -name = "parity-db" -version = "0.3.17" +name = "parameterized" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c8fdb726a43661fa54b43e7114e6b88b2289cae388eb3ad766d9d1754d83fce" +checksum = "3033e5499e963aa291be03b370b1157e1236b9ae1418b48b5ce02a53e5343d20" dependencies = [ - "blake2-rfc", - "crc32fast", - "fs2", - "hex", - "libc", + "parameterized-macro", +] + +[[package]] +name = "parameterized-macro" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "89ffb3b6d5b7b60a8e39e74d9459163cdc7ead5a0b155e4606bff4a421576395" +dependencies = [ + "indexmap", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "parity-db" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df89dd8311063c54ae4e03d9aeb597b04212a57e82c339344130a9cad9b3e2d9" +dependencies = [ + "blake2", + "crc32fast", + "fs2", + "hex", + "libc", "log", "lz4", "memmap2", "parking_lot 0.12.1", "rand 0.8.5", + "siphasher", "snap", ] [[package]] name = "parity-scale-codec" -version = "3.2.1" +version = "3.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "366e44391a8af4cfd6002ef6ba072bae071a96aafca98d7d448a34c5dca38b6a" +checksum = "637935964ff85a605d114591d4d2c13c5d1ba2806dae97cea6bf180238a749ac" dependencies = [ "arrayvec 0.7.2", "bitvec", "byte-slice-cast", + "bytes", "impl-trait-for-tuples", "parity-scale-codec-derive", "serde", @@ -5270,14 +5981,14 @@ dependencies = [ [[package]] name = "parity-scale-codec-derive" -version = "3.1.3" +version = "3.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9299338969a3d2f491d65f140b00ddec470858402f888af98e8642fb5e8965cd" +checksum = "86b26a931f824dd4eca30b3e43bb4f31cd5f0d3a403c5f5ff27106b805bfde7b" dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn 1.0.102", + "syn 1.0.109", ] [[package]] @@ -5286,47 +5997,11 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "aa9777aa91b8ad9dd5aaa04a9b6bcb02c7f1deb952fca5a66034d5e63afc5c6f" -[[package]] -name = "parity-util-mem" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c32561d248d352148124f036cac253a644685a21dc9fea383eb4907d7bd35a8f" -dependencies = [ - "cfg-if", - "hashbrown", - "impl-trait-for-tuples", - "parity-util-mem-derive", - "parking_lot 0.12.1", - "primitive-types", - "smallvec", - "winapi", -] - -[[package]] -name = "parity-util-mem-derive" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f557c32c6d268a07c921471619c0295f5efad3a0e76d4f97a05c091a51d110b2" -dependencies = [ - "proc-macro2", - "syn 1.0.102", - "synstructure", -] - -[[package]] -name = "parity-wasm" -version = "0.32.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16ad52817c4d343339b3bc2e26861bd21478eda0b7509acf83505727000512ac" -dependencies = [ - "byteorder", -] - [[package]] name = "parity-wasm" -version = "0.42.2" +version = "0.45.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be5e13c266502aadf83426d87d81a0f5d1ef45b8027f5a471c360abfe4bfae92" +checksum = "e1ad0aff30c1da14b1254fcb2af73e1fa9a28670e584a626f53a369d0e157304" [[package]] name = "parking" @@ -5342,7 +6017,7 @@ checksum = "7d17b78036a60663b797adeaee46f5c9dfebb86948d1255007a1d6be0271ff99" dependencies = [ "instant", "lock_api", - "parking_lot_core 0.8.5", + "parking_lot_core 0.8.6", ] [[package]] @@ -5352,14 +6027,14 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" dependencies = [ "lock_api", - "parking_lot_core 0.9.3", + "parking_lot_core 0.9.7", ] [[package]] name = "parking_lot_core" -version = "0.8.5" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d76e8e1493bcac0d2766c42737f34458f1c8c50c0d23bcb24ea953affb273216" +checksum = "60a2cfe6f0ad2bfc16aefa463b497d5c7a5ecd44a23efa72aa342d90177356dc" dependencies = [ "cfg-if", "instant", @@ -5371,15 +6046,15 @@ dependencies = [ [[package]] name = "parking_lot_core" -version = "0.9.3" +version = "0.9.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09a279cbf25cb0757810394fbc1e359949b59e348145c643a939a525692e6929" +checksum = "9069cbb9f99e3a5083476ccb29ceb1de18b9118cafa53e90c9551235de2b9521" dependencies = [ "cfg-if", "libc", "redox_syscall", "smallvec", - "windows-sys", + "windows-sys 0.45.0", ] [[package]] @@ -5394,9 +6069,9 @@ dependencies = [ [[package]] name = "paste" -version = "1.0.9" +version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1de2e551fb905ac83f73f7aedf2f0cb4a0da7e35efa24a202a936269f1f18e1" +checksum = "9f746c4065a8fa3fe23974dd82f15431cc8d40779821001404d10d2e79ca7d79" [[package]] name = "paste-impl" @@ -5409,20 +6084,20 @@ dependencies = [ [[package]] name = "pbkdf2" -version = "0.4.0" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "216eaa586a190f0a738f2f918511eecfa90f13295abec0e457cdebcceda80cbd" +checksum = "d95f5254224e617595d2cc3cc73ff0a5eaf2637519e25f03388154e9378b6ffa" dependencies = [ - "crypto-mac 0.8.0", + "crypto-mac 0.11.1", ] [[package]] name = "pbkdf2" -version = "0.8.0" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d95f5254224e617595d2cc3cc73ff0a5eaf2637519e25f03388154e9378b6ffa" +checksum = "83a0692ec44e4cf1ef28ca317f14f8f07da2d95ec3fa01f86e4467b725e60917" dependencies = [ - "crypto-mac 0.11.1", + "digest 0.10.6", ] [[package]] @@ -5431,6 +6106,24 @@ version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "19b17cddbe7ec3f8bc800887bab5e717348c95ea2ca0b1bf0837fb964dc67099" +[[package]] +name = "pem" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8835c273a76a90455d7344889b0964598e3316e2a79ede8e36f16bdcf2228b8" +dependencies = [ + "base64 0.13.1", +] + +[[package]] +name = "pem-rfc7468" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24d159833a9105500e0398934e205e0773f0b27529557134ecfc51c27646adac" +dependencies = [ + "base64ct", +] + [[package]] name = "percent-encoding" version = "2.2.0" @@ -5439,9 +6132,9 @@ checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e" [[package]] name = "pest" -version = "2.4.0" +version = "2.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dbc7bc69c062e492337d74d59b120c274fd3d261b6bf6d3207d499b4b379c41a" +checksum = "8cbd939b234e95d72bc393d51788aec68aeeb5d51e748ca08ff3aad58cb722f7" dependencies = [ "thiserror", "ucd-trie", @@ -5449,9 +6142,9 @@ dependencies = [ [[package]] name = "pest_derive" -version = "2.4.0" +version = "2.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60b75706b9642ebcb34dab3bc7750f811609a0eb1dd8b88c2d15bf628c1c65b2" +checksum = "a81186863f3d0a27340815be8f2078dd8050b14cd71913db9fbda795e5f707d7" dependencies = [ "pest", "pest_generator", @@ -5459,65 +6152,45 @@ dependencies = [ [[package]] name = "pest_generator" -version = "2.4.0" +version = "2.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4f9272122f5979a6511a749af9db9bfc810393f63119970d7085fed1c4ea0db" +checksum = "75a1ef20bf3193c15ac345acb32e26b3dc3223aff4d77ae4fc5359567683796b" dependencies = [ "pest", "pest_meta", "proc-macro2", "quote", - "syn 1.0.102", + "syn 1.0.109", ] [[package]] name = "pest_meta" -version = "2.4.0" +version = "2.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c8717927f9b79515e565a64fe46c38b8cd0427e64c40680b14a7365ab09ac8d" +checksum = "5e3b284b1f13a20dc5ebc90aff59a51b8d7137c221131b52a7260c08cbc1cc80" dependencies = [ "once_cell", "pest", - "sha1", + "sha2 0.10.6", ] [[package]] name = "petgraph" -version = "0.6.2" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6d5014253a1331579ce62aa67443b4a658c5e7dd03d4bc6d302b94474888143" +checksum = "4dd7d28ee937e54fe3080c91faa1c3a46c06de6252988a7f4592ba2310ef22a4" dependencies = [ "fixedbitset", "indexmap", ] -[[package]] -name = "pin-project" -version = "0.4.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ef0f924a5ee7ea9cbcea77529dba45f8a9ba9f622419fe3386ca581a3ae9d5a" -dependencies = [ - "pin-project-internal 0.4.30", -] - [[package]] name = "pin-project" version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ad29a609b6bcd67fee905812e544992d216af9d755757c05ed2d0e15a74c6ecc" dependencies = [ - "pin-project-internal 1.0.12", -] - -[[package]] -name = "pin-project-internal" -version = "0.4.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "851c8d0ce9bebe43790dedfc86614c23494ac9f423dd618d3a61fc693eafe61e" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.102", + "pin-project-internal", ] [[package]] @@ -5528,7 +6201,7 @@ checksum = "069bdb1e05adc7a8990dce9cc75370895fbe4e3d58b9b73bf1aee56359344a55" dependencies = [ "proc-macro2", "quote", - "syn 1.0.102", + "syn 1.0.109", ] [[package]] @@ -5549,11 +6222,21 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" +[[package]] +name = "pkcs8" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9eca2c590a5f85da82668fa685c09ce2888b9430e83299debf1f34b65fd4a4ba" +dependencies = [ + "der", + "spki", +] + [[package]] name = "pkg-config" -version = "0.3.25" +version = "0.3.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1df8c4ec4b0627e53bdf214615ad287367e482558cf84b109250b37464dc03ae" +checksum = "6ac9a59f73473f1b8d852421e59e64809f025994837ef743615c6d0c5b305160" [[package]] name = "platforms" @@ -5561,6 +6244,12 @@ version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e8d0eef3571242013a0d5dc84861c3ae4a652e56e12adf8bdc26ff5f8cb34c94" +[[package]] +name = "platforms" +version = "3.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3d7ddaed09e0eb771a79ab0fd64609ba0afb0a8366421957936ad14cbd13630" + [[package]] name = "plotters" version = "0.3.4" @@ -5591,16 +6280,18 @@ dependencies = [ [[package]] name = "polling" -version = "2.3.0" +version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "899b00b9c8ab553c743b3e11e87c5c7d423b2a2de229ba95b24a756344748011" +checksum = "7e1f879b2998099c2d69ab9605d145d5b661195627eccc680002c4918a7fb6fa" dependencies = [ "autocfg", + "bitflags 1.3.2", "cfg-if", + "concurrent-queue", "libc", "log", - "wepoll-ffi", - "winapi", + "pin-project-lite 0.2.9", + "windows-sys 0.45.0", ] [[package]] @@ -5611,7 +6302,7 @@ checksum = "048aeb476be11a4b6ca432ca569e375810de9294ae78f4774e78ea98a9246ede" dependencies = [ "cpufeatures", "opaque-debug 0.3.0", - "universal-hash", + "universal-hash 0.4.1", ] [[package]] @@ -5623,21 +6314,48 @@ dependencies = [ "cfg-if", "cpufeatures", "opaque-debug 0.3.0", - "universal-hash", + "universal-hash 0.4.1", +] + +[[package]] +name = "polyval" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ef234e08c11dfcb2e56f79fd70f6f2eb7f025c0ce2333e82f4f0518ecad30c6" +dependencies = [ + "cfg-if", + "cpufeatures", + "opaque-debug 0.3.0", + "universal-hash 0.5.0", ] [[package]] name = "ppv-lite86" -version = "0.2.16" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" + +[[package]] +name = "predicates" +version = "2.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb9f9e6e233e5c4a35559a617bf40a4ec447db2e84c20b55a6f83167b7e57872" +checksum = "59230a63c37f3e18569bdb90e4a89cbf5bf8b06fea0b84e65ea10cc4df47addd" +dependencies = [ + "difflib", + "float-cmp", + "itertools", + "normalize-line-endings", + "predicates-core", + "regex", +] [[package]] name = "predicates" -version = "2.1.1" +version = "3.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5aab5be6e4732b473071984b3164dbbfb7a3674d30ea5ff44410b6bcd960c3c" +checksum = "1ba7d6ead3e3966038f68caa9fc1f860185d95a793180bbcfe0d0da47b3961ed" dependencies = [ + "anstyle", "difflib", "itertools", "predicates-core", @@ -5645,15 +6363,15 @@ dependencies = [ [[package]] name = "predicates-core" -version = "1.0.3" +version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da1c2388b1513e1b605fcec39a95e0a9e8ef088f71443ef37099fa9ae6673fcb" +checksum = "b794032607612e7abeb4db69adb4e33590fa6cf1149e95fd7cb00e634b92f174" [[package]] name = "predicates-tree" -version = "1.0.5" +version = "1.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d86de6de25020a36c6d3643a86d9a6a9f552107c0559c60ea03551b5e16c032" +checksum = "368ba315fb8c5052ab692e68a0eefec6ec57b23a36959c14496f0b0df2c0cecf" dependencies = [ "predicates-core", "termtree", @@ -5661,34 +6379,33 @@ dependencies = [ [[package]] name = "prettyplease" -version = "0.2.4" +version = "0.1.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ceca8aaf45b5c46ec7ed39fff75f57290368c1846d33d24a122ca81416ab058" +checksum = "6c8646e95016a7a6c4adea95bafa8a16baab64b583356217f2c85db4a39d9a86" dependencies = [ "proc-macro2", - "syn 2.0.15", + "syn 1.0.109", ] [[package]] name = "primitive-types" -version = "0.11.1" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e28720988bff275df1f51b171e1b2a18c30d194c4d2b61defdacecd625a5d94a" +checksum = "9f3486ccba82358b11a77516035647c34ba167dfa53312630de83b12bd4f3d66" dependencies = [ "fixed-hash", "impl-codec", - "impl-serde", + "impl-serde 0.4.0", "scale-info", "uint", ] [[package]] name = "proc-macro-crate" -version = "1.2.1" +version = "1.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eda0fc3b0fb7c975631757e14d9049da17374063edb6ebbcbc54d880d4fe94e9" +checksum = "e17d47ce914bf4de440332250b0edd23ce48c005f59fab39d3335866b114f11a" dependencies = [ - "once_cell", "thiserror", "toml", ] @@ -5702,7 +6419,7 @@ dependencies = [ "proc-macro-error-attr", "proc-macro2", "quote", - "syn 1.0.102", + "syn 1.0.109", "version_check", ] @@ -5719,24 +6436,24 @@ dependencies = [ [[package]] name = "proc-macro-hack" -version = "0.5.19" +version = "0.5.20+deprecated" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dbf0c48bc1d91375ae5c3cd81e3722dff1abcf81a30960240640d223f59fe0e5" +checksum = "dc375e1527247fe1a97d8b7156678dfe7c1af2fc075c9a4db3690ecd2a148068" [[package]] name = "proc-macro2" -version = "1.0.56" +version = "1.0.52" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b63bdb0cd06f1f4dedf69b254734f9b45af66e4a031e42a7480257d9898b435" +checksum = "1d0e1ae9e836cc3beddd63db0df682593d7e2d3d891ae8c9083d2113e1744224" dependencies = [ "unicode-ident", ] [[package]] name = "prometheus" -version = "0.13.2" +version = "0.13.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "45c8babc29389186697fe5a2a4859d697825496b83db5d0b65271cdc0488e88c" +checksum = "449811d15fbdf5ceb5c1144416066429cf82316e2ec8ce0c1f6f8a02e7bbcf8c" dependencies = [ "cfg-if", "fnv", @@ -5748,146 +6465,92 @@ dependencies = [ [[package]] name = "prometheus-client" -version = "0.16.0" +version = "0.18.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac1abe0255c04d15f571427a2d1e00099016506cf3297b53853acd2b7eb87825" +checksum = "83cd1b99916654a69008fd66b4f9397fbe08e6e51dfe23d4417acf5d3b8cb87c" dependencies = [ "dtoa", - "itoa 1.0.4", - "owning_ref", + "itoa", + "parking_lot 0.12.1", "prometheus-client-derive-text-encode", ] [[package]] name = "prometheus-client-derive-text-encode" -version = "0.2.0" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8e12d01b9d66ad9eb4529c57666b6263fc1993cb30261d83ead658fdd932652" +checksum = "66a455fbcb954c1a7decf3c586e860fd7889cddf4b8e164be736dbac95a953cd" dependencies = [ "proc-macro2", "quote", - "syn 1.0.102", -] - -[[package]] -name = "prost" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "444879275cb4fd84958b1a1d5420d15e6fcf7c235fe47f053c9c2a80aceb6001" -dependencies = [ - "bytes", - "prost-derive 0.9.0", + "syn 1.0.109", ] [[package]] name = "prost" -version = "0.10.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "71adf41db68aa0daaefc69bb30bcd68ded9b9abaad5d1fbb6304c4fb390e083e" -dependencies = [ - "bytes", - "prost-derive 0.10.1", -] - -[[package]] -name = "prost-build" -version = "0.9.0" +version = "0.11.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62941722fb675d463659e49c4f3fe1fe792ff24fe5bbaa9c08cd3b98a1c354f5" +checksum = "e48e50df39172a3e7eb17e14642445da64996989bc212b583015435d39a58537" dependencies = [ "bytes", - "heck 0.3.3", - "itertools", - "lazy_static", - "log", - "multimap", - "petgraph", - "prost 0.9.0", - "prost-types 0.9.0", - "regex", - "tempfile", - "which", + "prost-derive", ] [[package]] name = "prost-build" -version = "0.10.4" +version = "0.11.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ae5a4388762d5815a9fc0dea33c56b021cdc8dde0c55e0c9ca57197254b0cab" +checksum = "2c828f93f5ca4826f97fedcbd3f9a536c16b12cff3dbbb4a007f932bbad95b12" dependencies = [ "bytes", - "cfg-if", - "cmake", - "heck 0.4.0", + "heck 0.4.1", "itertools", "lazy_static", "log", "multimap", "petgraph", - "prost 0.10.4", - "prost-types 0.10.1", + "prettyplease", + "prost", + "prost-types", "regex", + "syn 1.0.109", "tempfile", "which", ] [[package]] name = "prost-codec" -version = "0.1.0" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00af1e92c33b4813cc79fda3f2dbf56af5169709be0202df730e9ebc3e4cd007" +checksum = "0dc34979ff898b6e141106178981ce2596c387ea6e62533facfc61a37fc879c0" dependencies = [ "asynchronous-codec", "bytes", - "prost 0.10.4", + "prost", "thiserror", "unsigned-varint", ] [[package]] name = "prost-derive" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9cc1a3263e07e0bf68e96268f37665207b49560d98739662cdfaae215c720fe" -dependencies = [ - "anyhow", - "itertools", - "proc-macro2", - "quote", - "syn 1.0.102", -] - -[[package]] -name = "prost-derive" -version = "0.10.1" +version = "0.11.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b670f45da57fb8542ebdbb6105a925fe571b67f9e7ed9f47a06a84e72b4e7cc" +checksum = "4ea9b0f8cbe5e15a8a042d030bd96668db28ecb567ec37d691971ff5731d2b1b" dependencies = [ "anyhow", "itertools", "proc-macro2", "quote", - "syn 1.0.102", -] - -[[package]] -name = "prost-types" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "534b7a0e836e3c482d2693070f982e39e7611da9695d4d1f5a4b186b51faef0a" -dependencies = [ - "bytes", - "prost 0.9.0", + "syn 1.0.109", ] [[package]] name = "prost-types" -version = "0.10.1" +version = "0.11.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d0a014229361011dc8e69c8a1ec6c2e8d0f2af7c91e3ea3f5b2170298461e68" +checksum = "379119666929a1afd7a043aa6cf96fa67a6dce9af60c88095a4686dbce4c9c88" dependencies = [ - "bytes", - "prost 0.10.4", + "prost", ] [[package]] @@ -5905,6 +6568,15 @@ version = "1.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0" +[[package]] +name = "quick-protobuf" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d6da84cc204722a989e01ba2f6e1e276e190f22263d0cb6ce8526fcdb0d2e1f" +dependencies = [ + "byteorder", +] + [[package]] name = "quicksink" version = "0.1.2" @@ -5916,11 +6588,29 @@ dependencies = [ "pin-project-lite 0.1.12", ] +[[package]] +name = "quinn-proto" +version = "0.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72ef4ced82a24bb281af338b9e8f94429b6eca01b4e66d899f40031f074e74c9" +dependencies = [ + "bytes", + "rand 0.8.5", + "ring", + "rustc-hash", + "rustls 0.20.8", + "slab", + "thiserror", + "tinyvec", + "tracing", + "webpki 0.22.0", +] + [[package]] name = "quote" -version = "1.0.27" +version = "1.0.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f4f29d145265ec1c483c7c654450edde0bfe043d3938d6972630663356d9500" +checksum = "4424af4bf778aae2051a77b60283332f386554255d722233d09fbfc7e30da2fc" dependencies = [ "proc-macro2", ] @@ -5942,7 +6632,6 @@ dependencies = [ "rand_chacha 0.2.2", "rand_core 0.5.1", "rand_hc", - "rand_pcg 0.2.1", ] [[package]] @@ -5991,17 +6680,7 @@ version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" dependencies = [ - "getrandom 0.2.7", -] - -[[package]] -name = "rand_distr" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32cb0b9bc82b0a0876c2dd994a7e7a2683d3e7390ca40e6886785ef0c7e3ee31" -dependencies = [ - "num-traits", - "rand 0.8.5", + "getrandom 0.2.8", ] [[package]] @@ -6013,15 +6692,6 @@ dependencies = [ "rand_core 0.5.1", ] -[[package]] -name = "rand_pcg" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16abd0c1b639e9eb4d7c50c0b8100b0d0f849be2349829c740fe8e6eb4816429" -dependencies = [ - "rand_core 0.5.1", -] - [[package]] name = "rand_pcg" version = "0.3.1" @@ -6039,21 +6709,19 @@ checksum = "60a357793950651c4ed0f3f52338f53b2f809f32d83a07f72909fa13e4c6c1e3" [[package]] name = "rayon" -version = "1.5.3" +version = "1.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd99e5772ead8baa5215278c9b15bf92087709e9c1b2d1f97cdb5a183c933a7d" +checksum = "1d2df5196e37bcc87abebc0053e20787d73847bb33134a69841207dd0a47f03b" dependencies = [ - "autocfg", - "crossbeam-deque", "either", "rayon-core", ] [[package]] name = "rayon-core" -version = "1.9.3" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "258bcdb5ac6dad48491bb2992db6b7cf74878b0384908af124823d118c99683f" +checksum = "4b8f95bd6966f5c87776639160a66bd8ab9895d9d4ab01ddba9fc60661aebe8d" dependencies = [ "crossbeam-channel", "crossbeam-deque", @@ -6061,13 +6729,38 @@ dependencies = [ "num_cpus", ] +[[package]] +name = "rcgen" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6413f3de1edee53342e6138e75b56d32e7bc6e332b3bd62d497b1929d4cfbcdd" +dependencies = [ + "pem", + "ring", + "time 0.3.20", + "x509-parser 0.13.2", + "yasna", +] + +[[package]] +name = "rcgen" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ffbe84efe2f38dea12e9bfc1f65377fdf03e53a18cb3b995faedf7934c7e785b" +dependencies = [ + "pem", + "ring", + "time 0.3.20", + "yasna", +] + [[package]] name = "redox_syscall" version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a" dependencies = [ - "bitflags", + "bitflags 1.3.2", ] [[package]] @@ -6076,47 +6769,48 @@ version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b033d837a7cf162d7993aded9304e30a83213c648b6e389db233191f891e5c2b" dependencies = [ - "getrandom 0.2.7", + "getrandom 0.2.8", "redox_syscall", "thiserror", ] [[package]] name = "ref-cast" -version = "1.0.10" +version = "1.0.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8ebf632f3e32bf35133f620cf481f29c99ae0fb01450fd3d85eee0225274ec1" +checksum = "f43faa91b1c8b36841ee70e97188a869d37ae21759da6846d4be66de5bf7b12c" dependencies = [ "ref-cast-impl", ] [[package]] name = "ref-cast-impl" -version = "1.0.10" +version = "1.0.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "caab98faa75ce294d40512ce514a46b15eafe78d72c9397a68ea45b3a88201b6" +checksum = "8d2275aab483050ab2a7364c1a46604865ee7d6906684e08db0f090acf74f9e7" dependencies = [ "proc-macro2", "quote", - "syn 1.0.102", + "syn 2.0.2", ] [[package]] -name = "regalloc" -version = "0.0.34" +name = "regalloc2" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62446b1d3ebf980bdc68837700af1d77b37bc430e524bf95319c6eada2a4cc02" +checksum = "300d4fbfb40c1c66a78ba3ddd41c1110247cf52f97b87d0f2fc9209bd49b030c" dependencies = [ + "fxhash", "log", - "rustc-hash", + "slice-group-by", "smallvec", ] [[package]] name = "regex" -version = "1.6.0" +version = "1.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c4eb3267174b8c6c2f654116623910a0fef09c4753f8dd83db29c48a0df988b" +checksum = "48aaa5748ba571fb95cd2c85c09f629215d3a6ece942baa100950af03a34f733" dependencies = [ "aho-corasick", "memchr", @@ -6134,48 +6828,22 @@ dependencies = [ [[package]] name = "regex-syntax" -version = "0.6.27" +version = "0.6.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3f87b73ce11b1619a3c6332f45341e0047173771e8b8b73f87bfeefb7b56244" +checksum = "456c603be3e8d448b072f410900c09faf164fbce2d480456f50eea6e25f9c848" [[package]] name = "region" -version = "2.2.0" +version = "3.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "877e54ea2adcd70d80e9179344c97f93ef0dffd6b03e1f4529e6e83ab2fa9ae0" +checksum = "76e189c2369884dce920945e2ddf79b3dff49e071a167dd1817fa9c4c00d512e" dependencies = [ - "bitflags", + "bitflags 1.3.2", "libc", "mach", "winapi", ] -[[package]] -name = "remote-externalities" -version = "0.10.0-dev" -source = "git+https://github.com/joystream/substrate.git?rev=d29a53b11c3e530d1656eef502cb0f1f8fff3522#d29a53b11c3e530d1656eef502cb0f1f8fff3522" -dependencies = [ - "env_logger", - "jsonrpsee", - "log", - "parity-scale-codec", - "serde", - "serde_json", - "sp-core", - "sp-io", - "sp-runtime", - "sp-version", -] - -[[package]] -name = "remove_dir_all" -version = "0.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3acd125665422973a33ac9d3dd2df85edad0f4ae9b00dafb1a05e43a9f5ef8e7" -dependencies = [ - "winapi", -] - [[package]] name = "resolv-conf" version = "0.7.0" @@ -6186,20 +6854,14 @@ dependencies = [ "quick-error", ] -[[package]] -name = "retain_mut" -version = "0.1.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4389f1d5789befaf6029ebd9f7dac4af7f7e3d61b69d4f30e2ac02b57e7712b0" - [[package]] name = "rfc6979" -version = "0.1.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96ef608575f6392792f9ecf7890c00086591d29a83910939d430753f7c050525" +checksum = "7743f17af12fa0b03b803ba12cd6a8d9483a587e89c69445e3909655c0b9fabb" dependencies = [ "crypto-bigint", - "hmac 0.11.0", + "hmac 0.12.1", "zeroize", ] @@ -6220,9 +6882,9 @@ dependencies = [ [[package]] name = "rocksdb" -version = "0.18.0" +version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "620f4129485ff1a7128d184bc687470c21c7951b64779ebc9cfdad3dcd920290" +checksum = "7e9562ea1d70c0cc63a34a22d977753b50cca91cc6b6527750463bd5dd8697bc" dependencies = [ "libc", "librocksdb-sys", @@ -6230,27 +6892,63 @@ dependencies = [ [[package]] name = "rpassword" -version = "5.0.1" +version = "7.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffc936cf8a7ea60c58f030fd36a612a48f440610214dc54bc36431f9ea0c3efb" +checksum = "6678cf63ab3491898c0d021b493c94c9b221d91295294a2a5746eacbe5928322" dependencies = [ "libc", + "rtoolbox", "winapi", ] +[[package]] +name = "rtcp" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1919efd6d4a6a85d13388f9487549bb8e359f17198cc03ffd72f79b553873691" +dependencies = [ + "bytes", + "thiserror", + "webrtc-util", +] + [[package]] name = "rtnetlink" version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "322c53fd76a18698f1c27381d58091de3a043d356aa5bd0d510608b565f469a0" dependencies = [ - "async-global-executor", "futures", "log", "netlink-packet-route", "netlink-proto", - "nix 0.24.2", + "nix 0.24.3", + "thiserror", + "tokio", +] + +[[package]] +name = "rtoolbox" +version = "0.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "034e22c514f5c0cb8a10ff341b9b048b5ceb21591f31c8f44c43b960f9b3524a" +dependencies = [ + "libc", + "winapi", +] + +[[package]] +name = "rtp" +version = "0.6.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2a095411ff00eed7b12e4c6a118ba984d113e1079582570d56a5ee723f11f80" +dependencies = [ + "async-trait", + "bytes", + "rand 0.8.5", + "serde", "thiserror", + "webrtc-util", ] [[package]] @@ -6286,33 +6984,69 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" dependencies = [ - "semver 1.0.14", + "semver 1.0.17", +] + +[[package]] +name = "rusticata-macros" +version = "4.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "faf0c4a6ece9950b9abdb62b1cfcf2a68b3b67a10ba445b3bb85be2a293d0632" +dependencies = [ + "nom", ] [[package]] name = "rustix" -version = "0.33.7" +version = "0.35.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "938a344304321a9da4973b9ff4f9f8db9caf4597dfd9dda6a60b523340a0fff0" +checksum = "413c4d41e2f1b0814c63567d11618483de0bd64f451b452f2ca43896579486ba" dependencies = [ - "bitflags", + "bitflags 1.3.2", "errno", - "io-lifetimes", + "io-lifetimes 0.7.5", "libc", - "linux-raw-sys", - "winapi", + "linux-raw-sys 0.0.46", + "windows-sys 0.42.0", +] + +[[package]] +name = "rustix" +version = "0.36.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2fe885c3a125aa45213b68cc1472a49880cb5923dc23f522ad2791b882228778" +dependencies = [ + "bitflags 1.3.2", + "errno", + "io-lifetimes 1.0.8", + "libc", + "linux-raw-sys 0.1.4", + "windows-sys 0.45.0", +] + +[[package]] +name = "rustls" +version = "0.19.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "35edb675feee39aec9c99fa5ff985081995a06d594114ae14cbe797ad7b7a6d7" +dependencies = [ + "base64 0.13.1", + "log", + "ring", + "sct 0.6.1", + "webpki 0.21.4", ] [[package]] name = "rustls" -version = "0.20.6" +version = "0.20.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5aab8ee6c7097ed6057f43c187a62418d0c05a4bd5f18b3571db50ee0f9ce033" +checksum = "fff78fc74d175294f4e83b28343315ffcfb114b156f0185e9741cb5570f50e2f" dependencies = [ "log", "ring", - "sct", - "webpki", + "sct 0.7.0", + "webpki 0.22.0", ] [[package]] @@ -6329,29 +7063,18 @@ dependencies = [ [[package]] name = "rustls-pemfile" -version = "1.0.1" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0864aeff53f8c05aa08d86e5ef839d3dfcf07aeba2db32f12db0ef716e87bd55" +checksum = "d194b56d58803a43635bdc398cd17e383d6f71f9182b9a192c127ca42494a59b" dependencies = [ - "base64", + "base64 0.21.0", ] [[package]] name = "rustversion" -version = "1.0.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97477e48b4cf8603ad5f7aaf897467cf42ab4218a38ef76fb14c2d6773a6d6a8" - -[[package]] -name = "rw-stream-sink" -version = "0.2.1" +version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4da5fcb054c46f5a5dff833b129285a93d3f0179531735e6c866e8cc307d2020" -dependencies = [ - "futures", - "pin-project 0.4.30", - "static_assertions", -] +checksum = "4f3208ce4d8448b3f3e7d168a73f5e0c43a61e32930de3bceeccedb388b6bf06" [[package]] name = "rw-stream-sink" @@ -6360,15 +7083,15 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "26338f5e09bb721b85b135ea05af7767c90b52f6de4f087d4f4a3a9d64e7dc04" dependencies = [ "futures", - "pin-project 1.0.12", + "pin-project", "static_assertions", ] [[package]] name = "ryu" -version = "1.0.11" +version = "1.0.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4501abdff3ae82a1c1b477a17252eb69cee9e66eb915c1abaa4f44d873df9f09" +checksum = "f91339c0467de62360649f8d3e185ca8de4224ff281f66000de5eb2a77a79041" [[package]] name = "safe-mix" @@ -6380,12 +7103,12 @@ dependencies = [ ] [[package]] -name = "salsa20" -version = "0.9.0" +name = "safe_arch" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c0fbb5f676da676c260ba276a8f43a8dc67cf02d1438423aeb1c677a7212686" +checksum = "794821e4ccb0d9f979512f9c1973480123f9bd62a90d74ab0f9426fcf8f4a529" dependencies = [ - "cipher", + "bytemuck", ] [[package]] @@ -6400,7 +7123,7 @@ dependencies = [ [[package]] name = "sc-allocator" version = "4.1.0-dev" -source = "git+https://github.com/joystream/substrate.git?rev=d29a53b11c3e530d1656eef502cb0f1f8fff3522#d29a53b11c3e530d1656eef502cb0f1f8fff3522" +source = "git+https://github.com/joystream/substrate.git?rev=1d0eefca86ef31b9e7727df01a6ed23ad65491e9#1d0eefca86ef31b9e7727df01a6ed23ad65491e9" dependencies = [ "log", "sp-core", @@ -6411,7 +7134,7 @@ dependencies = [ [[package]] name = "sc-authority-discovery" version = "0.10.0-dev" -source = "git+https://github.com/joystream/substrate.git?rev=d29a53b11c3e530d1656eef502cb0f1f8fff3522#d29a53b11c3e530d1656eef502cb0f1f8fff3522" +source = "git+https://github.com/joystream/substrate.git?rev=1d0eefca86ef31b9e7727df01a6ed23ad65491e9#1d0eefca86ef31b9e7727df01a6ed23ad65491e9" dependencies = [ "async-trait", "futures", @@ -6420,11 +7143,12 @@ dependencies = [ "libp2p", "log", "parity-scale-codec", - "prost 0.10.4", - "prost-build 0.9.0", - "rand 0.7.3", + "prost", + "prost-build", + "rand 0.8.5", "sc-client-api", "sc-network", + "sc-network-common", "sp-api", "sp-authority-discovery", "sp-blockchain", @@ -6438,7 +7162,7 @@ dependencies = [ [[package]] name = "sc-basic-authorship" version = "0.10.0-dev" -source = "git+https://github.com/joystream/substrate.git?rev=d29a53b11c3e530d1656eef502cb0f1f8fff3522#d29a53b11c3e530d1656eef502cb0f1f8fff3522" +source = "git+https://github.com/joystream/substrate.git?rev=1d0eefca86ef31b9e7727df01a6ed23ad65491e9#1d0eefca86ef31b9e7727df01a6ed23ad65491e9" dependencies = [ "futures", "futures-timer", @@ -6461,7 +7185,7 @@ dependencies = [ [[package]] name = "sc-block-builder" version = "0.10.0-dev" -source = "git+https://github.com/joystream/substrate.git?rev=d29a53b11c3e530d1656eef502cb0f1f8fff3522#d29a53b11c3e530d1656eef502cb0f1f8fff3522" +source = "git+https://github.com/joystream/substrate.git?rev=1d0eefca86ef31b9e7727df01a6ed23ad65491e9#1d0eefca86ef31b9e7727df01a6ed23ad65491e9" dependencies = [ "parity-scale-codec", "sc-client-api", @@ -6471,58 +7195,60 @@ dependencies = [ "sp-core", "sp-inherents", "sp-runtime", - "sp-state-machine", ] [[package]] name = "sc-chain-spec" version = "4.0.0-dev" -source = "git+https://github.com/joystream/substrate.git?rev=d29a53b11c3e530d1656eef502cb0f1f8fff3522#d29a53b11c3e530d1656eef502cb0f1f8fff3522" +source = "git+https://github.com/joystream/substrate.git?rev=1d0eefca86ef31b9e7727df01a6ed23ad65491e9#1d0eefca86ef31b9e7727df01a6ed23ad65491e9" dependencies = [ - "impl-trait-for-tuples", "memmap2", - "parity-scale-codec", "sc-chain-spec-derive", + "sc-client-api", + "sc-executor", "sc-network", "sc-telemetry", "serde", "serde_json", + "sp-blockchain", "sp-core", "sp-runtime", + "sp-state-machine", ] [[package]] name = "sc-chain-spec-derive" version = "4.0.0-dev" -source = "git+https://github.com/joystream/substrate.git?rev=d29a53b11c3e530d1656eef502cb0f1f8fff3522#d29a53b11c3e530d1656eef502cb0f1f8fff3522" +source = "git+https://github.com/joystream/substrate.git?rev=1d0eefca86ef31b9e7727df01a6ed23ad65491e9#1d0eefca86ef31b9e7727df01a6ed23ad65491e9" dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn 1.0.102", + "syn 1.0.109", ] [[package]] name = "sc-cli" version = "0.10.0-dev" -source = "git+https://github.com/joystream/substrate.git?rev=d29a53b11c3e530d1656eef502cb0f1f8fff3522#d29a53b11c3e530d1656eef502cb0f1f8fff3522" +source = "git+https://github.com/joystream/substrate.git?rev=1d0eefca86ef31b9e7727df01a6ed23ad65491e9#1d0eefca86ef31b9e7727df01a6ed23ad65491e9" dependencies = [ + "array-bytes", "chrono", - "clap 3.2.22", + "clap 4.1.11", "fdlimit", "futures", - "hex", "libp2p", "log", "names", "parity-scale-codec", - "rand 0.7.3", + "rand 0.8.5", "regex", "rpassword", "sc-client-api", "sc-client-db", "sc-keystore", "sc-network", + "sc-network-common", "sc-service", "sc-telemetry", "sc-tracing", @@ -6544,11 +7270,10 @@ dependencies = [ [[package]] name = "sc-client-api" version = "4.0.0-dev" -source = "git+https://github.com/joystream/substrate.git?rev=d29a53b11c3e530d1656eef502cb0f1f8fff3522#d29a53b11c3e530d1656eef502cb0f1f8fff3522" +source = "git+https://github.com/joystream/substrate.git?rev=1d0eefca86ef31b9e7727df01a6ed23ad65491e9#1d0eefca86ef31b9e7727df01a6ed23ad65491e9" dependencies = [ "fnv", "futures", - "hash-db", "log", "parity-scale-codec", "parking_lot 0.12.1", @@ -6565,14 +7290,13 @@ dependencies = [ "sp-runtime", "sp-state-machine", "sp-storage", - "sp-trie", "substrate-prometheus-endpoint", ] [[package]] name = "sc-client-db" version = "0.10.0-dev" -source = "git+https://github.com/joystream/substrate.git?rev=d29a53b11c3e530d1656eef502cb0f1f8fff3522#d29a53b11c3e530d1656eef502cb0f1f8fff3522" +source = "git+https://github.com/joystream/substrate.git?rev=1d0eefca86ef31b9e7727df01a6ed23ad65491e9#1d0eefca86ef31b9e7727df01a6ed23ad65491e9" dependencies = [ "hash-db", "kvdb", @@ -6585,6 +7309,7 @@ dependencies = [ "parking_lot 0.12.1", "sc-client-api", "sc-state-db", + "schnellru", "sp-arithmetic", "sp-blockchain", "sp-core", @@ -6597,13 +7322,14 @@ dependencies = [ [[package]] name = "sc-consensus" version = "0.10.0-dev" -source = "git+https://github.com/joystream/substrate.git?rev=d29a53b11c3e530d1656eef502cb0f1f8fff3522#d29a53b11c3e530d1656eef502cb0f1f8fff3522" +source = "git+https://github.com/joystream/substrate.git?rev=1d0eefca86ef31b9e7727df01a6ed23ad65491e9#1d0eefca86ef31b9e7727df01a6ed23ad65491e9" dependencies = [ "async-trait", "futures", "futures-timer", "libp2p", "log", + "mockall", "parking_lot 0.12.1", "sc-client-api", "sc-utils", @@ -6621,7 +7347,7 @@ dependencies = [ [[package]] name = "sc-consensus-babe" version = "0.10.0-dev" -source = "git+https://github.com/joystream/substrate.git?rev=d29a53b11c3e530d1656eef502cb0f1f8fff3522#d29a53b11c3e530d1656eef502cb0f1f8fff3522" +source = "git+https://github.com/joystream/substrate.git?rev=1d0eefca86ef31b9e7727df01a6ed23ad65491e9#1d0eefca86ef31b9e7727df01a6ed23ad65491e9" dependencies = [ "async-trait", "fork-tree", @@ -6629,20 +7355,18 @@ dependencies = [ "log", "merlin", "num-bigint", - "num-rational 0.2.4", + "num-rational", "num-traits", "parity-scale-codec", "parking_lot 0.12.1", - "rand 0.7.3", - "retain_mut", "sc-client-api", "sc-consensus", "sc-consensus-epochs", "sc-consensus-slots", "sc-keystore", "sc-telemetry", + "scale-info", "schnorrkel", - "serde", "sp-api", "sp-application-crypto", "sp-block-builder", @@ -6653,10 +7377,8 @@ dependencies = [ "sp-consensus-vrf", "sp-core", "sp-inherents", - "sp-io", "sp-keystore", "sp-runtime", - "sp-version", "substrate-prometheus-endpoint", "thiserror", ] @@ -6664,7 +7386,7 @@ dependencies = [ [[package]] name = "sc-consensus-babe-rpc" version = "0.10.0-dev" -source = "git+https://github.com/joystream/substrate.git?rev=d29a53b11c3e530d1656eef502cb0f1f8fff3522#d29a53b11c3e530d1656eef502cb0f1f8fff3522" +source = "git+https://github.com/joystream/substrate.git?rev=1d0eefca86ef31b9e7727df01a6ed23ad65491e9#1d0eefca86ef31b9e7727df01a6ed23ad65491e9" dependencies = [ "futures", "jsonrpsee", @@ -6686,7 +7408,7 @@ dependencies = [ [[package]] name = "sc-consensus-epochs" version = "0.10.0-dev" -source = "git+https://github.com/joystream/substrate.git?rev=d29a53b11c3e530d1656eef502cb0f1f8fff3522#d29a53b11c3e530d1656eef502cb0f1f8fff3522" +source = "git+https://github.com/joystream/substrate.git?rev=1d0eefca86ef31b9e7727df01a6ed23ad65491e9#1d0eefca86ef31b9e7727df01a6ed23ad65491e9" dependencies = [ "fork-tree", "parity-scale-codec", @@ -6697,47 +7419,93 @@ dependencies = [ ] [[package]] -name = "sc-consensus-slots" +name = "sc-consensus-grandpa" version = "0.10.0-dev" -source = "git+https://github.com/joystream/substrate.git?rev=d29a53b11c3e530d1656eef502cb0f1f8fff3522#d29a53b11c3e530d1656eef502cb0f1f8fff3522" +source = "git+https://github.com/joystream/substrate.git?rev=1d0eefca86ef31b9e7727df01a6ed23ad65491e9#1d0eefca86ef31b9e7727df01a6ed23ad65491e9" dependencies = [ + "ahash 0.8.3", + "array-bytes", "async-trait", + "dyn-clone", + "finality-grandpa", + "fork-tree", "futures", "futures-timer", "log", "parity-scale-codec", + "parking_lot 0.12.1", + "rand 0.8.5", + "sc-block-builder", + "sc-chain-spec", "sc-client-api", "sc-consensus", + "sc-network", + "sc-network-common", + "sc-network-gossip", "sc-telemetry", + "sc-utils", + "serde_json", + "sp-api", + "sp-application-crypto", "sp-arithmetic", "sp-blockchain", "sp-consensus", - "sp-consensus-slots", + "sp-consensus-grandpa", "sp-core", - "sp-inherents", + "sp-keystore", "sp-runtime", - "sp-state-machine", - "sp-timestamp", + "substrate-prometheus-endpoint", "thiserror", ] [[package]] -name = "sc-consensus-uncles" +name = "sc-consensus-grandpa-rpc" version = "0.10.0-dev" -source = "git+https://github.com/joystream/substrate.git?rev=d29a53b11c3e530d1656eef502cb0f1f8fff3522#d29a53b11c3e530d1656eef502cb0f1f8fff3522" +source = "git+https://github.com/joystream/substrate.git?rev=1d0eefca86ef31b9e7727df01a6ed23ad65491e9#1d0eefca86ef31b9e7727df01a6ed23ad65491e9" dependencies = [ + "finality-grandpa", + "futures", + "jsonrpsee", + "log", + "parity-scale-codec", "sc-client-api", - "sp-authorship", + "sc-consensus-grandpa", + "sc-rpc", + "serde", + "sp-blockchain", + "sp-core", "sp-runtime", "thiserror", ] +[[package]] +name = "sc-consensus-slots" +version = "0.10.0-dev" +source = "git+https://github.com/joystream/substrate.git?rev=1d0eefca86ef31b9e7727df01a6ed23ad65491e9#1d0eefca86ef31b9e7727df01a6ed23ad65491e9" +dependencies = [ + "async-trait", + "futures", + "futures-timer", + "log", + "parity-scale-codec", + "sc-client-api", + "sc-consensus", + "sc-telemetry", + "sp-arithmetic", + "sp-blockchain", + "sp-consensus", + "sp-consensus-slots", + "sp-core", + "sp-inherents", + "sp-runtime", + "sp-state-machine", +] + [[package]] name = "sc-executor" version = "0.10.0-dev" -source = "git+https://github.com/joystream/substrate.git?rev=d29a53b11c3e530d1656eef502cb0f1f8fff3522#d29a53b11c3e530d1656eef502cb0f1f8fff3522" +source = "git+https://github.com/joystream/substrate.git?rev=1d0eefca86ef31b9e7727df01a6ed23ad65491e9#1d0eefca86ef31b9e7727df01a6ed23ad65491e9" dependencies = [ - "lazy_static", "lru", "parity-scale-codec", "parking_lot 0.12.1", @@ -6746,12 +7514,10 @@ dependencies = [ "sc-executor-wasmtime", "sp-api", "sp-core", - "sp-core-hashing-proc-macro", "sp-externalities", "sp-io", "sp-panic-handler", "sp-runtime-interface", - "sp-tasks", "sp-trie", "sp-version", "sp-wasm-interface", @@ -6762,14 +7528,10 @@ dependencies = [ [[package]] name = "sc-executor-common" version = "0.10.0-dev" -source = "git+https://github.com/joystream/substrate.git?rev=d29a53b11c3e530d1656eef502cb0f1f8fff3522#d29a53b11c3e530d1656eef502cb0f1f8fff3522" +source = "git+https://github.com/joystream/substrate.git?rev=1d0eefca86ef31b9e7727df01a6ed23ad65491e9#1d0eefca86ef31b9e7727df01a6ed23ad65491e9" dependencies = [ - "environmental", - "parity-scale-codec", "sc-allocator", "sp-maybe-compressed-blob", - "sp-sandbox", - "sp-serializer", "sp-wasm-interface", "thiserror", "wasm-instrument", @@ -6779,14 +7541,12 @@ dependencies = [ [[package]] name = "sc-executor-wasmi" version = "0.10.0-dev" -source = "git+https://github.com/joystream/substrate.git?rev=d29a53b11c3e530d1656eef502cb0f1f8fff3522#d29a53b11c3e530d1656eef502cb0f1f8fff3522" +source = "git+https://github.com/joystream/substrate.git?rev=1d0eefca86ef31b9e7727df01a6ed23ad65491e9#1d0eefca86ef31b9e7727df01a6ed23ad65491e9" dependencies = [ "log", - "parity-scale-codec", "sc-allocator", "sc-executor-common", "sp-runtime-interface", - "sp-sandbox", "sp-wasm-interface", "wasmi", ] @@ -6794,95 +7554,33 @@ dependencies = [ [[package]] name = "sc-executor-wasmtime" version = "0.10.0-dev" -source = "git+https://github.com/joystream/substrate.git?rev=d29a53b11c3e530d1656eef502cb0f1f8fff3522#d29a53b11c3e530d1656eef502cb0f1f8fff3522" +source = "git+https://github.com/joystream/substrate.git?rev=1d0eefca86ef31b9e7727df01a6ed23ad65491e9#1d0eefca86ef31b9e7727df01a6ed23ad65491e9" dependencies = [ + "anyhow", "cfg-if", "libc", "log", - "parity-scale-codec", - "parity-wasm 0.42.2", + "once_cell", + "rustix 0.36.10", "sc-allocator", "sc-executor-common", "sp-runtime-interface", - "sp-sandbox", "sp-wasm-interface", "wasmtime", ] -[[package]] -name = "sc-finality-grandpa" -version = "0.10.0-dev" -source = "git+https://github.com/joystream/substrate.git?rev=d29a53b11c3e530d1656eef502cb0f1f8fff3522#d29a53b11c3e530d1656eef502cb0f1f8fff3522" -dependencies = [ - "ahash", - "async-trait", - "dyn-clone", - "finality-grandpa", - "fork-tree", - "futures", - "futures-timer", - "hex", - "log", - "parity-scale-codec", - "parking_lot 0.12.1", - "rand 0.8.5", - "sc-block-builder", - "sc-chain-spec", - "sc-client-api", - "sc-consensus", - "sc-keystore", - "sc-network", - "sc-network-gossip", - "sc-telemetry", - "sc-utils", - "serde_json", - "sp-api", - "sp-application-crypto", - "sp-arithmetic", - "sp-blockchain", - "sp-consensus", - "sp-core", - "sp-finality-grandpa", - "sp-keystore", - "sp-runtime", - "substrate-prometheus-endpoint", - "thiserror", -] - -[[package]] -name = "sc-finality-grandpa-rpc" -version = "0.10.0-dev" -source = "git+https://github.com/joystream/substrate.git?rev=d29a53b11c3e530d1656eef502cb0f1f8fff3522#d29a53b11c3e530d1656eef502cb0f1f8fff3522" -dependencies = [ - "finality-grandpa", - "futures", - "jsonrpsee", - "log", - "parity-scale-codec", - "sc-client-api", - "sc-finality-grandpa", - "sc-rpc", - "serde", - "serde_json", - "sp-blockchain", - "sp-core", - "sp-runtime", - "thiserror", -] - [[package]] name = "sc-informant" version = "0.10.0-dev" -source = "git+https://github.com/joystream/substrate.git?rev=d29a53b11c3e530d1656eef502cb0f1f8fff3522#d29a53b11c3e530d1656eef502cb0f1f8fff3522" +source = "git+https://github.com/joystream/substrate.git?rev=1d0eefca86ef31b9e7727df01a6ed23ad65491e9#1d0eefca86ef31b9e7727df01a6ed23ad65491e9" dependencies = [ "ansi_term", "futures", "futures-timer", "log", - "parity-util-mem", "sc-client-api", "sc-network", - "sc-transaction-pool-api", + "sc-network-common", "sp-blockchain", "sp-runtime", ] @@ -6890,10 +7588,10 @@ dependencies = [ [[package]] name = "sc-keystore" version = "4.0.0-dev" -source = "git+https://github.com/joystream/substrate.git?rev=d29a53b11c3e530d1656eef502cb0f1f8fff3522#d29a53b11c3e530d1656eef502cb0f1f8fff3522" +source = "git+https://github.com/joystream/substrate.git?rev=1d0eefca86ef31b9e7727df01a6ed23ad65491e9#1d0eefca86ef31b9e7727df01a6ed23ad65491e9" dependencies = [ + "array-bytes", "async-trait", - "hex", "parking_lot 0.12.1", "serde_json", "sp-application-crypto", @@ -6905,37 +7603,31 @@ dependencies = [ [[package]] name = "sc-network" version = "0.10.0-dev" -source = "git+https://github.com/joystream/substrate.git?rev=d29a53b11c3e530d1656eef502cb0f1f8fff3522#d29a53b11c3e530d1656eef502cb0f1f8fff3522" +source = "git+https://github.com/joystream/substrate.git?rev=1d0eefca86ef31b9e7727df01a6ed23ad65491e9#1d0eefca86ef31b9e7727df01a6ed23ad65491e9" dependencies = [ + "array-bytes", + "async-channel", "async-trait", "asynchronous-codec", - "bitflags", "bytes", - "cid", "either", "fnv", - "fork-tree", "futures", "futures-timer", - "hex", "ip_network", "libp2p", - "linked-hash-map", "linked_hash_set", "log", "lru", + "mockall", "parity-scale-codec", "parking_lot 0.12.1", - "pin-project 1.0.12", - "prost 0.10.4", - "prost-build 0.9.0", - "rand 0.7.3", + "pin-project", + "rand 0.8.5", "sc-block-builder", "sc-client-api", "sc-consensus", "sc-network-common", - "sc-network-light", - "sc-network-sync", "sc-peerset", "sc-utils", "serde", @@ -6945,40 +7637,75 @@ dependencies = [ "sp-blockchain", "sp-consensus", "sp-core", - "sp-finality-grandpa", "sp-runtime", "substrate-prometheus-endpoint", "thiserror", "unsigned-varint", - "void", "zeroize", ] [[package]] -name = "sc-network-common" +name = "sc-network-bitswap" version = "0.10.0-dev" -source = "git+https://github.com/joystream/substrate.git?rev=d29a53b11c3e530d1656eef502cb0f1f8fff3522#d29a53b11c3e530d1656eef502cb0f1f8fff3522" +source = "git+https://github.com/joystream/substrate.git?rev=1d0eefca86ef31b9e7727df01a6ed23ad65491e9#1d0eefca86ef31b9e7727df01a6ed23ad65491e9" dependencies = [ + "cid", "futures", "libp2p", - "parity-scale-codec", - "prost-build 0.9.0", - "sc-peerset", - "smallvec", -] - -[[package]] + "log", + "prost", + "prost-build", + "sc-client-api", + "sc-network", + "sc-network-common", + "sp-blockchain", + "sp-runtime", + "thiserror", + "unsigned-varint", +] + +[[package]] +name = "sc-network-common" +version = "0.10.0-dev" +source = "git+https://github.com/joystream/substrate.git?rev=1d0eefca86ef31b9e7727df01a6ed23ad65491e9#1d0eefca86ef31b9e7727df01a6ed23ad65491e9" +dependencies = [ + "array-bytes", + "async-trait", + "bitflags 1.3.2", + "bytes", + "futures", + "futures-timer", + "libp2p", + "parity-scale-codec", + "prost-build", + "sc-consensus", + "sc-peerset", + "sc-utils", + "serde", + "smallvec", + "sp-blockchain", + "sp-consensus", + "sp-consensus-grandpa", + "sp-runtime", + "substrate-prometheus-endpoint", + "thiserror", + "zeroize", +] + +[[package]] name = "sc-network-gossip" version = "0.10.0-dev" -source = "git+https://github.com/joystream/substrate.git?rev=d29a53b11c3e530d1656eef502cb0f1f8fff3522#d29a53b11c3e530d1656eef502cb0f1f8fff3522" +source = "git+https://github.com/joystream/substrate.git?rev=1d0eefca86ef31b9e7727df01a6ed23ad65491e9#1d0eefca86ef31b9e7727df01a6ed23ad65491e9" dependencies = [ - "ahash", + "ahash 0.8.3", "futures", "futures-timer", "libp2p", "log", "lru", "sc-network", + "sc-network-common", + "sc-peerset", "sp-runtime", "substrate-prometheus-endpoint", "tracing", @@ -6987,15 +7714,17 @@ dependencies = [ [[package]] name = "sc-network-light" version = "0.10.0-dev" -source = "git+https://github.com/joystream/substrate.git?rev=d29a53b11c3e530d1656eef502cb0f1f8fff3522#d29a53b11c3e530d1656eef502cb0f1f8fff3522" +source = "git+https://github.com/joystream/substrate.git?rev=1d0eefca86ef31b9e7727df01a6ed23ad65491e9#1d0eefca86ef31b9e7727df01a6ed23ad65491e9" dependencies = [ + "array-bytes", "futures", "libp2p", "log", "parity-scale-codec", - "prost 0.10.4", - "prost-build 0.9.0", + "prost", + "prost-build", "sc-client-api", + "sc-network", "sc-network-common", "sc-peerset", "sp-blockchain", @@ -7007,51 +7736,79 @@ dependencies = [ [[package]] name = "sc-network-sync" version = "0.10.0-dev" -source = "git+https://github.com/joystream/substrate.git?rev=d29a53b11c3e530d1656eef502cb0f1f8fff3522#d29a53b11c3e530d1656eef502cb0f1f8fff3522" +source = "git+https://github.com/joystream/substrate.git?rev=1d0eefca86ef31b9e7727df01a6ed23ad65491e9#1d0eefca86ef31b9e7727df01a6ed23ad65491e9" dependencies = [ - "bitflags", - "either", + "array-bytes", + "async-trait", "fork-tree", "futures", + "futures-timer", "libp2p", "log", "lru", + "mockall", "parity-scale-codec", - "prost 0.10.4", - "prost-build 0.9.0", + "prost", + "prost-build", "sc-client-api", "sc-consensus", + "sc-network", "sc-network-common", "sc-peerset", + "sc-utils", "smallvec", "sp-arithmetic", "sp-blockchain", "sp-consensus", + "sp-consensus-grandpa", "sp-core", - "sp-finality-grandpa", "sp-runtime", + "substrate-prometheus-endpoint", "thiserror", ] +[[package]] +name = "sc-network-transactions" +version = "0.10.0-dev" +source = "git+https://github.com/joystream/substrate.git?rev=1d0eefca86ef31b9e7727df01a6ed23ad65491e9#1d0eefca86ef31b9e7727df01a6ed23ad65491e9" +dependencies = [ + "array-bytes", + "futures", + "libp2p", + "log", + "parity-scale-codec", + "pin-project", + "sc-network", + "sc-network-common", + "sc-peerset", + "sc-utils", + "sp-consensus", + "sp-runtime", + "substrate-prometheus-endpoint", +] + [[package]] name = "sc-offchain" version = "4.0.0-dev" -source = "git+https://github.com/joystream/substrate.git?rev=d29a53b11c3e530d1656eef502cb0f1f8fff3522#d29a53b11c3e530d1656eef502cb0f1f8fff3522" +source = "git+https://github.com/joystream/substrate.git?rev=1d0eefca86ef31b9e7727df01a6ed23ad65491e9#1d0eefca86ef31b9e7727df01a6ed23ad65491e9" dependencies = [ + "array-bytes", "bytes", "fnv", "futures", "futures-timer", - "hex", "hyper", "hyper-rustls", + "libp2p", "num_cpus", "once_cell", "parity-scale-codec", "parking_lot 0.12.1", - "rand 0.7.3", + "rand 0.8.5", "sc-client-api", "sc-network", + "sc-network-common", + "sc-peerset", "sc-utils", "sp-api", "sp-core", @@ -7064,7 +7821,7 @@ dependencies = [ [[package]] name = "sc-peerset" version = "4.0.0-dev" -source = "git+https://github.com/joystream/substrate.git?rev=d29a53b11c3e530d1656eef502cb0f1f8fff3522#d29a53b11c3e530d1656eef502cb0f1f8fff3522" +source = "git+https://github.com/joystream/substrate.git?rev=1d0eefca86ef31b9e7727df01a6ed23ad65491e9#1d0eefca86ef31b9e7727df01a6ed23ad65491e9" dependencies = [ "futures", "libp2p", @@ -7077,7 +7834,7 @@ dependencies = [ [[package]] name = "sc-proposer-metrics" version = "0.10.0-dev" -source = "git+https://github.com/joystream/substrate.git?rev=d29a53b11c3e530d1656eef502cb0f1f8fff3522#d29a53b11c3e530d1656eef502cb0f1f8fff3522" +source = "git+https://github.com/joystream/substrate.git?rev=1d0eefca86ef31b9e7727df01a6ed23ad65491e9#1d0eefca86ef31b9e7727df01a6ed23ad65491e9" dependencies = [ "log", "substrate-prometheus-endpoint", @@ -7086,10 +7843,9 @@ dependencies = [ [[package]] name = "sc-rpc" version = "4.0.0-dev" -source = "git+https://github.com/joystream/substrate.git?rev=d29a53b11c3e530d1656eef502cb0f1f8fff3522#d29a53b11c3e530d1656eef502cb0f1f8fff3522" +source = "git+https://github.com/joystream/substrate.git?rev=1d0eefca86ef31b9e7727df01a6ed23ad65491e9#1d0eefca86ef31b9e7727df01a6ed23ad65491e9" dependencies = [ "futures", - "hash-db", "jsonrpsee", "log", "parity-scale-codec", @@ -7111,18 +7867,16 @@ dependencies = [ "sp-runtime", "sp-session", "sp-version", + "tokio", ] [[package]] name = "sc-rpc-api" version = "0.10.0-dev" -source = "git+https://github.com/joystream/substrate.git?rev=d29a53b11c3e530d1656eef502cb0f1f8fff3522#d29a53b11c3e530d1656eef502cb0f1f8fff3522" +source = "git+https://github.com/joystream/substrate.git?rev=1d0eefca86ef31b9e7727df01a6ed23ad65491e9#1d0eefca86ef31b9e7727df01a6ed23ad65491e9" dependencies = [ - "futures", "jsonrpsee", - "log", "parity-scale-codec", - "parking_lot 0.12.1", "sc-chain-spec", "sc-transaction-pool-api", "scale-info", @@ -7131,7 +7885,6 @@ dependencies = [ "sp-core", "sp-rpc", "sp-runtime", - "sp-tracing", "sp-version", "thiserror", ] @@ -7139,34 +7892,60 @@ dependencies = [ [[package]] name = "sc-rpc-server" version = "4.0.0-dev" -source = "git+https://github.com/joystream/substrate.git?rev=d29a53b11c3e530d1656eef502cb0f1f8fff3522#d29a53b11c3e530d1656eef502cb0f1f8fff3522" +source = "git+https://github.com/joystream/substrate.git?rev=1d0eefca86ef31b9e7727df01a6ed23ad65491e9#1d0eefca86ef31b9e7727df01a6ed23ad65491e9" dependencies = [ - "futures", + "http", "jsonrpsee", "log", "serde_json", "substrate-prometheus-endpoint", "tokio", + "tower", + "tower-http", +] + +[[package]] +name = "sc-rpc-spec-v2" +version = "0.10.0-dev" +source = "git+https://github.com/joystream/substrate.git?rev=1d0eefca86ef31b9e7727df01a6ed23ad65491e9#1d0eefca86ef31b9e7727df01a6ed23ad65491e9" +dependencies = [ + "array-bytes", + "futures", + "futures-util", + "hex", + "jsonrpsee", + "log", + "parity-scale-codec", + "parking_lot 0.12.1", + "sc-chain-spec", + "sc-client-api", + "sc-transaction-pool-api", + "serde", + "sp-api", + "sp-blockchain", + "sp-core", + "sp-runtime", + "sp-version", + "thiserror", + "tokio-stream", ] [[package]] name = "sc-service" version = "0.10.0-dev" -source = "git+https://github.com/joystream/substrate.git?rev=d29a53b11c3e530d1656eef502cb0f1f8fff3522#d29a53b11c3e530d1656eef502cb0f1f8fff3522" +source = "git+https://github.com/joystream/substrate.git?rev=1d0eefca86ef31b9e7727df01a6ed23ad65491e9#1d0eefca86ef31b9e7727df01a6ed23ad65491e9" dependencies = [ "async-trait", "directories", "exit-future", "futures", "futures-timer", - "hash-db", "jsonrpsee", "log", "parity-scale-codec", - "parity-util-mem", "parking_lot 0.12.1", - "pin-project 1.0.12", - "rand 0.7.3", + "pin-project", + "rand 0.8.5", "sc-block-builder", "sc-chain-spec", "sc-client-api", @@ -7176,10 +7955,16 @@ dependencies = [ "sc-informant", "sc-keystore", "sc-network", + "sc-network-bitswap", "sc-network-common", + "sc-network-light", + "sc-network-sync", + "sc-network-transactions", "sc-offchain", "sc-rpc", "sc-rpc-server", + "sc-rpc-spec-v2", + "sc-storage-monitor", "sc-sysinfo", "sc-telemetry", "sc-tracing", @@ -7189,23 +7974,20 @@ dependencies = [ "serde", "serde_json", "sp-api", - "sp-application-crypto", - "sp-block-builder", "sp-blockchain", "sp-consensus", "sp-core", "sp-externalities", - "sp-inherents", "sp-keystore", "sp-runtime", "sp-session", "sp-state-machine", "sp-storage", - "sp-tracing", "sp-transaction-pool", "sp-transaction-storage-proof", "sp-trie", "sp-version", + "static_init", "substrate-prometheus-endpoint", "tempfile", "thiserror", @@ -7217,12 +7999,12 @@ dependencies = [ [[package]] name = "sc-service-test" version = "2.0.0" -source = "git+https://github.com/joystream/substrate.git?rev=d29a53b11c3e530d1656eef502cb0f1f8fff3522#d29a53b11c3e530d1656eef502cb0f1f8fff3522" +source = "git+https://github.com/joystream/substrate.git?rev=1d0eefca86ef31b9e7727df01a6ed23ad65491e9#1d0eefca86ef31b9e7727df01a6ed23ad65491e9" dependencies = [ + "array-bytes", + "async-channel", "fdlimit", "futures", - "hex", - "hex-literal", "log", "parity-scale-codec", "parking_lot 0.12.1", @@ -7232,14 +8014,15 @@ dependencies = [ "sc-consensus", "sc-executor", "sc-network", + "sc-network-common", + "sc-network-sync", "sc-service", "sc-transaction-pool-api", "sp-api", "sp-blockchain", "sp-consensus", "sp-core", - "sp-externalities", - "sp-panic-handler", + "sp-io", "sp-runtime", "sp-state-machine", "sp-storage", @@ -7254,21 +8037,34 @@ dependencies = [ [[package]] name = "sc-state-db" version = "0.10.0-dev" -source = "git+https://github.com/joystream/substrate.git?rev=d29a53b11c3e530d1656eef502cb0f1f8fff3522#d29a53b11c3e530d1656eef502cb0f1f8fff3522" +source = "git+https://github.com/joystream/substrate.git?rev=1d0eefca86ef31b9e7727df01a6ed23ad65491e9#1d0eefca86ef31b9e7727df01a6ed23ad65491e9" dependencies = [ "log", "parity-scale-codec", - "parity-util-mem", - "parity-util-mem-derive", "parking_lot 0.12.1", - "sc-client-api", "sp-core", ] +[[package]] +name = "sc-storage-monitor" +version = "0.1.0" +source = "git+https://github.com/joystream/substrate.git?rev=1d0eefca86ef31b9e7727df01a6ed23ad65491e9#1d0eefca86ef31b9e7727df01a6ed23ad65491e9" +dependencies = [ + "clap 4.1.11", + "fs4", + "futures", + "log", + "sc-client-db", + "sc-utils", + "sp-core", + "thiserror", + "tokio", +] + [[package]] name = "sc-sync-state-rpc" version = "0.10.0-dev" -source = "git+https://github.com/joystream/substrate.git?rev=d29a53b11c3e530d1656eef502cb0f1f8fff3522#d29a53b11c3e530d1656eef502cb0f1f8fff3522" +source = "git+https://github.com/joystream/substrate.git?rev=1d0eefca86ef31b9e7727df01a6ed23ad65491e9#1d0eefca86ef31b9e7727df01a6ed23ad65491e9" dependencies = [ "jsonrpsee", "parity-scale-codec", @@ -7276,7 +8072,7 @@ dependencies = [ "sc-client-api", "sc-consensus-babe", "sc-consensus-epochs", - "sc-finality-grandpa", + "sc-consensus-grandpa", "serde", "serde_json", "sp-blockchain", @@ -7287,13 +8083,13 @@ dependencies = [ [[package]] name = "sc-sysinfo" version = "6.0.0-dev" -source = "git+https://github.com/joystream/substrate.git?rev=d29a53b11c3e530d1656eef502cb0f1f8fff3522#d29a53b11c3e530d1656eef502cb0f1f8fff3522" +source = "git+https://github.com/joystream/substrate.git?rev=1d0eefca86ef31b9e7727df01a6ed23ad65491e9#1d0eefca86ef31b9e7727df01a6ed23ad65491e9" dependencies = [ "futures", "libc", "log", - "rand 0.7.3", - "rand_pcg 0.2.1", + "rand 0.8.5", + "rand_pcg", "regex", "sc-telemetry", "serde", @@ -7306,15 +8102,16 @@ dependencies = [ [[package]] name = "sc-telemetry" version = "4.0.0-dev" -source = "git+https://github.com/joystream/substrate.git?rev=d29a53b11c3e530d1656eef502cb0f1f8fff3522#d29a53b11c3e530d1656eef502cb0f1f8fff3522" +source = "git+https://github.com/joystream/substrate.git?rev=1d0eefca86ef31b9e7727df01a6ed23ad65491e9#1d0eefca86ef31b9e7727df01a6ed23ad65491e9" dependencies = [ "chrono", "futures", "libp2p", "log", "parking_lot 0.12.1", - "pin-project 1.0.12", - "rand 0.7.3", + "pin-project", + "rand 0.8.5", + "sc-utils", "serde", "serde_json", "thiserror", @@ -7324,7 +8121,7 @@ dependencies = [ [[package]] name = "sc-tracing" version = "4.0.0-dev" -source = "git+https://github.com/joystream/substrate.git?rev=d29a53b11c3e530d1656eef502cb0f1f8fff3522#d29a53b11c3e530d1656eef502cb0f1f8fff3522" +source = "git+https://github.com/joystream/substrate.git?rev=1d0eefca86ef31b9e7727df01a6ed23ad65491e9#1d0eefca86ef31b9e7727df01a6ed23ad65491e9" dependencies = [ "ansi_term", "atty", @@ -7355,27 +8152,27 @@ dependencies = [ [[package]] name = "sc-tracing-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/joystream/substrate.git?rev=d29a53b11c3e530d1656eef502cb0f1f8fff3522#d29a53b11c3e530d1656eef502cb0f1f8fff3522" +source = "git+https://github.com/joystream/substrate.git?rev=1d0eefca86ef31b9e7727df01a6ed23ad65491e9#1d0eefca86ef31b9e7727df01a6ed23ad65491e9" dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn 1.0.102", + "syn 1.0.109", ] [[package]] name = "sc-transaction-pool" version = "4.0.0-dev" -source = "git+https://github.com/joystream/substrate.git?rev=d29a53b11c3e530d1656eef502cb0f1f8fff3522#d29a53b11c3e530d1656eef502cb0f1f8fff3522" +source = "git+https://github.com/joystream/substrate.git?rev=1d0eefca86ef31b9e7727df01a6ed23ad65491e9#1d0eefca86ef31b9e7727df01a6ed23ad65491e9" dependencies = [ + "async-trait", "futures", "futures-timer", "linked-hash-map", "log", + "num-traits", "parity-scale-codec", - "parity-util-mem", "parking_lot 0.12.1", - "retain_mut", "sc-client-api", "sc-transaction-pool-api", "sc-utils", @@ -7393,8 +8190,9 @@ dependencies = [ [[package]] name = "sc-transaction-pool-api" version = "4.0.0-dev" -source = "git+https://github.com/joystream/substrate.git?rev=d29a53b11c3e530d1656eef502cb0f1f8fff3522#d29a53b11c3e530d1656eef502cb0f1f8fff3522" +source = "git+https://github.com/joystream/substrate.git?rev=1d0eefca86ef31b9e7727df01a6ed23ad65491e9#1d0eefca86ef31b9e7727df01a6ed23ad65491e9" dependencies = [ + "async-trait", "futures", "log", "serde", @@ -7406,21 +8204,23 @@ dependencies = [ [[package]] name = "sc-utils" version = "4.0.0-dev" -source = "git+https://github.com/joystream/substrate.git?rev=d29a53b11c3e530d1656eef502cb0f1f8fff3522#d29a53b11c3e530d1656eef502cb0f1f8fff3522" +source = "git+https://github.com/joystream/substrate.git?rev=1d0eefca86ef31b9e7727df01a6ed23ad65491e9#1d0eefca86ef31b9e7727df01a6ed23ad65491e9" dependencies = [ + "async-channel", "futures", "futures-timer", "lazy_static", "log", "parking_lot 0.12.1", "prometheus", + "sp-arithmetic", ] [[package]] name = "scale-info" -version = "2.2.0" +version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "333af15b02563b8182cd863f925bd31ef8fa86a0e095d30c091956057d436153" +checksum = "001cf62ece89779fd16105b5f515ad0e5cedcd5440d3dd806bb067978e7c3608" dependencies = [ "bitvec", "cfg-if", @@ -7432,24 +8232,34 @@ dependencies = [ [[package]] name = "scale-info-derive" -version = "2.2.0" +version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53f56acbd0743d29ffa08f911ab5397def774ad01bab3786804cf6ee057fb5e1" +checksum = "303959cf613a6f6efd19ed4b4ad5bf79966a13352716299ad532cfb115f4205c" dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn 1.0.102", + "syn 1.0.109", ] [[package]] name = "schannel" -version = "0.1.20" +version = "0.1.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88d6731146462ea25d9244b2ed5fd1d716d25c52e4d54aa4fb0f3c4e9854dbe2" +checksum = "713cfb06c7059f3588fb8044c0fad1d09e3c01d225e25b9220dbfdcf16dbb1b3" dependencies = [ - "lazy_static", - "windows-sys", + "windows-sys 0.42.0", +] + +[[package]] +name = "schnellru" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "772575a524feeb803e5b0fcbc6dd9f367e579488197c94c6e4023aad2305774d" +dependencies = [ + "ahash 0.8.3", + "cfg-if", + "hashbrown 0.13.2", ] [[package]] @@ -7478,9 +8288,19 @@ checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" [[package]] name = "scratch" -version = "1.0.2" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1792db035ce95be60c3f8853017b3999209281c24e2ba5bc8e59bf97a0c590c1" + +[[package]] +name = "sct" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c8132065adcfd6e02db789d9285a0deb2f3fcb04002865ab67d5fb103533898" +checksum = "b362b83898e0e69f38515b82ee15aa80636befe47c3b6d3d89a911e78fc228ce" +dependencies = [ + "ring", + "untrusted", +] [[package]] name = "sct" @@ -7492,32 +8312,46 @@ dependencies = [ "untrusted", ] +[[package]] +name = "sdp" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4d22a5ef407871893fd72b4562ee15e4742269b173959db4b8df6f538c414e13" +dependencies = [ + "rand 0.8.5", + "substring", + "thiserror", + "url", +] + [[package]] name = "sec1" -version = "0.2.1" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08da66b8b0965a5555b6bd6639e68ccba85e1e2506f5fbb089e93f8a04e1a2d1" +checksum = "3be24c1842290c45df0a7bf069e0c268a747ad05a192f2fd7dcfdbc1cba40928" dependencies = [ + "base16ct", "der", "generic-array 0.14.6", + "pkcs8", "subtle", "zeroize", ] [[package]] name = "secp256k1" -version = "0.21.3" +version = "0.24.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c42e6f1735c5f00f51e43e28d6634141f2bcad10931b2609ddd74a86d751260" +checksum = "6b1629c9c557ef9b293568b338dddfc8208c98a18c59d722a9d53f859d9c9b62" dependencies = [ "secp256k1-sys", ] [[package]] name = "secp256k1-sys" -version = "0.4.2" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "957da2573cde917463ece3570eab4a0b3f19de6f1646cde62e6fd3868f566036" +checksum = "83080e2c2fc1006e625be82e5d1eb6a43b7fd9578b617fcc55814daf286bba4b" dependencies = [ "cc", ] @@ -7533,11 +8367,11 @@ dependencies = [ [[package]] name = "security-framework" -version = "2.7.0" +version = "2.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2bc1bb97804af6631813c55739f771071e0f2ed33ee20b68c86ec505d906356c" +checksum = "a332be01508d814fed64bf28f798a146d73792121129962fdf335bb3c49a4254" dependencies = [ - "bitflags", + "bitflags 1.3.2", "core-foundation", "core-foundation-sys", "libc", @@ -7546,9 +8380,9 @@ dependencies = [ [[package]] name = "security-framework-sys" -version = "2.6.1" +version = "2.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0160a13a177a45bfb43ce71c01580998474f556ad854dcbca936dd2841a5c556" +checksum = "31c9bb296072e961fcbd8853511dd39c2d8be2deb1e17c6860b1d30732b323b4" dependencies = [ "core-foundation-sys", "libc", @@ -7574,9 +8408,9 @@ dependencies = [ [[package]] name = "semver" -version = "1.0.14" +version = "1.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e25dfac463d778e353db5be2449d1cce89bd6fd23c9f1ea21310ce6e5a1b29c4" +checksum = "bebd363326d05ec3e2f532ab7660680f3b02130d780c299bca73469d521bc0ed" dependencies = [ "serde", ] @@ -7589,9 +8423,9 @@ checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" [[package]] name = "serde" -version = "1.0.145" +version = "1.0.157" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "728eb6351430bccb993660dfffc5a72f91ccc1295abaa8ce19b27ebe4f75568b" +checksum = "707de5fcf5df2b5788fca98dd7eab490bc2fd9b7ef1404defc462833b83f25ca" dependencies = [ "serde_derive", ] @@ -7608,13 +8442,13 @@ dependencies = [ [[package]] name = "serde_derive" -version = "1.0.145" +version = "1.0.157" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81fa1584d3d1bcacd84c277a0dfe21f5b0f6accf4a23d04d4c6d61f1af522b4c" +checksum = "78997f4555c22a7971214540c4a661291970619afd56de19f77e0de86296e1e5" dependencies = [ "proc-macro2", "quote", - "syn 1.0.102", + "syn 2.0.2", ] [[package]] @@ -7625,35 +8459,26 @@ checksum = "1dbab34ca63057a1f15280bdf3c39f2b1eb1b54c17e98360e511637aef7418c6" dependencies = [ "proc-macro2", "quote", - "syn 1.0.102", + "syn 1.0.109", ] [[package]] name = "serde_json" -version = "1.0.86" +version = "1.0.94" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41feea4228a6f1cd09ec7a3593a682276702cd67b5273544757dae23c096f074" +checksum = "1c533a59c9d8a93a09c6ab31f0fd5e5f4dd1b8fc9434804029839884765d04ea" dependencies = [ - "itoa 1.0.4", + "itoa", "ryu", "serde", ] -[[package]] -name = "serde_nanos" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e44969a61f5d316be20a42ff97816efb3b407a924d06824c3d8a49fa8450de0e" -dependencies = [ - "serde", -] - [[package]] name = "session-keys" version = "1.0.0" dependencies = [ "async-std", - "clap 3.2.22", + "clap 3.2.23", "enum-utils", "futures-util", "joystream-node", @@ -7687,7 +8512,7 @@ checksum = "f04293dc80c3993519f2d7f6f511707ee7094fe0c6d3406feb330cdb3540eba3" dependencies = [ "cfg-if", "cpufeatures", - "digest 0.10.5", + "digest 0.10.6", ] [[package]] @@ -7723,28 +8548,16 @@ checksum = "82e6b795fe2e3b1e845bafcb27aa35405c4d47cdfc92af5fc8d3002f76cebdc0" dependencies = [ "cfg-if", "cpufeatures", - "digest 0.10.5", -] - -[[package]] -name = "sha3" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f81199417d4e5de3f04b1e871023acea7389672c4135918f05aa9cbf2f2fa809" -dependencies = [ - "block-buffer 0.9.0", - "digest 0.9.0", - "keccak", - "opaque-debug 0.3.0", + "digest 0.10.6", ] [[package]] name = "sha3" -version = "0.10.5" +version = "0.10.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2904bea16a1ae962b483322a1c7b81d976029203aea1f461e51cd7705db7ba9" +checksum = "bdf0c33fae925bdc080598b84bc15c55e7b9a4a43b3c704da051f977469691c9" dependencies = [ - "digest 0.10.5", + "digest 0.10.6", "keccak", ] @@ -7763,56 +8576,59 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "43b2853a4d09f215c24cc5489c992ce46052d359b5109343cbafbf26bc62f8a3" -[[package]] -name = "signal-hook" -version = "0.3.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a253b5e89e2698464fc26b545c9edceb338e18a89effeeecfea192c3025be29d" -dependencies = [ - "libc", - "signal-hook-registry", -] - [[package]] name = "signal-hook-registry" -version = "1.4.0" +version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e51e73328dc4ac0c7ccbda3a494dfa03df1de2f46018127f60c693f2648455b0" +checksum = "d8229b473baa5980ac72ef434c4415e70c4b5e71b423043adb4ba059f89c99a1" dependencies = [ "libc", ] [[package]] name = "signature" -version = "1.4.0" +version = "1.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02658e48d89f2bec991f9a78e69cfa4c316f8d6a6c4ec12fae1aeb263d486788" +checksum = "74233d3b3b2f6d4b006dc19dee745e73e2a6bfb6f93607cd3b02bd5b00797d7c" dependencies = [ - "digest 0.9.0", + "digest 0.10.6", "rand_core 0.6.4", ] [[package]] name = "simba" -version = "0.5.1" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e82063457853d00243beda9952e910b82593e4b07ae9f721b9278a99a0d3d5c" +checksum = "50582927ed6f77e4ac020c057f37a268fc6aebc29225050365aacbb9deeeddc4" dependencies = [ "approx", "num-complex", "num-traits", - "paste 1.0.9", + "paste 1.0.12", + "wide", ] +[[package]] +name = "siphasher" +version = "0.3.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7bd3e3206899af3f8b12af284fafc038cc1dc2b41d1b89dd17297221c5d225de" + [[package]] name = "slab" -version = "0.4.7" +version = "0.4.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4614a76b2a8be0058caa9dbbaf66d988527d86d003c11a94fbd335d7661edcef" +checksum = "6528351c9bc8ab22353f9d776db39a20288e8d6c37ef8cfe3317cf875eecfc2d" dependencies = [ "autocfg", ] +[[package]] +name = "slice-group-by" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03b634d87b960ab1a38c4fe143b508576f075e7c978bfad18217645ebfdfa2ec" + [[package]] name = "smallvec" version = "1.10.0" @@ -7821,20 +8637,20 @@ checksum = "a507befe795404456341dfab10cef66ead4c041f62b8b11bbb92bffe5d0953e0" [[package]] name = "snap" -version = "1.0.5" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "45456094d1983e2ee2a18fdfebce3189fa451699d0502cb8e3b49dba5ba41451" +checksum = "5e9f0ab6ef7eb7353d9119c170a436d1bf248eea575ac42d19d12f4e34130831" [[package]] name = "snow" -version = "0.9.0" +version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "774d05a3edae07ce6d68ea6984f3c05e9bba8927e3dd591e3b479e5b03213d0d" +checksum = "5ccba027ba85743e09d15c03296797cad56395089b832b48b5a5217880f57733" dependencies = [ - "aes-gcm", + "aes-gcm 0.9.4", "blake2", "chacha20poly1305", - "curve25519-dalek 4.0.0-pre.1", + "curve25519-dalek 4.0.0-rc.1", "rand_core 0.6.4", "ring", "rustc_version 0.4.0", @@ -7844,9 +8660,9 @@ dependencies = [ [[package]] name = "socket2" -version = "0.4.7" +version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02e2d2db9033d13a1567121ddd7a095ee144db4e1ca1b1bda3419bc0da294ebd" +checksum = "64a4a911eed85daf18834cfaa86a79b7d266ff93ff5ba14005426219480ed662" dependencies = [ "libc", "winapi", @@ -7858,10 +8674,11 @@ version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "41d1c5305e39e09653383c2c7244f2f78b3bcae37cf50c64cb4789c9f5096ec2" dependencies = [ - "base64", + "base64 0.13.1", "bytes", "flate2", "futures", + "http", "httparse", "log", "rand 0.8.5", @@ -7871,7 +8688,7 @@ dependencies = [ [[package]] name = "sp-api" version = "4.0.0-dev" -source = "git+https://github.com/joystream/substrate.git?rev=d29a53b11c3e530d1656eef502cb0f1f8fff3522#d29a53b11c3e530d1656eef502cb0f1f8fff3522" +source = "git+https://github.com/joystream/substrate.git?rev=1d0eefca86ef31b9e7727df01a6ed23ad65491e9#1d0eefca86ef31b9e7727df01a6ed23ad65491e9" dependencies = [ "hash-db", "log", @@ -7881,6 +8698,7 @@ dependencies = [ "sp-runtime", "sp-state-machine", "sp-std", + "sp-trie", "sp-version", "thiserror", ] @@ -7888,19 +8706,21 @@ dependencies = [ [[package]] name = "sp-api-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/joystream/substrate.git?rev=d29a53b11c3e530d1656eef502cb0f1f8fff3522#d29a53b11c3e530d1656eef502cb0f1f8fff3522" +source = "git+https://github.com/joystream/substrate.git?rev=1d0eefca86ef31b9e7727df01a6ed23ad65491e9#1d0eefca86ef31b9e7727df01a6ed23ad65491e9" dependencies = [ + "Inflector", "blake2", + "expander", "proc-macro-crate", "proc-macro2", "quote", - "syn 1.0.102", + "syn 1.0.109", ] [[package]] name = "sp-application-crypto" -version = "6.0.0" -source = "git+https://github.com/joystream/substrate.git?rev=d29a53b11c3e530d1656eef502cb0f1f8fff3522#d29a53b11c3e530d1656eef502cb0f1f8fff3522" +version = "7.0.0" +source = "git+https://github.com/joystream/substrate.git?rev=1d0eefca86ef31b9e7727df01a6ed23ad65491e9#1d0eefca86ef31b9e7727df01a6ed23ad65491e9" dependencies = [ "parity-scale-codec", "scale-info", @@ -7912,15 +8732,14 @@ dependencies = [ [[package]] name = "sp-arithmetic" -version = "5.0.0" -source = "git+https://github.com/joystream/substrate.git?rev=d29a53b11c3e530d1656eef502cb0f1f8fff3522#d29a53b11c3e530d1656eef502cb0f1f8fff3522" +version = "6.0.0" +source = "git+https://github.com/joystream/substrate.git?rev=1d0eefca86ef31b9e7727df01a6ed23ad65491e9#1d0eefca86ef31b9e7727df01a6ed23ad65491e9" dependencies = [ "integer-sqrt", "num-traits", "parity-scale-codec", "scale-info", "serde", - "sp-debug-derive", "sp-std", "static_assertions", ] @@ -7928,7 +8747,7 @@ dependencies = [ [[package]] name = "sp-authority-discovery" version = "4.0.0-dev" -source = "git+https://github.com/joystream/substrate.git?rev=d29a53b11c3e530d1656eef502cb0f1f8fff3522#d29a53b11c3e530d1656eef502cb0f1f8fff3522" +source = "git+https://github.com/joystream/substrate.git?rev=1d0eefca86ef31b9e7727df01a6ed23ad65491e9#1d0eefca86ef31b9e7727df01a6ed23ad65491e9" dependencies = [ "parity-scale-codec", "scale-info", @@ -7938,22 +8757,10 @@ dependencies = [ "sp-std", ] -[[package]] -name = "sp-authorship" -version = "4.0.0-dev" -source = "git+https://github.com/joystream/substrate.git?rev=d29a53b11c3e530d1656eef502cb0f1f8fff3522#d29a53b11c3e530d1656eef502cb0f1f8fff3522" -dependencies = [ - "async-trait", - "parity-scale-codec", - "sp-inherents", - "sp-runtime", - "sp-std", -] - [[package]] name = "sp-block-builder" version = "4.0.0-dev" -source = "git+https://github.com/joystream/substrate.git?rev=d29a53b11c3e530d1656eef502cb0f1f8fff3522#d29a53b11c3e530d1656eef502cb0f1f8fff3522" +source = "git+https://github.com/joystream/substrate.git?rev=1d0eefca86ef31b9e7727df01a6ed23ad65491e9#1d0eefca86ef31b9e7727df01a6ed23ad65491e9" dependencies = [ "parity-scale-codec", "sp-api", @@ -7965,7 +8772,7 @@ dependencies = [ [[package]] name = "sp-blockchain" version = "4.0.0-dev" -source = "git+https://github.com/joystream/substrate.git?rev=d29a53b11c3e530d1656eef502cb0f1f8fff3522#d29a53b11c3e530d1656eef502cb0f1f8fff3522" +source = "git+https://github.com/joystream/substrate.git?rev=1d0eefca86ef31b9e7727df01a6ed23ad65491e9#1d0eefca86ef31b9e7727df01a6ed23ad65491e9" dependencies = [ "futures", "log", @@ -7983,26 +8790,22 @@ dependencies = [ [[package]] name = "sp-consensus" version = "0.10.0-dev" -source = "git+https://github.com/joystream/substrate.git?rev=d29a53b11c3e530d1656eef502cb0f1f8fff3522#d29a53b11c3e530d1656eef502cb0f1f8fff3522" +source = "git+https://github.com/joystream/substrate.git?rev=1d0eefca86ef31b9e7727df01a6ed23ad65491e9#1d0eefca86ef31b9e7727df01a6ed23ad65491e9" dependencies = [ "async-trait", "futures", - "futures-timer", "log", - "parity-scale-codec", "sp-core", "sp-inherents", "sp-runtime", "sp-state-machine", - "sp-std", - "sp-version", "thiserror", ] [[package]] name = "sp-consensus-aura" version = "0.10.0-dev" -source = "git+https://github.com/joystream/substrate.git?rev=d29a53b11c3e530d1656eef502cb0f1f8fff3522#d29a53b11c3e530d1656eef502cb0f1f8fff3522" +source = "git+https://github.com/joystream/substrate.git?rev=1d0eefca86ef31b9e7727df01a6ed23ad65491e9#1d0eefca86ef31b9e7727df01a6ed23ad65491e9" dependencies = [ "async-trait", "parity-scale-codec", @@ -8020,7 +8823,7 @@ dependencies = [ [[package]] name = "sp-consensus-babe" version = "0.10.0-dev" -source = "git+https://github.com/joystream/substrate.git?rev=d29a53b11c3e530d1656eef502cb0f1f8fff3522#d29a53b11c3e530d1656eef502cb0f1f8fff3522" +source = "git+https://github.com/joystream/substrate.git?rev=1d0eefca86ef31b9e7727df01a6ed23ad65491e9#1d0eefca86ef31b9e7727df01a6ed23ad65491e9" dependencies = [ "async-trait", "merlin", @@ -8041,27 +8844,62 @@ dependencies = [ ] [[package]] -name = "sp-consensus-slots" -version = "0.10.0-dev" -source = "git+https://github.com/joystream/substrate.git?rev=d29a53b11c3e530d1656eef502cb0f1f8fff3522#d29a53b11c3e530d1656eef502cb0f1f8fff3522" +name = "sp-consensus-beefy" +version = "4.0.0-dev" +source = "git+https://github.com/joystream/substrate.git?rev=1d0eefca86ef31b9e7727df01a6ed23ad65491e9#1d0eefca86ef31b9e7727df01a6ed23ad65491e9" dependencies = [ + "lazy_static", "parity-scale-codec", "scale-info", "serde", - "sp-arithmetic", + "sp-api", + "sp-application-crypto", + "sp-core", + "sp-io", + "sp-mmr-primitives", "sp-runtime", "sp-std", - "sp-timestamp", + "strum 0.24.1", ] [[package]] -name = "sp-consensus-vrf" -version = "0.10.0-dev" -source = "git+https://github.com/joystream/substrate.git?rev=d29a53b11c3e530d1656eef502cb0f1f8fff3522#d29a53b11c3e530d1656eef502cb0f1f8fff3522" +name = "sp-consensus-grandpa" +version = "4.0.0-dev" +source = "git+https://github.com/joystream/substrate.git?rev=1d0eefca86ef31b9e7727df01a6ed23ad65491e9#1d0eefca86ef31b9e7727df01a6ed23ad65491e9" dependencies = [ + "finality-grandpa", + "log", "parity-scale-codec", "scale-info", - "schnorrkel", + "serde", + "sp-api", + "sp-application-crypto", + "sp-core", + "sp-keystore", + "sp-runtime", + "sp-std", +] + +[[package]] +name = "sp-consensus-slots" +version = "0.10.0-dev" +source = "git+https://github.com/joystream/substrate.git?rev=1d0eefca86ef31b9e7727df01a6ed23ad65491e9#1d0eefca86ef31b9e7727df01a6ed23ad65491e9" +dependencies = [ + "parity-scale-codec", + "scale-info", + "serde", + "sp-std", + "sp-timestamp", +] + +[[package]] +name = "sp-consensus-vrf" +version = "0.10.0-dev" +source = "git+https://github.com/joystream/substrate.git?rev=1d0eefca86ef31b9e7727df01a6ed23ad65491e9#1d0eefca86ef31b9e7727df01a6ed23ad65491e9" +dependencies = [ + "parity-scale-codec", + "scale-info", + "schnorrkel", "sp-core", "sp-runtime", "sp-std", @@ -8069,30 +8907,28 @@ dependencies = [ [[package]] name = "sp-core" -version = "6.0.0" -source = "git+https://github.com/joystream/substrate.git?rev=d29a53b11c3e530d1656eef502cb0f1f8fff3522#d29a53b11c3e530d1656eef502cb0f1f8fff3522" +version = "7.0.0" +source = "git+https://github.com/joystream/substrate.git?rev=1d0eefca86ef31b9e7727df01a6ed23ad65491e9#1d0eefca86ef31b9e7727df01a6ed23ad65491e9" dependencies = [ + "array-bytes", "base58", - "bitflags", - "blake2-rfc", - "byteorder", + "bitflags 1.3.2", + "blake2", + "bounded-collections", "dyn-clonable", - "ed25519-dalek", + "ed25519-zebra", "futures", "hash-db", "hash256-std-hasher", - "hex", - "impl-serde", + "impl-serde 0.4.0", "lazy_static", "libsecp256k1", "log", "merlin", - "num-traits", "parity-scale-codec", - "parity-util-mem", "parking_lot 0.12.1", "primitive-types", - "rand 0.7.3", + "rand 0.8.5", "regex", "scale-info", "schnorrkel", @@ -8109,20 +8945,19 @@ dependencies = [ "substrate-bip39", "thiserror", "tiny-bip39", - "wasmi", "zeroize", ] [[package]] name = "sp-core-hashing" -version = "4.0.0" -source = "git+https://github.com/joystream/substrate.git?rev=d29a53b11c3e530d1656eef502cb0f1f8fff3522#d29a53b11c3e530d1656eef502cb0f1f8fff3522" +version = "5.0.0" +source = "git+https://github.com/joystream/substrate.git?rev=1d0eefca86ef31b9e7727df01a6ed23ad65491e9#1d0eefca86ef31b9e7727df01a6ed23ad65491e9" dependencies = [ - "blake2", + "blake2b_simd", "byteorder", - "digest 0.10.5", + "digest 0.10.6", "sha2 0.10.6", - "sha3 0.10.5", + "sha3", "sp-std", "twox-hash", ] @@ -8130,18 +8965,18 @@ dependencies = [ [[package]] name = "sp-core-hashing-proc-macro" version = "5.0.0" -source = "git+https://github.com/joystream/substrate.git?rev=d29a53b11c3e530d1656eef502cb0f1f8fff3522#d29a53b11c3e530d1656eef502cb0f1f8fff3522" +source = "git+https://github.com/joystream/substrate.git?rev=1d0eefca86ef31b9e7727df01a6ed23ad65491e9#1d0eefca86ef31b9e7727df01a6ed23ad65491e9" dependencies = [ "proc-macro2", "quote", "sp-core-hashing", - "syn 1.0.102", + "syn 1.0.109", ] [[package]] name = "sp-database" version = "4.0.0-dev" -source = "git+https://github.com/joystream/substrate.git?rev=d29a53b11c3e530d1656eef502cb0f1f8fff3522#d29a53b11c3e530d1656eef502cb0f1f8fff3522" +source = "git+https://github.com/joystream/substrate.git?rev=1d0eefca86ef31b9e7727df01a6ed23ad65491e9#1d0eefca86ef31b9e7727df01a6ed23ad65491e9" dependencies = [ "kvdb", "parking_lot 0.12.1", @@ -8149,18 +8984,18 @@ dependencies = [ [[package]] name = "sp-debug-derive" -version = "4.0.0" -source = "git+https://github.com/joystream/substrate.git?rev=d29a53b11c3e530d1656eef502cb0f1f8fff3522#d29a53b11c3e530d1656eef502cb0f1f8fff3522" +version = "5.0.0" +source = "git+https://github.com/joystream/substrate.git?rev=1d0eefca86ef31b9e7727df01a6ed23ad65491e9#1d0eefca86ef31b9e7727df01a6ed23ad65491e9" dependencies = [ "proc-macro2", "quote", - "syn 1.0.102", + "syn 1.0.109", ] [[package]] name = "sp-externalities" -version = "0.12.0" -source = "git+https://github.com/joystream/substrate.git?rev=d29a53b11c3e530d1656eef502cb0f1f8fff3522#d29a53b11c3e530d1656eef502cb0f1f8fff3522" +version = "0.13.0" +source = "git+https://github.com/joystream/substrate.git?rev=1d0eefca86ef31b9e7727df01a6ed23ad65491e9#1d0eefca86ef31b9e7727df01a6ed23ad65491e9" dependencies = [ "environmental", "parity-scale-codec", @@ -8168,32 +9003,15 @@ dependencies = [ "sp-storage", ] -[[package]] -name = "sp-finality-grandpa" -version = "4.0.0-dev" -source = "git+https://github.com/joystream/substrate.git?rev=d29a53b11c3e530d1656eef502cb0f1f8fff3522#d29a53b11c3e530d1656eef502cb0f1f8fff3522" -dependencies = [ - "finality-grandpa", - "log", - "parity-scale-codec", - "scale-info", - "serde", - "sp-api", - "sp-application-crypto", - "sp-core", - "sp-keystore", - "sp-runtime", - "sp-std", -] - [[package]] name = "sp-inherents" version = "4.0.0-dev" -source = "git+https://github.com/joystream/substrate.git?rev=d29a53b11c3e530d1656eef502cb0f1f8fff3522#d29a53b11c3e530d1656eef502cb0f1f8fff3522" +source = "git+https://github.com/joystream/substrate.git?rev=1d0eefca86ef31b9e7727df01a6ed23ad65491e9#1d0eefca86ef31b9e7727df01a6ed23ad65491e9" dependencies = [ "async-trait", "impl-trait-for-tuples", "parity-scale-codec", + "scale-info", "sp-core", "sp-runtime", "sp-std", @@ -8202,15 +9020,16 @@ dependencies = [ [[package]] name = "sp-io" -version = "6.0.0" -source = "git+https://github.com/joystream/substrate.git?rev=d29a53b11c3e530d1656eef502cb0f1f8fff3522#d29a53b11c3e530d1656eef502cb0f1f8fff3522" +version = "7.0.0" +source = "git+https://github.com/joystream/substrate.git?rev=1d0eefca86ef31b9e7727df01a6ed23ad65491e9#1d0eefca86ef31b9e7727df01a6ed23ad65491e9" dependencies = [ + "bytes", + "ed25519", + "ed25519-dalek", "futures", - "hash-db", "libsecp256k1", "log", "parity-scale-codec", - "parking_lot 0.12.1", "secp256k1", "sp-core", "sp-externalities", @@ -8220,26 +9039,25 @@ dependencies = [ "sp-std", "sp-tracing", "sp-trie", - "sp-wasm-interface", "tracing", "tracing-core", ] [[package]] name = "sp-keyring" -version = "6.0.0" -source = "git+https://github.com/joystream/substrate.git?rev=d29a53b11c3e530d1656eef502cb0f1f8fff3522#d29a53b11c3e530d1656eef502cb0f1f8fff3522" +version = "7.0.0" +source = "git+https://github.com/joystream/substrate.git?rev=1d0eefca86ef31b9e7727df01a6ed23ad65491e9#1d0eefca86ef31b9e7727df01a6ed23ad65491e9" dependencies = [ "lazy_static", "sp-core", "sp-runtime", - "strum 0.23.0", + "strum 0.24.1", ] [[package]] name = "sp-keystore" -version = "0.12.0" -source = "git+https://github.com/joystream/substrate.git?rev=d29a53b11c3e530d1656eef502cb0f1f8fff3522#d29a53b11c3e530d1656eef502cb0f1f8fff3522" +version = "0.13.0" +source = "git+https://github.com/joystream/substrate.git?rev=1d0eefca86ef31b9e7727df01a6ed23ad65491e9#1d0eefca86ef31b9e7727df01a6ed23ad65491e9" dependencies = [ "async-trait", "futures", @@ -8256,16 +9074,34 @@ dependencies = [ [[package]] name = "sp-maybe-compressed-blob" version = "4.1.0-dev" -source = "git+https://github.com/joystream/substrate.git?rev=d29a53b11c3e530d1656eef502cb0f1f8fff3522#d29a53b11c3e530d1656eef502cb0f1f8fff3522" +source = "git+https://github.com/joystream/substrate.git?rev=1d0eefca86ef31b9e7727df01a6ed23ad65491e9#1d0eefca86ef31b9e7727df01a6ed23ad65491e9" dependencies = [ "thiserror", "zstd", ] +[[package]] +name = "sp-mmr-primitives" +version = "4.0.0-dev" +source = "git+https://github.com/joystream/substrate.git?rev=1d0eefca86ef31b9e7727df01a6ed23ad65491e9#1d0eefca86ef31b9e7727df01a6ed23ad65491e9" +dependencies = [ + "ckb-merkle-mountain-range", + "log", + "parity-scale-codec", + "scale-info", + "serde", + "sp-api", + "sp-core", + "sp-debug-derive", + "sp-runtime", + "sp-std", + "thiserror", +] + [[package]] name = "sp-npos-elections" version = "4.0.0-dev" -source = "git+https://github.com/joystream/substrate.git?rev=d29a53b11c3e530d1656eef502cb0f1f8fff3522#d29a53b11c3e530d1656eef502cb0f1f8fff3522" +source = "git+https://github.com/joystream/substrate.git?rev=1d0eefca86ef31b9e7727df01a6ed23ad65491e9#1d0eefca86ef31b9e7727df01a6ed23ad65491e9" dependencies = [ "parity-scale-codec", "scale-info", @@ -8279,7 +9115,7 @@ dependencies = [ [[package]] name = "sp-offchain" version = "4.0.0-dev" -source = "git+https://github.com/joystream/substrate.git?rev=d29a53b11c3e530d1656eef502cb0f1f8fff3522#d29a53b11c3e530d1656eef502cb0f1f8fff3522" +source = "git+https://github.com/joystream/substrate.git?rev=1d0eefca86ef31b9e7727df01a6ed23ad65491e9#1d0eefca86ef31b9e7727df01a6ed23ad65491e9" dependencies = [ "sp-api", "sp-core", @@ -8288,8 +9124,8 @@ dependencies = [ [[package]] name = "sp-panic-handler" -version = "4.0.0" -source = "git+https://github.com/joystream/substrate.git?rev=d29a53b11c3e530d1656eef502cb0f1f8fff3522#d29a53b11c3e530d1656eef502cb0f1f8fff3522" +version = "5.0.0" +source = "git+https://github.com/joystream/substrate.git?rev=1d0eefca86ef31b9e7727df01a6ed23ad65491e9#1d0eefca86ef31b9e7727df01a6ed23ad65491e9" dependencies = [ "backtrace", "lazy_static", @@ -8299,7 +9135,7 @@ dependencies = [ [[package]] name = "sp-rpc" version = "6.0.0" -source = "git+https://github.com/joystream/substrate.git?rev=d29a53b11c3e530d1656eef502cb0f1f8fff3522#d29a53b11c3e530d1656eef502cb0f1f8fff3522" +source = "git+https://github.com/joystream/substrate.git?rev=1d0eefca86ef31b9e7727df01a6ed23ad65491e9#1d0eefca86ef31b9e7727df01a6ed23ad65491e9" dependencies = [ "rustc-hash", "serde", @@ -8308,17 +9144,16 @@ dependencies = [ [[package]] name = "sp-runtime" -version = "6.0.0" -source = "git+https://github.com/joystream/substrate.git?rev=d29a53b11c3e530d1656eef502cb0f1f8fff3522#d29a53b11c3e530d1656eef502cb0f1f8fff3522" +version = "7.0.0" +source = "git+https://github.com/joystream/substrate.git?rev=1d0eefca86ef31b9e7727df01a6ed23ad65491e9#1d0eefca86ef31b9e7727df01a6ed23ad65491e9" dependencies = [ "either", "hash256-std-hasher", "impl-trait-for-tuples", "log", "parity-scale-codec", - "parity-util-mem", - "paste 1.0.9", - "rand 0.7.3", + "paste 1.0.12", + "rand 0.8.5", "scale-info", "serde", "sp-application-crypto", @@ -8326,13 +9161,15 @@ dependencies = [ "sp-core", "sp-io", "sp-std", + "sp-weights", ] [[package]] name = "sp-runtime-interface" -version = "6.0.0" -source = "git+https://github.com/joystream/substrate.git?rev=d29a53b11c3e530d1656eef502cb0f1f8fff3522#d29a53b11c3e530d1656eef502cb0f1f8fff3522" +version = "7.0.0" +source = "git+https://github.com/joystream/substrate.git?rev=1d0eefca86ef31b9e7727df01a6ed23ad65491e9#1d0eefca86ef31b9e7727df01a6ed23ad65491e9" dependencies = [ + "bytes", "impl-trait-for-tuples", "parity-scale-codec", "primitive-types", @@ -8347,43 +9184,20 @@ dependencies = [ [[package]] name = "sp-runtime-interface-proc-macro" -version = "5.0.0" -source = "git+https://github.com/joystream/substrate.git?rev=d29a53b11c3e530d1656eef502cb0f1f8fff3522#d29a53b11c3e530d1656eef502cb0f1f8fff3522" +version = "6.0.0" +source = "git+https://github.com/joystream/substrate.git?rev=1d0eefca86ef31b9e7727df01a6ed23ad65491e9#1d0eefca86ef31b9e7727df01a6ed23ad65491e9" dependencies = [ "Inflector", "proc-macro-crate", "proc-macro2", "quote", - "syn 1.0.102", -] - -[[package]] -name = "sp-sandbox" -version = "0.10.0-dev" -source = "git+https://github.com/joystream/substrate.git?rev=d29a53b11c3e530d1656eef502cb0f1f8fff3522#d29a53b11c3e530d1656eef502cb0f1f8fff3522" -dependencies = [ - "log", - "parity-scale-codec", - "sp-core", - "sp-io", - "sp-std", - "sp-wasm-interface", - "wasmi", -] - -[[package]] -name = "sp-serializer" -version = "4.0.0-dev" -source = "git+https://github.com/joystream/substrate.git?rev=d29a53b11c3e530d1656eef502cb0f1f8fff3522#d29a53b11c3e530d1656eef502cb0f1f8fff3522" -dependencies = [ - "serde", - "serde_json", + "syn 1.0.109", ] [[package]] name = "sp-session" version = "4.0.0-dev" -source = "git+https://github.com/joystream/substrate.git?rev=d29a53b11c3e530d1656eef502cb0f1f8fff3522#d29a53b11c3e530d1656eef502cb0f1f8fff3522" +source = "git+https://github.com/joystream/substrate.git?rev=1d0eefca86ef31b9e7727df01a6ed23ad65491e9#1d0eefca86ef31b9e7727df01a6ed23ad65491e9" dependencies = [ "parity-scale-codec", "scale-info", @@ -8397,25 +9211,25 @@ dependencies = [ [[package]] name = "sp-staking" version = "4.0.0-dev" -source = "git+https://github.com/joystream/substrate.git?rev=d29a53b11c3e530d1656eef502cb0f1f8fff3522#d29a53b11c3e530d1656eef502cb0f1f8fff3522" +source = "git+https://github.com/joystream/substrate.git?rev=1d0eefca86ef31b9e7727df01a6ed23ad65491e9#1d0eefca86ef31b9e7727df01a6ed23ad65491e9" dependencies = [ "parity-scale-codec", "scale-info", + "sp-core", "sp-runtime", "sp-std", ] [[package]] name = "sp-state-machine" -version = "0.12.0" -source = "git+https://github.com/joystream/substrate.git?rev=d29a53b11c3e530d1656eef502cb0f1f8fff3522#d29a53b11c3e530d1656eef502cb0f1f8fff3522" +version = "0.13.0" +source = "git+https://github.com/joystream/substrate.git?rev=1d0eefca86ef31b9e7727df01a6ed23ad65491e9#1d0eefca86ef31b9e7727df01a6ed23ad65491e9" dependencies = [ "hash-db", "log", - "num-traits", "parity-scale-codec", "parking_lot 0.12.1", - "rand 0.7.3", + "rand 0.8.5", "smallvec", "sp-core", "sp-externalities", @@ -8424,20 +9238,19 @@ dependencies = [ "sp-trie", "thiserror", "tracing", - "trie-root", ] [[package]] name = "sp-std" -version = "4.0.0" -source = "git+https://github.com/joystream/substrate.git?rev=d29a53b11c3e530d1656eef502cb0f1f8fff3522#d29a53b11c3e530d1656eef502cb0f1f8fff3522" +version = "5.0.0" +source = "git+https://github.com/joystream/substrate.git?rev=1d0eefca86ef31b9e7727df01a6ed23ad65491e9#1d0eefca86ef31b9e7727df01a6ed23ad65491e9" [[package]] name = "sp-storage" -version = "6.0.0" -source = "git+https://github.com/joystream/substrate.git?rev=d29a53b11c3e530d1656eef502cb0f1f8fff3522#d29a53b11c3e530d1656eef502cb0f1f8fff3522" +version = "7.0.0" +source = "git+https://github.com/joystream/substrate.git?rev=1d0eefca86ef31b9e7727df01a6ed23ad65491e9#1d0eefca86ef31b9e7727df01a6ed23ad65491e9" dependencies = [ - "impl-serde", + "impl-serde 0.4.0", "parity-scale-codec", "ref-cast", "serde", @@ -8445,29 +9258,15 @@ dependencies = [ "sp-std", ] -[[package]] -name = "sp-tasks" -version = "4.0.0-dev" -source = "git+https://github.com/joystream/substrate.git?rev=d29a53b11c3e530d1656eef502cb0f1f8fff3522#d29a53b11c3e530d1656eef502cb0f1f8fff3522" -dependencies = [ - "log", - "sp-core", - "sp-externalities", - "sp-io", - "sp-runtime-interface", - "sp-std", -] - [[package]] name = "sp-timestamp" version = "4.0.0-dev" -source = "git+https://github.com/joystream/substrate.git?rev=d29a53b11c3e530d1656eef502cb0f1f8fff3522#d29a53b11c3e530d1656eef502cb0f1f8fff3522" +source = "git+https://github.com/joystream/substrate.git?rev=1d0eefca86ef31b9e7727df01a6ed23ad65491e9#1d0eefca86ef31b9e7727df01a6ed23ad65491e9" dependencies = [ "async-trait", "futures-timer", "log", "parity-scale-codec", - "sp-api", "sp-inherents", "sp-runtime", "sp-std", @@ -8476,8 +9275,8 @@ dependencies = [ [[package]] name = "sp-tracing" -version = "5.0.0" -source = "git+https://github.com/joystream/substrate.git?rev=d29a53b11c3e530d1656eef502cb0f1f8fff3522#d29a53b11c3e530d1656eef502cb0f1f8fff3522" +version = "6.0.0" +source = "git+https://github.com/joystream/substrate.git?rev=1d0eefca86ef31b9e7727df01a6ed23ad65491e9#1d0eefca86ef31b9e7727df01a6ed23ad65491e9" dependencies = [ "parity-scale-codec", "sp-std", @@ -8489,7 +9288,7 @@ dependencies = [ [[package]] name = "sp-transaction-pool" version = "4.0.0-dev" -source = "git+https://github.com/joystream/substrate.git?rev=d29a53b11c3e530d1656eef502cb0f1f8fff3522#d29a53b11c3e530d1656eef502cb0f1f8fff3522" +source = "git+https://github.com/joystream/substrate.git?rev=1d0eefca86ef31b9e7727df01a6ed23ad65491e9#1d0eefca86ef31b9e7727df01a6ed23ad65491e9" dependencies = [ "sp-api", "sp-runtime", @@ -8498,7 +9297,7 @@ dependencies = [ [[package]] name = "sp-transaction-storage-proof" version = "4.0.0-dev" -source = "git+https://github.com/joystream/substrate.git?rev=d29a53b11c3e530d1656eef502cb0f1f8fff3522#d29a53b11c3e530d1656eef502cb0f1f8fff3522" +source = "git+https://github.com/joystream/substrate.git?rev=1d0eefca86ef31b9e7727df01a6ed23ad65491e9#1d0eefca86ef31b9e7727df01a6ed23ad65491e9" dependencies = [ "async-trait", "log", @@ -8513,16 +9312,23 @@ dependencies = [ [[package]] name = "sp-trie" -version = "6.0.0" -source = "git+https://github.com/joystream/substrate.git?rev=d29a53b11c3e530d1656eef502cb0f1f8fff3522#d29a53b11c3e530d1656eef502cb0f1f8fff3522" +version = "7.0.0" +source = "git+https://github.com/joystream/substrate.git?rev=1d0eefca86ef31b9e7727df01a6ed23ad65491e9#1d0eefca86ef31b9e7727df01a6ed23ad65491e9" dependencies = [ + "ahash 0.8.3", "hash-db", + "hashbrown 0.12.3", + "lazy_static", "memory-db", + "nohash-hasher", "parity-scale-codec", + "parking_lot 0.12.1", "scale-info", + "schnellru", "sp-core", "sp-std", "thiserror", + "tracing", "trie-db", "trie-root", ] @@ -8530,11 +9336,11 @@ dependencies = [ [[package]] name = "sp-version" version = "5.0.0" -source = "git+https://github.com/joystream/substrate.git?rev=d29a53b11c3e530d1656eef502cb0f1f8fff3522#d29a53b11c3e530d1656eef502cb0f1f8fff3522" +source = "git+https://github.com/joystream/substrate.git?rev=1d0eefca86ef31b9e7727df01a6ed23ad65491e9#1d0eefca86ef31b9e7727df01a6ed23ad65491e9" dependencies = [ - "impl-serde", + "impl-serde 0.4.0", "parity-scale-codec", - "parity-wasm 0.42.2", + "parity-wasm", "scale-info", "serde", "sp-core-hashing-proc-macro", @@ -8547,19 +9353,20 @@ dependencies = [ [[package]] name = "sp-version-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/joystream/substrate.git?rev=d29a53b11c3e530d1656eef502cb0f1f8fff3522#d29a53b11c3e530d1656eef502cb0f1f8fff3522" +source = "git+https://github.com/joystream/substrate.git?rev=1d0eefca86ef31b9e7727df01a6ed23ad65491e9#1d0eefca86ef31b9e7727df01a6ed23ad65491e9" dependencies = [ "parity-scale-codec", "proc-macro2", "quote", - "syn 1.0.102", + "syn 1.0.109", ] [[package]] name = "sp-wasm-interface" -version = "6.0.0" -source = "git+https://github.com/joystream/substrate.git?rev=d29a53b11c3e530d1656eef502cb0f1f8fff3522#d29a53b11c3e530d1656eef502cb0f1f8fff3522" +version = "7.0.0" +source = "git+https://github.com/joystream/substrate.git?rev=1d0eefca86ef31b9e7727df01a6ed23ad65491e9#1d0eefca86ef31b9e7727df01a6ed23ad65491e9" dependencies = [ + "anyhow", "impl-trait-for-tuples", "log", "parity-scale-codec", @@ -8568,16 +9375,42 @@ dependencies = [ "wasmtime", ] +[[package]] +name = "sp-weights" +version = "4.0.0" +source = "git+https://github.com/joystream/substrate.git?rev=1d0eefca86ef31b9e7727df01a6ed23ad65491e9#1d0eefca86ef31b9e7727df01a6ed23ad65491e9" +dependencies = [ + "parity-scale-codec", + "scale-info", + "serde", + "smallvec", + "sp-arithmetic", + "sp-core", + "sp-debug-derive", + "sp-std", +] + [[package]] name = "spin" version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" +[[package]] +name = "spki" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67cf02bbac7a337dc36e4f5a693db6c21e7863f45070f7064577eb4367a3212b" +dependencies = [ + "base64ct", + "der", +] + [[package]] name = "ss58-registry" -version = "1.23.0" -source = "git+https://github.com/bwhm/ss58-registry?rev=a70121e7bbb56f983f6f17771cc79d8f19b481a0#a70121e7bbb56f983f6f17771cc79d8f19b481a0" +version = "1.39.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ecf0bd63593ef78eca595a7fc25e9a443ca46fe69fd472f8f09f5245cdcd769d" dependencies = [ "Inflector", "num-format", @@ -8601,16 +9434,31 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" [[package]] -name = "statrs" -version = "0.15.0" +name = "static_init" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05bdbb8e4e78216a85785a85d3ec3183144f98d0097b9281802c019bb07a6f05" +checksum = "8a2a1c578e98c1c16fc3b8ec1328f7659a500737d7a0c6d625e73e830ff9c1f6" dependencies = [ - "approx", - "lazy_static", - "nalgebra", - "num-traits", - "rand 0.8.5", + "bitflags 1.3.2", + "cfg_aliases", + "libc", + "parking_lot 0.11.2", + "parking_lot_core 0.8.6", + "static_init_macro", + "winapi", +] + +[[package]] +name = "static_init_macro" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70a2595fc3aa78f2d0e45dd425b22282dd863273761cc77780914b2cf3003acf" +dependencies = [ + "cfg_aliases", + "memchr", + "proc-macro2", + "quote", + "syn 1.0.109", ] [[package]] @@ -8627,11 +9475,11 @@ checksum = "b89a286a7e3b5720b9a477b23253bc50debac207c8d21505f8e70b36792f11b5" [[package]] name = "strum" -version = "0.23.0" +version = "0.24.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cae14b91c7d11c9a851d3fbc80a963198998c2a64eec840477fa92d8ce9b70bb" +checksum = "063e6045c0e62079840579a7e47a355ae92f60eb74daaf156fb1e84ba164e63f" dependencies = [ - "strum_macros 0.23.1", + "strum_macros 0.24.3", ] [[package]] @@ -8643,20 +9491,39 @@ dependencies = [ "heck 0.3.3", "proc-macro2", "quote", - "syn 1.0.102", + "syn 1.0.109", ] [[package]] name = "strum_macros" -version = "0.23.1" +version = "0.24.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5bb0dc7ee9c15cea6199cde9a127fa16a4c5819af85395457ad72d68edc85a38" +checksum = "1e385be0d24f186b4ce2f9982191e7101bb737312ad61c1f2f984f34bcf85d59" dependencies = [ - "heck 0.3.3", + "heck 0.4.1", "proc-macro2", "quote", "rustversion", - "syn 1.0.102", + "syn 1.0.109", +] + +[[package]] +name = "stun" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7e94b1ec00bad60e6410e058b52f1c66de3dc5fe4d62d09b3e52bb7d3b73e25" +dependencies = [ + "base64 0.13.1", + "crc", + "lazy_static", + "md-5", + "rand 0.8.5", + "ring", + "subtle", + "thiserror", + "tokio", + "url", + "webrtc-util", ] [[package]] @@ -8675,17 +9542,17 @@ dependencies = [ [[package]] name = "substrate-build-script-utils" version = "3.0.0" -source = "git+https://github.com/joystream/substrate.git?rev=d29a53b11c3e530d1656eef502cb0f1f8fff3522#d29a53b11c3e530d1656eef502cb0f1f8fff3522" +source = "git+https://github.com/joystream/substrate.git?rev=1d0eefca86ef31b9e7727df01a6ed23ad65491e9#1d0eefca86ef31b9e7727df01a6ed23ad65491e9" dependencies = [ - "platforms", + "platforms 2.0.0", ] [[package]] name = "substrate-frame-cli" version = "4.0.0-dev" -source = "git+https://github.com/joystream/substrate.git?rev=d29a53b11c3e530d1656eef502cb0f1f8fff3522#d29a53b11c3e530d1656eef502cb0f1f8fff3522" +source = "git+https://github.com/joystream/substrate.git?rev=1d0eefca86ef31b9e7727df01a6ed23ad65491e9#1d0eefca86ef31b9e7727df01a6ed23ad65491e9" dependencies = [ - "clap 3.2.22", + "clap 4.1.11", "frame-support", "frame-system", "sc-cli", @@ -8696,17 +9563,15 @@ dependencies = [ [[package]] name = "substrate-frame-rpc-system" version = "4.0.0-dev" -source = "git+https://github.com/joystream/substrate.git?rev=d29a53b11c3e530d1656eef502cb0f1f8fff3522#d29a53b11c3e530d1656eef502cb0f1f8fff3522" +source = "git+https://github.com/joystream/substrate.git?rev=1d0eefca86ef31b9e7727df01a6ed23ad65491e9#1d0eefca86ef31b9e7727df01a6ed23ad65491e9" dependencies = [ "frame-system-rpc-runtime-api", "futures", "jsonrpsee", "log", "parity-scale-codec", - "sc-client-api", "sc-rpc-api", "sc-transaction-pool-api", - "serde_json", "sp-api", "sp-block-builder", "sp-blockchain", @@ -8717,9 +9582,8 @@ dependencies = [ [[package]] name = "substrate-prometheus-endpoint" version = "0.10.0-dev" -source = "git+https://github.com/joystream/substrate.git?rev=d29a53b11c3e530d1656eef502cb0f1f8fff3522#d29a53b11c3e530d1656eef502cb0f1f8fff3522" +source = "git+https://github.com/joystream/substrate.git?rev=1d0eefca86ef31b9e7727df01a6ed23ad65491e9#1d0eefca86ef31b9e7727df01a6ed23ad65491e9" dependencies = [ - "futures-util", "hyper", "log", "prometheus", @@ -8727,10 +9591,23 @@ dependencies = [ "tokio", ] +[[package]] +name = "substrate-rpc-client" +version = "0.10.0-dev" +source = "git+https://github.com/joystream/substrate.git?rev=1d0eefca86ef31b9e7727df01a6ed23ad65491e9#1d0eefca86ef31b9e7727df01a6ed23ad65491e9" +dependencies = [ + "async-trait", + "jsonrpsee", + "log", + "sc-rpc-api", + "serde", + "sp-runtime", +] + [[package]] name = "substrate-state-trie-migration-rpc" version = "4.0.0-dev" -source = "git+https://github.com/joystream/substrate.git?rev=d29a53b11c3e530d1656eef502cb0f1f8fff3522#d29a53b11c3e530d1656eef502cb0f1f8fff3522" +source = "git+https://github.com/joystream/substrate.git?rev=1d0eefca86ef31b9e7727df01a6ed23ad65491e9#1d0eefca86ef31b9e7727df01a6ed23ad65491e9" dependencies = [ "jsonrpsee", "log", @@ -8740,10 +9617,8 @@ dependencies = [ "scale-info", "serde", "sp-core", - "sp-io", "sp-runtime", "sp-state-machine", - "sp-std", "sp-trie", "trie-db", ] @@ -8751,11 +9626,11 @@ dependencies = [ [[package]] name = "substrate-test-client" version = "2.0.1" -source = "git+https://github.com/joystream/substrate.git?rev=d29a53b11c3e530d1656eef502cb0f1f8fff3522#d29a53b11c3e530d1656eef502cb0f1f8fff3522" +source = "git+https://github.com/joystream/substrate.git?rev=1d0eefca86ef31b9e7727df01a6ed23ad65491e9#1d0eefca86ef31b9e7727df01a6ed23ad65491e9" dependencies = [ + "array-bytes", "async-trait", "futures", - "hex", "parity-scale-codec", "sc-client-api", "sc-client-db", @@ -8777,9 +9652,8 @@ dependencies = [ [[package]] name = "substrate-test-runtime" version = "2.0.0" -source = "git+https://github.com/joystream/substrate.git?rev=d29a53b11c3e530d1656eef502cb0f1f8fff3522#d29a53b11c3e530d1656eef502cb0f1f8fff3522" +source = "git+https://github.com/joystream/substrate.git?rev=1d0eefca86ef31b9e7727df01a6ed23ad65491e9#1d0eefca86ef31b9e7727df01a6ed23ad65491e9" dependencies = [ - "beefy-primitives", "cfg-if", "frame-support", "frame-system", @@ -8787,9 +9661,9 @@ dependencies = [ "log", "memory-db", "pallet-babe", + "pallet-beefy-mmr", "pallet-timestamp", "parity-scale-codec", - "parity-util-mem", "sc-service", "scale-info", "serde", @@ -8798,9 +9672,10 @@ dependencies = [ "sp-block-builder", "sp-consensus-aura", "sp-consensus-babe", + "sp-consensus-beefy", + "sp-consensus-grandpa", "sp-core", "sp-externalities", - "sp-finality-grandpa", "sp-inherents", "sp-io", "sp-keyring", @@ -8820,11 +9695,12 @@ dependencies = [ [[package]] name = "substrate-test-runtime-client" version = "2.0.0" -source = "git+https://github.com/joystream/substrate.git?rev=d29a53b11c3e530d1656eef502cb0f1f8fff3522#d29a53b11c3e530d1656eef502cb0f1f8fff3522" +source = "git+https://github.com/joystream/substrate.git?rev=1d0eefca86ef31b9e7727df01a6ed23ad65491e9#1d0eefca86ef31b9e7727df01a6ed23ad65491e9" dependencies = [ "futures", "parity-scale-codec", "sc-block-builder", + "sc-chain-spec", "sc-client-api", "sc-consensus", "sp-api", @@ -8839,17 +9715,27 @@ dependencies = [ [[package]] name = "substrate-wasm-builder" version = "5.0.0-dev" -source = "git+https://github.com/joystream/substrate.git?rev=d29a53b11c3e530d1656eef502cb0f1f8fff3522#d29a53b11c3e530d1656eef502cb0f1f8fff3522" +source = "git+https://github.com/joystream/substrate.git?rev=1d0eefca86ef31b9e7727df01a6ed23ad65491e9#1d0eefca86ef31b9e7727df01a6ed23ad65491e9" dependencies = [ "ansi_term", "build-helper", "cargo_metadata", + "filetime", "sp-maybe-compressed-blob", - "strum 0.23.0", + "strum 0.24.1", "tempfile", "toml", "walkdir", - "wasm-gc-api", + "wasm-opt", +] + +[[package]] +name = "substring" +version = "1.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42ee6433ecef213b2e72f587ef64a2f5943e7cd16fbd82dbe8bc07486c534c86" +dependencies = [ + "autocfg", ] [[package]] @@ -8860,9 +9746,9 @@ checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601" [[package]] name = "syn" -version = "1.0.102" +version = "1.0.109" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fcd952facd492f9be3ef0d0b7032a6e442ee9b361d4acc2b1d0c4aaa5f613a1" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" dependencies = [ "proc-macro2", "quote", @@ -8871,9 +9757,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.15" +version = "2.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a34fcf3e8b60f57e6a14301a2e916d323af98b0ea63c599441eec8558660c822" +checksum = "59d3276aee1fa0c33612917969b5172b5be2db051232a6e4826f1a1a9191b045" dependencies = [ "proc-macro2", "quote", @@ -8888,7 +9774,7 @@ checksum = "f36bdaa60a83aca3921b5259d5400cbf5e90fc51931376a9bd4a0eb79aa7210f" dependencies = [ "proc-macro2", "quote", - "syn 1.0.102", + "syn 1.0.109", "unicode-xid", ] @@ -8898,7 +9784,7 @@ version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d75182f12f490e953596550b65ee31bda7c8e043d9386174b353bda50838c3fd" dependencies = [ - "bitflags", + "bitflags 1.3.2", "core-foundation", "system-configuration-sys", ] @@ -8921,38 +9807,37 @@ checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" [[package]] name = "target-lexicon" -version = "0.12.4" +version = "0.12.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c02424087780c9b71cc96799eaeddff35af2bc513278cda5c99fc1f5d026d3c1" +checksum = "8ae9980cab1db3fceee2f6c6f643d5d8de2997c58ee8d25fb0cc8a9e9e7348e5" [[package]] name = "tempfile" -version = "3.3.0" +version = "3.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5cdb1ef4eaeeaddc8fbd371e5017057064af0911902ef36b39801f67cc6d79e4" +checksum = "af18f7ae1acd354b992402e9ec5864359d693cd8a79dcbef59f76891701c1e95" dependencies = [ "cfg-if", "fastrand", - "libc", "redox_syscall", - "remove_dir_all", - "winapi", + "rustix 0.36.10", + "windows-sys 0.42.0", ] [[package]] name = "termcolor" -version = "1.1.3" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bab24d30b911b2376f3a13cc2cd443142f0c81dda04c118693e35b3835757755" +checksum = "be55cf8942feac5c765c2c993422806843c9a9a45d4d5c407ad6dd2ea95eb9b6" dependencies = [ "winapi-util", ] [[package]] name = "termtree" -version = "0.2.4" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "507e9898683b6c43a9aa55b64259b721b52ba226e0f3779137e50ad114a4c90b" +checksum = "3369f5ac52d5eb6ab48c6b4ffdc8efbcad6b89c765749064ba298f2c68a16a76" [[package]] name = "textwrap" @@ -8965,28 +9850,28 @@ dependencies = [ [[package]] name = "textwrap" -version = "0.15.1" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "949517c0cf1bf4ee812e2e07e08ab448e3ae0d23472aee8a06c985f0c8815b16" +checksum = "222a222a5bfe1bba4a77b45ec488a741b3cb8872e5e499451fd7d0129c9c7c3d" [[package]] name = "thiserror" -version = "1.0.37" +version = "1.0.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10deb33631e3c9018b9baf9dcbbc4f737320d2b576bac10f6aefa048fa407e3e" +checksum = "978c9a314bd8dc99be594bc3c175faaa9794be04a5a5e153caba6915336cebac" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.37" +version = "1.0.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "982d17546b47146b28f7c22e3d08465f6b8903d0ea13c1660d9d84a6e7adcdbb" +checksum = "f9456a42c5b0d803c8cd86e73dd7cc9edd429499f37a3550d286d5e86720569f" dependencies = [ "proc-macro2", "quote", - "syn 1.0.102", + "syn 2.0.2", ] [[package]] @@ -8997,10 +9882,11 @@ checksum = "3bf63baf9f5039dadc247375c29eb13706706cfde997d0330d05aa63a77d8820" [[package]] name = "thread_local" -version = "1.1.4" +version = "1.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5516c27b78311c50bf42c071425c560ac799b11c30b31f87e3081965fe5e0180" +checksum = "3fdd6f064ccff2d6567adcb3873ca630700f00b5ad3f060c25b5dcfd9a4ce152" dependencies = [ + "cfg-if", "once_cell", ] @@ -9015,20 +9901,19 @@ dependencies = [ [[package]] name = "tikv-jemalloc-sys" -version = "0.4.3+5.2.1-patched.2" +version = "0.5.3+5.3.0-patched" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1792ccb507d955b46af42c123ea8863668fae24d03721e40cad6a41773dbb49" +checksum = "a678df20055b43e57ef8cddde41cdfda9a3c1a060b67f4c5836dfb1d78543ba8" dependencies = [ "cc", - "fs_extra", "libc", ] [[package]] name = "time" -version = "0.1.44" +version = "0.1.45" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6db9e6914ab8b1ae1c260a4ae7a49b6c5611b40328a735b21862567685e73255" +checksum = "1b797afad3f312d1c66a56d11d0316f916356d11bd158fbc6ca6389ff6bf805a" dependencies = [ "libc", "wasi 0.10.0+wasi-snapshot-preview1", @@ -9036,32 +9921,59 @@ dependencies = [ ] [[package]] -name = "tiny-bip39" -version = "0.8.2" +name = "time" +version = "0.3.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffc59cb9dfc85bb312c3a78fd6aa8a8582e310b0fa885d5bb877f6dcc601839d" +checksum = "cd0cbfecb4d19b5ea75bb31ad904eb5b9fa13f21079c3b92017ebdf4999a5890" dependencies = [ - "anyhow", - "hmac 0.8.1", - "once_cell", - "pbkdf2 0.4.0", - "rand 0.7.3", - "rustc-hash", - "sha2 0.9.9", - "thiserror", - "unicode-normalization", - "wasm-bindgen", - "zeroize", + "itoa", + "serde", + "time-core", + "time-macros", ] [[package]] -name = "tinytemplate" -version = "1.2.1" +name = "time-core" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be4d6b5f19ff7664e8c98d03e2139cb510db9b0a60b55f8e8709b689d939b6bc" -dependencies = [ - "serde", - "serde_json", +checksum = "2e153e1f1acaef8acc537e68b44906d2db6436e2b35ac2c6b42640fff91f00fd" + +[[package]] +name = "time-macros" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd80a657e71da814b8e5d60d3374fc6d35045062245d80224748ae522dd76f36" +dependencies = [ + "time-core", +] + +[[package]] +name = "tiny-bip39" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62cc94d358b5a1e84a5cb9109f559aa3c4d634d2b1b4de3d0fa4adc7c78e2861" +dependencies = [ + "anyhow", + "hmac 0.12.1", + "once_cell", + "pbkdf2 0.11.0", + "rand 0.8.5", + "rustc-hash", + "sha2 0.10.6", + "thiserror", + "unicode-normalization", + "wasm-bindgen", + "zeroize", +] + +[[package]] +name = "tinytemplate" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be4d6b5f19ff7664e8c98d03e2139cb510db9b0a60b55f8e8709b689d939b6bc" +dependencies = [ + "serde", + "serde_json", ] [[package]] @@ -9075,15 +9987,15 @@ dependencies = [ [[package]] name = "tinyvec_macros" -version = "0.1.0" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c" +checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.21.2" +version = "1.26.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9e03c497dc955702ba729190dc4aac6f2a0ce97f913e5b1b5912fc5039d9099" +checksum = "03201d01c3c27a29c8a5cee5b55a93ddae1ccf6f08f65365c2c918f8c1b76f64" dependencies = [ "autocfg", "bytes", @@ -9096,18 +10008,18 @@ dependencies = [ "signal-hook-registry", "socket2", "tokio-macros", - "winapi", + "windows-sys 0.45.0", ] [[package]] name = "tokio-macros" -version = "1.8.0" +version = "1.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9724f9a975fb987ef7a3cd9be0350edcbe130698af5b8f7a631e23d42d052484" +checksum = "d266c00fde287f55d3f1c3e96c500c362a2b8c695076ec180f27918820bc6df8" dependencies = [ "proc-macro2", "quote", - "syn 1.0.102", + "syn 1.0.109", ] [[package]] @@ -9116,16 +10028,28 @@ version = "0.23.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c43ee83903113e03984cb9e5cebe6c04a5116269e900e3ddba8f068a62adda59" dependencies = [ - "rustls", + "rustls 0.20.8", "tokio", - "webpki", + "webpki 0.22.0", +] + +[[package]] +name = "tokio-stream" +version = "0.1.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fb52b74f05dbf495a8fba459fdc331812b96aa086d9eb78101fa0d4569c3313" +dependencies = [ + "futures-core", + "pin-project-lite 0.2.9", + "tokio", + "tokio-util", ] [[package]] name = "tokio-util" -version = "0.7.4" +version = "0.7.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0bb2e075f03b3d66d8d8785356224ba688d2906a371015e225beeb65ca92c740" +checksum = "5427d89453009325de0d8f342c9490009f76e999cb7672d77e46267448f7e6b2" dependencies = [ "bytes", "futures-core", @@ -9138,13 +10062,48 @@ dependencies = [ [[package]] name = "toml" -version = "0.5.9" +version = "0.5.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d82e1a7758622a465f8cee077614c73484dac5b836c02ff6a40d5d1010324d7" +checksum = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234" dependencies = [ "serde", ] +[[package]] +name = "tower" +version = "0.4.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c" +dependencies = [ + "tower-layer", + "tower-service", + "tracing", +] + +[[package]] +name = "tower-http" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f873044bf02dd1e8239e9c1293ea39dad76dc594ec16185d0a1bf31d8dc8d858" +dependencies = [ + "bitflags 1.3.2", + "bytes", + "futures-core", + "futures-util", + "http", + "http-body", + "http-range-header", + "pin-project-lite 0.2.9", + "tower-layer", + "tower-service", +] + +[[package]] +name = "tower-layer" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c20c8dbed6283a09604c3e69b4b7eeb54e298b8a600d4d5ecb5ad39de609f1d0" + [[package]] name = "tower-service" version = "0.3.2" @@ -9158,6 +10117,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8" dependencies = [ "cfg-if", + "log", "pin-project-lite 0.2.9", "tracing-attributes", "tracing-core", @@ -9171,7 +10131,7 @@ checksum = "4017f8f45139870ca7e672686113917c71c7a6e02d4924eda67186083c03081a" dependencies = [ "proc-macro2", "quote", - "syn 1.0.102", + "syn 1.0.109", ] [[package]] @@ -9190,7 +10150,7 @@ version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "97d095ae15e245a057c8e8451bab9b3ee1e1f68e9ba2b4fbc18d0ac5237835f2" dependencies = [ - "pin-project 1.0.12", + "pin-project", "tracing", ] @@ -9200,10 +10160,8 @@ version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "78ddad33d2d10b1ed7eb9d1f518a5674713876e97e5bb9b7345a7984fbb4f922" dependencies = [ - "ahash", "lazy_static", "log", - "lru", "tracing-core", ] @@ -9242,12 +10200,12 @@ dependencies = [ [[package]] name = "trie-db" -version = "0.23.1" +version = "0.27.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d32d034c0d3db64b43c31de38e945f15b40cd4ca6d2dcfc26d4798ce8de4ab83" +checksum = "767abe6ffed88a1889671a102c2861ae742726f52e0a5a425b92c9fbfa7e9c85" dependencies = [ "hash-db", - "hashbrown", + "hashbrown 0.13.2", "log", "rustc-hex", "smallvec", @@ -9255,18 +10213,18 @@ dependencies = [ [[package]] name = "trie-root" -version = "0.17.0" +version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a36c5ca3911ed3c9a5416ee6c679042064b93fc637ded67e25f92e68d783891" +checksum = "d4ed310ef5ab98f5fa467900ed906cb9232dd5376597e00fd4cba2a449d06c0b" dependencies = [ "hash-db", ] [[package]] name = "trust-dns-proto" -version = "0.21.2" +version = "0.22.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c31f240f59877c3d4bb3b3ea0ec5a6a0cff07323580ff8c7a605cd7d08b255d" +checksum = "4f7f83d1e4a0e4358ac54c5c3681e5d7da5efc5a7a632c90bb6d6669ddd9bc26" dependencies = [ "async-trait", "cfg-if", @@ -9278,44 +10236,103 @@ dependencies = [ "idna 0.2.3", "ipnet", "lazy_static", - "log", "rand 0.8.5", "smallvec", + "socket2", "thiserror", "tinyvec", + "tokio", + "tracing", "url", ] [[package]] name = "trust-dns-resolver" -version = "0.21.2" +version = "0.22.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e4ba72c2ea84515690c9fcef4c6c660bb9df3036ed1051686de84605b74fd558" +checksum = "aff21aa4dcefb0a1afbfac26deb0adc93888c7d295fb63ab273ef276ba2b7cfe" dependencies = [ "cfg-if", "futures-util", "ipconfig", "lazy_static", - "log", "lru-cache", "parking_lot 0.12.1", "resolv-conf", "smallvec", "thiserror", + "tokio", + "tracing", "trust-dns-proto", ] [[package]] name = "try-lock" -version = "0.2.3" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59547bce71d9c38b83d9c0e92b6066c4253371f15005def0c30d9657f50c7642" +checksum = "3528ecfd12c466c6f163363caf2d02a71161dd5e1cc6ae7b34207ea2d42d81ed" + +[[package]] +name = "try-runtime-cli" +version = "0.10.0-dev" +source = "git+https://github.com/joystream/substrate.git?rev=1d0eefca86ef31b9e7727df01a6ed23ad65491e9#1d0eefca86ef31b9e7727df01a6ed23ad65491e9" +dependencies = [ + "async-trait", + "clap 4.1.11", + "frame-remote-externalities", + "frame-try-runtime", + "hex", + "log", + "parity-scale-codec", + "sc-cli", + "sc-executor", + "sc-service", + "serde", + "serde_json", + "sp-api", + "sp-consensus-aura", + "sp-consensus-babe", + "sp-core", + "sp-debug-derive", + "sp-externalities", + "sp-inherents", + "sp-io", + "sp-keystore", + "sp-rpc", + "sp-runtime", + "sp-state-machine", + "sp-timestamp", + "sp-transaction-storage-proof", + "sp-version", + "sp-weights", + "substrate-rpc-client", + "zstd", +] [[package]] name = "tt-call" -version = "1.0.8" +version = "1.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e66dcbec4290c69dd03c57e76c2469ea5c7ce109c6dd4351c13055cf71ea055" +checksum = "f4f195fd851901624eee5a58c4bb2b4f06399148fcd0ed336e6f1cb60a9881df" + +[[package]] +name = "turn" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4712ee30d123ec7ae26d1e1b218395a16c87cdbaf4b3925d170d684af62ea5e8" +dependencies = [ + "async-trait", + "base64 0.13.1", + "futures", + "log", + "md-5", + "rand 0.8.5", + "ring", + "stun", + "thiserror", + "tokio", + "webrtc-util", +] [[package]] name = "twox-hash" @@ -9324,16 +10341,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "97fee6b57c6a41524a810daee9286c02d7752c4253064d0b05472833a438f675" dependencies = [ "cfg-if", - "digest 0.10.5", + "digest 0.10.6", "rand 0.8.5", "static_assertions", ] [[package]] name = "typenum" -version = "1.15.0" +version = "1.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcf81ac59edc17cc8697ff311e8f5ef2d99fcbd9817b34cec66f90b6c3dfd987" +checksum = "497961ef93d974e23eb6f433eb5fe1b7930b659f06d12dec6fc44a8f554c0bba" [[package]] name = "ucd-trie" @@ -9343,9 +10360,9 @@ checksum = "9e79c4d996edb816c91e4308506774452e55e95c3c9de07b6729e17e15a5ef81" [[package]] name = "uint" -version = "0.9.4" +version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a45526d29728d135c2900b0d30573fe3ee79fceb12ef534c7bb30e810a91b601" +checksum = "76f64bba2c53b04fcab63c01a7d7427eadc821e3bc48c34dc9ba29c501164b52" dependencies = [ "byteorder", "crunchy", @@ -9353,26 +10370,17 @@ dependencies = [ "static_assertions", ] -[[package]] -name = "unicase" -version = "2.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50f37be617794602aabbeee0be4f259dc1778fabe05e2d67ee8f79326d5cb4f6" -dependencies = [ - "version_check", -] - [[package]] name = "unicode-bidi" -version = "0.3.8" +version = "0.3.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "099b7128301d285f79ddd55b9a83d5e6b9e97c92e0ea0daebee7263e932de992" +checksum = "7d502c968c6a838ead8e69b2ee18ec708802f99db92a0d156705ec9ef801993b" [[package]] name = "unicode-ident" -version = "1.0.5" +version = "1.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ceab39d59e4c9499d4e5a8ee0e2735b891bb7308ac83dfb4e80cad195c9f6f3" +checksum = "e5464a87b239f13a63a501f2701565754bae92d243d4bb7eb12f6d57d2269bf4" [[package]] name = "unicode-normalization" @@ -9385,9 +10393,9 @@ dependencies = [ [[package]] name = "unicode-segmentation" -version = "1.10.0" +version = "1.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fdbf052a0783de01e944a6ce7a8cb939e295b1e7be835a1112c3b9a7f047a5a" +checksum = "1dd624098567895118886609431a7c3b8f516e41d30e0643f03d94592a147e36" [[package]] name = "unicode-width" @@ -9411,6 +10419,16 @@ dependencies = [ "subtle", ] +[[package]] +name = "universal-hash" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d3160b73c9a19f7e2939a2fdad446c57c1bbbbf4d919d3213ff1267a580d8b5" +dependencies = [ + "crypto-common", + "subtle", +] + [[package]] name = "unsigned-varint" version = "0.7.1" @@ -9440,6 +10458,15 @@ dependencies = [ "percent-encoding", ] +[[package]] +name = "uuid" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1674845326ee10d37ca60470760d4288a6f80f304007d92e5c53bab78c9cfd79" +dependencies = [ + "getrandom 0.2.8", +] + [[package]] name = "valuable" version = "0.1.0" @@ -9463,7 +10490,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "aae2faf80ac463422992abf4de234731279c058aaf33171ca70277c98406b124" dependencies = [ "quote", - "syn 1.0.102", + "syn 1.0.109", ] [[package]] @@ -9493,6 +10520,15 @@ dependencies = [ "libc", ] +[[package]] +name = "waitgroup" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d1f50000a783467e6c0200f9d10642f4bc424e39efc1b770203e88b488f79292" +dependencies = [ + "atomic-waker", +] + [[package]] name = "waker-fn" version = "1.1.0" @@ -9501,12 +10537,11 @@ checksum = "9d5b2c62b4012a3e1eca5a7e077d13b3bf498c4073e33ccd58626607748ceeca" [[package]] name = "walkdir" -version = "2.3.2" +version = "2.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "808cf2735cd4b6866113f648b791c6adc5714537bc222d9347bb203386ffda56" +checksum = "36df944cda56c7d8d8b7496af378e6b16de9284591917d307c9b4d313c44e698" dependencies = [ "same-file", - "winapi", "winapi-util", ] @@ -9540,9 +10575,9 @@ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" [[package]] name = "wasm-bindgen" -version = "0.2.83" +version = "0.2.84" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eaf9f5aceeec8be17c128b2e93e031fb8a4d469bb9c4ae2d7dc1888b26887268" +checksum = "31f8dcbc21f30d9b8f2ea926ecb58f6b91192c17e9d33594b3df58b2007ca53b" dependencies = [ "cfg-if", "wasm-bindgen-macro", @@ -9550,24 +10585,24 @@ dependencies = [ [[package]] name = "wasm-bindgen-backend" -version = "0.2.83" +version = "0.2.84" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c8ffb332579b0557b52d268b91feab8df3615f265d5270fec2a8c95b17c1142" +checksum = "95ce90fd5bcc06af55a641a86428ee4229e44e07033963a2290a8e241607ccb9" dependencies = [ "bumpalo", "log", "once_cell", "proc-macro2", "quote", - "syn 1.0.102", + "syn 1.0.109", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-futures" -version = "0.4.33" +version = "0.4.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23639446165ca5a5de86ae1d8896b737ae80319560fbaa4c2887b7da6e7ebd7d" +checksum = "f219e0d211ba40266969f6dbdd90636da12f75bee4fc9d6c23d1260dadb51454" dependencies = [ "cfg-if", "js-sys", @@ -9577,9 +10612,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.83" +version = "0.2.84" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "052be0f94026e6cbc75cdefc9bae13fd6052cdcaf532fa6c45e7ae33a1e6c810" +checksum = "4c21f77c0bedc37fd5dc21f897894a5ca01e7bb159884559461862ae90c0b4c5" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -9587,41 +10622,71 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.83" +version = "0.2.84" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07bc0c051dc5f23e307b13285f9d75df86bfdf816c5721e573dec1f9b8aa193c" +checksum = "2aff81306fcac3c7515ad4e177f521b5c9a15f2b08f4e32d823066102f35a5f6" dependencies = [ "proc-macro2", "quote", - "syn 1.0.102", + "syn 1.0.109", "wasm-bindgen-backend", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.83" +version = "0.2.84" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c38c045535d93ec4f0b4defec448e4291638ee608530863b1e2ba115d4fff7f" +checksum = "0046fef7e28c3804e5e38bfa31ea2a0f73905319b677e57ebe37e49358989b5d" [[package]] -name = "wasm-gc-api" -version = "0.1.11" +name = "wasm-instrument" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0c32691b6c7e6c14e7f8fd55361a9088b507aa49620fcd06c09b3a1082186b9" +checksum = "aa1dafb3e60065305741e83db35c6c2584bb3725b692b5b66148a38d72ace6cd" dependencies = [ - "log", - "parity-wasm 0.32.0", - "rustc-demangle", + "parity-wasm", ] [[package]] -name = "wasm-instrument" -version = "0.1.1" +name = "wasm-opt" +version = "0.111.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "962e5b0401bbb6c887f54e69b8c496ea36f704df65db73e81fd5ff8dc3e63a9f" +checksum = "84a303793cbc01fb96551badfc7367db6007396bba6bac97936b3c8b6f7fdb41" dependencies = [ - "parity-wasm 0.42.2", + "anyhow", + "libc", + "strum 0.24.1", + "strum_macros 0.24.3", + "tempfile", + "thiserror", + "wasm-opt-cxx-sys", + "wasm-opt-sys", +] + +[[package]] +name = "wasm-opt-cxx-sys" +version = "0.111.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9c9deb56f8a9f2ec177b3bd642a8205621835944ed5da55f2388ef216aca5a4" +dependencies = [ + "anyhow", + "cxx", + "cxx-build", + "wasm-opt-sys", +] + +[[package]] +name = "wasm-opt-sys" +version = "0.111.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4432e28b542738a9776cedf92e8a99d8991c7b4667ee2c7ccddfb479dd2856a7" +dependencies = [ + "anyhow", + "cc", + "cxx", + "cxx-build", + "regex", ] [[package]] @@ -9641,55 +10706,65 @@ dependencies = [ [[package]] name = "wasmi" -version = "0.9.1" +version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca00c5147c319a8ec91ec1a0edbec31e566ce2c9cc93b3f9bb86a9efd0eb795d" +checksum = "06c326c93fbf86419608361a2c925a31754cf109da1b8b55737070b4d6669422" dependencies = [ - "downcast-rs", - "libc", - "libm", - "memory_units", - "num-rational 0.2.4", - "num-traits", - "parity-wasm 0.42.2", + "parity-wasm", "wasmi-validation", + "wasmi_core", ] [[package]] name = "wasmi-validation" -version = "0.4.1" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91ff416ad1ff0c42e5a926ed5d5fab74c0f098749aa0ad8b2a34b982ce0e867b" +dependencies = [ + "parity-wasm", +] + +[[package]] +name = "wasmi_core" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "165343ecd6c018fc09ebcae280752702c9a2ef3e6f8d02f1cfcbdb53ef6d7937" +checksum = "57d20cb3c59b788653d99541c646c561c9dd26506f25c0cebfe810659c54c6d7" dependencies = [ - "parity-wasm 0.42.2", + "downcast-rs", + "libm 0.2.6", + "memory_units", + "num-rational", + "num-traits", + "region", ] [[package]] name = "wasmparser" -version = "0.83.0" +version = "0.100.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "718ed7c55c2add6548cca3ddd6383d738cd73b892df400e96b9aa876f0141d7a" +checksum = "64b20236ab624147dfbb62cf12a19aaf66af0e41b8398838b66e997d07d269d4" +dependencies = [ + "indexmap", + "url", +] [[package]] name = "wasmtime" -version = "0.35.3" +version = "6.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21ffb4705016d5ca91e18a72ed6822dab50e6d5ddd7045461b17ef19071cdef1" +checksum = "76a222f5fa1e14b2cefc286f1b68494d7a965f4bf57ec04c59bb62673d639af6" dependencies = [ "anyhow", - "backtrace", "bincode", "cfg-if", "indexmap", - "lazy_static", "libc", "log", - "object 0.27.1", + "object 0.29.0", "once_cell", - "paste 1.0.9", + "paste 1.0.12", "psm", "rayon", - "region", "serde", "target-lexicon", "wasmparser", @@ -9698,34 +10773,43 @@ dependencies = [ "wasmtime-environ", "wasmtime-jit", "wasmtime-runtime", - "winapi", + "windows-sys 0.42.0", +] + +[[package]] +name = "wasmtime-asm-macros" +version = "6.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4407a7246e7d2f3d8fb1cf0c72fda8dbafdb6dd34d555ae8bea0e5ae031089cc" +dependencies = [ + "cfg-if", ] [[package]] name = "wasmtime-cache" -version = "0.35.3" +version = "6.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85c6ab24291fa7cb3a181f5669f6c72599b7ef781669759b45c7828c5999d0c0" +checksum = "5ceb3adf61d654be0be67fffdce42447b0880481348785be5fe40b5dd7663a4c" dependencies = [ "anyhow", - "base64", + "base64 0.13.1", "bincode", "directories-next", "file-per-thread-logger", "log", - "rustix", + "rustix 0.36.10", "serde", - "sha2 0.9.9", + "sha2 0.10.6", "toml", - "winapi", + "windows-sys 0.42.0", "zstd", ] [[package]] name = "wasmtime-cranelift" -version = "0.35.3" +version = "6.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f04c810078a491b7bc4866ebe045f714d2b95e6b539e1f64009a4a7606be11de" +checksum = "3c366bb8647e01fd08cb5589976284b00abfded5529b33d7e7f3f086c68304a4" dependencies = [ "anyhow", "cranelift-codegen", @@ -9733,10 +10817,9 @@ dependencies = [ "cranelift-frontend", "cranelift-native", "cranelift-wasm", - "gimli", + "gimli 0.26.2", "log", - "more-asserts", - "object 0.27.1", + "object 0.29.0", "target-lexicon", "thiserror", "wasmparser", @@ -9745,17 +10828,16 @@ dependencies = [ [[package]] name = "wasmtime-environ" -version = "0.35.3" +version = "6.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61448266ea164b1ac406363cdcfac81c7c44db4d94c7a81c8620ac6c5c6cdf59" +checksum = "47b8b50962eae38ee319f7b24900b7cf371f03eebdc17400c1dc8575fc10c9a7" dependencies = [ "anyhow", "cranelift-entity", - "gimli", + "gimli 0.26.2", "indexmap", "log", - "more-asserts", - "object 0.27.1", + "object 0.29.0", "serde", "target-lexicon", "thiserror", @@ -9765,49 +10847,57 @@ dependencies = [ [[package]] name = "wasmtime-jit" -version = "0.35.3" +version = "6.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "156b4623c6b0d4b8c24afb846c20525922f538ef464cc024abab7ea8de2109a2" +checksum = "ffaed4f9a234ba5225d8e64eac7b4a5d13b994aeb37353cde2cbeb3febda9eaa" dependencies = [ - "addr2line", + "addr2line 0.17.0", "anyhow", "bincode", "cfg-if", "cpp_demangle", - "gimli", + "gimli 0.26.2", "log", - "object 0.27.1", - "region", + "object 0.29.0", "rustc-demangle", - "rustix", "serde", "target-lexicon", - "thiserror", "wasmtime-environ", "wasmtime-jit-debug", + "wasmtime-jit-icache-coherence", "wasmtime-runtime", - "winapi", + "windows-sys 0.42.0", ] [[package]] name = "wasmtime-jit-debug" -version = "0.35.3" +version = "6.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5dc31f811760a6c76b2672c404866fd19b75e5fb3b0075a3e377a6846490654" +checksum = "eed41cbcbf74ce3ff6f1d07d1b707888166dc408d1a880f651268f4f7c9194b2" dependencies = [ - "lazy_static", - "object 0.27.1", - "rustix", + "object 0.29.0", + "once_cell", + "rustix 0.36.10", +] + +[[package]] +name = "wasmtime-jit-icache-coherence" +version = "6.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43a28ae1e648461bfdbb79db3efdaee1bca5b940872e4175390f465593a2e54c" +dependencies = [ + "cfg-if", + "libc", + "windows-sys 0.42.0", ] [[package]] name = "wasmtime-runtime" -version = "0.35.3" +version = "6.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f907beaff69d4d920fa4688411ee4cc75c0f01859e424677f9e426e2ef749864" +checksum = "e704b126e4252788ccfc3526d4d4511d4b23c521bf123e447ac726c14545217b" dependencies = [ "anyhow", - "backtrace", "cc", "cfg-if", "indexmap", @@ -9815,22 +10905,21 @@ dependencies = [ "log", "mach", "memfd", - "memoffset", - "more-asserts", + "memoffset 0.6.5", + "paste 1.0.12", "rand 0.8.5", - "region", - "rustix", - "thiserror", + "rustix 0.36.10", + "wasmtime-asm-macros", "wasmtime-environ", "wasmtime-jit-debug", - "winapi", + "windows-sys 0.42.0", ] [[package]] name = "wasmtime-types" -version = "0.35.3" +version = "6.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "514ef0e5fd197b9609dc9eb74beba0c84d5a12b2417cbae55534633329ba4852" +checksum = "83e5572c5727c1ee7e8f28717aaa8400e4d22dcbd714ea5457d85b5005206568" dependencies = [ "cranelift-entity", "serde", @@ -9840,14 +10929,24 @@ dependencies = [ [[package]] name = "web-sys" -version = "0.3.60" +version = "0.3.61" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bcda906d8be16e728fd5adc5b729afad4e444e106ab28cd1c7256e54fa61510f" +checksum = "e33b99f4b23ba3eec1a53ac264e35a755f00e966e0065077d6027c0f575b0b97" dependencies = [ "js-sys", "wasm-bindgen", ] +[[package]] +name = "webpki" +version = "0.21.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8e38c0608262c46d4a56202ebabdeb094cef7e560ca7a226c6bf055188aa4ea" +dependencies = [ + "ring", + "untrusted", +] + [[package]] name = "webpki" version = "0.22.0" @@ -9860,33 +10959,246 @@ dependencies = [ [[package]] name = "webpki-roots" -version = "0.22.5" +version = "0.22.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "368bfe657969fb01238bb756d351dcade285e0f6fcbd36dcb23359a5169975be" +checksum = "b6c71e40d7d2c34a5106301fb632274ca37242cd0c9d3e64dbece371a40a2d87" dependencies = [ - "webpki", + "webpki 0.22.0", ] [[package]] -name = "wepoll-ffi" -version = "0.1.2" +name = "webrtc" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2d3bc9049bdb2cea52f5fd4f6f728184225bdb867ed0dc2410eab6df5bdd67bb" +dependencies = [ + "arc-swap", + "async-trait", + "bytes", + "hex", + "interceptor", + "lazy_static", + "log", + "rand 0.8.5", + "rcgen 0.9.3", + "regex", + "ring", + "rtcp", + "rtp", + "rustls 0.19.1", + "sdp", + "serde", + "serde_json", + "sha2 0.10.6", + "stun", + "thiserror", + "time 0.3.20", + "tokio", + "turn", + "url", + "waitgroup", + "webrtc-data", + "webrtc-dtls", + "webrtc-ice", + "webrtc-mdns", + "webrtc-media", + "webrtc-sctp", + "webrtc-srtp", + "webrtc-util", +] + +[[package]] +name = "webrtc-data" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ef36a4d12baa6e842582fe9ec16a57184ba35e1a09308307b67d43ec8883100" +dependencies = [ + "bytes", + "derive_builder", + "log", + "thiserror", + "tokio", + "webrtc-sctp", + "webrtc-util", +] + +[[package]] +name = "webrtc-dtls" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "942be5bd85f072c3128396f6e5a9bfb93ca8c1939ded735d177b7bcba9a13d05" +dependencies = [ + "aes 0.6.0", + "aes-gcm 0.10.1", + "async-trait", + "bincode", + "block-modes", + "byteorder", + "ccm", + "curve25519-dalek 3.2.0", + "der-parser 8.2.0", + "elliptic-curve", + "hkdf", + "hmac 0.12.1", + "log", + "oid-registry 0.6.1", + "p256", + "p384", + "rand 0.8.5", + "rand_core 0.6.4", + "rcgen 0.9.3", + "ring", + "rustls 0.19.1", + "sec1", + "serde", + "sha1", + "sha2 0.10.6", + "signature", + "subtle", + "thiserror", + "tokio", + "webpki 0.21.4", + "webrtc-util", + "x25519-dalek 2.0.0-pre.1", + "x509-parser 0.13.2", +] + +[[package]] +name = "webrtc-ice" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "465a03cc11e9a7d7b4f9f99870558fe37a102b65b93f8045392fef7c67b39e80" +dependencies = [ + "arc-swap", + "async-trait", + "crc", + "log", + "rand 0.8.5", + "serde", + "serde_json", + "stun", + "thiserror", + "tokio", + "turn", + "url", + "uuid", + "waitgroup", + "webrtc-mdns", + "webrtc-util", +] + +[[package]] +name = "webrtc-mdns" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d743fdedc5c64377b5fc2bc036b01c7fd642205a0d96356034ae3404d49eb7fb" +checksum = "f08dfd7a6e3987e255c4dbe710dde5d94d0f0574f8a21afa95d171376c143106" dependencies = [ + "log", + "socket2", + "thiserror", + "tokio", + "webrtc-util", +] + +[[package]] +name = "webrtc-media" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee2a3c157a040324e5049bcbd644ffc9079e6738fa2cfab2bcff64e5cc4c00d7" +dependencies = [ + "byteorder", + "bytes", + "derive_builder", + "displaydoc", + "rand 0.8.5", + "rtp", + "thiserror", + "webrtc-util", +] + +[[package]] +name = "webrtc-sctp" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d47adcd9427eb3ede33d5a7f3424038f63c965491beafcc20bc650a2f6679c0" +dependencies = [ + "arc-swap", + "async-trait", + "bytes", + "crc", + "log", + "rand 0.8.5", + "thiserror", + "tokio", + "webrtc-util", +] + +[[package]] +name = "webrtc-srtp" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6183edc4c1c6c0175f8812eefdce84dfa0aea9c3ece71c2bf6ddd3c964de3da5" +dependencies = [ + "aead 0.4.3", + "aes 0.7.5", + "aes-gcm 0.9.4", + "async-trait", + "byteorder", + "bytes", + "ctr 0.8.0", + "hmac 0.11.0", + "log", + "rtcp", + "rtp", + "sha-1", + "subtle", + "thiserror", + "tokio", + "webrtc-util", +] + +[[package]] +name = "webrtc-util" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93f1db1727772c05cf7a2cfece52c3aca8045ca1e176cd517d323489aa3c6d87" +dependencies = [ + "async-trait", + "bitflags 1.3.2", + "bytes", "cc", + "ipnet", + "lazy_static", + "libc", + "log", + "nix 0.24.3", + "rand 0.8.5", + "thiserror", + "tokio", + "winapi", ] [[package]] name = "which" -version = "4.3.0" +version = "4.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c831fbbee9e129a8cf93e7747a82da9d95ba8e16621cae60ec2cdc849bacb7b" +checksum = "2441c784c52b289a054b7201fc93253e288f094e2f4be9058343127c4226a269" dependencies = [ "either", "libc", "once_cell", ] +[[package]] +name = "wide" +version = "0.7.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b689b6c49d6549434bf944e6b0f39238cf63693cb7a147e9d887507fffa3b223" +dependencies = [ + "bytemuck", + "safe_arch", +] + [[package]] name = "widestring" version = "0.5.1" @@ -9939,17 +11251,49 @@ dependencies = [ [[package]] name = "windows-sys" -version = "0.36.1" +version = "0.42.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7" +dependencies = [ + "windows_aarch64_gnullvm", + "windows_aarch64_msvc 0.42.2", + "windows_i686_gnu 0.42.2", + "windows_i686_msvc 0.42.2", + "windows_x86_64_gnu 0.42.2", + "windows_x86_64_gnullvm", + "windows_x86_64_msvc 0.42.2", +] + +[[package]] +name = "windows-sys" +version = "0.45.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea04155a16a59f9eab786fe12a4a450e75cdb175f9e0d80da1e17db09f55b8d2" +checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" dependencies = [ - "windows_aarch64_msvc 0.36.1", - "windows_i686_gnu 0.36.1", - "windows_i686_msvc 0.36.1", - "windows_x86_64_gnu 0.36.1", - "windows_x86_64_msvc 0.36.1", + "windows-targets", ] +[[package]] +name = "windows-targets" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071" +dependencies = [ + "windows_aarch64_gnullvm", + "windows_aarch64_msvc 0.42.2", + "windows_i686_gnu 0.42.2", + "windows_i686_msvc 0.42.2", + "windows_x86_64_gnu 0.42.2", + "windows_x86_64_gnullvm", + "windows_x86_64_msvc 0.42.2", +] + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" + [[package]] name = "windows_aarch64_msvc" version = "0.34.0" @@ -9958,9 +11302,9 @@ checksum = "17cffbe740121affb56fad0fc0e421804adf0ae00891205213b5cecd30db881d" [[package]] name = "windows_aarch64_msvc" -version = "0.36.1" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9bb8c3fd39ade2d67e9874ac4f3db21f0d710bee00fe7cab16949ec184eeaa47" +checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" [[package]] name = "windows_i686_gnu" @@ -9970,9 +11314,9 @@ checksum = "2564fde759adb79129d9b4f54be42b32c89970c18ebf93124ca8870a498688ed" [[package]] name = "windows_i686_gnu" -version = "0.36.1" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "180e6ccf01daf4c426b846dfc66db1fc518f074baa793aa7d9b9aaeffad6a3b6" +checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" [[package]] name = "windows_i686_msvc" @@ -9982,9 +11326,9 @@ checksum = "9cd9d32ba70453522332c14d38814bceeb747d80b3958676007acadd7e166956" [[package]] name = "windows_i686_msvc" -version = "0.36.1" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2e7917148b2812d1eeafaeb22a97e4813dfa60a3f8f78ebe204bcc88f12f024" +checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" [[package]] name = "windows_x86_64_gnu" @@ -9994,9 +11338,15 @@ checksum = "cfce6deae227ee8d356d19effc141a509cc503dfd1f850622ec4b0f84428e1f4" [[package]] name = "windows_x86_64_gnu" -version = "0.36.1" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4dcd171b8776c41b97521e5da127a2d86ad280114807d0b2ab1e462bc764d9e1" +checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" [[package]] name = "windows_x86_64_msvc" @@ -10006,24 +11356,24 @@ checksum = "d19538ccc21819d01deaf88d6a17eae6596a12e9aafdbb97916fb49896d89de9" [[package]] name = "windows_x86_64_msvc" -version = "0.36.1" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c811ca4a8c853ef420abd8592ba53ddbbac90410fab6903b3e79972a631f7680" +checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" [[package]] name = "winreg" -version = "0.7.0" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0120db82e8a1e0b9fb3345a539c478767c0048d842860994d96113d5b667bd69" +checksum = "80d0f4e272c85def139476380b12f9ac60926689dd2e01d4923222f40580869d" dependencies = [ "winapi", ] [[package]] name = "wyz" -version = "0.5.0" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30b31594f29d27036c383b53b59ed3476874d518f0efb151b27a4c275141390e" +checksum = "05f360fc0b24296329c78fda852a1e9ae82de9cf7b27dae4b7f62f118f77b9ed" dependencies = [ "tap", ] @@ -10039,6 +11389,54 @@ dependencies = [ "zeroize", ] +[[package]] +name = "x25519-dalek" +version = "2.0.0-pre.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5da623d8af10a62342bcbbb230e33e58a63255a58012f8653c578e54bab48df" +dependencies = [ + "curve25519-dalek 3.2.0", + "rand_core 0.6.4", + "zeroize", +] + +[[package]] +name = "x509-parser" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fb9bace5b5589ffead1afb76e43e34cff39cd0f3ce7e170ae0c29e53b88eb1c" +dependencies = [ + "asn1-rs 0.3.1", + "base64 0.13.1", + "data-encoding", + "der-parser 7.0.0", + "lazy_static", + "nom", + "oid-registry 0.4.0", + "ring", + "rusticata-macros", + "thiserror", + "time 0.3.20", +] + +[[package]] +name = "x509-parser" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e0ecbeb7b67ce215e40e3cc7f2ff902f94a223acf44995934763467e7b1febc8" +dependencies = [ + "asn1-rs 0.5.2", + "base64 0.13.1", + "data-encoding", + "der-parser 8.2.0", + "lazy_static", + "nom", + "oid-registry 0.6.1", + "rusticata-macros", + "thiserror", + "time 0.3.20", +] + [[package]] name = "yamux" version = "0.10.2" @@ -10053,6 +11451,15 @@ dependencies = [ "static_assertions", ] +[[package]] +name = "yasna" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aed2e7a52e3744ab4d0c05c20aa065258e84c49fd4226f5191b2ed29712710b4" +dependencies = [ + "time 0.3.20", +] + [[package]] name = "zeroize" version = "1.5.7" @@ -10064,30 +11471,30 @@ dependencies = [ [[package]] name = "zeroize_derive" -version = "1.3.2" +version = "1.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f8f187641dad4f680d25c4bfc4225b418165984179f26ca76ec4fb6441d3a17" +checksum = "44bf07cb3e50ea2003396695d58bf46bc9887a1f362260446fad6bc4e79bd36c" dependencies = [ "proc-macro2", "quote", - "syn 1.0.102", + "syn 1.0.109", "synstructure", ] [[package]] name = "zstd" -version = "0.10.2+zstd.1.5.2" +version = "0.11.2+zstd.1.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f4a6bd64f22b5e3e94b4e238669ff9f10815c27a5180108b849d24174a83847" +checksum = "20cc960326ece64f010d2d2107537f26dc589a6573a316bd5b1dba685fa5fde4" dependencies = [ "zstd-safe", ] [[package]] name = "zstd-safe" -version = "4.1.6+zstd.1.5.2" +version = "5.0.2+zstd.1.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94b61c51bb270702d6167b8ce67340d2754b088d0c091b06e593aa772c3ee9bb" +checksum = "1d2a5585e04f9eea4b2a3d1eca508c4dee9592a89ef6f450c11719da0726f4db" dependencies = [ "libc", "zstd-sys", @@ -10095,10 +11502,11 @@ dependencies = [ [[package]] name = "zstd-sys" -version = "1.6.3+zstd.1.5.2" +version = "2.0.7+zstd.1.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc49afa5c8d634e75761feda8c592051e7eeb4683ba827211eb0d731d3402ea8" +checksum = "94509c3ba2fe55294d752b79842c530ccfab760192521df74a081a78d2b3c7f5" dependencies = [ "cc", "libc", + "pkg-config", ] diff --git a/Cargo.toml b/Cargo.toml index ddd2be46eb..e10aedcae0 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,4 +1,6 @@ [workspace] +resolver = "2" + members = [ "runtime", "runtime-modules/proposals/engine", @@ -32,5 +34,8 @@ exclude = [ # Substrate runtime requires unwinding. panic = "unwind" -[patch.crates-io] -ss58-registry = { package = 'ss58-registry', git = 'https://github.com/bwhm/ss58-registry', rev = 'a70121e7bbb56f983f6f17771cc79d8f19b481a0'} +# Sacrifice compile speed for execution speed by using optimization flags: +# https://doc.rust-lang.org/rustc/linker-plugin-lto.html +lto = "fat" +# https://doc.rust-lang.org/rustc/codegen-options/index.html#codegen-units +codegen-units = 1 diff --git a/README.md b/README.md index 829e8773f0..28bbb9b982 100644 --- a/README.md +++ b/README.md @@ -91,7 +91,7 @@ yarn start ```sh git checkout master -WASM_BUILD_TOOLCHAIN=nightly-2022-05-11 cargo build --release +WASM_BUILD_TOOLCHAIN=nightly-2022-11-15 cargo build --release ./target/release/joystream-node -- --pruning archive --chain joy-mainnet.json ``` diff --git a/bin/inspect/Cargo.toml b/bin/inspect/Cargo.toml index 67becf669c..812c34800c 100644 --- a/bin/inspect/Cargo.toml +++ b/bin/inspect/Cargo.toml @@ -8,14 +8,14 @@ homepage = "https://substrate.io" repository = "https://github.com/paritytech/substrate/" [dependencies] -clap = { version = "3.1.6", features = ["derive"] } -codec = { package = "parity-scale-codec", version = "3.1.5" } +clap = { version = "4.0.9", features = ["derive"] } +codec = { package = "parity-scale-codec", version = "3.2.2" } thiserror = "1.0" -sc-cli = { package = 'sc-cli', git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522' } -sc-client-api = { package = 'sc-client-api', git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522' } -sc-executor = { package = 'sc-executor', git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522' } -sc-service = { package = 'sc-service', git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522', default-features = false } -sp-blockchain = { package = 'sp-blockchain', git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522' } -sp-core = { package = 'sp-core', git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522' } -sp-runtime = { package = 'sp-runtime', git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522' } +sc-cli = { package = 'sc-cli', git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9' } +sc-client-api = { package = 'sc-client-api', git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9' } +sc-executor = { package = 'sc-executor', git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9' } +sc-service = { package = 'sc-service', git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9', default-features = false } +sp-blockchain = { package = 'sp-blockchain', git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9' } +sp-core = { package = 'sp-core', git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9' } +sp-runtime = { package = 'sp-runtime', git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9' } overrides = { package = "overrides", path = "../overrides" } diff --git a/bin/inspect/src/cli.rs b/bin/inspect/src/cli.rs index fb81f53983..0f80161d65 100644 --- a/bin/inspect/src/cli.rs +++ b/bin/inspect/src/cli.rs @@ -1,6 +1,6 @@ // This file is part of Substrate. -// Copyright (C) 2020-2022 Parity Technologies (UK) Ltd. +// Copyright (C) Parity Technologies (UK) Ltd. // SPDX-License-Identifier: GPL-3.0-or-later WITH Classpath-exception-2.0 // This program is free software: you can redistribute it and/or modify @@ -46,7 +46,7 @@ pub enum InspectSubCmd { /// Can be either a block hash (no 0x prefix) or a number to retrieve existing block, /// or a 0x-prefixed bytes hex string, representing SCALE encoding of /// a block. - #[clap(value_name = "HASH or NUMBER or BYTES")] + #[arg(value_name = "HASH or NUMBER or BYTES")] input: String, }, /// Decode extrinsic with native version of runtime and print out the details. @@ -56,7 +56,7 @@ pub enum InspectSubCmd { /// Can be either a block hash (no 0x prefix) or number and the index, in the form /// of `{block}:{index}` or a 0x-prefixed bytes hex string, /// representing SCALE encoding of an extrinsic. - #[clap(value_name = "BLOCK:INDEX or BYTES")] + #[arg(value_name = "BLOCK:INDEX or BYTES")] input: String, }, } diff --git a/bin/inspect/src/command.rs b/bin/inspect/src/command.rs index 90a226e1ea..08a8432fd3 100644 --- a/bin/inspect/src/command.rs +++ b/bin/inspect/src/command.rs @@ -1,6 +1,6 @@ // This file is part of Substrate. -// Copyright (C) 2020-2022 Parity Technologies (UK) Ltd. +// Copyright (C) Parity Technologies (UK) Ltd. // SPDX-License-Identifier: GPL-3.0-or-later WITH Classpath-exception-2.0 // This program is free software: you can redistribute it and/or modify diff --git a/bin/inspect/src/lib.rs b/bin/inspect/src/lib.rs index 7e66e3c444..a7dc89b7a7 100644 --- a/bin/inspect/src/lib.rs +++ b/bin/inspect/src/lib.rs @@ -1,6 +1,6 @@ // This file is part of Substrate. // -// Copyright (C) 2020-2022 Parity Technologies (UK) Ltd. +// Copyright (C) Parity Technologies (UK) Ltd. // SPDX-License-Identifier: GPL-3.0-or-later WITH Classpath-exception-2.0 // // This program is free software: you can redistribute it and/or modify @@ -79,7 +79,6 @@ impl PrettyPrinter for DebugPrinter { /// Aggregated error for `Inspector` operations. #[derive(Debug, thiserror::Error)] -#[allow(clippy::large_enum_variant)] pub enum Error { /// Could not decode Block or Extrinsic. #[error(transparent)] @@ -145,27 +144,27 @@ impl> Inspector BlockAddress::Bytes(bytes) => TBlock::decode(&mut &*bytes)?, BlockAddress::Number(number) => { let id = BlockId::number(number); + let hash = self.chain.expect_block_hash_from_id(&id)?; let not_found = format!("Could not find block {:?}", id); let body = self .chain - .block_body(&id)? + .block_body(hash)? .ok_or_else(|| Error::NotFound(not_found.clone()))?; let header = self .chain - .header(id)? + .header(hash)? .ok_or_else(|| Error::NotFound(not_found.clone()))?; TBlock::new(header, body) } BlockAddress::Hash(hash) => { - let id = BlockId::hash(hash); - let not_found = format!("Could not find block {:?}", id); + let not_found = format!("Could not find block {:?}", BlockId::::Hash(hash)); let body = self .chain - .block_body(&id)? + .block_body(hash)? .ok_or_else(|| Error::NotFound(not_found.clone()))?; let header = self .chain - .header(id)? + .header(hash)? .ok_or_else(|| Error::NotFound(not_found.clone()))?; TBlock::new(header, body) } @@ -250,8 +249,6 @@ impl FromStr for ExtrinsicAddres fn from_str(s: &str) -> Result { // first try raw bytes - // sp_core::bytes is an alias for impl_serde::serialize - // Behavior we expect is only in v0.3.1, unit tests will break with v0.3.2 if let Ok(bytes) = sp_core::bytes::from_hex(s).map(Self::Bytes) { return Ok(bytes); } @@ -298,9 +295,6 @@ mod tests { assert_eq!(b3, Ok(BlockAddress::Bytes(vec![0, 0x12, 0x34, 0x5f]))); } - // If you find these tests breaking - // Make sure Cargo.lock has pacakge impl_serde using v0.3.1 - // unit tests will break with v0.3.2 (see notes above for impl of from_str for ExtrinsicAddress) #[test] fn should_parse_extrinsic_address() { type BlockAddress = super::BlockAddress; @@ -312,7 +306,7 @@ mod tests { let b2 = ExtrinsicAddress::from_str("0 0"); let b3 = ExtrinsicAddress::from_str("0x0012345f"); - assert_eq!(e0, Err("Extrinsic index missing: example \"5:0\"".into())); + assert_eq!(e0, Ok(ExtrinsicAddress::Bytes(vec![0x12, 0x34]))); assert_eq!( b0, Ok(ExtrinsicAddress::Block( @@ -324,7 +318,7 @@ mod tests { b1, Ok(ExtrinsicAddress::Block(BlockAddress::Number(1234), 0)) ); - assert_eq!(b2, Ok(ExtrinsicAddress::Block(BlockAddress::Number(0), 0))); + assert_eq!(b2, Ok(ExtrinsicAddress::Bytes(vec![0, 0]))); assert_eq!(b3, Ok(ExtrinsicAddress::Bytes(vec![0, 0x12, 0x34, 0x5f]))); } } diff --git a/bin/node/Cargo.toml b/bin/node/Cargo.toml index 43128a0aa3..104b8bfcda 100644 --- a/bin/node/Cargo.toml +++ b/bin/node/Cargo.toml @@ -3,7 +3,7 @@ authors = ['Joystream contributors'] build = 'build.rs' edition = '2018' name = 'joystream-node' -version = '8.4.0' +version = '8.5.0' default-run = "joystream-node" [[bin]] @@ -15,10 +15,10 @@ crate-type = ["cdylib", "rlib"] [dependencies] # third-party dependencies -clap = { version = "3.1.18", features = ["derive"], optional = true } +clap = { version = "4.0.9", features = ["derive"], optional = true } codec = { package = "parity-scale-codec", version = "3.1.5" } serde = { version = "1.0.136", features = ["derive"] } -jsonrpsee = { version = "0.13.0", features = ["server"] } +jsonrpsee = { version = "0.16.2", features = ["server"] } futures = "0.3.21" hex-literal = "0.3.4" log = "0.4.17" @@ -26,57 +26,60 @@ rand = "0.8" hex = { version = "0.4.2" } # primitives -sp-authority-discovery = { package = 'sp-authority-discovery', git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -sp-consensus-babe = { package = 'sp-consensus-babe', git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -grandpa-primitives = { package = "sp-finality-grandpa", git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -sp-api = { package = 'sp-api', git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -sp-core = { package = 'sp-core', git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -sp-runtime = { package = 'sp-runtime', git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -sp-timestamp = { package = 'sp-timestamp', git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -sp-authorship = { package = 'sp-authorship', git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -sp-inherents = { package = 'sp-inherents', git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -sp-keyring = { package = 'sp-keyring', git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -sp-keystore = { package = 'sp-keystore', git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -sp-consensus = { package = 'sp-consensus', git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -sp-transaction-pool = { package = 'sp-transaction-pool', git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -sp-transaction-storage-proof = { package = 'sp-transaction-storage-proof', git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -sp-block-builder = { package = 'sp-block-builder', git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -sp-blockchain = { package = 'sp-blockchain', git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} +sp-authority-discovery = { package = 'sp-authority-discovery', git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +sp-consensus-babe = { package = 'sp-consensus-babe', git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +grandpa-primitives = { package = "sp-consensus-grandpa", git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +sp-api = { package = 'sp-api', git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +sp-core = { package = 'sp-core', git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +sp-runtime = { package = 'sp-runtime', git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +sp-timestamp = { package = 'sp-timestamp', git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +sp-inherents = { package = 'sp-inherents', git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +sp-keyring = { package = 'sp-keyring', git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +sp-keystore = { package = 'sp-keystore', git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +sp-consensus = { package = 'sp-consensus', git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +sp-transaction-pool = { package = 'sp-transaction-pool', git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +sp-transaction-storage-proof = { package = 'sp-transaction-storage-proof', git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +sp-block-builder = { package = 'sp-block-builder', git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +sp-blockchain = { package = 'sp-blockchain', git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +sp-io = { package = 'sp-io', git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} # client dependencies -sc-client-api = { package = 'sc-client-api', git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -sc-chain-spec = { package = 'sc-chain-spec', git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -sc-consensus = { package = 'sc-consensus', git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -sc-transaction-pool = { package = 'sc-transaction-pool', git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -sc-transaction-pool-api = { package = 'sc-transaction-pool-api', git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -sc-network = { package = 'sc-network', git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -sc-consensus-slots = { package = 'sc-consensus-slots', git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -sc-consensus-babe = { package = 'sc-consensus-babe', git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -sc-consensus-babe-rpc = { package = 'sc-consensus-babe-rpc', git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -sc-consensus-epochs = { package = 'sc-consensus-epochs', git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -sc-consensus-uncles = { package = 'sc-consensus-uncles', git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -sc-finality-grandpa = { package = "sc-finality-grandpa", git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -sc-finality-grandpa-rpc = { package = 'sc-finality-grandpa-rpc', git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -sc-rpc = { package = 'sc-rpc', git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -sc-rpc-api = { package = 'sc-rpc-api', git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -sc-basic-authorship = { package = 'sc-basic-authorship', git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -sc-service = { package = 'sc-service', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -sc-telemetry = { package = 'sc-telemetry', git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -sc-executor = { package = 'sc-executor', git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -sc-authority-discovery = { package = 'sc-authority-discovery', git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -sc-sync-state-rpc = { package = 'sc-sync-state-rpc', git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -sc-sysinfo = { package = 'sc-sysinfo', git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -pallet-transaction-payment-rpc = { package = 'pallet-transaction-payment-rpc', git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -substrate-frame-rpc-system = { package = 'substrate-frame-rpc-system', git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -substrate-state-trie-migration-rpc = { package = 'substrate-state-trie-migration-rpc', git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} +sc-client-api = { package = 'sc-client-api', git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +sc-chain-spec = { package = 'sc-chain-spec', git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +sc-consensus = { package = 'sc-consensus', git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +sc-transaction-pool = { package = 'sc-transaction-pool', git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +sc-transaction-pool-api = { package = 'sc-transaction-pool-api', git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +sc-network = { package = 'sc-network', git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +sc-network-common = { package = 'sc-network-common', git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +sc-network-sync = { package = 'sc-network-sync', git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +sc-consensus-slots = { package = 'sc-consensus-slots', git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +sc-consensus-babe = { package = 'sc-consensus-babe', git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +sc-consensus-babe-rpc = { package = 'sc-consensus-babe-rpc', git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +sc-consensus-epochs = { package = 'sc-consensus-epochs', git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +sc-consensus-grandpa = { package = "sc-consensus-grandpa", git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +sc-consensus-grandpa-rpc = { package = 'sc-consensus-grandpa-rpc', git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +sc-rpc = { package = 'sc-rpc', git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +sc-rpc-api = { package = 'sc-rpc-api', git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +sc-rpc-spec-v2 = { package = 'sc-rpc-spec-v2', git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +sc-basic-authorship = { package = 'sc-basic-authorship', git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +sc-service = { package = 'sc-service', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +sc-telemetry = { package = 'sc-telemetry', git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +sc-executor = { package = 'sc-executor', git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +sc-authority-discovery = { package = 'sc-authority-discovery', git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +sc-sync-state-rpc = { package = 'sc-sync-state-rpc', git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +sc-sysinfo = { package = 'sc-sysinfo', git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +pallet-transaction-payment-rpc = { package = 'pallet-transaction-payment-rpc', git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +substrate-frame-rpc-system = { package = 'substrate-frame-rpc-system', git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +substrate-state-trie-migration-rpc = { package = 'substrate-state-trie-migration-rpc', git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +sc-storage-monitor = { package = 'sc-storage-monitor', git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} # frame dependencies -frame-system = { package = 'frame-system',git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -frame-system-rpc-runtime-api = { package = 'frame-system-rpc-runtime-api', git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -pallet-transaction-payment = { package = 'pallet-transaction-payment', git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -pallet-im-online = { package = 'pallet-im-online', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -pallet-staking = { package = 'pallet-staking', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -pallet-transaction-storage = { package = 'pallet-transaction-storage', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} +frame-system = { package = 'frame-system',git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +frame-system-rpc-runtime-api = { package = 'frame-system-rpc-runtime-api', git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +pallet-transaction-payment = { package = 'pallet-transaction-payment', git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +pallet-im-online = { package = 'pallet-im-online', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +pallet-staking = { package = 'pallet-staking', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +pallet-transaction-storage = { package = 'pallet-transaction-storage', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} # node-specific dependencies node-runtime = { package = "joystream-node-runtime", path = "../../runtime" } @@ -85,27 +88,28 @@ node-runtime = { package = "joystream-node-runtime", path = "../../runtime" } overrides = { package = "overrides", path = "../overrides" } # CLI-specific dependencies -sc-cli = { package = 'sc-cli', optional = true, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -frame-benchmarking-cli = { package = 'frame-benchmarking-cli', optional = true, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -frame-benchmarking = { package = 'frame-benchmarking', git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} +sc-cli = { package = 'sc-cli', optional = true, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +frame-benchmarking-cli = { package = 'frame-benchmarking-cli', optional = true, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +frame-benchmarking = { package = 'frame-benchmarking', git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} serde_json = "1.0.79" node-inspect = { path = "../inspect", optional = true } +try-runtime-cli = { package = 'try-runtime-cli', optional = true, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} [target.'cfg(any(target_arch="x86_64", target_arch="aarch64"))'.dependencies] -sc-cli = { package = 'sc-cli', optional = true, features = ["wasmtime"], git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -sc-service = { package = 'sc-service', default-features = false, features = ["wasmtime"], git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -sp-trie = { package = 'sp-trie', default-features = false, features = ["memory-tracker"], git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} +sc-cli = { package = 'sc-cli', optional = true, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +sc-service = { package = 'sc-service', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +sp-trie = { package = 'sp-trie', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} [dev-dependencies] -sc-keystore = { package = 'sc-keystore', git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -sc-client-db = { package = 'sc-client-db', git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -sc-consensus = { package = 'sc-consensus', git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -sc-consensus-babe = { package = 'sc-consensus-babe', git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -sc-consensus-epochs = { package = 'sc-consensus-epochs', git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -sc-service-test = { package = 'sc-service-test', git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -sc-block-builder = { package = 'sc-block-builder', git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -sp-tracing = { package = 'sp-tracing', git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -sp-blockchain = { package = 'sp-blockchain', git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} +sc-keystore = { package = 'sc-keystore', git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +sc-client-db = { package = 'sc-client-db', git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +sc-consensus = { package = 'sc-consensus', git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +sc-consensus-babe = { package = 'sc-consensus-babe', git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +sc-consensus-epochs = { package = 'sc-consensus-epochs', git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +sc-service-test = { package = 'sc-service-test', git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +sc-block-builder = { package = 'sc-block-builder', git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +sp-tracing = { package = 'sp-tracing', git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +sp-blockchain = { package = 'sp-blockchain', git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} futures = "0.3.21" tempfile = "3.1.0" assert_cmd = "2.0.2" @@ -118,18 +122,20 @@ soketto = "0.7.1" criterion = { version = "0.3.5", features = ["async_tokio"] } tokio = { version = "1.17.0", features = ["macros", "time", "parking_lot"] } wait-timeout = "0.2" -remote-externalities = { package = 'remote-externalities', git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -pallet-timestamp = { package = 'pallet-timestamp', git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} +remote-externalities = { package = 'frame-remote-externalities', git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +pallet-timestamp = { package = 'pallet-timestamp', git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} [build-dependencies] -clap = { version = "3.1.18", optional = true } -clap_complete = { version = "3.0", optional = true } -frame-benchmarking-cli = { package = 'frame-benchmarking-cli', optional = true, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -substrate-build-script-utils = { package = 'substrate-build-script-utils', optional = true, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -substrate-frame-cli = { package = 'substrate-frame-cli', optional = true, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -sc-cli = { package = 'sc-cli', optional = true, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -pallet-balances = { package = 'pallet-balances', git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} +clap = { version = "4.0.9", optional = true } +clap_complete = { version = "4.0.2", optional = true } +frame-benchmarking-cli = { package = 'frame-benchmarking-cli', optional = true, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +substrate-build-script-utils = { package = 'substrate-build-script-utils', optional = true, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +substrate-frame-cli = { package = 'substrate-frame-cli', optional = true, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +sc-cli = { package = 'sc-cli', optional = true, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +pallet-balances = { package = 'pallet-balances', git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} node-inspect = { path = "../inspect", optional = true } +sc-storage-monitor = { package = 'sc-storage-monitor', git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +try-runtime-cli = { package = 'try-runtime-cli', optional = true, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} [features] default = ["cli"] @@ -137,11 +143,17 @@ cli = [ "sc-cli", "frame-benchmarking-cli", "substrate-frame-cli", - "sc-service/db", + "sc-service/rocksdb", "clap", "clap_complete", "substrate-build-script-utils", "node-inspect", + "try-runtime-cli", ] -runtime-benchmarks = ["node-runtime/runtime-benchmarks", "frame-benchmarking-cli"] +runtime-benchmarks = [ + "node-runtime/runtime-benchmarks", + "frame-benchmarking-cli/runtime-benchmarks" +] + +try-runtime = ["node-runtime/try-runtime", "try-runtime-cli/try-runtime"] \ No newline at end of file diff --git a/bin/node/README.md b/bin/node/README.md index fe62b6c385..2e4f2f4c25 100644 --- a/bin/node/README.md +++ b/bin/node/README.md @@ -24,7 +24,7 @@ cd joystream/ Compile the node and runtime: ```bash -WASM_BUILD_TOOLCHAIN=nightly-2022-05-11 cargo +nightly-2022-05-11 build --release +WASM_BUILD_TOOLCHAIN=nightly-2022-11-15 cargo +nightly-2022-11-15 build --release ``` This produces the binary in `./target/release/joystream-node` @@ -56,7 +56,7 @@ Here is the JSON "chain spec" file for the Joystream mainnet [joy-mainnet.json]( Running unit tests: ```bash -cargo +nightly-2022-05-11 test --release --all +cargo +nightly-2022-11-15 test --release --all ``` Running full suite of checks, tests, formatting and linting: @@ -79,7 +79,7 @@ This will install the executable `joystream-node` to your `~/.cargo/bin` folder, ```bash # From the project root directory -WASM_BUILD_TOOLCHAIN=nightly-2022-05-11 cargo +nightly-2022-05-11 install joystream-node --path bin/node/ --locked +WASM_BUILD_TOOLCHAIN=nightly-2022-11-15 cargo +nightly-2022-11-15 install joystream-node --path bin/node/ --locked ``` Now you can run and connect to the network: diff --git a/bin/node/build.rs b/bin/node/build.rs index 13cf9d12e2..b7ed033162 100644 --- a/bin/node/build.rs +++ b/bin/node/build.rs @@ -25,7 +25,7 @@ fn main() { mod cli { include!("src/cli.rs"); - use clap::{ArgEnum, CommandFactory}; + use clap::{CommandFactory, ValueEnum}; use clap_complete::{generate_to, Shell}; use std::{env, fs, path::Path}; use substrate_build_script_utils::{generate_cargo_keys, rerun_if_git_head_changed}; diff --git a/bin/node/src/benchmarking.rs b/bin/node/src/benchmarking.rs new file mode 100644 index 0000000000..6fff64c6a3 --- /dev/null +++ b/bin/node/src/benchmarking.rs @@ -0,0 +1,126 @@ +// This file is part of Substrate. + +// Copyright (C) Parity Technologies (UK) Ltd. +// SPDX-License-Identifier: GPL-3.0-or-later WITH Classpath-exception-2.0 + +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +//! Setup code for [`super::command`] which would otherwise bloat that module. +//! +//! Should only be used for benchmarking as it may break in other contexts. + +use crate::service::{create_extrinsic, FullClient}; + +use node_runtime::{AccountId, Balance}; +use node_runtime::{BalancesCall, SystemCall}; +use sc_cli::Result; +use sp_inherents::{InherentData, InherentDataProvider}; +use sp_keyring::Sr25519Keyring; +use sp_runtime::OpaqueExtrinsic; + +use std::{sync::Arc, time::Duration}; + +/// Generates `System::Remark` extrinsics for the benchmarks. +/// +/// Note: Should only be used for benchmarking. +pub struct RemarkBuilder { + client: Arc, +} + +impl RemarkBuilder { + /// Creates a new [`Self`] from the given client. + pub fn new(client: Arc) -> Self { + Self { client } + } +} + +impl frame_benchmarking_cli::ExtrinsicBuilder for RemarkBuilder { + fn pallet(&self) -> &str { + "system" + } + + fn extrinsic(&self) -> &str { + "remark" + } + + fn build(&self, nonce: u32) -> std::result::Result { + let acc = Sr25519Keyring::Bob.pair(); + let extrinsic: OpaqueExtrinsic = create_extrinsic( + self.client.as_ref(), + acc, + SystemCall::remark { remark: vec![] }, + Some(nonce), + ) + .into(); + + Ok(extrinsic) + } +} + +/// Generates `Balances::TransferKeepAlive` extrinsics for the benchmarks. +/// +/// Note: Should only be used for benchmarking. +pub struct TransferKeepAliveBuilder { + client: Arc, + dest: AccountId, + value: Balance, +} + +impl TransferKeepAliveBuilder { + /// Creates a new [`Self`] from the given client. + pub fn new(client: Arc, dest: AccountId, value: Balance) -> Self { + Self { + client, + dest, + value, + } + } +} + +impl frame_benchmarking_cli::ExtrinsicBuilder for TransferKeepAliveBuilder { + fn pallet(&self) -> &str { + "balances" + } + + fn extrinsic(&self) -> &str { + "transfer_keep_alive" + } + + fn build(&self, nonce: u32) -> std::result::Result { + let acc = Sr25519Keyring::Bob.pair(); + let extrinsic: OpaqueExtrinsic = create_extrinsic( + self.client.as_ref(), + acc, + BalancesCall::transfer_keep_alive { + dest: self.dest.clone(), + value: self.value, + }, + Some(nonce), + ) + .into(); + + Ok(extrinsic) + } +} + +/// Generates inherent data for the `benchmark overhead` command. +pub fn inherent_benchmark_data() -> Result { + let mut inherent_data = InherentData::new(); + let d = Duration::from_millis(0); + let timestamp = sp_timestamp::InherentDataProvider::new(d.into()); + + futures::executor::block_on(timestamp.provide_inherent_data(&mut inherent_data)) + .map_err(|e| format!("creating inherent data: {:?}", e))?; + Ok(inherent_data) +} diff --git a/bin/node/src/chain_spec/content_config.rs b/bin/node/src/chain_spec/content_config.rs index afc2ead2f6..dbdcc7949c 100644 --- a/bin/node/src/chain_spec/content_config.rs +++ b/bin/node/src/chain_spec/content_config.rs @@ -1,7 +1,6 @@ use node_runtime::{ - constants::{currency, MINUTES}, - days, dollars, hours, ChannelStateBloatBondValue, ContentConfig, ExpectedBlockTime, - VideoStateBloatBondValue, + constants::currency, days, dollars, hours, minutes, ChannelStateBloatBondValue, ContentConfig, + ExpectedBlockTime, VideoStateBloatBondValue, }; use sp_runtime::Perbill; @@ -43,7 +42,7 @@ pub fn testing_config() -> ContentConfig { max_cashout_allowed: dollars!(100_000), min_cashout_allowed: dollars!(10), channel_cashouts_enabled: true, - min_auction_duration: MINUTES, + min_auction_duration: minutes!(1), max_auction_duration: days!(30), min_auction_extension_period: 0, max_auction_extension_period: days!(30), diff --git a/bin/node/src/chain_spec/mod.rs b/bin/node/src/chain_spec/mod.rs index 58051be986..20c4b4484e 100644 --- a/bin/node/src/chain_spec/mod.rs +++ b/bin/node/src/chain_spec/mod.rs @@ -47,7 +47,7 @@ pub use sp_consensus_babe::AuthorityId as BabeId; use sp_core::{sr25519, Pair, Public}; use sp_runtime::{ traits::{IdentifyAccount, Verify}, - Perbill, + FixedU128, Perbill, }; pub use node_runtime::constants::JOY_ADDRESS_PREFIX; @@ -311,7 +311,6 @@ pub fn testnet_genesis( stakers, min_nominator_bond: GENESIS_MIN_NOMINATOR_BOND, min_validator_bond: GENESIS_MIN_VALIDATOR_BOND, - history_depth: 120, max_validator_count: Some(400), max_nominator_count: Some(20_000), ..Default::default() @@ -325,7 +324,9 @@ pub fn testnet_genesis( grandpa: GrandpaConfig { authorities: vec![], }, - transaction_payment: TransactionPaymentConfig {}, + transaction_payment: TransactionPaymentConfig { + multiplier: FixedU128::from(1), + }, vesting: VestingConfig { vesting: vesting_accounts, }, @@ -498,6 +499,7 @@ pub(crate) mod tests { task_manager, client, network, + sync, transaction_pool, .. } = new_full_base(config, false, |_, _| ())?; @@ -505,6 +507,7 @@ pub(crate) mod tests { task_manager, client, network, + sync, transaction_pool, )) }); diff --git a/bin/node/src/cli.rs b/bin/node/src/cli.rs index 90df63fd68..ff05e9a13d 100644 --- a/bin/node/src/cli.rs +++ b/bin/node/src/cli.rs @@ -20,7 +20,7 @@ #[derive(Debug, clap::Parser)] pub struct Cli { /// Possible subcommand with parameters. - #[clap(subcommand)] + #[command(subcommand)] pub subcommand: Option, #[allow(missing_docs)] @@ -36,10 +36,15 @@ pub struct Cli { /// telemetry, if telemetry is enabled. #[clap(long)] pub no_hardware_benchmarks: bool, + + #[allow(missing_docs)] + #[clap(flatten)] + pub storage_monitor: sc_storage_monitor::StorageMonitorParams, } /// Possible subcommands of the main binary. #[derive(Debug, clap::Subcommand)] +#[allow(clippy::large_enum_variant)] pub enum Subcommand { /// The custom inspect subcommmand for decoding blocks and extrinsics. #[clap( @@ -49,11 +54,19 @@ pub enum Subcommand { Inspect(node_inspect::cli::InspectCmd), /// Sub-commands concerned with benchmarking. /// The pallet benchmarking moved to the `pallet` sub-command. - #[clap(subcommand)] + #[command(subcommand)] Benchmark(frame_benchmarking_cli::BenchmarkCmd), + /// Try some command against runtime state. + #[cfg(feature = "try-runtime")] + TryRuntime(try_runtime_cli::TryRuntimeCmd), + + /// Try some command against runtime state. Note: `try-runtime` feature must be enabled. + #[cfg(not(feature = "try-runtime"))] + TryRuntime, + /// Key management cli utilities - #[clap(subcommand)] + #[command(subcommand)] Key(sc_cli::KeySubcommand), /// Verify a signature for a message, provided on STDIN, with a given (public or secret) key. diff --git a/bin/node/src/command.rs b/bin/node/src/command.rs index 22e0bd7961..179f7d8238 100644 --- a/bin/node/src/command.rs +++ b/bin/node/src/command.rs @@ -16,7 +16,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -use super::command_helper::{inherent_benchmark_data, BenchmarkExtrinsicBuilder}; +use super::benchmarking::{inherent_benchmark_data, RemarkBuilder, TransferKeepAliveBuilder}; use crate::node_executor::ExecutorDispatch; use crate::{ chain_spec, @@ -27,14 +27,20 @@ use crate::{ }; use frame_benchmarking_cli::*; use node_runtime::Block; -use node_runtime::RuntimeApi; +use node_runtime::{ExistentialDeposit, RuntimeApi}; use sc_cli::{ChainSpec, Result, RuntimeVersion, SubstrateCli}; -use sc_finality_grandpa as grandpa; +use sc_consensus_grandpa as grandpa; use sc_service::PartialComponents; use sp_core::crypto::Ss58AddressFormat; +use sp_keyring::Sr25519Keyring; use std::sync::Arc; +#[cfg(feature = "try-runtime")] +use { + node_runtime::constants::SLOT_DURATION, try_runtime_cli::block_building_info::substrate_info, +}; + impl SubstrateCli for Cli { fn impl_name() -> String { "Joystream Node".into() @@ -95,8 +101,7 @@ pub fn run() -> Result<()> { None => { let runner = cli.create_runner(&cli.run)?; runner.run_node_until_exit(|config| async move { - service::new_full(config, cli.no_hardware_benchmarks) - .map_err(sc_cli::Error::Service) + service::new_full(config, cli).map_err(sc_cli::Error::Service) }) } Some(Subcommand::Inspect(cmd)) => { @@ -123,27 +128,55 @@ pub fn run() -> Result<()> { cmd.run::(config) } BenchmarkCmd::Block(cmd) => { - let PartialComponents { client, .. } = new_partial(&config)?; - cmd.run(client) + // ensure that we keep the task manager alive + let partial = new_partial(&config)?; + cmd.run(partial.client) } + #[cfg(not(feature = "runtime-benchmarks"))] + BenchmarkCmd::Storage(_) => Err( + "Storage benchmarking can be enabled with `--features runtime-benchmarks`." + .into(), + ), + #[cfg(feature = "runtime-benchmarks")] BenchmarkCmd::Storage(cmd) => { - let PartialComponents { - client, backend, .. - } = new_partial(&config)?; - let db = backend.expose_db(); - let storage = backend.expose_storage(); + // ensure that we keep the task manager alive + let partial = new_partial(&config)?; + let db = partial.backend.expose_db(); + let storage = partial.backend.expose_storage(); - cmd.run(config, client, db, storage) + cmd.run(config, partial.client, db, storage) } BenchmarkCmd::Overhead(cmd) => { - let PartialComponents { client, .. } = new_partial(&config)?; - let ext_builder = BenchmarkExtrinsicBuilder::new(client.clone()); + // ensure that we keep the task manager alive + let partial = new_partial(&config)?; + let ext_builder = RemarkBuilder::new(partial.client.clone()); cmd.run( config, - client, + partial.client, + inherent_benchmark_data()?, + Vec::new(), + &ext_builder, + ) + } + BenchmarkCmd::Extrinsic(cmd) => { + // ensure that we keep the task manager alive + let partial = service::new_partial(&config)?; + // Register the *Remark* and *TKA* builders. + let ext_factory = ExtrinsicFactory(vec![ + Box::new(RemarkBuilder::new(partial.client.clone())), + Box::new(TransferKeepAliveBuilder::new( + partial.client.clone(), + Sr25519Keyring::Alice.to_account_id(), + ExistentialDeposit::get(), + )), + ]); + + cmd.run( + partial.client, inherent_benchmark_data()?, - Arc::new(ext_builder), + Vec::new(), + &ext_factory, ) } BenchmarkCmd::Machine(cmd) => { @@ -227,6 +260,33 @@ pub fn run() -> Result<()> { Ok((cmd.run(client, backend, Some(aux_revert)), task_manager)) }) } + #[cfg(feature = "try-runtime")] + Some(Subcommand::TryRuntime(cmd)) => { + use sc_executor::{sp_wasm_interface::ExtendedHostFunctions, NativeExecutionDispatch}; + let runner = cli.create_runner(cmd)?; + runner.async_run(|config| { + // we don't need any of the components of new_partial, just a runtime, or a task + // manager to do `async_run`. + let registry = config.prometheus_config.as_ref().map(|cfg| &cfg.registry); + let task_manager = + sc_service::TaskManager::new(config.tokio_handle.clone(), registry) + .map_err(|e| sc_cli::Error::Service(sc_service::Error::Prometheus(e)))?; + + let info_provider = substrate_info(SLOT_DURATION); + + Ok(( + cmd.run::::ExtendHostFunctions, + >, _>(Some(info_provider)), + task_manager, + )) + }) + } + #[cfg(not(feature = "try-runtime"))] + Some(Subcommand::TryRuntime) => Err("TryRuntime wasn't enabled when building the node. \ + You can enable it with `--features try-runtime`." + .into()), Some(Subcommand::ChainInfo(cmd)) => { let runner = cli.create_runner(cmd)?; runner.sync_run(|config| cmd.run::(&config)) diff --git a/bin/node/src/command_helper.rs b/bin/node/src/command_helper.rs deleted file mode 100644 index 0a73321849..0000000000 --- a/bin/node/src/command_helper.rs +++ /dev/null @@ -1,69 +0,0 @@ -// This file is part of Substrate. - -// Copyright (C) 2022 Parity Technologies (UK) Ltd. -// SPDX-License-Identifier: GPL-3.0-or-later WITH Classpath-exception-2.0 - -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . - -//! Contains code to setup the command invocations in [`super::command`] which would -//! otherwise bloat that module. - -use crate::service::{create_extrinsic, FullClient}; - -use node_runtime::SystemCall; -use sc_cli::Result; -use sp_inherents::{InherentData, InherentDataProvider}; -use sp_keyring::Sr25519Keyring; -use sp_runtime::OpaqueExtrinsic; - -use std::{sync::Arc, time::Duration}; - -/// Generates extrinsics for the `benchmark overhead` command. -pub struct BenchmarkExtrinsicBuilder { - client: Arc, -} - -impl BenchmarkExtrinsicBuilder { - /// Creates a new [`Self`] from the given client. - pub fn new(client: Arc) -> Self { - Self { client } - } -} - -impl frame_benchmarking_cli::ExtrinsicBuilder for BenchmarkExtrinsicBuilder { - fn remark(&self, nonce: u32) -> std::result::Result { - let acc = Sr25519Keyring::Bob.pair(); - let extrinsic: OpaqueExtrinsic = create_extrinsic( - self.client.as_ref(), - acc, - SystemCall::remark { remark: vec![] }, - Some(nonce), - ) - .into(); - - Ok(extrinsic) - } -} - -/// Generates inherent data for the `benchmark overhead` command. -pub fn inherent_benchmark_data() -> Result { - let mut inherent_data = InherentData::new(); - let d = Duration::from_millis(0); - let timestamp = sp_timestamp::InherentDataProvider::new(d.into()); - - timestamp - .provide_inherent_data(&mut inherent_data) - .map_err(|e| format!("creating inherent data: {:?}", e))?; - Ok(inherent_data) -} diff --git a/bin/node/src/lib.rs b/bin/node/src/lib.rs index bd3ee119c2..3732c1465e 100644 --- a/bin/node/src/lib.rs +++ b/bin/node/src/lib.rs @@ -3,6 +3,6 @@ mod cli; pub mod command; #[macro_use] mod service; -mod command_helper; +mod benchmarking; mod node_executor; mod node_rpc; diff --git a/bin/node/src/node_executor.rs b/bin/node/src/node_executor.rs index 8dc759c172..f5014a1d21 100644 --- a/bin/node/src/node_executor.rs +++ b/bin/node/src/node_executor.rs @@ -25,7 +25,7 @@ pub use sc_executor::NativeElseWasmExecutor; pub struct ExecutorDispatch; impl sc_executor::NativeExecutionDispatch for ExecutorDispatch { - type ExtendHostFunctions = frame_benchmarking::benchmarking::HostFunctions; + type ExtendHostFunctions = frame_benchmarking::v1::benchmarking::HostFunctions; fn dispatch(method: &str, data: &[u8]) -> Option> { node_runtime::api::dispatch(method, data) diff --git a/bin/node/src/node_rpc.rs b/bin/node/src/node_rpc.rs index 32427bbf51..f68a20d416 100644 --- a/bin/node/src/node_rpc.rs +++ b/bin/node/src/node_rpc.rs @@ -1,6 +1,6 @@ // This file is part of Substrate. -// Copyright (C) 2019-2022 Parity Technologies (UK) Ltd. +// Copyright (C) Parity Technologies (UK) Ltd. // SPDX-License-Identifier: Apache-2.0 // Licensed under the Apache License, Version 2.0 (the "License"); @@ -35,9 +35,9 @@ use std::sync::Arc; use jsonrpsee::RpcModule; use node_runtime::{opaque::Block, AccountId, Balance, BlockNumber, Hash, Index}; use sc_client_api::AuxStore; -use sc_consensus_babe::{Config, Epoch}; +use sc_consensus_babe::{BabeConfiguration, Epoch}; use sc_consensus_epochs::SharedEpochChanges; -use sc_finality_grandpa::{ +use sc_consensus_grandpa::{ FinalityProofProvider, GrandpaJustificationStream, SharedAuthoritySet, SharedVoterState, }; use sc_rpc::SubscriptionTaskExecutor; @@ -53,7 +53,7 @@ use sp_keystore::SyncCryptoStorePtr; /// Extra dependencies for BABE. pub struct BabeDeps { /// BABE protocol config. - pub babe_config: Config, + pub babe_config: BabeConfiguration, /// BABE pending epoch changes. pub shared_epoch_changes: SharedEpochChanges, /// The keystore that manages the keys of the node. @@ -117,8 +117,9 @@ where { use pallet_transaction_payment_rpc::{TransactionPayment, TransactionPaymentApiServer}; use sc_consensus_babe_rpc::{Babe, BabeApiServer}; - use sc_finality_grandpa_rpc::{Grandpa, GrandpaApiServer}; + use sc_consensus_grandpa_rpc::{Grandpa, GrandpaApiServer}; use sc_rpc::dev::{Dev, DevApiServer}; + use sc_rpc_spec_v2::chain_spec::{ChainSpec, ChainSpecApiServer}; use sc_sync_state_rpc::{SyncState, SyncStateApiServer}; use substrate_frame_rpc_system::{System, SystemApiServer}; use substrate_state_trie_migration_rpc::{StateMigration, StateMigrationApiServer}; @@ -147,6 +148,15 @@ where finality_provider, } = grandpa; + let chain_name = chain_spec.name().to_string(); + let genesis_hash = client + .block_hash(0) + .ok() + .flatten() + .expect("Genesis block exists; qed"); + let properties = chain_spec.properties(); + io.merge(ChainSpec::new(chain_name, genesis_hash, properties).into_rpc())?; + io.merge(System::new(client.clone(), pool, deny_unsafe).into_rpc())?; // Making synchronous calls in light client freezes the browser currently, // more context: https://github.com/paritytech/substrate/pull/3480 diff --git a/bin/node/src/service.rs b/bin/node/src/service.rs index 059af570a9..d3c9d1f6c1 100644 --- a/bin/node/src/service.rs +++ b/bin/node/src/service.rs @@ -1,6 +1,6 @@ // This file is part of Substrate. -// Copyright (C) 2018-2022 Parity Technologies (UK) Ltd. +// Copyright (C) Parity Technologies (UK) Ltd. // SPDX-License-Identifier: GPL-3.0-or-later WITH Classpath-exception-2.0 // This program is free software: you can redistribute it and/or modify @@ -16,20 +16,26 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . +#![warn(unused_extern_crates)] + //! Service implementation. Specialized wrapper over substrate service. +use crate::cli::Cli; use crate::node_executor::ExecutorDispatch; use codec::Encode; +use frame_benchmarking_cli::SUBSTRATE_REFERENCE_HARDWARE; use frame_system_rpc_runtime_api::AccountNonceApi; use futures::prelude::*; use node_runtime::opaque::Block; use node_runtime::RuntimeApi; use overrides::DEFAULT_HEAP_PAGES; -use sc_client_api::{BlockBackend, ExecutorProvider}; +use sc_client_api::BlockBackend; use sc_consensus_babe::{self, SlotProportion}; +use sc_consensus_grandpa as grandpa; use sc_executor::NativeElseWasmExecutor; -use sc_finality_grandpa as grandpa; -use sc_network::{Event, NetworkService}; +use sc_network::{event::Event, NetworkEventStream, NetworkService}; +use sc_network_common::sync::warp::WarpSyncParams; +use sc_network_sync::SyncingService; use sc_service::{config::Configuration, error::Error as ServiceError, RpcHandlers, TaskManager}; use sc_telemetry::{Telemetry, TelemetryWorker}; use sp_api::ProvideRuntimeApi; @@ -55,7 +61,7 @@ pub fn fetch_nonce(client: &FullClient, account: sp_core::sr25519::Pair) -> u32 let best_hash = client.chain_info().best_hash; client .runtime_api() - .account_nonce(&generic::BlockId::Hash(best_hash), account.public().into()) + .account_nonce(best_hash, account.public().into()) .expect("Fetching account nonce works; qed") } @@ -68,7 +74,7 @@ pub fn fetch_nonce(client: &FullClient, account: sp_core::sr25519::Pair) -> u32 pub fn create_extrinsic( client: &FullClient, sender: sp_core::sr25519::Pair, - function: impl Into, + function: impl Into, nonce: Option, ) -> node_runtime::UncheckedExtrinsic { let function = function.into(); @@ -124,8 +130,8 @@ pub fn create_extrinsic( ) } -#[allow(clippy::type_complexity)] /// Creates a new partial node. +#[allow(clippy::type_complexity)] pub fn new_partial( config: &Configuration, ) -> Result< @@ -196,6 +202,7 @@ pub fn new_partial( let (grandpa_block_import, grandpa_link) = grandpa::block_import( client.clone(), + #[allow(clippy::redundant_clone)] &(client.clone() as Arc<_>), select_chain.clone(), telemetry.as_ref().map(|x| x.handle()), @@ -203,7 +210,7 @@ pub fn new_partial( let justification_import = grandpa_block_import.clone(); let (block_import, babe_link) = sc_consensus_babe::block_import( - sc_consensus_babe::Config::get(&*client)?, + sc_consensus_babe::configuration(&*client)?, grandpa_block_import, client.clone(), )?; @@ -224,14 +231,10 @@ pub fn new_partial( slot_duration, ); - let uncles = - sp_authorship::InherentDataProvider::<::Header>::check_inherents(); - - Ok((timestamp, slot, uncles)) + Ok((slot, timestamp)) }, &task_manager.spawn_essential_handle(), config.prometheus_registry(), - sp_consensus::CanAuthorWithNativeVersion::new(client.executor().clone()), telemetry.as_ref().map(|x| x.handle()), )?; @@ -307,6 +310,8 @@ pub struct NewFullBase { pub client: Arc, /// The networking service of the node. pub network: Arc::Hash>>, + /// The syncing service of the node. + pub sync: Arc>, /// The transaction pool of the node. pub transaction_pool: Arc, /// The rpc handlers of the node. @@ -322,14 +327,12 @@ pub fn new_full_base( &sc_consensus_babe::BabeLink, ), ) -> Result { - let hwbench = if !disable_hardware_benchmarks { - config.database.path().map(|database_path| { - let _ = std::fs::create_dir_all(&database_path); + let hwbench = (!disable_hardware_benchmarks) + .then_some(config.database.path().map(|database_path| { + let _ = std::fs::create_dir_all(database_path); sc_sysinfo::gather_hwbench(Some(database_path)) - }) - } else { - None - }; + })) + .flatten(); let sc_service::PartialComponents { client, @@ -365,7 +368,7 @@ pub fn new_full_base( Vec::default(), )); - let (network, system_rpc_tx, network_starter) = + let (network, system_rpc_tx, tx_handler_controller, network_starter, sync_service) = sc_service::build_network(sc_service::BuildNetworkParams { config: &config, client: client.clone(), @@ -373,7 +376,7 @@ pub fn new_full_base( spawn_handle: task_manager.spawn_handle(), import_queue, block_announce_validator_builder: None, - warp_sync: Some(warp_sync), + warp_sync_params: Some(WarpSyncParams::WithProvider(warp_sync)), })?; if config.offchain_worker.enabled { @@ -403,11 +406,18 @@ pub fn new_full_base( transaction_pool: transaction_pool.clone(), task_manager: &mut task_manager, system_rpc_tx, + tx_handler_controller, + sync_service: sync_service.clone(), telemetry: telemetry.as_mut(), })?; if let Some(hwbench) = hwbench { sc_sysinfo::print_hwbench(&hwbench); + if !SUBSTRATE_REFERENCE_HARDWARE.check_hardware(&hwbench) && role.is_authority() { + log::warn!( + "⚠️ The hardware does not meet the minimal requirements for role 'Authority'." + ); + } if let Some(ref mut telemetry) = telemetry { let telemetry_handle = telemetry.handle(); @@ -432,9 +442,6 @@ pub fn new_full_base( telemetry.as_ref().map(|x| x.handle()), ); - let can_author_with = - sp_consensus::CanAuthorWithNativeVersion::new(client.executor().clone()); - let client_clone = client.clone(); let slot_duration = babe_link.config().slot_duration(); let babe_config = sc_consensus_babe::BabeParams { @@ -443,16 +450,11 @@ pub fn new_full_base( select_chain, env: proposer, block_import, - sync_oracle: network.clone(), - justification_sync_link: network.clone(), + sync_oracle: sync_service.clone(), + justification_sync_link: sync_service.clone(), create_inherent_data_providers: move |parent, ()| { let client_clone = client_clone.clone(); async move { - let uncles = sc_consensus_uncles::create_uncles_inherent_data_provider( - &*client_clone, - parent, - )?; - let timestamp = sp_timestamp::InherentDataProvider::from_system_time(); let slot = @@ -461,21 +463,18 @@ pub fn new_full_base( slot_duration, ); - // We Have not included transaction_storage pallet in runtime - // are they related? let storage_proof = sp_transaction_storage_proof::registration::new_data_provider( &*client_clone, &parent, )?; - Ok((timestamp, slot, uncles, storage_proof)) + Ok((slot, timestamp, storage_proof)) } }, force_authoring, backoff_authoring_blocks, babe_link, - can_author_with, block_proposal_slot_portion: SlotProportion::new(0.5), max_block_proposal_slot_portion: None, telemetry: telemetry.as_ref().map(|x| x.handle()), @@ -553,6 +552,7 @@ pub fn new_full_base( config, link: grandpa_link, network: network.clone(), + sync: Arc::new(sync_service.clone()), telemetry: telemetry.as_ref().map(|x| x.handle()), voting_rule: grandpa::VotingRulesBuilder::default().build(), prometheus_registry, @@ -573,18 +573,26 @@ pub fn new_full_base( task_manager, client, network, + sync: sync_service, transaction_pool, rpc_handlers, }) } /// Builds a new service for a full client. -pub fn new_full( - config: Configuration, - disable_hardware_benchmarks: bool, -) -> Result { - new_full_base(config, disable_hardware_benchmarks, |_, _| ()) - .map(|NewFullBase { task_manager, .. }| task_manager) +pub fn new_full(config: Configuration, cli: Cli) -> Result { + let database_source = config.database.clone(); + let task_manager = new_full_base(config, cli.no_hardware_benchmarks, |_, _| ()) + .map(|NewFullBase { task_manager, .. }| task_manager)?; + + sc_storage_monitor::StorageMonitorService::try_spawn( + cli.storage_monitor, + database_source, + &task_manager.spawn_essential_handle(), + ) + .map_err(|e| ServiceError::Application(e.into()))?; + + Ok(task_manager) } #[cfg(test)] @@ -593,7 +601,7 @@ mod tests { use codec::Encode; use node_runtime::{ constants::{currency::CENTS, SLOT_DURATION}, - Address, BalancesCall, Call, UncheckedExtrinsic, + Address, BalancesCall, RuntimeCall, UncheckedExtrinsic, }; use node_runtime::{opaque::Block, DigestItem, Signature}; use sc_client_api::BlockBackend; @@ -609,14 +617,14 @@ mod tests { use sp_keyring::AccountKeyring; use sp_keystore::{SyncCryptoStore, SyncCryptoStorePtr}; use sp_runtime::{ - generic::{BlockId, Digest, Era, SignedPayload}, + generic::{Digest, Era, SignedPayload}, key_types::BABE, traits::{Block as BlockT, Header as HeaderT, IdentifyAccount, Verify}, RuntimeAppPublic, }; - + use sp_timestamp; use std::convert::TryInto; - use std::{borrow::Cow, sync::Arc}; + use std::sync::Arc; type AccountPublic = ::Signer; @@ -653,6 +661,7 @@ mod tests { task_manager, client, network, + sync, transaction_pool, .. } = new_full_base( @@ -668,14 +677,14 @@ mod tests { task_manager, client, network, + sync, transaction_pool, ); Ok((node, setup_handles.unwrap())) }, |service, &mut (ref mut block_import, ref babe_link)| { - let parent_id = BlockId::number(service.client().chain_info().best_number); - let parent_header = service.client().header(&parent_id).unwrap().unwrap(); - let parent_hash = parent_header.hash(); + let parent_hash = service.client().chain_info().best_hash; + let parent_header = service.client().header(parent_hash).unwrap().unwrap(); let parent_number = *parent_header.number(); futures::executor::block_on(service.transaction_pool().maintain( @@ -714,10 +723,7 @@ mod tests { .epoch_changes() .shared_data() .epoch_data(&epoch_descriptor, |slot| { - sc_consensus_babe::Epoch::genesis( - babe_link.config().genesis_config(), - slot, - ) + sc_consensus_babe::Epoch::genesis(babe_link.config(), slot) }) .unwrap(); @@ -731,14 +737,16 @@ mod tests { slot += 1; }; - let inherent_data = ( - sp_timestamp::InherentDataProvider::new( - std::time::Duration::from_millis(SLOT_DURATION * slot).into(), - ), - sp_consensus_babe::inherents::InherentDataProvider::new(slot.into()), + let inherent_data = futures::executor::block_on( + ( + sp_timestamp::InherentDataProvider::new( + std::time::Duration::from_millis(SLOT_DURATION * slot).into(), + ), + sp_consensus_babe::inherents::InherentDataProvider::new(slot.into()), + ) + .create_inherent_data(), ) - .create_inherent_data() - .expect("Creates inherent data"); + .expect("Creates inherent data"); digest.push(::babe_pre_digest( babe_pre_digest, @@ -780,29 +788,30 @@ mod tests { let mut params = BlockImportParams::new(BlockOrigin::File, new_header); params.post_digests.push(item); params.body = Some(new_body); - params.intermediates.insert( - Cow::from(INTERMEDIATE_KEY), - Box::new(BabeIntermediate:: { epoch_descriptor }) as Box<_>, + params.insert_intermediate( + INTERMEDIATE_KEY, + BabeIntermediate:: { epoch_descriptor }, ); params.fork_choice = Some(ForkChoiceStrategy::LongestChain); - futures::executor::block_on(block_import.import_block(params, Default::default())) + futures::executor::block_on(block_import.import_block(params)) .expect("error importing test block"); }, |service, _| { + let tip = 0; let amount = 5 * CENTS; let to: Address = AccountPublic::from(bob.public()).into_account().into(); let from: Address = AccountPublic::from(charlie.public()).into_account().into(); let genesis_hash = service.client().block_hash(0).unwrap().unwrap(); - let best_block_id = BlockId::number(service.client().chain_info().best_number); + let best_hash = service.client().chain_info().best_hash; let (spec_version, transaction_version) = { - let version = service.client().runtime_version_at(&best_block_id).unwrap(); + let version = service.client().runtime_version_at(best_hash).unwrap(); (version.spec_version, version.transaction_version) }; let signer = charlie.clone(); - let function = Call::Balances(BalancesCall::transfer { - dest: to, + let function = RuntimeCall::Balances(BalancesCall::transfer { + dest: to.into(), value: amount, }); @@ -813,7 +822,9 @@ mod tests { let check_era = frame_system::CheckEra::from(Era::Immortal); let check_nonce = frame_system::CheckNonce::from(index); let check_weight = frame_system::CheckWeight::new(); - let tx_payment = pallet_transaction_payment::ChargeTransactionPayment::from(0); + let tx_payment = pallet_transaction_payment::ChargeTransactionPayment::< + node_runtime::Runtime, + >::from(tip); let extra = ( check_non_zero_sender, check_spec_version, @@ -841,7 +852,8 @@ mod tests { let signature = raw_payload.using_encoded(|payload| signer.sign(payload)); let (function, extra, _) = raw_payload.deconstruct(); index += 1; - UncheckedExtrinsic::new_signed(function, from, signature.into(), extra).into() + UncheckedExtrinsic::new_signed(function, from.into(), signature.into(), extra) + .into() }, ); } @@ -858,6 +870,7 @@ mod tests { task_manager, client, network, + sync, transaction_pool, .. } = new_full_base(config, false, |_, _| ())?; @@ -865,6 +878,7 @@ mod tests { task_manager, client, network, + sync, transaction_pool, )) }, diff --git a/bin/utils/call-sizes/Cargo.toml b/bin/utils/call-sizes/Cargo.toml index 0eeb30c8eb..d0940c807f 100644 --- a/bin/utils/call-sizes/Cargo.toml +++ b/bin/utils/call-sizes/Cargo.toml @@ -23,5 +23,5 @@ pallet-constitution = { package = 'pallet-constitution', default-features = fals staking-handler = { package = 'pallet-staking-handler', default-features = false, path = '../../../runtime-modules/staking-handler'} bounty = { package = 'pallet-bounty', default-features = false, path = '../../../runtime-modules/bounty'} content = { package = 'pallet-content', default-features = false, path = '../../../runtime-modules/content'} -joystream-utility = { package = 'pallet-utility', default-features = false, path = '../../../runtime-modules/utility'} +joystream-utility = { package = 'pallet-joystream-utility', default-features = false, path = '../../../runtime-modules/utility'} project-token = { package = 'pallet-project-token', default-features = false, path = '../../../runtime-modules/project-token'} diff --git a/bin/utils/call-sizes/src/main.rs b/bin/utils/call-sizes/src/main.rs index f2a244637b..2132dfa404 100644 --- a/bin/utils/call-sizes/src/main.rs +++ b/bin/utils/call-sizes/src/main.rs @@ -65,7 +65,7 @@ fn main() -> Result<(), String> { core::mem::size_of::>() ); - println!("----\nRuntime: {}", core::mem::size_of::()); + println!("----\nRuntime: {}", core::mem::size_of::()); Ok(()) } diff --git a/bin/utils/chain-spec-builder/Cargo.toml b/bin/utils/chain-spec-builder/Cargo.toml index 12358ddfeb..af029abcd4 100644 --- a/bin/utils/chain-spec-builder/Cargo.toml +++ b/bin/utils/chain-spec-builder/Cargo.toml @@ -3,7 +3,7 @@ authors = ['Joystream contributors'] build = 'build.rs' edition = '2018' name = 'chain-spec-builder' -version = '8.3.0' +version = '8.4.0' [dependencies] enum-utils = "0.1.2" @@ -11,9 +11,9 @@ async-std = {version = "1.9.0", features = ["attributes"]} futures-util = "0.3.15" clap = { version = "3.1.18", features = ["derive"] } rand = "0.8" -sc-keystore = { git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522' } -sc-telemetry = { git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522' } -sc-chain-spec = { git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522' } -sp-core = { git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522' } -sp-keystore = { git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522' } +sc-keystore = { git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9' } +sc-telemetry = { git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9' } +sc-chain-spec = { git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9' } +sp-core = { git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9' } +sp-keystore = { git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9' } joystream-node = { path = "../../node" } diff --git a/bin/utils/chain-spec-builder/src/main.rs b/bin/utils/chain-spec-builder/src/main.rs index e8c3ae4f8e..c2bf429ce0 100644 --- a/bin/utils/chain-spec-builder/src/main.rs +++ b/bin/utils/chain-spec-builder/src/main.rs @@ -43,10 +43,16 @@ const TELEMETRY_URL: &str = "wss://telemetry.polkadot.io/submit/"; #[allow(non_camel_case_types)] #[derive(Debug, Clone, PartialEq, enum_utils::FromStr)] enum ChainDeployment { + /// Single node chain with testing genesis config. + /// Private IP and local network discovery enabled. dev, + /// Two nodes (on same machine) chain with testing genesis config. + /// Private IP and local network discovery enabled local, - staging, - live, + /// Two or more public nodes chain with testing genesis config. + testnet, + /// Two or more public nodes chain with production genesis config. + mainnet, } #[allow(clippy::from_over_into)] @@ -55,8 +61,8 @@ impl Into for ChainDeployment { match self { ChainDeployment::dev => ChainType::Development, ChainDeployment::local => ChainType::Local, - ChainDeployment::staging => ChainType::Live, - ChainDeployment::live => ChainType::Live, + ChainDeployment::testnet => ChainType::Live, + ChainDeployment::mainnet => ChainType::Live, } } } @@ -93,8 +99,8 @@ enum ChainSpecBuilder { /// The path to an initial balances file #[structopt(long)] initial_balances_path: Option, - /// Deployment type: dev, local, staging, live - #[structopt(long, short, default_value = "live")] + /// Deployment type: dev, local, testnet, mainnet + #[structopt(long, short, default_value = "mainnet")] deployment: String, /// Endow authorities, and nominators. Initial balances /// overrides endowed amount. @@ -128,8 +134,8 @@ enum ChainSpecBuilder { /// The path to an initial balances file #[clap(long)] initial_balances_path: Option, - /// Deployment type: dev, local, staging, live - #[clap(long, short, default_value = "live")] + /// Deployment type: dev, local, testnet, mainnet + #[clap(long, short, default_value = "mainnet")] deployment: String, }, } @@ -184,6 +190,23 @@ impl ChainSpecBuilder { ChainSpecBuilder::Generate { .. } => true, } } + + fn valid_number_of_authorities(&self) -> bool { + match self { + ChainSpecBuilder::New { authorities, .. } => match self.chain_deployment() { + ChainDeployment::dev => authorities.len().eq(&1), + ChainDeployment::local => authorities.len().eq(&2), + ChainDeployment::testnet => authorities.len().gt(&1), + ChainDeployment::mainnet => authorities.len().gt(&1), + }, + ChainSpecBuilder::Generate { authorities, .. } => match self.chain_deployment() { + ChainDeployment::dev => authorities.eq(&1), + ChainDeployment::local => authorities.eq(&2), + ChainDeployment::testnet => authorities.gt(&1), + ChainDeployment::mainnet => authorities.gt(&1), + }, + } + } } fn authorities_from_seeds( @@ -230,17 +253,17 @@ fn genesis_constructor( .unwrap_or_else(Vec::new); let content_cfg = match deployment { - ChainDeployment::live => content_config::production_config(), + ChainDeployment::mainnet => content_config::production_config(), _ => content_config::testing_config(), }; let storage_cfg = match deployment { - ChainDeployment::live => storage_config::production_config(), + ChainDeployment::mainnet => storage_config::production_config(), _ => storage_config::testing_config(), }; let project_token_cfg = match deployment { - ChainDeployment::live => project_token_config::production_config(), + ChainDeployment::mainnet => project_token_config::production_config(), _ => project_token_config::testing_config(), }; @@ -309,10 +332,13 @@ fn generate_chain_spec( .map(parse_account) .collect::, String>>()?; - let telemetry_endpoints = Some( - TelemetryEndpoints::new(vec![(TELEMETRY_URL.to_string(), 0)]) - .expect("Staging telemetry url is valid; qed"), - ); + let telemetry_endpoints = match deployment { + ChainDeployment::mainnet => Some( + TelemetryEndpoints::new(vec![(TELEMETRY_URL.to_string(), 0)]) + .expect("Telemetry url is invalid; qed"), + ), + _ => None, + }; let chain_spec = chain_spec::ChainSpec::from_genesis( "Joystream Testnet", @@ -330,7 +356,7 @@ fn generate_chain_spec( }, vec![], telemetry_endpoints, - Some(&*"/joy/testnet/0"), + Some("/joy/testnet/0"), None, // Some(&*"joy"), Some(joy_chain_spec_properties()), Default::default(), @@ -413,6 +439,10 @@ async fn main() -> Result<(), String> { let initial_balances_path = builder.initial_balances_path().clone(); let deployment = builder.chain_deployment(); let fund_accounts = builder.fund_accounts(); + if !builder.valid_number_of_authorities() { + println!("Incorrect number of authorities for the deployment type chosen."); + std::process::exit(1); + } let (authorities, nominator_accounts, endowed_accounts) = match builder { ChainSpecBuilder::Generate { diff --git a/bin/utils/session-keys/Cargo.toml b/bin/utils/session-keys/Cargo.toml index dfe68fc44b..a51bb86a20 100644 --- a/bin/utils/session-keys/Cargo.toml +++ b/bin/utils/session-keys/Cargo.toml @@ -10,10 +10,10 @@ async-std = {version = "1.9.0", features = ["attributes"]} futures-util = "0.3.15" clap = { version = "3.1.18", features = ["derive"] } rand = "0.8" -sc-keystore = { git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522' } -sc-telemetry = { git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522' } -sc-chain-spec = { git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522' } -sp-core = { git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522' } -sp-keystore = { git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522' } +sc-keystore = { git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9' } +sc-telemetry = { git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9' } +sc-chain-spec = { git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9' } +sp-core = { git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9' } +sp-keystore = { git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9' } joystream-node = { path = "../../node" } serde_json = "1.0.79" \ No newline at end of file diff --git a/build-node-docker.sh b/build-node-docker.sh index 7b58772e52..b34b22cc48 100755 --- a/build-node-docker.sh +++ b/build-node-docker.sh @@ -4,20 +4,19 @@ set -e # Looks for a cached joystream/node image matching code shasum. # Search order: local repo then dockerhub. If no cached image is found we build it. -SCRIPT_PATH="$(dirname "${BASH_SOURCE[0]}")" +SCRIPT_PATH=`dirname "${BASH_SOURCE[0]}"` cd $SCRIPT_PATH -source scripts/features.sh - +FEATURES=`scripts/features.sh` CODE_SHASUM=`scripts/runtime-code-shasum.sh` IMAGE=joystream/node:${CODE_SHASUM} # Look for image locally if ! docker inspect ${IMAGE} > /dev/null; then - # Not found, try to fetch from remote repo + # Not found, try to fetch from remote repo with local system architecture echo "Trying to fetch cached ${IMAGE} image" - docker pull ${IMAGE} || : + docker pull ${IMAGE} --platform linux/`uname -m` || : # If we didn't find it, build it if ! docker inspect ${IMAGE} > /dev/null; @@ -31,4 +30,11 @@ then fi else echo "Found ${IMAGE} in local repo" + # Not guaranteed it has the correct architecture so just log image and local system architecures +fi + +IMG_ARCH=`docker inspect ${IMAGE} --format='{{.Architecture}}'` +SYS_ARCH=`uname -m` +if [ "$IMG_ARCH" != "$SYS_ARCH" ]; then + echo "WARNING: The local image's platform ${IMG_ARCH} does not match the detected host platform ${SYS_ARCH}" fi diff --git a/chain-metadata.json b/chain-metadata.json index 85cba64fb8..111bac48c9 100644 --- a/chain-metadata.json +++ b/chain-metadata.json @@ -1 +1 @@ -{"jsonrpc":"2.0","result":"0x6d6574610e150a000c1c73705f636f72651863727970746f2c4163636f756e7449643332000004000401205b75383b2033325d0000040000032000000008000800000503000c08306672616d655f73797374656d2c4163636f756e74496e666f0814496e64657801102c4163636f756e74446174610114001401146e6f6e6365100114496e646578000124636f6e73756d657273100120526566436f756e7400012470726f766964657273100120526566436f756e7400012c73756666696369656e7473100120526566436f756e740001106461746114012c4163636f756e7444617461000010000005050014083c70616c6c65745f62616c616e6365732c4163636f756e7444617461041c42616c616e63650118001001106672656518011c42616c616e6365000120726573657276656418011c42616c616e636500012c6d6973635f66726f7a656e18011c42616c616e63650001286665655f66726f7a656e18011c42616c616e636500001800000507001c0c346672616d655f737570706f72741c77656967687473405065724469737061746368436c6173730404540120000c01186e6f726d616c2001045400012c6f7065726174696f6e616c200104540001246d616e6461746f727920010454000020000005060024083c7072696d69746976655f74797065731048323536000004000401585b75383b202f2ac2ab2a2f203332202f2ac2bb2a2f5d00002800000208002c102873705f72756e74696d651c67656e65726963186469676573741844696765737400000401106c6f677330013c5665633c4469676573744974656d3e000030000002340034102873705f72756e74696d651c67656e6572696318646967657374284469676573744974656d0001142850726552756e74696d650800380144436f6e73656e737573456e67696e654964000028011c5665633c75383e00060024436f6e73656e7375730800380144436f6e73656e737573456e67696e654964000028011c5665633c75383e000400105365616c0800380144436f6e73656e737573456e67696e654964000028011c5665633c75383e000500144f74686572040028011c5665633c75383e0000006452756e74696d65456e7669726f6e6d656e745570646174656400080000380000030400000008003c00000240004008306672616d655f73797374656d2c4576656e745265636f7264080445014404540124000c01147068617365b903011450686173650001146576656e7444010445000118746f70696373bd0301185665633c543e00004408586a6f7973747265616d5f6e6f64655f72756e74696d65144576656e740001881853797374656d04004801706672616d655f73797374656d3a3a4576656e743c52756e74696d653e0000001c5574696c69747904006c01607375627374726174655f7574696c6974793a3a4576656e740001002042616c616e636573040078017c70616c6c65745f62616c616e6365733a3a4576656e743c52756e74696d653e00050068456c656374696f6e50726f76696465724d756c7469506861736504008001d070616c6c65745f656c656374696f6e5f70726f76696465725f6d756c74695f70686173653a3a4576656e743c52756e74696d653e0007001c5374616b696e67040090017870616c6c65745f7374616b696e673a3a4576656e743c52756e74696d653e0008001c53657373696f6e0400a0015470616c6c65745f73657373696f6e3a3a4576656e740009001c4772616e6470610400a4015470616c6c65745f6772616e6470613a3a4576656e74000b0020496d4f6e6c696e650400b8018070616c6c65745f696d5f6f6e6c696e653a3a4576656e743c52756e74696d653e000d00204f6666656e6365730400dc015870616c6c65745f6f6666656e6365733a3a4576656e74000e0020426167734c6973740400e4018070616c6c65745f626167735f6c6973743a3a4576656e743c52756e74696d653e0010001c56657374696e670400e8017870616c6c65745f76657374696e673a3a4576656e743c52756e74696d653e001100204d756c74697369670400ec017c70616c6c65745f6d756c74697369673a3a4576656e743c52756e74696d653e0012001c436f756e63696c0400f4015c636f756e63696c3a3a4576656e743c52756e74696d653e001300285265666572656e64756d0400fc01c47265666572656e64756d3a3a4576656e743c52756e74696d652c207265666572656e64756d3a3a496e7374616e6365313e0014001c4d656d6265727304000d0101686d656d626572736869703a3a4576656e743c52756e74696d653e00150014466f72756d040039010154666f72756d3a3a4576656e743c52756e74696d653e00160030436f6e737469747574696f6e04005501018c70616c6c65745f636f6e737469747574696f6e3a3a4576656e743c52756e74696d653e00170018426f756e7479040059010158626f756e74793a3a4576656e743c52756e74696d653e001800404a6f7973747265616d5574696c69747904007d0101846a6f7973747265616d5f7574696c6974793a3a4576656e743c52756e74696d653e0019001c436f6e74656e7404008901015c636f6e74656e743a3a4576656e743c52756e74696d653e001a001c53746f7261676504007502015c73746f726167653a3a4576656e743c52756e74696d653e001b003050726f6a656374546f6b656e0400a902017470726f6a6563745f746f6b656e3a3a4576656e743c52756e74696d653e001c003c50726f706f73616c73456e67696e6504001103018070726f706f73616c735f656e67696e653a3a4576656e743c52756e74696d653e001d004c50726f706f73616c7344697363757373696f6e04002903019070726f706f73616c735f64697363757373696f6e3a3a4576656e743c52756e74696d653e001e003850726f706f73616c73436f64657804003103017c70726f706f73616c735f636f6465783a3a4576656e743c52756e74696d653e001f0044466f72756d576f726b696e6747726f75700400550301dc776f726b696e675f67726f75703a3a4576656e743c52756e74696d652c20776f726b696e675f67726f75703a3a496e7374616e6365313e0020004c53746f72616765576f726b696e6747726f75700400790301dc776f726b696e675f67726f75703a3a4576656e743c52756e74696d652c20776f726b696e675f67726f75703a3a496e7374616e6365323e0021004c436f6e74656e74576f726b696e6747726f75700400810301dc776f726b696e675f67726f75703a3a4576656e743c52756e74696d652c20776f726b696e675f67726f75703a3a496e7374616e6365333e0022006c4f7065726174696f6e73576f726b696e6747726f7570416c7068610400890301dc776f726b696e675f67726f75703a3a4576656e743c52756e74696d652c20776f726b696e675f67726f75703a3a496e7374616e6365343e0023003c417070576f726b696e6747726f75700400910301dc776f726b696e675f67726f75703a3a4576656e743c52756e74696d652c20776f726b696e675f67726f75703a3a496e7374616e6365353e002400584d656d62657273686970576f726b696e6747726f75700400990301dc776f726b696e675f67726f75703a3a4576656e743c52756e74696d652c20776f726b696e675f67726f75703a3a496e7374616e6365363e002500684f7065726174696f6e73576f726b696e6747726f7570426574610400a10301dc776f726b696e675f67726f75703a3a4576656e743c52756e74696d652c20776f726b696e675f67726f75703a3a496e7374616e6365373e0026006c4f7065726174696f6e73576f726b696e6747726f757047616d6d610400a90301dc776f726b696e675f67726f75703a3a4576656e743c52756e74696d652c20776f726b696e675f67726f75703a3a496e7374616e6365383e00270060446973747269627574696f6e576f726b696e6747726f75700400b10301dc776f726b696e675f67726f75703a3a4576656e743c52756e74696d652c20776f726b696e675f67726f75703a3a496e7374616e6365393e00280000480c306672616d655f73797374656d1870616c6c6574144576656e740404540001184045787472696e7369635375636365737304013464697370617463685f696e666f4c01304469737061746368496e666f00000490416e2065787472696e73696320636f6d706c65746564207375636365737366756c6c792e3c45787472696e7369634661696c656408013864697370617463685f6572726f7258013444697370617463684572726f7200013464697370617463685f696e666f4c01304469737061746368496e666f00010450416e2065787472696e736963206661696c65642e2c436f64655570646174656400020450603a636f6465602077617320757064617465642e284e65774163636f756e7404011c6163636f756e74000130543a3a4163636f756e7449640003046841206e6577206163636f756e742077617320637265617465642e344b696c6c65644163636f756e7404011c6163636f756e74000130543a3a4163636f756e74496400040458416e206163636f756e7420776173207265617065642e2052656d61726b656408011873656e646572000130543a3a4163636f756e7449640001106861736824011c543a3a48617368000504704f6e206f6e2d636861696e2072656d61726b2068617070656e65642e04704576656e7420666f72207468652053797374656d2070616c6c65742e4c0c346672616d655f737570706f72741c77656967687473304469737061746368496e666f00000c0118776569676874200118576569676874000114636c6173735001344469737061746368436c617373000120706179735f666565540110506179730000500c346672616d655f737570706f72741c77656967687473344469737061746368436c61737300010c184e6f726d616c0000002c4f7065726174696f6e616c000100244d616e6461746f727900020000540c346672616d655f737570706f72741c7765696768747310506179730001080c596573000000084e6f0001000058082873705f72756e74696d653444697370617463684572726f72000128144f746865720000003043616e6e6f744c6f6f6b7570000100244261644f726967696e000200184d6f64756c6504005c012c4d6f64756c654572726f7200030044436f6e73756d657252656d61696e696e670004002c4e6f50726f76696465727300050040546f6f4d616e79436f6e73756d65727300060014546f6b656e0400600128546f6b656e4572726f720007002841726974686d65746963040064013c41726974686d657469634572726f72000800345472616e73616374696f6e616c04006801485472616e73616374696f6e616c4572726f72000900005c082873705f72756e74696d652c4d6f64756c654572726f720000080114696e64657808010875380001146572726f7238018c5b75383b204d41585f4d4f44554c455f4552524f525f454e434f4445445f53495a455d000060082873705f72756e74696d6528546f6b656e4572726f7200011c1c4e6f46756e647300000020576f756c644469650001003042656c6f774d696e696d756d0002003043616e6e6f7443726561746500030030556e6b6e6f776e41737365740004001846726f7a656e0005002c556e737570706f727465640006000064082873705f72756e74696d653c41726974686d657469634572726f7200010c24556e646572666c6f77000000204f766572666c6f77000100384469766973696f6e42795a65726f0002000068082873705f72756e74696d65485472616e73616374696f6e616c4572726f72000108304c696d6974526561636865640000001c4e6f4c61796572000100006c0c3870616c6c65745f7574696c6974791870616c6c6574144576656e74000118404261746368496e746572727570746564080114696e64657810010c7533320001146572726f7258013444697370617463684572726f7200000855014261746368206f66206469737061746368657320646964206e6f7420636f6d706c6574652066756c6c792e20496e646578206f66206669727374206661696c696e6720646973706174636820676976656e2c2061734877656c6c20617320746865206572726f722e384261746368436f6d706c65746564000104c84261746368206f66206469737061746368657320636f6d706c657465642066756c6c792077697468206e6f206572726f722e604261746368436f6d706c65746564576974684572726f7273000204b44261746368206f66206469737061746368657320636f6d706c657465642062757420686173206572726f72732e344974656d436f6d706c657465640003041d01412073696e676c65206974656d2077697468696e2061204261746368206f6620646973706174636865732068617320636f6d706c657465642077697468206e6f206572726f722e284974656d4661696c65640401146572726f7258013444697370617463684572726f720004041101412073696e676c65206974656d2077697468696e2061204261746368206f6620646973706174636865732068617320636f6d706c657465642077697468206572726f722e30446973706174636865644173040118726573756c747001384469737061746368526573756c7400050458412063616c6c2077617320646973706174636865642e0499010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f76332f72756e74696d652f6576656e74732d616e642d6572726f72732920656d69747465640a090909627920746869732070616c6c65742e0a090909700418526573756c740804540174044501580108084f6b040074000000000c4572720400580000010000740000040000780c3c70616c6c65745f62616c616e6365731870616c6c6574144576656e740804540004490001281c456e646f77656408011c6163636f756e74000130543a3a4163636f756e744964000130667265655f62616c616e6365180128543a3a42616c616e6365000004b8416e206163636f756e74207761732063726561746564207769746820736f6d6520667265652062616c616e63652e20447573744c6f737408011c6163636f756e74000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e63650001083d01416e206163636f756e74207761732072656d6f7665642077686f73652062616c616e636520776173206e6f6e2d7a65726f206275742062656c6f77204578697374656e7469616c4465706f7369742c78726573756c74696e6720696e20616e206f75747269676874206c6f73732e205472616e736665720c011066726f6d000130543a3a4163636f756e744964000108746f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e63650002044c5472616e73666572207375636365656465642e2842616c616e63655365740c010c77686f000130543a3a4163636f756e74496400011066726565180128543a3a42616c616e63650001207265736572766564180128543a3a42616c616e636500030468412062616c616e6365207761732073657420627920726f6f742e20526573657276656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000404e0536f6d652062616c616e63652077617320726573657276656420286d6f7665642066726f6d206672656520746f207265736572766564292e28556e726573657276656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000504e8536f6d652062616c616e63652077617320756e726573657276656420286d6f7665642066726f6d20726573657276656420746f2066726565292e4852657365727665526570617472696174656410011066726f6d000130543a3a4163636f756e744964000108746f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e636500014864657374696e6174696f6e5f7374617475737c01185374617475730006084d01536f6d652062616c616e636520776173206d6f7665642066726f6d207468652072657365727665206f6620746865206669727374206163636f756e7420746f20746865207365636f6e64206163636f756e742ed846696e616c20617267756d656e7420696e64696361746573207468652064657374696e6174696f6e2062616c616e636520747970652e1c4465706f73697408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000704d8536f6d6520616d6f756e7420776173206465706f73697465642028652e672e20666f72207472616e73616374696f6e2066656573292e20576974686472617708010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e63650008041d01536f6d6520616d6f756e74207761732077697468647261776e2066726f6d20746865206163636f756e742028652e672e20666f72207472616e73616374696f6e2066656573292e1c536c617368656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e63650009040101536f6d6520616d6f756e74207761732072656d6f7665642066726f6d20746865206163636f756e742028652e672e20666f72206d69736265686176696f72292e0499010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f76332f72756e74696d652f6576656e74732d616e642d6572726f72732920656d69747465640a090909627920746869732070616c6c65742e0a0909097c14346672616d655f737570706f72741874726169747318746f6b656e73106d6973633442616c616e6365537461747573000108104672656500000020526573657276656400010000800c9070616c6c65745f656c656374696f6e5f70726f76696465725f6d756c74695f70686173651870616c6c6574144576656e7404045400011838536f6c7574696f6e53746f726564080140656c656374696f6e5f636f6d7075746584013c456c656374696f6e436f6d70757465000130707265765f656a6563746564880110626f6f6c000018b44120736f6c7574696f6e207761732073746f72656420776974682074686520676976656e20636f6d707574652e003d0149662074686520736f6c7574696f6e206973207369676e65642c2074686973206d65616e732074686174206974206861736e277420796574206265656e2070726f6365737365642e204966207468650501736f6c7574696f6e20697320756e7369676e65642c2074686973206d65616e7320746861742069742068617320616c736f206265656e2070726f6365737365642e0051015468652060626f6f6c6020697320607472756560207768656e20612070726576696f757320736f6c7574696f6e2077617320656a656374656420746f206d616b6520726f6f6d20666f722074686973206f6e652e44456c656374696f6e46696e616c697a6564040140656c656374696f6e5f636f6d707574658c015c4f7074696f6e3c456c656374696f6e436f6d707574653e000108550154686520656c656374696f6e20686173206265656e2066696e616c697a65642c20776974682060536f6d6560206f662074686520676976656e20636f6d7075746174696f6e2c206f7220656c73652069662074686560656c656374696f6e206661696c65642c20604e6f6e65602e20526577617264656408011c6163636f756e740001983c54206173206672616d655f73797374656d3a3a436f6e6669673e3a3a4163636f756e74496400011476616c756518013042616c616e63654f663c543e0002042501416e206163636f756e7420686173206265656e20726577617264656420666f72207468656972207369676e6564207375626d697373696f6e206265696e672066696e616c697a65642e1c536c617368656408011c6163636f756e740001983c54206173206672616d655f73797374656d3a3a436f6e6669673e3a3a4163636f756e74496400011476616c756518013042616c616e63654f663c543e0003042101416e206163636f756e7420686173206265656e20736c617368656420666f72207375626d697474696e6720616e20696e76616c6964207369676e6564207375626d697373696f6e2e485369676e6564506861736553746172746564040114726f756e6410010c753332000404c0546865207369676e6564207068617365206f662074686520676976656e20726f756e642068617320737461727465642e50556e7369676e6564506861736553746172746564040114726f756e6410010c753332000504c854686520756e7369676e6564207068617365206f662074686520676976656e20726f756e642068617320737461727465642e0499010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f76332f72756e74696d652f6576656e74732d616e642d6572726f72732920656d69747465640a090909627920746869732070616c6c65742e0a09090984089070616c6c65745f656c656374696f6e5f70726f76696465725f6d756c74695f70686173653c456c656374696f6e436f6d707574650001141c4f6e436861696e000000185369676e656400010020556e7369676e65640002002046616c6c6261636b00030024456d657267656e6379000400008800000500008c04184f7074696f6e04045401840108104e6f6e6500000010536f6d65040084000001000090103870616c6c65745f7374616b696e671870616c6c65741870616c6c6574144576656e740404540001341c457261506169640c00100120457261496e646578000018013042616c616e63654f663c543e000018013042616c616e63654f663c543e00000c550154686520657261207061796f757420686173206265656e207365743b207468652066697273742062616c616e6365206973207468652076616c696461746f722d7061796f75743b20746865207365636f6e64206973c07468652072656d61696e6465722066726f6d20746865206d6178696d756d20616d6f756e74206f66207265776172642ea85c5b6572615f696e6465782c2076616c696461746f725f7061796f75742c2072656d61696e6465725c5d2052657761726465640800000130543a3a4163636f756e744964000018013042616c616e63654f663c543e0001040501546865206e6f6d696e61746f7220686173206265656e207265776172646564206279207468697320616d6f756e742e205c5b73746173682c20616d6f756e745c5d1c536c61736865640800000130543a3a4163636f756e744964000018013042616c616e63654f663c543e00020821014f6e652076616c696461746f722028616e6420697473206e6f6d696e61746f72732920686173206265656e20736c61736865642062792074686520676976656e20616d6f756e742e545c5b76616c696461746f722c20616d6f756e745c5d684f6c64536c617368696e675265706f7274446973636172646564040010013053657373696f6e496e6465780003081901416e206f6c6420736c617368696e67207265706f72742066726f6d2061207072696f72206572612077617320646973636172646564206265636175736520697420636f756c648c6e6f742062652070726f6365737365642e205c5b73657373696f6e5f696e6465785c5d385374616b657273456c65637465640004048441206e657720736574206f66207374616b6572732077617320656c65637465642e18426f6e6465640800000130543a3a4163636f756e744964000018013042616c616e63654f663c543e000510d0416e206163636f756e742068617320626f6e646564207468697320616d6f756e742e205c5b73746173682c20616d6f756e745c5d004d014e4f54453a2054686973206576656e74206973206f6e6c7920656d6974746564207768656e2066756e64732061726520626f6e64656420766961206120646973706174636861626c652e204e6f7461626c792c210169742077696c6c206e6f7420626520656d697474656420666f72207374616b696e672072657761726473207768656e20746865792061726520616464656420746f207374616b652e20556e626f6e6465640800000130543a3a4163636f756e744964000018013042616c616e63654f663c543e000604d8416e206163636f756e742068617320756e626f6e646564207468697320616d6f756e742e205c5b73746173682c20616d6f756e745c5d2457697468647261776e0800000130543a3a4163636f756e744964000018013042616c616e63654f663c543e0007085901416e206163636f756e74206861732063616c6c6564206077697468647261775f756e626f6e6465646020616e642072656d6f76656420756e626f6e64696e67206368756e6b7320776f727468206042616c616e636560ac66726f6d2074686520756e6c6f636b696e672071756575652e205c5b73746173682c20616d6f756e745c5d184b69636b65640800000130543a3a4163636f756e7449640000000130543a3a4163636f756e744964000804090141206e6f6d696e61746f7220686173206265656e206b69636b65642066726f6d20612076616c696461746f722e205c5b6e6f6d696e61746f722c2073746173685c5d545374616b696e67456c656374696f6e4661696c6564000904ac54686520656c656374696f6e206661696c65642e204e6f206e65772065726120697320706c616e6e65642e1c4368696c6c65640400000130543a3a4163636f756e744964000a082101416e206163636f756e74206861732073746f707065642070617274696369706174696e672061732065697468657220612076616c696461746f72206f72206e6f6d696e61746f722e245c5b73746173685c5d345061796f7574537461727465640800100120457261496e6465780000000130543a3a4163636f756e744964000b041501546865207374616b657273272072657761726473206172652067657474696e6720706169642e205c5b6572615f696e6465782c2076616c696461746f725f73746173685c5d4456616c696461746f7250726566735365740800000130543a3a4163636f756e744964000094013856616c696461746f725072656673000c0498412076616c696461746f72206861732073657420746865697220707265666572656e6365732e0499010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f76332f72756e74696d652f6576656e74732d616e642d6572726f72732920656d69747465640a090909627920746869732070616c6c65742e0a09090994083870616c6c65745f7374616b696e673856616c696461746f7250726566730000080128636f6d6d697373696f6e98011c50657262696c6c00011c626c6f636b6564880110626f6f6c0000980000069c009c0c3473705f61726974686d65746963287065725f7468696e67731c50657262696c6c0000040010010c7533320000a00c3870616c6c65745f73657373696f6e1870616c6c6574144576656e74000104284e657753657373696f6e04013473657373696f6e5f696e64657810013053657373696f6e496e64657800000839014e65772073657373696f6e206861732068617070656e65642e204e6f746520746861742074686520617267756d656e74206973207468652073657373696f6e20696e6465782c206e6f74207468659c626c6f636b206e756d626572206173207468652074797065206d6967687420737567676573742e0499010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f76332f72756e74696d652f6576656e74732d616e642d6572726f72732920656d69747465640a090909627920746869732070616c6c65742e0a090909a40c3870616c6c65745f6772616e6470611870616c6c6574144576656e7400010c384e6577417574686f726974696573040134617574686f726974795f736574a80134417574686f726974794c6973740000048c4e657720617574686f726974792073657420686173206265656e206170706c6965642e185061757365640001049843757272656e7420617574686f726974792073657420686173206265656e207061757365642e1c526573756d65640002049c43757272656e7420617574686f726974792073657420686173206265656e20726573756d65642e0499010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f76332f72756e74696d652f6576656e74732d616e642d6572726f72732920656d69747465640a090909627920746869732070616c6c65742e0a090909a8000002ac00ac00000408b02000b00c4c73705f66696e616c6974795f6772616e6470610c617070185075626c696300000400b4013c656432353531393a3a5075626c69630000b40c1c73705f636f72651c65643235353139185075626c6963000004000401205b75383b2033325d0000b80c4070616c6c65745f696d5f6f6e6c696e651870616c6c6574144576656e7404045400010c444865617274626561745265636569766564040130617574686f726974795f6964bc0138543a3a417574686f726974794964000004c041206e657720686561727462656174207761732072656365697665642066726f6d2060417574686f726974794964602e1c416c6c476f6f64000104d041742074686520656e64206f66207468652073657373696f6e2c206e6f206f6666656e63652077617320636f6d6d69747465642e2c536f6d654f66666c696e6504011c6f66666c696e65c4016c5665633c4964656e74696669636174696f6e5475706c653c543e3e000204290141742074686520656e64206f66207468652073657373696f6e2c206174206c65617374206f6e652076616c696461746f722077617320666f756e6420746f206265206f66666c696e652e0499010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f76332f72756e74696d652f6576656e74732d616e642d6572726f72732920656d69747465640a090909627920746869732070616c6c65742e0a090909bc104070616c6c65745f696d5f6f6e6c696e651c737232353531392c6170705f73723235353139185075626c696300000400c0013c737232353531393a3a5075626c69630000c00c1c73705f636f72651c73723235353139185075626c6963000004000401205b75383b2033325d0000c4000002c800c80000040800cc00cc083870616c6c65745f7374616b696e67204578706f7375726508244163636f756e74496401001c42616c616e63650118000c0114746f74616cd0011c42616c616e636500010c6f776ed0011c42616c616e63650001186f7468657273d401ac5665633c496e646976696475616c4578706f737572653c4163636f756e7449642c2042616c616e63653e3e0000d00000061800d4000002d800d8083870616c6c65745f7374616b696e6748496e646976696475616c4578706f7375726508244163636f756e74496401001c42616c616e636501180008010c77686f0001244163636f756e74496400011476616c7565d0011c42616c616e63650000dc0c3c70616c6c65745f6f6666656e6365731870616c6c6574144576656e740001041c4f6666656e63650801106b696e64e001104b696e6400012074696d65736c6f742801384f706171756554696d65536c6f7400000c5101546865726520697320616e206f6666656e6365207265706f72746564206f662074686520676976656e20606b696e64602068617070656e656420617420746865206073657373696f6e5f696e6465786020616e643501286b696e642d7370656369666963292074696d6520736c6f742e2054686973206576656e74206973206e6f74206465706f736974656420666f72206475706c696361746520736c61736865732e4c5c5b6b696e642c2074696d65736c6f745c5d2e04304576656e747320747970652ee0000003100000000800e40c4070616c6c65745f626167735f6c6973741870616c6c6574144576656e740804540004490001082052656261676765640c010c77686f000130543a3a4163636f756e74496400011066726f6d200120543a3a53636f7265000108746f200120543a3a53636f7265000004a44d6f76656420616e206163636f756e742066726f6d206f6e652062616720746f20616e6f746865722e3053636f72655570646174656408010c77686f000130543a3a4163636f756e7449640001246e65775f73636f7265200120543a3a53636f7265000104d855706461746564207468652073636f7265206f6620736f6d65206163636f756e7420746f2074686520676976656e20616d6f756e742e0499010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f76332f72756e74696d652f6576656e74732d616e642d6572726f72732920656d69747465640a090909627920746869732070616c6c65742e0a090909e80c3870616c6c65745f76657374696e671870616c6c6574144576656e740404540001083856657374696e675570646174656408011c6163636f756e74000130543a3a4163636f756e744964000120756e76657374656418013042616c616e63654f663c543e000008510154686520616d6f756e742076657374656420686173206265656e20757064617465642e205468697320636f756c6420696e6469636174652061206368616e676520696e2066756e647320617661696c61626c652e25015468652062616c616e636520676976656e2069732074686520616d6f756e74207768696368206973206c65667420756e7665737465642028616e642074687573206c6f636b6564292e4056657374696e67436f6d706c6574656404011c6163636f756e74000130543a3a4163636f756e7449640001049c416e205c5b6163636f756e745c5d20686173206265636f6d652066756c6c79207665737465642e0499010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f76332f72756e74696d652f6576656e74732d616e642d6572726f72732920656d69747465640a090909627920746869732070616c6c65742e0a090909ec0c3c70616c6c65745f6d756c74697369671870616c6c6574144576656e740404540001102c4e65774d756c74697369670c0124617070726f76696e67000130543a3a4163636f756e7449640001206d756c7469736967000130543a3a4163636f756e74496400012463616c6c5f6861736804012043616c6c486173680000048c41206e6577206d756c7469736967206f7065726174696f6e2068617320626567756e2e404d756c7469736967417070726f76616c100124617070726f76696e67000130543a3a4163636f756e74496400012474696d65706f696e74f0016454696d65706f696e743c543a3a426c6f636b4e756d6265723e0001206d756c7469736967000130543a3a4163636f756e74496400012463616c6c5f6861736804012043616c6c48617368000104c841206d756c7469736967206f7065726174696f6e20686173206265656e20617070726f76656420627920736f6d656f6e652e404d756c74697369674578656375746564140124617070726f76696e67000130543a3a4163636f756e74496400012474696d65706f696e74f0016454696d65706f696e743c543a3a426c6f636b4e756d6265723e0001206d756c7469736967000130543a3a4163636f756e74496400012463616c6c5f6861736804012043616c6c48617368000118726573756c747001384469737061746368526573756c740002049c41206d756c7469736967206f7065726174696f6e20686173206265656e2065786563757465642e444d756c746973696743616e63656c6c656410012863616e63656c6c696e67000130543a3a4163636f756e74496400012474696d65706f696e74f0016454696d65706f696e743c543a3a426c6f636b4e756d6265723e0001206d756c7469736967000130543a3a4163636f756e74496400012463616c6c5f6861736804012043616c6c48617368000304a041206d756c7469736967206f7065726174696f6e20686173206265656e2063616e63656c6c65642e0499010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f76332f72756e74696d652f6576656e74732d616e642d6572726f72732920656d69747465640a090909627920746869732070616c6c65742e0a090909f0083c70616c6c65745f6d756c74697369672454696d65706f696e74042c426c6f636b4e756d62657201100008011868656967687410012c426c6f636b4e756d626572000114696e64657810010c7533320000f4083870616c6c65745f636f756e63696c205261774576656e74101c42616c616e636501182c426c6f636b4e756d6265720110204d656d62657249640120244163636f756e7449640100014c5c416e6e6f756e63696e67506572696f6453746172746564040010012c426c6f636b4e756d6265720000045c4e657720636f756e63696c2077617320656c65637465644c4e6f74456e6f75676843616e64696461746573040010012c426c6f636b4e756d6265720001041d01416e6e6f756e63696e6720706572696f642063616e27742066696e6973682062656361757365206f6620696e73756666696369656e742063616e6469647461746520636f756e744c566f74696e67506572696f6453746172746564040010010c753332000204a843616e646964617465732061726520616e6e6f756e63656420616e6420766f74696e6720737461727473304e657743616e64696461746510002001204d656d626572496400000001244163636f756e74496400000001244163636f756e744964000018011c42616c616e63650003045c4e65772063616e64696461746520616e6e6f756e636564444e6577436f756e63696c456c65637465640800f801345665633c4d656d62657249643e000010012c426c6f636b4e756d626572000404944e657720636f756e63696c2077617320656c656374656420616e64206170706f696e746564504e6577436f756e63696c4e6f74456c6563746564040010012c426c6f636b4e756d6265720005046c4e657720636f756e63696c20776173206e6f7420656c65637465645443616e6469646163795374616b6552656c6561736504002001204d656d6265724964000604d843616e646964616379207374616b65207468617420776173206e6f206c6f6e676572206e6565646564207761732072656c65617365644443616e646964616379576974686472617704002001204d656d62657249640007049443616e646964617465206861732077697468647261776e206869732063616e6469646163794043616e6469646163794e6f746553657408002001204d656d6265724964000028011c5665633c75383e000804d05468652063616e64696461746520686173207365742061206e6577206e6f746520666f722074686569722063616e646964616379345265776172645061796d656e7410002001204d656d626572496400000001244163636f756e744964000018011c42616c616e6365000018011c42616c616e6365000904c05468652077686f6c652072657761726420776173207061696420746f2074686520636f756e63696c206d656d6265722e4042756467657442616c616e6365536574040018011c42616c616e6365000a049c4275646765742062616c616e636520776173206368616e6765642062792074686520726f6f742e30427564676574526566696c6c040018011c42616c616e6365000b04c44275646765742062616c616e63652077617320696e63726561736564206279206175746f6d6174696320726566696c6c2e4c427564676574526566696c6c506c616e6e6564040010012c426c6f636b4e756d626572000c048c546865206e6578742062756467657420726566696c6c2077617320706c616e6e65642e58427564676574496e6372656d656e7455706461746564040018011c42616c616e6365000d048842756467657420696e6372656d656e7420686173206265656e20757064617465642e58436f756e63696c6f7252657761726455706461746564040018011c42616c616e6365000e0488436f756e63696c6f722072657761726420686173206265656e20757064617465642e345265717565737446756e64656408000001244163636f756e744964000018011c42616c616e6365000f045c5265717565737420686173206265656e2066756e6465644c436f756e63696c42756467657446756e6465640c002001204d656d6265724964000018011c42616c616e6365000028011c5665633c75383e0010146046756e642074686520636f756e63696c206275646765742e1c506172616d733a2c2d204d656d6265722049444c2d20416d6f756e74206f662062616c616e63652c2d20526174696f6e616c6544436f756e63696c6f7252656d61726b656408002001204d656d6265724964000028011c5665633c75383e00110460436f756e63696c6f722072656d61726b206d6573736167654443616e64696461746552656d61726b656408002001204d656d6265724964000028011c5665633c75383e0012046043616e6469646174652072656d61726b206d657373616765085c4576656e747320666f722074686973206d6f64756c652e00f80000022000fc084470616c6c65745f7265666572656e64756d205261774576656e741c2c426c6f636b4e756d62657201101c42616c616e6365011810486173680124244163636f756e744964010024566f7465506f7765720118204d656d6265724964012004490101010120445265666572656e64756d53746172746564080010010c753332000010012c426c6f636b4e756d626572000004485265666572656e64756d20737461727465646c5265666572656e64756d53746172746564466f72636566756c6c79080010010c753332000010012c426c6f636b4e756d626572000104485265666572656e64756d20737461727465645452657665616c696e67537461676553746172746564040010012c426c6f636b4e756d6265720002046452657665616c696e672070686173652068617320626567756e485265666572656e64756d46696e69736865640400050101985665633c4f7074696f6e526573756c743c4d656d62657249642c20566f7465506f7765723e3e000304c05265666572656e64756d20656e64656420616e642077696e6e696e67206f7074696f6e207761732073656c656374656420566f7465436173740c000001244163636f756e744964000024011048617368000018011c42616c616e636500040478557365722063617374206120766f746520696e207265666572656e64756d30566f746552657665616c65640c000001244163636f756e74496400002001204d656d6265724964000028011c5665633c75383e00050458557365722072657665616c65642068697320766f7465345374616b6552656c656173656404000001244163636f756e7449640006045c557365722072656c656173656420686973207374616b655c4163636f756e744f707465644f75744f66566f74696e6704000001244163636f756e744964000704d84163636f756e74207065726d616e656e746c79206f70746564206f7574206f6620766f74696e6720696e207265666572656e64756d2e085c4576656e747320666f722074686973206d6f64756c652e000101084470616c6c65745f7265666572656e64756d24496e7374616e6365310000000005010000020901000901084470616c6c65745f7265666572656e64756d304f7074696f6e526573756c7408204d656d6265724964012024566f7465506f7765720118000801246f7074696f6e5f69642001204d656d6265724964000128766f74655f706f776572180124566f7465506f77657200000d01084470616c6c65745f6d656d62657273686970205261774576656e7420204d656d626572496401201c42616c616e63650118244163636f756e74496401005c4275794d656d62657273686970506172616d65746572730111011c4163746f724964012068496e766974654d656d62657273686970506172616d6574657273011d01584372656174654d656d626572506172616d657465727301210160476966744d656d62657273686970506172616d65746572730125010144344d656d626572496e76697465640c002001204d656d626572496400001d010168496e766974654d656d62657273686970506172616d6574657273000018011c42616c616e6365000000404d656d6265727368697047696674656408002001204d656d6265724964000025010160476966744d656d62657273686970506172616d6574657273000100404d656d62657273686970426f756768740c002001204d656d626572496400001101015c4275794d656d62657273686970506172616d6574657273000010010c753332000200504d656d62657250726f66696c65557064617465640c002001204d656d626572496400001501013c4f7074696f6e3c5665633c75383e3e00001501013c4f7074696f6e3c5665633c75383e3e000300544d656d6265724163636f756e7473557064617465640c002001204d656d626572496400002d0101444f7074696f6e3c4163636f756e7449643e00002d0101444f7074696f6e3c4163636f756e7449643e0004007c4d656d626572566572696669636174696f6e537461747573557064617465640c002001204d656d62657249640000880110626f6f6c000020011c4163746f72496400050048526566657272616c437574557064617465640400080108753800060048496e76697465735472616e736665727265640c002001204d656d626572496400002001204d656d6265724964000010010c753332000700584d656d62657273686970507269636555706461746564040018011c42616c616e63650008007c496e697469616c496e7669746174696f6e42616c616e636555706461746564040018011c42616c616e6365000900704c6561646572496e7669746174696f6e51756f746155706461746564040010010c753332000a0074496e697469616c496e7669746174696f6e436f756e7455706461746564040010010c753332000b004c5374616b696e674163636f756e74416464656408000001244163636f756e74496400002001204d656d6265724964000c00545374616b696e674163636f756e7452656d6f76656408000001244163636f756e74496400002001204d656d6265724964000d005c5374616b696e674163636f756e74436f6e6669726d656408000001244163636f756e74496400002001204d656d6265724964000e00384d656d62657252656d61726b65640c002001204d656d6265724964000028011c5665633c75383e0000310101704f7074696f6e3c284163636f756e7449642c2042616c616e6365293e000f00344d656d626572437265617465640c002001204d656d62657249640000210101584372656174654d656d626572506172616d6574657273000010010c753332001000085c4576656e747320666f722074686973206d6f64756c652e001101084470616c6c65745f6d656d626572736869705c4275794d656d62657273686970506172616d657465727308244163636f756e7449640100204d656d6265724964012000140130726f6f745f6163636f756e740001244163636f756e744964000148636f6e74726f6c6c65725f6163636f756e740001244163636f756e74496400011868616e646c651501013c4f7074696f6e3c5665633c75383e3e0001206d6574616461746128011c5665633c75383e00012c72656665727265725f6964190101404f7074696f6e3c4d656d62657249643e0000150104184f7074696f6e04045401280108104e6f6e6500000010536f6d650400280000010000190104184f7074696f6e04045401200108104e6f6e6500000010536f6d6504002000000100001d01084470616c6c65745f6d656d6265727368697068496e766974654d656d62657273686970506172616d657465727308244163636f756e7449640100204d656d6265724964012000140148696e766974696e675f6d656d6265725f69642001204d656d6265724964000130726f6f745f6163636f756e740001244163636f756e744964000148636f6e74726f6c6c65725f6163636f756e740001244163636f756e74496400011868616e646c651501013c4f7074696f6e3c5665633c75383e3e0001206d6574616461746128011c5665633c75383e00002101084470616c6c65745f6d656d62657273686970584372656174654d656d626572506172616d657465727304244163636f756e744964010000140130726f6f745f6163636f756e740001244163636f756e744964000148636f6e74726f6c6c65725f6163636f756e740001244163636f756e74496400011868616e646c6528011c5665633c75383e0001206d6574616461746128011c5665633c75383e00014869735f666f756e64696e675f6d656d626572880110626f6f6c00002501084470616c6c65745f6d656d6265727368697060476966744d656d62657273686970506172616d657465727308244163636f756e74496401001c42616c616e6365011800200130726f6f745f6163636f756e740001244163636f756e744964000148636f6e74726f6c6c65725f6163636f756e740001244163636f756e74496400011868616e646c651501013c4f7074696f6e3c5665633c75383e3e0001206d6574616461746128011c5665633c75383e0001646372656469745f636f6e74726f6c6c65725f6163636f756e7418011c42616c616e63650001a06170706c795f636f6e74726f6c6c65725f6163636f756e745f696e7669746174696f6e5f6c6f636b2901013c4f7074696f6e3c42616c616e63653e00014c6372656469745f726f6f745f6163636f756e7418011c42616c616e63650001886170706c795f726f6f745f6163636f756e745f696e7669746174696f6e5f6c6f636b2901013c4f7074696f6e3c42616c616e63653e0000290104184f7074696f6e04045401180108104e6f6e6500000010536f6d6504001800000100002d0104184f7074696f6e04045401000108104e6f6e6500000010536f6d650400000000010000310104184f7074696f6e0404540135010108104e6f6e6500000010536f6d650400350100000100003501000004080018003901083070616c6c65745f666f72756d205261774576656e74202843617465676f7279496401202c4d6f64657261746f7249640120205468726561644964012018506f737449640120104861736801242c466f72756d55736572496401203c50726976696c656765644163746f72013d0138457874656e646564506f7374496401410101443c43617465676f727943726561746564100020012843617465676f727949640000190101484f7074696f6e3c43617465676f727949643e000028011c5665633c75383e000028011c5665633c75383e00000464412063617465676f72792077617320696e74726f64756365647443617465676f7279417263686976616c537461747573557064617465640c0020012843617465676f727949640000880110626f6f6c00003d01013c50726976696c656765644163746f72000108e0416e206172686963616c20737461747573206f662063617465676f7279207769746820676976656e2069642077617320757064617465642e1501546865207365636f6e6420617267756d656e74207265666c6563747320746865206e657720617263686976616c20737461747573206f66207468652063617465676f72792e5043617465676f72795469746c65557064617465640c0020012843617465676f7279496400002401104861736800003d01013c50726976696c656765644163746f72000208b841207469746c65206f662063617465676f7279207769746820676976656e2069642077617320757064617465642e0101546865207365636f6e6420617267756d656e74207265666c6563747320746865206e6577207469746c652068617368206f66207468652063617465676f72792e6843617465676f72794465736372697074696f6e557064617465640c0020012843617465676f7279496400002401104861736800003d01013c50726976696c656765644163746f72000308d041206469736372697074696f6e206f662063617465676f7279207769746820676976656e2069642077617320757064617465642e1901546865207365636f6e6420617267756d656e74207265666c6563747320746865206e6577206465736372697074696f6e2068617368206f66207468652063617465676f72792e3c43617465676f727944656c65746564080020012843617465676f7279496400003d01013c50726976696c656765644163746f7200040458412063617465676f7279207761732064656c657465643454687265616443726561746564180020012843617465676f72794964000020012054687265616449640000200118506f73744964000020012c466f72756d557365724964000028011c5665633c75383e000028011c5665633c75383e0005088c4120746872656164207769746820676976656e2069642077617320637265617465642ef04120746869726420617267756d656e74207265666c656374732074686520696e697469616c20706f7374206964206f6620746865207468726561642e3c5468726561644d6f6465726174656410002001205468726561644964000028011c5665633c75383e00003d01013c50726976696c656765644163746f72000020012843617465676f72794964000604944120746872656164207769746820676976656e20696420776173206d6f646572617465642e3454687265616455706461746564100020012054687265616449640000880110626f6f6c00003d01013c50726976696c656765644163746f72000020012843617465676f727949640007088c4120746872656164207769746820676976656e2069642077617320757064617465642e0d01546865207365636f6e6420617267756d656e74207265666c6563747320746865206e657720617263686976616c20737461747573206f6620746865207468726561642e545468726561644d657461646174615570646174656410002001205468726561644964000020012c466f72756d557365724964000020012843617465676f72794964000028011c5665633c75383e0008049c4120746872656164206d6574616461746120676976656e2069642077617320757064617465642e3454687265616444656c6574656410002001205468726561644964000020012c466f72756d557365724964000020012843617465676f727949640000880110626f6f6c000904544120746872656164207761732064656c657465642e2c5468726561644d6f76656410002001205468726561644964000020012843617465676f7279496400003d01013c50726976696c656765644163746f72000020012843617465676f72794964000a0488412074687265616420776173206d6f76656420746f206e65772063617465676f727924506f737441646465641800200118506f73744964000020012c466f72756d557365724964000020012843617465676f7279496400002001205468726561644964000028011c5665633c75383e0000880110626f6f6c000b047c506f7374207769746820676976656e2069642077617320637265617465642e34506f73744d6f646572617465641400200118506f73744964000028011c5665633c75383e00003d01013c50726976696c656765644163746f72000020012843617465676f7279496400002001205468726561644964000c0484506f73742077697468206769766e6520696420776173206d6f646572617465642e2c506f737444656c657465640c0028011c5665633c75383e000020012c466f72756d55736572496400004501017842547265654d61703c457874656e646564506f737449642c20626f6f6c3e000d047c506f73742077697468206769766e65206964207761732064656c657465642e3c506f737454657874557064617465641400200118506f73744964000020012c466f72756d557365724964000020012843617465676f7279496400002001205468726561644964000028011c5665633c75383e000e08a0506f7374207769746820676976656e2069642068616420697473207465787420757064617465642e4d01546865207365636f6e6420617267756d656e74207265666c6563747320746865206e756d626572206f6620746f74616c206564697473207768656e20746865207465787420757064617465206f63637572732e6843617465676f7279537469636b795468726561645570646174650c0020012843617465676f7279496400005101014842547265655365743c54687265616449643e00003d01013c50726976696c656765644163746f72000f0488537469636b7920746872656164207570646174656420666f722063617465676f72799043617465676f72794d656d626572736869704f664d6f64657261746f72557064617465640c0020012c4d6f64657261746f724964000020012843617465676f727949640000880110626f6f6c0010042501416e206d6f64657261746f72206162696c69747920746f206d6f64657261746520612063617465676f727920616e64206974732073756263617465676f726965732075706461746564085c4576656e747320666f722074686973206d6f64756c652e003d01083070616c6c65745f666f72756d3c50726976696c656765644163746f72040454000108104c656164000000244d6f64657261746f7204002001384d6f64657261746f7249643c543e000100004101083070616c6c65745f666f72756d50457874656e646564506f737449644f626a6563740c2843617465676f727949640120205468726561644964012018506f737449640120000c012c63617465676f72795f696420012843617465676f727949640001247468726561645f6964200120546872656164496400011c706f73745f6964200118506f7374496400004501042042547265654d617008044b01410104560188000400490100000049010000024d01004d0100000408410188005101042042547265655365740404540120000400f80000005501084c70616c6c65745f636f6e737469747574696f6e205261774576656e740410486173680124010444436f6e73747574696f6e416d656e646564080024011048617368000028011c5665633c75383e00001080456d697473206f6e20636f6e737469747574696f6e20616d656e646d656e742e2c506172616d65746572733a602d20636f6e737469747574696f6e207465787420686173684c2d20636f6e737469747574696f6e2074657874085c4576656e747320666f722074686973206d6f64756c652e005901083470616c6c65745f626f756e7479205261774576656e741c20426f756e7479496401201c456e747279496401201c42616c616e63650118204d656d62657249640120244163636f756e744964010060426f756e74794372656174696f6e506172616d6574657273015d01384f7261636c654a7564676d656e74016d01015c34426f756e7479437265617465640c00200120426f756e7479496400005d010160426f756e74794372656174696f6e506172616d6574657273000028011c5665633c75383e000014544120626f756e74792077617320637265617465642e1c506172616d733a2c2d20626f756e7479204944542d206372656174696f6e20706172616d6574657273442d20626f756e7479206d6574616461746150426f756e74794f7261636c6553776974636865641000200120426f756e74794964000061010154426f756e74794163746f723c4d656d62657249643e000061010154426f756e74794163746f723c4d656d62657249643e000061010154426f756e74794163746f723c4d656d62657249643e000118d0426f756e7479204f7261636c652053776974636865642062792063757272656e74206f7261636c65206f7220636f756e63696c2e1c506172616d733a2c2d20626f756e7479204944282d207377697463686572442d2063757272656e745f6f7261636c652c302d206e6577206f7261636c6540426f756e74795465726d696e617465641000200120426f756e74794964000061010154426f756e74794163746f723c4d656d62657249643e000061010154426f756e74794163746f723c4d656d62657249643e000061010154426f756e74794163746f723c4d656d62657249643e0002188c4120626f756e747920776173207465726d696e6174656420627920636f756e63696c2e1c506172616d733a2c2d20626f756e74792049444c2d20626f756e7479207465726d696e61746f72402d20626f756e74792063726561746f723c2d20626f756e7479206f7261636c6530426f756e747946756e6465640c00200120426f756e74794964000061010154426f756e74794163746f723c4d656d62657249643e000018011c42616c616e6365000314b44120626f756e7479207761732066756e6465642062792061206d656d626572206f72206120636f756e63696c2e1c506172616d733a2c2d20626f756e74792049443c2d20626f756e74792066756e646572402d2066756e64696e6720616d6f756e745c426f756e74794d617846756e64696e67526561636865640400200120426f756e7479496400040cbc4120626f756e747920686173207265616368656420697473207461726765742066756e64696e6720616d6f756e742e1c506172616d733a2c2d20626f756e74792049445c426f756e747946756e64696e675769746864726177616c0800200120426f756e74794964000061010154426f756e74794163746f723c4d656d62657249643e000510c041206d656d626572206f72206120636f756e63696c206861732077697468647261776e207468652066756e64696e672e1c506172616d733a2c2d20626f756e74792049443c2d20626f756e74792066756e64657274426f756e747943726561746f724368657272795769746864726177616c0800200120426f756e74794964000061010154426f756e74794163746f723c4d656d62657249643e000610f84120626f756e74792063726561746f72206861732077697468647261776e207468652063686572727920286d656d626572206f7220636f756e63696c292e1c506172616d733a2c2d20626f756e7479204944402d20626f756e74792063726561746f728c426f756e747943726561746f724f7261636c655265776172645769746864726177616c0800200120426f756e74794964000061010154426f756e74794163746f723c4d656d62657249643e00071015014120626f756e74792063726561746f72206861732077697468647261776e20746865206f7261636c652072657761726420286d656d626572206f7220636f756e63696c292e1c506172616d733a2c2d20626f756e7479204944402d20626f756e74792063726561746f7270426f756e74794f7261636c655265776172645769746864726177616c0c00200120426f756e74794964000061010154426f756e74794163746f723c4d656d62657249643e000018011c42616c616e6365000814f441204f7261636c65206861732077697468647261776e20746865206f7261636c652072657761726420286d656d626572206f7220636f756e63696c292e1c506172616d733a2c2d20626f756e7479204944402d20626f756e74792063726561746f723c2d204f7261636c652052657761726434426f756e747952656d6f7665640400200120426f756e7479496400090c544120626f756e7479207761732072656d6f7665642e1c506172616d733a2c2d20626f756e747920494448576f726b456e747279416e6e6f756e6365641400200120426f756e74794964000020011c456e747279496400002001204d656d626572496400000001244163636f756e744964000028011c5665633c75383e000a1c64576f726b20656e7472792077617320616e6e6f756e6365642e1c506172616d733a2c2d20626f756e7479204944482d206372656174656420656e7472792049444c2d20656e7472616e74206d656d626572204944502d207374616b696e67206163636f756e74204944482d20776f726b206465736372697074696f6e34576f726b5375626d69747465641000200120426f756e74794964000020011c456e747279496400002001204d656d6265724964000028011c5665633c75383e000b18305375626d697420776f726b2e1c506172616d733a2c2d20626f756e7479204944482d206372656174656420656e7472792049444c2d20656e7472616e74206d656d626572204944a82d20776f726b206461746120286465736372697074696f6e2c2055524c2c20424c4f422c206574632e295c4f7261636c654a7564676d656e745375626d69747465641000200120426f756e74794964000061010154426f756e74794163746f723c4d656d62657249643e00006d0101384f7261636c654a7564676d656e74000028011c5665633c75383e000c185c5375626d6974206f7261636c65206a7564676d656e742e1c506172616d733a2c2d20626f756e7479204944202d206f7261636c653c2d206a7564676d656e7420646174612c2d20726174696f6e616c6564576f726b456e7472616e7446756e647357697468647261776e0c00200120426f756e74794964000020011c456e747279496400002001204d656d6265724964000d145c576f726b20656e7472792077617320736c61736865642e1c506172616d733a2c2d20626f756e7479204944282d20656e7472792049444c2d20656e7472616e74206d656d62657220494464426f756e7479436f6e7472696275746f7252656d61726b65640c0061010154426f756e74794163746f723c4d656d62657249643e0000200120426f756e74794964000028011c5665633c75383e000e14a0426f756e747920636f6e7472696275746f72206d6164652061206d6573736167652072656d61726b1c506172616d733a342d20636f6e7472696275746f722c2d20626f756e7479206964242d206d65737361676550426f756e74794f7261636c6552656d61726b65640c0061010154426f756e74794163746f723c4d656d62657249643e0000200120426f756e74794964000028011c5665633c75383e000f148c426f756e7479206f7261636c65206d6164652061206d6573736167652072656d61726b1c506172616d733a202d206f7261636c652c2d20626f756e7479206964242d206d65737361676554426f756e7479456e7472616e7452656d61726b656410002001204d656d62657249640000200120426f756e74794964000020011c456e7472794964000028011c5665633c75383e00101890426f756e747920656e7472616e74206d6164652061206d6573736167652072656d61726b1c506172616d733a302d20656e7472616e745f69642c2d20626f756e7479206964282d20656e747279206964242d206d65737361676554426f756e747943726561746f7252656d61726b65640c0061010154426f756e74794163746f723c4d656d62657249643e0000200120426f756e74794964000028011c5665633c75383e00111490426f756e74792063726561746f72206d6164652061206d6573736167652072656d61726b1c506172616d733a242d2063726561746f722c2d20626f756e7479206964242d206d65737361676564576f726b5375626d697373696f6e506572696f64456e6465640800200120426f756e74794964000061010154426f756e74794163746f723c4d656d62657249643e0012105c576f726b20656e7472792077617320736c61736865642e1c506172616d733a2c2d20626f756e7479204944442d206f7261636c65202863616c6c65722960576f726b456e7472616e745374616b65556e6c6f636b65640c00200120426f756e74794964000020011c456e747279496400000001244163636f756e74496400131468576f726b20656e747279207374616b6520756e6c6f636b65642e1c506172616d733a2c2d20626f756e7479204944282d20656e7472792049443c2d207374616b65206163636f756e745c576f726b456e7472616e745374616b65536c61736865641000200120426f756e74794964000020011c456e747279496400000001244163636f756e744964000018011c42616c616e636500141864576f726b20656e747279207374616b6520736c61736865642e1c506172616d733a2c2d20626f756e7479204944282d20656e7472792049443c2d207374616b65206163636f756e74402d20736c617368656420616d6f756e747446756e6465725374617465426c6f6174426f6e6457697468647261776e0c00200120426f756e74794964000061010154426f756e74794163746f723c4d656d62657249643e000018011c42616c616e63650015141d0141206d656d626572206f72206120636f756e63696c2066756e646572206861732077697468647261776e207468652066756e64657220737461746520626c6f617420626f6e642e1c506172616d733a2c2d20626f756e74792049443c2d20626f756e74792066756e646572802d2066756e64657220537461746520626c6f617420626f6e6420616d6f756e747843726561746f725374617465426c6f6174426f6e6457697468647261776e0c00200120426f756e74794964000061010154426f756e74794163746f723c4d656d62657249643e000018011c42616c616e6365001614250141206d656d626572206f72206120636f756e63696c2063726561746f72206861732077697468647261776e207468652063726561746f7220737461746520626c6f617420626f6e642e1c506172616d733a2c2d20626f756e7479204944402d20626f756e74792063726561746f72842d2043726561746f7220537461746520626c6f617420626f6e6420616d6f756e74085c4576656e747320666f722074686973206d6f64756c652e005d01083470616c6c65745f626f756e747940426f756e7479506172616d6574657273101c42616c616e636501182c426c6f636b4e756d6265720110204d656d626572496401205c436c6f736564436f6e747261637457686974656c697374015101001c01186f7261636c6561010154426f756e74794163746f723c4d656d62657249643e000134636f6e74726163745f74797065650101b84173737572616e6365436f6e7472616374547970653c436c6f736564436f6e747261637457686974656c6973743e00011c63726561746f7261010154426f756e74794163746f723c4d656d62657249643e00011863686572727918011c42616c616e63650001346f7261636c655f72657761726418011c42616c616e6365000134656e7472616e745f7374616b6518011c42616c616e636500013066756e64696e675f747970656901018446756e64696e67547970653c426c6f636b4e756d6265722c2042616c616e63653e00006101083470616c6c65745f626f756e74792c426f756e74794163746f7204204d656d6265724964012001081c436f756e63696c000000184d656d62657204002001204d656d6265724964000100006501083470616c6c65745f626f756e7479544173737572616e6365436f6e747261637454797065045c436c6f736564436f6e747261637457686974656c6973740151010108104f70656e00000018436c6f73656404005101015c436c6f736564436f6e747261637457686974656c697374000100006901083470616c6c65745f626f756e74792c46756e64696e6754797065082c426c6f636b4e756d62657201101c42616c616e6365011801082450657270657475616c04011874617267657418011c42616c616e63650000001c4c696d6974656408011874617267657418011c42616c616e636500013866756e64696e675f706572696f6410012c426c6f636b4e756d626572000100006d01042042547265654d617008044b0120045601710100040075010000007101083470616c6c65745f626f756e74795c4f7261636c65576f726b456e7472794a7564676d656e74041c42616c616e6365011801081857696e6e657204011872657761726418011c42616c616e63650000002052656a6563746564080138736c617368696e675f73686172659c011c50657262696c6c000150616374696f6e5f6a757374696669636174696f6e28011c5665633c75383e000100007501000002790100790100000408207101007d01083870616c6c65745f7574696c697479205261774576656e74081c42616c616e63650118244163636f756e74496401000110205369676e616c6564040028011c5665633c75383e00000c7841207369676e616c2070726f706f73616c207761732065786563757465641c506172616d733adc2d205369676e616c20676976656e207768656e206372656174696e672074686520636f72726573706f6e64696e672070726f706f73616c3c52756e74696d655570677261646564040028011c5665633c75383e00010c78412072756e74696d652075706772616465207761732065786563757465641c506172616d733a6c2d204e657720636f646520656e636f64656420696e2062797465736455706461746564576f726b696e6747726f75704275646765740c0081010130576f726b696e6747726f7570000018011c42616c616e636500008501012c42616c616e63654b696e64000218d8416e206055706461746520576f726b696e672047726f757020427564676574602070726f706f73616c207761732065786563757465641c506172616d733ab42d20576f726b696e672067726f757020776869636820627564676574206973206265696e6720757064617465647c2d20416d6f756e74206f662062616c616e6365206265696e67206d6f7665645d012d20456e756d2076617269616e74207769746820706f73697469766520696e6469636174696e672066756e6473206d6f76656420746f72776172647320776f726b696e672067726f757020616e64206e65676174697665c0616e64206e656761746976652066756e6473206d6f76696e672066726f6d2074686520776f726b696e672067726f757030546f6b656e734275726e656408000001244163636f756e744964000018011c42616c616e636500031060416e206163636f756e74206275726e656420746f6b656e731c506172616d733a882d204163636f756e74204964206f6620746865206275726e696e6720746f6b656e73882d2042616c616e6365206275726e65642066726f6d2074686174206163636f756e74085c4576656e747320666f722074686973206d6f64756c652e008101103470616c6c65745f636f6d6d6f6e34776f726b696e675f67726f7570386974657261626c655f656e756d7330576f726b696e6747726f757000012414466f72756d0000001c53746f726167650001001c436f6e74656e740002003c4f7065726174696f6e73416c7068610003000c41707000040030446973747269627574696f6e000500384f7065726174696f6e73426574610006003c4f7065726174696f6e7347616d6d61000700284d656d62657273686970000800008501083470616c6c65745f636f6d6d6f6e2c42616c616e63654b696e6400010820506f736974697665000000204e65676174697665000100008901083870616c6c65745f636f6e74656e74205261774576656e746430436f6e74656e744163746f72018d01204d656d626572496401203843757261746f7247726f7570496401202443757261746f72496401201c566964656f49640120244368616e6e656c496401201c4368616e6e656c01910130446174614f626a6563744964012050456e676c69736841756374696f6e506172616d7301e501444f70656e41756374696f6e506172616d7301ed01344f70656e41756374696f6e49640120544e667449737375616e6365506172616d657465727301f1011c42616c616e63650118644368616e6e656c4372656174696f6e506172616d657465727301fd015c4368616e6e656c557064617465506172616d65746572730129025c566964656f4372656174696f6e506172616d657465727301310254566964656f557064617465506172616d6574657273013902544368616e6e656c50726976696c6567654c6576656c0108704d6f6465726174696f6e5065726d697373696f6e7342794c6576656c013d02645472616e73666572436f6d6d69746d656e745769746e6573730155023c50656e64696e675472616e7366657201d501244163636f756e7449640100785570646174654368616e6e656c5061796f757473506172616d65746572730159021c546f6b656e496401205c4368616e6e656c46756e647344657374696e6174696f6e016d0201d84c43757261746f7247726f757043726561746564040020013843757261746f7247726f757049640000007843757261746f7247726f75705065726d697373696f6e7355706461746564080020013843757261746f7247726f7570496400003d0201704d6f6465726174696f6e5065726d697373696f6e7342794c6576656c0001005443757261746f7247726f7570537461747573536574080020013843757261746f7247726f757049640000880110626f6f6c0002003043757261746f7241646465640c0020013843757261746f7247726f75704964000020012443757261746f7249640000a501015c4368616e6e656c4167656e745065726d697373696f6e730003003843757261746f7252656d6f766564080020013843757261746f7247726f75704964000020012443757261746f724964000400384368616e6e656c4372656174656410002001244368616e6e656c496400009101011c4368616e6e656c0000fd0101644368616e6e656c4372656174696f6e506172616d657465727300000001244163636f756e744964000500384368616e6e656c5570646174656410008d010130436f6e74656e744163746f7200002001244368616e6e656c496400002902015c4368616e6e656c557064617465506172616d657465727300005101015842547265655365743c446174614f626a65637449643e000600704368616e6e656c50726976696c6567654c6576656c5570646174656408002001244368616e6e656c496400000801544368616e6e656c50726976696c6567654c6576656c000700844368616e6e656c5374617465426c6f6174426f6e6456616c756555706461746564040018011c42616c616e63650008007c566964656f5374617465426c6f6174426f6e6456616c756555706461746564040018011c42616c616e6365000900504368616e6e656c41737365747352656d6f76656410008d010130436f6e74656e744163746f7200002001244368616e6e656c496400005101015842547265655365743c446174614f626a65637449643e00009101011c4368616e6e656c000a00384368616e6e656c44656c6574656408008d010130436f6e74656e744163746f7200002001244368616e6e656c4964000b00644368616e6e656c44656c6574656442794d6f64657261746f720c008d010130436f6e74656e744163746f7200002001244368616e6e656c4964000028011c5665633c75383e000c007c4368616e6e656c5669736962696c69747953657442794d6f64657261746f7210008d010130436f6e74656e744163746f7200002001244368616e6e656c49640000880110626f6f6c000028011c5665633c75383e000d009c4368616e6e656c50617573656446656174757265735570646174656442794d6f64657261746f7210008d010130436f6e74656e744163746f7200002001244368616e6e656c49640000c101018042547265655365743c5061757361626c654368616e6e656c466561747572653e000028011c5665633c75383e000e007c4368616e6e656c41737365747344656c6574656442794d6f64657261746f7210008d010130436f6e74656e744163746f7200002001244368616e6e656c496400005101015842547265655365743c446174614f626a65637449643e000028011c5665633c75383e000f00544368616e6e656c46756e647357697468647261776e10008d010130436f6e74656e744163746f7200002001244368616e6e656c4964000018011c42616c616e636500006d02015c4368616e6e656c46756e647344657374696e6174696f6e001000804368616e6e656c526577617264436c61696d6564416e6457697468647261776e10008d010130436f6e74656e744163746f7200002001244368616e6e656c4964000018011c42616c616e636500006d02015c4368616e6e656c46756e647344657374696e6174696f6e00110030566964656f4372656174656414008d010130436f6e74656e744163746f7200002001244368616e6e656c4964000020011c566964656f496400003102015c566964656f4372656174696f6e506172616d657465727300005101015842547265655365743c446174614f626a65637449643e00120030566964656f5570646174656410008d010130436f6e74656e744163746f72000020011c566964656f4964000039020154566964656f557064617465506172616d657465727300005101015842547265655365743c446174614f626a65637449643e00130030566964656f44656c6574656408008d010130436f6e74656e744163746f72000020011c566964656f49640014005c566964656f44656c6574656442794d6f64657261746f720c008d010130436f6e74656e744163746f72000020011c566964656f4964000028011c5665633c75383e00150074566964656f5669736962696c69747953657442794d6f64657261746f7210008d010130436f6e74656e744163746f72000020011c566964656f49640000880110626f6f6c000028011c5665633c75383e00160074566964656f41737365747344656c6574656442794d6f64657261746f7214008d010130436f6e74656e744163746f72000020011c566964656f496400005101015842547265655365743c446174614f626a65637449643e0000880110626f6f6c000028011c5665633c75383e001700544368616e6e656c5061796f757473557064617465640c00590201785570646174654368616e6e656c5061796f757473506172616d65746572730000190101504f7074696f6e3c446174614f626a65637449643e00000001244163636f756e744964001800504368616e6e656c526577617264557064617465640c0018011c42616c616e6365000018011c42616c616e636500002001244368616e6e656c496400190054456e676c69736841756374696f6e537461727465640c008d010130436f6e74656e744163746f72000020011c566964656f49640000e5010150456e676c69736841756374696f6e506172616d73001a00484f70656e41756374696f6e5374617274656410008d010130436f6e74656e744163746f72000020011c566964656f49640000ed0101444f70656e41756374696f6e506172616d7300002001344f70656e41756374696f6e4964001b00244e66744973737565640c008d010130436f6e74656e744163746f72000020011c566964656f49640000f10101544e667449737375616e6365506172616d6574657273001c00304e667444657374726f79656408008d010130436f6e74656e744163746f72000020011c566964656f4964001d003841756374696f6e4269644d61646510002001204d656d6265724964000020011c566964656f4964000018011c42616c616e63650000190101404f7074696f6e3c4d656d62657249643e001e004841756374696f6e42696443616e63656c656408002001204d656d6265724964000020011c566964656f4964001f003c41756374696f6e43616e63656c656408008d010130436f6e74656e744163746f72000020011c566964656f496400200054456e676c69736841756374696f6e536574746c65640c002001204d656d626572496400000001244163636f756e744964000020011c566964656f4964002100604269644d616465436f6d706c6574696e6741756374696f6e0c002001204d656d6265724964000020011c566964656f49640000190101404f7074696f6e3c4d656d62657249643e002200584f70656e41756374696f6e426964416363657074656410008d010130436f6e74656e744163746f72000020011c566964656f496400002001204d656d6265724964000018011c42616c616e6365002300304f6666657253746172746564100020011c566964656f496400008d010130436f6e74656e744163746f7200002001204d656d626572496400002901013c4f7074696f6e3c42616c616e63653e002400344f666665724163636570746564040020011c566964656f4964002500344f6666657243616e63656c6564080020011c566964656f496400008d010130436f6e74656e744163746f72002600404e667453656c6c4f726465724d6164650c0020011c566964656f496400008d010130436f6e74656e744163746f72000018011c42616c616e6365002700244e6674426f75676874080020011c566964656f496400002001204d656d6265724964002800384275794e6f7743616e63656c6564080020011c566964656f496400008d010130436f6e74656e744163746f72002900484275794e6f775072696365557064617465640c0020011c566964656f496400008d010130436f6e74656e744163746f72000018011c42616c616e6365002a00844e6674536c696e6765644261636b546f5468654f726967696e616c417274697374080020011c566964656f496400008d010130436f6e74656e744163746f72002b00504368616e6e656c4f776e657252656d61726b656408002001244368616e6e656c4964000028011c5665633c75383e002c046c4d65746170726f746f636f6c732072656c61746564206576656e74504368616e6e656c4167656e7452656d61726b65640c008d010130436f6e74656e744163746f7200002001244368616e6e656c4964000028011c5665633c75383e002d00404e66744f776e657252656d61726b65640c008d010130436f6e74656e744163746f72000020011c566964656f4964000028011c5665633c75383e002e0068496e697469616c697a65644368616e6e656c5472616e736665720c002001244368616e6e656c496400008d010130436f6e74656e744163746f720000d501013c50656e64696e675472616e73666572002f005443616e63656c4368616e6e656c5472616e7366657208002001244368616e6e656c496400008d010130436f6e74656e744163746f720030005c4368616e6e656c5472616e73666572416363657074656408002001244368616e6e656c49640000550201645472616e73666572436f6d6d69746d656e745769746e65737300310054476c6f62616c4e66744c696d6974557064617465640800710201384e66744c696d6974506572696f64000020010c753634003200584368616e6e656c4e66744c696d69745570646174656410008d010130436f6e74656e744163746f720000710201384e66744c696d6974506572696f6400002001244368616e6e656c4964000020010c75363400330040546f67676c65644e66744c696d6974730400880110626f6f6c0034004843726561746f72546f6b656e4973737565640c008d010130436f6e74656e744163746f7200002001244368616e6e656c4964000020011c546f6b656e4964003500085c4576656e747320666f722074686973206d6f64756c652e008d010c3870616c6c65745f636f6e74656e742c7065726d697373696f6e7330436f6e74656e744163746f720c3843757261746f7247726f7570496401202443757261746f7249640120204d656d62657249640120010c1c43757261746f72080020013843757261746f7247726f75704964000020012443757261746f724964000000184d656d62657204002001204d656d6265724964000100104c6561640002000091010c3870616c6c65745f636f6e74656e74147479706573344368616e6e656c5265636f72642c204d656d626572496401203843757261746f7247726f7570496401201c42616c616e63650118544368616e6e656c50726976696c6567654c6576656c01082c426c6f636b4e756d62657201101c546f6b656e49640120285472616e7366657249640120404368616e6e656c4173736574735365740195015c4368616e6e656c436f6c6c61626f7261746f72734d617001990144506175736564466561747572657353657401b90148526570617961626c65426c6f6174426f6e6401c901003801146f776e6572cd0101984368616e6e656c4f776e65723c4d656d62657249642c2043757261746f7247726f757049643e0001286e756d5f766964656f7320010c753634000134636f6c6c61626f7261746f72739901015c4368616e6e656c436f6c6c61626f7261746f72734d617000016463756d756c61746976655f7265776172645f636c61696d656418011c42616c616e636500013c70726976696c6567655f6c6576656c0801544368616e6e656c50726976696c6567654c6576656c00013c7061757365645f6665617475726573b9010144506175736564466561747572657353657400013c7472616e736665725f737461747573d1010179014368616e6e656c5472616e736665725374617475733c4d656d62657249642c2043757261746f7247726f757049642c2042616c616e63652c205472616e7366657249642c0a4368616e6e656c436f6c6c61626f7261746f72734d61702c3e000130646174615f6f626a65637473950101404368616e6e656c41737365747353657400013c6461696c795f6e66745f6c696d6974dd01016c4c696d6974506572506572696f643c426c6f636b4e756d6265723e0001407765656b6c795f6e66745f6c696d6974dd01016c4c696d6974506572506572696f643c426c6f636b4e756d6265723e0001446461696c795f6e66745f636f756e746572e101015c4e6674436f756e7465723c426c6f636b4e756d6265723e0001487765656b6c795f6e66745f636f756e746572e101015c4e6674436f756e7465723c426c6f636b4e756d6265723e00014063726561746f725f746f6b656e5f69641901013c4f7074696f6e3c546f6b656e49643e0001606368616e6e656c5f73746174655f626c6f61745f626f6e64c9010148526570617961626c65426c6f6174426f6e640000950110346672616d655f737570706f72741c73746f7261676544626f756e6465645f62747265655f7365743c426f756e646564425472656553657408045401200453000004005101012c42547265655365743c543e0000990110346672616d655f737570706f72741c73746f7261676544626f756e6465645f62747265655f6d61703c426f756e64656442547265654d61700c044b01200456019d01045300000400ad01013842547265654d61703c4b2c20563e00009d0110346672616d655f737570706f72741c73746f7261676544626f756e6465645f62747265655f7365743c426f756e646564425472656553657408045401a101045300000400a501012c42547265655365743c543e0000a101103870616c6c65745f636f6e74656e74147479706573386974657261626c655f656e756d735c4368616e6e656c416374696f6e5065726d697373696f6e000154545570646174654368616e6e656c4d657461646174610000006c4d616e6167654e6f6e566964656f4368616e6e656c417373657473000100684d616e6167654368616e6e656c436f6c6c61626f7261746f72730002004c557064617465566964656f4d6574616461746100030020416464566964656f000400444d616e616765566964656f4173736574730005003444656c6574654368616e6e656c0006002c44656c657465566964656f0007003c4d616e616765566964656f4e6674730008002c4167656e7452656d61726b0009003c5472616e736665724368616e6e656c000a0048436c61696d4368616e6e656c526577617264000b0068576974686472617746726f6d4368616e6e656c42616c616e6365000c0044497373756543726561746f72546f6b656e000d0068436c61696d43726561746f72546f6b656e506174726f6e616765000e0074496e6974416e644d616e61676543726561746f72546f6b656e53616c65000f006843726561746f72546f6b656e4973737565725472616e73666572001000784d616b6543726561746f72546f6b656e5065726d697373696f6e6c6573730011007c52656475636543726561746f72546f6b656e506174726f6e616765526174650012004c4d616e616765526576656e756553706c6974730013004c4465697373756543726561746f72546f6b656e00140000a5010420425472656553657404045401a101000400a901000000a901000002a10100ad01042042547265654d617008044b01200456019d01000400b101000000b101000002b50100b50100000408209d0100b90110346672616d655f737570706f72741c73746f7261676544626f756e6465645f62747265655f7365743c426f756e646564425472656553657408045401bd01045300000400c101012c42547265655365743c543e0000bd01143870616c6c65745f636f6e74656e742c7065726d697373696f6e733463757261746f725f67726f7570386974657261626c655f656e756d73585061757361626c654368616e6e656c4665617475726500011c504368616e6e656c46756e64735472616e736665720000003843726561746f72436173686f757400010040566964656f4e667449737375616e636500020034566964656f4372656174696f6e0003002c566964656f557064617465000400344368616e6e656c5570646174650005005043726561746f72546f6b656e49737375616e636500060000c1010420425472656553657404045401bd01000400c501000000c501000002bd0100c9010c3470616c6c65745f636f6d6d6f6e28626c6f61745f626f6e6448526570617961626c65426c6f6174426f6e6408244163636f756e74496401001c42616c616e636501180008015c72657061796d656e745f726573747269637465645f746f2d0101444f7074696f6e3c4163636f756e7449643e000118616d6f756e7418011c42616c616e63650000cd010c3870616c6c65745f636f6e74656e74147479706573304368616e6e656c4f776e657208204d656d626572496401203843757261746f7247726f7570496401200108184d656d62657204002001204d656d62657249640000003043757261746f7247726f7570040020013843757261746f7247726f7570496400010000d1010c3870616c6c65745f636f6e74656e74147479706573544368616e6e656c5472616e7366657253746174757314204d656d626572496401203843757261746f7247726f7570496401201c42616c616e63650118285472616e73666572496401205c4368616e6e656c436f6c6c61626f7261746f72734d61700199010108404e6f4163746976655472616e736665720000003c50656e64696e675472616e736665720400d501015d0150656e64696e675472616e736665723c4d656d62657249642c2043757261746f7247726f757049642c2042616c616e63652c205472616e7366657249642c0a4368616e6e656c436f6c6c61626f7261746f72734d61703e00010000d5010c3870616c6c65745f636f6e74656e741474797065733c50656e64696e675472616e7366657214204d656d626572496401203843757261746f7247726f7570496401201c42616c616e63650118285472616e73666572496401205c4368616e6e656c436f6c6c61626f7261746f72734d6170019901000801246e65775f6f776e6572cd0101984368616e6e656c4f776e65723c4d656d62657249642c2043757261746f7247726f757049643e00013c7472616e736665725f706172616d73d9010129015472616e73666572436f6d6d69746d656e74506172616d65746572733c4368616e6e656c436f6c6c61626f7261746f72734d61702c2042616c616e63652c205472616e7366657249643e0000d9010c3870616c6c65745f636f6e74656e74147479706573705472616e73666572436f6d6d69746d656e74506172616d65746572730c5c4368616e6e656c436f6c6c61626f7261746f72734d61700199011c42616c616e63650118285472616e7366657249640120000c01446e65775f636f6c6c61626f7261746f72739901015c4368616e6e656c436f6c6c61626f7261746f72734d6170000114707269636518011c42616c616e636500012c7472616e736665725f69642001285472616e7366657249640000dd010c3870616c6c65745f636f6e74656e74147479706573384c696d6974506572506572696f64042c426c6f636b4e756d6265720110000801146c696d697420010c75363400014c626c6f636b5f6e756d6265725f706572696f6410012c426c6f636b4e756d6265720000e1010c3870616c6c65745f636f6e74656e74147479706573284e6674436f756e746572042c426c6f636b4e756d62657201100008011c636f756e74657220010c7536340001306c6173745f7570646174656410012c426c6f636b4e756d6265720000e501103870616c6c65745f636f6e74656e740c6e667414747970657368456e676c69736841756374696f6e506172616d735265636f72640c2c426c6f636b4e756d62657201101c42616c616e63650118204d656d62657249640120001c01387374617274696e675f707269636518011c42616c616e63650001346275795f6e6f775f70726963652901013c4f7074696f6e3c42616c616e63653e00012477686974656c6973745101014842547265655365743c4d656d62657249643e0001247374617274735f6174e901014c4f7074696f6e3c426c6f636b4e756d6265723e0001206475726174696f6e10012c426c6f636b4e756d626572000140657874656e73696f6e5f706572696f6410012c426c6f636b4e756d6265720001306d696e5f6269645f7374657018011c42616c616e63650000e90104184f7074696f6e04045401100108104e6f6e6500000010536f6d650400100000010000ed01103870616c6c65745f636f6e74656e740c6e66741474797065735c4f70656e41756374696f6e506172616d735265636f72640c2c426c6f636b4e756d62657201101c42616c616e63650118204d656d62657249640120001401387374617274696e675f707269636518011c42616c616e63650001346275795f6e6f775f70726963652901013c4f7074696f6e3c42616c616e63653e0001247374617274735f6174e901014c4f7074696f6e3c426c6f636b4e756d6265723e00012477686974656c6973745101014842547265655365743c4d656d62657249643e0001446269645f6c6f636b5f6475726174696f6e10012c426c6f636b4e756d6265720000f101103870616c6c65745f636f6e74656e740c6e66741474797065736c4e667449737375616e6365506172616d65746572735265636f726408204d656d626572496401205c496e69745472616e73616374696f6e616c53746174757301f5010010011c726f79616c7479f901013c4f7074696f6e3c526f79616c74793e0001306e66745f6d6574616461746128012c4e66744d657461646174610001446e6f6e5f6368616e6e656c5f6f776e6572190101404f7074696f6e3c4d656d62657249643e000164696e69745f7472616e73616374696f6e616c5f737461747573f501015c496e69745472616e73616374696f6e616c5374617475730000f501103870616c6c65745f636f6e74656e740c6e667414747970657374496e69745472616e73616374696f6e616c5374617475735265636f72641050456e676c69736841756374696f6e506172616d7301e501444f70656e41756374696f6e506172616d7301ed01204d656d626572496401201c42616c616e6365011801141049646c65000000184275794e6f77040018011c42616c616e636500010058496e697469617465644f66666572546f4d656d62657208002001204d656d626572496400002901013c4f7074696f6e3c42616c616e63653e00020038456e676c69736841756374696f6e0400e5010150456e676c69736841756374696f6e506172616d730003002c4f70656e41756374696f6e0400ed0101444f70656e41756374696f6e506172616d7300040000f90104184f7074696f6e040454019c0108104e6f6e6500000010536f6d6504009c0000010000fd010c3870616c6c65745f636f6e74656e741474797065737c4368616e6e656c4372656174696f6e506172616d65746572735265636f7264143453746f72616765417373657473010102204d656d626572496401203c53746f726167654275636b65744964012050446973747269627574696f6e4275636b65744964010d021c42616c616e63650118001c0118617373657473110201544f7074696f6e3c53746f726167654173736574733e0001106d6574611501013c4f7074696f6e3c5665633c75383e3e000134636f6c6c61626f7261746f7273150201ac42547265654d61703c4d656d62657249642c204368616e6e656c4167656e745065726d697373696f6e733e00013c73746f726167655f6275636b6574735101016442547265655365743c53746f726167654275636b657449643e000150646973747269627574696f6e5f6275636b6574732102017842547265655365743c446973747269627574696f6e4275636b657449643e00018465787065637465645f6368616e6e656c5f73746174655f626c6f61745f626f6e6418011c42616c616e636500019465787065637465645f646174615f6f626a6563745f73746174655f626c6f61745f626f6e6418011c42616c616e6365000001020c3870616c6c65745f636f6e74656e741474797065734c53746f726167654173736574735265636f7264041c42616c616e63650118000801506f626a6563745f6372656174696f6e5f6c697374050201845665633c446174614f626a6563744372656174696f6e506172616d65746572733e00015865787065637465645f646174615f73697a655f66656518011c42616c616e6365000005020000020902000902083870616c6c65745f73746f7261676570446174614f626a6563744372656174696f6e506172616d6574657273000008011073697a6520010c75363400013c697066735f636f6e74656e745f696428011c5665633c75383e00000d02083870616c6c65745f73746f7261676568446973747269627574696f6e4275636b657449645265636f72640868446973747269627574696f6e4275636b657446616d696c79496401205c446973747269627574696f6e4275636b6574496e646578012000080174646973747269627574696f6e5f6275636b65745f66616d696c795f6964200168446973747269627574696f6e4275636b657446616d696c794964000164646973747269627574696f6e5f6275636b65745f696e64657820015c446973747269627574696f6e4275636b6574496e6465780000110204184f7074696f6e0404540101020108104e6f6e6500000010536f6d650400010200000100001502042042547265654d617008044b0120045601a501000400190200000019020000021d02001d020000040820a50100210204204254726565536574040454010d02000400250200000025020000020d020029020c3870616c6c65745f636f6e74656e74147479706573744368616e6e656c557064617465506172616d65746572735265636f7264103453746f7261676541737365747301010230446174614f626a65637449640120204d656d626572496401201c42616c616e63650118001801406173736574735f746f5f75706c6f6164110201544f7074696f6e3c53746f726167654173736574733e0001206e65775f6d6574611501013c4f7074696f6e3c5665633c75383e3e0001406173736574735f746f5f72656d6f76655101015842547265655365743c446174614f626a65637449643e000134636f6c6c61626f7261746f72732d0201cc4f7074696f6e3c42547265654d61703c4d656d62657249642c204368616e6e656c4167656e745065726d697373696f6e733e3e00019465787065637465645f646174615f6f626a6563745f73746174655f626c6f61745f626f6e6418011c42616c616e636500016c73746f726167655f6275636b6574735f6e756d5f7769746e657373e901012c4f7074696f6e3c7533323e00002d0204184f7074696f6e0404540115020108104e6f6e6500000010536f6d6504001502000001000031020c3870616c6c65745f636f6e74656e7414747970657374566964656f4372656174696f6e506172616d65746572735265636f72640c3453746f72616765417373657473010102544e667449737375616e6365506172616d657465727301f1011c42616c616e6365011800180118617373657473110201544f7074696f6e3c53746f726167654173736574733e0001106d6574611501013c4f7074696f6e3c5665633c75383e3e0001386175746f5f69737375655f6e6674350201744f7074696f6e3c4e667449737375616e6365506172616d65746572733e00017c65787065637465645f766964656f5f73746174655f626c6f61745f626f6e6418011c42616c616e636500019465787065637465645f646174615f6f626a6563745f73746174655f626c6f61745f626f6e6418011c42616c616e636500016c73746f726167655f6275636b6574735f6e756d5f7769746e65737310010c7533320000350204184f7074696f6e04045401f1010108104e6f6e6500000010536f6d650400f101000001000039020c3870616c6c65745f636f6e74656e741474797065736c566964656f557064617465506172616d65746572735265636f7264103453746f7261676541737365747301010230446174614f626a65637449640120544e667449737375616e6365506172616d657465727301f1011c42616c616e63650118001801406173736574735f746f5f75706c6f6164110201544f7074696f6e3c53746f726167654173736574733e0001206e65775f6d6574611501013c4f7074696f6e3c5665633c75383e3e0001406173736574735f746f5f72656d6f76655101015842547265655365743c446174614f626a65637449643e0001386175746f5f69737375655f6e6674350201744f7074696f6e3c4e667449737375616e6365506172616d65746572733e00019465787065637465645f646174615f6f626a6563745f73746174655f626c6f61745f626f6e6418011c42616c616e636500016c73746f726167655f6275636b6574735f6e756d5f7769746e657373e901012c4f7074696f6e3c7533323e00003d02042042547265654d617008044b010804560141020004004d0200000041020420425472656553657404045401450200040049020000004502143870616c6c65745f636f6e74656e742c7065726d697373696f6e733463757261746f725f67726f7570386974657261626c655f656e756d735c436f6e74656e744d6f6465726174696f6e416374696f6e0001202448696465566964656f0000002c486964654368616e6e656c000100684368616e67654368616e6e656c466561747572655374617475730400bd0101585061757361626c654368616e6e656c466561747572650002002c44656c657465566964656f0003003444656c6574654368616e6e656c0004004444656c657465566964656f4173736574730400880110626f6f6c0005006c44656c6574654e6f6e566964656f4368616e6e656c417373657473000600585570646174654368616e6e656c4e66744c696d6974730007000049020000024502004d020000025102005102000004080841020055020c3870616c6c65745f636f6e74656e74147479706573705472616e73666572436f6d6d69746d656e74506172616d65746572730c5c4368616e6e656c436f6c6c61626f7261746f72734d61700115021c42616c616e63650118285472616e7366657249640120000c01446e65775f636f6c6c61626f7261746f72731502015c4368616e6e656c436f6c6c61626f7261746f72734d6170000114707269636518011c42616c616e636500012c7472616e736665725f69642001285472616e736665724964000059020c3870616c6c65745f636f6e74656e74147479706573905570646174654368616e6e656c5061796f757473506172616d65746572735265636f72640c7c4368616e6e656c5061796f7574735061796c6f6164506172616d6574657273015d021c42616c616e636501181048617368012400140128636f6d6d69746d656e74610201304f7074696f6e3c486173683e00011c7061796c6f61646502019c4f7074696f6e3c4368616e6e656c5061796f7574735061796c6f6164506172616d65746572733e00014c6d696e5f636173686f75745f616c6c6f7765642901013c4f7074696f6e3c42616c616e63653e00014c6d61785f636173686f75745f616c6c6f7765642901013c4f7074696f6e3c42616c616e63653e0001606368616e6e656c5f636173686f7574735f656e61626c6564690201304f7074696f6e3c626f6f6c3e00005d020c3870616c6c65745f636f6e74656e74147479706573944368616e6e656c5061796f7574735061796c6f6164506172616d65746572735265636f7264041c42616c616e63650118000c01586f626a6563745f6372656174696f6e5f706172616d7309020170446174614f626a6563744372656174696f6e506172616d657465727300015865787065637465645f646174615f73697a655f66656518011c42616c616e636500019465787065637465645f646174615f6f626a6563745f73746174655f626c6f61745f626f6e6418011c42616c616e63650000610204184f7074696f6e04045401240108104e6f6e6500000010536f6d650400240000010000650204184f7074696f6e040454015d020108104e6f6e6500000010536f6d6504005d020000010000690204184f7074696f6e04045401880108104e6f6e6500000010536f6d6504008800000100006d020c3870616c6c65745f636f6e74656e741474797065735c4368616e6e656c46756e647344657374696e6174696f6e04244163636f756e74496401000108244163636f756e74496404000001244163636f756e74496400000034436f756e63696c4275646765740001000071020c3870616c6c65745f636f6e74656e74147479706573384e66744c696d6974506572696f64000108144461696c79000000185765656b6c79000100007502083870616c6c65745f73746f72616765205261774576656e74303c53746f726167654275636b65744964012020576f726b65724964012030446174614f626a656374496401204055706c6f6164506172616d6574657273017902144261674964017d023044796e616d69634261674964018502244163636f756e74496401001c42616c616e6365011868446973747269627574696f6e4275636b657446616d696c794964012050446973747269627574696f6e4275636b65744964010d025c446973747269627574696f6e4275636b6574496e64657801207044796e616d69634261674372656174696f6e506172616d657465727301890201a85053746f726167654275636b657443726561746564140020013c53746f726167654275636b657449640000190101404f7074696f6e3c576f726b657249643e0000880110626f6f6c000020010c753634000020010c75363400001c94456d697473206f6e206372656174696e67207468652073746f72616765206275636b65742e18506172616d734c2d2073746f72616765206275636b6574204944402d20696e766974656420776f726b65726c2d20666c61672022616363657074696e675f6e65775f6261677322642d2073697a65206c696d697420666f7220766f75636865722c702d206f626a65637473206c696d697420666f7220766f75636865722c7c53746f726167654275636b6574496e7669746174696f6e41636365707465640c0020013c53746f726167654275636b657449640000200120576f726b6572496400000001244163636f756e744964000114c4456d697473206f6e20616363657074696e67207468652073746f72616765206275636b657420696e7669746174696f6e2e18506172616d734c2d2073746f72616765206275636b65742049444c2d20696e766974656420776f726b65722049445c2d207472616e736163746f72206163636f756e742049446c53746f726167654275636b65747355706461746564466f724261670c007d020114426167496400005101016442547265655365743c53746f726167654275636b657449643e00005101016442547265655365743c53746f726167654275636b657449643e000214a8456d697473206f6e207570646174696e672073746f72616765206275636b65747320666f72206261672e18506172616d73202d20626167204944982d2073746f72616765206275636b65747320746f2061646420494420636f6c6c656374696f6ea42d2073746f72616765206275636b65747320746f2072656d6f766520494420636f6c6c656374696f6e4c446174614f626a6563747355706c6f616465640c005101015842547265655365743c446174614f626a65637449643e00007902014055706c6f6164506172616d6574657273000018011c42616c616e636500031480456d697473206f6e2075706c6f6164696e672064617461206f626a656374732e18506172616d73482d2064617461206f626a6563747320494473782d20696e697469616c2075706c6f6164696e6720706172616d6574657273782d20737461746520626c6f617420626f6e6420666f72206f626a656374736853746f726167654f70657261746f724d657461646174615365740c0020013c53746f726167654275636b657449640000200120576f726b65724964000028011c5665633c75383e000414bc456d697473206f6e2073657474696e67207468652073746f72616765206f70657261746f72206d657461646174612e18506172616d734c2d2073746f72616765206275636b65742049444c2d20696e766974656420776f726b6572204944282d206d657461646174617453746f726167654275636b6574566f75636865724c696d6974735365740c0020013c53746f726167654275636b65744964000020010c753634000020010c753634000514cc456d697473206f6e2073657474696e67207468652073746f72616765206275636b657420766f7563686572206c696d6974732e18506172616d734c2d2073746f72616765206275636b6574204944782d206e657720746f74616c206f626a656374732073697a65206c696d6974802d206e657720746f74616c206f626a65637473206e756d626572206c696d69746850656e64696e67446174614f626a656374734163636570746564100020013c53746f726167654275636b657449640000200120576f726b6572496400007d020114426167496400005101015842547265655365743c446174614f626a65637449643e000618a0456d697473206f6e20616363657074696e672070656e64696e672064617461206f626a656374732e18506172616d734c2d2073746f72616765206275636b6574204944842d20776f726b6572204944202873746f726167652070726f766964657220494429202d20626167204944582d2070656e64696e672064617461206f626a656374738053746f726167654275636b6574496e7669746174696f6e43616e63656c6c6564040020013c53746f726167654275636b6574496400070cc8456d697473206f6e2063616e63656c6c696e67207468652073746f72616765206275636b657420696e7669746174696f6e2e18506172616d734c2d2073746f72616765206275636b65742049447053746f726167654275636b65744f70657261746f72496e7669746564080020013c53746f726167654275636b657449640000200120576f726b65724964000810c0456d697473206f6e207468652073746f72616765206275636b6574206f70657261746f7220696e7669746174696f6e2e18506172616d734c2d2073746f72616765206275636b6574204944a82d206f70657261746f7220776f726b6572204944202873746f726167652070726f7669646572204944297053746f726167654275636b65744f70657261746f7252656d6f766564040020013c53746f726167654275636b6574496400090cb4456d697473206f6e207468652073746f72616765206275636b6574206f70657261746f722072656d6f76616c2e18506172616d734c2d2073746f72616765206275636b65742049446c55706c6f6164696e67426c6f636b537461747573557064617465640400880110626f6f6c000a0c0501456d697473206f6e206368616e67696e67207468652073697a652d62617365642070726963696e67206f66206e6577206f626a656374732075706c6f616465642e18506172616d73302d206e6577207374617475737c446174614f626a6563745065724d6567616279746546656555706461746564040018011c42616c616e6365000b0c0501456d697473206f6e206368616e67696e67207468652073697a652d62617365642070726963696e67206f66206e6577206f626a656374732075706c6f616465642e18506172616d734c2d206e657720646174612073697a65206665658053746f726167654275636b6574735065724261674c696d697455706461746564040010010c753332000c0cf4456d697473206f6e206368616e67696e6720746865202253746f72616765206275636b657473207065722062616722206e756d626572206c696d69742e18506172616d732c2d206e6577206c696d69749453746f726167654275636b657473566f75636865724d61784c696d69747355706461746564080020010c753634000020010c753634000d10ec456d697473206f6e206368616e67696e6720746865202253746f72616765206275636b65747320766f7563686572206d6178206c696d697473222e18506172616d73602d206e6577206f626a656374732073697a65206c696d6974682d206e6577206f626a65637473206e756d626572206c696d697440446174614f626a656374734d6f7665640c007d020114426167496400007d020114426167496400005101015842547265655365743c446174614f626a65637449643e000e14a8456d697473206f6e206d6f76696e672064617461206f626a65637473206265747765656e20626167732e18506172616d733c2d20736f7572636520626167204944502d2064657374696e6174696f6e20626167204944442d2064617461206f626a6563742049447348446174614f626a6563747344656c657465640c000001244163636f756e74496400007d020114426167496400005101015842547265655365743c446174614f626a65637449643e000f14a4456d697473206f6e2064617461206f626a656374732064656c6574696f6e2066726f6d20626167732e18506172616d73942d206163636f756e7420494420666f722074686520737461746520626c6f617420626f6e64202d20626167204944442d2064617461206f626a656374204944736853746f726167654275636b657453746174757355706461746564080020013c53746f726167654275636b657449640000880110626f6f6c00101098456d697473206f6e2073746f72616765206275636b657420737461747573207570646174652e18506172616d734c2d2073746f72616765206275636b6574204944302d206e6577207374617475733c557064617465426c61636b6c69737408008d02014442547265655365743c5665633c75383e3e00008d02014442547265655365743c5665633c75383e3e001110c4456d697473206f6e207570646174696e672074686520626c61636b6c69737420776974682064617461206861736865732e18506172616d73942d2068617368657320746f2072656d6f76652066726f6d2074686520626c61636b6c697374802d2068617368657320746f2061646420746f2074686520626c61636b6c6973744444796e616d696342616744656c6574656404008502013044796e616d6963426167496400120c80456d697473206f6e2064656c6574696e6720612064796e616d6963206261672e18506172616d73402d2064796e616d6963206261672049444444796e616d69634261674372656174656408008902017044796e616d69634261674372656174696f6e506172616d657465727300005101015842547265655365743c446174614f626a65637449643e00131080456d697473206f6e206372656174696e6720612064796e616d6963206261672e18506172616d73842d2064796e616d696320626167206372656174696f6e20706172616d65746572736c2d2075706c6f616465642064617461206f626a656374732069647338566f75636865724368616e676564080020013c53746f726167654275636b6574496400009502011c566f7563686572001410cc456d697473206f6e206368616e67696e672074686520766f756368657220666f7220612073746f72616765206275636b65742e18506172616d734c2d2073746f72616765206275636b6574204944342d206e657720766f75636865725053746f726167654275636b657444656c65746564040020013c53746f726167654275636b6574496400150c84456d697473206f6e2073746f72616765206275636b65742064656c6574696e672e18506172616d734c2d2073746f72616765206275636b6574204944dc4e756d6265724f6653746f726167654275636b657473496e44796e616d69634261674372656174696f6e506f6c6963795570646174656408009902013844796e616d696342616754797065000010010c7533320016103d01456d697473206f6e207570646174696e6720746865206e756d626572206f662073746f72616765206275636b65747320696e2064796e616d696320626167206372656174696f6e20706f6c6963792e18506172616d73482d2064796e616d69632062616720747970657c2d206e6577206e756d626572206f662073746f72616765206275636b6574737c446973747269627574696f6e4275636b657446616d696c79437265617465640400200168446973747269627574696f6e4275636b657446616d696c79496400170cb4456d697473206f6e206372656174696e6720646973747269627574696f6e206275636b65742066616d696c792e18506172616d737c2d20646973747269627574696f6e2066616d696c79206275636b65742049447c446973747269627574696f6e4275636b657446616d696c7944656c657465640400200168446973747269627574696f6e4275636b657446616d696c79496400180cb4456d697473206f6e2064656c6574696e6720646973747269627574696f6e206275636b65742066616d696c792e18506172616d737c2d20646973747269627574696f6e2066616d696c79206275636b657420494464446973747269627574696f6e4275636b6574437265617465640c00200168446973747269627574696f6e4275636b657446616d696c7949640000880110626f6f6c00000d020150446973747269627574696f6e4275636b6574496400191498456d697473206f6e206372656174696e6720646973747269627574696f6e206275636b65742e18506172616d737c2d20646973747269627574696f6e206275636b65742066616d696c79204944502d20616363657074696e67206e65772062616773602d20646973747269627574696f6e206275636b65742049447c446973747269627574696f6e4275636b65745374617475735570646174656408000d020150446973747269627574696f6e4275636b657449640000880110626f6f6c001a10ec456d697473206f6e2073746f72616765206275636b657420737461747573207570646174652028616363657074696e67206e65772062616773292e18506172616d73602d20646973747269627574696f6e206275636b6574204944842d206e6577207374617475732028616363657074696e67206e657720626167732964446973747269627574696f6e4275636b657444656c6574656404000d020150446973747269627574696f6e4275636b65744964001b0c98456d697473206f6e2064656c6574696e6720646973747269627574696f6e206275636b65742e18506172616d73602d20646973747269627574696f6e206275636b657420494480446973747269627574696f6e4275636b65747355706461746564466f7242616710007d02011442616749640000200168446973747269627574696f6e4275636b657446616d696c79496400005101018442547265655365743c446973747269627574696f6e4275636b6574496e6465783e00005101018442547265655365743c446973747269627574696f6e4275636b6574496e6465783e001c14bc456d697473206f6e207570646174696e6720646973747269627574696f6e206275636b65747320666f72206261672e18506172616d73202d20626167204944982d2073746f72616765206275636b65747320746f2061646420494420636f6c6c656374696f6ea42d2073746f72616765206275636b65747320746f2072656d6f766520494420636f6c6c656374696f6e94446973747269627574696f6e4275636b6574735065724261674c696d697455706461746564040010010c753332001d0c0901456d697473206f6e206368616e67696e67207468652022446973747269627574696f6e206275636b657473207065722062616722206e756d626572206c696d69742e18506172616d732c2d206e6577206c696d697474446973747269627574696f6e4275636b65744d6f64655570646174656408000d020150446973747269627574696f6e4275636b657449640000880110626f6f6c001e10e0456d697473206f6e2073746f72616765206275636b6574206d6f6465207570646174652028646973747269627574696e6720666c6167292e18506172616d73602d20646973747269627574696f6e206275636b6574204944382d20646973747269627574696e67a446616d696c696573496e44796e616d69634261674372656174696f6e506f6c6963795570646174656408009902013844796e616d69634261675479706500009d0201a442547265654d61703c446973747269627574696f6e4275636b657446616d696c7949642c207533323e001f102d01456d697473206f6e2064796e616d696320626167206372656174696f6e20706f6c696379207570646174652028646973747269627574696f6e206275636b65742066616d696c696573292e18506172616d73482d2064796e616d6963206261672074797065742d2066616d696c69657320616e64206275636b6574206e756d6265727384446973747269627574696f6e4275636b65744f70657261746f72496e766974656408000d020150446973747269627574696f6e4275636b657449640000200120576f726b657249640020101101456d697473206f6e206372656174696e67206120646973747269627574696f6e206275636b657420696e7669746174696f6e20666f7220746865206f70657261746f722e18506172616d73602d20646973747269627574696f6e206275636b65742049442c2d20776f726b657220494494446973747269627574696f6e4275636b6574496e7669746174696f6e43616e63656c6c656408000d020150446973747269627574696f6e4275636b657449640000200120576f726b657249640021101501456d697473206f6e2063616e63656c696e67206120646973747269627574696f6e206275636b657420696e7669746174696f6e20666f7220746865206f70657261746f722e18506172616d73602d20646973747269627574696f6e206275636b6574204944502d206f70657261746f7220776f726b657220494490446973747269627574696f6e4275636b6574496e7669746174696f6e41636365707465640800200120576f726b6572496400000d020150446973747269627574696f6e4275636b657449640022101501456d697473206f6e20616363657074696e67206120646973747269627574696f6e206275636b657420696e7669746174696f6e20666f7220746865206f70657261746f722e18506172616d732c2d20776f726b6572204944602d20646973747269627574696f6e206275636b657420494474446973747269627574696f6e4275636b65744d657461646174615365740c00200120576f726b6572496400000d020150446973747269627574696f6e4275636b65744964000028011c5665633c75383e0023140101456d697473206f6e2073657474696e6720746865206d65746164617461206279206120646973747269627574696f6e206275636b6574206f70657261746f722e18506172616d732c2d20776f726b6572204944602d20646973747269627574696f6e206275636b6574204944282d206d6574616461746184446973747269627574696f6e4275636b65744f70657261746f7252656d6f76656408000d020150446973747269627574696f6e4275636b657449640000200120576f726b65724964002410c8456d697473206f6e2074686520646973747269627574696f6e206275636b6574206f70657261746f722072656d6f76616c2e18506172616d73602d20646973747269627574696f6e206275636b6574204944842d20646973747269627574696f6e206275636b6574206f70657261746f722049448c446973747269627574696f6e4275636b657446616d696c794d657461646174615365740800200168446973747269627574696f6e4275636b657446616d696c794964000028011c5665633c75383e002510f8456d697473206f6e2073657474696e6720746865206d65746164617461206279206120646973747269627574696f6e206275636b65742066616d696c792e18506172616d737c2d20646973747269627574696f6e206275636b65742066616d696c79204944282d206d6574616461746190446174614f626a6563745374617465426c6f6174426f6e6456616c756555706461746564040018011c42616c616e636500260ccc456d697473206f6e207570646174696e67207468652064617461206f626a65637420737461746520626c6f617420626f6e642e18506172616d73602d20737461746520626c6f617420626f6e642076616c756548446174614f626a65637473557064617465640c007902014055706c6f6164506172616d657465727300005101015842547265655365743c446174614f626a65637449643e00005101015842547265655365743c446174614f626a65637449643e0027140d01456d697473206f6e2073746f7261676520617373657473206265696e672075706c6f6164656420616e642064656c65746564206174207468652073616d652074696d6518506172616d73482d2055706c6f6164506172616d6574657273742d20496473206f66207468652075706c6f61646564206f626a65637473702d20496473206f66207468652072656d6f766564206f626a656374735c53746f726167654f70657261746f7252656d61726b65640c00200120576f726b65724964000020013c53746f726167654275636b65744964000028011c5665633c75383e002814a4456d697473206f6e2053746f72616765204f70657261746f72206d616b696e6720612072656d61726b18506172616d73582d206f70657261746f72277320776f726b65722069644c2d2073746f72616765206275636b6574206964402d2072656d61726b206d65737361676570446973747269627574696f6e4f70657261746f7252656d61726b65640c00200120576f726b6572496400000d020150446973747269627574696f6e4275636b65744964000028011c5665633c75383e002914b8456d697473206f6e20446973747269627574696f6e204f70657261746f72206d616b696e6720612072656d61726b18506172616d73582d206f70657261746f72277320776f726b6572206964602d20646973747269627574696f6e206275636b6574206964402d2072656d61726b206d6573736167650c5c4576656e747320666f722074686973206d6f64756c652e003853746f72616765206576656e74737902083870616c6c65745f73746f726167655855706c6f6164506172616d65746572735265636f72640c144261674964017d02244163636f756e74496401001c42616c616e63650118001401186261675f69647d02011442616749640001506f626a6563745f6372656174696f6e5f6c697374050201845665633c446174614f626a6563744372656174696f6e506172616d65746572733e00018873746174655f626c6f61745f626f6e645f736f757263655f6163636f756e745f69640001244163636f756e74496400015865787065637465645f646174615f73697a655f66656518011c42616c616e636500019465787065637465645f646174615f6f626a6563745f73746174655f626c6f61745f626f6e6418011c42616c616e636500007d02083870616c6c65745f73746f726167652442616749645479706508204d656d62657249640120244368616e6e656c4964012001081853746174696304008102012c53746174696342616749640000001c44796e616d696304008502019444796e616d69634261674964547970653c4d656d62657249642c204368616e6e656c49643e000100008102083870616c6c65745f73746f726167652c53746174696342616749640001081c436f756e63696c00000030576f726b696e6747726f7570040081010130576f726b696e6747726f7570000100008502083870616c6c65745f73746f726167654044796e616d696342616749645479706508204d656d62657249640120244368616e6e656c496401200108184d656d62657204002001204d656d62657249640000001c4368616e6e656c04002001244368616e6e656c4964000100008902083870616c6c65745f73746f726167657844796e4261674372656174696f6e506172616d65746572735265636f726414144261674964018502244163636f756e74496401001c42616c616e636501183c53746f726167654275636b65744964012050446973747269627574696f6e4275636b65744964010d02001c01186261675f69648502011442616749640001506f626a6563745f6372656174696f6e5f6c697374050201845665633c446174614f626a6563744372656174696f6e506172616d65746572733e00018873746174655f626c6f61745f626f6e645f736f757263655f6163636f756e745f69640001244163636f756e74496400015865787065637465645f646174615f73697a655f66656518011c42616c616e636500019465787065637465645f646174615f6f626a6563745f73746174655f626c6f61745f626f6e6418011c42616c616e636500013c73746f726167655f6275636b6574735101016442547265655365743c53746f726167654275636b657449643e000150646973747269627574696f6e5f6275636b6574732102017842547265655365743c446973747269627574696f6e4275636b657449643e00008d020420425472656553657404045401280004009102000000910200000228009502083870616c6c65745f73746f726167651c566f7563686572000010012873697a655f6c696d697420010c7536340001346f626a656374735f6c696d697420010c75363400012473697a655f7573656420010c7536340001306f626a656374735f7573656420010c75363400009902083870616c6c65745f73746f726167653844796e616d696342616754797065000108184d656d6265720000001c4368616e6e656c000100009d02042042547265654d617008044b012004560110000400a102000000a102000002a50200a50200000408201000a9020c5070616c6c65745f70726f6a6563745f746f6b656e186576656e7473205261774576656e74281c42616c616e63650118284a6f7942616c616e636501181c546f6b656e49640120244163636f756e7449640100204d656d626572496401202c426c6f636b4e756d6265720110385472616e73666572506f6c69637901ad025c546f6b656e49737375616e6365506172616d657465727301b1024856616c6964617465645472616e736665727301e50224546f6b656e53616c65010903014858546f6b656e416d6f756e745472616e73666572726564100020011c546f6b656e496400002001204d656d62657249640000e502014856616c6964617465645472616e7366657273000028011c5665633c75383e000018ac546f6b656e20616d6f756e74206973207472616e736665727265642066726f6d2073726320746f206473741c506172616d733a482d20746f6b656e206964656e746966696572482d20736f75726365206d656d62657220696459012d206d617020636f6e7461696e696e672076616c696461746564206f7574707574732028616d6f756e7420696e646578656420627920286d656d6265725f6964202b206163636f756e74206578697374616e63652929542d207472616e736665722773206d6574616461746178546f6b656e416d6f756e745472616e736665727265644279497373756572100020011c546f6b656e496400002001204d656d62657249640000e502014856616c6964617465645472616e7366657273000028011c5665633c75383e00012088546f6b656e20616d6f756e74207472616e73666572726564206279206973737565721c506172616d733a482d20746f6b656e206964656e7469666965726c2d20736f75726365202869737375657229206d656d626572206964882d206d617020636f6e7461696e696e672076616c696461746564206f7574707574732d01202028616d6f756e742c206f70742e2076657374696e67207363686564756c652c206f70742e2076657374696e6720636c65616e7570206b657929206461746120696e6465786564206279882020286163636f756e745f6964202b206163636f756e74206578697374616e636529542d207472616e736665722773206d6574616461746160506174726f6e61676552617465446563726561736564546f080020011c546f6b656e496400000d03012c5065727175696e74696c6c00021060506174726f6e6167652072617465206465637265617365641c506172616d733a482d20746f6b656e206964656e746966696572502d206e657720706174726f6e616765207261746558506174726f6e616765437265646974436c61696d65640c0020011c546f6b656e4964000018011c42616c616e636500002001204d656d62657249640003148c506174726f6e6167652063726564697420636c61696d65642062792063726561746f721c506172616d733a482d20746f6b656e206964656e7469666965723c2d2063726564697420616d6f756e742c2d206d656d62657220696448526576656e756553706c6974497373756564100020011c546f6b656e4964000010012c426c6f636b4e756d626572000010012c426c6f636b4e756d62657200001801284a6f7942616c616e636500041850526576656e75652053706c6974206973737565641c506172616d733a482d20746f6b656e206964656e746966696572782d207374617274696e6720626c6f636b20666f72207468652073706c69745c2d206475726174696f6e206f66207468652073706c6974742d204a4f5920616c6c6f636174656420666f72207468652073706c697454526576656e756553706c697446696e616c697a65640c0020011c546f6b656e496400000001244163636f756e74496400001801284a6f7942616c616e63650005145c526576656e75652053706c69742066696e616c697a65641c506172616d733a482d20746f6b656e206964656e746966696572a42d207265636f76657279206163636f756e7420666f7220746865206c6566746f7665722066756e6473402d206c6566746f7665722066756e64735c55736572506172746963697061746564496e53706c6974140020011c546f6b656e496400002001204d656d6265724964000018011c42616c616e636500001801284a6f7942616c616e63650000100138526576656e756553706c6974496400061c8855736572207061727469706174656420696e206120726576656e75652073706c69741c506172616d733a482d20746f6b656e206964656e746966696572642d207061727469636970616e742773206d656d6265722069647c2d207573657220616c6c6f6361746564207374616b65642062616c616e63657c2d206469766964656e6420616d6f756e7420284a4f5929206772616e746564682d20726576656e75652073706c6974206964656e74696669657240526576656e756553706c69744c6566740c0020011c546f6b656e496400002001204d656d6265724964000018011c42616c616e63650007145c55736572206c65667420726576656e75652073706c69741c506172616d733a482d20746f6b656e206964656e746966696572702d2065782d7061727469636970616e742773206d656d626572206964442d20616d6f756e7420756e7374616b6564544d656d6265724a6f696e656457686974656c6973740c0020011c546f6b656e496400002001204d656d62657249640000ad0201385472616e73666572506f6c6963790008145c4d656d626572206a6f696e65642077686974656c6973741c506172616d733a482d20746f6b656e206964656e7469666965722c2d206d656d626572206964642d206f6e676f696e67207472616e7366657220706f6c6963793c4163636f756e744475737465644279100020011c546f6b656e496400002001204d656d626572496400000001244163636f756e7449640000ad0201385472616e73666572506f6c696379000918384163636f756e74204475737465641c506172616d733a482d20746f6b656e206964656e7469666965729c2d206964206f662074686520647573746564206163636f756e74206f776e6572206d656d6265728c2d206163636f756e7420746861742063616c6c6564207468652065787472696e736963402d206f6e676f696e6720706f6c69637934546f6b656e4465697373756564040020011c546f6b656e4964000a0c38546f6b656e2044656973737565641c506172616d733a282d20746f6b656e2069642c546f6b656e497373756564080020011c546f6b656e49640000b102015c546f6b656e49737375616e6365506172616d6574657273000b1030546f6b656e204973737565641c506172616d733a282d20746f6b656e2069646c2d20746f6b656e2069737375616e636520706172616d657465727350546f6b656e53616c65496e697469616c697a6564100020011c546f6b656e4964000010012c546f6b656e53616c654964000009030124546f6b656e53616c6500001501013c4f7074696f6e3c5665633c75383e3e000c1864546f6b652053616c652077617320496e697469616c697a65641c506172616d733a282d20746f6b656e2069643c2d20746f6b656e2073616c65206964442d20746f6b656e2073616c652064617461542d20746f6b656e2073616c65206d65746164617461605570636f6d696e67546f6b656e53616c6555706461746564100020011c546f6b656e4964000010012c546f6b656e53616c6549640000e901014c4f7074696f6e3c426c6f636b4e756d6265723e0000e901014c4f7074696f6e3c426c6f636b4e756d6265723e000d187c5570636f6d696e6720546f6b656e2053616c652077617320557064617465641c506172616d733a282d20746f6b656e2069643c2d20746f6b656e2073616c65206964582d206e65772073616c6520737461727420626c6f636b4c2d206e65772073616c65206475726174696f6e54546f6b656e735075726368617365644f6e53616c65100020011c546f6b656e4964000010012c546f6b656e53616c654964000018011c42616c616e636500002001204d656d6265724964000e1860546f6b656e7320507572636861736564204f6e2053616c651c506172616d733a282d20746f6b656e2069643c2d20746f6b656e2073616c65206964702d20616d6f756e74206f6620746f6b656e73207075726368617365644c2d2062757965722773206d656d62657220696448546f6b656e53616c6546696e616c697a6564100020011c546f6b656e4964000010012c546f6b656e53616c654964000018011c42616c616e636500001801284a6f7942616c616e6365000f1850546f6b656e2053616c652046696e616c697a65641c506172616d733a282d20746f6b656e2069643c2d20746f6b656e2073616c652069648c2d20616d6f756e74206f6620756e736f6c6420746f6b656e73207265636f7665726564642d20616d6f756e74206f66204a4f5920636f6c6c6563746564945472616e73666572506f6c6963794368616e676564546f5065726d697373696f6e6c657373040020011c546f6b656e496400100ca45472616e7366657220506f6c696379204368616e67656420546f205065726d697373696f6e6c6573731c506172616d733a282d20746f6b656e20696430546f6b656e734275726e65640c0020011c546f6b656e496400002001204d656d6265724964000018011c42616c616e636500111434546f6b656e73204275726e65641c506172616d733a282d20746f6b656e2069642c2d206d656d626572206964642d206e756d626572206f6620746f6b656e73206275726e6564085c4576656e747320666f722074686973206d6f64756c652e00ad020c5070616c6c65745f70726f6a6563745f746f6b656e147479706573385472616e73666572506f6c69637904104861736801240108385065726d697373696f6e6c657373000000305065726d697373696f6e656404002401104861736800010000b1020c5070616c6c65745f70726f6a6563745f746f6b656e1474797065735c546f6b656e49737375616e6365506172616d657465727310104861736801243c546f6b656e416c6c6f636174696f6e01b502505472616e73666572506f6c696379506172616d7301c502204d656d6265724964012000140148696e697469616c5f616c6c6f636174696f6ed502018c42547265654d61703c4d656d62657249642c20546f6b656e416c6c6f636174696f6e3e00011873796d626f6c2401104861736800013c7472616e736665725f706f6c696379c50201505472616e73666572506f6c696379506172616d73000138706174726f6e6167655f72617465e1020128596561726c7952617465000148726576656e75655f73706c69745f72617465bd02011c5065726d696c6c0000b5020c5070616c6c65745f70726f6a6563745f746f6b656e1474797065733c546f6b656e416c6c6f636174696f6e081c42616c616e636501185456657374696e675363686564756c65506172616d7301b90200080118616d6f756e7418011c42616c616e636500015c76657374696e675f7363686564756c655f706172616d73c10201744f7074696f6e3c56657374696e675363686564756c65506172616d733e0000b9020c5070616c6c65745f70726f6a6563745f746f6b656e1474797065735456657374696e675363686564756c65506172616d73042c426c6f636b4e756d6265720110000c015c6c696e6561725f76657374696e675f6475726174696f6e10012c426c6f636b4e756d62657200014c626c6f636b735f6265666f72655f636c69666610012c426c6f636b4e756d62657200015c636c6966665f616d6f756e745f70657263656e74616765bd02011c5065726d696c6c0000bd020c3473705f61726974686d65746963287065725f7468696e67731c5065726d696c6c0000040010010c7533320000c10204184f7074696f6e04045401b9020108104e6f6e6500000010536f6d650400b9020000010000c5020c5070616c6c65745f70726f6a6563745f746f6b656e147479706573505472616e73666572506f6c696379506172616d73043c57686974656c697374506172616d7301c9020108385065726d697373696f6e6c657373000000305065726d697373696f6e65640400c902013c57686974656c697374506172616d7300010000c9020c5070616c6c65745f70726f6a6563745f746f6b656e1474797065733c57686974656c697374506172616d7308104861736801247053696e676c65446174614f626a65637455706c6f6164506172616d7301cd0200080128636f6d6d69746d656e742401104861736800011c7061796c6f6164d10201904f7074696f6e3c53696e676c65446174614f626a65637455706c6f6164506172616d733e0000cd020c5070616c6c65745f70726f6a6563745f746f6b656e1474797065737053696e676c65446174614f626a65637455706c6f6164506172616d7304284a6f7942616c616e63650118000c01586f626a6563745f6372656174696f6e5f706172616d7309020170446174614f626a6563744372656174696f6e506172616d657465727300015865787065637465645f646174615f73697a655f6665651801284a6f7942616c616e636500019465787065637465645f646174615f6f626a6563745f73746174655f626c6f61745f626f6e641801284a6f7942616c616e63650000d10204184f7074696f6e04045401cd020108104e6f6e6500000010536f6d650400cd020000010000d502042042547265654d617008044b0120045601b502000400d902000000d902000002dd0200dd020000040820b50200e1020c5070616c6c65745f70726f6a6563745f746f6b656e14747970657328596561726c795261746500000400bd02011c5065726d696c6c0000e5020c5070616c6c65745f70726f6a6563745f746f6b656e147479706573245472616e736665727308204d656d626572496401e9021c5061796d656e7401ed02000400fd02016c42547265654d61703c4d656d62657249642c205061796d656e743e0000e9020c5070616c6c65745f70726f6a6563745f746f6b656e1474797065732456616c69646174656404204d656d626572496401200108204578697374696e6704002001204d656d62657249640000002c4e6f6e4578697374696e6704002001204d656d626572496400010000ed020c5070616c6c65745f70726f6a6563745f746f6b656e1474797065734056616c6964617465645061796d656e7404485061796d656e745769746856657374696e6701f1020008011c7061796d656e74f10201485061796d656e745769746856657374696e6700016476657374696e675f636c65616e75705f63616e646964617465f50201544f7074696f6e3c56657374696e67536f757263653e0000f1020c5070616c6c65745f70726f6a6563745f746f6b656e147479706573485061796d656e745769746856657374696e67081c42616c616e636501185456657374696e675363686564756c65506172616d7301b90200080118616d6f756e7418011c42616c616e636500014076657374696e675f7363686564756c65c10201744f7074696f6e3c56657374696e675363686564756c65506172616d733e0000f50204184f7074696f6e04045401f9020108104e6f6e6500000010536f6d650400f9020000010000f9020c5070616c6c65745f70726f6a6563745f746f6b656e1474797065733456657374696e67536f7572636500010c3c496e697469616c49737375616e63650000001053616c65040010012c546f6b656e53616c654964000100384973737565725472616e73666572040020010c75363400020000fd02042042547265654d617008044b01e902045601ed0200040001030000000103000002050300050300000408e902ed020009030c5070616c6c65745f70726f6a6563745f746f6b656e14747970657324546f6b656e53616c6518284a6f7942616c616e636501181c42616c616e636501182c426c6f636b4e756d62657201105456657374696e675363686564756c65506172616d7301b902204d656d62657249640120244163636f756e744964010000280128756e69745f70726963651801284a6f7942616c616e63650001347175616e746974795f6c65667418011c42616c616e636500013c66756e64735f636f6c6c65637465641801284a6f7942616c616e6365000134746f6b656e735f736f757263652001204d656d62657249640001506561726e696e67735f64657374696e6174696f6e2d0101444f7074696f6e3c4163636f756e7449643e00012c73746172745f626c6f636b10012c426c6f636b4e756d6265720001206475726174696f6e10012c426c6f636b4e756d62657200015c76657374696e675f7363686564756c655f706172616d73c10201744f7074696f6e3c56657374696e675363686564756c65506172616d733e0001386361705f7065725f6d656d6265722901013c4f7074696f6e3c42616c616e63653e0001346175746f5f66696e616c697a65880110626f6f6c00000d030c3473705f61726974686d65746963287065725f7468696e67732c5065727175696e74696c6c0000040020010c75363400001103085c70616c6c65745f70726f706f73616c735f656e67696e65205261774576656e740c2850726f706f73616c49640110204d656d626572496401202c426c6f636b4e756d626572011001185450726f706f73616c53746174757355706461746564080010012850726f706f73616c496400001503016c50726f706f73616c5374617475733c426c6f636b4e756d6265723e0000106c456d697473206f6e2070726f706f73616c206372656174696f6e2e1c506172616d733a4c2d204964206f6620612070726f706f73616c2e582d204e65772070726f706f73616c207374617475732e5050726f706f73616c4465636973696f6e4d616465080010012850726f706f73616c496400001903014050726f706f73616c4465636973696f6e000110b0456d697473206f6e2067657474696e6720612070726f706f73616c20737461747573206465636973696f6e2e1c506172616d733a4c2d204964206f6620612070726f706f73616c2e4c2d2050726f706f73616c206465636973696f6e4050726f706f73616c4578656375746564080010012850726f706f73616c496400002103013c457865637574696f6e53746174757300021070456d697473206f6e2070726f706f73616c20657865637574696f6e2e1c506172616d733a6c2d204964206f66206120757064617465642070726f706f73616c2e702d2050726f706f73616c20657865637574696f6e207374617475732e14566f74656410002001204d656d6265724964000010012850726f706f73616c4964000025030120566f74654b696e64000028011c5665633c75383e00031880456d697473206f6e20766f74696e6720666f72207468652070726f706f73616c1c506172616d733a7c2d20566f746572202d206d656d626572206964206f66206120766f7465722e4c2d204964206f6620612070726f706f73616c2e3c2d204b696e64206f6620766f74652e302d20526174696f6e616c652e4450726f706f73616c43616e63656c6c656408002001204d656d6265724964000010012850726f706f73616c49640004108c456d697473206f6e20612070726f706f73616c206265696e672063616e63656c6c65641c506172616d733a6c2d204d656d626572204964206f66207468652070726f706f736572502d204964206f66207468652070726f706f73616c4050726f706f73657252656d61726b65640c002001204d656d6265724964000010012850726f706f73616c4964000028011c5665633c75383e00051084456d697473206f6e2070726f706f736572206d616b696e6720612072656d61726b342d2070726f706f736572206964342d2070726f706f73616c206964242d206d6573736167650c5c4576656e747320666f722074686973206d6f64756c652e005c50726f706f73616c7320656e67696e65206576656e74731503105c70616c6c65745f70726f706f73616c735f656e67696e651474797065734470726f706f73616c5f73746174757365733850726f706f73616c537461747573042c426c6f636b4e756d6265720110010c184163746976650000004050656e64696e67457865637574696f6e040010012c426c6f636b4e756d6265720001006050656e64696e67436f6e737469747574696f6e616c697479000200001903105c70616c6c65745f70726f706f73616c735f656e67696e651474797065734470726f706f73616c5f73746174757365734050726f706f73616c4465636973696f6e00011c2043616e63656c65640000004443616e63656c6564427952756e74696d65000100185665746f65640002002052656a65637465640003001c536c61736865640004001c4578706972656400050020417070726f76656404001d030160417070726f76656450726f706f73616c4465636973696f6e000600001d03105c70616c6c65745f70726f706f73616c735f656e67696e651474797065734470726f706f73616c5f737461747573657360417070726f76656450726f706f73616c4465636973696f6e0001084050656e64696e67457865637574696f6e0000006050656e64696e67436f6e737469747574696f6e616c697479000100002103105c70616c6c65745f70726f706f73616c735f656e67696e651474797065734470726f706f73616c5f73746174757365733c457865637574696f6e5374617475730001082045786563757465640000003c457865637574696f6e4661696c65640401146572726f7228011c5665633c75383e0001000025030c5c70616c6c65745f70726f706f73616c735f656e67696e6514747970657320566f74654b696e640001101c417070726f76650000001852656a65637400010014536c6173680002001c4162737461696e000300002903086c70616c6c65745f70726f706f73616c735f64697363757373696f6e205261774576656e740c2054687265616449640120204d656d6265724964012018506f737449640120011434546872656164437265617465640800200120546872656164496400002001204d656d626572496400000464456d697473206f6e20746872656164206372656174696f6e2e2c506f7374437265617465641400200118506f7374496400002001204d656d626572496400002001205468726561644964000028011c5665633c75383e0000880110626f6f6c0001045c456d697473206f6e20706f7374206372656174696f6e2e2c506f7374557064617465641000200118506f7374496400002001204d656d626572496400002001205468726561644964000028011c5665633c75383e00020454456d697473206f6e20706f7374207570646174652e445468726561644d6f64654368616e6765640c00200120546872656164496400002d0301785468726561644d6f64653c42547265655365743c4d656d62657249643e3e00002001204d656d626572496400030470456d697473206f6e20746872656164206d6f6465206368616e67652e2c506f737444656c6574656410002001204d656d6265724964000020012054687265616449640000200118506f737449640000880110626f6f6c00040454456d697473206f6e20706f73742064656c657465640c5c4576656e747320666f722074686973206d6f64756c652e005c50726f706f73616c7320656e67696e65206576656e74732d030c6c70616c6c65745f70726f706f73616c735f64697363757373696f6e147479706573285468726561644d6f6465043c54687265616457686974656c6973740151010108104f70656e00000018436c6f73656404005101013c54687265616457686974656c697374000100003103085870616c6c65745f70726f706f73616c735f636f646578205261774576656e74106447656e6572616c50726f706f73616c506172616d65746572730135034450726f706f73616c44657461696c734f660139032850726f706f73616c49640110205468726561644964012001043c50726f706f73616c43726561746564100010012850726f706f73616c496400003503016447656e6572616c50726f706f73616c506172616d657465727300003903014450726f706f73616c44657461696c734f660000200120546872656164496400001858412070726f706f73616c2077617320637265617465641c506172616d733afc2d204964206f662061206e65776c7920637265617465642070726f706f73616c2061667465722069742077617320736176656420696e2073746f726167652e01012d2047656e6572616c2070726f706f73616c20706172616d657465722e20506172616d65746572732073686172656420627920616c6c2070726f706f73616c7349012d2050726f706f73616c2044657461696c732e20506172616d65746572206f662070726f706f73616c207769746820612076617269616e7420666f722065616368206b696e64206f662070726f706f73616c9c2d204964206f662061206e65776c7920637265617465642070726f706f73616c20746872656164085c4576656e747320666f722074686973206d6f64756c652e0035030c5870616c6c65745f70726f706f73616c735f636f6465781474797065735447656e6572616c50726f706f73616c506172616d730c204d656d62657249640120244163636f756e74496401002c426c6f636b4e756d6265720110001401246d656d6265725f69642001204d656d62657249640001147469746c6528011c5665633c75383e00012c6465736372697074696f6e28011c5665633c75383e0001487374616b696e675f6163636f756e745f69642d0101444f7074696f6e3c4163636f756e7449643e00015465786163745f657865637574696f6e5f626c6f636be901014c4f7074696f6e3c426c6f636b4e756d6265723e000039030c5870616c6c65745f70726f706f73616c735f636f6465781474797065733c50726f706f73616c44657461696c731c1c42616c616e636501182c426c6f636b4e756d6265720110244163636f756e744964010020576f726b657249640120244f70656e696e67496401202850726f706f73616c49640110785570646174654368616e6e656c5061796f757473506172616d6574657273015902015c185369676e616c040028011c5665633c75383e0000003852756e74696d6555706772616465040028011c5665633c75383e0001003846756e64696e675265717565737404003d0301c45665633c46756e64696e6752657175657374506172616d65746572733c42616c616e63652c204163636f756e7449643e3e000200505365744d617856616c696461746f72436f756e74040010010c75333200030074437265617465576f726b696e6747726f75704c6561644f70656e696e670400450301b44372656174654f70656e696e67506172616d65746572733c426c6f636b4e756d6265722c2042616c616e63653e0004006c46696c6c576f726b696e6747726f75704c6561644f70656e696e6704004d03015446696c6c4f70656e696e67506172616d657465727300050060557064617465576f726b696e6747726f75704275646765740c0018011c42616c616e6365000081010130576f726b696e6747726f757000008501012c42616c616e63654b696e64000600744465637265617365576f726b696e6747726f75704c6561645374616b650c00200120576f726b65724964000018011c42616c616e6365000081010130576f726b696e6747726f757000070054536c617368576f726b696e6747726f75704c6561640c00200120576f726b65724964000018011c42616c616e6365000081010130576f726b696e6747726f757000080064536574576f726b696e6747726f75704c6561645265776172640c00200120576f726b6572496400002901013c4f7074696f6e3c42616c616e63653e000081010130576f726b696e6747726f7570000900645465726d696e617465576f726b696e6747726f75704c6561640400510301a85465726d696e617465526f6c65506172616d65746572733c576f726b657249642c2042616c616e63653e000a0044416d656e64436f6e737469747574696f6e040028011c5665633c75383e000b007443616e63656c576f726b696e6747726f75704c6561644f70656e696e6708002001244f70656e696e674964000081010130576f726b696e6747726f7570000c00485365744d656d626572736869705072696365040018011c42616c616e6365000d0064536574436f756e63696c427564676574496e6372656d656e74040018011c42616c616e6365000e0048536574436f756e63696c6f72526577617264040018011c42616c616e6365000f006c536574496e697469616c496e7669746174696f6e42616c616e6365040018011c42616c616e636500100064536574496e697469616c496e7669746174696f6e436f756e74040010010c753332001100805365744d656d626572736869704c656164496e7669746174696f6e51756f7461040010010c75333200120038536574526566657272616c43757404000801087538001300305665746f50726f706f73616c040010012850726f706f73616c496400140050557064617465476c6f62616c4e66744c696d69740800710201384e66744c696d6974506572696f64000020010c753634001500505570646174654368616e6e656c5061796f7574730400590201785570646174654368616e6e656c5061796f757473506172616d6574657273001600003d030000024103004103083470616c6c65745f636f6d6d6f6e6046756e64696e6752657175657374506172616d6574657273081c42616c616e63650118244163636f756e74496401000008011c6163636f756e740001244163636f756e744964000118616d6f756e7418011c42616c616e6365000045030c5870616c6c65745f70726f706f73616c735f636f6465781474797065735c4372656174654f70656e696e67506172616d6574657273082c426c6f636b4e756d62657201101c42616c616e636501180010012c6465736372697074696f6e28011c5665633c75383e0001307374616b655f706f6c696379490301845374616b65506f6c6963793c426c6f636b4e756d6265722c2042616c616e63653e0001407265776172645f7065725f626c6f636b2901013c4f7074696f6e3c42616c616e63653e00011467726f757081010130576f726b696e6747726f7570000049030c5070616c6c65745f776f726b696e675f67726f75701474797065732c5374616b65506f6c696379082c426c6f636b4e756d62657201101c42616c616e63650118000801307374616b655f616d6f756e7418011c42616c616e63650001606c656176696e675f756e7374616b696e675f706572696f6410012c426c6f636b4e756d62657200004d030c5870616c6c65745f70726f706f73616c735f636f6465781474797065735446696c6c4f70656e696e67506172616d657465727300000c01286f70656e696e675f6964200160776f726b696e675f67726f75703a3a4f70656e696e6749640001386170706c69636174696f6e5f6964200170776f726b696e675f67726f75703a3a4170706c69636174696f6e4964000134776f726b696e675f67726f757081010130576f726b696e6747726f7570000051030c5870616c6c65745f70726f706f73616c735f636f6465781474797065735c5465726d696e617465526f6c65506172616d65746572730820576f726b6572496401201c42616c616e63650118000c0124776f726b65725f6964200120576f726b6572496400013c736c617368696e675f616d6f756e742901013c4f7074696f6e3c42616c616e63653e00011467726f757081010130576f726b696e6747726f757000005503085070616c6c65745f776f726b696e675f67726f7570205261774576656e7430244f70656e696e6749640120344170706c69636174696f6e49640120684170706c69636174696f6e4964546f576f726b657249644d617001590320576f726b657249640120244163636f756e74496401001c42616c616e636501182c4f70656e696e67547970650165032c5374616b65506f6c696379014903604170706c794f6e4f70656e696e67506172616d6574657273016903204d656d626572496401201048617368012404490171030164304f70656e696e67416464656414002001244f70656e696e674964000028011c5665633c75383e00006503012c4f70656e696e675479706500004903012c5374616b65506f6c69637900002901013c4f7074696f6e3c42616c616e63653e00001c80456d697473206f6e20616464696e67206e6577206a6f62206f70656e696e672e1c506172616d733a302d204f70656e696e67206964342d204465736372697074696f6e782d204f70656e696e672054797065284c656164206f7220576f726b657229782d205374616b6520506f6c69637920666f7220746865206f70656e696e67482d205265776172642070657220626c6f636b404170706c6965644f6e4f70656e696e670800690301604170706c794f6e4f70656e696e67506172616d657465727300002001344170706c69636174696f6e4964000110dc456d697473206f6e20616464696e6720746865206170706c69636174696f6e20666f722074686520776f726b6572206f70656e696e672e1c506172616d733a542d204f70656e696e6720706172616d657465726573402d204170706c69636174696f6e206964344f70656e696e6746696c6c65640c002001244f70656e696e6749640000590301684170706c69636174696f6e4964546f576f726b657249644d617000005101015c42547265655365743c4170706c69636174696f6e49643e00021484456d697473206f6e2066696c6c696e6720746865206a6f62206f70656e696e672e1c506172616d733a4c2d20576f726b6572206f70656e696e67206964cc2d20576f726b6572206170706c69636174696f6e20696420746f2074686520776f726b65722069642064696374696f6e617279ac2d204170706c69636174696f6e6420696473207573656420746f2066696c6c20746865206f70656e696e67244c65616465725365740400200120576f726b6572496400030c88456d697473206f6e2073657474696e67207468652067726f7570206c65616465722e1c506172616d733a482d2047726f757020776f726b65722069642e60576f726b6572526f6c654163636f756e74557064617465640800200120576f726b6572496400000001244163636f756e744964000410c4456d697473206f6e207570646174696e672074686520726f6c65206163636f756e74206f662074686520776f726b65722e1c506172616d733a4c2d204964206f662074686520776f726b65722e802d20526f6c65206163636f756e74206964206f662074686520776f726b65722e2c4c6561646572556e7365740005047c456d697473206f6e20756e2d73657474696e6720746865206c65616465722e30576f726b65724578697465640400200120576f726b6572496400061070456d697473206f6e2065786974696e672074686520776f726b65722e1c506172616d733a302d20776f726b65722069642e302d20526174696f6e616c652e50576f726b6572537461727465644c656176696e670800200120576f726b6572496400001501013c4f7074696f6e3c5665633c75383e3e000710b4456d697473207768656e20776f726b65722073746172746564206c656176696e6720746865697220726f6c652e1c506172616d733a302d20576f726b65722069642e302d20526174696f6e616c652e405465726d696e61746564576f726b65720c00200120576f726b6572496400002901013c4f7074696f6e3c42616c616e63653e00001501013c4f7074696f6e3c5665633c75383e3e00081480456d697473206f6e207465726d696e6174696e672074686520776f726b65722e1c506172616d733a302d20776f726b65722069642e282d2050656e616c74792e302d20526174696f6e616c652e405465726d696e617465644c65616465720c00200120576f726b6572496400002901013c4f7074696f6e3c42616c616e63653e00001501013c4f7074696f6e3c5665633c75383e3e00091480456d697473206f6e207465726d696e6174696e6720746865206c65616465722e1c506172616d733a4c2d206c656164657220776f726b65722069642e282d2050656e616c74792e302d20526174696f6e616c652e305374616b65536c61736865641000200120576f726b65724964000018011c42616c616e6365000018011c42616c616e636500001501013c4f7074696f6e3c5665633c75383e3e000a18c0456d697473206f6e20736c617368696e672074686520726567756c617220776f726b65722f6c656164207374616b652e1c506172616d733a642d20726567756c617220776f726b65722f6c6561642069642e642d2061637475616c20736c61736865642062616c616e63652e702d2052657175657374656420736c61736865642062616c616e63652e302d20526174696f6e616c652e385374616b654465637265617365640800200120576f726b65724964000018011c42616c616e6365000b10c8456d697473206f6e2064656372656173696e672074686520726567756c617220776f726b65722f6c656164207374616b652e1c506172616d733a642d20726567756c617220776f726b65722f6c6561642069642e502d207374616b652064656c746120616d6f756e74385374616b65496e637265617365640800200120576f726b65724964000018011c42616c616e6365000c10c8456d697473206f6e20696e6372656173696e672074686520726567756c617220776f726b65722f6c656164207374616b652e1c506172616d733a642d20726567756c617220776f726b65722f6c6561642069642e502d207374616b652064656c746120616d6f756e74504170706c69636174696f6e57697468647261776e04002001344170706c69636174696f6e4964000d0c2501456d697473206f6e207769746864726177696e6720746865206170706c69636174696f6e20666f722074686520726567756c617220776f726b65722f6c656164206f70656e696e672e1c506172616d733a502d204a6f62206170706c69636174696f6e2069643c4f70656e696e6743616e63656c656404002001244f70656e696e674964000e0c8c456d697473206f6e2063616e63656c696e6720746865206a6f62206f70656e696e672e1c506172616d733a302d204f70656e696e6720696424427564676574536574040018011c42616c616e6365000f0cc8456d697473206f6e2073657474696e67207468652062756467657420666f722074686520776f726b696e672067726f75702e1c506172616d733a302d206e65772062756467657468576f726b65725265776172644163636f756e74557064617465640800200120576f726b6572496400000001244163636f756e744964001010cc456d697473206f6e207570646174696e672074686520726577617264206163636f756e74206f662074686520776f726b65722e1c506172616d733a4c2d204964206f662074686520776f726b65722e882d20526577617264206163636f756e74206964206f662074686520776f726b65722e64576f726b6572526577617264416d6f756e74557064617465640800200120576f726b6572496400002901013c4f7074696f6e3c42616c616e63653e001110c8456d697473206f6e207570646174696e67207468652072657761726420616d6f756e74206f662074686520776f726b65722e1c506172616d733a4c2d204964206f662074686520776f726b65722e482d205265776172642070657220626c6f636b44537461747573546578744368616e67656408002401104861736800001501013c4f7074696f6e3c5665633c75383e3e001210dc456d697473206f6e207570646174696e6720746865207374617475732074657874206f662074686520776f726b696e672067726f75702e1c506172616d733a482d2073746174757320746578742068617368342d207374617475732074657874384275646765745370656e64696e670c000001244163636f756e744964000018011c42616c616e636500001501013c4f7074696f6e3c5665633c75383e3e001314c8456d697473206f6e206275646765742066726f6d2074686520776f726b696e672067726f7570206265696e67207370656e741c506172616d733a582d205265636569766572204163636f756e742049642e402d2042616c616e6365207370656e742e302d20526174696f6e616c652e28526577617264506169641000200120576f726b6572496400000001244163636f756e744964000018011c42616c616e63650000750301445265776172645061796d656e74547970650014186c456d697473206f6e20706179696e6720746865207265776172642e1c506172616d733a4c2d204964206f662074686520776f726b65722e582d205265636569766572204163636f756e742049642e202d20526577617264b42d205061796d656e74207479706520286d697373656420726577617264206f7220726567756c6172206f6e65296c4e65774d69737365645265776172644c6576656c526561636865640800200120576f726b6572496400002901013c4f7074696f6e3c42616c616e63653e00151090456d697473206f6e207265616368696e67206e6577206d6973736564207265776172642e1c506172616d733a302d20576f726b65722049442ee82d204d69737365642072657761726420286f7074696f6e616c292e204e6f6e65206d65616e7320276e6f206d697373656420726577617264272e60576f726b696e6747726f757042756467657446756e6465640c002001204d656d6265724964000018011c42616c616e6365000028011c5665633c75383e0016147846756e642074686520776f726b696e672067726f7570206275646765742e1c506172616d733a2c2d204d656d6265722049444c2d20416d6f756e74206f662062616c616e63652c2d20526174696f6e616c65304c65616452656d61726b6564040028011c5665633c75383e00170c94456d697473206f6e204c656164206d616b696e6720612072656d61726b206d6573736167651c506172616d733a242d206d65737361676538576f726b657252656d61726b65640800200120576f726b65724964000028011c5665633c75383e00181094456d697473206f6e204c656164206d616b696e6720612072656d61726b206d6573736167651c506172616d733a202d20776f726b6572242d206d6573736167650c5c4576656e747320666f722074686973206d6f64756c652e00385f47726f75705f206576656e74735903042042547265654d617008044b0120045601200004005d030000005d0300000261030061030000040820200065030c5070616c6c65745f776f726b696e675f67726f75701474797065732c4f70656e696e6754797065000108184c65616465720000001c526567756c61720001000069030c5070616c6c65745f776f726b696e675f67726f7570147479706573504170706c794f6e4f70656e696e67506172616d7310204d656d62657249640120244f70656e696e6749640120244163636f756e74496401001c42616c616e63650118001801246d656d6265725f69642001204d656d62657249640001286f70656e696e675f69642001244f70656e696e67496400013c726f6c655f6163636f756e745f69640001244163636f756e7449640001447265776172645f6163636f756e745f69640001244163636f756e74496400012c6465736372697074696f6e28011c5665633c75383e0001407374616b655f706172616d65746572736d03018c5374616b65506172616d65746572733c4163636f756e7449642c2042616c616e63653e00006d030c5070616c6c65745f776f726b696e675f67726f75701474797065733c5374616b65506172616d657465727308244163636f756e74496401001c42616c616e63650118000801147374616b6518011c42616c616e63650001487374616b696e675f6163636f756e745f69640001244163636f756e74496400007103085070616c6c65745f776f726b696e675f67726f757024496e7374616e6365310000000075030c5070616c6c65745f776f726b696e675f67726f7570147479706573445265776172645061796d656e7454797065000108304d697373656452657761726400000034526567756c6172526577617264000100007903085070616c6c65745f776f726b696e675f67726f7570205261774576656e7430244f70656e696e6749640120344170706c69636174696f6e49640120684170706c69636174696f6e4964546f576f726b657249644d617001590320576f726b657249640120244163636f756e74496401001c42616c616e636501182c4f70656e696e67547970650165032c5374616b65506f6c696379014903604170706c794f6e4f70656e696e67506172616d6574657273016903204d656d62657249640120104861736801240449017d030164304f70656e696e67416464656414002001244f70656e696e674964000028011c5665633c75383e00006503012c4f70656e696e675479706500004903012c5374616b65506f6c69637900002901013c4f7074696f6e3c42616c616e63653e00001c80456d697473206f6e20616464696e67206e6577206a6f62206f70656e696e672e1c506172616d733a302d204f70656e696e67206964342d204465736372697074696f6e782d204f70656e696e672054797065284c656164206f7220576f726b657229782d205374616b6520506f6c69637920666f7220746865206f70656e696e67482d205265776172642070657220626c6f636b404170706c6965644f6e4f70656e696e670800690301604170706c794f6e4f70656e696e67506172616d657465727300002001344170706c69636174696f6e4964000110dc456d697473206f6e20616464696e6720746865206170706c69636174696f6e20666f722074686520776f726b6572206f70656e696e672e1c506172616d733a542d204f70656e696e6720706172616d657465726573402d204170706c69636174696f6e206964344f70656e696e6746696c6c65640c002001244f70656e696e6749640000590301684170706c69636174696f6e4964546f576f726b657249644d617000005101015c42547265655365743c4170706c69636174696f6e49643e00021484456d697473206f6e2066696c6c696e6720746865206a6f62206f70656e696e672e1c506172616d733a4c2d20576f726b6572206f70656e696e67206964cc2d20576f726b6572206170706c69636174696f6e20696420746f2074686520776f726b65722069642064696374696f6e617279ac2d204170706c69636174696f6e6420696473207573656420746f2066696c6c20746865206f70656e696e67244c65616465725365740400200120576f726b6572496400030c88456d697473206f6e2073657474696e67207468652067726f7570206c65616465722e1c506172616d733a482d2047726f757020776f726b65722069642e60576f726b6572526f6c654163636f756e74557064617465640800200120576f726b6572496400000001244163636f756e744964000410c4456d697473206f6e207570646174696e672074686520726f6c65206163636f756e74206f662074686520776f726b65722e1c506172616d733a4c2d204964206f662074686520776f726b65722e802d20526f6c65206163636f756e74206964206f662074686520776f726b65722e2c4c6561646572556e7365740005047c456d697473206f6e20756e2d73657474696e6720746865206c65616465722e30576f726b65724578697465640400200120576f726b6572496400061070456d697473206f6e2065786974696e672074686520776f726b65722e1c506172616d733a302d20776f726b65722069642e302d20526174696f6e616c652e50576f726b6572537461727465644c656176696e670800200120576f726b6572496400001501013c4f7074696f6e3c5665633c75383e3e000710b4456d697473207768656e20776f726b65722073746172746564206c656176696e6720746865697220726f6c652e1c506172616d733a302d20576f726b65722069642e302d20526174696f6e616c652e405465726d696e61746564576f726b65720c00200120576f726b6572496400002901013c4f7074696f6e3c42616c616e63653e00001501013c4f7074696f6e3c5665633c75383e3e00081480456d697473206f6e207465726d696e6174696e672074686520776f726b65722e1c506172616d733a302d20776f726b65722069642e282d2050656e616c74792e302d20526174696f6e616c652e405465726d696e617465644c65616465720c00200120576f726b6572496400002901013c4f7074696f6e3c42616c616e63653e00001501013c4f7074696f6e3c5665633c75383e3e00091480456d697473206f6e207465726d696e6174696e6720746865206c65616465722e1c506172616d733a4c2d206c656164657220776f726b65722069642e282d2050656e616c74792e302d20526174696f6e616c652e305374616b65536c61736865641000200120576f726b65724964000018011c42616c616e6365000018011c42616c616e636500001501013c4f7074696f6e3c5665633c75383e3e000a18c0456d697473206f6e20736c617368696e672074686520726567756c617220776f726b65722f6c656164207374616b652e1c506172616d733a642d20726567756c617220776f726b65722f6c6561642069642e642d2061637475616c20736c61736865642062616c616e63652e702d2052657175657374656420736c61736865642062616c616e63652e302d20526174696f6e616c652e385374616b654465637265617365640800200120576f726b65724964000018011c42616c616e6365000b10c8456d697473206f6e2064656372656173696e672074686520726567756c617220776f726b65722f6c656164207374616b652e1c506172616d733a642d20726567756c617220776f726b65722f6c6561642069642e502d207374616b652064656c746120616d6f756e74385374616b65496e637265617365640800200120576f726b65724964000018011c42616c616e6365000c10c8456d697473206f6e20696e6372656173696e672074686520726567756c617220776f726b65722f6c656164207374616b652e1c506172616d733a642d20726567756c617220776f726b65722f6c6561642069642e502d207374616b652064656c746120616d6f756e74504170706c69636174696f6e57697468647261776e04002001344170706c69636174696f6e4964000d0c2501456d697473206f6e207769746864726177696e6720746865206170706c69636174696f6e20666f722074686520726567756c617220776f726b65722f6c656164206f70656e696e672e1c506172616d733a502d204a6f62206170706c69636174696f6e2069643c4f70656e696e6743616e63656c656404002001244f70656e696e674964000e0c8c456d697473206f6e2063616e63656c696e6720746865206a6f62206f70656e696e672e1c506172616d733a302d204f70656e696e6720696424427564676574536574040018011c42616c616e6365000f0cc8456d697473206f6e2073657474696e67207468652062756467657420666f722074686520776f726b696e672067726f75702e1c506172616d733a302d206e65772062756467657468576f726b65725265776172644163636f756e74557064617465640800200120576f726b6572496400000001244163636f756e744964001010cc456d697473206f6e207570646174696e672074686520726577617264206163636f756e74206f662074686520776f726b65722e1c506172616d733a4c2d204964206f662074686520776f726b65722e882d20526577617264206163636f756e74206964206f662074686520776f726b65722e64576f726b6572526577617264416d6f756e74557064617465640800200120576f726b6572496400002901013c4f7074696f6e3c42616c616e63653e001110c8456d697473206f6e207570646174696e67207468652072657761726420616d6f756e74206f662074686520776f726b65722e1c506172616d733a4c2d204964206f662074686520776f726b65722e482d205265776172642070657220626c6f636b44537461747573546578744368616e67656408002401104861736800001501013c4f7074696f6e3c5665633c75383e3e001210dc456d697473206f6e207570646174696e6720746865207374617475732074657874206f662074686520776f726b696e672067726f75702e1c506172616d733a482d2073746174757320746578742068617368342d207374617475732074657874384275646765745370656e64696e670c000001244163636f756e744964000018011c42616c616e636500001501013c4f7074696f6e3c5665633c75383e3e001314c8456d697473206f6e206275646765742066726f6d2074686520776f726b696e672067726f7570206265696e67207370656e741c506172616d733a582d205265636569766572204163636f756e742049642e402d2042616c616e6365207370656e742e302d20526174696f6e616c652e28526577617264506169641000200120576f726b6572496400000001244163636f756e744964000018011c42616c616e63650000750301445265776172645061796d656e74547970650014186c456d697473206f6e20706179696e6720746865207265776172642e1c506172616d733a4c2d204964206f662074686520776f726b65722e582d205265636569766572204163636f756e742049642e202d20526577617264b42d205061796d656e74207479706520286d697373656420726577617264206f7220726567756c6172206f6e65296c4e65774d69737365645265776172644c6576656c526561636865640800200120576f726b6572496400002901013c4f7074696f6e3c42616c616e63653e00151090456d697473206f6e207265616368696e67206e6577206d6973736564207265776172642e1c506172616d733a302d20576f726b65722049442ee82d204d69737365642072657761726420286f7074696f6e616c292e204e6f6e65206d65616e7320276e6f206d697373656420726577617264272e60576f726b696e6747726f757042756467657446756e6465640c002001204d656d6265724964000018011c42616c616e6365000028011c5665633c75383e0016147846756e642074686520776f726b696e672067726f7570206275646765742e1c506172616d733a2c2d204d656d6265722049444c2d20416d6f756e74206f662062616c616e63652c2d20526174696f6e616c65304c65616452656d61726b6564040028011c5665633c75383e00170c94456d697473206f6e204c656164206d616b696e6720612072656d61726b206d6573736167651c506172616d733a242d206d65737361676538576f726b657252656d61726b65640800200120576f726b65724964000028011c5665633c75383e00181094456d697473206f6e204c656164206d616b696e6720612072656d61726b206d6573736167651c506172616d733a202d20776f726b6572242d206d6573736167650c5c4576656e747320666f722074686973206d6f64756c652e00385f47726f75705f206576656e74737d03085070616c6c65745f776f726b696e675f67726f757024496e7374616e636532000000008103085070616c6c65745f776f726b696e675f67726f7570205261774576656e7430244f70656e696e6749640120344170706c69636174696f6e49640120684170706c69636174696f6e4964546f576f726b657249644d617001590320576f726b657249640120244163636f756e74496401001c42616c616e636501182c4f70656e696e67547970650165032c5374616b65506f6c696379014903604170706c794f6e4f70656e696e67506172616d6574657273016903204d656d626572496401201048617368012404490185030164304f70656e696e67416464656414002001244f70656e696e674964000028011c5665633c75383e00006503012c4f70656e696e675479706500004903012c5374616b65506f6c69637900002901013c4f7074696f6e3c42616c616e63653e00001c80456d697473206f6e20616464696e67206e6577206a6f62206f70656e696e672e1c506172616d733a302d204f70656e696e67206964342d204465736372697074696f6e782d204f70656e696e672054797065284c656164206f7220576f726b657229782d205374616b6520506f6c69637920666f7220746865206f70656e696e67482d205265776172642070657220626c6f636b404170706c6965644f6e4f70656e696e670800690301604170706c794f6e4f70656e696e67506172616d657465727300002001344170706c69636174696f6e4964000110dc456d697473206f6e20616464696e6720746865206170706c69636174696f6e20666f722074686520776f726b6572206f70656e696e672e1c506172616d733a542d204f70656e696e6720706172616d657465726573402d204170706c69636174696f6e206964344f70656e696e6746696c6c65640c002001244f70656e696e6749640000590301684170706c69636174696f6e4964546f576f726b657249644d617000005101015c42547265655365743c4170706c69636174696f6e49643e00021484456d697473206f6e2066696c6c696e6720746865206a6f62206f70656e696e672e1c506172616d733a4c2d20576f726b6572206f70656e696e67206964cc2d20576f726b6572206170706c69636174696f6e20696420746f2074686520776f726b65722069642064696374696f6e617279ac2d204170706c69636174696f6e6420696473207573656420746f2066696c6c20746865206f70656e696e67244c65616465725365740400200120576f726b6572496400030c88456d697473206f6e2073657474696e67207468652067726f7570206c65616465722e1c506172616d733a482d2047726f757020776f726b65722069642e60576f726b6572526f6c654163636f756e74557064617465640800200120576f726b6572496400000001244163636f756e744964000410c4456d697473206f6e207570646174696e672074686520726f6c65206163636f756e74206f662074686520776f726b65722e1c506172616d733a4c2d204964206f662074686520776f726b65722e802d20526f6c65206163636f756e74206964206f662074686520776f726b65722e2c4c6561646572556e7365740005047c456d697473206f6e20756e2d73657474696e6720746865206c65616465722e30576f726b65724578697465640400200120576f726b6572496400061070456d697473206f6e2065786974696e672074686520776f726b65722e1c506172616d733a302d20776f726b65722069642e302d20526174696f6e616c652e50576f726b6572537461727465644c656176696e670800200120576f726b6572496400001501013c4f7074696f6e3c5665633c75383e3e000710b4456d697473207768656e20776f726b65722073746172746564206c656176696e6720746865697220726f6c652e1c506172616d733a302d20576f726b65722069642e302d20526174696f6e616c652e405465726d696e61746564576f726b65720c00200120576f726b6572496400002901013c4f7074696f6e3c42616c616e63653e00001501013c4f7074696f6e3c5665633c75383e3e00081480456d697473206f6e207465726d696e6174696e672074686520776f726b65722e1c506172616d733a302d20776f726b65722069642e282d2050656e616c74792e302d20526174696f6e616c652e405465726d696e617465644c65616465720c00200120576f726b6572496400002901013c4f7074696f6e3c42616c616e63653e00001501013c4f7074696f6e3c5665633c75383e3e00091480456d697473206f6e207465726d696e6174696e6720746865206c65616465722e1c506172616d733a4c2d206c656164657220776f726b65722069642e282d2050656e616c74792e302d20526174696f6e616c652e305374616b65536c61736865641000200120576f726b65724964000018011c42616c616e6365000018011c42616c616e636500001501013c4f7074696f6e3c5665633c75383e3e000a18c0456d697473206f6e20736c617368696e672074686520726567756c617220776f726b65722f6c656164207374616b652e1c506172616d733a642d20726567756c617220776f726b65722f6c6561642069642e642d2061637475616c20736c61736865642062616c616e63652e702d2052657175657374656420736c61736865642062616c616e63652e302d20526174696f6e616c652e385374616b654465637265617365640800200120576f726b65724964000018011c42616c616e6365000b10c8456d697473206f6e2064656372656173696e672074686520726567756c617220776f726b65722f6c656164207374616b652e1c506172616d733a642d20726567756c617220776f726b65722f6c6561642069642e502d207374616b652064656c746120616d6f756e74385374616b65496e637265617365640800200120576f726b65724964000018011c42616c616e6365000c10c8456d697473206f6e20696e6372656173696e672074686520726567756c617220776f726b65722f6c656164207374616b652e1c506172616d733a642d20726567756c617220776f726b65722f6c6561642069642e502d207374616b652064656c746120616d6f756e74504170706c69636174696f6e57697468647261776e04002001344170706c69636174696f6e4964000d0c2501456d697473206f6e207769746864726177696e6720746865206170706c69636174696f6e20666f722074686520726567756c617220776f726b65722f6c656164206f70656e696e672e1c506172616d733a502d204a6f62206170706c69636174696f6e2069643c4f70656e696e6743616e63656c656404002001244f70656e696e674964000e0c8c456d697473206f6e2063616e63656c696e6720746865206a6f62206f70656e696e672e1c506172616d733a302d204f70656e696e6720696424427564676574536574040018011c42616c616e6365000f0cc8456d697473206f6e2073657474696e67207468652062756467657420666f722074686520776f726b696e672067726f75702e1c506172616d733a302d206e65772062756467657468576f726b65725265776172644163636f756e74557064617465640800200120576f726b6572496400000001244163636f756e744964001010cc456d697473206f6e207570646174696e672074686520726577617264206163636f756e74206f662074686520776f726b65722e1c506172616d733a4c2d204964206f662074686520776f726b65722e882d20526577617264206163636f756e74206964206f662074686520776f726b65722e64576f726b6572526577617264416d6f756e74557064617465640800200120576f726b6572496400002901013c4f7074696f6e3c42616c616e63653e001110c8456d697473206f6e207570646174696e67207468652072657761726420616d6f756e74206f662074686520776f726b65722e1c506172616d733a4c2d204964206f662074686520776f726b65722e482d205265776172642070657220626c6f636b44537461747573546578744368616e67656408002401104861736800001501013c4f7074696f6e3c5665633c75383e3e001210dc456d697473206f6e207570646174696e6720746865207374617475732074657874206f662074686520776f726b696e672067726f75702e1c506172616d733a482d2073746174757320746578742068617368342d207374617475732074657874384275646765745370656e64696e670c000001244163636f756e744964000018011c42616c616e636500001501013c4f7074696f6e3c5665633c75383e3e001314c8456d697473206f6e206275646765742066726f6d2074686520776f726b696e672067726f7570206265696e67207370656e741c506172616d733a582d205265636569766572204163636f756e742049642e402d2042616c616e6365207370656e742e302d20526174696f6e616c652e28526577617264506169641000200120576f726b6572496400000001244163636f756e744964000018011c42616c616e63650000750301445265776172645061796d656e74547970650014186c456d697473206f6e20706179696e6720746865207265776172642e1c506172616d733a4c2d204964206f662074686520776f726b65722e582d205265636569766572204163636f756e742049642e202d20526577617264b42d205061796d656e74207479706520286d697373656420726577617264206f7220726567756c6172206f6e65296c4e65774d69737365645265776172644c6576656c526561636865640800200120576f726b6572496400002901013c4f7074696f6e3c42616c616e63653e00151090456d697473206f6e207265616368696e67206e6577206d6973736564207265776172642e1c506172616d733a302d20576f726b65722049442ee82d204d69737365642072657761726420286f7074696f6e616c292e204e6f6e65206d65616e7320276e6f206d697373656420726577617264272e60576f726b696e6747726f757042756467657446756e6465640c002001204d656d6265724964000018011c42616c616e6365000028011c5665633c75383e0016147846756e642074686520776f726b696e672067726f7570206275646765742e1c506172616d733a2c2d204d656d6265722049444c2d20416d6f756e74206f662062616c616e63652c2d20526174696f6e616c65304c65616452656d61726b6564040028011c5665633c75383e00170c94456d697473206f6e204c656164206d616b696e6720612072656d61726b206d6573736167651c506172616d733a242d206d65737361676538576f726b657252656d61726b65640800200120576f726b65724964000028011c5665633c75383e00181094456d697473206f6e204c656164206d616b696e6720612072656d61726b206d6573736167651c506172616d733a202d20776f726b6572242d206d6573736167650c5c4576656e747320666f722074686973206d6f64756c652e00385f47726f75705f206576656e74738503085070616c6c65745f776f726b696e675f67726f757024496e7374616e636533000000008903085070616c6c65745f776f726b696e675f67726f7570205261774576656e7430244f70656e696e6749640120344170706c69636174696f6e49640120684170706c69636174696f6e4964546f576f726b657249644d617001590320576f726b657249640120244163636f756e74496401001c42616c616e636501182c4f70656e696e67547970650165032c5374616b65506f6c696379014903604170706c794f6e4f70656e696e67506172616d6574657273016903204d656d62657249640120104861736801240449018d030164304f70656e696e67416464656414002001244f70656e696e674964000028011c5665633c75383e00006503012c4f70656e696e675479706500004903012c5374616b65506f6c69637900002901013c4f7074696f6e3c42616c616e63653e00001c80456d697473206f6e20616464696e67206e6577206a6f62206f70656e696e672e1c506172616d733a302d204f70656e696e67206964342d204465736372697074696f6e782d204f70656e696e672054797065284c656164206f7220576f726b657229782d205374616b6520506f6c69637920666f7220746865206f70656e696e67482d205265776172642070657220626c6f636b404170706c6965644f6e4f70656e696e670800690301604170706c794f6e4f70656e696e67506172616d657465727300002001344170706c69636174696f6e4964000110dc456d697473206f6e20616464696e6720746865206170706c69636174696f6e20666f722074686520776f726b6572206f70656e696e672e1c506172616d733a542d204f70656e696e6720706172616d657465726573402d204170706c69636174696f6e206964344f70656e696e6746696c6c65640c002001244f70656e696e6749640000590301684170706c69636174696f6e4964546f576f726b657249644d617000005101015c42547265655365743c4170706c69636174696f6e49643e00021484456d697473206f6e2066696c6c696e6720746865206a6f62206f70656e696e672e1c506172616d733a4c2d20576f726b6572206f70656e696e67206964cc2d20576f726b6572206170706c69636174696f6e20696420746f2074686520776f726b65722069642064696374696f6e617279ac2d204170706c69636174696f6e6420696473207573656420746f2066696c6c20746865206f70656e696e67244c65616465725365740400200120576f726b6572496400030c88456d697473206f6e2073657474696e67207468652067726f7570206c65616465722e1c506172616d733a482d2047726f757020776f726b65722069642e60576f726b6572526f6c654163636f756e74557064617465640800200120576f726b6572496400000001244163636f756e744964000410c4456d697473206f6e207570646174696e672074686520726f6c65206163636f756e74206f662074686520776f726b65722e1c506172616d733a4c2d204964206f662074686520776f726b65722e802d20526f6c65206163636f756e74206964206f662074686520776f726b65722e2c4c6561646572556e7365740005047c456d697473206f6e20756e2d73657474696e6720746865206c65616465722e30576f726b65724578697465640400200120576f726b6572496400061070456d697473206f6e2065786974696e672074686520776f726b65722e1c506172616d733a302d20776f726b65722069642e302d20526174696f6e616c652e50576f726b6572537461727465644c656176696e670800200120576f726b6572496400001501013c4f7074696f6e3c5665633c75383e3e000710b4456d697473207768656e20776f726b65722073746172746564206c656176696e6720746865697220726f6c652e1c506172616d733a302d20576f726b65722069642e302d20526174696f6e616c652e405465726d696e61746564576f726b65720c00200120576f726b6572496400002901013c4f7074696f6e3c42616c616e63653e00001501013c4f7074696f6e3c5665633c75383e3e00081480456d697473206f6e207465726d696e6174696e672074686520776f726b65722e1c506172616d733a302d20776f726b65722069642e282d2050656e616c74792e302d20526174696f6e616c652e405465726d696e617465644c65616465720c00200120576f726b6572496400002901013c4f7074696f6e3c42616c616e63653e00001501013c4f7074696f6e3c5665633c75383e3e00091480456d697473206f6e207465726d696e6174696e6720746865206c65616465722e1c506172616d733a4c2d206c656164657220776f726b65722069642e282d2050656e616c74792e302d20526174696f6e616c652e305374616b65536c61736865641000200120576f726b65724964000018011c42616c616e6365000018011c42616c616e636500001501013c4f7074696f6e3c5665633c75383e3e000a18c0456d697473206f6e20736c617368696e672074686520726567756c617220776f726b65722f6c656164207374616b652e1c506172616d733a642d20726567756c617220776f726b65722f6c6561642069642e642d2061637475616c20736c61736865642062616c616e63652e702d2052657175657374656420736c61736865642062616c616e63652e302d20526174696f6e616c652e385374616b654465637265617365640800200120576f726b65724964000018011c42616c616e6365000b10c8456d697473206f6e2064656372656173696e672074686520726567756c617220776f726b65722f6c656164207374616b652e1c506172616d733a642d20726567756c617220776f726b65722f6c6561642069642e502d207374616b652064656c746120616d6f756e74385374616b65496e637265617365640800200120576f726b65724964000018011c42616c616e6365000c10c8456d697473206f6e20696e6372656173696e672074686520726567756c617220776f726b65722f6c656164207374616b652e1c506172616d733a642d20726567756c617220776f726b65722f6c6561642069642e502d207374616b652064656c746120616d6f756e74504170706c69636174696f6e57697468647261776e04002001344170706c69636174696f6e4964000d0c2501456d697473206f6e207769746864726177696e6720746865206170706c69636174696f6e20666f722074686520726567756c617220776f726b65722f6c656164206f70656e696e672e1c506172616d733a502d204a6f62206170706c69636174696f6e2069643c4f70656e696e6743616e63656c656404002001244f70656e696e674964000e0c8c456d697473206f6e2063616e63656c696e6720746865206a6f62206f70656e696e672e1c506172616d733a302d204f70656e696e6720696424427564676574536574040018011c42616c616e6365000f0cc8456d697473206f6e2073657474696e67207468652062756467657420666f722074686520776f726b696e672067726f75702e1c506172616d733a302d206e65772062756467657468576f726b65725265776172644163636f756e74557064617465640800200120576f726b6572496400000001244163636f756e744964001010cc456d697473206f6e207570646174696e672074686520726577617264206163636f756e74206f662074686520776f726b65722e1c506172616d733a4c2d204964206f662074686520776f726b65722e882d20526577617264206163636f756e74206964206f662074686520776f726b65722e64576f726b6572526577617264416d6f756e74557064617465640800200120576f726b6572496400002901013c4f7074696f6e3c42616c616e63653e001110c8456d697473206f6e207570646174696e67207468652072657761726420616d6f756e74206f662074686520776f726b65722e1c506172616d733a4c2d204964206f662074686520776f726b65722e482d205265776172642070657220626c6f636b44537461747573546578744368616e67656408002401104861736800001501013c4f7074696f6e3c5665633c75383e3e001210dc456d697473206f6e207570646174696e6720746865207374617475732074657874206f662074686520776f726b696e672067726f75702e1c506172616d733a482d2073746174757320746578742068617368342d207374617475732074657874384275646765745370656e64696e670c000001244163636f756e744964000018011c42616c616e636500001501013c4f7074696f6e3c5665633c75383e3e001314c8456d697473206f6e206275646765742066726f6d2074686520776f726b696e672067726f7570206265696e67207370656e741c506172616d733a582d205265636569766572204163636f756e742049642e402d2042616c616e6365207370656e742e302d20526174696f6e616c652e28526577617264506169641000200120576f726b6572496400000001244163636f756e744964000018011c42616c616e63650000750301445265776172645061796d656e74547970650014186c456d697473206f6e20706179696e6720746865207265776172642e1c506172616d733a4c2d204964206f662074686520776f726b65722e582d205265636569766572204163636f756e742049642e202d20526577617264b42d205061796d656e74207479706520286d697373656420726577617264206f7220726567756c6172206f6e65296c4e65774d69737365645265776172644c6576656c526561636865640800200120576f726b6572496400002901013c4f7074696f6e3c42616c616e63653e00151090456d697473206f6e207265616368696e67206e6577206d6973736564207265776172642e1c506172616d733a302d20576f726b65722049442ee82d204d69737365642072657761726420286f7074696f6e616c292e204e6f6e65206d65616e7320276e6f206d697373656420726577617264272e60576f726b696e6747726f757042756467657446756e6465640c002001204d656d6265724964000018011c42616c616e6365000028011c5665633c75383e0016147846756e642074686520776f726b696e672067726f7570206275646765742e1c506172616d733a2c2d204d656d6265722049444c2d20416d6f756e74206f662062616c616e63652c2d20526174696f6e616c65304c65616452656d61726b6564040028011c5665633c75383e00170c94456d697473206f6e204c656164206d616b696e6720612072656d61726b206d6573736167651c506172616d733a242d206d65737361676538576f726b657252656d61726b65640800200120576f726b65724964000028011c5665633c75383e00181094456d697473206f6e204c656164206d616b696e6720612072656d61726b206d6573736167651c506172616d733a202d20776f726b6572242d206d6573736167650c5c4576656e747320666f722074686973206d6f64756c652e00385f47726f75705f206576656e74738d03085070616c6c65745f776f726b696e675f67726f757024496e7374616e636534000000009103085070616c6c65745f776f726b696e675f67726f7570205261774576656e7430244f70656e696e6749640120344170706c69636174696f6e49640120684170706c69636174696f6e4964546f576f726b657249644d617001590320576f726b657249640120244163636f756e74496401001c42616c616e636501182c4f70656e696e67547970650165032c5374616b65506f6c696379014903604170706c794f6e4f70656e696e67506172616d6574657273016903204d656d626572496401201048617368012404490195030164304f70656e696e67416464656414002001244f70656e696e674964000028011c5665633c75383e00006503012c4f70656e696e675479706500004903012c5374616b65506f6c69637900002901013c4f7074696f6e3c42616c616e63653e00001c80456d697473206f6e20616464696e67206e6577206a6f62206f70656e696e672e1c506172616d733a302d204f70656e696e67206964342d204465736372697074696f6e782d204f70656e696e672054797065284c656164206f7220576f726b657229782d205374616b6520506f6c69637920666f7220746865206f70656e696e67482d205265776172642070657220626c6f636b404170706c6965644f6e4f70656e696e670800690301604170706c794f6e4f70656e696e67506172616d657465727300002001344170706c69636174696f6e4964000110dc456d697473206f6e20616464696e6720746865206170706c69636174696f6e20666f722074686520776f726b6572206f70656e696e672e1c506172616d733a542d204f70656e696e6720706172616d657465726573402d204170706c69636174696f6e206964344f70656e696e6746696c6c65640c002001244f70656e696e6749640000590301684170706c69636174696f6e4964546f576f726b657249644d617000005101015c42547265655365743c4170706c69636174696f6e49643e00021484456d697473206f6e2066696c6c696e6720746865206a6f62206f70656e696e672e1c506172616d733a4c2d20576f726b6572206f70656e696e67206964cc2d20576f726b6572206170706c69636174696f6e20696420746f2074686520776f726b65722069642064696374696f6e617279ac2d204170706c69636174696f6e6420696473207573656420746f2066696c6c20746865206f70656e696e67244c65616465725365740400200120576f726b6572496400030c88456d697473206f6e2073657474696e67207468652067726f7570206c65616465722e1c506172616d733a482d2047726f757020776f726b65722069642e60576f726b6572526f6c654163636f756e74557064617465640800200120576f726b6572496400000001244163636f756e744964000410c4456d697473206f6e207570646174696e672074686520726f6c65206163636f756e74206f662074686520776f726b65722e1c506172616d733a4c2d204964206f662074686520776f726b65722e802d20526f6c65206163636f756e74206964206f662074686520776f726b65722e2c4c6561646572556e7365740005047c456d697473206f6e20756e2d73657474696e6720746865206c65616465722e30576f726b65724578697465640400200120576f726b6572496400061070456d697473206f6e2065786974696e672074686520776f726b65722e1c506172616d733a302d20776f726b65722069642e302d20526174696f6e616c652e50576f726b6572537461727465644c656176696e670800200120576f726b6572496400001501013c4f7074696f6e3c5665633c75383e3e000710b4456d697473207768656e20776f726b65722073746172746564206c656176696e6720746865697220726f6c652e1c506172616d733a302d20576f726b65722069642e302d20526174696f6e616c652e405465726d696e61746564576f726b65720c00200120576f726b6572496400002901013c4f7074696f6e3c42616c616e63653e00001501013c4f7074696f6e3c5665633c75383e3e00081480456d697473206f6e207465726d696e6174696e672074686520776f726b65722e1c506172616d733a302d20776f726b65722069642e282d2050656e616c74792e302d20526174696f6e616c652e405465726d696e617465644c65616465720c00200120576f726b6572496400002901013c4f7074696f6e3c42616c616e63653e00001501013c4f7074696f6e3c5665633c75383e3e00091480456d697473206f6e207465726d696e6174696e6720746865206c65616465722e1c506172616d733a4c2d206c656164657220776f726b65722069642e282d2050656e616c74792e302d20526174696f6e616c652e305374616b65536c61736865641000200120576f726b65724964000018011c42616c616e6365000018011c42616c616e636500001501013c4f7074696f6e3c5665633c75383e3e000a18c0456d697473206f6e20736c617368696e672074686520726567756c617220776f726b65722f6c656164207374616b652e1c506172616d733a642d20726567756c617220776f726b65722f6c6561642069642e642d2061637475616c20736c61736865642062616c616e63652e702d2052657175657374656420736c61736865642062616c616e63652e302d20526174696f6e616c652e385374616b654465637265617365640800200120576f726b65724964000018011c42616c616e6365000b10c8456d697473206f6e2064656372656173696e672074686520726567756c617220776f726b65722f6c656164207374616b652e1c506172616d733a642d20726567756c617220776f726b65722f6c6561642069642e502d207374616b652064656c746120616d6f756e74385374616b65496e637265617365640800200120576f726b65724964000018011c42616c616e6365000c10c8456d697473206f6e20696e6372656173696e672074686520726567756c617220776f726b65722f6c656164207374616b652e1c506172616d733a642d20726567756c617220776f726b65722f6c6561642069642e502d207374616b652064656c746120616d6f756e74504170706c69636174696f6e57697468647261776e04002001344170706c69636174696f6e4964000d0c2501456d697473206f6e207769746864726177696e6720746865206170706c69636174696f6e20666f722074686520726567756c617220776f726b65722f6c656164206f70656e696e672e1c506172616d733a502d204a6f62206170706c69636174696f6e2069643c4f70656e696e6743616e63656c656404002001244f70656e696e674964000e0c8c456d697473206f6e2063616e63656c696e6720746865206a6f62206f70656e696e672e1c506172616d733a302d204f70656e696e6720696424427564676574536574040018011c42616c616e6365000f0cc8456d697473206f6e2073657474696e67207468652062756467657420666f722074686520776f726b696e672067726f75702e1c506172616d733a302d206e65772062756467657468576f726b65725265776172644163636f756e74557064617465640800200120576f726b6572496400000001244163636f756e744964001010cc456d697473206f6e207570646174696e672074686520726577617264206163636f756e74206f662074686520776f726b65722e1c506172616d733a4c2d204964206f662074686520776f726b65722e882d20526577617264206163636f756e74206964206f662074686520776f726b65722e64576f726b6572526577617264416d6f756e74557064617465640800200120576f726b6572496400002901013c4f7074696f6e3c42616c616e63653e001110c8456d697473206f6e207570646174696e67207468652072657761726420616d6f756e74206f662074686520776f726b65722e1c506172616d733a4c2d204964206f662074686520776f726b65722e482d205265776172642070657220626c6f636b44537461747573546578744368616e67656408002401104861736800001501013c4f7074696f6e3c5665633c75383e3e001210dc456d697473206f6e207570646174696e6720746865207374617475732074657874206f662074686520776f726b696e672067726f75702e1c506172616d733a482d2073746174757320746578742068617368342d207374617475732074657874384275646765745370656e64696e670c000001244163636f756e744964000018011c42616c616e636500001501013c4f7074696f6e3c5665633c75383e3e001314c8456d697473206f6e206275646765742066726f6d2074686520776f726b696e672067726f7570206265696e67207370656e741c506172616d733a582d205265636569766572204163636f756e742049642e402d2042616c616e6365207370656e742e302d20526174696f6e616c652e28526577617264506169641000200120576f726b6572496400000001244163636f756e744964000018011c42616c616e63650000750301445265776172645061796d656e74547970650014186c456d697473206f6e20706179696e6720746865207265776172642e1c506172616d733a4c2d204964206f662074686520776f726b65722e582d205265636569766572204163636f756e742049642e202d20526577617264b42d205061796d656e74207479706520286d697373656420726577617264206f7220726567756c6172206f6e65296c4e65774d69737365645265776172644c6576656c526561636865640800200120576f726b6572496400002901013c4f7074696f6e3c42616c616e63653e00151090456d697473206f6e207265616368696e67206e6577206d6973736564207265776172642e1c506172616d733a302d20576f726b65722049442ee82d204d69737365642072657761726420286f7074696f6e616c292e204e6f6e65206d65616e7320276e6f206d697373656420726577617264272e60576f726b696e6747726f757042756467657446756e6465640c002001204d656d6265724964000018011c42616c616e6365000028011c5665633c75383e0016147846756e642074686520776f726b696e672067726f7570206275646765742e1c506172616d733a2c2d204d656d6265722049444c2d20416d6f756e74206f662062616c616e63652c2d20526174696f6e616c65304c65616452656d61726b6564040028011c5665633c75383e00170c94456d697473206f6e204c656164206d616b696e6720612072656d61726b206d6573736167651c506172616d733a242d206d65737361676538576f726b657252656d61726b65640800200120576f726b65724964000028011c5665633c75383e00181094456d697473206f6e204c656164206d616b696e6720612072656d61726b206d6573736167651c506172616d733a202d20776f726b6572242d206d6573736167650c5c4576656e747320666f722074686973206d6f64756c652e00385f47726f75705f206576656e74739503085070616c6c65745f776f726b696e675f67726f757024496e7374616e636535000000009903085070616c6c65745f776f726b696e675f67726f7570205261774576656e7430244f70656e696e6749640120344170706c69636174696f6e49640120684170706c69636174696f6e4964546f576f726b657249644d617001590320576f726b657249640120244163636f756e74496401001c42616c616e636501182c4f70656e696e67547970650165032c5374616b65506f6c696379014903604170706c794f6e4f70656e696e67506172616d6574657273016903204d656d62657249640120104861736801240449019d030164304f70656e696e67416464656414002001244f70656e696e674964000028011c5665633c75383e00006503012c4f70656e696e675479706500004903012c5374616b65506f6c69637900002901013c4f7074696f6e3c42616c616e63653e00001c80456d697473206f6e20616464696e67206e6577206a6f62206f70656e696e672e1c506172616d733a302d204f70656e696e67206964342d204465736372697074696f6e782d204f70656e696e672054797065284c656164206f7220576f726b657229782d205374616b6520506f6c69637920666f7220746865206f70656e696e67482d205265776172642070657220626c6f636b404170706c6965644f6e4f70656e696e670800690301604170706c794f6e4f70656e696e67506172616d657465727300002001344170706c69636174696f6e4964000110dc456d697473206f6e20616464696e6720746865206170706c69636174696f6e20666f722074686520776f726b6572206f70656e696e672e1c506172616d733a542d204f70656e696e6720706172616d657465726573402d204170706c69636174696f6e206964344f70656e696e6746696c6c65640c002001244f70656e696e6749640000590301684170706c69636174696f6e4964546f576f726b657249644d617000005101015c42547265655365743c4170706c69636174696f6e49643e00021484456d697473206f6e2066696c6c696e6720746865206a6f62206f70656e696e672e1c506172616d733a4c2d20576f726b6572206f70656e696e67206964cc2d20576f726b6572206170706c69636174696f6e20696420746f2074686520776f726b65722069642064696374696f6e617279ac2d204170706c69636174696f6e6420696473207573656420746f2066696c6c20746865206f70656e696e67244c65616465725365740400200120576f726b6572496400030c88456d697473206f6e2073657474696e67207468652067726f7570206c65616465722e1c506172616d733a482d2047726f757020776f726b65722069642e60576f726b6572526f6c654163636f756e74557064617465640800200120576f726b6572496400000001244163636f756e744964000410c4456d697473206f6e207570646174696e672074686520726f6c65206163636f756e74206f662074686520776f726b65722e1c506172616d733a4c2d204964206f662074686520776f726b65722e802d20526f6c65206163636f756e74206964206f662074686520776f726b65722e2c4c6561646572556e7365740005047c456d697473206f6e20756e2d73657474696e6720746865206c65616465722e30576f726b65724578697465640400200120576f726b6572496400061070456d697473206f6e2065786974696e672074686520776f726b65722e1c506172616d733a302d20776f726b65722069642e302d20526174696f6e616c652e50576f726b6572537461727465644c656176696e670800200120576f726b6572496400001501013c4f7074696f6e3c5665633c75383e3e000710b4456d697473207768656e20776f726b65722073746172746564206c656176696e6720746865697220726f6c652e1c506172616d733a302d20576f726b65722069642e302d20526174696f6e616c652e405465726d696e61746564576f726b65720c00200120576f726b6572496400002901013c4f7074696f6e3c42616c616e63653e00001501013c4f7074696f6e3c5665633c75383e3e00081480456d697473206f6e207465726d696e6174696e672074686520776f726b65722e1c506172616d733a302d20776f726b65722069642e282d2050656e616c74792e302d20526174696f6e616c652e405465726d696e617465644c65616465720c00200120576f726b6572496400002901013c4f7074696f6e3c42616c616e63653e00001501013c4f7074696f6e3c5665633c75383e3e00091480456d697473206f6e207465726d696e6174696e6720746865206c65616465722e1c506172616d733a4c2d206c656164657220776f726b65722069642e282d2050656e616c74792e302d20526174696f6e616c652e305374616b65536c61736865641000200120576f726b65724964000018011c42616c616e6365000018011c42616c616e636500001501013c4f7074696f6e3c5665633c75383e3e000a18c0456d697473206f6e20736c617368696e672074686520726567756c617220776f726b65722f6c656164207374616b652e1c506172616d733a642d20726567756c617220776f726b65722f6c6561642069642e642d2061637475616c20736c61736865642062616c616e63652e702d2052657175657374656420736c61736865642062616c616e63652e302d20526174696f6e616c652e385374616b654465637265617365640800200120576f726b65724964000018011c42616c616e6365000b10c8456d697473206f6e2064656372656173696e672074686520726567756c617220776f726b65722f6c656164207374616b652e1c506172616d733a642d20726567756c617220776f726b65722f6c6561642069642e502d207374616b652064656c746120616d6f756e74385374616b65496e637265617365640800200120576f726b65724964000018011c42616c616e6365000c10c8456d697473206f6e20696e6372656173696e672074686520726567756c617220776f726b65722f6c656164207374616b652e1c506172616d733a642d20726567756c617220776f726b65722f6c6561642069642e502d207374616b652064656c746120616d6f756e74504170706c69636174696f6e57697468647261776e04002001344170706c69636174696f6e4964000d0c2501456d697473206f6e207769746864726177696e6720746865206170706c69636174696f6e20666f722074686520726567756c617220776f726b65722f6c656164206f70656e696e672e1c506172616d733a502d204a6f62206170706c69636174696f6e2069643c4f70656e696e6743616e63656c656404002001244f70656e696e674964000e0c8c456d697473206f6e2063616e63656c696e6720746865206a6f62206f70656e696e672e1c506172616d733a302d204f70656e696e6720696424427564676574536574040018011c42616c616e6365000f0cc8456d697473206f6e2073657474696e67207468652062756467657420666f722074686520776f726b696e672067726f75702e1c506172616d733a302d206e65772062756467657468576f726b65725265776172644163636f756e74557064617465640800200120576f726b6572496400000001244163636f756e744964001010cc456d697473206f6e207570646174696e672074686520726577617264206163636f756e74206f662074686520776f726b65722e1c506172616d733a4c2d204964206f662074686520776f726b65722e882d20526577617264206163636f756e74206964206f662074686520776f726b65722e64576f726b6572526577617264416d6f756e74557064617465640800200120576f726b6572496400002901013c4f7074696f6e3c42616c616e63653e001110c8456d697473206f6e207570646174696e67207468652072657761726420616d6f756e74206f662074686520776f726b65722e1c506172616d733a4c2d204964206f662074686520776f726b65722e482d205265776172642070657220626c6f636b44537461747573546578744368616e67656408002401104861736800001501013c4f7074696f6e3c5665633c75383e3e001210dc456d697473206f6e207570646174696e6720746865207374617475732074657874206f662074686520776f726b696e672067726f75702e1c506172616d733a482d2073746174757320746578742068617368342d207374617475732074657874384275646765745370656e64696e670c000001244163636f756e744964000018011c42616c616e636500001501013c4f7074696f6e3c5665633c75383e3e001314c8456d697473206f6e206275646765742066726f6d2074686520776f726b696e672067726f7570206265696e67207370656e741c506172616d733a582d205265636569766572204163636f756e742049642e402d2042616c616e6365207370656e742e302d20526174696f6e616c652e28526577617264506169641000200120576f726b6572496400000001244163636f756e744964000018011c42616c616e63650000750301445265776172645061796d656e74547970650014186c456d697473206f6e20706179696e6720746865207265776172642e1c506172616d733a4c2d204964206f662074686520776f726b65722e582d205265636569766572204163636f756e742049642e202d20526577617264b42d205061796d656e74207479706520286d697373656420726577617264206f7220726567756c6172206f6e65296c4e65774d69737365645265776172644c6576656c526561636865640800200120576f726b6572496400002901013c4f7074696f6e3c42616c616e63653e00151090456d697473206f6e207265616368696e67206e6577206d6973736564207265776172642e1c506172616d733a302d20576f726b65722049442ee82d204d69737365642072657761726420286f7074696f6e616c292e204e6f6e65206d65616e7320276e6f206d697373656420726577617264272e60576f726b696e6747726f757042756467657446756e6465640c002001204d656d6265724964000018011c42616c616e6365000028011c5665633c75383e0016147846756e642074686520776f726b696e672067726f7570206275646765742e1c506172616d733a2c2d204d656d6265722049444c2d20416d6f756e74206f662062616c616e63652c2d20526174696f6e616c65304c65616452656d61726b6564040028011c5665633c75383e00170c94456d697473206f6e204c656164206d616b696e6720612072656d61726b206d6573736167651c506172616d733a242d206d65737361676538576f726b657252656d61726b65640800200120576f726b65724964000028011c5665633c75383e00181094456d697473206f6e204c656164206d616b696e6720612072656d61726b206d6573736167651c506172616d733a202d20776f726b6572242d206d6573736167650c5c4576656e747320666f722074686973206d6f64756c652e00385f47726f75705f206576656e74739d03085070616c6c65745f776f726b696e675f67726f757024496e7374616e63653600000000a103085070616c6c65745f776f726b696e675f67726f7570205261774576656e7430244f70656e696e6749640120344170706c69636174696f6e49640120684170706c69636174696f6e4964546f576f726b657249644d617001590320576f726b657249640120244163636f756e74496401001c42616c616e636501182c4f70656e696e67547970650165032c5374616b65506f6c696379014903604170706c794f6e4f70656e696e67506172616d6574657273016903204d656d6265724964012010486173680124044901a5030164304f70656e696e67416464656414002001244f70656e696e674964000028011c5665633c75383e00006503012c4f70656e696e675479706500004903012c5374616b65506f6c69637900002901013c4f7074696f6e3c42616c616e63653e00001c80456d697473206f6e20616464696e67206e6577206a6f62206f70656e696e672e1c506172616d733a302d204f70656e696e67206964342d204465736372697074696f6e782d204f70656e696e672054797065284c656164206f7220576f726b657229782d205374616b6520506f6c69637920666f7220746865206f70656e696e67482d205265776172642070657220626c6f636b404170706c6965644f6e4f70656e696e670800690301604170706c794f6e4f70656e696e67506172616d657465727300002001344170706c69636174696f6e4964000110dc456d697473206f6e20616464696e6720746865206170706c69636174696f6e20666f722074686520776f726b6572206f70656e696e672e1c506172616d733a542d204f70656e696e6720706172616d657465726573402d204170706c69636174696f6e206964344f70656e696e6746696c6c65640c002001244f70656e696e6749640000590301684170706c69636174696f6e4964546f576f726b657249644d617000005101015c42547265655365743c4170706c69636174696f6e49643e00021484456d697473206f6e2066696c6c696e6720746865206a6f62206f70656e696e672e1c506172616d733a4c2d20576f726b6572206f70656e696e67206964cc2d20576f726b6572206170706c69636174696f6e20696420746f2074686520776f726b65722069642064696374696f6e617279ac2d204170706c69636174696f6e6420696473207573656420746f2066696c6c20746865206f70656e696e67244c65616465725365740400200120576f726b6572496400030c88456d697473206f6e2073657474696e67207468652067726f7570206c65616465722e1c506172616d733a482d2047726f757020776f726b65722069642e60576f726b6572526f6c654163636f756e74557064617465640800200120576f726b6572496400000001244163636f756e744964000410c4456d697473206f6e207570646174696e672074686520726f6c65206163636f756e74206f662074686520776f726b65722e1c506172616d733a4c2d204964206f662074686520776f726b65722e802d20526f6c65206163636f756e74206964206f662074686520776f726b65722e2c4c6561646572556e7365740005047c456d697473206f6e20756e2d73657474696e6720746865206c65616465722e30576f726b65724578697465640400200120576f726b6572496400061070456d697473206f6e2065786974696e672074686520776f726b65722e1c506172616d733a302d20776f726b65722069642e302d20526174696f6e616c652e50576f726b6572537461727465644c656176696e670800200120576f726b6572496400001501013c4f7074696f6e3c5665633c75383e3e000710b4456d697473207768656e20776f726b65722073746172746564206c656176696e6720746865697220726f6c652e1c506172616d733a302d20576f726b65722069642e302d20526174696f6e616c652e405465726d696e61746564576f726b65720c00200120576f726b6572496400002901013c4f7074696f6e3c42616c616e63653e00001501013c4f7074696f6e3c5665633c75383e3e00081480456d697473206f6e207465726d696e6174696e672074686520776f726b65722e1c506172616d733a302d20776f726b65722069642e282d2050656e616c74792e302d20526174696f6e616c652e405465726d696e617465644c65616465720c00200120576f726b6572496400002901013c4f7074696f6e3c42616c616e63653e00001501013c4f7074696f6e3c5665633c75383e3e00091480456d697473206f6e207465726d696e6174696e6720746865206c65616465722e1c506172616d733a4c2d206c656164657220776f726b65722069642e282d2050656e616c74792e302d20526174696f6e616c652e305374616b65536c61736865641000200120576f726b65724964000018011c42616c616e6365000018011c42616c616e636500001501013c4f7074696f6e3c5665633c75383e3e000a18c0456d697473206f6e20736c617368696e672074686520726567756c617220776f726b65722f6c656164207374616b652e1c506172616d733a642d20726567756c617220776f726b65722f6c6561642069642e642d2061637475616c20736c61736865642062616c616e63652e702d2052657175657374656420736c61736865642062616c616e63652e302d20526174696f6e616c652e385374616b654465637265617365640800200120576f726b65724964000018011c42616c616e6365000b10c8456d697473206f6e2064656372656173696e672074686520726567756c617220776f726b65722f6c656164207374616b652e1c506172616d733a642d20726567756c617220776f726b65722f6c6561642069642e502d207374616b652064656c746120616d6f756e74385374616b65496e637265617365640800200120576f726b65724964000018011c42616c616e6365000c10c8456d697473206f6e20696e6372656173696e672074686520726567756c617220776f726b65722f6c656164207374616b652e1c506172616d733a642d20726567756c617220776f726b65722f6c6561642069642e502d207374616b652064656c746120616d6f756e74504170706c69636174696f6e57697468647261776e04002001344170706c69636174696f6e4964000d0c2501456d697473206f6e207769746864726177696e6720746865206170706c69636174696f6e20666f722074686520726567756c617220776f726b65722f6c656164206f70656e696e672e1c506172616d733a502d204a6f62206170706c69636174696f6e2069643c4f70656e696e6743616e63656c656404002001244f70656e696e674964000e0c8c456d697473206f6e2063616e63656c696e6720746865206a6f62206f70656e696e672e1c506172616d733a302d204f70656e696e6720696424427564676574536574040018011c42616c616e6365000f0cc8456d697473206f6e2073657474696e67207468652062756467657420666f722074686520776f726b696e672067726f75702e1c506172616d733a302d206e65772062756467657468576f726b65725265776172644163636f756e74557064617465640800200120576f726b6572496400000001244163636f756e744964001010cc456d697473206f6e207570646174696e672074686520726577617264206163636f756e74206f662074686520776f726b65722e1c506172616d733a4c2d204964206f662074686520776f726b65722e882d20526577617264206163636f756e74206964206f662074686520776f726b65722e64576f726b6572526577617264416d6f756e74557064617465640800200120576f726b6572496400002901013c4f7074696f6e3c42616c616e63653e001110c8456d697473206f6e207570646174696e67207468652072657761726420616d6f756e74206f662074686520776f726b65722e1c506172616d733a4c2d204964206f662074686520776f726b65722e482d205265776172642070657220626c6f636b44537461747573546578744368616e67656408002401104861736800001501013c4f7074696f6e3c5665633c75383e3e001210dc456d697473206f6e207570646174696e6720746865207374617475732074657874206f662074686520776f726b696e672067726f75702e1c506172616d733a482d2073746174757320746578742068617368342d207374617475732074657874384275646765745370656e64696e670c000001244163636f756e744964000018011c42616c616e636500001501013c4f7074696f6e3c5665633c75383e3e001314c8456d697473206f6e206275646765742066726f6d2074686520776f726b696e672067726f7570206265696e67207370656e741c506172616d733a582d205265636569766572204163636f756e742049642e402d2042616c616e6365207370656e742e302d20526174696f6e616c652e28526577617264506169641000200120576f726b6572496400000001244163636f756e744964000018011c42616c616e63650000750301445265776172645061796d656e74547970650014186c456d697473206f6e20706179696e6720746865207265776172642e1c506172616d733a4c2d204964206f662074686520776f726b65722e582d205265636569766572204163636f756e742049642e202d20526577617264b42d205061796d656e74207479706520286d697373656420726577617264206f7220726567756c6172206f6e65296c4e65774d69737365645265776172644c6576656c526561636865640800200120576f726b6572496400002901013c4f7074696f6e3c42616c616e63653e00151090456d697473206f6e207265616368696e67206e6577206d6973736564207265776172642e1c506172616d733a302d20576f726b65722049442ee82d204d69737365642072657761726420286f7074696f6e616c292e204e6f6e65206d65616e7320276e6f206d697373656420726577617264272e60576f726b696e6747726f757042756467657446756e6465640c002001204d656d6265724964000018011c42616c616e6365000028011c5665633c75383e0016147846756e642074686520776f726b696e672067726f7570206275646765742e1c506172616d733a2c2d204d656d6265722049444c2d20416d6f756e74206f662062616c616e63652c2d20526174696f6e616c65304c65616452656d61726b6564040028011c5665633c75383e00170c94456d697473206f6e204c656164206d616b696e6720612072656d61726b206d6573736167651c506172616d733a242d206d65737361676538576f726b657252656d61726b65640800200120576f726b65724964000028011c5665633c75383e00181094456d697473206f6e204c656164206d616b696e6720612072656d61726b206d6573736167651c506172616d733a202d20776f726b6572242d206d6573736167650c5c4576656e747320666f722074686973206d6f64756c652e00385f47726f75705f206576656e7473a503085070616c6c65745f776f726b696e675f67726f757024496e7374616e63653700000000a903085070616c6c65745f776f726b696e675f67726f7570205261774576656e7430244f70656e696e6749640120344170706c69636174696f6e49640120684170706c69636174696f6e4964546f576f726b657249644d617001590320576f726b657249640120244163636f756e74496401001c42616c616e636501182c4f70656e696e67547970650165032c5374616b65506f6c696379014903604170706c794f6e4f70656e696e67506172616d6574657273016903204d656d6265724964012010486173680124044901ad030164304f70656e696e67416464656414002001244f70656e696e674964000028011c5665633c75383e00006503012c4f70656e696e675479706500004903012c5374616b65506f6c69637900002901013c4f7074696f6e3c42616c616e63653e00001c80456d697473206f6e20616464696e67206e6577206a6f62206f70656e696e672e1c506172616d733a302d204f70656e696e67206964342d204465736372697074696f6e782d204f70656e696e672054797065284c656164206f7220576f726b657229782d205374616b6520506f6c69637920666f7220746865206f70656e696e67482d205265776172642070657220626c6f636b404170706c6965644f6e4f70656e696e670800690301604170706c794f6e4f70656e696e67506172616d657465727300002001344170706c69636174696f6e4964000110dc456d697473206f6e20616464696e6720746865206170706c69636174696f6e20666f722074686520776f726b6572206f70656e696e672e1c506172616d733a542d204f70656e696e6720706172616d657465726573402d204170706c69636174696f6e206964344f70656e696e6746696c6c65640c002001244f70656e696e6749640000590301684170706c69636174696f6e4964546f576f726b657249644d617000005101015c42547265655365743c4170706c69636174696f6e49643e00021484456d697473206f6e2066696c6c696e6720746865206a6f62206f70656e696e672e1c506172616d733a4c2d20576f726b6572206f70656e696e67206964cc2d20576f726b6572206170706c69636174696f6e20696420746f2074686520776f726b65722069642064696374696f6e617279ac2d204170706c69636174696f6e6420696473207573656420746f2066696c6c20746865206f70656e696e67244c65616465725365740400200120576f726b6572496400030c88456d697473206f6e2073657474696e67207468652067726f7570206c65616465722e1c506172616d733a482d2047726f757020776f726b65722069642e60576f726b6572526f6c654163636f756e74557064617465640800200120576f726b6572496400000001244163636f756e744964000410c4456d697473206f6e207570646174696e672074686520726f6c65206163636f756e74206f662074686520776f726b65722e1c506172616d733a4c2d204964206f662074686520776f726b65722e802d20526f6c65206163636f756e74206964206f662074686520776f726b65722e2c4c6561646572556e7365740005047c456d697473206f6e20756e2d73657474696e6720746865206c65616465722e30576f726b65724578697465640400200120576f726b6572496400061070456d697473206f6e2065786974696e672074686520776f726b65722e1c506172616d733a302d20776f726b65722069642e302d20526174696f6e616c652e50576f726b6572537461727465644c656176696e670800200120576f726b6572496400001501013c4f7074696f6e3c5665633c75383e3e000710b4456d697473207768656e20776f726b65722073746172746564206c656176696e6720746865697220726f6c652e1c506172616d733a302d20576f726b65722069642e302d20526174696f6e616c652e405465726d696e61746564576f726b65720c00200120576f726b6572496400002901013c4f7074696f6e3c42616c616e63653e00001501013c4f7074696f6e3c5665633c75383e3e00081480456d697473206f6e207465726d696e6174696e672074686520776f726b65722e1c506172616d733a302d20776f726b65722069642e282d2050656e616c74792e302d20526174696f6e616c652e405465726d696e617465644c65616465720c00200120576f726b6572496400002901013c4f7074696f6e3c42616c616e63653e00001501013c4f7074696f6e3c5665633c75383e3e00091480456d697473206f6e207465726d696e6174696e6720746865206c65616465722e1c506172616d733a4c2d206c656164657220776f726b65722069642e282d2050656e616c74792e302d20526174696f6e616c652e305374616b65536c61736865641000200120576f726b65724964000018011c42616c616e6365000018011c42616c616e636500001501013c4f7074696f6e3c5665633c75383e3e000a18c0456d697473206f6e20736c617368696e672074686520726567756c617220776f726b65722f6c656164207374616b652e1c506172616d733a642d20726567756c617220776f726b65722f6c6561642069642e642d2061637475616c20736c61736865642062616c616e63652e702d2052657175657374656420736c61736865642062616c616e63652e302d20526174696f6e616c652e385374616b654465637265617365640800200120576f726b65724964000018011c42616c616e6365000b10c8456d697473206f6e2064656372656173696e672074686520726567756c617220776f726b65722f6c656164207374616b652e1c506172616d733a642d20726567756c617220776f726b65722f6c6561642069642e502d207374616b652064656c746120616d6f756e74385374616b65496e637265617365640800200120576f726b65724964000018011c42616c616e6365000c10c8456d697473206f6e20696e6372656173696e672074686520726567756c617220776f726b65722f6c656164207374616b652e1c506172616d733a642d20726567756c617220776f726b65722f6c6561642069642e502d207374616b652064656c746120616d6f756e74504170706c69636174696f6e57697468647261776e04002001344170706c69636174696f6e4964000d0c2501456d697473206f6e207769746864726177696e6720746865206170706c69636174696f6e20666f722074686520726567756c617220776f726b65722f6c656164206f70656e696e672e1c506172616d733a502d204a6f62206170706c69636174696f6e2069643c4f70656e696e6743616e63656c656404002001244f70656e696e674964000e0c8c456d697473206f6e2063616e63656c696e6720746865206a6f62206f70656e696e672e1c506172616d733a302d204f70656e696e6720696424427564676574536574040018011c42616c616e6365000f0cc8456d697473206f6e2073657474696e67207468652062756467657420666f722074686520776f726b696e672067726f75702e1c506172616d733a302d206e65772062756467657468576f726b65725265776172644163636f756e74557064617465640800200120576f726b6572496400000001244163636f756e744964001010cc456d697473206f6e207570646174696e672074686520726577617264206163636f756e74206f662074686520776f726b65722e1c506172616d733a4c2d204964206f662074686520776f726b65722e882d20526577617264206163636f756e74206964206f662074686520776f726b65722e64576f726b6572526577617264416d6f756e74557064617465640800200120576f726b6572496400002901013c4f7074696f6e3c42616c616e63653e001110c8456d697473206f6e207570646174696e67207468652072657761726420616d6f756e74206f662074686520776f726b65722e1c506172616d733a4c2d204964206f662074686520776f726b65722e482d205265776172642070657220626c6f636b44537461747573546578744368616e67656408002401104861736800001501013c4f7074696f6e3c5665633c75383e3e001210dc456d697473206f6e207570646174696e6720746865207374617475732074657874206f662074686520776f726b696e672067726f75702e1c506172616d733a482d2073746174757320746578742068617368342d207374617475732074657874384275646765745370656e64696e670c000001244163636f756e744964000018011c42616c616e636500001501013c4f7074696f6e3c5665633c75383e3e001314c8456d697473206f6e206275646765742066726f6d2074686520776f726b696e672067726f7570206265696e67207370656e741c506172616d733a582d205265636569766572204163636f756e742049642e402d2042616c616e6365207370656e742e302d20526174696f6e616c652e28526577617264506169641000200120576f726b6572496400000001244163636f756e744964000018011c42616c616e63650000750301445265776172645061796d656e74547970650014186c456d697473206f6e20706179696e6720746865207265776172642e1c506172616d733a4c2d204964206f662074686520776f726b65722e582d205265636569766572204163636f756e742049642e202d20526577617264b42d205061796d656e74207479706520286d697373656420726577617264206f7220726567756c6172206f6e65296c4e65774d69737365645265776172644c6576656c526561636865640800200120576f726b6572496400002901013c4f7074696f6e3c42616c616e63653e00151090456d697473206f6e207265616368696e67206e6577206d6973736564207265776172642e1c506172616d733a302d20576f726b65722049442ee82d204d69737365642072657761726420286f7074696f6e616c292e204e6f6e65206d65616e7320276e6f206d697373656420726577617264272e60576f726b696e6747726f757042756467657446756e6465640c002001204d656d6265724964000018011c42616c616e6365000028011c5665633c75383e0016147846756e642074686520776f726b696e672067726f7570206275646765742e1c506172616d733a2c2d204d656d6265722049444c2d20416d6f756e74206f662062616c616e63652c2d20526174696f6e616c65304c65616452656d61726b6564040028011c5665633c75383e00170c94456d697473206f6e204c656164206d616b696e6720612072656d61726b206d6573736167651c506172616d733a242d206d65737361676538576f726b657252656d61726b65640800200120576f726b65724964000028011c5665633c75383e00181094456d697473206f6e204c656164206d616b696e6720612072656d61726b206d6573736167651c506172616d733a202d20776f726b6572242d206d6573736167650c5c4576656e747320666f722074686973206d6f64756c652e00385f47726f75705f206576656e7473ad03085070616c6c65745f776f726b696e675f67726f757024496e7374616e63653800000000b103085070616c6c65745f776f726b696e675f67726f7570205261774576656e7430244f70656e696e6749640120344170706c69636174696f6e49640120684170706c69636174696f6e4964546f576f726b657249644d617001590320576f726b657249640120244163636f756e74496401001c42616c616e636501182c4f70656e696e67547970650165032c5374616b65506f6c696379014903604170706c794f6e4f70656e696e67506172616d6574657273016903204d656d6265724964012010486173680124044901b5030164304f70656e696e67416464656414002001244f70656e696e674964000028011c5665633c75383e00006503012c4f70656e696e675479706500004903012c5374616b65506f6c69637900002901013c4f7074696f6e3c42616c616e63653e00001c80456d697473206f6e20616464696e67206e6577206a6f62206f70656e696e672e1c506172616d733a302d204f70656e696e67206964342d204465736372697074696f6e782d204f70656e696e672054797065284c656164206f7220576f726b657229782d205374616b6520506f6c69637920666f7220746865206f70656e696e67482d205265776172642070657220626c6f636b404170706c6965644f6e4f70656e696e670800690301604170706c794f6e4f70656e696e67506172616d657465727300002001344170706c69636174696f6e4964000110dc456d697473206f6e20616464696e6720746865206170706c69636174696f6e20666f722074686520776f726b6572206f70656e696e672e1c506172616d733a542d204f70656e696e6720706172616d657465726573402d204170706c69636174696f6e206964344f70656e696e6746696c6c65640c002001244f70656e696e6749640000590301684170706c69636174696f6e4964546f576f726b657249644d617000005101015c42547265655365743c4170706c69636174696f6e49643e00021484456d697473206f6e2066696c6c696e6720746865206a6f62206f70656e696e672e1c506172616d733a4c2d20576f726b6572206f70656e696e67206964cc2d20576f726b6572206170706c69636174696f6e20696420746f2074686520776f726b65722069642064696374696f6e617279ac2d204170706c69636174696f6e6420696473207573656420746f2066696c6c20746865206f70656e696e67244c65616465725365740400200120576f726b6572496400030c88456d697473206f6e2073657474696e67207468652067726f7570206c65616465722e1c506172616d733a482d2047726f757020776f726b65722069642e60576f726b6572526f6c654163636f756e74557064617465640800200120576f726b6572496400000001244163636f756e744964000410c4456d697473206f6e207570646174696e672074686520726f6c65206163636f756e74206f662074686520776f726b65722e1c506172616d733a4c2d204964206f662074686520776f726b65722e802d20526f6c65206163636f756e74206964206f662074686520776f726b65722e2c4c6561646572556e7365740005047c456d697473206f6e20756e2d73657474696e6720746865206c65616465722e30576f726b65724578697465640400200120576f726b6572496400061070456d697473206f6e2065786974696e672074686520776f726b65722e1c506172616d733a302d20776f726b65722069642e302d20526174696f6e616c652e50576f726b6572537461727465644c656176696e670800200120576f726b6572496400001501013c4f7074696f6e3c5665633c75383e3e000710b4456d697473207768656e20776f726b65722073746172746564206c656176696e6720746865697220726f6c652e1c506172616d733a302d20576f726b65722069642e302d20526174696f6e616c652e405465726d696e61746564576f726b65720c00200120576f726b6572496400002901013c4f7074696f6e3c42616c616e63653e00001501013c4f7074696f6e3c5665633c75383e3e00081480456d697473206f6e207465726d696e6174696e672074686520776f726b65722e1c506172616d733a302d20776f726b65722069642e282d2050656e616c74792e302d20526174696f6e616c652e405465726d696e617465644c65616465720c00200120576f726b6572496400002901013c4f7074696f6e3c42616c616e63653e00001501013c4f7074696f6e3c5665633c75383e3e00091480456d697473206f6e207465726d696e6174696e6720746865206c65616465722e1c506172616d733a4c2d206c656164657220776f726b65722069642e282d2050656e616c74792e302d20526174696f6e616c652e305374616b65536c61736865641000200120576f726b65724964000018011c42616c616e6365000018011c42616c616e636500001501013c4f7074696f6e3c5665633c75383e3e000a18c0456d697473206f6e20736c617368696e672074686520726567756c617220776f726b65722f6c656164207374616b652e1c506172616d733a642d20726567756c617220776f726b65722f6c6561642069642e642d2061637475616c20736c61736865642062616c616e63652e702d2052657175657374656420736c61736865642062616c616e63652e302d20526174696f6e616c652e385374616b654465637265617365640800200120576f726b65724964000018011c42616c616e6365000b10c8456d697473206f6e2064656372656173696e672074686520726567756c617220776f726b65722f6c656164207374616b652e1c506172616d733a642d20726567756c617220776f726b65722f6c6561642069642e502d207374616b652064656c746120616d6f756e74385374616b65496e637265617365640800200120576f726b65724964000018011c42616c616e6365000c10c8456d697473206f6e20696e6372656173696e672074686520726567756c617220776f726b65722f6c656164207374616b652e1c506172616d733a642d20726567756c617220776f726b65722f6c6561642069642e502d207374616b652064656c746120616d6f756e74504170706c69636174696f6e57697468647261776e04002001344170706c69636174696f6e4964000d0c2501456d697473206f6e207769746864726177696e6720746865206170706c69636174696f6e20666f722074686520726567756c617220776f726b65722f6c656164206f70656e696e672e1c506172616d733a502d204a6f62206170706c69636174696f6e2069643c4f70656e696e6743616e63656c656404002001244f70656e696e674964000e0c8c456d697473206f6e2063616e63656c696e6720746865206a6f62206f70656e696e672e1c506172616d733a302d204f70656e696e6720696424427564676574536574040018011c42616c616e6365000f0cc8456d697473206f6e2073657474696e67207468652062756467657420666f722074686520776f726b696e672067726f75702e1c506172616d733a302d206e65772062756467657468576f726b65725265776172644163636f756e74557064617465640800200120576f726b6572496400000001244163636f756e744964001010cc456d697473206f6e207570646174696e672074686520726577617264206163636f756e74206f662074686520776f726b65722e1c506172616d733a4c2d204964206f662074686520776f726b65722e882d20526577617264206163636f756e74206964206f662074686520776f726b65722e64576f726b6572526577617264416d6f756e74557064617465640800200120576f726b6572496400002901013c4f7074696f6e3c42616c616e63653e001110c8456d697473206f6e207570646174696e67207468652072657761726420616d6f756e74206f662074686520776f726b65722e1c506172616d733a4c2d204964206f662074686520776f726b65722e482d205265776172642070657220626c6f636b44537461747573546578744368616e67656408002401104861736800001501013c4f7074696f6e3c5665633c75383e3e001210dc456d697473206f6e207570646174696e6720746865207374617475732074657874206f662074686520776f726b696e672067726f75702e1c506172616d733a482d2073746174757320746578742068617368342d207374617475732074657874384275646765745370656e64696e670c000001244163636f756e744964000018011c42616c616e636500001501013c4f7074696f6e3c5665633c75383e3e001314c8456d697473206f6e206275646765742066726f6d2074686520776f726b696e672067726f7570206265696e67207370656e741c506172616d733a582d205265636569766572204163636f756e742049642e402d2042616c616e6365207370656e742e302d20526174696f6e616c652e28526577617264506169641000200120576f726b6572496400000001244163636f756e744964000018011c42616c616e63650000750301445265776172645061796d656e74547970650014186c456d697473206f6e20706179696e6720746865207265776172642e1c506172616d733a4c2d204964206f662074686520776f726b65722e582d205265636569766572204163636f756e742049642e202d20526577617264b42d205061796d656e74207479706520286d697373656420726577617264206f7220726567756c6172206f6e65296c4e65774d69737365645265776172644c6576656c526561636865640800200120576f726b6572496400002901013c4f7074696f6e3c42616c616e63653e00151090456d697473206f6e207265616368696e67206e6577206d6973736564207265776172642e1c506172616d733a302d20576f726b65722049442ee82d204d69737365642072657761726420286f7074696f6e616c292e204e6f6e65206d65616e7320276e6f206d697373656420726577617264272e60576f726b696e6747726f757042756467657446756e6465640c002001204d656d6265724964000018011c42616c616e6365000028011c5665633c75383e0016147846756e642074686520776f726b696e672067726f7570206275646765742e1c506172616d733a2c2d204d656d6265722049444c2d20416d6f756e74206f662062616c616e63652c2d20526174696f6e616c65304c65616452656d61726b6564040028011c5665633c75383e00170c94456d697473206f6e204c656164206d616b696e6720612072656d61726b206d6573736167651c506172616d733a242d206d65737361676538576f726b657252656d61726b65640800200120576f726b65724964000028011c5665633c75383e00181094456d697473206f6e204c656164206d616b696e6720612072656d61726b206d6573736167651c506172616d733a202d20776f726b6572242d206d6573736167650c5c4576656e747320666f722074686973206d6f64756c652e00385f47726f75705f206576656e7473b503085070616c6c65745f776f726b696e675f67726f757024496e7374616e63653900000000b90308306672616d655f73797374656d14506861736500010c384170706c7945787472696e736963040010010c7533320000003046696e616c697a6174696f6e00010038496e697469616c697a6174696f6e00020000bd030000022400c103000002c50300c50300000408101000c90308306672616d655f73797374656d584c61737452756e74696d6555706772616465496e666f0000080130737065635f76657273696f6ecd03014c636f6465633a3a436f6d706163743c7533323e000124737065635f6e616d65d103016473705f72756e74696d653a3a52756e74696d65537472696e670000cd030000061000d1030000050200d5030c306672616d655f73797374656d1870616c6c65741043616c6c0404540001242866696c6c5f626c6f636b040114726174696f9c011c50657262696c6c00000405014120646973706174636820746861742077696c6c2066696c6c2074686520626c6f636b2077656967687420757020746f2074686520676976656e20726174696f2e1872656d61726b04011872656d61726b28011c5665633c75383e000114684d616b6520736f6d65206f6e2d636861696e2072656d61726b2e002823203c7765696768743e202d20604f283129602c23203c2f7765696768743e387365745f686561705f7061676573040114706167657320010c753634000204f853657420746865206e756d626572206f6620706167657320696e2074686520576562417373656d626c7920656e7669726f6e6d656e74277320686561702e207365745f636f6465040110636f646528011c5665633c75383e0003306453657420746865206e65772072756e74696d6520636f64652e002823203c7765696768743e31012d20604f2843202b2053296020776865726520604360206c656e677468206f662060636f64656020616e642060536020636f6d706c6578697479206f66206063616e5f7365745f636f64656045012d20312063616c6c20746f206063616e5f7365745f636f6465603a20604f28532960202863616c6c73206073705f696f3a3a6d6973633a3a72756e74696d655f76657273696f6e60207768696368206973342020657870656e73697665292e842d20312073746f726167652077726974652028636f64656320604f28432960292e402d203120646967657374206974656d2e282d2031206576656e742e4d0154686520776569676874206f6620746869732066756e6374696f6e20697320646570656e64656e74206f6e207468652072756e74696d652c206275742067656e6572616c6c7920746869732069732076657279b8657870656e736976652e2057652077696c6c207472656174207468697320617320612066756c6c20626c6f636b2e2c23203c2f7765696768743e5c7365745f636f64655f776974686f75745f636865636b73040110636f646528011c5665633c75383e000424190153657420746865206e65772072756e74696d6520636f646520776974686f757420646f696e6720616e7920636865636b73206f662074686520676976656e2060636f6465602e002823203c7765696768743e8c2d20604f2843296020776865726520604360206c656e677468206f662060636f646560842d20312073746f726167652077726974652028636f64656320604f28432960292e402d203120646967657374206974656d2e282d2031206576656e742e550154686520776569676874206f6620746869732066756e6374696f6e20697320646570656e64656e74206f6e207468652072756e74696d652e2057652077696c6c207472656174207468697320617320612066756c6c48626c6f636b2e2023203c2f7765696768743e2c7365745f73746f726167650401146974656d73d90301345665633c4b657956616c75653e0005046853657420736f6d65206974656d73206f662073746f726167652e306b696c6c5f73746f726167650401106b657973910201205665633c4b65793e000604744b696c6c20736f6d65206974656d732066726f6d2073746f726167652e2c6b696c6c5f70726566697808011870726566697828010c4b657900011c7375626b65797310010c75333200071011014b696c6c20616c6c2073746f72616765206974656d7320776974682061206b657920746861742073746172747320776974682074686520676976656e207072656669782e0039012a2a4e4f54453a2a2a2057652072656c79206f6e2074686520526f6f74206f726967696e20746f2070726f7669646520757320746865206e756d626572206f66207375626b65797320756e6465723d0174686520707265666978207765206172652072656d6f76696e6720746f2061636375726174656c792063616c63756c6174652074686520776569676874206f6620746869732066756e6374696f6e2e4472656d61726b5f776974685f6576656e7404011872656d61726b28011c5665633c75383e000804a44d616b6520736f6d65206f6e2d636861696e2072656d61726b20616e6420656d6974206576656e742e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632ed903000002dd0300dd0300000408282800e1030c306672616d655f73797374656d186c696d69747330426c6f636b5765696768747300000c0128626173655f626c6f636b2001185765696768740001246d61785f626c6f636b2001185765696768740001247065725f636c617373e50301845065724469737061746368436c6173733c57656967687473506572436c6173733e0000e5030c346672616d655f737570706f72741c77656967687473405065724469737061746368436c61737304045401e903000c01186e6f726d616ce90301045400012c6f7065726174696f6e616ce9030104540001246d616e6461746f7279e9030104540000e9030c306672616d655f73797374656d186c696d6974733c57656967687473506572436c6173730000100138626173655f65787472696e7369632001185765696768740001346d61785f65787472696e736963190101384f7074696f6e3c5765696768743e0001246d61785f746f74616c190101384f7074696f6e3c5765696768743e0001207265736572766564190101384f7074696f6e3c5765696768743e0000ed030c306672616d655f73797374656d186c696d6974732c426c6f636b4c656e677468000004010c6d6178f10301545065724469737061746368436c6173733c7533323e0000f1030c346672616d655f737570706f72741c77656967687473405065724469737061746368436c6173730404540110000c01186e6f726d616c1001045400012c6f7065726174696f6e616c100104540001246d616e6461746f7279100104540000f5030c346672616d655f737570706f72741c776569676874733c52756e74696d65446257656967687400000801107265616420011857656967687400011477726974652001185765696768740000f903082873705f76657273696f6e3852756e74696d6556657273696f6e0000200124737065635f6e616d65d103013452756e74696d65537472696e67000124696d706c5f6e616d65d103013452756e74696d65537472696e67000144617574686f72696e675f76657273696f6e10010c753332000130737065635f76657273696f6e10010c753332000130696d706c5f76657273696f6e10010c75333200011061706973fd03011c4170697356656300014c7472616e73616374696f6e5f76657273696f6e10010c75333200013473746174655f76657273696f6e08010875380000fd03040c436f77040454010104000400010400000001040000020504000504000004080904100009040000030800000008000d04000005040011040c306672616d655f73797374656d1870616c6c6574144572726f720404540001183c496e76616c6964537065634e616d650000081101546865206e616d65206f662073706563696669636174696f6e20646f6573206e6f74206d61746368206265747765656e207468652063757272656e742072756e74696d6550616e6420746865206e65772072756e74696d652e685370656356657273696f6e4e65656473546f496e63726561736500010841015468652073706563696669636174696f6e2076657273696f6e206973206e6f7420616c6c6f77656420746f206465637265617365206265747765656e207468652063757272656e742072756e74696d6550616e6420746865206e65772072756e74696d652e744661696c6564546f4578747261637452756e74696d6556657273696f6e00020cec4661696c656420746f2065787472616374207468652072756e74696d652076657273696f6e2066726f6d20746865206e65772072756e74696d652e0009014569746865722063616c6c696e672060436f72655f76657273696f6e60206f72206465636f64696e67206052756e74696d6556657273696f6e60206661696c65642e4c4e6f6e44656661756c74436f6d706f73697465000304fc537569636964652063616c6c6564207768656e20746865206163636f756e7420686173206e6f6e2d64656661756c7420636f6d706f7369746520646174612e3c4e6f6e5a65726f526566436f756e74000404350154686572652069732061206e6f6e2d7a65726f207265666572656e636520636f756e742070726576656e74696e6720746865206163636f756e742066726f6d206265696e67207075726765642e3043616c6c46696c7465726564000504d0546865206f726967696e2066696c7465722070726576656e74207468652063616c6c20746f20626520646973706174636865642e046c4572726f7220666f72207468652053797374656d2070616c6c657415040c3870616c6c65745f7574696c6974791870616c6c65741043616c6c04045400011414626174636804011463616c6c73190401605665633c3c5420617320436f6e6669673e3a3a43616c6c3e00004c7c53656e642061206261746368206f662064697370617463682063616c6c732e00784d61792062652063616c6c65642066726f6d20616e79206f726967696e2e005d012d206063616c6c73603a205468652063616c6c7320746f20626520646973706174636865642066726f6d207468652073616d65206f726967696e2e20546865206e756d626572206f662063616c6c206d757374206e6f74390120206578636565642074686520636f6e7374616e743a2060626174636865645f63616c6c735f6c696d6974602028617661696c61626c6520696e20636f6e7374616e74206d65746164617461292e005d014966206f726967696e20697320726f6f74207468656e2063616c6c2061726520646973706174636820776974686f757420636865636b696e67206f726967696e2066696c7465722e20285468697320696e636c75646573c8627970617373696e6720606672616d655f73797374656d3a3a436f6e6669673a3a4261736543616c6c46696c74657260292e002823203c7765696768743e01012d20436f6d706c65786974793a204f284329207768657265204320697320746865206e756d626572206f662063616c6c7320746f20626520626174636865642e2c23203c2f7765696768743e005501546869732077696c6c2072657475726e20604f6b6020696e20616c6c2063697263756d7374616e6365732e20546f2064657465726d696e65207468652073756363657373206f66207468652062617463682c20616e31016576656e74206973206465706f73697465642e20496620612063616c6c206661696c656420616e64207468652062617463682077617320696e7465727275707465642c207468656e207468655501604261746368496e74657272757074656460206576656e74206973206465706f73697465642c20616c6f6e67207769746820746865206e756d626572206f66207375636365737366756c2063616c6c73206d6164654d01616e6420746865206572726f72206f6620746865206661696c65642063616c6c2e20496620616c6c2077657265207375636365737366756c2c207468656e2074686520604261746368436f6d706c65746564604c6576656e74206973206465706f73697465642e3461735f64657269766174697665080114696e6465780d04010c75313600011063616c6c1d040160426f783c3c5420617320436f6e6669673e3a3a43616c6c3e000134dc53656e6420612063616c6c207468726f75676820616e20696e64657865642070736575646f6e796d206f66207468652073656e6465722e00550146696c7465722066726f6d206f726967696e206172652070617373656420616c6f6e672e205468652063616c6c2077696c6c2062652064697370617463686564207769746820616e206f726967696e207768696368bc757365207468652073616d652066696c74657220617320746865206f726967696e206f6620746869732063616c6c2e0045014e4f54453a20496620796f75206e65656420746f20656e73757265207468617420616e79206163636f756e742d62617365642066696c746572696e67206973206e6f7420686f6e6f7265642028692e652e61016265636175736520796f7520657870656374206070726f78796020746f2068617665206265656e2075736564207072696f7220696e207468652063616c6c20737461636b20616e6420796f7520646f206e6f742077616e7451017468652063616c6c207265737472696374696f6e7320746f206170706c7920746f20616e79207375622d6163636f756e7473292c207468656e20757365206061735f6d756c74695f7468726573686f6c645f31607c696e20746865204d756c74697369672070616c6c657420696e73746561642e00f44e4f54453a205072696f7220746f2076657273696f6e202a31322c2074686973207761732063616c6c6564206061735f6c696d697465645f737562602e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e2462617463685f616c6c04011463616c6c73190401605665633c3c5420617320436f6e6669673e3a3a43616c6c3e000238ec53656e642061206261746368206f662064697370617463682063616c6c7320616e642061746f6d6963616c6c792065786563757465207468656d2e21015468652077686f6c65207472616e73616374696f6e2077696c6c20726f6c6c6261636b20616e64206661696c20696620616e79206f66207468652063616c6c73206661696c65642e00784d61792062652063616c6c65642066726f6d20616e79206f726967696e2e005d012d206063616c6c73603a205468652063616c6c7320746f20626520646973706174636865642066726f6d207468652073616d65206f726967696e2e20546865206e756d626572206f662063616c6c206d757374206e6f74390120206578636565642074686520636f6e7374616e743a2060626174636865645f63616c6c735f6c696d6974602028617661696c61626c6520696e20636f6e7374616e74206d65746164617461292e005d014966206f726967696e20697320726f6f74207468656e2063616c6c2061726520646973706174636820776974686f757420636865636b696e67206f726967696e2066696c7465722e20285468697320696e636c75646573c8627970617373696e6720606672616d655f73797374656d3a3a436f6e6669673a3a4261736543616c6c46696c74657260292e002823203c7765696768743e01012d20436f6d706c65786974793a204f284329207768657265204320697320746865206e756d626572206f662063616c6c7320746f20626520626174636865642e2c23203c2f7765696768743e2c64697370617463685f617308012461735f6f726967696e89060154426f783c543a3a50616c6c6574734f726967696e3e00011063616c6c1d040160426f783c3c5420617320436f6e6669673e3a3a43616c6c3e000328c84469737061746368657320612066756e6374696f6e2063616c6c207769746820612070726f7669646564206f726967696e2e00c4546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f526f6f745f2e002823203c7765696768743e1c2d204f2831292e602d204c696d697465642073746f726167652072656164732e5c2d204f6e6520444220777269746520286576656e74292e1d012d20576569676874206f662064657269766174697665206063616c6c6020657865637574696f6e202b20543a3a576569676874496e666f3a3a64697370617463685f617328292e2c23203c2f7765696768743e2c666f7263655f626174636804011463616c6c73190401605665633c3c5420617320436f6e6669673e3a3a43616c6c3e0004387c53656e642061206261746368206f662064697370617463682063616c6c732ed4556e6c696b6520606261746368602c20697420616c6c6f7773206572726f727320616e6420776f6e277420696e746572727570742e00784d61792062652063616c6c65642066726f6d20616e79206f726967696e2e005d012d206063616c6c73603a205468652063616c6c7320746f20626520646973706174636865642066726f6d207468652073616d65206f726967696e2e20546865206e756d626572206f662063616c6c206d757374206e6f74390120206578636565642074686520636f6e7374616e743a2060626174636865645f63616c6c735f6c696d6974602028617661696c61626c6520696e20636f6e7374616e74206d65746164617461292e005d014966206f726967696e20697320726f6f74207468656e2063616c6c2061726520646973706174636820776974686f757420636865636b696e67206f726967696e2066696c7465722e20285468697320696e636c75646573c8627970617373696e6720606672616d655f73797374656d3a3a436f6e6669673a3a4261736543616c6c46696c74657260292e002823203c7765696768743e01012d20436f6d706c65786974793a204f284329207768657265204320697320746865206e756d626572206f662063616c6c7320746f20626520626174636865642e2c23203c2f7765696768743e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e19040000021d04001d0408586a6f7973747265616d5f6e6f64655f72756e74696d651043616c6c0001901853797374656d0400d50301ad0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c53797374656d2c2052756e74696d653e0000001c5574696c6974790400150401b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c5574696c6974792c2052756e74696d653e00010010426162650400210401a50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c426162652c2052756e74696d653e0002002454696d657374616d700400450401b90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c54696d657374616d702c2052756e74696d653e00030028417574686f727368697004004d0401bd0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c417574686f72736869702c2052756e74696d653e0004002042616c616e6365730400550401b50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c42616c616e6365732c2052756e74696d653e00050068456c656374696f6e50726f76696465724d756c746950686173650400590401fd0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c456c656374696f6e50726f76696465724d756c746950686173652c2052756e74696d653e0007001c5374616b696e670400490501b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c5374616b696e672c2052756e74696d653e0008001c53657373696f6e04006d0501b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c53657373696f6e2c2052756e74696d653e0009001c4772616e6470610400790501b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4772616e6470612c2052756e74696d653e000b0020496d4f6e6c696e650400a90501b50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c496d4f6e6c696e652c2052756e74696d653e000d0020426167734c6973740400c90501b50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c426167734c6973742c2052756e74696d653e0010001c56657374696e670400cd0501b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c56657374696e672c2052756e74696d653e001100204d756c74697369670400d50501b50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4d756c74697369672c2052756e74696d653e0012001c436f756e63696c0400e10501b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c436f756e63696c2c2052756e74696d653e001300285265666572656e64756d0400e50501bd0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c5265666572656e64756d2c2052756e74696d653e0014001c4d656d626572730400e90501b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4d656d626572732c2052756e74696d653e00150014466f72756d0400ed0501a90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c466f72756d2c2052756e74696d653e00160030436f6e737469747574696f6e0400f10501c50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c436f6e737469747574696f6e2c2052756e74696d653e00170018426f756e74790400f50501ad0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c426f756e74792c2052756e74696d653e001800404a6f7973747265616d5574696c6974790400f90501d50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4a6f7973747265616d5574696c6974792c2052756e74696d653e0019001c436f6e74656e740400fd0501b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c436f6e74656e742c2052756e74696d653e001a001c53746f7261676504002d0601b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c53746f726167652c2052756e74696d653e001b003050726f6a656374546f6b656e0400310601c50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c50726f6a656374546f6b656e2c2052756e74696d653e001c003c50726f706f73616c73456e67696e650400590601d10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c50726f706f73616c73456e67696e652c2052756e74696d653e001d004c50726f706f73616c7344697363757373696f6e04005d0601e10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c50726f706f73616c7344697363757373696f6e2c2052756e74696d653e001e003850726f706f73616c73436f6465780400610601cd0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c50726f706f73616c73436f6465782c2052756e74696d653e001f0044466f72756d576f726b696e6747726f75700400650601d90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c466f72756d576f726b696e6747726f75702c2052756e74696d653e0020004c53746f72616765576f726b696e6747726f75700400690601e10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c53746f72616765576f726b696e6747726f75702c2052756e74696d653e0021004c436f6e74656e74576f726b696e6747726f757004006d0601e10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c436f6e74656e74576f726b696e6747726f75702c2052756e74696d653e0022006c4f7065726174696f6e73576f726b696e6747726f7570416c7068610400710601010273656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4f7065726174696f6e73576f726b696e6747726f7570416c7068612c2052756e74696d653e0023003c417070576f726b696e6747726f75700400750601d10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c417070576f726b696e6747726f75702c2052756e74696d653e002400584d656d62657273686970576f726b696e6747726f75700400790601ed0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4d656d62657273686970576f726b696e6747726f75702c2052756e74696d653e002500684f7065726174696f6e73576f726b696e6747726f75704265746104007d0601fd0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4f7065726174696f6e73576f726b696e6747726f7570426574612c2052756e74696d653e0026006c4f7065726174696f6e73576f726b696e6747726f757047616d6d610400810601010273656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4f7065726174696f6e73576f726b696e6747726f757047616d6d612c2052756e74696d653e00270060446973747269627574696f6e576f726b696e6747726f75700400850601f50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c446973747269627574696f6e576f726b696e6747726f75702c2052756e74696d653e0028000021040c2c70616c6c65745f626162651870616c6c65741043616c6c04045400010c4c7265706f72745f65717569766f636174696f6e08014865717569766f636174696f6e5f70726f6f6625040184426f783c45717569766f636174696f6e50726f6f663c543a3a4865616465723e3e00013c6b65795f6f776e65725f70726f6f6639040140543a3a4b65794f776e657250726f6f6600001009015265706f727420617574686f726974792065717569766f636174696f6e2f6d69736265686176696f722e2054686973206d6574686f642077696c6c2076657269667905017468652065717569766f636174696f6e2070726f6f6620616e642076616c69646174652074686520676976656e206b6579206f776e6572736869702070726f6f660d01616761696e73742074686520657874726163746564206f6666656e6465722e20496620626f7468206172652076616c69642c20746865206f6666656e63652077696c6c306265207265706f727465642e707265706f72745f65717569766f636174696f6e5f756e7369676e656408014865717569766f636174696f6e5f70726f6f6625040184426f783c45717569766f636174696f6e50726f6f663c543a3a4865616465723e3e00013c6b65795f6f776e65725f70726f6f6639040140543a3a4b65794f776e657250726f6f6600012009015265706f727420617574686f726974792065717569766f636174696f6e2f6d69736265686176696f722e2054686973206d6574686f642077696c6c2076657269667905017468652065717569766f636174696f6e2070726f6f6620616e642076616c69646174652074686520676976656e206b6579206f776e6572736869702070726f6f660d01616761696e73742074686520657874726163746564206f6666656e6465722e20496620626f7468206172652076616c69642c20746865206f6666656e63652077696c6c306265207265706f727465642e0d01546869732065787472696e736963206d7573742062652063616c6c656420756e7369676e656420616e642069742069732065787065637465642074686174206f6e6c791501626c6f636b20617574686f72732077696c6c2063616c6c206974202876616c69646174656420696e206056616c6964617465556e7369676e656460292c2061732073756368150169662074686520626c6f636b20617574686f7220697320646566696e65642069742077696c6c20626520646566696e6564206173207468652065717569766f636174696f6e247265706f727465722e48706c616e5f636f6e6669675f6368616e6765040118636f6e6669673d0401504e657874436f6e66696744657363726970746f720002105d01506c616e20616e2065706f636820636f6e666967206368616e67652e205468652065706f636820636f6e666967206368616e6765206973207265636f7264656420616e642077696c6c20626520656e6163746564206f6e5101746865206e6578742063616c6c20746f2060656e6163745f65706f63685f6368616e6765602e2054686520636f6e6669672077696c6c20626520616374697661746564206f6e652065706f63682061667465722e59014d756c7469706c652063616c6c7320746f2074686973206d6574686f642077696c6c207265706c61636520616e79206578697374696e6720706c616e6e656420636f6e666967206368616e6765207468617420686164546e6f74206265656e20656e6163746564207965742e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e2504084873705f636f6e73656e7375735f736c6f74734445717569766f636174696f6e50726f6f660818486561646572012904084964013104001001206f6666656e646572310401084964000110736c6f7435040110536c6f7400013066697273745f686561646572290401184865616465720001347365636f6e645f6865616465722904011848656164657200002904102873705f72756e74696d651c67656e65726963186865616465721848656164657208184e756d62657201101048617368012d040014012c706172656e745f68617368240130486173683a3a4f75747075740001186e756d626572cd0301184e756d62657200012873746174655f726f6f74240130486173683a3a4f757470757400013c65787472696e736963735f726f6f74240130486173683a3a4f75747075740001186469676573742c011844696765737400002d040c2873705f72756e74696d65187472616974732c426c616b6554776f3235360000000031040c4473705f636f6e73656e7375735f626162650c617070185075626c696300000400c0013c737232353531393a3a5075626c696300003504084873705f636f6e73656e7375735f736c6f747310536c6f740000040020010c75363400003904082873705f73657373696f6e3c4d656d6265727368697050726f6f6600000c011c73657373696f6e10013053657373696f6e496e646578000128747269655f6e6f646573910201305665633c5665633c75383e3e00013c76616c696461746f725f636f756e7410013856616c696461746f72436f756e7400003d040c4473705f636f6e73656e7375735f626162651c64696765737473504e657874436f6e66696744657363726970746f720001040856310801046361030128287536342c2075363429000134616c6c6f7765645f736c6f747341040130416c6c6f776564536c6f7473000100004104084473705f636f6e73656e7375735f6261626530416c6c6f776564536c6f747300010c305072696d617279536c6f7473000000745072696d617279416e645365636f6e64617279506c61696e536c6f74730001006c5072696d617279416e645365636f6e64617279565246536c6f74730002000045040c4070616c6c65745f74696d657374616d701870616c6c65741043616c6c0404540001040c73657404010c6e6f7749040124543a3a4d6f6d656e7400004054536574207468652063757272656e742074696d652e005501546869732063616c6c2073686f756c6420626520696e766f6b65642065786163746c79206f6e63652070657220626c6f636b2e2049742077696c6c2070616e6963206174207468652066696e616c697a6174696f6ed470686173652c20696620746869732063616c6c206861736e2774206265656e20696e766f6b656420627920746861742074696d652e0041015468652074696d657374616d702073686f756c642062652067726561746572207468616e207468652070726576696f7573206f6e652062792074686520616d6f756e742073706563696669656420627940604d696e696d756d506572696f64602e00d4546865206469737061746368206f726967696e20666f7220746869732063616c6c206d7573742062652060496e686572656e74602e002823203c7765696768743e31012d20604f2831296020284e6f7465207468617420696d706c656d656e746174696f6e73206f6620604f6e54696d657374616d7053657460206d75737420616c736f20626520604f283129602961012d20312073746f72616765207265616420616e6420312073746f72616765206d75746174696f6e2028636f64656320604f28312960292e202862656361757365206f6620604469645570646174653a3a74616b656020696e402020606f6e5f66696e616c697a656029d42d2031206576656e742068616e646c657220606f6e5f74696d657374616d705f736574602e204d75737420626520604f283129602e2c23203c2f7765696768743e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e490400000620004d040c4470616c6c65745f617574686f72736869701870616c6c65741043616c6c040454000104287365745f756e636c65730401286e65775f756e636c6573510401385665633c543a3a4865616465723e0000046050726f76696465206120736574206f6620756e636c65732e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e510400000229040055040c3c70616c6c65745f62616c616e6365731870616c6c65741043616c6c080454000449000118207472616e736665720801106465737400018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f7572636500011476616c7565d00128543a3a42616c616e6365000064d45472616e7366657220736f6d65206c697175696420667265652062616c616e636520746f20616e6f74686572206163636f756e742e000501607472616e73666572602077696c6c207365742074686520604672656542616c616e636560206f66207468652073656e64657220616e642072656365697665722e11014966207468652073656e6465722773206163636f756e742069732062656c6f7720746865206578697374656e7469616c206465706f736974206173206120726573756c74b06f6620746865207472616e736665722c20746865206163636f756e742077696c6c206265207265617065642e001501546865206469737061746368206f726967696e20666f7220746869732063616c6c206d75737420626520605369676e65646020627920746865207472616e736163746f722e002823203c7765696768743e61012d20446570656e64656e74206f6e20617267756d656e747320627574206e6f7420637269746963616c2c20676976656e2070726f70657220696d706c656d656e746174696f6e7320666f7220696e70757420636f6e66696794202074797065732e205365652072656c617465642066756e6374696f6e732062656c6f772e31012d20497420636f6e7461696e732061206c696d69746564206e756d626572206f6620726561647320616e642077726974657320696e7465726e616c6c7920616e64206e6f20636f6d706c6578382020636f6d7075746174696f6e2e004852656c617465642066756e6374696f6e733a004d0120202d2060656e737572655f63616e5f77697468647261776020697320616c776179732063616c6c656420696e7465726e616c6c792062757420686173206120626f756e64656420636f6d706c65786974792e290120202d205472616e7366657272696e672062616c616e63657320746f206163636f756e7473207468617420646964206e6f74206578697374206265666f72652077696c6c206361757365cc2020202060543a3a4f6e4e65774163636f756e743a3a6f6e5f6e65775f6163636f756e746020746f2062652063616c6c65642e5d0120202d2052656d6f76696e6720656e6f7567682066756e64732066726f6d20616e206163636f756e742077696c6c20747269676765722060543a3a4475737452656d6f76616c3a3a6f6e5f756e62616c616e636564602e5d0120202d20607472616e736665725f6b6565705f616c6976656020776f726b73207468652073616d652077617920617320607472616e73666572602c206275742068617320616e206164646974696f6e616c20636865636bdc202020207468617420746865207472616e736665722077696c6c206e6f74206b696c6c20746865206f726967696e206163636f756e742e842d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d11012d204f726967696e206163636f756e7420697320616c726561647920696e206d656d6f72792c20736f206e6f204442206f7065726174696f6e7320666f72207468656d2e2c23203c2f7765696768743e2c7365745f62616c616e63650c010c77686f00018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f757263650001206e65775f66726565d00128543a3a42616c616e63650001306e65775f7265736572766564d00128543a3a42616c616e636500012090536574207468652062616c616e636573206f66206120676976656e206163636f756e742e001d01546869732077696c6c20616c74657220604672656542616c616e63656020616e642060526573657276656442616c616e63656020696e2073746f726167652e2069742077696c6c3101616c736f20616c7465722074686520746f74616c2069737375616e6365206f66207468652073797374656d202860546f74616c49737375616e6365602920617070726f7072696174656c792e1501496620746865206e65772066726565206f722072657365727665642062616c616e63652069732062656c6f7720746865206578697374656e7469616c206465706f7369742cfc69742077696c6c20726573657420746865206163636f756e74206e6f6e63652028606672616d655f73797374656d3a3a4163636f756e744e6f6e636560292e00b0546865206469737061746368206f726967696e20666f7220746869732063616c6c2069732060726f6f74602e38666f7263655f7472616e736665720c0118736f7572636500018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f757263650001106465737400018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f7572636500011476616c7565d00128543a3a42616c616e63650002184d0145786163746c7920617320607472616e73666572602c2065786365707420746865206f726967696e206d75737420626520726f6f7420616e642074686520736f75726365206163636f756e74206d6179206265287370656369666965642e2823203c7765696768743e4d012d2053616d65206173207472616e736665722c20627574206164646974696f6e616c207265616420616e6420777269746520626563617573652074686520736f75726365206163636f756e74206973206e6f747c2020617373756d656420746f20626520696e20746865206f7665726c61792e2c23203c2f7765696768743e4c7472616e736665725f6b6565705f616c6976650801106465737400018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f7572636500011476616c7565d00128543a3a42616c616e63650003184d0153616d6520617320746865205b607472616e73666572605d2063616c6c2c206275742077697468206120636865636b207468617420746865207472616e736665722077696c6c206e6f74206b696c6c207468653c6f726967696e206163636f756e742e00b8393925206f66207468652074696d6520796f752077616e74205b607472616e73666572605d20696e73746561642e00c05b607472616e73666572605d3a207374727563742e50616c6c65742e68746d6c236d6574686f642e7472616e73666572307472616e736665725f616c6c0801106465737400018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f757263650001286b6565705f616c697665880110626f6f6c00044405015472616e736665722074686520656e74697265207472616e7366657261626c652062616c616e63652066726f6d207468652063616c6c6572206163636f756e742e0059014e4f54453a20546869732066756e6374696f6e206f6e6c7920617474656d70747320746f207472616e73666572205f7472616e7366657261626c655f2062616c616e6365732e2054686973206d65616e7320746861746101616e79206c6f636b65642c2072657365727665642c206f72206578697374656e7469616c206465706f7369747320287768656e20606b6565705f616c6976656020697320607472756560292c2077696c6c206e6f742062655d017472616e7366657272656420627920746869732066756e6374696f6e2e20546f20656e73757265207468617420746869732066756e6374696f6e20726573756c747320696e2061206b696c6c6564206163636f756e742c4501796f75206d69676874206e65656420746f207072657061726520746865206163636f756e742062792072656d6f76696e6720616e79207265666572656e636520636f756e746572732c2073746f72616765406465706f736974732c206574632e2e2e00c0546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265205369676e65642e00a02d206064657374603a2054686520726563697069656e74206f6620746865207472616e736665722e59012d20606b6565705f616c697665603a204120626f6f6c65616e20746f2064657465726d696e652069662074686520607472616e736665725f616c6c60206f7065726174696f6e2073686f756c642073656e6420616c6c4d0120206f66207468652066756e647320746865206163636f756e74206861732c2063617573696e67207468652073656e646572206163636f756e7420746f206265206b696c6c6564202866616c7365292c206f72590120207472616e736665722065766572797468696e6720657863657074206174206c6561737420746865206578697374656e7469616c206465706f7369742c2077686963682077696c6c2067756172616e74656520746fc820206b656570207468652073656e646572206163636f756e7420616c697665202874727565292e2023203c7765696768743e39012d204f2831292e204a757374206c696b65207472616e736665722c206275742072656164696e672074686520757365722773207472616e7366657261626c652062616c616e63652066697273742e302020233c2f7765696768743e3c666f7263655f756e7265736572766508010c77686f00018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f75726365000118616d6f756e74180128543a3a42616c616e636500050cb0556e7265736572766520736f6d652062616c616e63652066726f6d2061207573657220627920666f7263652e006c43616e206f6e6c792062652063616c6c656420627920524f4f542e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e59040c9070616c6c65745f656c656374696f6e5f70726f76696465725f6d756c74695f70686173651870616c6c65741043616c6c0404540001143c7375626d69745f756e7369676e65640801307261775f736f6c7574696f6e5d0401b0426f783c526177536f6c7574696f6e3c536f6c7574696f6e4f663c543a3a4d696e6572436f6e6669673e3e3e00011c7769746e65737331050158536f6c7574696f6e4f72536e617073686f7453697a65000038a45375626d6974206120736f6c7574696f6e20666f722074686520756e7369676e65642070686173652e00c8546865206469737061746368206f726967696e20666f20746869732063616c6c206d757374206265205f5f6e6f6e655f5f2e003d0154686973207375626d697373696f6e20697320636865636b6564206f6e2074686520666c792e204d6f72656f7665722c207468697320756e7369676e656420736f6c7574696f6e206973206f6e6c79550176616c696461746564207768656e207375626d697474656420746f2074686520706f6f6c2066726f6d20746865202a2a6c6f63616c2a2a206e6f64652e204566666563746976656c792c2074686973206d65616e735d0174686174206f6e6c79206163746976652076616c696461746f72732063616e207375626d69742074686973207472616e73616374696f6e207768656e20617574686f72696e67206120626c6f636b202873696d696c617240746f20616e20696e686572656e74292e005901546f2070726576656e7420616e7920696e636f727265637420736f6c7574696f6e2028616e642074687573207761737465642074696d652f776569676874292c2074686973207472616e73616374696f6e2077696c6c4d0170616e69632069662074686520736f6c7574696f6e207375626d6974746564206279207468652076616c696461746f7220697320696e76616c696420696e20616e79207761792c206566666563746976656c799c70757474696e6720746865697220617574686f72696e6720726577617264206174207269736b2e00e04e6f206465706f736974206f7220726577617264206973206173736f63696174656420776974682074686973207375626d697373696f6e2e6c7365745f6d696e696d756d5f756e747275737465645f73636f72650401406d617962655f6e6578745f73636f7265350501544f7074696f6e3c456c656374696f6e53636f72653e000114b05365742061206e65772076616c756520666f7220604d696e696d756d556e7472757374656453636f7265602e00d84469737061746368206f726967696e206d75737420626520616c69676e656420776974682060543a3a466f7263654f726967696e602e00f05468697320636865636b2063616e206265207475726e6564206f66662062792073657474696e67207468652076616c756520746f20604e6f6e65602e747365745f656d657267656e63795f656c656374696f6e5f726573756c74040120737570706f72747339050158537570706f7274733c543a3a4163636f756e7449643e0002205901536574206120736f6c7574696f6e20696e207468652071756575652c20746f2062652068616e646564206f757420746f2074686520636c69656e74206f6620746869732070616c6c657420696e20746865206e6578748863616c6c20746f2060456c656374696f6e50726f76696465723a3a656c656374602e004501546869732063616e206f6e6c79206265207365742062792060543a3a466f7263654f726967696e602c20616e64206f6e6c79207768656e207468652070686173652069732060456d657267656e6379602e00610154686520736f6c7574696f6e206973206e6f7420636865636b656420666f7220616e7920666561736962696c69747920616e6420697320617373756d656420746f206265207472757374776f727468792c20617320616e795101666561736962696c69747920636865636b20697473656c662063616e20696e207072696e6369706c652063617573652074686520656c656374696f6e2070726f6365737320746f206661696c202864756520746f686d656d6f72792f77656967687420636f6e73747261696e73292e187375626d69740401307261775f736f6c7574696f6e5d0401b0426f783c526177536f6c7574696f6e3c536f6c7574696f6e4f663c543a3a4d696e6572436f6e6669673e3e3e0003249c5375626d6974206120736f6c7574696f6e20666f7220746865207369676e65642070686173652e00d0546865206469737061746368206f726967696e20666f20746869732063616c6c206d757374206265205f5f7369676e65645f5f2e005d0154686520736f6c7574696f6e20697320706f74656e7469616c6c79207175657565642c206261736564206f6e2074686520636c61696d65642073636f726520616e642070726f6365737365642061742074686520656e64506f6620746865207369676e65642070686173652e005d0141206465706f73697420697320726573657276656420616e64207265636f7264656420666f722074686520736f6c7574696f6e2e204261736564206f6e20746865206f7574636f6d652c2074686520736f6c7574696f6e15016d696768742062652072657761726465642c20736c61736865642c206f722067657420616c6c206f7220612070617274206f6620746865206465706f736974206261636b2e4c676f7665726e616e63655f66616c6c6261636b0801406d617962655f6d61785f766f74657273e901012c4f7074696f6e3c7533323e0001446d617962655f6d61785f74617267657473e901012c4f7074696f6e3c7533323e00041080547269676765722074686520676f7665726e616e63652066616c6c6261636b2e004901546869732063616e206f6e6c792062652063616c6c6564207768656e205b6050686173653a3a456d657267656e6379605d20697320656e61626c65642c20617320616e20616c7465726e617469766520746fc063616c6c696e67205b6043616c6c3a3a7365745f656d657267656e63795f656c656374696f6e5f726573756c74605d2e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e5d04089070616c6c65745f656c656374696f6e5f70726f76696465725f6d756c74695f70686173652c526177536f6c7574696f6e040453016104000c0120736f6c7574696f6e610401045300011473636f72652d050134456c656374696f6e53636f7265000114726f756e6410010c7533320000610408586a6f7973747265616d5f6e6f64655f72756e74696d65384e706f73536f6c7574696f6e31360000400118766f74657331650400000118766f74657332710400000118766f74657333850400000118766f74657334910400000118766f746573359d0400000118766f74657336a90400000118766f74657337b50400000118766f74657338c10400000118766f74657339cd040000011c766f7465733130d9040000011c766f7465733131e5040000011c766f7465733132f1040000011c766f7465733133fd040000011c766f746573313409050000011c766f746573313515050000011c766f746573313621050000006504000002690400690400000408cd036d04006d040000060d0400710400000275040075040000040ccd0379046d04007904000004086d047d04007d0400000681040081040c3473705f61726974686d65746963287065725f7468696e677318506572553136000004000d04010c7531360000850400000289040089040000040ccd038d046d04008d0400000302000000790400910400000295040095040000040ccd0399046d04009904000003030000007904009d04000002a10400a1040000040ccd03a5046d0400a50400000304000000790400a904000002ad0400ad040000040ccd03b1046d0400b10400000305000000790400b504000002b90400b9040000040ccd03bd046d0400bd0400000306000000790400c104000002c50400c5040000040ccd03c9046d0400c90400000307000000790400cd04000002d10400d1040000040ccd03d5046d0400d50400000308000000790400d904000002dd0400dd040000040ccd03e1046d0400e10400000309000000790400e504000002e90400e9040000040ccd03ed046d0400ed040000030a000000790400f104000002f50400f5040000040ccd03f9046d0400f9040000030b000000790400fd0400000201050001050000040ccd0305056d040005050000030c00000079040009050000020d05000d050000040ccd0311056d040011050000030d000000790400150500000219050019050000040ccd031d056d04001d050000030e000000790400210500000225050025050000040ccd0329056d040029050000030f0000007904002d05084473705f6e706f735f656c656374696f6e7334456c656374696f6e53636f726500000c01346d696e696d616c5f7374616b6518013c457874656e64656442616c616e636500012473756d5f7374616b6518013c457874656e64656442616c616e636500014473756d5f7374616b655f7371756172656418013c457874656e64656442616c616e636500003105089070616c6c65745f656c656374696f6e5f70726f76696465725f6d756c74695f706861736558536f6c7574696f6e4f72536e617073686f7453697a650000080118766f74657273cd03010c75333200011c74617267657473cd03010c7533320000350504184f7074696f6e040454012d050108104e6f6e6500000010536f6d6504002d05000001000039050000023d05003d0500000408004105004105084473705f6e706f735f656c656374696f6e731c537570706f727404244163636f756e744964010000080114746f74616c18013c457874656e64656442616c616e6365000118766f74657273450501845665633c284163636f756e7449642c20457874656e64656442616c616e6365293e000045050000023501004905103870616c6c65745f7374616b696e671870616c6c65741870616c6c65741043616c6c04045400016810626f6e640c0128636f6e74726f6c6c657200018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f7572636500011476616c7565d0013042616c616e63654f663c543e00011470617965654d05017c52657761726444657374696e6174696f6e3c543a3a4163636f756e7449643e000044610154616b6520746865206f726967696e206163636f756e74206173206120737461736820616e64206c6f636b207570206076616c756560206f66206974732062616c616e63652e2060636f6e74726f6c6c6572602077696c6c80626520746865206163636f756e74207468617420636f6e74726f6c732069742e002d016076616c756560206d757374206265206d6f7265207468616e2074686520606d696e696d756d5f62616c616e636560207370656369666965642062792060543a3a43757272656e6379602e002101546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20627920746865207374617368206163636f756e742e003c456d6974732060426f6e646564602e2823203c7765696768743ed02d20496e646570656e64656e74206f662074686520617267756d656e74732e204d6f64657261746520636f6d706c65786974792e1c2d204f2831292e642d20546872656520657874726120444220656e74726965732e004d014e4f54453a2054776f206f66207468652073746f726167652077726974657320286053656c663a3a626f6e646564602c206053656c663a3a7061796565602920617265205f6e657665725f20636c65616e65643d01756e6c6573732074686520606f726967696e602066616c6c732062656c6f77205f6578697374656e7469616c206465706f7369745f20616e6420676574732072656d6f76656420617320647573742e482d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2c23203c2f7765696768743e28626f6e645f65787472610401386d61785f6164646974696f6e616cd0013042616c616e63654f663c543e00013c610141646420736f6d6520657874726120616d6f756e742074686174206861766520617070656172656420696e207468652073746173682060667265655f62616c616e63656020696e746f207468652062616c616e636520757030666f72207374616b696e672e005101546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f206279207468652073746173682c206e6f742074686520636f6e74726f6c6c65722e004d01557365207468697320696620746865726520617265206164646974696f6e616c2066756e647320696e20796f7572207374617368206163636f756e74207468617420796f75207769736820746f20626f6e642e5501556e6c696b65205b60626f6e64605d2853656c663a3a626f6e6429206f72205b60756e626f6e64605d2853656c663a3a756e626f6e642920746869732066756e6374696f6e20646f6573206e6f7420696d706f7365bc616e79206c696d69746174696f6e206f6e2074686520616d6f756e7420746861742063616e2062652061646465642e003c456d6974732060426f6e646564602e002823203c7765696768743ee42d20496e646570656e64656e74206f662074686520617267756d656e74732e20496e7369676e69666963616e7420636f6d706c65786974792e1c2d204f2831292e2c23203c2f7765696768743e18756e626f6e6404011476616c7565d0013042616c616e63654f663c543e00024c51015363686564756c65206120706f7274696f6e206f662074686520737461736820746f20626520756e6c6f636b656420726561647920666f72207472616e73666572206f75742061667465722074686520626f6e64fc706572696f6420656e64732e2049662074686973206c656176657320616e20616d6f756e74206163746976656c7920626f6e646564206c657373207468616e2101543a3a43757272656e63793a3a6d696e696d756d5f62616c616e636528292c207468656e20697420697320696e6372656173656420746f207468652066756c6c20616d6f756e742e005101546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2062792074686520636f6e74726f6c6c65722c206e6f74207468652073746173682e0045014f6e63652074686520756e6c6f636b20706572696f6420697320646f6e652c20796f752063616e2063616c6c206077697468647261775f756e626f6e6465646020746f2061637475616c6c79206d6f7665bc7468652066756e6473206f7574206f66206d616e6167656d656e7420726561647920666f72207472616e736665722e0031014e6f206d6f7265207468616e2061206c696d69746564206e756d626572206f6620756e6c6f636b696e67206368756e6b73202873656520604d6178556e6c6f636b696e674368756e6b736029390163616e20636f2d657869737473206174207468652073616d652074696d652e20496e207468617420636173652c205b6043616c6c3a3a77697468647261775f756e626f6e646564605d206e656564f8746f2062652063616c6c656420666972737420746f2072656d6f766520736f6d65206f6620746865206368756e6b732028696620706f737369626c65292e00390149662061207573657220656e636f756e74657273207468652060496e73756666696369656e74426f6e6460206572726f72207768656e2063616c6c696e6720746869732065787472696e7369632c1901746865792073686f756c642063616c6c20606368696c6c6020666972737420696e206f7264657220746f206672656520757020746865697220626f6e6465642066756e64732e0044456d6974732060556e626f6e646564602e009453656520616c736f205b6043616c6c3a3a77697468647261775f756e626f6e646564605d2e4477697468647261775f756e626f6e6465640401486e756d5f736c617368696e675f7370616e7310010c75333200033c290152656d6f766520616e7920756e6c6f636b6564206368756e6b732066726f6d207468652060756e6c6f636b696e67602071756575652066726f6d206f7572206d616e6167656d656e742e0031015468697320657373656e7469616c6c7920667265657320757020746861742062616c616e636520746f206265207573656420627920746865207374617368206163636f756e7420746f20646f4877686174657665722069742077616e74732e001501546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2062792074686520636f6e74726f6c6c65722e0048456d697473206057697468647261776e602e006853656520616c736f205b6043616c6c3a3a756e626f6e64605d2e002823203c7765696768743e0501436f6d706c6578697479204f285329207768657265205320697320746865206e756d626572206f6620736c617368696e67207370616e7320746f2072656d6f766509014e4f54453a2057656967687420616e6e6f746174696f6e20697320746865206b696c6c207363656e6172696f2c20776520726566756e64206f74686572776973652e2c23203c2f7765696768743e2076616c6964617465040114707265667394013856616c696461746f725072656673000414e44465636c617265207468652064657369726520746f2076616c696461746520666f7220746865206f726967696e20636f6e74726f6c6c65722e00d8456666656374732077696c6c2062652066656c742061742074686520626567696e6e696e67206f6620746865206e657874206572612e005101546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2062792074686520636f6e74726f6c6c65722c206e6f74207468652073746173682e206e6f6d696e61746504011c74617267657473510501a05665633c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f757263653e00052c0d014465636c617265207468652064657369726520746f206e6f6d696e6174652060746172676574736020666f7220746865206f726967696e20636f6e74726f6c6c65722e00d8456666656374732077696c6c2062652066656c742061742074686520626567696e6e696e67206f6620746865206e657874206572612e005101546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2062792074686520636f6e74726f6c6c65722c206e6f74207468652073746173682e002823203c7765696768743e2d012d20546865207472616e73616374696f6e277320636f6d706c65786974792069732070726f706f7274696f6e616c20746f207468652073697a65206f662060746172676574736020284e29050177686963682069732063617070656420617420436f6d7061637441737369676e6d656e74733a3a4c494d49542028543a3a4d61784e6f6d696e6174696f6e73292ed42d20426f74682074686520726561647320616e642077726974657320666f6c6c6f7720612073696d696c6172207061747465726e2e2c23203c2f7765696768743e146368696c6c00062cc44465636c617265206e6f2064657369726520746f206569746865722076616c6964617465206f72206e6f6d696e6174652e00d8456666656374732077696c6c2062652066656c742061742074686520626567696e6e696e67206f6620746865206e657874206572612e005101546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2062792074686520636f6e74726f6c6c65722c206e6f74207468652073746173682e002823203c7765696768743ee42d20496e646570656e64656e74206f662074686520617267756d656e74732e20496e7369676e69666963616e7420636f6d706c65786974792e502d20436f6e7461696e73206f6e6520726561642ec42d2057726974657320617265206c696d6974656420746f2074686520606f726967696e60206163636f756e74206b65792e2c23203c2f7765696768743e247365745f706179656504011470617965654d05017c52657761726444657374696e6174696f6e3c543a3a4163636f756e7449643e000740b42852652d2973657420746865207061796d656e742074617267657420666f72206120636f6e74726f6c6c65722e005101456666656374732077696c6c2062652066656c7420696e7374616e746c792028617320736f6f6e20617320746869732066756e6374696f6e20697320636f6d706c65746564207375636365737366756c6c79292e005101546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2062792074686520636f6e74726f6c6c65722c206e6f74207468652073746173682e002823203c7765696768743ee42d20496e646570656e64656e74206f662074686520617267756d656e74732e20496e7369676e69666963616e7420636f6d706c65786974792e942d20436f6e7461696e732061206c696d69746564206e756d626572206f662072656164732ec42d2057726974657320617265206c696d6974656420746f2074686520606f726967696e60206163636f756e74206b65792e242d2d2d2d2d2d2d2d2d382d205765696768743a204f283129302d204442205765696768743a48202020202d20526561643a204c656467657248202020202d2057726974653a2050617965652c23203c2f7765696768743e387365745f636f6e74726f6c6c6572040128636f6e74726f6c6c657200018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f757263650008408c2852652d297365742074686520636f6e74726f6c6c6572206f6620612073746173682e005101456666656374732077696c6c2062652066656c7420696e7374616e746c792028617320736f6f6e20617320746869732066756e6374696f6e20697320636f6d706c65746564207375636365737366756c6c79292e005101546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f206279207468652073746173682c206e6f742074686520636f6e74726f6c6c65722e002823203c7765696768743ee42d20496e646570656e64656e74206f662074686520617267756d656e74732e20496e7369676e69666963616e7420636f6d706c65786974792e942d20436f6e7461696e732061206c696d69746564206e756d626572206f662072656164732ec42d2057726974657320617265206c696d6974656420746f2074686520606f726967696e60206163636f756e74206b65792e282d2d2d2d2d2d2d2d2d2d305765696768743a204f283129284442205765696768743af02d20526561643a20426f6e6465642c204c6564676572204e657720436f6e74726f6c6c65722c204c6564676572204f6c6420436f6e74726f6c6c6572f42d2057726974653a20426f6e6465642c204c6564676572204e657720436f6e74726f6c6c65722c204c6564676572204f6c6420436f6e74726f6c6c65722c23203c2f7765696768743e4c7365745f76616c696461746f725f636f756e7404010c6e6577cd03010c75333200092090536574732074686520696465616c206e756d626572206f662076616c696461746f72732e0084546865206469737061746368206f726967696e206d75737420626520526f6f742e002823203c7765696768743e305765696768743a204f2831295857726974653a2056616c696461746f7220436f756e742c23203c2f7765696768743e60696e6372656173655f76616c696461746f725f636f756e740401286164646974696f6e616ccd03010c753332000a1ca8496e6372656d656e74732074686520696465616c206e756d626572206f662076616c696461746f72732e0084546865206469737061746368206f726967696e206d75737420626520526f6f742e002823203c7765696768743e9853616d65206173205b6053656c663a3a7365745f76616c696461746f725f636f756e74605d2e2c23203c2f7765696768743e547363616c655f76616c696461746f725f636f756e74040118666163746f725505011c50657263656e74000b1cd05363616c652075702074686520696465616c206e756d626572206f662076616c696461746f7273206279206120666163746f722e0084546865206469737061746368206f726967696e206d75737420626520526f6f742e002823203c7765696768743e9853616d65206173205b6053656c663a3a7365745f76616c696461746f725f636f756e74605d2e2c23203c2f7765696768743e34666f7263655f6e6f5f65726173000c3cac466f72636520746865726520746f206265206e6f206e6577206572617320696e646566696e6974656c792e0084546865206469737061746368206f726967696e206d75737420626520526f6f742e002423205761726e696e6700190154686520656c656374696f6e2070726f6365737320737461727473206d756c7469706c6520626c6f636b73206265666f72652074686520656e64206f6620746865206572612e3901546875732074686520656c656374696f6e2070726f63657373206d6179206265206f6e676f696e67207768656e20746869732069732063616c6c65642e20496e2074686973206361736520746865dc656c656374696f6e2077696c6c20636f6e74696e756520756e74696c20746865206e65787420657261206973207472696767657265642e002823203c7765696768743e3c2d204e6f20617267756d656e74732e382d205765696768743a204f283129442d2057726974653a20466f7263654572612c23203c2f7765696768743e34666f7263655f6e65775f657261000d404901466f72636520746865726520746f2062652061206e6577206572612061742074686520656e64206f6620746865206e6578742073657373696f6e2e20416674657220746869732c2069742077696c6c2062659c726573657420746f206e6f726d616c20286e6f6e2d666f7263656429206265686176696f75722e0084546865206469737061746368206f726967696e206d75737420626520526f6f742e002423205761726e696e6700190154686520656c656374696f6e2070726f6365737320737461727473206d756c7469706c6520626c6f636b73206265666f72652074686520656e64206f6620746865206572612e4901496620746869732069732063616c6c6564206a757374206265666f72652061206e657720657261206973207472696767657265642c2074686520656c656374696f6e2070726f63657373206d6179206e6f748c6861766520656e6f75676820626c6f636b7320746f20676574206120726573756c742e002823203c7765696768743e3c2d204e6f20617267756d656e74732e382d205765696768743a204f283129402d20577269746520466f7263654572612c23203c2f7765696768743e447365745f696e76756c6e657261626c6573040134696e76756c6e657261626c6573510501445665633c543a3a4163636f756e7449643e000e0cc8536574207468652076616c696461746f72732077686f2063616e6e6f7420626520736c61736865642028696620616e79292e0084546865206469737061746368206f726967696e206d75737420626520526f6f742e34666f7263655f756e7374616b650801147374617368000130543a3a4163636f756e7449640001486e756d5f736c617368696e675f7370616e7310010c753332000f0c0901466f72636520612063757272656e74207374616b657220746f206265636f6d6520636f6d706c6574656c7920756e7374616b65642c20696d6d6564696174656c792e0084546865206469737061746368206f726967696e206d75737420626520526f6f742e50666f7263655f6e65775f6572615f616c776179730010240101466f72636520746865726520746f2062652061206e6577206572612061742074686520656e64206f662073657373696f6e7320696e646566696e6974656c792e0084546865206469737061746368206f726967696e206d75737420626520526f6f742e002423205761726e696e6700190154686520656c656374696f6e2070726f6365737320737461727473206d756c7469706c6520626c6f636b73206265666f72652074686520656e64206f6620746865206572612e4901496620746869732069732063616c6c6564206a757374206265666f72652061206e657720657261206973207472696767657265642c2074686520656c656374696f6e2070726f63657373206d6179206e6f748c6861766520656e6f75676820626c6f636b7320746f20676574206120726573756c742e5463616e63656c5f64656665727265645f736c61736808010c657261100120457261496e646578000134736c6173685f696e6469636573590501205665633c7533323e0011149443616e63656c20656e6163746d656e74206f66206120646566657272656420736c6173682e00b043616e2062652063616c6c6564206279207468652060543a3a536c61736843616e63656c4f726967696e602e000101506172616d65746572733a2065726120616e6420696e6469636573206f662074686520736c617368657320666f7220746861742065726120746f206b696c6c2e387061796f75745f7374616b65727308013c76616c696461746f725f7374617368000130543a3a4163636f756e74496400010c657261100120457261496e6465780012540d01506179206f757420616c6c20746865207374616b65727320626568696e6420612073696e676c652076616c696461746f7220666f7220612073696e676c65206572612e0049012d206076616c696461746f725f73746173686020697320746865207374617368206163636f756e74206f66207468652076616c696461746f722e205468656972206e6f6d696e61746f72732c20757020746f2501202060543a3a4d61784e6f6d696e61746f72526577617264656450657256616c696461746f72602c2077696c6c20616c736f207265636569766520746865697220726577617264732e31012d206065726160206d617920626520616e7920657261206265747765656e20605b63757272656e745f657261202d20686973746f72795f64657074683b2063757272656e745f6572615d602e005501546865206f726967696e206f6620746869732063616c6c206d757374206265205f5369676e65645f2e20416e79206163636f756e742063616e2063616c6c20746869732066756e6374696f6e2c206576656e206966746974206973206e6f74206f6e65206f6620746865207374616b6572732e002823203c7765696768743efc2d2054696d6520636f6d706c65786974793a206174206d6f7374204f284d61784e6f6d696e61746f72526577617264656450657256616c696461746f72292ec02d20436f6e7461696e732061206c696d69746564206e756d626572206f6620726561647320616e64207772697465732e2c2d2d2d2d2d2d2d2d2d2d2d19014e20697320746865204e756d626572206f66207061796f75747320666f72207468652076616c696461746f722028696e636c7564696e67207468652076616c696461746f72291c5765696768743a842d205265776172642044657374696e6174696f6e205374616b65643a204f284e29c02d205265776172642044657374696e6174696f6e20436f6e74726f6c6c657220284372656174696e67293a204f284e29004d0120204e4f54453a20776569676874732061726520617373756d696e672074686174207061796f75747320617265206d61646520746f20616c697665207374617368206163636f756e7420285374616b6564292e55012020506179696e67206576656e2061206465616420636f6e74726f6c6c65722069732063686561706572207765696768742d776973652e20576520646f6e277420646f20616e7920726566756e647320686572652e2c23203c2f7765696768743e187265626f6e6404011476616c7565d0013042616c616e63654f663c543e001324dc5265626f6e64206120706f7274696f6e206f6620746865207374617368207363686564756c656420746f20626520756e6c6f636b65642e00d4546865206469737061746368206f726967696e206d757374206265207369676e65642062792074686520636f6e74726f6c6c65722e002823203c7765696768743ed02d2054696d6520636f6d706c65786974793a204f284c292c207768657265204c20697320756e6c6f636b696e67206368756e6b73882d20426f756e64656420627920604d6178556e6c6f636b696e674368756e6b73602ef02d2053746f72616765206368616e6765733a2043616e277420696e6372656173652073746f726167652c206f6e6c792064656372656173652069742e2c23203c2f7765696768743e447365745f686973746f72795f64657074680801446e65775f686973746f72795f6465707468cd030120457261496e6465780001446572615f6974656d735f64656c65746564cd03010c7533320014582d015365742060486973746f72794465707468602076616c75652e20546869732066756e6374696f6e2077696c6c2064656c65746520616e7920686973746f727920696e666f726d6174696f6e7c7768656e2060486973746f727944657074686020697320726564756365642e002c506172616d65746572733a0d012d20606e65775f686973746f72795f6465707468603a20546865206e657720686973746f727920646570746820796f7520776f756c64206c696b6520746f207365742e59012d20606572615f6974656d735f64656c65746564603a20546865206e756d626572206f66206974656d7320746861742077696c6c2062652064656c6574656420627920746869732064697370617463682e20546869735d01202073686f756c64207265706f727420616c6c207468652073746f72616765206974656d7320746861742077696c6c2062652064656c6574656420627920636c656172696e67206f6c642065726120686973746f72792e590120204e656564656420746f207265706f727420616e2061636375726174652077656967687420666f72207468652064697370617463682e20547275737465642062792060526f6f746020746f207265706f727420616e4820206163637572617465206e756d6265722e00504f726967696e206d75737420626520726f6f742e002823203c7765696768743edc2d20453a204e756d626572206f6620686973746f7279206465707468732072656d6f7665642c20692e652e203130202d3e2037203d2033382d205765696768743a204f284529302d204442205765696768743a9c202020202d2052656164733a2043757272656e74204572612c20486973746f72792044657074686c202020202d205772697465733a20486973746f72792044657074682d01202020202d20436c6561722050726566697820456163683a20457261205374616b6572732c204572615374616b657273436c69707065642c204572617356616c696461746f7250726566732501202020202d2057726974657320456163683a204572617356616c696461746f725265776172642c2045726173526577617264506f696e74732c2045726173546f74616c5374616b652c6c20202020202045726173537461727453657373696f6e496e6465782c23203c2f7765696768743e28726561705f73746173680801147374617368000130543a3a4163636f756e7449640001486e756d5f736c617368696e675f7370616e7310010c7533320015305d0152656d6f766520616c6c2064617461207374727563747572657320636f6e6365726e696e672061207374616b65722f7374617368206f6e636520697420697320617420612073746174652077686572652069742063616e0501626520636f6e736964657265642060647573746020696e20746865207374616b696e672073797374656d2e2054686520726571756972656d656e7473206172653a000501312e207468652060746f74616c5f62616c616e636560206f66207468652073746173682069732062656c6f77206578697374656e7469616c206465706f7369742e1101322e206f722c2074686520606c65646765722e746f74616c60206f66207468652073746173682069732062656c6f77206578697374656e7469616c206465706f7369742e00550154686520666f726d65722063616e2068617070656e20696e206361736573206c696b65206120736c6173683b20746865206c6174746572207768656e20612066756c6c7920756e626f6e646564206163636f756e7409016973207374696c6c20726563656976696e67207374616b696e67207265776172647320696e206052657761726444657374696e6174696f6e3a3a5374616b6564602e00310149742063616e2062652063616c6c656420627920616e796f6e652c206173206c6f6e672061732060737461736860206d65657473207468652061626f766520726571756972656d656e74732e00dc526566756e647320746865207472616e73616374696f6e20666565732075706f6e207375636365737366756c20657865637574696f6e2e106b69636b04010c77686f510501a05665633c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f757263653e00162ce052656d6f76652074686520676976656e206e6f6d696e6174696f6e732066726f6d207468652063616c6c696e672076616c696461746f722e00d8456666656374732077696c6c2062652066656c742061742074686520626567696e6e696e67206f6620746865206e657874206572612e005101546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2062792074686520636f6e74726f6c6c65722c206e6f74207468652073746173682e004d012d206077686f603a2041206c697374206f66206e6f6d696e61746f72207374617368206163636f756e74732077686f20617265206e6f6d696e6174696e6720746869732076616c696461746f72207768696368c0202073686f756c64206e6f206c6f6e676572206265206e6f6d696e6174696e6720746869732076616c696461746f722e0055014e6f74653a204d616b696e6720746869732063616c6c206f6e6c79206d616b65732073656e736520696620796f7520666972737420736574207468652076616c696461746f7220707265666572656e63657320746f78626c6f636b20616e792066757274686572206e6f6d696e6174696f6e732e4c7365745f7374616b696e675f636f6e666967731801486d696e5f6e6f6d696e61746f725f626f6e645d050158436f6e6669674f703c42616c616e63654f663c543e3e0001486d696e5f76616c696461746f725f626f6e645d050158436f6e6669674f703c42616c616e63654f663c543e3e00014c6d61785f6e6f6d696e61746f725f636f756e7461050134436f6e6669674f703c7533323e00014c6d61785f76616c696461746f725f636f756e7461050134436f6e6669674f703c7533323e00013c6368696c6c5f7468726573686f6c6465050144436f6e6669674f703c50657263656e743e0001386d696e5f636f6d6d697373696f6e69050144436f6e6669674f703c50657262696c6c3e001744ac5570646174652074686520766172696f7573207374616b696e6720636f6e66696775726174696f6e73202e0025012a20606d696e5f6e6f6d696e61746f725f626f6e64603a20546865206d696e696d756d2061637469766520626f6e64206e656564656420746f2062652061206e6f6d696e61746f722e25012a20606d696e5f76616c696461746f725f626f6e64603a20546865206d696e696d756d2061637469766520626f6e64206e656564656420746f20626520612076616c696461746f722e55012a20606d61785f6e6f6d696e61746f725f636f756e74603a20546865206d6178206e756d626572206f662075736572732077686f2063616e2062652061206e6f6d696e61746f72206174206f6e63652e205768656e98202073657420746f20604e6f6e65602c206e6f206c696d697420697320656e666f726365642e55012a20606d61785f76616c696461746f725f636f756e74603a20546865206d6178206e756d626572206f662075736572732077686f2063616e20626520612076616c696461746f72206174206f6e63652e205768656e98202073657420746f20604e6f6e65602c206e6f206c696d697420697320656e666f726365642e59012a20606368696c6c5f7468726573686f6c64603a2054686520726174696f206f6620606d61785f6e6f6d696e61746f725f636f756e7460206f7220606d61785f76616c696461746f725f636f756e74602077686963681901202073686f756c642062652066696c6c656420696e206f7264657220666f722074686520606368696c6c5f6f7468657260207472616e73616374696f6e20746f20776f726b2e61012a20606d696e5f636f6d6d697373696f6e603a20546865206d696e696d756d20616d6f756e74206f6620636f6d6d697373696f6e207468617420656163682076616c696461746f7273206d757374206d61696e7461696e2e550120205468697320697320636865636b6564206f6e6c792075706f6e2063616c6c696e67206076616c6964617465602e204578697374696e672076616c696461746f727320617265206e6f742061666665637465642e00a84f726967696e206d75737420626520526f6f7420746f2063616c6c20746869732066756e6374696f6e2e0035014e4f54453a204578697374696e67206e6f6d696e61746f727320616e642076616c696461746f72732077696c6c206e6f742062652061666665637465642062792074686973207570646174652e1101746f206b69636b2070656f706c6520756e64657220746865206e6577206c696d6974732c20606368696c6c5f6f74686572602073686f756c642062652063616c6c65642e2c6368696c6c5f6f74686572040128636f6e74726f6c6c6572000130543a3a4163636f756e74496400186841014465636c61726520612060636f6e74726f6c6c65726020746f2073746f702070617274696369706174696e672061732065697468657220612076616c696461746f72206f72206e6f6d696e61746f722e00d8456666656374732077696c6c2062652066656c742061742074686520626567696e6e696e67206f6620746865206e657874206572612e004101546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2c206275742063616e2062652063616c6c656420627920616e796f6e652e0059014966207468652063616c6c6572206973207468652073616d652061732074686520636f6e74726f6c6c6572206265696e672074617267657465642c207468656e206e6f206675727468657220636865636b7320617265d8656e666f726365642c20616e6420746869732066756e6374696f6e2062656861766573206a757374206c696b6520606368696c6c602e005d014966207468652063616c6c657220697320646966666572656e74207468616e2074686520636f6e74726f6c6c6572206265696e672074617267657465642c2074686520666f6c6c6f77696e6720636f6e646974696f6e73306d757374206265206d65743a001d012a2060636f6e74726f6c6c657260206d7573742062656c6f6e6720746f2061206e6f6d696e61746f722077686f20686173206265636f6d65206e6f6e2d6465636f6461626c652c000c4f723a003d012a204120604368696c6c5468726573686f6c6460206d7573742062652073657420616e6420636865636b656420776869636820646566696e657320686f7720636c6f736520746f20746865206d6178550120206e6f6d696e61746f7273206f722076616c696461746f7273207765206d757374207265616368206265666f72652075736572732063616e207374617274206368696c6c696e67206f6e652d616e6f746865722e59012a204120604d61784e6f6d696e61746f72436f756e746020616e6420604d617856616c696461746f72436f756e7460206d75737420626520736574207768696368206973207573656420746f2064657465726d696e65902020686f7720636c6f73652077652061726520746f20746865207468726573686f6c642e5d012a204120604d696e4e6f6d696e61746f72426f6e646020616e6420604d696e56616c696461746f72426f6e6460206d7573742062652073657420616e6420636865636b65642c2077686963682064657465726d696e65735101202069662074686973206973206120706572736f6e20746861742073686f756c64206265206368696c6c6564206265636175736520746865792068617665206e6f74206d657420746865207468726573686f6c64402020626f6e642072657175697265642e005501546869732063616e2062652068656c7066756c20696620626f6e6420726571756972656d656e74732061726520757064617465642c20616e64207765206e65656420746f2072656d6f7665206f6c642075736572739877686f20646f206e6f74207361746973667920746865736520726571756972656d656e74732e68666f7263655f6170706c795f6d696e5f636f6d6d697373696f6e04013c76616c696461746f725f7374617368000130543a3a4163636f756e74496400190c4501466f72636520612076616c696461746f7220746f2068617665206174206c6561737420746865206d696e696d756d20636f6d6d697373696f6e2e20546869732077696c6c206e6f74206166666563742061610176616c696461746f722077686f20616c726561647920686173206120636f6d6d697373696f6e2067726561746572207468616e206f7220657175616c20746f20746865206d696e696d756d2e20416e79206163636f756e743863616e2063616c6c20746869732e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e4d05083870616c6c65745f7374616b696e674452657761726444657374696e6174696f6e04244163636f756e74496401000114185374616b656400000014537461736800010028436f6e74726f6c6c65720002001c4163636f756e7404000001244163636f756e744964000300104e6f6e65000400005105000002000055050c3473705f61726974686d65746963287065725f7468696e67731c50657263656e740000040008010875380000590500000210005d05103870616c6c65745f7374616b696e671870616c6c65741870616c6c657420436f6e6669674f700404540118010c104e6f6f700000000c5365740400180104540001001852656d6f7665000200006105103870616c6c65745f7374616b696e671870616c6c65741870616c6c657420436f6e6669674f700404540110010c104e6f6f700000000c5365740400100104540001001852656d6f7665000200006505103870616c6c65745f7374616b696e671870616c6c65741870616c6c657420436f6e6669674f70040454015505010c104e6f6f700000000c536574040055050104540001001852656d6f7665000200006905103870616c6c65745f7374616b696e671870616c6c65741870616c6c657420436f6e6669674f70040454019c010c104e6f6f700000000c53657404009c0104540001001852656d6f7665000200006d050c3870616c6c65745f73657373696f6e1870616c6c65741043616c6c040454000108207365745f6b6579730801106b6579737105011c543a3a4b65797300011470726f6f6628011c5665633c75383e000038e453657473207468652073657373696f6e206b6579287329206f66207468652066756e6374696f6e2063616c6c657220746f20606b657973602e1d01416c6c6f777320616e206163636f756e7420746f20736574206974732073657373696f6e206b6579207072696f7220746f206265636f6d696e6720612076616c696461746f722ec05468697320646f65736e27742074616b652065666665637420756e74696c20746865206e6578742073657373696f6e2e00d0546865206469737061746368206f726967696e206f6620746869732066756e6374696f6e206d757374206265207369676e65642e002823203c7765696768743e11012d20436f6d706c65786974793a20604f283129602e2041637475616c20636f737420646570656e6473206f6e20746865206e756d626572206f66206c656e677468206f6698202060543a3a4b6579733a3a6b65795f6964732829602077686963682069732066697865642eec2d20446252656164733a20606f726967696e206163636f756e74602c2060543a3a56616c696461746f7249644f66602c20604e6578744b65797360a02d2044625772697465733a20606f726967696e206163636f756e74602c20604e6578744b65797360802d204462526561647320706572206b65792069643a20604b65794f776e657260842d20446257726974657320706572206b65792069643a20604b65794f776e6572602c23203c2f7765696768743e2870757267655f6b657973000140c852656d6f76657320616e792073657373696f6e206b6579287329206f66207468652066756e6374696f6e2063616c6c65722e00c05468697320646f65736e27742074616b652065666665637420756e74696c20746865206e6578742073657373696f6e2e005501546865206469737061746368206f726967696e206f6620746869732066756e6374696f6e206d757374206265205369676e656420616e6420746865206163636f756e74206d757374206265206569746865722062655d01636f6e7665727469626c6520746f20612076616c696461746f72204944207573696e672074686520636861696e2773207479706963616c2061646472657373696e672073797374656d20287468697320757375616c6c7951016d65616e73206265696e67206120636f6e74726f6c6c6572206163636f756e7429206f72206469726563746c7920636f6e7665727469626c6520696e746f20612076616c696461746f722049442028776869636894757375616c6c79206d65616e73206265696e672061207374617368206163636f756e74292e002823203c7765696768743e61012d20436f6d706c65786974793a20604f2831296020696e206e756d626572206f66206b65792074797065732e2041637475616c20636f737420646570656e6473206f6e20746865206e756d626572206f66206c656e677468a420206f662060543a3a4b6579733a3a6b65795f6964732829602077686963682069732066697865642eec2d20446252656164733a2060543a3a56616c696461746f7249644f66602c20604e6578744b657973602c20606f726967696e206163636f756e7460a02d2044625772697465733a20604e6578744b657973602c20606f726967696e206163636f756e7460842d20446257726974657320706572206b65792069643a20604b65794f776e6572602c23203c2f7765696768743e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e710508586a6f7973747265616d5f6e6f64655f72756e74696d652c53657373696f6e4b657973000010011c6772616e647061b00109013c2f2ac2ab2a2f204772616e647061202f2ac2bb2a2f206173202463726174653a3a426f756e64546f52756e74696d654170705075626c69633e3a3a5075626c696300011062616265310401fc3c2f2ac2ab2a2f2042616265202f2ac2bb2a2f206173202463726174653a3a426f756e64546f52756e74696d654170705075626c69633e3a3a5075626c6963000124696d5f6f6e6c696e65bc010d013c2f2ac2ab2a2f20496d4f6e6c696e65202f2ac2bb2a2f206173202463726174653a3a426f756e64546f52756e74696d654170705075626c69633e3a3a5075626c696300014c617574686f726974795f646973636f7665727975050139013c2f2ac2ab2a2f20417574686f72697479446973636f76657279202f2ac2bb2a2f206173202463726174653a3a426f756e64546f52756e74696d654170705075626c69633e3a3a0a5075626c6963000075050c5873705f617574686f726974795f646973636f766572790c617070185075626c696300000400c0013c737232353531393a3a5075626c6963000079050c3870616c6c65745f6772616e6470611870616c6c65741043616c6c04045400010c4c7265706f72745f65717569766f636174696f6e08014865717569766f636174696f6e5f70726f6f667d0501bc426f783c45717569766f636174696f6e50726f6f663c543a3a486173682c20543a3a426c6f636b4e756d6265723e3e00013c6b65795f6f776e65725f70726f6f6639040140543a3a4b65794f776e657250726f6f6600001009015265706f727420766f7465722065717569766f636174696f6e2f6d69736265686176696f722e2054686973206d6574686f642077696c6c2076657269667920746865f465717569766f636174696f6e2070726f6f6620616e642076616c69646174652074686520676976656e206b6579206f776e6572736869702070726f6f66f8616761696e73742074686520657874726163746564206f6666656e6465722e20496620626f7468206172652076616c69642c20746865206f6666656e63654477696c6c206265207265706f727465642e707265706f72745f65717569766f636174696f6e5f756e7369676e656408014865717569766f636174696f6e5f70726f6f667d0501bc426f783c45717569766f636174696f6e50726f6f663c543a3a486173682c20543a3a426c6f636b4e756d6265723e3e00013c6b65795f6f776e65725f70726f6f6639040140543a3a4b65794f776e657250726f6f6600012409015265706f727420766f7465722065717569766f636174696f6e2f6d69736265686176696f722e2054686973206d6574686f642077696c6c2076657269667920746865f465717569766f636174696f6e2070726f6f6620616e642076616c69646174652074686520676976656e206b6579206f776e6572736869702070726f6f66f8616761696e73742074686520657874726163746564206f6666656e6465722e20496620626f7468206172652076616c69642c20746865206f6666656e63654477696c6c206265207265706f727465642e000d01546869732065787472696e736963206d7573742062652063616c6c656420756e7369676e656420616e642069742069732065787065637465642074686174206f6e6c791501626c6f636b20617574686f72732077696c6c2063616c6c206974202876616c69646174656420696e206056616c6964617465556e7369676e656460292c2061732073756368150169662074686520626c6f636b20617574686f7220697320646566696e65642069742077696c6c20626520646566696e6564206173207468652065717569766f636174696f6e247265706f727465722e306e6f74655f7374616c6c656408011464656c6179100138543a3a426c6f636b4e756d62657200016c626573745f66696e616c697a65645f626c6f636b5f6e756d626572100138543a3a426c6f636b4e756d62657200021c19014e6f74652074686174207468652063757272656e7420617574686f7269747920736574206f6620746865204752414e4450412066696e616c697479206761646765742068617325017374616c6c65642e20546869732077696c6c2074726967676572206120666f7263656420617574686f7269747920736574206368616e67652061742074686520626567696e6e696e671d016f6620746865206e6578742073657373696f6e2c20746f20626520656e6163746564206064656c61796020626c6f636b7320616674657220746861742e205468652064656c6179110173686f756c64206265206869676820656e6f75676820746f20736166656c7920617373756d6520746861742074686520626c6f636b207369676e616c6c696e67207468652501666f72636564206368616e67652077696c6c206e6f742062652072652d6f726765642028652e672e203130303020626c6f636b73292e20546865204752414e44504120766f74657273250177696c6c20737461727420746865206e657720617574686f7269747920736574207573696e672074686520676976656e2066696e616c697a656420626c6f636b20617320626173652e584f6e6c792063616c6c61626c6520627920726f6f742e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e7d05084c73705f66696e616c6974795f6772616e6470614445717569766f636174696f6e50726f6f660804480124044e0110000801187365745f6964200114536574496400013065717569766f636174696f6e8105014845717569766f636174696f6e3c482c204e3e00008105084c73705f66696e616c6974795f6772616e6470613045717569766f636174696f6e0804480124044e011001081c507265766f7465040085050139016772616e6470613a3a45717569766f636174696f6e3c417574686f7269747949642c206772616e6470613a3a507265766f74653c482c204e3e2c0a417574686f726974795369676e61747572653e00000024507265636f6d6d697404009d050141016772616e6470613a3a45717569766f636174696f6e3c417574686f7269747949642c206772616e6470613a3a507265636f6d6d69743c482c204e3e2c0a417574686f726974795369676e61747572653e000100008505084066696e616c6974795f6772616e6470613045717569766f636174696f6e0c08496401b004560189050453018d0500100130726f756e645f6e756d62657220010c7536340001206964656e74697479b00108496400011466697273749905011828562c2053290001187365636f6e649905011828562c20532900008905084066696e616c6974795f6772616e6470611c507265766f74650804480124044e01100008012c7461726765745f68617368240104480001347461726765745f6e756d6265721001044e00008d050c4c73705f66696e616c6974795f6772616e6470610c617070245369676e61747572650000040091050148656432353531393a3a5369676e6174757265000091050c1c73705f636f72651c65643235353139245369676e617475726500000400950501205b75383b2036345d0000950500000340000000080099050000040889058d05009d05084066696e616c6974795f6772616e6470613045717569766f636174696f6e0c08496401b0045601a1050453018d0500100130726f756e645f6e756d62657220010c7536340001206964656e74697479b0010849640001146669727374a505011828562c2053290001187365636f6e64a505011828562c2053290000a105084066696e616c6974795f6772616e64706124507265636f6d6d69740804480124044e01100008012c7461726765745f68617368240104480001347461726765745f6e756d6265721001044e0000a50500000408a1058d0500a9050c4070616c6c65745f696d5f6f6e6c696e651870616c6c65741043616c6c04045400010424686561727462656174080124686561727462656174ad0501644865617274626561743c543a3a426c6f636b4e756d6265723e0001247369676e6174757265c10501bc3c543a3a417574686f7269747949642061732052756e74696d654170705075626c69633e3a3a5369676e61747572650000242823203c7765696768743e61012d20436f6d706c65786974793a20604f284b202b20452960207768657265204b206973206c656e677468206f6620604b6579736020286865617274626561742e76616c696461746f72735f6c656e2920616e642045206973d820206c656e677468206f6620606865617274626561742e6e6574776f726b5f73746174652e65787465726e616c5f61646472657373608820202d20604f284b29603a206465636f64696e67206f66206c656e67746820604b60ac20202d20604f284529603a206465636f64696e672f656e636f64696e67206f66206c656e6774682060456039012d20446252656164733a2070616c6c65745f73657373696f6e206056616c696461746f7273602c2070616c6c65745f73657373696f6e206043757272656e74496e646578602c20604b657973602c5820206052656365697665644865617274626561747360802d2044625772697465733a2060526563656976656448656172746265617473602c23203c2f7765696768743e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632ead05084070616c6c65745f696d5f6f6e6c696e6524486561727462656174042c426c6f636b4e756d626572011000140130626c6f636b5f6e756d62657210012c426c6f636b4e756d6265720001346e6574776f726b5f7374617465b10501484f70617175654e6574776f726b537461746500013473657373696f6e5f696e64657810013053657373696f6e496e64657800013c617574686f726974795f696e64657810012441757468496e64657800013876616c696461746f72735f6c656e10010c7533320000b1050c1c73705f636f7265206f6666636861696e484f70617175654e6574776f726b5374617465000008011c706565725f6964b50501304f706171756550656572496400014865787465726e616c5f616464726573736573b90501505665633c4f70617175654d756c7469616464723e0000b505081c73705f636f7265304f70617175655065657249640000040028011c5665633c75383e0000b905000002bd0500bd050c1c73705f636f7265206f6666636861696e3c4f70617175654d756c7469616464720000040028011c5665633c75383e0000c105104070616c6c65745f696d5f6f6e6c696e651c737232353531392c6170705f73723235353139245369676e617475726500000400c5050148737232353531393a3a5369676e61747572650000c5050c1c73705f636f72651c73723235353139245369676e617475726500000400950501205b75383b2036345d0000c9050c4070616c6c65745f626167735f6c6973741870616c6c65741043616c6c0804540004490001081472656261670401286469736c6f6361746564000130543a3a4163636f756e74496400002859014465636c617265207468617420736f6d6520606469736c6f636174656460206163636f756e74206861732c207468726f7567682072657761726473206f722070656e616c746965732c2073756666696369656e746c7951016368616e676564206974732073636f726520746861742069742073686f756c642070726f7065726c792066616c6c20696e746f206120646966666572656e7420626167207468616e206974732063757272656e74106f6e652e001d01416e796f6e652063616e2063616c6c20746869732066756e6374696f6e2061626f757420616e7920706f74656e7469616c6c79206469736c6f6361746564206163636f756e742e00490157696c6c20616c7761797320757064617465207468652073746f7265642073636f7265206f6620606469736c6f63617465646020746f2074686520636f72726563742073636f72652c206261736564206f6e406053636f726550726f7669646572602e00d4496620606469736c6f63617465646020646f6573206e6f74206578697374732c2069742072657475726e7320616e206572726f722e3c7075745f696e5f66726f6e745f6f6604011c6c696768746572000130543a3a4163636f756e744964000120d04d6f7665207468652063616c6c65722773204964206469726563746c7920696e2066726f6e74206f6620606c696768746572602e005901546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e642063616e206f6e6c792062652063616c6c656420627920746865204964206f66a0746865206163636f756e7420676f696e6720696e2066726f6e74206f6620606c696768746572602e00344f6e6c7920776f726b73206966942d20626f7468206e6f646573206172652077697468696e207468652073616d65206261672cd02d20616e6420606f726967696e602068617320612067726561746572206053636f726560207468616e20606c696768746572602e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632ecd050c3870616c6c65745f76657374696e671870616c6c65741043616c6c0404540001141076657374000034b8556e6c6f636b20616e79207665737465642066756e6473206f66207468652073656e646572206163636f756e742e005d01546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e64207468652073656e646572206d75737420686176652066756e6473207374696c6c646c6f636b656420756e64657220746869732070616c6c65742e00d0456d69747320656974686572206056657374696e67436f6d706c6574656460206f72206056657374696e6755706461746564602e002823203c7765696768743e242d20604f283129602e742d2044625765696768743a20322052656164732c203220577269746573f8202020202d2052656164733a2056657374696e672053746f726167652c2042616c616e636573204c6f636b732c205b53656e646572204163636f756e745dfc202020202d205772697465733a2056657374696e672053746f726167652c2042616c616e636573204c6f636b732c205b53656e646572204163636f756e745d2c23203c2f7765696768743e28766573745f6f7468657204011874617267657400018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f7572636500013cb8556e6c6f636b20616e79207665737465642066756e6473206f662061206074617267657460206163636f756e742e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e0051012d2060746172676574603a20546865206163636f756e742077686f7365207665737465642066756e64732073686f756c6420626520756e6c6f636b65642e204d75737420686176652066756e6473207374696c6c646c6f636b656420756e64657220746869732070616c6c65742e00d0456d69747320656974686572206056657374696e67436f6d706c6574656460206f72206056657374696e6755706461746564602e002823203c7765696768743e242d20604f283129602e742d2044625765696768743a20332052656164732c203320577269746573f0202020202d2052656164733a2056657374696e672053746f726167652c2042616c616e636573204c6f636b732c20546172676574204163636f756e74f4202020202d205772697465733a2056657374696e672053746f726167652c2042616c616e636573204c6f636b732c20546172676574204163636f756e742c23203c2f7765696768743e3c7665737465645f7472616e7366657208011874617267657400018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f757263650001207363686564756c65d10501a456657374696e67496e666f3c42616c616e63654f663c543e2c20543a3a426c6f636b4e756d6265723e00024464437265617465206120766573746564207472616e736665722e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e00cc2d2060746172676574603a20546865206163636f756e7420726563656976696e6720746865207665737465642066756e64732ef02d20607363686564756c65603a205468652076657374696e67207363686564756c6520617474616368656420746f20746865207472616e736665722e005c456d697473206056657374696e6743726561746564602e00fc4e4f54453a20546869732077696c6c20756e6c6f636b20616c6c207363686564756c6573207468726f756768207468652063757272656e7420626c6f636b2e002823203c7765696768743e242d20604f283129602e742d2044625765696768743a20332052656164732c2033205772697465733901202020202d2052656164733a2056657374696e672053746f726167652c2042616c616e636573204c6f636b732c20546172676574204163636f756e742c205b53656e646572204163636f756e745d3d01202020202d205772697465733a2056657374696e672053746f726167652c2042616c616e636573204c6f636b732c20546172676574204163636f756e742c205b53656e646572204163636f756e745d2c23203c2f7765696768743e54666f7263655f7665737465645f7472616e736665720c0118736f7572636500018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f7572636500011874617267657400018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f757263650001207363686564756c65d10501a456657374696e67496e666f3c42616c616e63654f663c543e2c20543a3a426c6f636b4e756d6265723e00034860466f726365206120766573746564207472616e736665722e00c4546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f526f6f745f2e00e82d2060736f75726365603a20546865206163636f756e742077686f73652066756e64732073686f756c64206265207472616e736665727265642e11012d2060746172676574603a20546865206163636f756e7420746861742073686f756c64206265207472616e7366657272656420746865207665737465642066756e64732ef02d20607363686564756c65603a205468652076657374696e67207363686564756c6520617474616368656420746f20746865207472616e736665722e005c456d697473206056657374696e6743726561746564602e00fc4e4f54453a20546869732077696c6c20756e6c6f636b20616c6c207363686564756c6573207468726f756768207468652063757272656e7420626c6f636b2e002823203c7765696768743e242d20604f283129602e742d2044625765696768743a20342052656164732c2034205772697465733101202020202d2052656164733a2056657374696e672053746f726167652c2042616c616e636573204c6f636b732c20546172676574204163636f756e742c20536f75726365204163636f756e743501202020202d205772697465733a2056657374696e672053746f726167652c2042616c616e636573204c6f636b732c20546172676574204163636f756e742c20536f75726365204163636f756e742c23203c2f7765696768743e3c6d657267655f7363686564756c657308013c7363686564756c65315f696e64657810010c75333200013c7363686564756c65325f696e64657810010c7533320004545d014d657267652074776f2076657374696e67207363686564756c657320746f6765746865722c206372656174696e672061206e65772076657374696e67207363686564756c65207468617420756e6c6f636b73206f7665725501746865206869676865737420706f737369626c6520737461727420616e6420656e6420626c6f636b732e20496620626f7468207363686564756c6573206861766520616c7265616479207374617274656420746865590163757272656e7420626c6f636b2077696c6c206265207573656420617320746865207363686564756c652073746172743b207769746820746865206361766561742074686174206966206f6e65207363686564756c655d0169732066696e6973686564206279207468652063757272656e7420626c6f636b2c20746865206f746865722077696c6c206265207472656174656420617320746865206e6577206d6572676564207363686564756c652c2c756e6d6f6469666965642e00f84e4f54453a20496620607363686564756c65315f696e646578203d3d207363686564756c65325f696e6465786020746869732069732061206e6f2d6f702e41014e4f54453a20546869732077696c6c20756e6c6f636b20616c6c207363686564756c6573207468726f756768207468652063757272656e7420626c6f636b207072696f7220746f206d657267696e672e61014e4f54453a20496620626f7468207363686564756c6573206861766520656e646564206279207468652063757272656e7420626c6f636b2c206e6f206e6577207363686564756c652077696c6c206265206372656174656464616e6420626f74682077696c6c2062652072656d6f7665642e006c4d6572676564207363686564756c6520617474726962757465733a35012d20607374617274696e675f626c6f636b603a20604d4158287363686564756c65312e7374617274696e675f626c6f636b2c207363686564756c6564322e7374617274696e675f626c6f636b2c48202063757272656e745f626c6f636b29602e21012d2060656e64696e675f626c6f636b603a20604d4158287363686564756c65312e656e64696e675f626c6f636b2c207363686564756c65322e656e64696e675f626c6f636b29602e59012d20606c6f636b6564603a20607363686564756c65312e6c6f636b65645f61742863757272656e745f626c6f636b29202b207363686564756c65322e6c6f636b65645f61742863757272656e745f626c6f636b29602e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e00e82d20607363686564756c65315f696e646578603a20696e646578206f6620746865206669727374207363686564756c6520746f206d657267652eec2d20607363686564756c65325f696e646578603a20696e646578206f6620746865207365636f6e64207363686564756c6520746f206d657267652e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632ed1050c3870616c6c65745f76657374696e673076657374696e675f696e666f2c56657374696e67496e666f081c42616c616e636501182c426c6f636b4e756d6265720110000c01186c6f636b656418011c42616c616e63650001247065725f626c6f636b18011c42616c616e63650001387374617274696e675f626c6f636b10012c426c6f636b4e756d6265720000d5050c3c70616c6c65745f6d756c74697369671870616c6c65741043616c6c0404540001105061735f6d756c74695f7468726573686f6c645f310801446f746865725f7369676e61746f72696573510501445665633c543a3a4163636f756e7449643e00011063616c6c1d040160426f783c3c5420617320436f6e6669673e3a3a43616c6c3e0000405101496d6d6564696174656c792064697370617463682061206d756c74692d7369676e61747572652063616c6c207573696e6720612073696e676c6520617070726f76616c2066726f6d207468652063616c6c65722e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e003d012d20606f746865725f7369676e61746f72696573603a20546865206163636f756e747320286f74686572207468616e207468652073656e646572292077686f206172652070617274206f662074686501016d756c74692d7369676e61747572652c2062757420646f206e6f7420706172746963697061746520696e2074686520617070726f76616c2070726f636573732e882d206063616c6c603a205468652063616c6c20746f2062652065786563757465642e00b8526573756c74206973206571756976616c656e7420746f20746865206469737061746368656420726573756c742e002823203c7765696768743e19014f285a202b204329207768657265205a20697320746865206c656e677468206f66207468652063616c6c20616e6420432069747320657865637574696f6e207765696768742e7c2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d442d204442205765696768743a204e6f6e65482d20506c75732043616c6c205765696768742c23203c2f7765696768743e2061735f6d756c74691801247468726573686f6c640d04010c7531360001446f746865725f7369676e61746f72696573510501445665633c543a3a4163636f756e7449643e00013c6d617962655f74696d65706f696e74d90501844f7074696f6e3c54696d65706f696e743c543a3a426c6f636b4e756d6265723e3e00011063616c6cdd0501344f706171756543616c6c3c543e00012873746f72655f63616c6c880110626f6f6c0001286d61785f7765696768742001185765696768740001b45501526567697374657220617070726f76616c20666f72206120646973706174636820746f206265206d6164652066726f6d20612064657465726d696e697374696320636f6d706f73697465206163636f756e74206966f8617070726f766564206279206120746f74616c206f6620607468726573686f6c64202d203160206f6620606f746865725f7369676e61746f72696573602e00b049662074686572652061726520656e6f7567682c207468656e206469737061746368207468652063616c6c2e002d015061796d656e743a20604465706f73697442617365602077696c6c20626520726573657276656420696620746869732069732074686520666972737420617070726f76616c2c20706c75733d01607468726573686f6c64602074696d657320604465706f736974466163746f72602e2049742069732072657475726e6564206f6e636520746869732064697370617463682068617070656e73206f723469732063616e63656c6c65642e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e0055012d20607468726573686f6c64603a2054686520746f74616c206e756d626572206f6620617070726f76616c7320666f722074686973206469737061746368206265666f72652069742069732065786563757465642e41012d20606f746865725f7369676e61746f72696573603a20546865206163636f756e747320286f74686572207468616e207468652073656e646572292077686f2063616e20617070726f766520746869736c64697370617463682e204d6179206e6f7420626520656d7074792e59012d20606d617962655f74696d65706f696e74603a20496620746869732069732074686520666972737420617070726f76616c2c207468656e2074686973206d75737420626520604e6f6e65602e20496620697420697351016e6f742074686520666972737420617070726f76616c2c207468656e206974206d7573742062652060536f6d65602c2077697468207468652074696d65706f696e742028626c6f636b206e756d62657220616e64d47472616e73616374696f6e20696e64657829206f662074686520666972737420617070726f76616c207472616e73616374696f6e2e882d206063616c6c603a205468652063616c6c20746f2062652065786563757465642e001d014e4f54453a20556e6c6573732074686973206973207468652066696e616c20617070726f76616c2c20796f752077696c6c2067656e6572616c6c792077616e7420746f20757365190160617070726f76655f61735f6d756c74696020696e73746561642c2073696e6365206974206f6e6c7920726571756972657320612068617368206f66207468652063616c6c2e005901526573756c74206973206571756976616c656e7420746f20746865206469737061746368656420726573756c7420696620607468726573686f6c64602069732065786163746c79206031602e204f746865727769736555016f6e20737563636573732c20726573756c7420697320604f6b6020616e642074686520726573756c742066726f6d2074686520696e746572696f722063616c6c2c206966206974207761732065786563757465642cdc6d617920626520666f756e6420696e20746865206465706f736974656420604d756c7469736967457865637574656460206576656e742e002823203c7765696768743e502d20604f2853202b205a202b2043616c6c29602ecc2d20557020746f206f6e652062616c616e63652d72657365727665206f7220756e72657365727665206f7065726174696f6e2e3d012d204f6e6520706173737468726f756768206f7065726174696f6e2c206f6e6520696e736572742c20626f746820604f285329602077686572652060536020697320746865206e756d626572206f66450120207369676e61746f726965732e206053602069732063617070656420627920604d61785369676e61746f72696573602c207769746820776569676874206265696e672070726f706f7274696f6e616c2e21012d204f6e652063616c6c20656e636f6465202620686173682c20626f7468206f6620636f6d706c657869747920604f285a296020776865726520605a602069732074782d6c656e2ebc2d204f6e6520656e636f6465202620686173682c20626f7468206f6620636f6d706c657869747920604f285329602ed42d20557020746f206f6e652062696e6172792073656172636820616e6420696e736572742028604f286c6f6753202b20532960292ef82d20492f4f3a2031207265616420604f285329602c20757020746f2031206d757461746520604f285329602e20557020746f206f6e652072656d6f76652e302d204f6e65206576656e742e6c2d2054686520776569676874206f6620746865206063616c6c602e4d012d2053746f726167653a20696e7365727473206f6e65206974656d2c2076616c75652073697a6520626f756e64656420627920604d61785369676e61746f72696573602c20776974682061206465706f7369741901202074616b656e20666f7220697473206c69666574696d65206f6620604465706f73697442617365202b207468726573686f6c64202a204465706f736974466163746f72602e7c2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d302d204442205765696768743a2101202020202d2052656164733a204d756c74697369672053746f726167652c205b43616c6c6572204163636f756e745d2c2043616c6c7320286966206073746f72655f63616c6c60292501202020202d205772697465733a204d756c74697369672053746f726167652c205b43616c6c6572204163636f756e745d2c2043616c6c7320286966206073746f72655f63616c6c6029482d20506c75732043616c6c205765696768742c23203c2f7765696768743e40617070726f76655f61735f6d756c74691401247468726573686f6c640d04010c7531360001446f746865725f7369676e61746f72696573510501445665633c543a3a4163636f756e7449643e00013c6d617962655f74696d65706f696e74d90501844f7074696f6e3c54696d65706f696e743c543a3a426c6f636b4e756d6265723e3e00012463616c6c5f686173680401205b75383b2033325d0001286d61785f77656967687420011857656967687400028c5501526567697374657220617070726f76616c20666f72206120646973706174636820746f206265206d6164652066726f6d20612064657465726d696e697374696320636f6d706f73697465206163636f756e74206966f8617070726f766564206279206120746f74616c206f6620607468726573686f6c64202d203160206f6620606f746865725f7369676e61746f72696573602e002d015061796d656e743a20604465706f73697442617365602077696c6c20626520726573657276656420696620746869732069732074686520666972737420617070726f76616c2c20706c75733d01607468726573686f6c64602074696d657320604465706f736974466163746f72602e2049742069732072657475726e6564206f6e636520746869732064697370617463682068617070656e73206f723469732063616e63656c6c65642e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e0055012d20607468726573686f6c64603a2054686520746f74616c206e756d626572206f6620617070726f76616c7320666f722074686973206469737061746368206265666f72652069742069732065786563757465642e41012d20606f746865725f7369676e61746f72696573603a20546865206163636f756e747320286f74686572207468616e207468652073656e646572292077686f2063616e20617070726f766520746869736c64697370617463682e204d6179206e6f7420626520656d7074792e59012d20606d617962655f74696d65706f696e74603a20496620746869732069732074686520666972737420617070726f76616c2c207468656e2074686973206d75737420626520604e6f6e65602e20496620697420697351016e6f742074686520666972737420617070726f76616c2c207468656e206974206d7573742062652060536f6d65602c2077697468207468652074696d65706f696e742028626c6f636b206e756d62657220616e64d47472616e73616374696f6e20696e64657829206f662074686520666972737420617070726f76616c207472616e73616374696f6e2ecc2d206063616c6c5f68617368603a205468652068617368206f66207468652063616c6c20746f2062652065786563757465642e0035014e4f54453a2049662074686973206973207468652066696e616c20617070726f76616c2c20796f752077696c6c2077616e7420746f20757365206061735f6d756c74696020696e73746561642e002823203c7765696768743e242d20604f285329602ecc2d20557020746f206f6e652062616c616e63652d72657365727665206f7220756e72657365727665206f7065726174696f6e2e3d012d204f6e6520706173737468726f756768206f7065726174696f6e2c206f6e6520696e736572742c20626f746820604f285329602077686572652060536020697320746865206e756d626572206f66450120207369676e61746f726965732e206053602069732063617070656420627920604d61785369676e61746f72696573602c207769746820776569676874206265696e672070726f706f7274696f6e616c2ebc2d204f6e6520656e636f6465202620686173682c20626f7468206f6620636f6d706c657869747920604f285329602ed42d20557020746f206f6e652062696e6172792073656172636820616e6420696e736572742028604f286c6f6753202b20532960292ef82d20492f4f3a2031207265616420604f285329602c20757020746f2031206d757461746520604f285329602e20557020746f206f6e652072656d6f76652e302d204f6e65206576656e742e4d012d2053746f726167653a20696e7365727473206f6e65206974656d2c2076616c75652073697a6520626f756e64656420627920604d61785369676e61746f72696573602c20776974682061206465706f7369741901202074616b656e20666f7220697473206c69666574696d65206f6620604465706f73697442617365202b207468726573686f6c64202a204465706f736974466163746f72602e882d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d302d204442205765696768743ab8202020202d20526561643a204d756c74697369672053746f726167652c205b43616c6c6572204163636f756e745dbc202020202d2057726974653a204d756c74697369672053746f726167652c205b43616c6c6572204163636f756e745d2c23203c2f7765696768743e3c63616e63656c5f61735f6d756c74691001247468726573686f6c640d04010c7531360001446f746865725f7369676e61746f72696573510501445665633c543a3a4163636f756e7449643e00012474696d65706f696e74f0016454696d65706f696e743c543a3a426c6f636b4e756d6265723e00012463616c6c5f686173680401205b75383b2033325d000368550143616e63656c2061207072652d6578697374696e672c206f6e2d676f696e67206d756c7469736967207472616e73616374696f6e2e20416e79206465706f7369742072657365727665642070726576696f75736c79c4666f722074686973206f7065726174696f6e2077696c6c20626520756e7265736572766564206f6e20737563636573732e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e0055012d20607468726573686f6c64603a2054686520746f74616c206e756d626572206f6620617070726f76616c7320666f722074686973206469737061746368206265666f72652069742069732065786563757465642e41012d20606f746865725f7369676e61746f72696573603a20546865206163636f756e747320286f74686572207468616e207468652073656e646572292077686f2063616e20617070726f766520746869736c64697370617463682e204d6179206e6f7420626520656d7074792e5d012d206074696d65706f696e74603a205468652074696d65706f696e742028626c6f636b206e756d62657220616e64207472616e73616374696f6e20696e64657829206f662074686520666972737420617070726f76616c787472616e73616374696f6e20666f7220746869732064697370617463682ecc2d206063616c6c5f68617368603a205468652068617368206f66207468652063616c6c20746f2062652065786563757465642e002823203c7765696768743e242d20604f285329602ecc2d20557020746f206f6e652062616c616e63652d72657365727665206f7220756e72657365727665206f7065726174696f6e2e3d012d204f6e6520706173737468726f756768206f7065726174696f6e2c206f6e6520696e736572742c20626f746820604f285329602077686572652060536020697320746865206e756d626572206f66450120207369676e61746f726965732e206053602069732063617070656420627920604d61785369676e61746f72696573602c207769746820776569676874206265696e672070726f706f7274696f6e616c2ebc2d204f6e6520656e636f6465202620686173682c20626f7468206f6620636f6d706c657869747920604f285329602e302d204f6e65206576656e742e842d20492f4f3a2031207265616420604f285329602c206f6e652072656d6f76652e702d2053746f726167653a2072656d6f766573206f6e65206974656d2e882d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d302d204442205765696768743a1501202020202d20526561643a204d756c74697369672053746f726167652c205b43616c6c6572204163636f756e745d2c20526566756e64204163636f756e742c2043616c6c731901202020202d2057726974653a204d756c74697369672053746f726167652c205b43616c6c6572204163636f756e745d2c20526566756e64204163636f756e742c2043616c6c732c23203c2f7765696768743e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632ed90504184f7074696f6e04045401f00108104e6f6e6500000010536f6d650400f00000010000dd0510346672616d655f737570706f727418747261697473106d69736344577261707065724b6565704f7061717565040454011d04000800cd030000001d040104540000e105083870616c6c65745f636f756e63696c1043616c6c04045400013048616e6e6f756e63655f63616e6469646163791001346d656d626572736869705f696420012c543a3a4d656d62657249640001487374616b696e675f6163636f756e745f6964000130543a3a4163636f756e7449640001447265776172645f6163636f756e745f6964000130543a3a4163636f756e7449640001147374616b6518012842616c616e63653c543e0000244c5375627363726962652063616e646964617465002823203c7765696768743e00242323207765696768741c604f2028312960142d2064623ad42020202d20604f2831296020646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e5c72656c656173655f63616e6469646163795f7374616b650401346d656d626572736869705f696420012c543a3a4d656d6265724964000124c452656c656173652063616e646964616379207374616b652074686174206973206e6f206c6f6e676572206e65656465642e002823203c7765696768743e00242323207765696768741c604f2028312960142d2064623ad42020202d20604f2831296020646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e4877697468647261775f63616e6469646163790401346d656d626572736869705f696420012c543a3a4d656d6265724964000224bc57697468647261772063616e64696461637920616e642072656c656173652063616e646964616379207374616b652e002823203c7765696768743e00242323207765696768741c604f2028312960142d2064623ad42020202d20604f2831296020646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e487365745f63616e6469646163795f6e6f74650801346d656d626572736869705f696420012c543a3a4d656d62657249640001106e6f746528011c5665633c75383e00032879015365742073686f7274206465736372697074696f6e20666f7220746865207573657227732063616e6469646163792e2043616e2062652063616c6c656420616e7974696d6520647572696e67207573657227732063616e6469646163792e002823203c7765696768743e002423232077656967687438604f20284e29602077686572653a98604e60206973207468652073697a65206f6620606e6f74656020696e206b696c6f6279746573142d2064623ad42020202d20604f2831296020646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e287365745f62756467657404011c62616c616e636518012842616c616e63653c543e000424605365747320746865206275646765742062616c616e63652e002823203c7765696768743e00242323207765696768741c604f2028312960142d2064623ad42020202d20604f2831296020646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e48706c616e5f6275646765745f726566696c6c04012c6e6578745f726566696c6c100138543a3a426c6f636b4e756d62657200052470506c616e20746865206e6578742062756467657420726566696c6c2e002823203c7765696768743e00242323207765696768741c604f2028312960142d2064623ad42020202d20604f2831296020646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e507365745f6275646765745f696e6372656d656e740401406275646765745f696e6372656d656e7418012842616c616e63653c543e0006247453657473207468652062756467657420726566696c6c20616d6f756e74002823203c7765696768743e00242323207765696768741c604f2028312960142d2064623ad42020202d20604f2831296020646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e507365745f636f756e63696c6f725f726577617264040140636f756e63696c6f725f72657761726418012842616c616e63653c543e0007248c536574732074686520636f756e63696c6f72207265776172642070657220626c6f636b002823203c7765696768743e00242323207765696768741c604f2028312960142d2064623ad42020202d20604f2831296020646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e3c66756e64696e675f7265717565737404014066756e64696e675f72657175657374733d0301dc5665633c46756e64696e6752657175657374506172616d65746572733c42616c616e63653c543e2c20543a3a4163636f756e7449643e3e000828b85472616e73666572732066756e64732066726f6d20636f756e63696c2062756467657420746f206163636f756e74002823203c7765696768743e002423232077656967687438604f20284629602077686572653a9c60466020697320746865206c656e677468206f66206066756e64696e675f726571756573747360142d2064623ad42020202d20604f2831296020646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e4c66756e645f636f756e63696c5f6275646765740c01246d656d6265725f696420012c4d656d62657249643c543e000118616d6f756e7418012842616c616e63653c543e000124726174696f6e616c6528011c5665633c75383e0009209046756e642074686520636f756e63696c206275646765742062792061206d656d6265722e203c7765696768743e0024232320576569676874c4604f202831296020446f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d6574657273142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e40636f756e63696c6f725f72656d61726b080130636f756e63696c6f725f696420012c543a3a4d656d626572496400010c6d736728011c5665633c75383e000a2480436f756e63696c6f72206d616b657320612072656d61726b206d657373616765002823203c7765696768743e00242323207765696768741c604f2028312960142d2064623ad42020202d20604f2831296020646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e4063616e6469646174655f72656d61726b08013063616e6469646174655f696420012c543a3a4d656d626572496400010c6d736728011c5665633c75383e000b248043616e646964617465206d616b657320612072656d61726b206d657373616765002823203c7765696768743e00242323207765696768741c604f2028312960142d2064623ad42020202d20604f2831296020646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e0c4c446973706174636861626c652063616c6c732e005501456163682076617269616e74206f66207468697320656e756d206d61707320746f206120646973706174636861626c652066756e6374696f6e2066726f6d20746865206173736f636961746564206d6f64756c652ee505084470616c6c65745f7265666572656e64756d1043616c6c08045400044900011010766f7465080128636f6d6d69746d656e7424011c543a3a486173680001147374616b6518013042616c616e63654f663c543e00002494436173742061207365616c656420766f746520696e20746865207265666572656e64756d2e002823203c7765696768743e00242323207765696768741c604f2028312960142d2064623ad42020202d20604f2831296020646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e2c72657665616c5f766f746508011073616c7428011c5665633c75383e000138766f74655f6f7074696f6e5f69642001d03c5420617320636f6d6d6f6e3a3a6d656d626572736869703a3a4d656d6265727368697054797065733e3a3a4d656d626572496400012c9c52657665616c2061207365616c656420766f746520696e20746865207265666572656e64756d2e002823203c7765696768743e002423232057656967687438604f20285729602077686572653a0d012d2060576020697320746865206e756d626572206f662060696e7465726d6564696174655f77696e6e657273602073746f72656420696e207468652063757272656e7468202020206053746167653a3a3c542c20493e3a3a676574282960142d2044423ad42020202d20604f2831296020646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e4872656c656173655f766f74655f7374616b650002205c52656c656173652061206c6f636b6564207374616b652e2823203c7765696768743e00242323207765696768741c604f2028312960142d2064623ad42020202d20604f2831296020646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e446f70745f6f75745f6f665f766f74696e67000324cc5065726d616e656e746c79206f7074206f7574206f6620766f74696e672066726f6d206120676976656e206163636f756e742e002823203c7765696768743e00242323207765696768741c604f2028312960142d2064623ad42020202d20604f2831296020646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e0c4c446973706174636861626c652063616c6c732e005501456163682076617269616e74206f66207468697320656e756d206d61707320746f206120646973706174636861626c652066756e6374696f6e2066726f6d20746865206173736f636961746564206d6f64756c652ee905084470616c6c65745f6d656d626572736869701043616c6c040454000144386275795f6d656d62657273686970040118706172616d73110101c84275794d656d62657273686970506172616d65746572733c543a3a4163636f756e7449642c20543a3a4d656d62657249643e00002c7c4e6f6e2d6d656d626572732063616e20627579206d656d626572736869702e00203c7765696768743e002423232057656967687448604f202857202b204d29602077686572653a942d20605760206973207468652068616e646c652073697a6520696e206b696c6f62797465739c2d20604d6020697320746865206d657461646174612073697a6520696e206b696c6f6279746573142d2044423a242020202d204f2831292c23203c2f7765696768743e387570646174655f70726f66696c650c01246d656d6265725f696420012c543a3a4d656d626572496400011868616e646c651501013c4f7074696f6e3c5665633c75383e3e0001206d657461646174611501013c4f7074696f6e3c5665633c75383e3e0001300d01557064617465206d656d626572277320616c6c206f7220736f6d65206f66206e616d652c2068616e646c652c2061766174617220616e642061626f757420746578742e7c4e6f20656666656374206966206e6f206368616e676564206669656c64732e00203c7765696768743e002423232057656967687448604f202857202b204d29602077686572653a942d20605760206973207468652068616e646c652073697a6520696e206b696c6f62797465739c2d20604d6020697320746865206d657461646174612073697a6520696e206b696c6f6279746573142d2044423a242020202d204f2831292c23203c2f7765696768743e3c7570646174655f6163636f756e74730c01246d656d6265725f696420012c543a3a4d656d62657249640001406e65775f726f6f745f6163636f756e742d0101504f7074696f6e3c543a3a4163636f756e7449643e0001586e65775f636f6e74726f6c6c65725f6163636f756e742d0101504f7074696f6e3c543a3a4163636f756e7449643e00022c550155706461746573206d656d62657220726f6f74206f7220636f6e74726f6c6c6572206163636f756e74732e204e6f2065666665637420696620626f7468206e6577206163636f756e74732061726520656d7074792e00203c7765696768743e00203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e6c7570646174655f70726f66696c655f766572696669636174696f6e0c0124776f726b65725f6964200128543a3a4163746f7249640001407461726765745f6d656d6265725f696420012c543a3a4d656d626572496400012c69735f7665726966696564880110626f6f6c000324450155706461746573206d656d6265722070726f66696c6520766572696669636174696f6e207374617475732e20526571756972657320776f726b696e672067726f7570206d656d626572206f726967696e2e00203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e407365745f726566657272616c5f63757404013470657263656e745f76616c75650801087538000424110155706461746573206d656d6265727368697020726566657272616c206375742070657263656e742076616c75652e20526571756972657320726f6f74206f726967696e2e00203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e407472616e736665725f696e76697465730c0140736f757263655f6d656d6265725f696420012c543a3a4d656d62657249640001407461726765745f6d656d6265725f696420012c543a3a4d656d62657249640001446e756d6265725f6f665f696e766974657310010c753332000524b45472616e736665727320696e76697465732066726f6d206f6e65206d656d62657220746f20616e6f746865722e00203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e34696e766974655f6d656d626572040118706172616d731d0101d4496e766974654d656d62657273686970506172616d65746572733c543a3a4163636f756e7449642c20543a3a4d656d62657249643e00062c50496e766974652061206e6577206d656d6265722e00203c7765696768743e002423232057656967687448604f202857202b204d29602077686572653a942d20605760206973207468652068616e646c652073697a6520696e206b696c6f62797465739c2d20604d6020697320746865206d657461646174612073697a6520696e206b696c6f6279746573142d2044423a242020202d204f2831292c23203c2f7765696768743e3c676966745f6d656d62657273686970040118706172616d73250101d0476966744d656d62657273686970506172616d65746572733c543a3a4163636f756e7449642c2042616c616e63654f663c543e3e00070c1d01476966742061206d656d62657273686970207573696e67206f776e2066756e64732e2047696674657220646f6573206e6f74206e65656420746f2062652061206d656d6265722e5d0143616e206f7074696e616c6c79206170706c792061206c6f636b206f6e206120706f7274696f6e206f66207468652066756e6473207472616e7366657272656420746f20726f6f7420616e6420636f6e74726f6c6c6572b86163636f756e74732e2047696674657220616c736f207061797320746865206d656d62657273686970206665652e507365745f6d656d626572736869705f70726963650401246e65775f707269636518013042616c616e63654f663c543e000824bc55706461746573206d656d626572736869702070726963652e20526571756972657320726f6f74206f726967696e2e00203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e6c7365745f6c65616465725f696e7669746174696f6e5f71756f7461040140696e7669746174696f6e5f71756f746110010c753332000924d855706461746573206c656164657220696e7669746174696f6e2071756f74612e20526571756972657320726f6f74206f726967696e2e00203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e787365745f696e697469616c5f696e7669746174696f6e5f62616c616e636504014c6e65775f696e697469616c5f62616c616e636518013042616c616e63654f663c543e000a2439015570646174657320696e697469616c20696e7669746174696f6e2062616c616e636520666f72206120696e7669746564206d656d6265722e20526571756972657320726f6f74206f726967696e2e00203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e707365745f696e697469616c5f696e7669746174696f6e5f636f756e740401506e65775f696e7669746174696f6e5f636f756e7410010c753332000b2411015570646174657320696e697469616c20696e7669746174696f6e20636f756e7420666f722061206d656d6265722e20526571756972657320726f6f74206f726967696e2e00203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e746164645f7374616b696e675f6163636f756e745f63616e6469646174650401246d656d6265725f696420012c543a3a4d656d6265724964000c28ac416464207374616b696e67206163636f756e742063616e64696461746520666f722061206d656d6265722eb8546865206d656d62657273686970206d75737420626520636f6e6669726d6564206265666f72652075736167652e00203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e5872656d6f76655f7374616b696e675f6163636f756e740401246d656d6265725f696420012c543a3a4d656d6265724964000d249052656d6f7665207374616b696e67206163636f756e7420666f722061206d656d6265722e00203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e5c636f6e6669726d5f7374616b696e675f6163636f756e740801246d656d6265725f696420012c543a3a4d656d62657249640001487374616b696e675f6163636f756e745f6964000130543a3a4163636f756e744964000e24bc436f6e6669726d207374616b696e67206163636f756e742063616e64696461746520666f722061206d656d6265722e00203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e346d656d6265725f72656d61726b0c01246d656d6265725f696420012c543a3a4d656d626572496400010c6d736728011c5665633c75383e00011c7061796d656e74310101884f7074696f6e3c28543a3a4163636f756e7449642c20543a3a42616c616e6365293e000f24544d656d626572206d616b657320612072656d61726b00203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e346372656174655f6d656d626572040118706172616d73210101904372656174654d656d626572506172616d65746572733c543a3a4163636f756e7449643e00102c804372656174652061206d656d6265722070726f66696c6520617320726f6f742e00203c7765696768743e002423232057656967687448604f202849202b204a29602077686572653a942d20604960206973207468652068616e646c652073697a6520696e206b696c6f62797465739c2d20604a6020697320746865206d657461646174612073697a6520696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e0c4c446973706174636861626c652063616c6c732e005501456163682076617269616e74206f66207468697320656e756d206d61707320746f206120646973706174636861626c652066756e6374696f6e2066726f6d20746865206173736f636961746564206d6f64756c652eed05083070616c6c65745f666f72756d1043616c6c0404540001409c7570646174655f63617465676f72795f6d656d626572736869705f6f665f6d6f64657261746f720c01306d6f64657261746f725f69642001384d6f64657261746f7249643c543e00012c63617465676f72795f6964200134543a3a43617465676f727949640001246e65775f76616c7565880110626f6f6c0000240901456e61626c652061206d6f64657261746f722063616e206d6f64657261746520612063617465676f727920616e6420697473207375622063617465676f726965732e00203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e3c6372656174655f63617465676f72790c0148706172656e745f63617465676f72795f6964190101544f7074696f6e3c543a3a43617465676f727949643e0001147469746c6528011c5665633c75383e00012c6465736372697074696f6e28011c5665633c75383e0001304c4164642061206e65772063617465676f72792e00203c7765696768743e002423232057656967687458604f202857202b2056202b205829602077686572653a6c2d20605760206973207468652063617465676f7279206465707468d42d20605660206973207468652073697a65206f66207468652063617465676f7279207469746c6520696e206b696c6f62797465732eec2d20605860206973207468652073697a65206f66207468652063617465676f7279206465736372697074696f6e20696e206b696c6f62797465732e142d2044423a242020202d204f2857292c23203c2f7765696768743e7c7570646174655f63617465676f72795f617263686976616c5f7374617475730c01146163746f723d01014850726976696c656765644163746f723c543e00012c63617465676f72795f6964200134543a3a43617465676f7279496400014c6e65775f617263686976616c5f737461747573880110626f6f6c0002285855706461746520617263686976616c2073746174757300203c7765696768743e002423232057656967687438604f20285729602077686572653a6c2d20605760206973207468652063617465676f7279206465707468142d2044423a242020202d204f2857292c23203c2f7765696768743e547570646174655f63617465676f72795f7469746c650c01146163746f723d01014850726976696c656765644163746f723c543e00012c63617465676f72795f6964200134543a3a43617465676f727949640001147469746c6528011c5665633c75383e00032c545570646174652063617465676f7279207469746c6500203c7765696768743e002423232057656967687448604f202857202b205629602077686572653a6c2d20605760206973207468652063617465676f7279206465707468d42d20605660206973207468652073697a65206f66207468652063617465676f7279207469746c6520696e206b696c6f62797465732e142d2044423a242020202d204f2857292c23203c2f7765696768743e6c7570646174655f63617465676f72795f6465736372697074696f6e0c01146163746f723d01014850726976696c656765644163746f723c543e00012c63617465676f72795f6964200134543a3a43617465676f7279496400012c6465736372697074696f6e28011c5665633c75383e00042c6c5570646174652063617465676f7279206465736372697074696f6e00203c7765696768743e002423232057656967687438604f20285729602077686572653a6c2d20605760206973207468652063617465676f7279206465707468ec2d20605660206973207468652073697a65206f66207468652063617465676f7279206465736372697074696f6e20696e206b696c6f62797465732e142d2044423a242020202d204f2857292c23203c2f7765696768743e3c64656c6574655f63617465676f72790801146163746f723d01014850726976696c656765644163746f723c543e00012c63617465676f72795f6964200134543a3a43617465676f727949640005283c44656c6574652063617465676f727900203c7765696768743e002423232057656967687438604f20285729602077686572653a6c2d20605760206973207468652063617465676f7279206465707468142d2044423a242020202d204f2857292c23203c2f7765696768743e346372656174655f746872656164100134666f72756d5f757365725f6964200138466f72756d5573657249643c543e00012c63617465676f72795f6964200134543a3a43617465676f727949640001206d6574616461746128011c5665633c75383e0001107465787428011c5665633c75383e00063074437265617465206e65772074687265616420696e2063617465676f727900203c7765696768743e002423232057656967687458604f202857202b2056202b205829602077686572653a6c2d20605760206973207468652063617465676f7279206465707468cc2d20605660206973207468652073697a65206f662074686520746872656164207469746c6520696e206b696c6f62797465732ec82d20605860206973207468652073697a65206f662074686520746872656164207465787420696e206b696c6f62797465732e142d2044423a242020202d204f2857292c23203c2f7765696768743e50656469745f7468726561645f6d65746164617461100134666f72756d5f757365725f6964200138466f72756d5573657249643c543e00012c63617465676f72795f6964200134543a3a43617465676f727949640001247468726561645f696420012c543a3a54687265616449640001306e65775f6d6574616461746128011c5665633c75383e00072c504564697420746872656164206d6574616461746100203c7765696768743e002423232057656967687448604f202857202b205629602077686572653a6c2d20605760206973207468652063617465676f7279206465707468d82d20605660206973207468652073697a65206f662074686520746872656164206d6574616461746120696e206b696c6f62797465732e142d2044423a242020202d204f2857292c23203c2f7765696768743e3464656c6574655f746872656164100134666f72756d5f757365725f6964200138466f72756d5573657249643c543e00012c63617465676f72795f6964200134543a3a43617465676f727949640001247468726561645f696420012c543a3a546872656164496400011068696465880110626f6f6c0008283444656c6574652074687265616400203c7765696768743e002423232057656967687438604f20285729602077686572653a6c2d20605760206973207468652063617465676f7279206465707468142d2044423a242020202d204f2857292c23203c2f7765696768743e5c6d6f76655f7468726561645f746f5f63617465676f72791001146163746f723d01014850726976696c656765644163746f723c543e00012c63617465676f72795f6964200134543a3a43617465676f727949640001247468726561645f696420012c543a3a546872656164496400013c6e65775f63617465676f72795f6964200134543a3a43617465676f727949640009287c4d6f76652074687265616420746f20616e6f746865722063617465676f727900203c7765696768743e002423232057656967687438604f20285729602077686572653a6c2d20605760206973207468652063617465676f7279206465707468142d2044423a242020202d204f2857292c23203c2f7765696768743e3c6d6f6465726174655f7468726561641001146163746f723d01014850726976696c656765644163746f723c543e00012c63617465676f72795f6964200134543a3a43617465676f727949640001247468726561645f696420012c543a3a5468726561644964000124726174696f6e616c6528011c5665633c75383e000a303c4d6f6465726174652074687265616400203c7765696768743e002423232057656967687458604f202857202b2056202b205829602077686572653a702d20605760206973207468652063617465676f72792064657074682c902d2060566020697320746865206e756d626572206f662074687265616420706f7374732cbc2d20605860206973207468652073697a65206f662074686520726174696f6e616c6520696e206b696c6f6279746573142d2044423a342020202d204f2857202b2056292c23203c2f7765696768743e206164645f706f7374140134666f72756d5f757365725f6964200138466f72756d5573657249643c543e00012c63617465676f72795f6964200134543a3a43617465676f727949640001247468726561645f696420012c543a3a54687265616449640001107465787428011c5665633c75383e0001206564697461626c65880110626f6f6c000b2c2041646420706f737400203c7765696768743e002423232057656967687448604f202857202b205629602077686572653a702d20605760206973207468652063617465676f72792064657074682ca82d20605660206973207468652073697a65206f6620746865207465787420696e206b696c6f6279746573142d2044423a242020202d204f2857292c23203c2f7765696768743e38656469745f706f73745f74657874140134666f72756d5f757365725f6964200138466f72756d5573657249643c543e00012c63617465676f72795f6964200134543a3a43617465676f727949640001247468726561645f696420012c543a3a546872656164496400011c706f73745f6964200124543a3a506f737449640001206e65775f7465787428011c5665633c75383e000c2c384564697420706f7374207465787400203c7765696768743e002423232057656967687448604f202857202b205629602077686572653a702d20605760206973207468652063617465676f72792064657074682cb82d20605660206973207468652073697a65206f6620746865206e6577207465787420696e206b696c6f6279746573142d2044423a242020202d204f2857292c23203c2f7765696768743e346d6f6465726174655f706f73741401146163746f723d01014850726976696c656765644163746f723c543e00012c63617465676f72795f6964200134543a3a43617465676f727949640001247468726561645f696420012c543a3a546872656164496400011c706f73745f6964200124543a3a506f73744964000124726174696f6e616c6528011c5665633c75383e000d2c344d6f64657261746520706f737400203c7765696768743e002423232057656967687448604f202857202b205629602077686572653a702d20605760206973207468652063617465676f72792064657074682cbc2d20605660206973207468652073697a65206f662074686520726174696f6e616c6520696e206b696c6f6279746573142d2044423a242020202d204f2857292c23203c2f7765696768743e3064656c6574655f706f7374730c0134666f72756d5f757365725f6964200138466f72756d5573657249643c543e000114706f7374734501018442547265654d61703c457874656e646564506f737449643c543e2c20626f6f6c3e000124726174696f6e616c6528011c5665633c75383e000e346444656c65746520706f73742066726f6d2073746f726167652eec596f75206e65656420746f2070726f76696465206120766563746f72206f6620706f73747320746f2064656c65746520696e2074686520666f726db428543a3a43617465676f727949642c20543a3a54687265616449642c20543a3a506f737449642c20626f6f6c292501776865726520746865206c61737420626f6f6c206973207768657468657220796f752077616e7420746f20686964652069742061706172742066726f6d2064656c6574696e67206974002423232057656967687458604f202857202b2056202b205029602077686572653a702d20605760206973207468652063617465676f72792064657074682cbc2d20605660206973207468652073697a65206f662074686520726174696f6e616c6520696e206b696c6f6279746573982d2060506020697320746865206e756d626572206f6620706f73747320746f2064656c657465142d2044423a342020202d204f2857202b2050292c23203c2f7765696768743e507365745f737469636b6965645f746872656164730c01146163746f723d01014850726976696c656765644163746f723c543e00012c63617465676f72795f6964200134543a3a43617465676f72794964000130737469636b6965645f6964735101015442547265655365743c543a3a54687265616449643e000f2c8453657420737469636b696564207468726561647320666f722063617465676f727900203c7765696768743e002423232057656967687448604f202857202b205629602077686572653a702d20605760206973207468652063617465676f72792064657074682c9c2d2060566020697320746865206c656e677468206f662074686520737469636b6965645f696473142d2044423a342020202d204f2857202b2056292c23203c2f7765696768743e0c4c446973706174636861626c652063616c6c732e005501456163682076617269616e74206f66207468697320656e756d206d61707320746f206120646973706174636861626c652066756e6374696f6e2066726f6d20746865206173736f636961746564206d6f64756c652ef105084c70616c6c65745f636f6e737469747574696f6e1043616c6c04045400010448616d656e645f636f6e737469747574696f6e040144636f6e737469747574696f6e5f7465787428011c5665633c75383e000018e453657473207468652063757272656e7420636f6e737469747574696f6e20686173682e20526571756972657320726f6f74206f726967696e2e2823203c7765696768743e11012d20436f6d706c65786974793a20604f28432960207768657265204320697320746865206c656e677468206f662074686520636f6e737469747574696f6e20746578742e342d2044622072656164733a20307c2d204462207772697465733a20312028636f6e7374616e742076616c7565292c23203c2f7765696768743e0c4c446973706174636861626c652063616c6c732e005501456163682076617269616e74206f66207468697320656e756d206d61707320746f206120646973706174636861626c652066756e6374696f6e2066726f6d20746865206173736f636961746564206d6f64756c652ef505083470616c6c65745f626f756e74791043616c6c04045400013c346372656174655f626f756e7479080118706172616d735d01016c426f756e74794372656174696f6e506172616d65746572733c543e0001206d6574616461746128011c5665633c75383e000028490143726561746573206120626f756e74792e204d657461646174612073746f72656420696e20746865207472616e73616374696f6e206c6f67206275742064697363617264656420616674657220746861742e203c7765696768743e002423232057656967687438604f20285729602077686572653aa42d2060576020697320746865205f6d657461646174612073697a6520696e206b696c6f62797465732eb02d20604d6020697320636c6f73656420636f6e7472616374206d656d626572206c697374206c656e6774682e142d2044423a842020202d204f284d2920284f283129206f6e206f70656e20636f6e7472616374292c23203c2f7765696768743e2c66756e645f626f756e74790c011866756e64657261010160426f756e74794163746f723c4d656d62657249643c543e3e000124626f756e74795f696420012c543a3a426f756e74794964000118616d6f756e7418013042616c616e63654f663c543e0001206050726f766964657320626f756e74792066756e64696e672e2823203c7765696768743e00242323207765696768741c604f2028312960142d2064623ad42020202d20604f2831296020646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e407465726d696e6174655f626f756e7479040124626f756e74795f696420012c543a3a426f756e74794964000224c05465726d696e61746573206120626f756e747920696e2066756e64696e672c2066756e64696e6720657870697265642c7c776f726b7375626d697373696f6e2c206a756467696e6720706572696f642e2823203c7765696768743e00242323207765696768741c604f2028312960142d2064623ad42020202d20604f2831296020646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e347377697463685f6f7261636c650801286e65775f6f7261636c6561010160426f756e74794163746f723c4d656d62657249643c543e3e000124626f756e74795f696420012c543a3a426f756e74794964000324904f7261636c652073776974636865732068696d73656c6620746f2061206e6577206f6e652823203c7765696768743e00242323207765696768741c604f2028312960142d2064623ad42020202d20604f2831296020646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e004077697468647261775f66756e64696e6708011866756e64657261010160426f756e74794163746f723c4d656d62657249643c543e3e000124626f756e74795f696420012c543a3a426f756e74794964000420c4576974686472617720626f756e74792066756e64696e672062792061206d656d626572206f72206120636f756e63696c2e2823203c7765696768743e00242323207765696768741c604f2028312960142d2064623ad42020202d20604f2831296020646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e4c616e6e6f756e63655f776f726b5f656e7472791001246d656d6265725f696420012c4d656d62657249643c543e000124626f756e74795f696420012c543a3a426f756e747949640001487374616b696e675f6163636f756e745f6964000130543a3a4163636f756e744964000140776f726b5f6465736372697074696f6e28011c5665633c75383e000528b0416e6e6f756e636520776f726b20656e74727920666f722061207375636365737366756c20626f756e74792e2823203c7765696768743e002423232077656967687448604f202857202b204d29602077686572653ac02d206057602069732074686520776f726b5f6465736372697074696f6e2073697a6520696e206b696c6f62797465732eb02d20604d6020697320636c6f73656420636f6e7472616374206d656d626572206c697374206c656e6774682e142d2064623ad42020202d20604f2831296020646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e2c7375626d69745f776f726b1001246d656d6265725f696420012c4d656d62657249643c543e000124626f756e74795f696420012c543a3a426f756e74794964000120656e7472795f6964200128543a3a456e7472794964000124776f726b5f6461746128011c5665633c75383e000624645375626d697420776f726b20666f72206120626f756e74792e2823203c7765696768743e00242323207765696768741c604f20284e2960a42d20604e602069732074686520776f726b5f646174612073697a6520696e206b696c6f62797465732c142d2064623ad42020202d20604f2831296020646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e48656e645f776f726b696e675f706572696f64040124626f756e74795f696420012c543a3a426f756e7479496400072068656e6420626f756e747920776f726b696e6720706572696f642e2823203c7765696768743e00242323207765696768741c604f2028312960142d2064623ad42020202d20604f2831296020646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e587375626d69745f6f7261636c655f6a7564676d656e740c0124626f756e74795f696420012c543a3a426f756e747949640001206a7564676d656e746d0101a04f7261636c654a7564676d656e743c543a3a456e74727949642c2042616c616e63654f663c543e3e000124726174696f6e616c6528011c5665633c75383e00083819015375626d69747320616e206f7261636c65206a7564676d656e7420666f72206120626f756e74792c20736c617368696e672074686520656e74726965732072656a65637465642d01627920616e206172626974726172792070657263656e7461676520616e6420726577617264696e67207468652077696e6e65727320627920616e2061726269747261727920616d6f756e7498286e6f742073757270617373696e672074686520746f74616c2066756e6420616d6f756e74292823203c7765696768743e00242323207765696768744c604f20284a202b204b202b2057202b20522960942d20604a6020697320726174696f6e616c652073697a6520696e206b696c6f62797465732c61012d20604b60206973207468652073756d206f6620616c6c20616374696f6e5f6a757374696669636174696f6e2073697a65732028696e206b696c6f62797465732920696e73696465204f7261636c654a7564676d656e742cac2d20605760206973206e756d626572206f662077696e6e6572206a7564676d656e7420656e74726965732cb42d20605260206973206e756d626572206f662072656a6563746564206a7564676d656e7420656e74726965732c142d2064623a3c2020202d20604f2857202b205229602c23203c2f7765696768743e5877697468647261775f656e7472616e745f7374616b650c01246d656d6265725f696420012c4d656d62657249643c543e000124626f756e74795f696420012c543a3a426f756e74794964000120656e7472795f6964200128543a3a456e7472794964000928a4556e6c6f636b7320746865207374616b652072656c6174656420746f206120776f726b20656e747279a901416674657220746865206f7261636c65206d616b657320746865206a7564676d656e74206f722074686520636f756e63696c207465726d696e617465732074686520626f756e74792062792063616c6c696e67207465726d696e6174655f626f756e7479282e2e2e292c51016561636820776f726b65722077686f736520656e74727920686173206e6f74206265656e206a75646765642c2063616e20756e6c6f636b2074686520746f74616c697479206f66207468656972207374616b652e2823203c7765696768743e00242323207765696768741c604f2028312960142d2064623ad42020202d20604f2831296020646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e5877697468647261775f6f7261636c655f726577617264040124626f756e74795f696420012c543a3a426f756e74794964000a2890576974687261777320746865206f7261636c652072657761726420746f206f7261636c651101496620626f756e7479206973207375636365737366756c6c792c204661696c6564206f722043616e63656c6c6564206f7261636c65206d7573742063616c6c2074686973a065787472696e73696320746f20776974686472617720746865206f7261636c65207265776172642c2823203c7765696768743e00242323207765696768741c604f2028312960142d2064623ad42020202d20604f2831296020646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e48636f6e7472696275746f725f72656d61726b0c012c636f6e7472696275746f7261010160426f756e74794163746f723c4d656d62657249643c543e3e000124626f756e74795f696420012c543a3a426f756e7479496400010c6d736728011c5665633c75383e000b2880426f756e747920436f6e7472696275746f72206d61646520612072656d61726b002823203c7765696768743e00242323207765696768741c604f20284e2960782d20604e60206973206d73672073697a6520696e206b696c6f6279746573142d2064623ad42020202d20604f2831296020646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e346f7261636c655f72656d61726b0c01186f7261636c6561010160426f756e74794163746f723c4d656d62657249643c543e3e000124626f756e74795f696420012c543a3a426f756e7479496400010c6d736728011c5665633c75383e000c286c426f756e7479204f7261636c65206d61646520612072656d61726b002823203c7765696768743e00242323207765696768741c604f20284e2960782d20604e60206973206d73672073697a6520696e206b696c6f6279746573142d2064623ad42020202d20604f2831296020646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e38656e7472616e745f72656d61726b100128656e7472616e745f696420012c4d656d62657249643c543e000124626f756e74795f696420012c543a3a426f756e74794964000120656e7472795f6964200128543a3a456e747279496400010c6d736728011c5665633c75383e000d288c426f756e747920456e7472616e7420576f726b6572206d61646520612072656d61726b002823203c7765696768743e00242323207765696768741c604f20284e2960782d20604e60206973206d73672073697a6520696e206b696c6f6279746573142d2064623ad42020202d20604f2831296020646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e3863726561746f725f72656d61726b0c011c63726561746f7261010160426f756e74794163746f723c4d656d62657249643c543e3e000124626f756e74795f696420012c543a3a426f756e7479496400010c6d736728011c5665633c75383e000e286c426f756e7479204f7261636c65206d61646520612072656d61726b002823203c7765696768743e00242323207765696768741c604f20284e2960782d20604e60206973206d73672073697a6520696e206b696c6f6279746573142d2064623ad42020202d20604f2831296020646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e0c4c446973706174636861626c652063616c6c732e005501456163682076617269616e74206f66207468697320656e756d206d61707320746f206120646973706174636861626c652066756e6374696f6e2066726f6d20746865206173736f636961746564206d6f64756c652ef905083870616c6c65745f7574696c6974791043616c6c0404540001105c657865637574655f7369676e616c5f70726f706f73616c0401187369676e616c28011c5665633c75383e00002871015369676e616c2070726f706f73616c2065787472696e7369632e2053686f756c6420626520757365642061732063616c6c61626c65206f626a65637420746f207061737320746f207468652060656e67696e6560206d6f64756c652e00203c7765696768743e002423232057656967687438604f20285329602077686572653ab02d20605360206973207468652073697a65206f6620746865207369676e616c20696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e80657865637574655f72756e74696d655f757067726164655f70726f706f73616c0401107761736d28011c5665633c75383e0001288c52756e74696d6520757067726164652070726f706f73616c2065787472696e7369632e050153686f756c6420626520757365642061732063616c6c61626c65206f626a65637420746f207061737320746f207468652060656e67696e6560206d6f64756c652e203c7765696768743e002423232057656967687438604f20284329602077686572653a742d2060436020697320746865206c656e677468206f6620607761736d603d01486f77657665722c207765207472656174207468697320617320612066756c6c20626c6f636b20617320606672616d655f73797374656d3a3a4d6f64756c653a3a7365745f636f64656020646f65732c23203c2f7765696768743ebd01235b776569676874203d2028543a3a426c6f636b576569676874733a3a67657428292e676574284469737061746368436c6173733a3a4f7065726174696f6e616c292e626173655f65787472696e7369632c204469737061746368436c6173733a3a4f7065726174696f6e616c295d6c7570646174655f776f726b696e675f67726f75705f6275646765740c0134776f726b696e675f67726f757081010130576f726b696e6747726f7570000118616d6f756e7418013042616c616e63654f663c543e00013062616c616e63655f6b696e648501012c42616c616e63654b696e640002206c55706461746520776f726b696e672067726f757020627564676574203c7765696768743e0024232320576569676874c4604f202831296020446f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d6574657273142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e4c6275726e5f6163636f756e745f746f6b656e73040118616d6f756e7418013042616c616e63654f663c543e000320784275726e7320746f6b656e20666f722063616c6c6572206163636f756e74203c7765696768743e0024232320576569676874c4604f202831296020446f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d6574657273142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e0c4c446973706174636861626c652063616c6c732e005501456163682076617269616e74206f66207468697320656e756d206d61707320746f206120646973706174636861626c652066756e6374696f6e2066726f6d20746865206173736f636961746564206d6f64756c652efd05083870616c6c65745f636f6e74656e741043616c6c04045400010101506372656174655f63757261746f725f67726f757008012469735f616374697665880110626f6f6c0001507065726d697373696f6e735f62795f6c6576656c3d02017c4d6f6465726174696f6e5065726d697373696f6e7342794c6576656c3c543e000028a0416464206e65772063757261746f722067726f757020746f2072756e74696d652073746f7261676500203c7765696768743e002423232057656967687438604f20284129602077686572653af02d2060416020697320746865206e756d626572206f6620656e747269657320696e20607065726d697373696f6e735f62795f6c6576656c60206d6170142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e807570646174655f63757261746f725f67726f75705f7065726d697373696f6e7308014063757261746f725f67726f75705f6964200144543a3a43757261746f7247726f757049640001507065726d697373696f6e735f62795f6c6576656c3d02017c4d6f6465726174696f6e5065726d697373696f6e7342794c6576656c3c543e000128ac557064617465206578697374696e672063757261746f722067726f75702773207065726d697373696f6e7300203c7765696768743e002423232057656967687438604f20284129602077686572653af02d2060416020697320746865206e756d626572206f6620656e747269657320696e20607065726d697373696f6e735f62795f6c6576656c60206d6170142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e607365745f63757261746f725f67726f75705f73746174757308014063757261746f725f67726f75705f6964200144543a3a43757261746f7247726f7570496400012469735f616374697665880110626f6f6c0002241d01536574206069735f616374697665602073746174757320666f722063757261746f722067726f757020756e64657220676976656e206063757261746f725f67726f75705f69646000203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e506164645f63757261746f725f746f5f67726f75700c014063757261746f725f67726f75705f6964200144543a3a43757261746f7247726f7570496400012863757261746f725f6964200130543a3a43757261746f72496400012c7065726d697373696f6e73a501015c4368616e6e656c4167656e745065726d697373696f6e73000324ec4164642063757261746f7220746f2063757261746f722067726f757020756e64657220676976656e206063757261746f725f67726f75705f69646000203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e6472656d6f76655f63757261746f725f66726f6d5f67726f757008014063757261746f725f67726f75705f6964200144543a3a43757261746f7247726f7570496400012863757261746f725f6964200130543a3a43757261746f724964000424a452656d6f76652063757261746f722066726f6d206120676976656e2063757261746f722067726f757000203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e386372656174655f6368616e6e656c0801346368616e6e656c5f6f776e6572cd0101b04368616e6e656c4f776e65723c543a3a4d656d62657249642c20543a3a43757261746f7247726f757049643e000118706172616d73fd0101704368616e6e656c4372656174696f6e506172616d65746572733c543e000530203c7765696768743e002423232057656967687478604f202841202b2042202b2043202b2044202b204529602077686572653ae02d2060416020697320746865206e756d626572206f6620656e747269657320696e2060706172616d732e636f6c6c61626f7261746f727360e02d2060426020697320746865206e756d626572206f66206974656d7320696e2060706172616d732e73746f726167655f6275636b65747360f42d2060436020697320746865206e756d626572206f66206974656d7320696e2060706172616d732e646973747269627574696f6e5f6275636b6574736011012d2060446020697320746865206e756d626572206f66206974656d7320696e2060706172616d732e6173736574732e6f626a6563745f6372656174696f6e5f6c69737460c02d20604560206973207468652073697a65206f66202060706172616d732e6d6574616020696e206b696c6f6279746573142d2044423ae02020202d20604f2841202b2042202b2043202b20442960202d2066726f6d20746865207468652067656e65726174656420776569676874732c23203c2f7765696768743e387570646174655f6368616e6e656c0c01146163746f728d0101e8436f6e74656e744163746f723c543a3a43757261746f7247726f757049642c20543a3a43757261746f7249642c20543a3a4d656d62657249643e0001286368616e6e656c5f6964200130543a3a4368616e6e656c4964000118706172616d73290201684368616e6e656c557064617465506172616d65746572733c543e000630203c7765696768743e002423232057656967687478604f202841202b2042202b2043202b2044202b204529602077686572653ae02d2060416020697320746865206e756d626572206f6620656e747269657320696e2060706172616d732e636f6c6c61626f7261746f72736071012d2060426020697320746865206e756d626572206f66206974656d7320696e2060706172616d732e6173736574735f746f5f75706c6f61642e6f626a6563745f6372656174696f6e5f6c69737460202869662070726f766964656429e42d2060436020697320746865206e756d626572206f66206974656d7320696e2060706172616d732e6173736574735f746f5f72656d6f766560cc2d20604460206973207468652073697a65206f662060706172616d732e6e65775f6d6574616020696e206b696c6f6279746573ec2d206045602069732060706172616d732e73746f726167655f6275636b6574735f6e756d5f7769746e65737360202869662070726f766964656429142d2044423ae02020202d20604f2841202b2042202b2043202b20452960202d2066726f6d20746865207468652067656e65726174656420776569676874732c23203c2f7765696768743e787570646174655f6368616e6e656c5f70726976696c6567655f6c6576656c0801286368616e6e656c5f6964200130543a3a4368616e6e656c496400014c6e65775f70726976696c6567655f6c6576656c080160543a3a4368616e6e656c50726976696c6567654c6576656c000724150145787472696e73696320666f72207570646174696e67206368616e6e656c2070726976696c656765206c6576656c20287265717569726573206c656164206163636573732900203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743ea07365745f6368616e6e656c5f7061757365645f66656174757265735f61735f6d6f64657261746f721001146163746f728d0101e8436f6e74656e744163746f723c543a3a43757261746f7247726f757049642c20543a3a43757261746f7249642c20543a3a4d656d62657249643e0001286368616e6e656c5f6964200130543a3a4368616e6e656c496400014c6e65775f7061757365645f6665617475726573c101018042547265655365743c5061757361626c654368616e6e656c466561747572653e000124726174696f6e616c6528011c5665633c75383e000828c845787472696e73696320666f722070617573696e672f72652d656e61626c696e67206368616e6e656c20666561747572657300203c7765696768743e002423232057656967687438604f20284129602077686572653ab42d20604160206973207468652073697a65206f662060726174696f6e616c656020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e3864656c6574655f6368616e6e656c1001146163746f728d0101e8436f6e74656e744163746f723c543a3a43757261746f7247726f757049642c20543a3a43757261746f7249642c20543a3a4d656d62657249643e0001286368616e6e656c5f6964200130543a3a4368616e6e656c496400014c6368616e6e656c5f6261675f7769746e657373010601444368616e6e656c4261675769746e6573730001546e756d5f6f626a656374735f746f5f64656c65746520010c753634000928203c7765696768743e002423232057656967687458604f202841202b2042202b204329602077686572653a802d2060416020697320606e756d5f6f626a656374735f746f5f64656c65746560c82d2060426020697320606368616e6e656c5f6261675f7769746e6573732e73746f726167655f6275636b6574735f6e756d60dc2d2060436020697320606368616e6e656c5f6261675f7769746e6573732e646973747269627574696f6e5f6275636b6574735f6e756d60142d2044423ad02020202d20604f2841202b2042202b20432960202d2066726f6d20746865207468652067656e65726174656420776569676874732c23203c2f7765696768743e8864656c6574655f6368616e6e656c5f6173736574735f61735f6d6f64657261746f721401146163746f728d0101e8436f6e74656e744163746f723c543a3a43757261746f7247726f757049642c20543a3a43757261746f7249642c20543a3a4d656d62657249643e0001286368616e6e656c5f6964200130543a3a4368616e6e656c49640001406173736574735f746f5f72656d6f76655101016442547265655365743c446174614f626a65637449643c543e3e00016c73746f726167655f6275636b6574735f6e756d5f7769746e65737310010c753332000124726174696f6e616c6528011c5665633c75383e000a28203c7765696768743e002423232057656967687458604f202841202b2042202b204329602077686572653aa42d2060416020697320746865206c656e677468206f6620606173736574735f746f5f72656d6f766560cc2d20604260206973207468652076616c7565206f66206073746f726167655f6275636b6574735f6e756d5f7769746e65737360b42d20604360206973207468652073697a65206f662060726174696f6e616c656020696e206b696c6f6279746573142d2044423ac02020202d20604f2841202b20422960202d2066726f6d20746865207468652067656e65726174656420776569676874732c23203c2f7765696768743e6c64656c6574655f6368616e6e656c5f61735f6d6f64657261746f721401146163746f728d0101e8436f6e74656e744163746f723c543a3a43757261746f7247726f757049642c20543a3a43757261746f7249642c20543a3a4d656d62657249643e0001286368616e6e656c5f6964200130543a3a4368616e6e656c496400014c6368616e6e656c5f6261675f7769746e657373010601444368616e6e656c4261675769746e6573730001546e756d5f6f626a656374735f746f5f64656c65746520010c753634000124726174696f6e616c6528011c5665633c75383e000b008c7365745f6368616e6e656c5f7669736962696c6974795f61735f6d6f64657261746f721001146163746f728d0101e8436f6e74656e744163746f723c543a3a43757261746f7247726f757049642c20543a3a43757261746f7249642c20543a3a4d656d62657249643e0001286368616e6e656c5f6964200130543a3a4368616e6e656c496400012469735f68696464656e880110626f6f6c000124726174696f6e616c6528011c5665633c75383e000c28350145787472696e73696320666f722073657474696e67206368616e6e656c207669736962696c69747920737461747573202868696464656e2f76697369626c6529206279206d6f64657261746f7200203c7765696768743e002423232057656967687438604f20284129602077686572653ab42d20604160206973207468652073697a65206f662060726174696f6e616c656020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e306372656174655f766964656f0c01146163746f728d0101e8436f6e74656e744163746f723c543a3a43757261746f7247726f757049642c20543a3a43757261746f7249642c20543a3a4d656d62657249643e0001286368616e6e656c5f6964200130543a3a4368616e6e656c4964000118706172616d7331020168566964656f4372656174696f6e506172616d65746572733c543e000d2c203c7765696768743e002423232057656967687468604f202841202b2042202b2043202b204429602077686572653a11012d2060416020697320746865206e756d626572206f66206974656d7320696e2060706172616d732e6173736574732e6f626a6563745f6372656174696f6e5f6c69737460b42d206042602069732060706172616d732e73746f726167655f6275636b6574735f6e756d5f7769746e6573736035012d2060436020697320746865206c656e677468206f66206f70656e2061756374696f6e202f20656e676c6973682061756374696f6e2077686974656c697374202869662070726f766964656429f42d20604460206973207468652073697a65206f662060706172616d732e6d6574616020696e206b696c6f6279746573202869662070726f766964656429142d2044423ad02020202d20604f2841202b2042202b20432960202d2066726f6d20746865207468652067656e65726174656420776569676874732c23203c2f7765696768743e307570646174655f766964656f0c01146163746f728d0101e8436f6e74656e744163746f723c543a3a43757261746f7247726f757049642c20543a3a43757261746f7249642c20543a3a4d656d62657249643e000120766964656f5f6964200128543a3a566964656f4964000118706172616d7339020160566964656f557064617465506172616d65746572733c543e000e30203c7765696768743e002423232057656967687478604f202841202b2042202b2043202b2044202b204529602077686572653a25012d2060416020697320706172616d732e6173736574735f746f5f75706c6f61642e6f626a6563745f6372656174696f6e5f6c6973742e6c656e2829202869662070726f766964656429982d2060426020697320706172616d732e6173736574735f746f5f72656d6f76652e6c656e2829ec2d206043602069732060706172616d732e73746f726167655f6275636b6574735f6e756d5f7769746e65737360202869662070726f76696465642935012d2060446020697320746865206c656e677468206f66206f70656e2061756374696f6e202f20656e676c6973682061756374696f6e2077686974656c697374202869662070726f76696465642905012d20604560206973207468652073697a65206f662060706172616d732e6e65775f6d6574616020696e206b696c6f6279746573202869662070726f766964656429142d2044423ae02020202d20604f2841202b2042202b2043202b20442960202d2066726f6d20746865207468652067656e65726174656420776569676874732c23203c2f7765696768743e3064656c6574655f766964656f1001146163746f728d0101e8436f6e74656e744163746f723c543a3a43757261746f7247726f757049642c20543a3a43757261746f7249642c20543a3a4d656d62657249643e000120766964656f5f6964200128543a3a566964656f49640001546e756d5f6f626a656374735f746f5f64656c65746520010c75363400016c73746f726167655f6275636b6574735f6e756d5f7769746e657373e901012c4f7074696f6e3c7533323e000f24203c7765696768743e002423232057656967687448604f202841202b204229602077686572653a782d20604160206973206e756d5f6f626a656374735f746f5f64656c657465ec2d206042602069732060706172616d732e73746f726167655f6275636b6574735f6e756d5f7769746e65737360202869662070726f766964656429142d2044423ac02020202d20604f2841202b20422960202d2066726f6d20746865207468652067656e65726174656420776569676874732c23203c2f7765696768743e8064656c6574655f766964656f5f6173736574735f61735f6d6f64657261746f721401146163746f728d0101e8436f6e74656e744163746f723c543a3a43757261746f7247726f757049642c20543a3a43757261746f7249642c20543a3a4d656d62657249643e000120766964656f5f6964200128543a3a566964656f496400016c73746f726167655f6275636b6574735f6e756d5f7769746e65737310010c7533320001406173736574735f746f5f72656d6f76655101016442547265655365743c446174614f626a65637449643c543e3e000124726174696f6e616c6528011c5665633c75383e001028203c7765696768743e002423232057656967687458604f202841202b2042202b204329602077686572653aa42d2060416020697320746865206c656e677468206f6620606173736574735f746f5f72656d6f766560cc2d20604260206973207468652076616c7565206f66206073746f726167655f6275636b6574735f6e756d5f7769746e65737360b42d20604360206973207468652073697a65206f662060726174696f6e616c656020696e206b696c6f6279746573142d2044423ac02020202d20604f2841202b20422960202d2066726f6d20746865207468652067656e65726174656420776569676874732c23203c2f7765696768743e6464656c6574655f766964656f5f61735f6d6f64657261746f721401146163746f728d0101e8436f6e74656e744163746f723c543a3a43757261746f7247726f757049642c20543a3a43757261746f7249642c20543a3a4d656d62657249643e000120766964656f5f6964200128543a3a566964656f496400016c73746f726167655f6275636b6574735f6e756d5f7769746e657373e901012c4f7074696f6e3c7533323e0001546e756d5f6f626a656374735f746f5f64656c65746520010c753634000124726174696f6e616c6528011c5665633c75383e001128203c7765696768743e002423232057656967687458604f202841202b2042202b204329602077686572653ab42d20604160206973207468652076616c7565206f6620606e756d5f6f626a656374735f746f5f64656c65746560cc2d20604260206973207468652076616c7565206f66206073746f726167655f6275636b6574735f6e756d5f7769746e65737360b42d20604360206973207468652073697a65206f662060726174696f6e616c656020696e206b696c6f6279746573142d2044423ac02020202d20604f2841202b20422960202d2066726f6d20746865207468652067656e65726174656420776569676874732c23203c2f7765696768743e847365745f766964656f5f7669736962696c6974795f61735f6d6f64657261746f721001146163746f728d0101e8436f6e74656e744163746f723c543a3a43757261746f7247726f757049642c20543a3a43757261746f7249642c20543a3a4d656d62657249643e000120766964656f5f6964200128543a3a566964656f496400012469735f68696464656e880110626f6f6c000124726174696f6e616c6528011c5665633c75383e0012282d0145787472696e73696320666f7220766964656f207669736962696c69747920737461747573202868696464656e2f76697369626c65292073657474696e67206279206d6f64657261746f7200203c7765696768743e002423232057656967687438604f20284129602077686572653ab42d20604160206973207468652073697a65206f662060726174696f6e616c656020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e587570646174655f6368616e6e656c5f7061796f757473080118706172616d73590201845570646174654368616e6e656c5061796f757473506172616d65746572733c543e00014075706c6f616465725f6163636f756e74000130543a3a4163636f756e74496400132458557064617465206368616e6e656c207061796f75747300203c7765696768743e002423232057656967687438604f20283129602077686572653a142d2044423a182d204f2831292c23203c2f7765696768743e50636c61696d5f6368616e6e656c5f7265776172640c01146163746f728d0101e8436f6e74656e744163746f723c543a3a43757261746f7247726f757049642c20543a3a43757261746f7249642c20543a3a4d656d62657249643e00011470726f6f66050601505665633c50726f6f66456c656d656e743c543e3e0001106974656d1106013850756c6c5061796d656e743c543e001428a0436c61696d2072657761726420696e204a4f592066726f6d206368616e6e656c206163636f756e7400203c7765696768743e002423232057656967687438604f20284829602077686572653ac82d2060486020697320746865206c656e676874206f66207468652070726f7669646564206d65726b6c65206070726f6f6660142d2044423a242020202d204f2831292c23203c2f7765696768743e7477697468647261775f66726f6d5f6368616e6e656c5f62616c616e63650c01146163746f728d0101e8436f6e74656e744163746f723c543a3a43757261746f7247726f757049642c20543a3a43757261746f7249642c20543a3a4d656d62657249643e0001286368616e6e656c5f6964200130543a3a4368616e6e656c4964000118616d6f756e7418013042616c616e63654f663c543e001524845769746864726177204a4f592066726f6d206368616e6e656c206163636f756e7400203c7765696768743e00242323205765696768741c604f2028312960142d2044423a242020202d204f2831292c23203c2f7765696768743e7c7570646174655f6368616e6e656c5f73746174655f626c6f61745f626f6e640401706e65775f6368616e6e656c5f73746174655f626c6f61745f626f6e6418013042616c616e63654f663c543e0016289c55706461746573206368616e6e656c20737461746520626c6f617420626f6e642076616c75652e7c4f6e6c79206c6561642063616e2075706c6f616420746869732076616c756500203c7765696768743e00242323205765696768741c604f2028312960142d2044423a242020202d204f2831292c23203c2f7765696768743e747570646174655f766964656f5f73746174655f626c6f61745f626f6e640401686e65775f766964656f5f73746174655f626c6f61745f626f6e6418013042616c616e63654f663c543e001728945570646174657320766964656f20737461746520626c6f617420626f6e642076616c75652e7c4f6e6c79206c6561642063616e2075706c6f616420746869732076616c756500203c7765696768743e00242323205765696768741c604f2028312960142d2044423a242020202d204f2831292c23203c2f7765696768743e84636c61696d5f616e645f77697468647261775f6368616e6e656c5f7265776172640c01146163746f728d0101e8436f6e74656e744163746f723c543a3a43757261746f7247726f757049642c20543a3a43757261746f7249642c20543a3a4d656d62657249643e00011470726f6f66050601505665633c50726f6f66456c656d656e743c543e3e0001106974656d1106013850756c6c5061796d656e743c543e001828d4436c61696d20616e642077697468647261772072657761726420696e204a4f592066726f6d206368616e6e656c206163636f756e7400203c7765696768743e002423232057656967687438604f20284829602077686572653ac82d2060486020697320746865206c656e676874206f66207468652070726f7669646564206d65726b6c65206070726f6f6660142d2044423a242020202d204f2831292c23203c2f7765696768743e2469737375655f6e66740c01146163746f728d0101e8436f6e74656e744163746f723c543a3a43757261746f7247726f757049642c20543a3a43757261746f7249642c20543a3a4d656d62657249643e000120766964656f5f6964200128543a3a566964656f4964000118706172616d73f10101604e667449737375616e6365506172616d65746572733c543e001930244973737565204e465400203c7765696768743e00242323205765696768742c604f202857202b20422960142d2044423a242020202d204f2857291877686572653a19012020202d2057203a206d656d6265722077686974656c697374206c656e67746820696e2063617365206e667420696e697469616c207374617475732069732061756374696f6ec02020202d2042203a2073697a65206f66206d6574616461746120706172616d6574657220696e206b696c6f62797465732c23203c2f7765696768743e2c64657374726f795f6e66740801146163746f728d0101e8436f6e74656e744163746f723c543a3a43757261746f7247726f757049642c20543a3a43757261746f7249642c20543a3a4d656d62657249643e000120766964656f5f6964200128543a3a566964656f4964001a242c44657374726f79204e465400203c7765696768743e00242323205765696768741c604f2028312960142d2044423a242020202d204f2831292c23203c2f7765696768743e4873746172745f6f70656e5f61756374696f6e0c01206f776e65725f69648d0101e8436f6e74656e744163746f723c543a3a43757261746f7247726f757049642c20543a3a43757261746f7249642c20543a3a4d656d62657249643e000120766964656f5f6964200128543a3a566964656f496400013861756374696f6e5f706172616d73ed0101504f70656e41756374696f6e506172616d733c543e001b2470537461727420766964656f206e6674206f70656e2061756374696f6e203c7765696768743e002423232057656967687438604f20285729602077686572653a742d2057203a206d656d6265722077686974656c697374206c656e677468142d2044423a242020202d204f2857292c23203c2f7765696768743e5473746172745f656e676c6973685f61756374696f6e0c01206f776e65725f69648d0101e8436f6e74656e744163746f723c543a3a43757261746f7247726f757049642c20543a3a43757261746f7249642c20543a3a4d656d62657249643e000120766964656f5f6964200128543a3a566964656f496400013861756374696f6e5f706172616d73e501015c456e676c69736841756374696f6e506172616d733c543e001c247c537461727420766964656f206e667420656e676c6973682061756374696f6e203c7765696768743e002423232057656967687438604f20285729602077686572653a882d2057203a2077686974656c697374206d656d626572206c697374206c656e677468142d2044423a242020202d204f2857292c23203c2f7765696768743e5863616e63656c5f656e676c6973685f61756374696f6e0801206f776e65725f69648d0101e8436f6e74656e744163746f723c543a3a43757261746f7247726f757049642c20543a3a43757261746f7249642c20543a3a4d656d62657249643e000120766964656f5f6964200128543a3a566964656f4964001d208043616e63656c20766964656f206e667420656e676c6973682061756374696f6e203c7765696768743e00242323205765696768741c604f2028312960142d2044423a242020202d204f2831292c23203c2f7765696768743e4c63616e63656c5f6f70656e5f61756374696f6e0801206f776e65725f69648d0101e8436f6e74656e744163746f723c543a3a43757261746f7247726f757049642c20543a3a43757261746f7249642c20543a3a4d656d62657249643e000120766964656f5f6964200128543a3a566964656f4964001e207443616e63656c20766964656f206e6674206f70656e2061756374696f6e203c7765696768743e00242323205765696768741c604f2028312960142d2044423a242020202d204f2831292c23203c2f7765696768743e3063616e63656c5f6f666665720801206f776e65725f69648d0101e8436f6e74656e744163746f723c543a3a43757261746f7247726f757049642c20543a3a43757261746f7249642c20543a3a4d656d62657249643e000120766964656f5f6964200128543a3a566964656f4964001f244043616e63656c204e6674206f6666657200203c7765696768743e00242323205765696768741c604f2028312960142d2044423a242020202d204f2831292c23203c2f7765696768743e3863616e63656c5f6275795f6e6f770801206f776e65725f69648d0101e8436f6e74656e744163746f723c543a3a43757261746f7247726f757049642c20543a3a43757261746f7249642c20543a3a4d656d62657249643e000120766964656f5f6964200128543a3a566964656f49640020245443616e63656c204e66742073656c6c206f7264657200203c7765696768743e00242323205765696768741c604f2028312960142d2044423a242020202d204f283129243c2f7765696768743e507570646174655f6275795f6e6f775f70726963650c01206f776e65725f69648d0101e8436f6e74656e744163746f723c543a3a43757261746f7247726f757049642c20543a3a43757261746f7249642c20543a3a4d656d62657249643e000120766964656f5f6964200128543a3a566964656f49640001246e65775f707269636518013042616c616e63654f663c543e0021246055706461746520427579206e6f77206e667420707269636500203c7765696768743e00242323205765696768741c604f2028312960142d2044423a242020202d204f2831292c23203c2f7765696768743e546d616b655f6f70656e5f61756374696f6e5f6269640c01387061727469636970616e745f696420012c543a3a4d656d6265724964000120766964656f5f6964200128543a3a566964656f49640001286269645f616d6f756e7418013042616c616e63654f663c543e002220404d616b652061756374696f6e20626964203c7765696768743e00242323205765696768741c604f2028312960142d2044423a242020202d204f2831292c23203c2f7765696768743e606d616b655f656e676c6973685f61756374696f6e5f6269640c01387061727469636970616e745f696420012c543a3a4d656d6265724964000120766964656f5f6964200128543a3a566964656f49640001286269645f616d6f756e7418013042616c616e63654f663c543e002320604d616b6520656e676c6973682061756374696f6e20626964203c7765696768743e00242323205765696768741c604f2028312960142d2044423a242020202d204f2831292c23203c2f7765696768743e5c63616e63656c5f6f70656e5f61756374696f6e5f6269640801387061727469636970616e745f696420012c543a3a4d656d6265724964000120766964656f5f6964200128543a3a566964656f49640024205c43616e63656c206f70656e2061756374696f6e20626964203c7765696768743e00242323205765696768741c604f2028312960142d2044423a242020202d204f2831292c23203c2f7765696768743e58736574746c655f656e676c6973685f61756374696f6e040120766964656f5f6964200128543a3a566964656f496400252464436c61696d20776f6e20656e676c6973682061756374696f6e5c43616e2062652063616c6c656420627920616e796f6e65203c7765696768743e00242323205765696768741c604f2028312960142d2044423a242020202d204f2831292c23203c2f7765696768743e607069636b5f6f70656e5f61756374696f6e5f77696e6e65721001206f776e65725f69648d0101e8436f6e74656e744163746f723c543a3a43757261746f7247726f757049642c20543a3a43757261746f7249642c20543a3a4d656d62657249643e000120766964656f5f6964200128543a3a566964656f496400012477696e6e65725f696420012c543a3a4d656d6265724964000118636f6d6d697418013042616c616e63654f663c543e0026245c416363657074206f70656e2061756374696f6e206269648c53686f756c64206f6e6c792062652063616c6c65642062792061756374696f6e656572203c7765696768743e00242323205765696768741c604f2028312960142d2044423a242020202d204f2831292c23203c2f7765696768743e246f666665725f6e6674100120766964656f5f6964200128543a3a566964656f49640001206f776e65725f69648d0101e8436f6e74656e744163746f723c543a3a43757261746f7247726f757049642c20543a3a43757261746f7249642c20543a3a4d656d62657249643e000108746f20012c543a3a4d656d62657249640001147072696365290101504f7074696f6e3c42616c616e63654f663c543e3e002724244f66666572204e667400203c7765696768743e00242323205765696768741c604f2028312960142d2044423a242020202d204f2831292c23203c2f7765696768743e38736c696e675f6e66745f6261636b080120766964656f5f6964200128543a3a566964656f49640001206f776e65725f69648d0101e8436f6e74656e744163746f723c543a3a43757261746f7247726f757049642c20543a3a43757261746f7249642c20543a3a4d656d62657249643e002824c452657475726e204e6674206261636b20746f20746865206f726967696e616c20617274697374206174206e6f20636f737400203c7765696768743e00242323205765696768741c604f2028312960142d2044423a242020202d204f2831292c23203c2f7765696768743e546163636570745f696e636f6d696e675f6f66666572080120766964656f5f6964200128543a3a566964656f49640001347769746e6573735f7072696365290101a04f7074696f6e3c3c542061732062616c616e6365733a3a436f6e6669673e3a3a42616c616e63653e0029246441636365707420696e636f6d696e67204e6674206f6666657200203c7765696768743e00242323205765696768741c604f2028312960142d2044423a242020202d204f2831292c23203c2f7765696768743e2073656c6c5f6e66740c0120766964656f5f6964200128543a3a566964656f49640001206f776e65725f69648d0101e8436f6e74656e744163746f723c543a3a43757261746f7247726f757049642c20543a3a43757261746f7249642c20543a3a4d656d62657249643e000114707269636518013042616c616e63654f663c543e002a202053656c6c204e6674203c7765696768743e00242323205765696768741c604f2028312960142d2044423a242020202d204f2831292c23203c2f7765696768743e1c6275795f6e66740c0120766964656f5f6964200128543a3a566964656f49640001387061727469636970616e745f696420012c543a3a4d656d62657249640001347769746e6573735f707269636518013042616c616e63654f663c543e002b241c427579204e667400203c7765696768743e00242323205765696768741c604f2028312960142d2044423a242020202d204f2831292c23203c2f7765696768743e44746f67676c655f6e66745f6c696d69747304011c656e61626c6564880110626f6f6c002c20dc4f6e6c7920436f756e63696c2063616e20746f67676c65206e66742069737375616e6365206c696d69747320636f6e73747261696e7473203c7765696768743e00242323205765696768741c604f2028312960142d2044423a242020202d204f2831292c23203c2f7765696768743e506368616e6e656c5f6f776e65725f72656d61726b0801286368616e6e656c5f6964200130543a3a4368616e6e656c496400010c6d736728011c5665633c75383e002d28504368616e6e656c206f776e65722072656d61726b203c7765696768743e00242323205765696768741c604f2028422960142d2044423a242020202d204f2831291877686572653a8c2d204220697320746865206b696c6f62797465206c656e676874206f6620606d7367602c23203c2f7765696768743e506368616e6e656c5f6167656e745f72656d61726b0c01146163746f728d0101e8436f6e74656e744163746f723c543a3a43757261746f7247726f757049642c20543a3a43757261746f7249642c20543a3a4d656d62657249643e0001286368616e6e656c5f6964200130543a3a4368616e6e656c496400010c6d736728011c5665633c75383e002e286c4368616e6e656c20636f6c6c61626f7261746f722072656d61726b203c7765696768743e00242323205765696768741c604f2028422960142d2044423a242020202d204f2831291877686572653a8420202d2042206973207468652062797465206c656e676874206f6620606d7367602c23203c2f7765696768743e406e66745f6f776e65725f72656d61726b0c01146163746f728d0101e8436f6e74656e744163746f723c543a3a43757261746f7247726f757049642c20543a3a43757261746f7249642c20543a3a4d656d62657249643e000120766964656f5f6964200128543a3a566964656f496400010c6d736728011c5665633c75383e002f28404e4654206f776e65722072656d61726b203c7765696768743e00242323205765696768741c604f2028422960142d2044423a2020202d204f2831291877686572653a8420202d2042206973207468652062797465206c656e676874206f6620606d7367602c23203c2f7765696768743e6c696e697469616c697a655f6368616e6e656c5f7472616e736665720c01286368616e6e656c5f6964200130543a3a4368616e6e656c49640001146163746f728d0101e8436f6e74656e744163746f723c543a3a43757261746f7247726f757049642c20543a3a43757261746f7249642c20543a3a4d656d62657249643e00013c7472616e736665725f706172616d731506016c496e69745472616e73666572506172616d65746572734f663c543e003028dc53746172742061206368616e6e656c207472616e736665722077697468207370656369666965642063686172616374657269737469637300203c7765696768743e002423232057656967687438604f20284129602077686572653a25012d2060416020697320746865206e756d626572206f6620656e747269657320696e20607472616e736665725f706172616d732e6e65775f636f6c6c61626f7261746f727360206d6170142d2044423aa82020202d204f284129202d2066726f6d20746865207468652067656e65726174656420776569676874732c23203c2f7765696768743e5c63616e63656c5f6368616e6e656c5f7472616e736665720801286368616e6e656c5f6964200130543a3a4368616e6e656c49640001146163746f728d0101e8436f6e74656e744163746f723c543a3a43757261746f7247726f757049642c20543a3a43757261746f7249642c20543a3a4d656d62657249643e0031245c63616e63656c206368616e6e656c207472616e7366657200203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e5c6163636570745f6368616e6e656c5f7472616e736665720801286368616e6e656c5f6964200130543a3a4368616e6e656c4964000144636f6d6d69746d656e745f706172616d73550201785472616e73666572436f6d6d69746d656e745769746e6573734f663c543e00322c6441636365707473206368616e6e656c207472616e736665722e310160636f6d6d69746d656e745f706172616d736020697320726571756972656420746f2070726576656e74206368616e67696e6720746865207472616e7366657220636f6e646974696f6e732e00203c7765696768743e002423232057656967687438604f20284129602077686572653a2d012d2060416020697320746865206e756d626572206f6620656e747269657320696e2060636f6d6d69746d656e745f706172616d732e6e65775f636f6c6c61626f7261746f727360206d6170142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e5c7570646174655f676c6f62616c5f6e66745f6c696d69740801406e66745f6c696d69745f706572696f64710201384e66744c696d6974506572696f640001146c696d697420010c753634003320605570646174657320676c6f62616c204e4654206c696d6974203c7765696768743e00242323205765696768741c604f2028312960142d2044423a242020202d204f2831292c23203c2f7765696768743e607570646174655f6368616e6e656c5f6e66745f6c696d69741001146163746f728d0101e8436f6e74656e744163746f723c543a3a43757261746f7247726f757049642c20543a3a43757261746f7249642c20543a3a4d656d62657249643e0001406e66745f6c696d69745f706572696f64710201384e66744c696d6974506572696f640001286368616e6e656c5f6964200130543a3a4368616e6e656c49640001146c696d697420010c7536340034207055706461746573206368616e6e656c2773204e4654206c696d69742e203c7765696768743e00242323205765696768741c604f2028312960142d2044423a242020202d204f2831292c23203c2f7765696768743e4c69737375655f63726561746f725f746f6b656e0c01146163746f728d0101e8436f6e74656e744163746f723c543a3a43757261746f7247726f757049642c20543a3a43757261746f7249642c20543a3a4d656d62657249643e0001286368616e6e656c5f6964200130543a3a4368616e6e656c4964000118706172616d73b1020170546f6b656e49737375616e6365506172616d65746572734f663c543e0035284c49737375652063726561746f7220746f6b656e00203c7765696768743e002423232057656967687438604f20284129602077686572653a05012d2060416020697320746865206e756d626572206f6620656e747269657320696e2060706172616d732e696e697469616c5f616c6c6f636174696f6e60206d6170142d2044423ab02020202d20604f28412960202d2066726f6d20746865207468652067656e65726174656420776569676874732c23203c2f7765696768743e5c696e69745f63726561746f725f746f6b656e5f73616c650c01146163746f728d0101e8436f6e74656e744163746f723c543a3a43757261746f7247726f757049642c20543a3a43757261746f7249642c20543a3a4d656d62657249643e0001286368616e6e656c5f6964200130543a3a4368616e6e656c4964000118706172616d7319060150546f6b656e53616c65506172616d734f663c543e00362874496e697469616c697a652063726561746f7220746f6b656e2073616c6500203c7765696768743e002423232057656967687438604f20284129602077686572653a29012d20604160206973207468652073697a65206f662060706172616d732e6d657461646174616020696e206b696c6f627974657320286f722030206966206e6f742070726f766964656429142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e887570646174655f7570636f6d696e675f63726561746f725f746f6b656e5f73616c651001146163746f728d0101e8436f6e74656e744163746f723c543a3a43757261746f7247726f757049642c20543a3a43757261746f7249642c20543a3a4d656d62657249643e0001286368616e6e656c5f6964200130543a3a4368616e6e656c496400013c6e65775f73746172745f626c6f636be90101584f7074696f6e3c543a3a426c6f636b4e756d6265723e0001306e65775f6475726174696f6ee90101584f7074696f6e3c543a3a426c6f636b4e756d6265723e00372488557064617465207570636f6d696e672063726561746f7220746f6b656e2073616c6500203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e7463726561746f725f746f6b656e5f6973737565725f7472616e736665721001146163746f728d0101e8436f6e74656e744163746f723c543a3a43757261746f7247726f757049642c20543a3a43757261746f7249642c20543a3a4d656d62657249643e0001286368616e6e656c5f6964200130543a3a4368616e6e656c496400011c6f7574707574731d0601645472616e73666572735769746856657374696e674f663c543e0001206d6574616461746128011c5665633c75383e00382cc8506572666f726d207472616e73666572206f6620746f6b656e732061732063726561746f7220746f6b656e2069737375657200203c7765696768743e002423232057656967687448604f202841202b204229602077686572653aac2d2060416020697320746865206e756d626572206f6620656e747269657320696e20606f75747075747360c02d20604260206973207468652073697a65206f662074686520606d657461646174616020696e206b696c6f6279746573142d2044423ab02020202d20604f28412960202d2066726f6d20746865207468652067656e65726174656420776569676874732c23203c2f7765696768743e846d616b655f63726561746f725f746f6b656e5f7065726d697373696f6e6c6573730801146163746f728d0101e8436f6e74656e744163746f723c543a3a43757261746f7247726f757049642c20543a3a43757261746f7249642c20543a3a4d656d62657249643e0001286368616e6e656c5f6964200130543a3a4368616e6e656c4964003924ac4d616b65206368616e6e656c27732063726561746f7220746f6b656e207065726d697373696f6e6c65737300203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e987265647563655f63726561746f725f746f6b656e5f706174726f6e6167655f726174655f746f0c01146163746f728d0101e8436f6e74656e744163746f723c543a3a43757261746f7247726f757049642c20543a3a43757261746f7249642c20543a3a4d656d62657249643e0001286368616e6e656c5f6964200130543a3a4368616e6e656c496400012c7461726765745f72617465e1020128596561726c7952617465003a24f0526564756365206368616e6e656c27732063726561746f7220746f6b656e20706174726f6e616765207261746520746f20676976656e2076616c756500203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e90636c61696d5f63726561746f725f746f6b656e5f706174726f6e6167655f6372656469740801146163746f728d0101e8436f6e74656e744163746f723c543a3a43757261746f7247726f757049642c20543a3a43757261746f7249642c20543a3a4d656d62657249643e0001286368616e6e656c5f6964200130543a3a4368616e6e656c4964003b24b8436c61696d206368616e6e656c27732063726561746f7220746f6b656e20706174726f6e6167652063726564697400203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e4c69737375655f726576656e75655f73706c69741001146163746f728d0101e8436f6e74656e744163746f723c543a3a43757261746f7247726f757049642c20543a3a43757261746f7249642c20543a3a4d656d62657249643e0001286368616e6e656c5f6964200130543a3a4368616e6e656c49640001147374617274e90101584f7074696f6e3c543a3a426c6f636b4e756d6265723e0001206475726174696f6e100138543a3a426c6f636b4e756d626572003c2484497373756520726576656e75652073706c697420666f722061206368616e6e656c00203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e5866696e616c697a655f726576656e75655f73706c69740801146163746f728d0101e8436f6e74656e744163746f723c543a3a43757261746f7247726f757049642c20543a3a43757261746f7249642c20543a3a4d656d62657249643e0001286368616e6e656c5f6964200130543a3a4368616e6e656c4964003d247c46696e616c697a6520616e20656e64656420726576656e75652073706c697400203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e6c66696e616c697a655f63726561746f725f746f6b656e5f73616c650801146163746f728d0101e8436f6e74656e744163746f723c543a3a43757261746f7247726f757049642c20543a3a43757261746f7249642c20543a3a4d656d62657249643e0001286368616e6e656c5f6964200130543a3a4368616e6e656c4964003e249046696e616c697a6520616e20656e6465642063726561746f7220746f6b656e2073616c6500203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e54646569737375655f63726561746f725f746f6b656e0801146163746f728d0101e8436f6e74656e744163746f723c543a3a43757261746f7247726f757049642c20543a3a43757261746f7249642c20543a3a4d656d62657249643e0001286368616e6e656c5f6964200130543a3a4368616e6e656c4964003f247c44656973737565206368616e6e656c27732063726561746f7220746f6b656e00203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e0c4c446973706174636861626c652063616c6c732e005501456163682076617269616e74206f66207468697320656e756d206d61707320746f206120646973706174636861626c652066756e6374696f6e2066726f6d20746865206173736f636961746564206d6f64756c652e01060c3870616c6c65745f636f6e74656e74147479706573444368616e6e656c4261675769746e657373000008014c73746f726167655f6275636b6574735f6e756d10010c753332000160646973747269627574696f6e5f6275636b6574735f6e756d10010c7533320000050600000209060009060c3470616c6c65745f636f6d6d6f6e2c6d65726b6c655f747265654850726f6f66456c656d656e745265636f726408104861736801241053696465010d06000801106861736824011048617368000110736964650d0601105369646500000d060c3470616c6c65745f636f6d6d6f6e2c6d65726b6c655f747265651053696465000108104c6566740000001452696768740001000011060c3870616c6c65745f636f6e74656e741474797065734850756c6c5061796d656e74456c656d656e740c244368616e6e656c496401201c42616c616e6365011810486173680124000c01286368616e6e656c5f69642001244368616e6e656c496400016063756d756c61746976655f7265776172645f6561726e656418011c42616c616e6365000118726561736f6e24011048617368000015060c3870616c6c65745f636f6e74656e7414747970657358496e69745472616e73666572506172616d65746572730c204d656d626572496401203843757261746f7247726f7570496401201c42616c616e63650118000c01446e65775f636f6c6c61626f7261746f7273150201ac42547265654d61703c4d656d62657249642c204368616e6e656c4167656e745065726d697373696f6e733e000114707269636518011c42616c616e63650001246e65775f6f776e6572cd0101984368616e6e656c4f776e65723c4d656d62657249642c2043757261746f7247726f757049643e000019060c5070616c6c65745f70726f6a6563745f746f6b656e1474797065733c546f6b656e53616c65506172616d7310284a6f7942616c616e636501181c42616c616e636501182c426c6f636b4e756d62657201105456657374696e675363686564756c65506172616d7301b902001c0128756e69745f70726963651801284a6f7942616c616e636500015075707065725f626f756e645f7175616e7469747918011c42616c616e63650001247374617274735f6174e901014c4f7074696f6e3c426c6f636b4e756d6265723e0001206475726174696f6e10012c426c6f636b4e756d62657200015c76657374696e675f7363686564756c655f706172616d73c10201744f7074696f6e3c56657374696e675363686564756c65506172616d733e0001386361705f7065725f6d656d6265722901013c4f7074696f6e3c42616c616e63653e0001206d657461646174611501013c4f7074696f6e3c5665633c75383e3e00001d060c5070616c6c65745f70726f6a6563745f746f6b656e147479706573245472616e736665727308204d656d626572496401201c5061796d656e7401f1020004002106016c42547265654d61703c4d656d62657249642c205061796d656e743e00002106042042547265654d617008044b0120045601f1020004002506000000250600000229060029060000040820f102002d06083870616c6c65745f73746f726167651043616c6c04045400018c5464656c6574655f73746f726167655f6275636b657404014473746f726167655f6275636b65745f6964200148543a3a53746f726167654275636b657449640000201d0144656c6574652073746f72616765206275636b65742e204d75737420626520656d7074792e2053746f72616765206f70657261746f72206d757374206265206d697373696e672e203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e7c7570646174655f75706c6f6164696e675f626c6f636b65645f7374617475730401286e65775f737461747573880110626f6f6c000120785570646174657320676c6f62616c2075706c6f6164696e6720666c61672e203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e507570646174655f646174615f73697a655f6665650401446e65775f646174615f73697a655f66656518013042616c616e63654f663c543e000220cc557064617465732073697a652d62617365642070726963696e67206f66206e6577206f626a656374732075706c6f616465642e203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e907570646174655f73746f726167655f6275636b6574735f7065725f6261675f6c696d69740401246e65775f6c696d697410010c753332000320bc55706461746573202253746f72616765206275636b657473207065722062616722206e756d626572206c696d69742e203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743ea47570646174655f73746f726167655f6275636b6574735f766f75636865725f6d61785f6c696d6974730801406e65775f6f626a656374735f73697a6520010c7536340001486e65775f6f626a656374735f6e756d62657220010c753634000420b455706461746573202253746f72616765206275636b65747320766f7563686572206d6178206c696d697473222e203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e8c7570646174655f646174615f6f626a6563745f73746174655f626c6f61745f626f6e6404014073746174655f626c6f61745f626f6e6418013042616c616e63654f663c543e000520ac557064617465732064617461206f626a65637420737461746520626c6f617420626f6e642076616c75652e203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743efc7570646174655f6e756d6265725f6f665f73746f726167655f6275636b6574735f696e5f64796e616d69635f6261675f6372656174696f6e5f706f6c69637908014064796e616d69635f6261675f747970659902013844796e616d6963426167547970650001646e756d6265725f6f665f73746f726167655f6275636b65747310010c7533320006202d01557064617465206e756d626572206f662073746f72616765206275636b657473207573656420696e20676976656e2064796e616d696320626167206372656174696f6e20706f6c6963792e203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e407570646174655f626c61636b6c69737408013472656d6f76655f6861736865738d02014442547265655365743c5665633c75383e3e0001286164645f6861736865738d02014442547265655365743c5665633c75383e3e000728bc41646420616e642072656d6f76652068617368657320746f207468652063757272656e7420626c61636b6c6973742e203c7765696768743e002423232057656967687448604f202857202b205629602077686572653abc2d2060576020697320746865206e756d626572206f66206974656d7320696e206072656d6f76655f68617368657360b02d2060566020697320746865206e756d626572206f66206974656d7320696e20606164645f68617368657360142d2044423ab02020202d20604f28572960202d2066726f6d20746865207468652067656e65726174656420776569676874732c23203c2f7765696768743e546372656174655f73746f726167655f6275636b6574100134696e766974655f776f726b65721901014c4f7074696f6e3c576f726b657249643c543e3e000148616363657074696e675f6e65775f62616773880110626f6f6c00012873697a655f6c696d697420010c7536340001346f626a656374735f6c696d697420010c753634000820584372656174652073746f72616765206275636b65742e203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e787570646174655f73746f726167655f6275636b6574735f666f725f6261670c01186261675f69647d02012042616749643c543e00012c6164645f6275636b6574735101017042547265655365743c543a3a53746f726167654275636b657449643e00013872656d6f76655f6275636b6574735101017042547265655365743c543a3a53746f726167654275636b657449643e00092888557064617465732073746f72616765206275636b65747320666f722061206261672e203c7765696768743e002423232057656967687448604f202857202b205629602077686572653ab42d2060576020697320746865206e756d626572206f66206974656d7320696e20606164645f6275636b65747360c02d2060566020697320746865206e756d626572206f66206974656d7320696e206072656d6f76655f6275636b65747360142d2044423ac02020202d20604f2856202b20572960202d2066726f6d20746865207468652067656e65726174656420776569676874732c23203c2f7765696768743e9463616e63656c5f73746f726167655f6275636b65745f6f70657261746f725f696e7669746504014473746f726167655f6275636b65745f6964200148543a3a53746f726167654275636b65744964000a20110143616e63656c2070656e64696e672073746f72616765206275636b657420696e766974652e20416e20696e7669746174696f6e206d7573742062652070656e64696e672e203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e78696e766974655f73746f726167655f6275636b65745f6f70657261746f7208014473746f726167655f6275636b65745f6964200148543a3a53746f726167654275636b6574496400012c6f70657261746f725f696420012c576f726b657249643c543e000b20c0496e766974652073746f72616765206275636b6574206f70657261746f722e204d757374206265206d697373696e672e203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e7872656d6f76655f73746f726167655f6275636b65745f6f70657261746f7204014473746f726167655f6275636b65745f6964200148543a3a53746f726167654275636b65744964000c208052656d6f7665732073746f72616765206275636b6574206f70657261746f722e203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e707570646174655f73746f726167655f6275636b65745f73746174757308014473746f726167655f6275636b65745f6964200148543a3a53746f726167654275636b65744964000148616363657074696e675f6e65775f62616773880110626f6f6c000d20dc5570646174652077686574686572206e6577206261677320617265206265696e6720616363657074656420666f722073746f726167652e203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e847365745f73746f726167655f6275636b65745f766f75636865725f6c696d6974730c014473746f726167655f6275636b65745f6964200148543a3a53746f726167654275636b657449640001586e65775f6f626a656374735f73697a655f6c696d697420010c7536340001606e65775f6f626a656374735f6e756d6265725f6c696d697420010c753634000e208c536574732073746f72616765206275636b657420766f7563686572206c696d6974732e203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e806163636570745f73746f726167655f6275636b65745f696e7669746174696f6e0c0124776f726b65725f696420012c576f726b657249643c543e00014473746f726167655f6275636b65745f6964200148543a3a53746f726167654275636b657449640001547472616e736163746f725f6163636f756e745f6964000130543a3a4163636f756e744964000f285d01416363657074207468652073746f72616765206275636b657420696e7669746174696f6e2e20416e20696e7669746174696f6e206d757374206d617463682074686520776f726b65725f696420706172616d657465722e59014974206163636570747320616e206164646974696f6e616c206163636f756e7420494420287472616e736163746f722920666f7220616363657074696e672064617461206f626a6563747320746f2070726576656e74747472616e73616374696f6e206e6f6e636520636f6c6c6973696f6e732e203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e747365745f73746f726167655f6f70657261746f725f6d657461646174610c0124776f726b65725f696420012c576f726b657249643c543e00014473746f726167655f6275636b65745f6964200148543a3a53746f726167654275636b657449640001206d6574616461746128011c5665633c75383e001024dc536574732073746f72616765206f70657261746f72206d65746164617461202865672e3a2073746f72616765206e6f64652055524c292e203c7765696768743e002423232057656967687438604f20285729602077686572653aa02d206057602069732073697a65206f6620606d657461646174616020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e6c6163636570745f70656e64696e675f646174615f6f626a65637473100124776f726b65725f696420012c576f726b657249643c543e00014473746f726167655f6275636b65745f6964200148543a3a53746f726167654275636b657449640001186261675f69647d02012042616749643c543e000130646174615f6f626a656374735101016442547265655365743c543a3a446174614f626a65637449643e0011246501412073746f726167652070726f7669646572207369676e616c732074686174207468652064617461206f626a65637420776173207375636365737366756c6c792075706c6f6164656420746f206974732073746f726167652e203c7765696768743e00242323205765696768743c604f2028572029602077686572653ab82d2060576020697320746865206e756d626572206f66206974656d7320696e2060646174615f6f626a6563747360142d2044423ab02020202d20604f28572960202d2066726f6d20746865207468652067656e65726174656420776569676874732c23203c2f7765696768743e846372656174655f646973747269627574696f6e5f6275636b65745f66616d696c7900122090437265617465206120646973747269627574696f6e206275636b65742066616d696c792e203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e8464656c6574655f646973747269627574696f6e5f6275636b65745f66616d696c7904012466616d696c795f6964200174543a3a446973747269627574696f6e4275636b657446616d696c7949640013209444656c65746573206120646973747269627574696f6e206275636b65742066616d696c792e203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e686372656174655f646973747269627574696f6e5f6275636b657408012466616d696c795f6964200174543a3a446973747269627574696f6e4275636b657446616d696c794964000148616363657074696e675f6e65775f62616773880110626f6f6c00142074437265617465206120646973747269627574696f6e206275636b65742e203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e847570646174655f646973747269627574696f6e5f6275636b65745f7374617475730801246275636b65745f69640d02015c446973747269627574696f6e4275636b657449643c543e000148616363657074696e675f6e65775f62616773880110626f6f6c001520d855706461746573206120646973747269627574696f6e206275636b6574202761636365707473206e657720626167732720666c61672e203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e6864656c6574655f646973747269627574696f6e5f6275636b65740401246275636b65745f69640d02015c446973747269627574696f6e4275636b657449643c543e001620a844656c65746520646973747269627574696f6e206275636b65742e204d75737420626520656d7074792e203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e8c7570646174655f646973747269627574696f6e5f6275636b6574735f666f725f6261671001186261675f69647d02012042616749643c543e00012466616d696c795f6964200174543a3a446973747269627574696f6e4275636b657446616d696c79496400014c6164645f6275636b6574735f696e64696365735101019042547265655365743c543a3a446973747269627574696f6e4275636b6574496e6465783e00015872656d6f76655f6275636b6574735f696e64696365735101019042547265655365743c543a3a446973747269627574696f6e4275636b6574496e6465783e0017289c5570646174657320646973747269627574696f6e206275636b65747320666f722061206261672e203c7765696768743e002423232057656967687448604f202857202b205629602077686572653ad42d2060576020697320746865206e756d626572206f66206974656d7320696e20606164645f6275636b6574735f696e646963657360e02d2060566020697320746865206e756d626572206f66206974656d7320696e206072656d6f76655f6275636b6574735f696e646963657360142d2044423ac02020202d20604f2856202b20572960202d2066726f6d20746865207468652067656e65726174656420776569676874732c23203c2f7765696768743ea47570646174655f646973747269627574696f6e5f6275636b6574735f7065725f6261675f6c696d69740401246e65775f6c696d697410010c753332001820d0557064617465732022446973747269627574696f6e206275636b657473207065722062616722206e756d626572206c696d69742e203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e7c7570646174655f646973747269627574696f6e5f6275636b65745f6d6f64650801246275636b65745f69640d02015c446973747269627574696f6e4275636b657449643c543e000130646973747269627574696e67880110626f6f6c001920d8557064617465732027646973747269627574696e672720666c616720666f722074686520646973747269627574696e6720666c61672e203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743eb87570646174655f66616d696c6965735f696e5f64796e616d69635f6261675f6372656174696f6e5f706f6c69637908014064796e616d69635f6261675f747970659902013844796e616d69634261675479706500012066616d696c6965739d0201b042547265654d61703c543a3a446973747269627574696f6e4275636b657446616d696c7949642c207533323e001a283d01557064617465206e756d626572206f66206469737472696275746564206275636b657473207573656420696e20676976656e2064796e616d696320626167206372656174696f6e20706f6c6963792e9c5570646174657320646973747269627574696f6e206275636b65747320666f722061206261672e203c7765696768743e002423232057656967687438604f20285729602077686572653aa82d2060576020697320746865206e756d626572206f66206974656d7320696e206066616d696c69657360142d2044423ab02020202d20604f28572960202d2066726f6d20746865207468652067656e65726174656420776569676874732c23203c2f7765696768743e8c696e766974655f646973747269627574696f6e5f6275636b65745f6f70657261746f720801246275636b65745f69640d02015c446973747269627574696f6e4275636b657449643c543e0001486f70657261746f725f776f726b65725f696420012c576f726b657249643c543e001b2090496e7669746520616e206f70657261746f722e204d757374206265206d697373696e672e203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743ea863616e63656c5f646973747269627574696f6e5f6275636b65745f6f70657261746f725f696e766974650801246275636b65745f69640d02015c446973747269627574696f6e4275636b657449643c543e0001486f70657261746f725f776f726b65725f696420012c576f726b657249643c543e001c209c43616e63656c2070656e64696e6720696e766974652e204d7573742062652070656e64696e672e203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e8c72656d6f76655f646973747269627574696f6e5f6275636b65745f6f70657261746f720801246275636b65745f69640d02015c446973747269627574696f6e4275636b657449643c543e0001486f70657261746f725f776f726b65725f696420012c576f726b657249643c543e001d209452656d6f76657320646973747269627574696f6e206275636b6574206f70657261746f722e203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e9c7365745f646973747269627574696f6e5f6275636b65745f66616d696c795f6d6574616461746108012466616d696c795f6964200174543a3a446973747269627574696f6e4275636b657446616d696c7949640001206d6574616461746128011c5665633c75383e001e24a053657420646973747269627574696f6e206275636b65742066616d696c79206d657461646174612e203c7765696768743e002423232057656967687438604f20285729602077686572653aa02d206057602069732073697a65206f6620606d657461646174616020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e946163636570745f646973747269627574696f6e5f6275636b65745f696e7669746174696f6e080124776f726b65725f696420012c576f726b657249643c543e0001246275636b65745f69640d02015c446973747269627574696f6e4275636b657449643c543e001f20584163636570742070656e64696e6720696e766974652e203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e887365745f646973747269627574696f6e5f6f70657261746f725f6d657461646174610c0124776f726b65725f696420012c576f726b657249643c543e0001246275636b65745f69640d02015c446973747269627574696f6e4275636b657449643c543e0001206d6574616461746128011c5665633c75383e002024fc53657420646973747269627574696f6e206f70657261746f72206d6574616461746120666f722074686520646973747269627574696f6e206275636b65742e203c7765696768743e002423232057656967687438604f20285729602077686572653aa02d206057602069732073697a65206f6620606d657461646174616020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e5c73746f726167655f6f70657261746f725f72656d61726b0c0124776f726b65725f696420012c576f726b657249643c543e00014473746f726167655f6275636b65745f6964200148543a3a53746f726167654275636b6574496400010c6d736728011c5665633c75383e0021289c4465706f73697420612053746f726167654f70657261746f7252656d61726b6564206576656e7474636f6e7461696e696e6720612067656e65726963206d6573736167652e203c7765696768743e002423232057656967687438604f20285729602077686572653a9c2d206057602069732073697a65206f6620606d6573736167656020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e70646973747269627574696f6e5f6f70657261746f725f72656d61726b0c0124776f726b65725f696420012c576f726b657249643c543e000158646973747269627574696f6e5f6275636b65745f69640d02015c446973747269627574696f6e4275636b657449643c543e00010c6d736728011c5665633c75383e0022249c43726561746520612064796e616d6963206261672e20446576656c6f706d656e74206d6f64652e203c7765696768743e002423232057656967687438604f20285729602077686572653a9c2d206057602069732073697a65206f6620606d6573736167656020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e0c4c446973706174636861626c652063616c6c732e005501456163682076617269616e74206f66207468697320656e756d206d61707320746f206120646973706174636861626c652066756e6374696f6e2066726f6d20746865206173736f636961746564206d6f64756c652e3106085070616c6c65745f70726f6a6563745f746f6b656e1043616c6c04045400011c207472616e736665721001347372635f6d656d6265725f696420012c543a3a4d656d6265724964000120746f6b656e5f6964200128543a3a546f6b656e496400011c6f757470757473350601385472616e73666572734f663c543e0001206d6574616461746128011c5665633c75383e0000685501416c6c6f7720746f207472616e736665722066726f6d20607372635f6d656d6265725f696460206163636f756e7420746f2074686520766172696f757320606f757470757473602062656e6566696369617269657364696e207468652073706563696669656420616d6f756e74732e0038507265636f6e646974696f6e733ae82d206f726967696e207369676e6572206d75737420626520607372635f6d656d6265725f69646020636f6e74726f6c6c6572206163636f756e74842d20746f6b656e2062792060746f6b656e5f696460206d75737420657869737473d82d206163636f756e74206f6620607372635f6d656d6265725f696460206d75737420657869737420666f722060746f6b656e5f69646041012d2073656e646572206d757374206861766520656e6f756768204a4f597320746f20636f7665722074686520746f74616c20626c6f617420626f6e6420726571756972656420696e2063617365206f6678202064657374696e6174696f6e287329206e6f74206578697374696e672e29012d20736f75726365206163636f756e74206d757374206861766520656e6f75676820746f6b656e2066756e647320746f20636f76657220616c6c20746865207472616e7366657228732941012d20606f75747075747360206d7573742064657369676e617465206578697374696e672064657374696e6174696f6e28732920666f7220225065726d697373696f6e656422207472616e73666572732e3c506f7374636f6e646974696f6e733ae82d20736f75726365206163636f756e74277320746f6b656e7320616d6f756e74206973206465637265617365642062792060616d6f756e74602e49012d20746f74616c20626c6f617420626f6e64207472616e736665727265642066726f6d2073656e6465722773204a4f592062616c616e636520696e746f20746865207472656173757279206163636f756e74cc2020696e20636173652064657374696e6174696f6e2873292068617665206265656e20616464656420746f2073746f72616765ec2d20606f7574707574732e62656e65666963696172796020746f6b656e7320616d6f756e7420696e637265617365642062792060616d6f756e746000203c7765696768743e002423232057656967687448604f202854202b204d29602077686572653a802d2060546020697320746865206c656e677468206f6620606f75747075747360b02d20604d60206973207468652073697a65206f6620606d657461646174616020696e206b696c6f6279746573142d2044423aac20202d20604f28542960202d2066726f6d20746865207468652067656e65726174656420776569676874732c23203c2f7765696768743e106275726e0c0120746f6b656e5f6964200128543a3a546f6b656e49640001246d656d6265725f696420012c543a3a4d656d6265724964000118616d6f756e74180144546f6b656e42616c616e63654f663c543e000178884275726e20746f6b656e732066726f6d20737065636966696564206163636f756e740038507265636f6e646974696f6e733a442d2060616d6f756e7460206973203e2030f42d206f726967696e207369676e6572206973206120636f6e74726f6c6c6572206163636f756e74206f6620606d656d6265725f696460206d656d626572702d20746f6b656e2062792060746f6b656e5f69646020657869737473c02d20616e206163636f756e742065786973747320666f722060746f6b656e5f696460207820606d656d6265725f696460a02d206163636f756e74277320746f6b656e7320616d6f756e74206973203e3d2060616d6f756e746005012d20746f6b656e20737570706c792063616e206265206d6f64696669656420287468657265206973206e6f2061637469766520726576656e75652073706c697429003c506f7374636f6e646974696f6e733a4d012d207374617274696e6720776974682060756e70726f6365737365646020626565696e6720657175616c20746f2060616d6f756e74602c206163636f756e7427732076657374696e67207363686564756c6573602020617265206974657261746564206f76657220616e643a5d0120202d2075706461746564207769746820606275726e65645f616d6f756e74202b3d207570726f636573736564602069662076657374696e67207363686564756c65277320756e76657374656420616d6f756e74206973742020202067726561746572207468616e20607570726f636573736564605420202d2072656d6f766564206f746865727769736545012020286166746572206561636820697465726174696f6e2060756e70726f6365737365646020697320726564756365642062792074686520616d6f756e74206f6620756e76657374656420746f6b656e737c20206275726e656420647572696e67207468617420697465726174696f6e2949012d20696620746865206163636f756e742068617320616e79206073706c69745f7374616b696e675f737461747573602c20746865206073706c69745f7374616b696e675f7374617475732e616d6f756e7460e820206973207265647563656420627920606d696e28616d6f756e742c2073706c69745f7374616b696e675f7374617475732e616d6f756e742960a42d20606163636f756e742e616d6f756e746020697320726564756365642062792060616d6f756e7460942d20746f6b656e20737570706c7920697320726564756365642062792060616d6f756e746000203c7765696768743e00242323205765696768741c604f2028312960142d2044423ad820202d20604f28312960202d20646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e30647573745f6163636f756e74080120746f6b656e5f6964200128543a3a546f6b656e49640001246d656d6265725f696420012c543a3a4d656d62657249640002508c416c6c6f7720616e79207573657220746f2072656d6f766520616e206163636f756e740038507265636f6e646974696f6e733a802d20746f6b656e2062792060746f6b656e5f696460206d757374206578697374d02d20616e206163636f756e74206d75737420657869737420666f722060746f6b656e5f696460207820606d656d6265725f69646015012d206966205065726d697373696f6e656420746f6b656e3a20606f726967696e60207369676e6572206d75737420626520606d656d6265725f696460206d656d6265722773502020636f6e74726f6c6c6572206163636f756e74ec2d2060746f6b656e5f696460207820606d656d6265725f696460206163636f756e74206d75737420626520616e20656d707479206163636f756e7478202028606163636f756e745f646174612e616d6f756e7460203d3d2030293c506f7374636f6e646974696f6e733a1d012d204163636f756e7420696e666f726d6174696f6e20666f722060746f6b656e5f696460207820606d656d6265725f6964602072656d6f7665642066726f6d2073746f72616765dc2d20626c6f617420626f6e6420726566756e64656420746f20606d656d6265725f69646020636f6e74726f6c6c6572206163636f756e74cc2020286f722060626c6f61745f626f6e642e72657061796d656e745f726573747269637465645f746f60206163636f756e742900203c7765696768743e001c604f2028312960142d2044423ad820202d20604f28312960202d20646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e386a6f696e5f77686974656c6973740c01246d656d6265725f696420012c543a3a4d656d6265724964000120746f6b656e5f6964200128543a3a546f6b656e496400011470726f6f66490601404d65726b6c6550726f6f664f663c543e00034c11014a6f696e2077686974656c69737420666f72207065726d697373696f6e656420636173653a207573656420746f20616464206163636f756e747320666f7220746f6b656e38507265636f6e646974696f6e733a682d2027746f6b656e5f696427206d7573742062652076616c6964f42d20606f726967696e60207369676e6572206d757374206265206120636f6e74726f6c6c6572206163636f756e74206f6620606d656d6265725f696460c02d206163636f756e7420666f7220606d656d6265725f696460206d757374206e6f7420616c726561647920657869737409012d207472616e7366657220706f6c69637920697320605065726d697373696f6e65646020616e64206d65726b6c652070726f6f66206d7573742062652076616c6964003c506f7374636f6e646974696f6e733af42d206163636f756e7420666f7220606d656d6265725f696460206372656174656420616e6420616464656420746f2070616c6c65742073746f72616765e82d2060626c6f61745f626f6e6460207472616e736665727265642066726f6d2073656e64657220746f207472656173757279206163636f756e7400203c7765696768743e002423232057656967687438604f20284829602077686572653a802d2060486020697320746865206c656e677468206f66206070726f6f662e3060142d2044423ad820202d20604f28312960202d20646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e5c70757263686173655f746f6b656e735f6f6e5f73616c650c0120746f6b656e5f6964200128543a3a546f6b656e49640001246d656d6265725f696420012c543a3a4d656d6265724964000118616d6f756e74180144546f6b656e42616c616e63654f663c543e0004ec94507572636861736520746f6b656e73206f6e2061637469766520746f6b656e2073616c652e0038507265636f6e646974696f6e733a802d20746f6b656e2062792060746f6b656e5f696460206d757374206578697374d02d20746f6b656e2062792060746f6b656e5f696460206d75737420626520696e204f66666572696e6753746174653a3a53616c65ec2d2060616d6f756e74602063616e6e6f7420657863656564206e756d626572206f6620746f6b656e732072656d61696e696e67206f6e2073616c6509012d20606f726967696e60207369676e6572206d75737420626520636f6e74726f6c6c6572206163636f756e74206f6620606d656d6265725f696460206d656d626572a42d2073656e646572277320617661696c61626c65204a4f592062616c616e6365206d7573742062653aec20202d203e3d20606a6f795f6578697374656e7469616c5f6465706f736974202b20616d6f756e74202a2073616c652e756e69745f70726963656080202020206966204163636f756e744461746120616c7265616479206578697374210120202d203e3d20606a6f795f6578697374656e7469616c5f6465706f736974202b20616d6f756e74202a2073616c652e756e69745f7072696365202b20626c6f61745f626f6e646084202020206966204163636f756e744461746120646f6573206e6f7420657869737435012d206c657420606665655f616d6f756e7460206265206073616c655f706c6174666f726d5f6665652e6d756c5f666c6f6f7228616d6f756e74202a2073616c652e756e69745f7072696365296059012d206966206073616c652e6561726e696e67735f64657374696e6174696f6e2e69735f736f6d6528296020616e64206073616c652e6561726e696e67735f64657374696e6174696f6e60206163636f756e74206861733c20207a65726f2062616c616e63653a390120202d2074686520616d6f756e7420746f206265207472616e736665727265642066726f6d206073656e6465726020746f206073616c652e6561726e696e67735f64657374696e6174696f6e602c4d0120202020776869636820697320657175616c20746f2060616d6f756e74202a2073616c652e756e69745f7072696365202d206665655f616d6f756e74602c206d7573742062652067726561746572207468616e7420202020606a6f795f6578697374656e7469616c5f6465706f7369746031012d20746f74616c206e756d626572206f6620746f6b656e7320616c72656164792070757263686173656420627920746865206d656d626572206f6e207468652063757272656e742073616c65f82020504c55532060616d6f756e7460206d757374206e6f74206578636565642073616c6527732070757263686173652063617020706572206d656d626572602d206966205065726d697373696f6e656420746f6b656e3a010120202d204163636f756e74496e666f4279546f6b656e416e644d656d62657228746f6b656e5f69642c20266d656d6265725f696429206d7573742065786973749c2d206966206073616c652e76657374696e675f7363686564756c652e69735f736f6d652829603ae020202d206e756d626572206f662073656e646572206163636f756e742773206f6e676f696e672076657374696e67207363686564756c6573cc202020206d757374206265203c204d617856657374696e675363686564756c65735065724163636f756e74506572546f6b656e003c506f7374636f6e646974696f6e733aac2d206966206073616c652e6561726e696e67735f64657374696e6174696f6e2e69735f736f6d652829603a4d0120202d2060616d6f756e74202a2073616c652e756e69745f7072696365202d206665655f616d6f756e7460204a4f5920746f6b656e7320617265207472616e7366657265642066726f6d206073656e646572608820202020746f206073616c652e6561726e696e67735f64657374696e6174696f6e60d420202d20606665655f616d6f756e7460204a4f5920697320736c61736865642066726f6d206073656e646572602062616c616e6365ac2d206966206073616c652e6561726e696e67735f64657374696e6174696f6e2e69735f6e6f6e652829603a0d0120202d2060616d6f756e74202a2073616c652e756e69745f707269636560204a4f5920697320736c61736865642066726f6d206073656e646572602062616c616e636549012d206966206e657720746f6b656e206163636f756e7420637265617465643a2060626c6f61745f626f6e6460207472616e736665727265642066726f6d206073656e6465726020746f2074726561737572799c2d206966206073616c652e76657374696e675f7363686564756c652e69735f736f6d652829603a0d0120202d20696620627579657220686173206e6f206076657374696e675f7363686564756c65602072656c6174656420746f207468652063757272656e742073616c653a5d01202020202d2061206e65772076657374696e67207363686564756c6520286073616c652e6765745f76657374696e675f7363686564756c652870757263686173655f616d6f756e7429602920697320616464656420746f80202020202020627579657227732060766573696e675f7363686564756c6573605501202020202d20736f6d652066696e69736865642076657374696e67207363686564756c652069732072656d6f7665642066726f6d2062757965722773206163636f756e745f6461746120696e20636173652074686559012020202020206e756d626572206f6620627579657227732076657374696e675f7363686564756c657320776173203d3d204d617856657374696e675363686564756c65735065724163636f756e74506572546f6b656e290120202d20696620627579657220616c7265616479206861732061206076657374696e675f7363686564756c65602072656c6174656420746f207468652063757272656e742073616c653afc202020202d2063757272656e742076657374696e67207363686564756c6527732060636c6966665f616d6f756e746020697320696e63726561736564206279fc2020202020206073616c652e6765745f76657374696e675f7363686564756c652870757263686173655f616d6f756e74292e636c6966665f616d6f756e74602901202020202d2063757272656e742076657374696e67207363686564756c6527732060706f73745f636c6966665f746f74616c5f616d6f756e746020697320696e6372656173656420627929012020202020206073616c652e6765745f76657374696e675f7363686564756c652870757263686173655f616d6f756e74292e706f73745f636c6966665f746f74616c5f616d6f756e74609c2d206966206073616c652e76657374696e675f7363686564756c652e69735f6e6f6e652829603ad820202d2062757965722773206163636f756e7420746f6b656e20616d6f756e7420696e637265617365642062792060616d6f756e746055012d2069662060746f6b656e5f646174612e73616c652e7175616e746974795f6c656674202d20616d6f756e74203d3d20306020616e64206073616c652e6175746f5f66696e616c697a6560206973206074727565604101202060746f6b656e5f646174612e73616c65602069732073657420746f204e6f6e652c206f74686572776973652060746f6b656e5f646174612e73616c652e7175616e746974795f6c65667460206973350120206465637265617365642062792060616d6f756e746020616e642060746f6b656e5f646174612e73616c652e66756e64735f636f6c6c65637465646020696e20696e6372656173656420627970202060616d6f756e74202a2073616c652e756e69745f70726963656000203c7765696768743e00242323205765696768741c604f2028312960142d2044423ad820202d20604f28312960202d20646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e5070617274696369706174655f696e5f73706c69740c0120746f6b656e5f6964200128543a3a546f6b656e49640001246d656d6265725f696420012c543a3a4d656d6265724964000118616d6f756e74180144546f6b656e42616c616e63654f663c543e000568f0506172746963697061746520696e20746865202a6c61746573742a20746f6b656e20726576656e75652073706c697420286966206f6e676f696e672938507265636f6e646974696f6e733a8c2d2060746f6b656e60206d75737420657869737420666f722060746f6b656e5f696460fc2d20606f726967696e60207369676e6572206d75737420626520606d656d6265725f696460206d656d62657220636f6e74726f6c6c6572206163636f756e74582d2060616d6f756e7460206d757374206265203e2030cc2d20606163636f756e7460206d7573742065786973742020666f72206028746f6b656e5f69642c206d656d6265725f69642960fc2d2060746f6b656e2e73706c69745f73746174757360206d7573742062652061637469766520414e44205448454e2063757272656e745f626c6f636b20696eb82020205b73706c69742e73746172742c2073706c69742e7374617274202b2073706c69745f6475726174696f6e2981012d20606163636f756e742e7374616b696e675f7374617475732e69735f6e6f6e65282960204f5220606163636f756e742e7374616b696e675f7374617475732e73706c69745f6964602072656665727320746f206120706173742073706c6974782d20606163636f756e742e616d6f756e7460203e3d2060616d6f756e74602d012d206c657420606469766964656e64203d2073706c69745f616c6c6f636174696f6e202a206163636f756e742e7374616b65645f616d6f756e74202f20746f6b656e2e737570706c79606015012020207468656e2060747265617375727960206d7573742062652061626c6520746f207472616e7366657220606469766964656e646020616d6f756e74206f66204a4f592eec202020285468697320636f6e646974696f6e20746563686e6963616c6c792c2073686f756c6420616c7761797320626520736174697366696564290038506f7374636f6e646974696f6e732d012d20606469766964656e646020616d6f756e74206f66204a4f5973207472616e736665727265642066726f6d206074726561737572795f6163636f756e746020746f206073656e6465726045012d2060746f6b656e6020726576656e75652073706c6974206469766964656e647320706179656420747261636b696e67207661726961626c6520696e6372656173656420627920606469766964656e646045012d20606163636f756e742e7374616b696e675f737461747573602073657420746f20536f6d65282e2e2920776974682060616d6f756e746020616e642060746f6b656e2e6c61746573745f73706c69746000203c7765696768743e00242323205765696768741c604f2028312960142d2044423ad820202d20604f28312960202d20646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e48657869745f726576656e75655f73706c6974080120746f6b656e5f6964200128543a3a546f6b656e49640001246d656d6265725f696420012c543a3a4d656d626572496400064cb453706c69742d70617274696369706174696e672075736572206c656176657320726576656e75652073706c697434507265636f6e646974696f6e738c2d2060746f6b656e60206d75737420657869737420666f722060746f6b656e5f696460fc2d20606f726967696e60207369676e6572206d75737420626520606d656d6265725f696460206d656d62657220636f6e74726f6c6c6572206163636f756e74c82d20606163636f756e7460206d75737420657869737420666f72206028746f6b656e5f69642c206d656d6265725f69642960902d20606163636f756e742e7374616b696e67207374617475732e69735f736f6d6528292729012d2069662060286163636f756e742e7374616b696e675f7374617475732e73706c69745f6964203d3d20746f6b656e2e6e6578745f726576656e75655f73706c69745f6964202d2031604101202020414e442060746f6b656e2e726576656e75655f73706c6974602069732061637469766529205448454e2073706c6974207374616b696e6720706572696f6420206d75737420626520656e6465640038506f7374636f6e646974696f6e73982d20606163636f756e742e7374616b696e675f737461747573602073657420746f204e6f6e6500203c7765696768743e00242323205765696768741c604f2028312960142d2044423ad820202d20604f28312960202d20646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e0c4c446973706174636861626c652063616c6c732e005501456163682076617269616e74206f66207468697320656e756d206d61707320746f206120646973706174636861626c652066756e6374696f6e2066726f6d20746865206173736f636961746564206d6f64756c652e35060c5070616c6c65745f70726f6a6563745f746f6b656e147479706573245472616e736665727308204d656d626572496401201c5061796d656e740139060004003d06016c42547265654d61703c4d656d62657249642c205061796d656e743e000039060c5070616c6c65745f70726f6a6563745f746f6b656e1474797065731c5061796d656e74041c42616c616e6365011800040118616d6f756e7418011c42616c616e636500003d06042042547265654d617008044b01200456013906000400410600000041060000024506004506000004082039060049060c5070616c6c65745f70726f6a6563745f746f6b656e1474797065732c4d65726b6c6550726f6f660418486173686572012d040004004d0601845665633c284861736865723a3a4f75747075742c204d65726b6c6553696465293e00004d060000025106005106000004082455060055060c5070616c6c65745f70726f6a6563745f746f6b656e147479706573284d65726b6c6553696465000108145269676874000000104c656674000100005906085c70616c6c65745f70726f706f73616c735f656e67696e651043616c6c04045400011010766f7465100120766f7465725f696420012c4d656d62657249643c543e00012c70726f706f73616c5f6964100134543a3a50726f706f73616c4964000110766f746525030120566f74654b696e64000124726174696f6e616c6528011c5665633c75383e000028d4566f74652065787472696e7369632e20436f6e646974696f6e733a20206f726967696e206d75737420616c6c6f7720766f7465732e00203c7765696768743e002423232057656967687438604f20285229602077686572653ab42d20605260206973207468652073697a65206f662060726174696f6e616c656020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f722070617261656d746572732c23203c2f7765696768743e3c63616e63656c5f70726f706f73616c08012c70726f706f7365725f696420012c4d656d62657249643c543e00012c70726f706f73616c5f6964100134543a3a50726f706f73616c4964000128ac43616e63656c20612070726f706f73616c20627920697473206f726967696e616c2070726f706f7365722e00203c7765696768743e002423232057656967687438604f20284c29602077686572653ac02d20604c602069732074686520746f74616c206e756d626572206f66206c6f636b7320696e206042616c616e63657360142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e347665746f5f70726f706f73616c04012c70726f706f73616c5f6964100134543a3a50726f706f73616c4964000224785665746f20612070726f706f73616c2e204d75737420626520726f6f742e00203c7765696768743e0024232320576569676874c4604f202831296020646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d6574657273142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e3c70726f706f7365725f72656d61726b0c012c70726f706f73616c5f6964100134543a3a50726f706f73616c496400012c70726f706f7365725f696420012c4d656d62657249643c543e00010c6d736728011c5665633c75383e0003243c50726f706f7365722052656d61726b00203c7765696768743e0024232320576569676874c4604f202831296020646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d6574657273142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e0c4c446973706174636861626c652063616c6c732e005501456163682076617269616e74206f66207468697320656e756d206d61707320746f206120646973706174636861626c652066756e6374696f6e2066726f6d20746865206173736f636961746564206d6f64756c652e5d06086c70616c6c65745f70726f706f73616c735f64697363757373696f6e1043616c6c040454000110206164645f706f7374100138706f73745f617574686f725f696420012c4d656d62657249643c543e0001247468726561645f696420012c543a3a54687265616449640001107465787428011c5665633c75383e0001206564697461626c65880110626f6f6c0000289441646473206120706f7374207769746820617574686f72206f726967696e20636865636b2e00203c7765696768743e002423232057656967687438604f20284c29602077686572653aa02d20604c60206973207468652073697a65206f662060746578746020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e2c64656c6574655f706f737410012864656c657465725f696420012c4d656d62657249643c543e00011c706f73745f6964200124543a3a506f737449640001247468726561645f696420012c543a3a546872656164496400011068696465880110626f6f6c000128510152656d6f766520706f73742066726f6d2073746f726167652c207769746820746865206c61737420706172616d6574657220696e6469636174696e67207768657468657220746f20616c736f206869646520697428696e207468652055492e00203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e2c7570646174655f706f73740c01247468726561645f696420012c543a3a546872656164496400011c706f73745f6964200124543a3a506f737449640001107465787428011c5665633c75383e0002282d0155706461746573206120706f7374207769746820617574686f72206f726967696e20636865636b2e2055706461746520617474656d707473206e756d626572206973206c696d697465642e00203c7765696768743e002423232057656967687438604f20284c29602077686572653aa02d20604c60206973207468652073697a65206f662060746578746020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e486368616e67655f7468726561645f6d6f64650c01246d656d6265725f696420012c4d656d62657249643c543e0001247468726561645f696420012c543a3a54687265616449640001106d6f64652d0301d85468726561644d6f64653c42547265655365743c3c54206173204d656d6265727368697054797065733e3a3a4d656d62657249643e3e0003287c4368616e67657320746872656164207065726d697373696f6e206d6f64652e00203c7765696768743e0024232320576569676874dc604f2028572960206966205468726561644d6f646520697320636c6f7365206f72204f283129206f74686572776973652077686572653ad02d2060576020697320746865206e756d626572206f662077686974656c6973746564206d656d6265727320696e20606d6f646560142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e0c4c446973706174636861626c652063616c6c732e005501456163682076617269616e74206f66207468697320656e756d206d61707320746f206120646973706174636861626c652066756e6374696f6e2066726f6d20746865206173736f636961746564206d6f64756c652e6106085870616c6c65745f70726f706f73616c735f636f6465781043616c6c0404540001043c6372656174655f70726f706f73616c08016c67656e6572616c5f70726f706f73616c5f706172616d65746572733503017047656e6572616c50726f706f73616c506172616d65746572733c543e00014070726f706f73616c5f64657461696c733903015050726f706f73616c44657461696c734f663c543e000034450143726561746520612070726f706f73616c2c207468652074797065206f662070726f706f73616c20646570656e6473206f6e20746865206070726f706f73616c5f64657461696c73602076617269616e7400203c7765696768743e002423232057656967687458604f202854202b2044202b204929602077686572653a902d2060546020697320746865207469746c652073697a6520696e206b696c6f6279746573a82d2060446020697320746865206465736372697074696f6e2073697a6520696e206b696c6f6279746573e02d20604960206973207468652073697a65206f6620616e7920706172616d6574657220696e206070726f706f73616c5f64657461696c736084202028696e206b696c6f62797465732069662069742773206d6574616461746129142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e0c4c446973706174636861626c652063616c6c732e005501456163682076617269616e74206f66207468697320656e756d206d61707320746f206120646973706174636861626c652066756e6374696f6e2066726f6d20746865206173736f636961746564206d6f64756c652e6506085070616c6c65745f776f726b696e675f67726f75701043616c6c08045400044900014c2c6164645f6f70656e696e6710012c6465736372697074696f6e28011c5665633c75383e0001306f70656e696e675f747970656503012c4f70656e696e67547970650001307374616b655f706f6c696379490301a45374616b65506f6c6963793c543a3a426c6f636b4e756d6265722c2042616c616e63654f663c543e3e0001407265776172645f7065725f626c6f636b290101504f7074696f6e3c42616c616e63654f663c543e3e00002cc44164642061206a6f62206f70656e696e6720666f72206120726567756c617220776f726b65722f6c65616420726f6c652e490152657175697265207369676e6564206c6561646572206f726967696e206f722074686520726f6f742028746f20616464206f70656e696e6720666f7220746865206c656164657220706f736974696f6e292e002823203c7765696768743e002423232057656967687438604f20284429602077686572653abc2d20604460206973207468652073697a65206f6620606465736372697074696f6e6020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e406170706c795f6f6e5f6f70656e696e67040104706903016c4170706c794f6e4f70656e696e67506172616d65746572733c543e000128684170706c79206f6e206120776f726b6572206f70656e696e672e002823203c7765696768743e002423232057656967687438604f20284429602077686572653ac42d20604460206973207468652073697a65206f662060702e6465736372697074696f6e6020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e3066696c6c5f6f70656e696e670801286f70656e696e675f69642001244f70656e696e6749640001687375636365737366756c5f6170706c69636174696f6e5f6964735101015c42547265655365743c4170706c69636174696f6e49643e000228ac46696c6c206f70656e696e6720666f722074686520726567756c61722f6c65616420706f736974696f6e2e4d0152657175697265207369676e6564206c6561646572206f726967696e206f722074686520726f6f742028746f2066696c6c206f70656e696e6720666f7220746865206c656164657220706f736974696f6e292e2823203c7765696768743e002423232057656967687438604f20284129602077686572653acc2d2060416020697320746865206c656e677468206f6620607375636365737366756c5f6170706c69636174696f6e5f69647360142d2044423a242020202d204f2841292c23203c2f7765696768743e4c7570646174655f726f6c655f6163636f756e74080124776f726b65725f696420012c576f726b657249643c543e00014c6e65775f726f6c655f6163636f756e745f6964000130543a3a4163636f756e744964000324150155706461746520746865206173736f63696174656420726f6c65206163636f756e74206f66207468652061637469766520726567756c617220776f726b65722f6c6561642e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e286c656176655f726f6c65080124776f726b65725f696420012c576f726b657249643c543e000124726174696f6e616c651501013c4f7074696f6e3c5665633c75383e3e000424904c656176652074686520726f6c65206279207468652061637469766520776f726b65722e2823203c7765696768743e002423232057656967687438604f20285229602077686572653ab42d20605260206973207468652073697a65206f662060726174696f6e616c656020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e387465726d696e6174655f726f6c650c0124776f726b65725f696420012c576f726b657249643c543e00011c70656e616c7479290101504f7074696f6e3c42616c616e63654f663c543e3e000124726174696f6e616c651501013c4f7074696f6e3c5665633c75383e3e000528a05465726d696e617465207468652061637469766520776f726b657220627920746865206c6561642e25015265717569726573207369676e6564206c6561646572206f726967696e206f722074686520726f6f742028746f207465726d696e61746520746865206c656164657220726f6c65292e2823203c7765696768743e002423232057656967687438604f20285029602077686572653ad82d20605060206973207468652073697a65206070656e616c74792e736c617368696e675f746578746020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e2c736c6173685f7374616b650c0124776f726b65725f696420012c576f726b657249643c543e00011c70656e616c747918013042616c616e63654f663c543e000124726174696f6e616c651501013c4f7074696f6e3c5665633c75383e3e00062c7d01536c61736865732074686520726567756c617220776f726b6572207374616b652c2064656d616e64732061206c6561646572206f726967696e2e204e6f206c696d6974732c206e6f20616374696f6e73206f6e207a65726f207374616b652e3d01496620736c617368696e672062616c616e63652067726561746572207468616e20746865206578697374696e67207374616b65202d207374616b6520697320736c617368656420746f207a65726f2e19015265717569726573207369676e6564206c6561646572206f726967696e206f722074686520726f6f742028746f20736c61736820746865206c6561646572207374616b65292e2823203c7765696768743e002423232057656967687438604f20285029602077686572653ae82d20605060206973207468652073697a65206f66206070656e616c6974792e736c617368696e675f746578746020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e3864656372656173655f7374616b65080124776f726b65725f696420012c576f726b657249643c543e00014c7374616b655f62616c616e63655f64656c746118013042616c616e63654f663c543e00073021014465637265617365732074686520726567756c617220776f726b65722f6c656164207374616b6520616e642072657475726e73207468652072656d61696e64657220746f207468653901776f726b6572207374616b696e675f6163636f756e745f69642e2043616e2062652064656372656173656420746f207a65726f2c206e6f20616374696f6e73206f6e207a65726f207374616b652e944163636570747320746865207374616b6520616d6f756e7420746f2064656372656173652e25015265717569726573207369676e6564206c6561646572206f726967696e206f722074686520726f6f742028746f20646563726561736520746865206c6561646572207374616b65292e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e38696e6372656173655f7374616b65080124776f726b65725f696420012c576f726b657249643c543e00014c7374616b655f62616c616e63655f64656c746118013042616c616e63654f663c543e0008280501496e637265617365732074686520726567756c617220776f726b65722f6c656164207374616b652c2064656d616e6473206120776f726b6572206f726967696e2e6d014c6f636b7320746f6b656e732066726f6d2074686520776f726b6572207374616b696e675f6163636f756e745f696420657175616c20746f206e6577207374616b652e204e6f206c696d697473206f6e20746865207374616b652e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e5077697468647261775f6170706c69636174696f6e0401386170706c69636174696f6e5f69642001344170706c69636174696f6e4964000924010157697468647261772074686520776f726b6572206170706c69636174696f6e2e2043616e20626520646f6e652062792074686520776f726b6572206f6e6c792e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e3863616e63656c5f6f70656e696e670401286f70656e696e675f69642001244f70656e696e674964000a28dc43616e63656c20616e206f70656e696e6720666f722074686520726567756c617220776f726b65722f6c65616420706f736974696f6e2e550152657175697265207369676e6564206c6561646572206f726967696e206f722074686520726f6f742028746f2063616e63656c206f70656e696e6720666f7220746865206c656164657220706f736974696f6e292e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e287365745f6275646765740401286e65775f62756467657418013042616c616e63654f663c543e000b28a0536574732061206e65772062756467657420666f722074686520776f726b696e672067726f75702e54526571756972657320726f6f74206f726967696e2e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e547570646174655f7265776172645f6163636f756e74080124776f726b65725f696420012c576f726b657249643c543e0001546e65775f7265776172645f6163636f756e745f6964000130543a3a4163636f756e744964000c2469015570646174652074686520726577617264206163636f756e74206173736f6369617465642077697468206120736574207265776172642072656c6174696f6e7368697020666f72207468652061637469766520776f726b65722e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e507570646174655f7265776172645f616d6f756e74080124776f726b65725f696420012c576f726b657249643c543e0001407265776172645f7065725f626c6f636b290101504f7074696f6e3c42616c616e63654f663c543e3e000d28c855706461746520746865207265776172642070657220626c6f636b20666f72207468652061637469766520776f726b65722e310152657175697265207369676e6564206c6561646572206f726967696e206f722074686520726f6f742028746f20757064617465206c656164657227732072657761726420616d6f756e74292e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e3c7365745f7374617475735f7465787404012c7374617475735f746578741501013c4f7074696f6e3c5665633c75383e3e000e30b4536574732061206e657720737461747573207465787420666f722074686520776f726b696e672067726f75702e54526571756972657320726f6f74206f726967696e2e002823203c7765696768743e002423232057656967687438604f20285329602077686572653a4d012d20605360206973207468652073697a65206f662074686520636f6e74656e7473206f6620607374617475735f746578746020696e206b696c6f6279746573207768656e206974206973206e6f74206e6f6e6500142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e447370656e645f66726f6d5f6275646765740c01286163636f756e745f6964000130543a3a4163636f756e744964000118616d6f756e7418013042616c616e63654f663c543e000124726174696f6e616c651501013c4f7074696f6e3c5665633c75383e3e000f28a85472616e73666572732073706563696669656420616d6f756e7420746f20616e79206163636f756e742e5c5265717569726573206c6561646572206f726967696e2e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e6466756e645f776f726b696e675f67726f75705f6275646765740c01246d656d6265725f696420012c4d656d62657249643c543e000118616d6f756e7418013042616c616e63654f663c543e000124726174696f6e616c6528011c5665633c75383e0010209846756e6420776f726b696e672067726f7570206275646765742062792061206d656d6265722e203c7765696768743e0024232320576569676874c4604f202831296020446f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d6574657273142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e2c6c6561645f72656d61726b04010c6d736728011c5665633c75383e0011284c4c6561642072656d61726b206d657373616765002823203c7765696768743e002423232057656967687438604f20284d29602077686572653a9c2d20604d60206973207468652073697a65206f6620606d73676020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e34776f726b65725f72656d61726b080124776f726b65725f696420012c576f726b657249643c543e00010c6d736728011c5665633c75383e00122854576f726b65722072656d61726b206d657373616765002823203c7765696768743e002423232057656967687438604f20284d29602077686572653a9c2d20604d60206973207468652073697a65206f6620606d73676020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e0c4c446973706174636861626c652063616c6c732e005501456163682076617269616e74206f66207468697320656e756d206d61707320746f206120646973706174636861626c652066756e6374696f6e2066726f6d20746865206173736f636961746564206d6f64756c652e6906085070616c6c65745f776f726b696e675f67726f75701043616c6c08045400044900014c2c6164645f6f70656e696e6710012c6465736372697074696f6e28011c5665633c75383e0001306f70656e696e675f747970656503012c4f70656e696e67547970650001307374616b655f706f6c696379490301a45374616b65506f6c6963793c543a3a426c6f636b4e756d6265722c2042616c616e63654f663c543e3e0001407265776172645f7065725f626c6f636b290101504f7074696f6e3c42616c616e63654f663c543e3e00002cc44164642061206a6f62206f70656e696e6720666f72206120726567756c617220776f726b65722f6c65616420726f6c652e490152657175697265207369676e6564206c6561646572206f726967696e206f722074686520726f6f742028746f20616464206f70656e696e6720666f7220746865206c656164657220706f736974696f6e292e002823203c7765696768743e002423232057656967687438604f20284429602077686572653abc2d20604460206973207468652073697a65206f6620606465736372697074696f6e6020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e406170706c795f6f6e5f6f70656e696e67040104706903016c4170706c794f6e4f70656e696e67506172616d65746572733c543e000128684170706c79206f6e206120776f726b6572206f70656e696e672e002823203c7765696768743e002423232057656967687438604f20284429602077686572653ac42d20604460206973207468652073697a65206f662060702e6465736372697074696f6e6020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e3066696c6c5f6f70656e696e670801286f70656e696e675f69642001244f70656e696e6749640001687375636365737366756c5f6170706c69636174696f6e5f6964735101015c42547265655365743c4170706c69636174696f6e49643e000228ac46696c6c206f70656e696e6720666f722074686520726567756c61722f6c65616420706f736974696f6e2e4d0152657175697265207369676e6564206c6561646572206f726967696e206f722074686520726f6f742028746f2066696c6c206f70656e696e6720666f7220746865206c656164657220706f736974696f6e292e2823203c7765696768743e002423232057656967687438604f20284129602077686572653acc2d2060416020697320746865206c656e677468206f6620607375636365737366756c5f6170706c69636174696f6e5f69647360142d2044423a242020202d204f2841292c23203c2f7765696768743e4c7570646174655f726f6c655f6163636f756e74080124776f726b65725f696420012c576f726b657249643c543e00014c6e65775f726f6c655f6163636f756e745f6964000130543a3a4163636f756e744964000324150155706461746520746865206173736f63696174656420726f6c65206163636f756e74206f66207468652061637469766520726567756c617220776f726b65722f6c6561642e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e286c656176655f726f6c65080124776f726b65725f696420012c576f726b657249643c543e000124726174696f6e616c651501013c4f7074696f6e3c5665633c75383e3e000424904c656176652074686520726f6c65206279207468652061637469766520776f726b65722e2823203c7765696768743e002423232057656967687438604f20285229602077686572653ab42d20605260206973207468652073697a65206f662060726174696f6e616c656020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e387465726d696e6174655f726f6c650c0124776f726b65725f696420012c576f726b657249643c543e00011c70656e616c7479290101504f7074696f6e3c42616c616e63654f663c543e3e000124726174696f6e616c651501013c4f7074696f6e3c5665633c75383e3e000528a05465726d696e617465207468652061637469766520776f726b657220627920746865206c6561642e25015265717569726573207369676e6564206c6561646572206f726967696e206f722074686520726f6f742028746f207465726d696e61746520746865206c656164657220726f6c65292e2823203c7765696768743e002423232057656967687438604f20285029602077686572653ad82d20605060206973207468652073697a65206070656e616c74792e736c617368696e675f746578746020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e2c736c6173685f7374616b650c0124776f726b65725f696420012c576f726b657249643c543e00011c70656e616c747918013042616c616e63654f663c543e000124726174696f6e616c651501013c4f7074696f6e3c5665633c75383e3e00062c7d01536c61736865732074686520726567756c617220776f726b6572207374616b652c2064656d616e64732061206c6561646572206f726967696e2e204e6f206c696d6974732c206e6f20616374696f6e73206f6e207a65726f207374616b652e3d01496620736c617368696e672062616c616e63652067726561746572207468616e20746865206578697374696e67207374616b65202d207374616b6520697320736c617368656420746f207a65726f2e19015265717569726573207369676e6564206c6561646572206f726967696e206f722074686520726f6f742028746f20736c61736820746865206c6561646572207374616b65292e2823203c7765696768743e002423232057656967687438604f20285029602077686572653ae82d20605060206973207468652073697a65206f66206070656e616c6974792e736c617368696e675f746578746020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e3864656372656173655f7374616b65080124776f726b65725f696420012c576f726b657249643c543e00014c7374616b655f62616c616e63655f64656c746118013042616c616e63654f663c543e00073021014465637265617365732074686520726567756c617220776f726b65722f6c656164207374616b6520616e642072657475726e73207468652072656d61696e64657220746f207468653901776f726b6572207374616b696e675f6163636f756e745f69642e2043616e2062652064656372656173656420746f207a65726f2c206e6f20616374696f6e73206f6e207a65726f207374616b652e944163636570747320746865207374616b6520616d6f756e7420746f2064656372656173652e25015265717569726573207369676e6564206c6561646572206f726967696e206f722074686520726f6f742028746f20646563726561736520746865206c6561646572207374616b65292e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e38696e6372656173655f7374616b65080124776f726b65725f696420012c576f726b657249643c543e00014c7374616b655f62616c616e63655f64656c746118013042616c616e63654f663c543e0008280501496e637265617365732074686520726567756c617220776f726b65722f6c656164207374616b652c2064656d616e6473206120776f726b6572206f726967696e2e6d014c6f636b7320746f6b656e732066726f6d2074686520776f726b6572207374616b696e675f6163636f756e745f696420657175616c20746f206e6577207374616b652e204e6f206c696d697473206f6e20746865207374616b652e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e5077697468647261775f6170706c69636174696f6e0401386170706c69636174696f6e5f69642001344170706c69636174696f6e4964000924010157697468647261772074686520776f726b6572206170706c69636174696f6e2e2043616e20626520646f6e652062792074686520776f726b6572206f6e6c792e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e3863616e63656c5f6f70656e696e670401286f70656e696e675f69642001244f70656e696e674964000a28dc43616e63656c20616e206f70656e696e6720666f722074686520726567756c617220776f726b65722f6c65616420706f736974696f6e2e550152657175697265207369676e6564206c6561646572206f726967696e206f722074686520726f6f742028746f2063616e63656c206f70656e696e6720666f7220746865206c656164657220706f736974696f6e292e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e287365745f6275646765740401286e65775f62756467657418013042616c616e63654f663c543e000b28a0536574732061206e65772062756467657420666f722074686520776f726b696e672067726f75702e54526571756972657320726f6f74206f726967696e2e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e547570646174655f7265776172645f6163636f756e74080124776f726b65725f696420012c576f726b657249643c543e0001546e65775f7265776172645f6163636f756e745f6964000130543a3a4163636f756e744964000c2469015570646174652074686520726577617264206163636f756e74206173736f6369617465642077697468206120736574207265776172642072656c6174696f6e7368697020666f72207468652061637469766520776f726b65722e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e507570646174655f7265776172645f616d6f756e74080124776f726b65725f696420012c576f726b657249643c543e0001407265776172645f7065725f626c6f636b290101504f7074696f6e3c42616c616e63654f663c543e3e000d28c855706461746520746865207265776172642070657220626c6f636b20666f72207468652061637469766520776f726b65722e310152657175697265207369676e6564206c6561646572206f726967696e206f722074686520726f6f742028746f20757064617465206c656164657227732072657761726420616d6f756e74292e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e3c7365745f7374617475735f7465787404012c7374617475735f746578741501013c4f7074696f6e3c5665633c75383e3e000e30b4536574732061206e657720737461747573207465787420666f722074686520776f726b696e672067726f75702e54526571756972657320726f6f74206f726967696e2e002823203c7765696768743e002423232057656967687438604f20285329602077686572653a4d012d20605360206973207468652073697a65206f662074686520636f6e74656e7473206f6620607374617475735f746578746020696e206b696c6f6279746573207768656e206974206973206e6f74206e6f6e6500142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e447370656e645f66726f6d5f6275646765740c01286163636f756e745f6964000130543a3a4163636f756e744964000118616d6f756e7418013042616c616e63654f663c543e000124726174696f6e616c651501013c4f7074696f6e3c5665633c75383e3e000f28a85472616e73666572732073706563696669656420616d6f756e7420746f20616e79206163636f756e742e5c5265717569726573206c6561646572206f726967696e2e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e6466756e645f776f726b696e675f67726f75705f6275646765740c01246d656d6265725f696420012c4d656d62657249643c543e000118616d6f756e7418013042616c616e63654f663c543e000124726174696f6e616c6528011c5665633c75383e0010209846756e6420776f726b696e672067726f7570206275646765742062792061206d656d6265722e203c7765696768743e0024232320576569676874c4604f202831296020446f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d6574657273142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e2c6c6561645f72656d61726b04010c6d736728011c5665633c75383e0011284c4c6561642072656d61726b206d657373616765002823203c7765696768743e002423232057656967687438604f20284d29602077686572653a9c2d20604d60206973207468652073697a65206f6620606d73676020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e34776f726b65725f72656d61726b080124776f726b65725f696420012c576f726b657249643c543e00010c6d736728011c5665633c75383e00122854576f726b65722072656d61726b206d657373616765002823203c7765696768743e002423232057656967687438604f20284d29602077686572653a9c2d20604d60206973207468652073697a65206f6620606d73676020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e0c4c446973706174636861626c652063616c6c732e005501456163682076617269616e74206f66207468697320656e756d206d61707320746f206120646973706174636861626c652066756e6374696f6e2066726f6d20746865206173736f636961746564206d6f64756c652e6d06085070616c6c65745f776f726b696e675f67726f75701043616c6c08045400044900014c2c6164645f6f70656e696e6710012c6465736372697074696f6e28011c5665633c75383e0001306f70656e696e675f747970656503012c4f70656e696e67547970650001307374616b655f706f6c696379490301a45374616b65506f6c6963793c543a3a426c6f636b4e756d6265722c2042616c616e63654f663c543e3e0001407265776172645f7065725f626c6f636b290101504f7074696f6e3c42616c616e63654f663c543e3e00002cc44164642061206a6f62206f70656e696e6720666f72206120726567756c617220776f726b65722f6c65616420726f6c652e490152657175697265207369676e6564206c6561646572206f726967696e206f722074686520726f6f742028746f20616464206f70656e696e6720666f7220746865206c656164657220706f736974696f6e292e002823203c7765696768743e002423232057656967687438604f20284429602077686572653abc2d20604460206973207468652073697a65206f6620606465736372697074696f6e6020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e406170706c795f6f6e5f6f70656e696e67040104706903016c4170706c794f6e4f70656e696e67506172616d65746572733c543e000128684170706c79206f6e206120776f726b6572206f70656e696e672e002823203c7765696768743e002423232057656967687438604f20284429602077686572653ac42d20604460206973207468652073697a65206f662060702e6465736372697074696f6e6020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e3066696c6c5f6f70656e696e670801286f70656e696e675f69642001244f70656e696e6749640001687375636365737366756c5f6170706c69636174696f6e5f6964735101015c42547265655365743c4170706c69636174696f6e49643e000228ac46696c6c206f70656e696e6720666f722074686520726567756c61722f6c65616420706f736974696f6e2e4d0152657175697265207369676e6564206c6561646572206f726967696e206f722074686520726f6f742028746f2066696c6c206f70656e696e6720666f7220746865206c656164657220706f736974696f6e292e2823203c7765696768743e002423232057656967687438604f20284129602077686572653acc2d2060416020697320746865206c656e677468206f6620607375636365737366756c5f6170706c69636174696f6e5f69647360142d2044423a242020202d204f2841292c23203c2f7765696768743e4c7570646174655f726f6c655f6163636f756e74080124776f726b65725f696420012c576f726b657249643c543e00014c6e65775f726f6c655f6163636f756e745f6964000130543a3a4163636f756e744964000324150155706461746520746865206173736f63696174656420726f6c65206163636f756e74206f66207468652061637469766520726567756c617220776f726b65722f6c6561642e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e286c656176655f726f6c65080124776f726b65725f696420012c576f726b657249643c543e000124726174696f6e616c651501013c4f7074696f6e3c5665633c75383e3e000424904c656176652074686520726f6c65206279207468652061637469766520776f726b65722e2823203c7765696768743e002423232057656967687438604f20285229602077686572653ab42d20605260206973207468652073697a65206f662060726174696f6e616c656020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e387465726d696e6174655f726f6c650c0124776f726b65725f696420012c576f726b657249643c543e00011c70656e616c7479290101504f7074696f6e3c42616c616e63654f663c543e3e000124726174696f6e616c651501013c4f7074696f6e3c5665633c75383e3e000528a05465726d696e617465207468652061637469766520776f726b657220627920746865206c6561642e25015265717569726573207369676e6564206c6561646572206f726967696e206f722074686520726f6f742028746f207465726d696e61746520746865206c656164657220726f6c65292e2823203c7765696768743e002423232057656967687438604f20285029602077686572653ad82d20605060206973207468652073697a65206070656e616c74792e736c617368696e675f746578746020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e2c736c6173685f7374616b650c0124776f726b65725f696420012c576f726b657249643c543e00011c70656e616c747918013042616c616e63654f663c543e000124726174696f6e616c651501013c4f7074696f6e3c5665633c75383e3e00062c7d01536c61736865732074686520726567756c617220776f726b6572207374616b652c2064656d616e64732061206c6561646572206f726967696e2e204e6f206c696d6974732c206e6f20616374696f6e73206f6e207a65726f207374616b652e3d01496620736c617368696e672062616c616e63652067726561746572207468616e20746865206578697374696e67207374616b65202d207374616b6520697320736c617368656420746f207a65726f2e19015265717569726573207369676e6564206c6561646572206f726967696e206f722074686520726f6f742028746f20736c61736820746865206c6561646572207374616b65292e2823203c7765696768743e002423232057656967687438604f20285029602077686572653ae82d20605060206973207468652073697a65206f66206070656e616c6974792e736c617368696e675f746578746020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e3864656372656173655f7374616b65080124776f726b65725f696420012c576f726b657249643c543e00014c7374616b655f62616c616e63655f64656c746118013042616c616e63654f663c543e00073021014465637265617365732074686520726567756c617220776f726b65722f6c656164207374616b6520616e642072657475726e73207468652072656d61696e64657220746f207468653901776f726b6572207374616b696e675f6163636f756e745f69642e2043616e2062652064656372656173656420746f207a65726f2c206e6f20616374696f6e73206f6e207a65726f207374616b652e944163636570747320746865207374616b6520616d6f756e7420746f2064656372656173652e25015265717569726573207369676e6564206c6561646572206f726967696e206f722074686520726f6f742028746f20646563726561736520746865206c6561646572207374616b65292e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e38696e6372656173655f7374616b65080124776f726b65725f696420012c576f726b657249643c543e00014c7374616b655f62616c616e63655f64656c746118013042616c616e63654f663c543e0008280501496e637265617365732074686520726567756c617220776f726b65722f6c656164207374616b652c2064656d616e6473206120776f726b6572206f726967696e2e6d014c6f636b7320746f6b656e732066726f6d2074686520776f726b6572207374616b696e675f6163636f756e745f696420657175616c20746f206e6577207374616b652e204e6f206c696d697473206f6e20746865207374616b652e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e5077697468647261775f6170706c69636174696f6e0401386170706c69636174696f6e5f69642001344170706c69636174696f6e4964000924010157697468647261772074686520776f726b6572206170706c69636174696f6e2e2043616e20626520646f6e652062792074686520776f726b6572206f6e6c792e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e3863616e63656c5f6f70656e696e670401286f70656e696e675f69642001244f70656e696e674964000a28dc43616e63656c20616e206f70656e696e6720666f722074686520726567756c617220776f726b65722f6c65616420706f736974696f6e2e550152657175697265207369676e6564206c6561646572206f726967696e206f722074686520726f6f742028746f2063616e63656c206f70656e696e6720666f7220746865206c656164657220706f736974696f6e292e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e287365745f6275646765740401286e65775f62756467657418013042616c616e63654f663c543e000b28a0536574732061206e65772062756467657420666f722074686520776f726b696e672067726f75702e54526571756972657320726f6f74206f726967696e2e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e547570646174655f7265776172645f6163636f756e74080124776f726b65725f696420012c576f726b657249643c543e0001546e65775f7265776172645f6163636f756e745f6964000130543a3a4163636f756e744964000c2469015570646174652074686520726577617264206163636f756e74206173736f6369617465642077697468206120736574207265776172642072656c6174696f6e7368697020666f72207468652061637469766520776f726b65722e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e507570646174655f7265776172645f616d6f756e74080124776f726b65725f696420012c576f726b657249643c543e0001407265776172645f7065725f626c6f636b290101504f7074696f6e3c42616c616e63654f663c543e3e000d28c855706461746520746865207265776172642070657220626c6f636b20666f72207468652061637469766520776f726b65722e310152657175697265207369676e6564206c6561646572206f726967696e206f722074686520726f6f742028746f20757064617465206c656164657227732072657761726420616d6f756e74292e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e3c7365745f7374617475735f7465787404012c7374617475735f746578741501013c4f7074696f6e3c5665633c75383e3e000e30b4536574732061206e657720737461747573207465787420666f722074686520776f726b696e672067726f75702e54526571756972657320726f6f74206f726967696e2e002823203c7765696768743e002423232057656967687438604f20285329602077686572653a4d012d20605360206973207468652073697a65206f662074686520636f6e74656e7473206f6620607374617475735f746578746020696e206b696c6f6279746573207768656e206974206973206e6f74206e6f6e6500142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e447370656e645f66726f6d5f6275646765740c01286163636f756e745f6964000130543a3a4163636f756e744964000118616d6f756e7418013042616c616e63654f663c543e000124726174696f6e616c651501013c4f7074696f6e3c5665633c75383e3e000f28a85472616e73666572732073706563696669656420616d6f756e7420746f20616e79206163636f756e742e5c5265717569726573206c6561646572206f726967696e2e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e6466756e645f776f726b696e675f67726f75705f6275646765740c01246d656d6265725f696420012c4d656d62657249643c543e000118616d6f756e7418013042616c616e63654f663c543e000124726174696f6e616c6528011c5665633c75383e0010209846756e6420776f726b696e672067726f7570206275646765742062792061206d656d6265722e203c7765696768743e0024232320576569676874c4604f202831296020446f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d6574657273142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e2c6c6561645f72656d61726b04010c6d736728011c5665633c75383e0011284c4c6561642072656d61726b206d657373616765002823203c7765696768743e002423232057656967687438604f20284d29602077686572653a9c2d20604d60206973207468652073697a65206f6620606d73676020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e34776f726b65725f72656d61726b080124776f726b65725f696420012c576f726b657249643c543e00010c6d736728011c5665633c75383e00122854576f726b65722072656d61726b206d657373616765002823203c7765696768743e002423232057656967687438604f20284d29602077686572653a9c2d20604d60206973207468652073697a65206f6620606d73676020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e0c4c446973706174636861626c652063616c6c732e005501456163682076617269616e74206f66207468697320656e756d206d61707320746f206120646973706174636861626c652066756e6374696f6e2066726f6d20746865206173736f636961746564206d6f64756c652e7106085070616c6c65745f776f726b696e675f67726f75701043616c6c08045400044900014c2c6164645f6f70656e696e6710012c6465736372697074696f6e28011c5665633c75383e0001306f70656e696e675f747970656503012c4f70656e696e67547970650001307374616b655f706f6c696379490301a45374616b65506f6c6963793c543a3a426c6f636b4e756d6265722c2042616c616e63654f663c543e3e0001407265776172645f7065725f626c6f636b290101504f7074696f6e3c42616c616e63654f663c543e3e00002cc44164642061206a6f62206f70656e696e6720666f72206120726567756c617220776f726b65722f6c65616420726f6c652e490152657175697265207369676e6564206c6561646572206f726967696e206f722074686520726f6f742028746f20616464206f70656e696e6720666f7220746865206c656164657220706f736974696f6e292e002823203c7765696768743e002423232057656967687438604f20284429602077686572653abc2d20604460206973207468652073697a65206f6620606465736372697074696f6e6020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e406170706c795f6f6e5f6f70656e696e67040104706903016c4170706c794f6e4f70656e696e67506172616d65746572733c543e000128684170706c79206f6e206120776f726b6572206f70656e696e672e002823203c7765696768743e002423232057656967687438604f20284429602077686572653ac42d20604460206973207468652073697a65206f662060702e6465736372697074696f6e6020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e3066696c6c5f6f70656e696e670801286f70656e696e675f69642001244f70656e696e6749640001687375636365737366756c5f6170706c69636174696f6e5f6964735101015c42547265655365743c4170706c69636174696f6e49643e000228ac46696c6c206f70656e696e6720666f722074686520726567756c61722f6c65616420706f736974696f6e2e4d0152657175697265207369676e6564206c6561646572206f726967696e206f722074686520726f6f742028746f2066696c6c206f70656e696e6720666f7220746865206c656164657220706f736974696f6e292e2823203c7765696768743e002423232057656967687438604f20284129602077686572653acc2d2060416020697320746865206c656e677468206f6620607375636365737366756c5f6170706c69636174696f6e5f69647360142d2044423a242020202d204f2841292c23203c2f7765696768743e4c7570646174655f726f6c655f6163636f756e74080124776f726b65725f696420012c576f726b657249643c543e00014c6e65775f726f6c655f6163636f756e745f6964000130543a3a4163636f756e744964000324150155706461746520746865206173736f63696174656420726f6c65206163636f756e74206f66207468652061637469766520726567756c617220776f726b65722f6c6561642e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e286c656176655f726f6c65080124776f726b65725f696420012c576f726b657249643c543e000124726174696f6e616c651501013c4f7074696f6e3c5665633c75383e3e000424904c656176652074686520726f6c65206279207468652061637469766520776f726b65722e2823203c7765696768743e002423232057656967687438604f20285229602077686572653ab42d20605260206973207468652073697a65206f662060726174696f6e616c656020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e387465726d696e6174655f726f6c650c0124776f726b65725f696420012c576f726b657249643c543e00011c70656e616c7479290101504f7074696f6e3c42616c616e63654f663c543e3e000124726174696f6e616c651501013c4f7074696f6e3c5665633c75383e3e000528a05465726d696e617465207468652061637469766520776f726b657220627920746865206c6561642e25015265717569726573207369676e6564206c6561646572206f726967696e206f722074686520726f6f742028746f207465726d696e61746520746865206c656164657220726f6c65292e2823203c7765696768743e002423232057656967687438604f20285029602077686572653ad82d20605060206973207468652073697a65206070656e616c74792e736c617368696e675f746578746020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e2c736c6173685f7374616b650c0124776f726b65725f696420012c576f726b657249643c543e00011c70656e616c747918013042616c616e63654f663c543e000124726174696f6e616c651501013c4f7074696f6e3c5665633c75383e3e00062c7d01536c61736865732074686520726567756c617220776f726b6572207374616b652c2064656d616e64732061206c6561646572206f726967696e2e204e6f206c696d6974732c206e6f20616374696f6e73206f6e207a65726f207374616b652e3d01496620736c617368696e672062616c616e63652067726561746572207468616e20746865206578697374696e67207374616b65202d207374616b6520697320736c617368656420746f207a65726f2e19015265717569726573207369676e6564206c6561646572206f726967696e206f722074686520726f6f742028746f20736c61736820746865206c6561646572207374616b65292e2823203c7765696768743e002423232057656967687438604f20285029602077686572653ae82d20605060206973207468652073697a65206f66206070656e616c6974792e736c617368696e675f746578746020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e3864656372656173655f7374616b65080124776f726b65725f696420012c576f726b657249643c543e00014c7374616b655f62616c616e63655f64656c746118013042616c616e63654f663c543e00073021014465637265617365732074686520726567756c617220776f726b65722f6c656164207374616b6520616e642072657475726e73207468652072656d61696e64657220746f207468653901776f726b6572207374616b696e675f6163636f756e745f69642e2043616e2062652064656372656173656420746f207a65726f2c206e6f20616374696f6e73206f6e207a65726f207374616b652e944163636570747320746865207374616b6520616d6f756e7420746f2064656372656173652e25015265717569726573207369676e6564206c6561646572206f726967696e206f722074686520726f6f742028746f20646563726561736520746865206c6561646572207374616b65292e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e38696e6372656173655f7374616b65080124776f726b65725f696420012c576f726b657249643c543e00014c7374616b655f62616c616e63655f64656c746118013042616c616e63654f663c543e0008280501496e637265617365732074686520726567756c617220776f726b65722f6c656164207374616b652c2064656d616e6473206120776f726b6572206f726967696e2e6d014c6f636b7320746f6b656e732066726f6d2074686520776f726b6572207374616b696e675f6163636f756e745f696420657175616c20746f206e6577207374616b652e204e6f206c696d697473206f6e20746865207374616b652e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e5077697468647261775f6170706c69636174696f6e0401386170706c69636174696f6e5f69642001344170706c69636174696f6e4964000924010157697468647261772074686520776f726b6572206170706c69636174696f6e2e2043616e20626520646f6e652062792074686520776f726b6572206f6e6c792e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e3863616e63656c5f6f70656e696e670401286f70656e696e675f69642001244f70656e696e674964000a28dc43616e63656c20616e206f70656e696e6720666f722074686520726567756c617220776f726b65722f6c65616420706f736974696f6e2e550152657175697265207369676e6564206c6561646572206f726967696e206f722074686520726f6f742028746f2063616e63656c206f70656e696e6720666f7220746865206c656164657220706f736974696f6e292e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e287365745f6275646765740401286e65775f62756467657418013042616c616e63654f663c543e000b28a0536574732061206e65772062756467657420666f722074686520776f726b696e672067726f75702e54526571756972657320726f6f74206f726967696e2e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e547570646174655f7265776172645f6163636f756e74080124776f726b65725f696420012c576f726b657249643c543e0001546e65775f7265776172645f6163636f756e745f6964000130543a3a4163636f756e744964000c2469015570646174652074686520726577617264206163636f756e74206173736f6369617465642077697468206120736574207265776172642072656c6174696f6e7368697020666f72207468652061637469766520776f726b65722e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e507570646174655f7265776172645f616d6f756e74080124776f726b65725f696420012c576f726b657249643c543e0001407265776172645f7065725f626c6f636b290101504f7074696f6e3c42616c616e63654f663c543e3e000d28c855706461746520746865207265776172642070657220626c6f636b20666f72207468652061637469766520776f726b65722e310152657175697265207369676e6564206c6561646572206f726967696e206f722074686520726f6f742028746f20757064617465206c656164657227732072657761726420616d6f756e74292e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e3c7365745f7374617475735f7465787404012c7374617475735f746578741501013c4f7074696f6e3c5665633c75383e3e000e30b4536574732061206e657720737461747573207465787420666f722074686520776f726b696e672067726f75702e54526571756972657320726f6f74206f726967696e2e002823203c7765696768743e002423232057656967687438604f20285329602077686572653a4d012d20605360206973207468652073697a65206f662074686520636f6e74656e7473206f6620607374617475735f746578746020696e206b696c6f6279746573207768656e206974206973206e6f74206e6f6e6500142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e447370656e645f66726f6d5f6275646765740c01286163636f756e745f6964000130543a3a4163636f756e744964000118616d6f756e7418013042616c616e63654f663c543e000124726174696f6e616c651501013c4f7074696f6e3c5665633c75383e3e000f28a85472616e73666572732073706563696669656420616d6f756e7420746f20616e79206163636f756e742e5c5265717569726573206c6561646572206f726967696e2e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e6466756e645f776f726b696e675f67726f75705f6275646765740c01246d656d6265725f696420012c4d656d62657249643c543e000118616d6f756e7418013042616c616e63654f663c543e000124726174696f6e616c6528011c5665633c75383e0010209846756e6420776f726b696e672067726f7570206275646765742062792061206d656d6265722e203c7765696768743e0024232320576569676874c4604f202831296020446f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d6574657273142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e2c6c6561645f72656d61726b04010c6d736728011c5665633c75383e0011284c4c6561642072656d61726b206d657373616765002823203c7765696768743e002423232057656967687438604f20284d29602077686572653a9c2d20604d60206973207468652073697a65206f6620606d73676020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e34776f726b65725f72656d61726b080124776f726b65725f696420012c576f726b657249643c543e00010c6d736728011c5665633c75383e00122854576f726b65722072656d61726b206d657373616765002823203c7765696768743e002423232057656967687438604f20284d29602077686572653a9c2d20604d60206973207468652073697a65206f6620606d73676020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e0c4c446973706174636861626c652063616c6c732e005501456163682076617269616e74206f66207468697320656e756d206d61707320746f206120646973706174636861626c652066756e6374696f6e2066726f6d20746865206173736f636961746564206d6f64756c652e7506085070616c6c65745f776f726b696e675f67726f75701043616c6c08045400044900014c2c6164645f6f70656e696e6710012c6465736372697074696f6e28011c5665633c75383e0001306f70656e696e675f747970656503012c4f70656e696e67547970650001307374616b655f706f6c696379490301a45374616b65506f6c6963793c543a3a426c6f636b4e756d6265722c2042616c616e63654f663c543e3e0001407265776172645f7065725f626c6f636b290101504f7074696f6e3c42616c616e63654f663c543e3e00002cc44164642061206a6f62206f70656e696e6720666f72206120726567756c617220776f726b65722f6c65616420726f6c652e490152657175697265207369676e6564206c6561646572206f726967696e206f722074686520726f6f742028746f20616464206f70656e696e6720666f7220746865206c656164657220706f736974696f6e292e002823203c7765696768743e002423232057656967687438604f20284429602077686572653abc2d20604460206973207468652073697a65206f6620606465736372697074696f6e6020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e406170706c795f6f6e5f6f70656e696e67040104706903016c4170706c794f6e4f70656e696e67506172616d65746572733c543e000128684170706c79206f6e206120776f726b6572206f70656e696e672e002823203c7765696768743e002423232057656967687438604f20284429602077686572653ac42d20604460206973207468652073697a65206f662060702e6465736372697074696f6e6020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e3066696c6c5f6f70656e696e670801286f70656e696e675f69642001244f70656e696e6749640001687375636365737366756c5f6170706c69636174696f6e5f6964735101015c42547265655365743c4170706c69636174696f6e49643e000228ac46696c6c206f70656e696e6720666f722074686520726567756c61722f6c65616420706f736974696f6e2e4d0152657175697265207369676e6564206c6561646572206f726967696e206f722074686520726f6f742028746f2066696c6c206f70656e696e6720666f7220746865206c656164657220706f736974696f6e292e2823203c7765696768743e002423232057656967687438604f20284129602077686572653acc2d2060416020697320746865206c656e677468206f6620607375636365737366756c5f6170706c69636174696f6e5f69647360142d2044423a242020202d204f2841292c23203c2f7765696768743e4c7570646174655f726f6c655f6163636f756e74080124776f726b65725f696420012c576f726b657249643c543e00014c6e65775f726f6c655f6163636f756e745f6964000130543a3a4163636f756e744964000324150155706461746520746865206173736f63696174656420726f6c65206163636f756e74206f66207468652061637469766520726567756c617220776f726b65722f6c6561642e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e286c656176655f726f6c65080124776f726b65725f696420012c576f726b657249643c543e000124726174696f6e616c651501013c4f7074696f6e3c5665633c75383e3e000424904c656176652074686520726f6c65206279207468652061637469766520776f726b65722e2823203c7765696768743e002423232057656967687438604f20285229602077686572653ab42d20605260206973207468652073697a65206f662060726174696f6e616c656020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e387465726d696e6174655f726f6c650c0124776f726b65725f696420012c576f726b657249643c543e00011c70656e616c7479290101504f7074696f6e3c42616c616e63654f663c543e3e000124726174696f6e616c651501013c4f7074696f6e3c5665633c75383e3e000528a05465726d696e617465207468652061637469766520776f726b657220627920746865206c6561642e25015265717569726573207369676e6564206c6561646572206f726967696e206f722074686520726f6f742028746f207465726d696e61746520746865206c656164657220726f6c65292e2823203c7765696768743e002423232057656967687438604f20285029602077686572653ad82d20605060206973207468652073697a65206070656e616c74792e736c617368696e675f746578746020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e2c736c6173685f7374616b650c0124776f726b65725f696420012c576f726b657249643c543e00011c70656e616c747918013042616c616e63654f663c543e000124726174696f6e616c651501013c4f7074696f6e3c5665633c75383e3e00062c7d01536c61736865732074686520726567756c617220776f726b6572207374616b652c2064656d616e64732061206c6561646572206f726967696e2e204e6f206c696d6974732c206e6f20616374696f6e73206f6e207a65726f207374616b652e3d01496620736c617368696e672062616c616e63652067726561746572207468616e20746865206578697374696e67207374616b65202d207374616b6520697320736c617368656420746f207a65726f2e19015265717569726573207369676e6564206c6561646572206f726967696e206f722074686520726f6f742028746f20736c61736820746865206c6561646572207374616b65292e2823203c7765696768743e002423232057656967687438604f20285029602077686572653ae82d20605060206973207468652073697a65206f66206070656e616c6974792e736c617368696e675f746578746020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e3864656372656173655f7374616b65080124776f726b65725f696420012c576f726b657249643c543e00014c7374616b655f62616c616e63655f64656c746118013042616c616e63654f663c543e00073021014465637265617365732074686520726567756c617220776f726b65722f6c656164207374616b6520616e642072657475726e73207468652072656d61696e64657220746f207468653901776f726b6572207374616b696e675f6163636f756e745f69642e2043616e2062652064656372656173656420746f207a65726f2c206e6f20616374696f6e73206f6e207a65726f207374616b652e944163636570747320746865207374616b6520616d6f756e7420746f2064656372656173652e25015265717569726573207369676e6564206c6561646572206f726967696e206f722074686520726f6f742028746f20646563726561736520746865206c6561646572207374616b65292e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e38696e6372656173655f7374616b65080124776f726b65725f696420012c576f726b657249643c543e00014c7374616b655f62616c616e63655f64656c746118013042616c616e63654f663c543e0008280501496e637265617365732074686520726567756c617220776f726b65722f6c656164207374616b652c2064656d616e6473206120776f726b6572206f726967696e2e6d014c6f636b7320746f6b656e732066726f6d2074686520776f726b6572207374616b696e675f6163636f756e745f696420657175616c20746f206e6577207374616b652e204e6f206c696d697473206f6e20746865207374616b652e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e5077697468647261775f6170706c69636174696f6e0401386170706c69636174696f6e5f69642001344170706c69636174696f6e4964000924010157697468647261772074686520776f726b6572206170706c69636174696f6e2e2043616e20626520646f6e652062792074686520776f726b6572206f6e6c792e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e3863616e63656c5f6f70656e696e670401286f70656e696e675f69642001244f70656e696e674964000a28dc43616e63656c20616e206f70656e696e6720666f722074686520726567756c617220776f726b65722f6c65616420706f736974696f6e2e550152657175697265207369676e6564206c6561646572206f726967696e206f722074686520726f6f742028746f2063616e63656c206f70656e696e6720666f7220746865206c656164657220706f736974696f6e292e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e287365745f6275646765740401286e65775f62756467657418013042616c616e63654f663c543e000b28a0536574732061206e65772062756467657420666f722074686520776f726b696e672067726f75702e54526571756972657320726f6f74206f726967696e2e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e547570646174655f7265776172645f6163636f756e74080124776f726b65725f696420012c576f726b657249643c543e0001546e65775f7265776172645f6163636f756e745f6964000130543a3a4163636f756e744964000c2469015570646174652074686520726577617264206163636f756e74206173736f6369617465642077697468206120736574207265776172642072656c6174696f6e7368697020666f72207468652061637469766520776f726b65722e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e507570646174655f7265776172645f616d6f756e74080124776f726b65725f696420012c576f726b657249643c543e0001407265776172645f7065725f626c6f636b290101504f7074696f6e3c42616c616e63654f663c543e3e000d28c855706461746520746865207265776172642070657220626c6f636b20666f72207468652061637469766520776f726b65722e310152657175697265207369676e6564206c6561646572206f726967696e206f722074686520726f6f742028746f20757064617465206c656164657227732072657761726420616d6f756e74292e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e3c7365745f7374617475735f7465787404012c7374617475735f746578741501013c4f7074696f6e3c5665633c75383e3e000e30b4536574732061206e657720737461747573207465787420666f722074686520776f726b696e672067726f75702e54526571756972657320726f6f74206f726967696e2e002823203c7765696768743e002423232057656967687438604f20285329602077686572653a4d012d20605360206973207468652073697a65206f662074686520636f6e74656e7473206f6620607374617475735f746578746020696e206b696c6f6279746573207768656e206974206973206e6f74206e6f6e6500142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e447370656e645f66726f6d5f6275646765740c01286163636f756e745f6964000130543a3a4163636f756e744964000118616d6f756e7418013042616c616e63654f663c543e000124726174696f6e616c651501013c4f7074696f6e3c5665633c75383e3e000f28a85472616e73666572732073706563696669656420616d6f756e7420746f20616e79206163636f756e742e5c5265717569726573206c6561646572206f726967696e2e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e6466756e645f776f726b696e675f67726f75705f6275646765740c01246d656d6265725f696420012c4d656d62657249643c543e000118616d6f756e7418013042616c616e63654f663c543e000124726174696f6e616c6528011c5665633c75383e0010209846756e6420776f726b696e672067726f7570206275646765742062792061206d656d6265722e203c7765696768743e0024232320576569676874c4604f202831296020446f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d6574657273142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e2c6c6561645f72656d61726b04010c6d736728011c5665633c75383e0011284c4c6561642072656d61726b206d657373616765002823203c7765696768743e002423232057656967687438604f20284d29602077686572653a9c2d20604d60206973207468652073697a65206f6620606d73676020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e34776f726b65725f72656d61726b080124776f726b65725f696420012c576f726b657249643c543e00010c6d736728011c5665633c75383e00122854576f726b65722072656d61726b206d657373616765002823203c7765696768743e002423232057656967687438604f20284d29602077686572653a9c2d20604d60206973207468652073697a65206f6620606d73676020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e0c4c446973706174636861626c652063616c6c732e005501456163682076617269616e74206f66207468697320656e756d206d61707320746f206120646973706174636861626c652066756e6374696f6e2066726f6d20746865206173736f636961746564206d6f64756c652e7906085070616c6c65745f776f726b696e675f67726f75701043616c6c08045400044900014c2c6164645f6f70656e696e6710012c6465736372697074696f6e28011c5665633c75383e0001306f70656e696e675f747970656503012c4f70656e696e67547970650001307374616b655f706f6c696379490301a45374616b65506f6c6963793c543a3a426c6f636b4e756d6265722c2042616c616e63654f663c543e3e0001407265776172645f7065725f626c6f636b290101504f7074696f6e3c42616c616e63654f663c543e3e00002cc44164642061206a6f62206f70656e696e6720666f72206120726567756c617220776f726b65722f6c65616420726f6c652e490152657175697265207369676e6564206c6561646572206f726967696e206f722074686520726f6f742028746f20616464206f70656e696e6720666f7220746865206c656164657220706f736974696f6e292e002823203c7765696768743e002423232057656967687438604f20284429602077686572653abc2d20604460206973207468652073697a65206f6620606465736372697074696f6e6020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e406170706c795f6f6e5f6f70656e696e67040104706903016c4170706c794f6e4f70656e696e67506172616d65746572733c543e000128684170706c79206f6e206120776f726b6572206f70656e696e672e002823203c7765696768743e002423232057656967687438604f20284429602077686572653ac42d20604460206973207468652073697a65206f662060702e6465736372697074696f6e6020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e3066696c6c5f6f70656e696e670801286f70656e696e675f69642001244f70656e696e6749640001687375636365737366756c5f6170706c69636174696f6e5f6964735101015c42547265655365743c4170706c69636174696f6e49643e000228ac46696c6c206f70656e696e6720666f722074686520726567756c61722f6c65616420706f736974696f6e2e4d0152657175697265207369676e6564206c6561646572206f726967696e206f722074686520726f6f742028746f2066696c6c206f70656e696e6720666f7220746865206c656164657220706f736974696f6e292e2823203c7765696768743e002423232057656967687438604f20284129602077686572653acc2d2060416020697320746865206c656e677468206f6620607375636365737366756c5f6170706c69636174696f6e5f69647360142d2044423a242020202d204f2841292c23203c2f7765696768743e4c7570646174655f726f6c655f6163636f756e74080124776f726b65725f696420012c576f726b657249643c543e00014c6e65775f726f6c655f6163636f756e745f6964000130543a3a4163636f756e744964000324150155706461746520746865206173736f63696174656420726f6c65206163636f756e74206f66207468652061637469766520726567756c617220776f726b65722f6c6561642e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e286c656176655f726f6c65080124776f726b65725f696420012c576f726b657249643c543e000124726174696f6e616c651501013c4f7074696f6e3c5665633c75383e3e000424904c656176652074686520726f6c65206279207468652061637469766520776f726b65722e2823203c7765696768743e002423232057656967687438604f20285229602077686572653ab42d20605260206973207468652073697a65206f662060726174696f6e616c656020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e387465726d696e6174655f726f6c650c0124776f726b65725f696420012c576f726b657249643c543e00011c70656e616c7479290101504f7074696f6e3c42616c616e63654f663c543e3e000124726174696f6e616c651501013c4f7074696f6e3c5665633c75383e3e000528a05465726d696e617465207468652061637469766520776f726b657220627920746865206c6561642e25015265717569726573207369676e6564206c6561646572206f726967696e206f722074686520726f6f742028746f207465726d696e61746520746865206c656164657220726f6c65292e2823203c7765696768743e002423232057656967687438604f20285029602077686572653ad82d20605060206973207468652073697a65206070656e616c74792e736c617368696e675f746578746020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e2c736c6173685f7374616b650c0124776f726b65725f696420012c576f726b657249643c543e00011c70656e616c747918013042616c616e63654f663c543e000124726174696f6e616c651501013c4f7074696f6e3c5665633c75383e3e00062c7d01536c61736865732074686520726567756c617220776f726b6572207374616b652c2064656d616e64732061206c6561646572206f726967696e2e204e6f206c696d6974732c206e6f20616374696f6e73206f6e207a65726f207374616b652e3d01496620736c617368696e672062616c616e63652067726561746572207468616e20746865206578697374696e67207374616b65202d207374616b6520697320736c617368656420746f207a65726f2e19015265717569726573207369676e6564206c6561646572206f726967696e206f722074686520726f6f742028746f20736c61736820746865206c6561646572207374616b65292e2823203c7765696768743e002423232057656967687438604f20285029602077686572653ae82d20605060206973207468652073697a65206f66206070656e616c6974792e736c617368696e675f746578746020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e3864656372656173655f7374616b65080124776f726b65725f696420012c576f726b657249643c543e00014c7374616b655f62616c616e63655f64656c746118013042616c616e63654f663c543e00073021014465637265617365732074686520726567756c617220776f726b65722f6c656164207374616b6520616e642072657475726e73207468652072656d61696e64657220746f207468653901776f726b6572207374616b696e675f6163636f756e745f69642e2043616e2062652064656372656173656420746f207a65726f2c206e6f20616374696f6e73206f6e207a65726f207374616b652e944163636570747320746865207374616b6520616d6f756e7420746f2064656372656173652e25015265717569726573207369676e6564206c6561646572206f726967696e206f722074686520726f6f742028746f20646563726561736520746865206c6561646572207374616b65292e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e38696e6372656173655f7374616b65080124776f726b65725f696420012c576f726b657249643c543e00014c7374616b655f62616c616e63655f64656c746118013042616c616e63654f663c543e0008280501496e637265617365732074686520726567756c617220776f726b65722f6c656164207374616b652c2064656d616e6473206120776f726b6572206f726967696e2e6d014c6f636b7320746f6b656e732066726f6d2074686520776f726b6572207374616b696e675f6163636f756e745f696420657175616c20746f206e6577207374616b652e204e6f206c696d697473206f6e20746865207374616b652e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e5077697468647261775f6170706c69636174696f6e0401386170706c69636174696f6e5f69642001344170706c69636174696f6e4964000924010157697468647261772074686520776f726b6572206170706c69636174696f6e2e2043616e20626520646f6e652062792074686520776f726b6572206f6e6c792e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e3863616e63656c5f6f70656e696e670401286f70656e696e675f69642001244f70656e696e674964000a28dc43616e63656c20616e206f70656e696e6720666f722074686520726567756c617220776f726b65722f6c65616420706f736974696f6e2e550152657175697265207369676e6564206c6561646572206f726967696e206f722074686520726f6f742028746f2063616e63656c206f70656e696e6720666f7220746865206c656164657220706f736974696f6e292e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e287365745f6275646765740401286e65775f62756467657418013042616c616e63654f663c543e000b28a0536574732061206e65772062756467657420666f722074686520776f726b696e672067726f75702e54526571756972657320726f6f74206f726967696e2e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e547570646174655f7265776172645f6163636f756e74080124776f726b65725f696420012c576f726b657249643c543e0001546e65775f7265776172645f6163636f756e745f6964000130543a3a4163636f756e744964000c2469015570646174652074686520726577617264206163636f756e74206173736f6369617465642077697468206120736574207265776172642072656c6174696f6e7368697020666f72207468652061637469766520776f726b65722e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e507570646174655f7265776172645f616d6f756e74080124776f726b65725f696420012c576f726b657249643c543e0001407265776172645f7065725f626c6f636b290101504f7074696f6e3c42616c616e63654f663c543e3e000d28c855706461746520746865207265776172642070657220626c6f636b20666f72207468652061637469766520776f726b65722e310152657175697265207369676e6564206c6561646572206f726967696e206f722074686520726f6f742028746f20757064617465206c656164657227732072657761726420616d6f756e74292e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e3c7365745f7374617475735f7465787404012c7374617475735f746578741501013c4f7074696f6e3c5665633c75383e3e000e30b4536574732061206e657720737461747573207465787420666f722074686520776f726b696e672067726f75702e54526571756972657320726f6f74206f726967696e2e002823203c7765696768743e002423232057656967687438604f20285329602077686572653a4d012d20605360206973207468652073697a65206f662074686520636f6e74656e7473206f6620607374617475735f746578746020696e206b696c6f6279746573207768656e206974206973206e6f74206e6f6e6500142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e447370656e645f66726f6d5f6275646765740c01286163636f756e745f6964000130543a3a4163636f756e744964000118616d6f756e7418013042616c616e63654f663c543e000124726174696f6e616c651501013c4f7074696f6e3c5665633c75383e3e000f28a85472616e73666572732073706563696669656420616d6f756e7420746f20616e79206163636f756e742e5c5265717569726573206c6561646572206f726967696e2e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e6466756e645f776f726b696e675f67726f75705f6275646765740c01246d656d6265725f696420012c4d656d62657249643c543e000118616d6f756e7418013042616c616e63654f663c543e000124726174696f6e616c6528011c5665633c75383e0010209846756e6420776f726b696e672067726f7570206275646765742062792061206d656d6265722e203c7765696768743e0024232320576569676874c4604f202831296020446f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d6574657273142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e2c6c6561645f72656d61726b04010c6d736728011c5665633c75383e0011284c4c6561642072656d61726b206d657373616765002823203c7765696768743e002423232057656967687438604f20284d29602077686572653a9c2d20604d60206973207468652073697a65206f6620606d73676020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e34776f726b65725f72656d61726b080124776f726b65725f696420012c576f726b657249643c543e00010c6d736728011c5665633c75383e00122854576f726b65722072656d61726b206d657373616765002823203c7765696768743e002423232057656967687438604f20284d29602077686572653a9c2d20604d60206973207468652073697a65206f6620606d73676020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e0c4c446973706174636861626c652063616c6c732e005501456163682076617269616e74206f66207468697320656e756d206d61707320746f206120646973706174636861626c652066756e6374696f6e2066726f6d20746865206173736f636961746564206d6f64756c652e7d06085070616c6c65745f776f726b696e675f67726f75701043616c6c08045400044900014c2c6164645f6f70656e696e6710012c6465736372697074696f6e28011c5665633c75383e0001306f70656e696e675f747970656503012c4f70656e696e67547970650001307374616b655f706f6c696379490301a45374616b65506f6c6963793c543a3a426c6f636b4e756d6265722c2042616c616e63654f663c543e3e0001407265776172645f7065725f626c6f636b290101504f7074696f6e3c42616c616e63654f663c543e3e00002cc44164642061206a6f62206f70656e696e6720666f72206120726567756c617220776f726b65722f6c65616420726f6c652e490152657175697265207369676e6564206c6561646572206f726967696e206f722074686520726f6f742028746f20616464206f70656e696e6720666f7220746865206c656164657220706f736974696f6e292e002823203c7765696768743e002423232057656967687438604f20284429602077686572653abc2d20604460206973207468652073697a65206f6620606465736372697074696f6e6020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e406170706c795f6f6e5f6f70656e696e67040104706903016c4170706c794f6e4f70656e696e67506172616d65746572733c543e000128684170706c79206f6e206120776f726b6572206f70656e696e672e002823203c7765696768743e002423232057656967687438604f20284429602077686572653ac42d20604460206973207468652073697a65206f662060702e6465736372697074696f6e6020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e3066696c6c5f6f70656e696e670801286f70656e696e675f69642001244f70656e696e6749640001687375636365737366756c5f6170706c69636174696f6e5f6964735101015c42547265655365743c4170706c69636174696f6e49643e000228ac46696c6c206f70656e696e6720666f722074686520726567756c61722f6c65616420706f736974696f6e2e4d0152657175697265207369676e6564206c6561646572206f726967696e206f722074686520726f6f742028746f2066696c6c206f70656e696e6720666f7220746865206c656164657220706f736974696f6e292e2823203c7765696768743e002423232057656967687438604f20284129602077686572653acc2d2060416020697320746865206c656e677468206f6620607375636365737366756c5f6170706c69636174696f6e5f69647360142d2044423a242020202d204f2841292c23203c2f7765696768743e4c7570646174655f726f6c655f6163636f756e74080124776f726b65725f696420012c576f726b657249643c543e00014c6e65775f726f6c655f6163636f756e745f6964000130543a3a4163636f756e744964000324150155706461746520746865206173736f63696174656420726f6c65206163636f756e74206f66207468652061637469766520726567756c617220776f726b65722f6c6561642e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e286c656176655f726f6c65080124776f726b65725f696420012c576f726b657249643c543e000124726174696f6e616c651501013c4f7074696f6e3c5665633c75383e3e000424904c656176652074686520726f6c65206279207468652061637469766520776f726b65722e2823203c7765696768743e002423232057656967687438604f20285229602077686572653ab42d20605260206973207468652073697a65206f662060726174696f6e616c656020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e387465726d696e6174655f726f6c650c0124776f726b65725f696420012c576f726b657249643c543e00011c70656e616c7479290101504f7074696f6e3c42616c616e63654f663c543e3e000124726174696f6e616c651501013c4f7074696f6e3c5665633c75383e3e000528a05465726d696e617465207468652061637469766520776f726b657220627920746865206c6561642e25015265717569726573207369676e6564206c6561646572206f726967696e206f722074686520726f6f742028746f207465726d696e61746520746865206c656164657220726f6c65292e2823203c7765696768743e002423232057656967687438604f20285029602077686572653ad82d20605060206973207468652073697a65206070656e616c74792e736c617368696e675f746578746020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e2c736c6173685f7374616b650c0124776f726b65725f696420012c576f726b657249643c543e00011c70656e616c747918013042616c616e63654f663c543e000124726174696f6e616c651501013c4f7074696f6e3c5665633c75383e3e00062c7d01536c61736865732074686520726567756c617220776f726b6572207374616b652c2064656d616e64732061206c6561646572206f726967696e2e204e6f206c696d6974732c206e6f20616374696f6e73206f6e207a65726f207374616b652e3d01496620736c617368696e672062616c616e63652067726561746572207468616e20746865206578697374696e67207374616b65202d207374616b6520697320736c617368656420746f207a65726f2e19015265717569726573207369676e6564206c6561646572206f726967696e206f722074686520726f6f742028746f20736c61736820746865206c6561646572207374616b65292e2823203c7765696768743e002423232057656967687438604f20285029602077686572653ae82d20605060206973207468652073697a65206f66206070656e616c6974792e736c617368696e675f746578746020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e3864656372656173655f7374616b65080124776f726b65725f696420012c576f726b657249643c543e00014c7374616b655f62616c616e63655f64656c746118013042616c616e63654f663c543e00073021014465637265617365732074686520726567756c617220776f726b65722f6c656164207374616b6520616e642072657475726e73207468652072656d61696e64657220746f207468653901776f726b6572207374616b696e675f6163636f756e745f69642e2043616e2062652064656372656173656420746f207a65726f2c206e6f20616374696f6e73206f6e207a65726f207374616b652e944163636570747320746865207374616b6520616d6f756e7420746f2064656372656173652e25015265717569726573207369676e6564206c6561646572206f726967696e206f722074686520726f6f742028746f20646563726561736520746865206c6561646572207374616b65292e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e38696e6372656173655f7374616b65080124776f726b65725f696420012c576f726b657249643c543e00014c7374616b655f62616c616e63655f64656c746118013042616c616e63654f663c543e0008280501496e637265617365732074686520726567756c617220776f726b65722f6c656164207374616b652c2064656d616e6473206120776f726b6572206f726967696e2e6d014c6f636b7320746f6b656e732066726f6d2074686520776f726b6572207374616b696e675f6163636f756e745f696420657175616c20746f206e6577207374616b652e204e6f206c696d697473206f6e20746865207374616b652e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e5077697468647261775f6170706c69636174696f6e0401386170706c69636174696f6e5f69642001344170706c69636174696f6e4964000924010157697468647261772074686520776f726b6572206170706c69636174696f6e2e2043616e20626520646f6e652062792074686520776f726b6572206f6e6c792e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e3863616e63656c5f6f70656e696e670401286f70656e696e675f69642001244f70656e696e674964000a28dc43616e63656c20616e206f70656e696e6720666f722074686520726567756c617220776f726b65722f6c65616420706f736974696f6e2e550152657175697265207369676e6564206c6561646572206f726967696e206f722074686520726f6f742028746f2063616e63656c206f70656e696e6720666f7220746865206c656164657220706f736974696f6e292e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e287365745f6275646765740401286e65775f62756467657418013042616c616e63654f663c543e000b28a0536574732061206e65772062756467657420666f722074686520776f726b696e672067726f75702e54526571756972657320726f6f74206f726967696e2e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e547570646174655f7265776172645f6163636f756e74080124776f726b65725f696420012c576f726b657249643c543e0001546e65775f7265776172645f6163636f756e745f6964000130543a3a4163636f756e744964000c2469015570646174652074686520726577617264206163636f756e74206173736f6369617465642077697468206120736574207265776172642072656c6174696f6e7368697020666f72207468652061637469766520776f726b65722e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e507570646174655f7265776172645f616d6f756e74080124776f726b65725f696420012c576f726b657249643c543e0001407265776172645f7065725f626c6f636b290101504f7074696f6e3c42616c616e63654f663c543e3e000d28c855706461746520746865207265776172642070657220626c6f636b20666f72207468652061637469766520776f726b65722e310152657175697265207369676e6564206c6561646572206f726967696e206f722074686520726f6f742028746f20757064617465206c656164657227732072657761726420616d6f756e74292e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e3c7365745f7374617475735f7465787404012c7374617475735f746578741501013c4f7074696f6e3c5665633c75383e3e000e30b4536574732061206e657720737461747573207465787420666f722074686520776f726b696e672067726f75702e54526571756972657320726f6f74206f726967696e2e002823203c7765696768743e002423232057656967687438604f20285329602077686572653a4d012d20605360206973207468652073697a65206f662074686520636f6e74656e7473206f6620607374617475735f746578746020696e206b696c6f6279746573207768656e206974206973206e6f74206e6f6e6500142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e447370656e645f66726f6d5f6275646765740c01286163636f756e745f6964000130543a3a4163636f756e744964000118616d6f756e7418013042616c616e63654f663c543e000124726174696f6e616c651501013c4f7074696f6e3c5665633c75383e3e000f28a85472616e73666572732073706563696669656420616d6f756e7420746f20616e79206163636f756e742e5c5265717569726573206c6561646572206f726967696e2e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e6466756e645f776f726b696e675f67726f75705f6275646765740c01246d656d6265725f696420012c4d656d62657249643c543e000118616d6f756e7418013042616c616e63654f663c543e000124726174696f6e616c6528011c5665633c75383e0010209846756e6420776f726b696e672067726f7570206275646765742062792061206d656d6265722e203c7765696768743e0024232320576569676874c4604f202831296020446f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d6574657273142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e2c6c6561645f72656d61726b04010c6d736728011c5665633c75383e0011284c4c6561642072656d61726b206d657373616765002823203c7765696768743e002423232057656967687438604f20284d29602077686572653a9c2d20604d60206973207468652073697a65206f6620606d73676020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e34776f726b65725f72656d61726b080124776f726b65725f696420012c576f726b657249643c543e00010c6d736728011c5665633c75383e00122854576f726b65722072656d61726b206d657373616765002823203c7765696768743e002423232057656967687438604f20284d29602077686572653a9c2d20604d60206973207468652073697a65206f6620606d73676020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e0c4c446973706174636861626c652063616c6c732e005501456163682076617269616e74206f66207468697320656e756d206d61707320746f206120646973706174636861626c652066756e6374696f6e2066726f6d20746865206173736f636961746564206d6f64756c652e8106085070616c6c65745f776f726b696e675f67726f75701043616c6c08045400044900014c2c6164645f6f70656e696e6710012c6465736372697074696f6e28011c5665633c75383e0001306f70656e696e675f747970656503012c4f70656e696e67547970650001307374616b655f706f6c696379490301a45374616b65506f6c6963793c543a3a426c6f636b4e756d6265722c2042616c616e63654f663c543e3e0001407265776172645f7065725f626c6f636b290101504f7074696f6e3c42616c616e63654f663c543e3e00002cc44164642061206a6f62206f70656e696e6720666f72206120726567756c617220776f726b65722f6c65616420726f6c652e490152657175697265207369676e6564206c6561646572206f726967696e206f722074686520726f6f742028746f20616464206f70656e696e6720666f7220746865206c656164657220706f736974696f6e292e002823203c7765696768743e002423232057656967687438604f20284429602077686572653abc2d20604460206973207468652073697a65206f6620606465736372697074696f6e6020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e406170706c795f6f6e5f6f70656e696e67040104706903016c4170706c794f6e4f70656e696e67506172616d65746572733c543e000128684170706c79206f6e206120776f726b6572206f70656e696e672e002823203c7765696768743e002423232057656967687438604f20284429602077686572653ac42d20604460206973207468652073697a65206f662060702e6465736372697074696f6e6020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e3066696c6c5f6f70656e696e670801286f70656e696e675f69642001244f70656e696e6749640001687375636365737366756c5f6170706c69636174696f6e5f6964735101015c42547265655365743c4170706c69636174696f6e49643e000228ac46696c6c206f70656e696e6720666f722074686520726567756c61722f6c65616420706f736974696f6e2e4d0152657175697265207369676e6564206c6561646572206f726967696e206f722074686520726f6f742028746f2066696c6c206f70656e696e6720666f7220746865206c656164657220706f736974696f6e292e2823203c7765696768743e002423232057656967687438604f20284129602077686572653acc2d2060416020697320746865206c656e677468206f6620607375636365737366756c5f6170706c69636174696f6e5f69647360142d2044423a242020202d204f2841292c23203c2f7765696768743e4c7570646174655f726f6c655f6163636f756e74080124776f726b65725f696420012c576f726b657249643c543e00014c6e65775f726f6c655f6163636f756e745f6964000130543a3a4163636f756e744964000324150155706461746520746865206173736f63696174656420726f6c65206163636f756e74206f66207468652061637469766520726567756c617220776f726b65722f6c6561642e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e286c656176655f726f6c65080124776f726b65725f696420012c576f726b657249643c543e000124726174696f6e616c651501013c4f7074696f6e3c5665633c75383e3e000424904c656176652074686520726f6c65206279207468652061637469766520776f726b65722e2823203c7765696768743e002423232057656967687438604f20285229602077686572653ab42d20605260206973207468652073697a65206f662060726174696f6e616c656020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e387465726d696e6174655f726f6c650c0124776f726b65725f696420012c576f726b657249643c543e00011c70656e616c7479290101504f7074696f6e3c42616c616e63654f663c543e3e000124726174696f6e616c651501013c4f7074696f6e3c5665633c75383e3e000528a05465726d696e617465207468652061637469766520776f726b657220627920746865206c6561642e25015265717569726573207369676e6564206c6561646572206f726967696e206f722074686520726f6f742028746f207465726d696e61746520746865206c656164657220726f6c65292e2823203c7765696768743e002423232057656967687438604f20285029602077686572653ad82d20605060206973207468652073697a65206070656e616c74792e736c617368696e675f746578746020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e2c736c6173685f7374616b650c0124776f726b65725f696420012c576f726b657249643c543e00011c70656e616c747918013042616c616e63654f663c543e000124726174696f6e616c651501013c4f7074696f6e3c5665633c75383e3e00062c7d01536c61736865732074686520726567756c617220776f726b6572207374616b652c2064656d616e64732061206c6561646572206f726967696e2e204e6f206c696d6974732c206e6f20616374696f6e73206f6e207a65726f207374616b652e3d01496620736c617368696e672062616c616e63652067726561746572207468616e20746865206578697374696e67207374616b65202d207374616b6520697320736c617368656420746f207a65726f2e19015265717569726573207369676e6564206c6561646572206f726967696e206f722074686520726f6f742028746f20736c61736820746865206c6561646572207374616b65292e2823203c7765696768743e002423232057656967687438604f20285029602077686572653ae82d20605060206973207468652073697a65206f66206070656e616c6974792e736c617368696e675f746578746020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e3864656372656173655f7374616b65080124776f726b65725f696420012c576f726b657249643c543e00014c7374616b655f62616c616e63655f64656c746118013042616c616e63654f663c543e00073021014465637265617365732074686520726567756c617220776f726b65722f6c656164207374616b6520616e642072657475726e73207468652072656d61696e64657220746f207468653901776f726b6572207374616b696e675f6163636f756e745f69642e2043616e2062652064656372656173656420746f207a65726f2c206e6f20616374696f6e73206f6e207a65726f207374616b652e944163636570747320746865207374616b6520616d6f756e7420746f2064656372656173652e25015265717569726573207369676e6564206c6561646572206f726967696e206f722074686520726f6f742028746f20646563726561736520746865206c6561646572207374616b65292e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e38696e6372656173655f7374616b65080124776f726b65725f696420012c576f726b657249643c543e00014c7374616b655f62616c616e63655f64656c746118013042616c616e63654f663c543e0008280501496e637265617365732074686520726567756c617220776f726b65722f6c656164207374616b652c2064656d616e6473206120776f726b6572206f726967696e2e6d014c6f636b7320746f6b656e732066726f6d2074686520776f726b6572207374616b696e675f6163636f756e745f696420657175616c20746f206e6577207374616b652e204e6f206c696d697473206f6e20746865207374616b652e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e5077697468647261775f6170706c69636174696f6e0401386170706c69636174696f6e5f69642001344170706c69636174696f6e4964000924010157697468647261772074686520776f726b6572206170706c69636174696f6e2e2043616e20626520646f6e652062792074686520776f726b6572206f6e6c792e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e3863616e63656c5f6f70656e696e670401286f70656e696e675f69642001244f70656e696e674964000a28dc43616e63656c20616e206f70656e696e6720666f722074686520726567756c617220776f726b65722f6c65616420706f736974696f6e2e550152657175697265207369676e6564206c6561646572206f726967696e206f722074686520726f6f742028746f2063616e63656c206f70656e696e6720666f7220746865206c656164657220706f736974696f6e292e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e287365745f6275646765740401286e65775f62756467657418013042616c616e63654f663c543e000b28a0536574732061206e65772062756467657420666f722074686520776f726b696e672067726f75702e54526571756972657320726f6f74206f726967696e2e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e547570646174655f7265776172645f6163636f756e74080124776f726b65725f696420012c576f726b657249643c543e0001546e65775f7265776172645f6163636f756e745f6964000130543a3a4163636f756e744964000c2469015570646174652074686520726577617264206163636f756e74206173736f6369617465642077697468206120736574207265776172642072656c6174696f6e7368697020666f72207468652061637469766520776f726b65722e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e507570646174655f7265776172645f616d6f756e74080124776f726b65725f696420012c576f726b657249643c543e0001407265776172645f7065725f626c6f636b290101504f7074696f6e3c42616c616e63654f663c543e3e000d28c855706461746520746865207265776172642070657220626c6f636b20666f72207468652061637469766520776f726b65722e310152657175697265207369676e6564206c6561646572206f726967696e206f722074686520726f6f742028746f20757064617465206c656164657227732072657761726420616d6f756e74292e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e3c7365745f7374617475735f7465787404012c7374617475735f746578741501013c4f7074696f6e3c5665633c75383e3e000e30b4536574732061206e657720737461747573207465787420666f722074686520776f726b696e672067726f75702e54526571756972657320726f6f74206f726967696e2e002823203c7765696768743e002423232057656967687438604f20285329602077686572653a4d012d20605360206973207468652073697a65206f662074686520636f6e74656e7473206f6620607374617475735f746578746020696e206b696c6f6279746573207768656e206974206973206e6f74206e6f6e6500142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e447370656e645f66726f6d5f6275646765740c01286163636f756e745f6964000130543a3a4163636f756e744964000118616d6f756e7418013042616c616e63654f663c543e000124726174696f6e616c651501013c4f7074696f6e3c5665633c75383e3e000f28a85472616e73666572732073706563696669656420616d6f756e7420746f20616e79206163636f756e742e5c5265717569726573206c6561646572206f726967696e2e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e6466756e645f776f726b696e675f67726f75705f6275646765740c01246d656d6265725f696420012c4d656d62657249643c543e000118616d6f756e7418013042616c616e63654f663c543e000124726174696f6e616c6528011c5665633c75383e0010209846756e6420776f726b696e672067726f7570206275646765742062792061206d656d6265722e203c7765696768743e0024232320576569676874c4604f202831296020446f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d6574657273142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e2c6c6561645f72656d61726b04010c6d736728011c5665633c75383e0011284c4c6561642072656d61726b206d657373616765002823203c7765696768743e002423232057656967687438604f20284d29602077686572653a9c2d20604d60206973207468652073697a65206f6620606d73676020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e34776f726b65725f72656d61726b080124776f726b65725f696420012c576f726b657249643c543e00010c6d736728011c5665633c75383e00122854576f726b65722072656d61726b206d657373616765002823203c7765696768743e002423232057656967687438604f20284d29602077686572653a9c2d20604d60206973207468652073697a65206f6620606d73676020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e0c4c446973706174636861626c652063616c6c732e005501456163682076617269616e74206f66207468697320656e756d206d61707320746f206120646973706174636861626c652066756e6374696f6e2066726f6d20746865206173736f636961746564206d6f64756c652e8506085070616c6c65745f776f726b696e675f67726f75701043616c6c08045400044900014c2c6164645f6f70656e696e6710012c6465736372697074696f6e28011c5665633c75383e0001306f70656e696e675f747970656503012c4f70656e696e67547970650001307374616b655f706f6c696379490301a45374616b65506f6c6963793c543a3a426c6f636b4e756d6265722c2042616c616e63654f663c543e3e0001407265776172645f7065725f626c6f636b290101504f7074696f6e3c42616c616e63654f663c543e3e00002cc44164642061206a6f62206f70656e696e6720666f72206120726567756c617220776f726b65722f6c65616420726f6c652e490152657175697265207369676e6564206c6561646572206f726967696e206f722074686520726f6f742028746f20616464206f70656e696e6720666f7220746865206c656164657220706f736974696f6e292e002823203c7765696768743e002423232057656967687438604f20284429602077686572653abc2d20604460206973207468652073697a65206f6620606465736372697074696f6e6020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e406170706c795f6f6e5f6f70656e696e67040104706903016c4170706c794f6e4f70656e696e67506172616d65746572733c543e000128684170706c79206f6e206120776f726b6572206f70656e696e672e002823203c7765696768743e002423232057656967687438604f20284429602077686572653ac42d20604460206973207468652073697a65206f662060702e6465736372697074696f6e6020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e3066696c6c5f6f70656e696e670801286f70656e696e675f69642001244f70656e696e6749640001687375636365737366756c5f6170706c69636174696f6e5f6964735101015c42547265655365743c4170706c69636174696f6e49643e000228ac46696c6c206f70656e696e6720666f722074686520726567756c61722f6c65616420706f736974696f6e2e4d0152657175697265207369676e6564206c6561646572206f726967696e206f722074686520726f6f742028746f2066696c6c206f70656e696e6720666f7220746865206c656164657220706f736974696f6e292e2823203c7765696768743e002423232057656967687438604f20284129602077686572653acc2d2060416020697320746865206c656e677468206f6620607375636365737366756c5f6170706c69636174696f6e5f69647360142d2044423a242020202d204f2841292c23203c2f7765696768743e4c7570646174655f726f6c655f6163636f756e74080124776f726b65725f696420012c576f726b657249643c543e00014c6e65775f726f6c655f6163636f756e745f6964000130543a3a4163636f756e744964000324150155706461746520746865206173736f63696174656420726f6c65206163636f756e74206f66207468652061637469766520726567756c617220776f726b65722f6c6561642e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e286c656176655f726f6c65080124776f726b65725f696420012c576f726b657249643c543e000124726174696f6e616c651501013c4f7074696f6e3c5665633c75383e3e000424904c656176652074686520726f6c65206279207468652061637469766520776f726b65722e2823203c7765696768743e002423232057656967687438604f20285229602077686572653ab42d20605260206973207468652073697a65206f662060726174696f6e616c656020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e387465726d696e6174655f726f6c650c0124776f726b65725f696420012c576f726b657249643c543e00011c70656e616c7479290101504f7074696f6e3c42616c616e63654f663c543e3e000124726174696f6e616c651501013c4f7074696f6e3c5665633c75383e3e000528a05465726d696e617465207468652061637469766520776f726b657220627920746865206c6561642e25015265717569726573207369676e6564206c6561646572206f726967696e206f722074686520726f6f742028746f207465726d696e61746520746865206c656164657220726f6c65292e2823203c7765696768743e002423232057656967687438604f20285029602077686572653ad82d20605060206973207468652073697a65206070656e616c74792e736c617368696e675f746578746020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e2c736c6173685f7374616b650c0124776f726b65725f696420012c576f726b657249643c543e00011c70656e616c747918013042616c616e63654f663c543e000124726174696f6e616c651501013c4f7074696f6e3c5665633c75383e3e00062c7d01536c61736865732074686520726567756c617220776f726b6572207374616b652c2064656d616e64732061206c6561646572206f726967696e2e204e6f206c696d6974732c206e6f20616374696f6e73206f6e207a65726f207374616b652e3d01496620736c617368696e672062616c616e63652067726561746572207468616e20746865206578697374696e67207374616b65202d207374616b6520697320736c617368656420746f207a65726f2e19015265717569726573207369676e6564206c6561646572206f726967696e206f722074686520726f6f742028746f20736c61736820746865206c6561646572207374616b65292e2823203c7765696768743e002423232057656967687438604f20285029602077686572653ae82d20605060206973207468652073697a65206f66206070656e616c6974792e736c617368696e675f746578746020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e3864656372656173655f7374616b65080124776f726b65725f696420012c576f726b657249643c543e00014c7374616b655f62616c616e63655f64656c746118013042616c616e63654f663c543e00073021014465637265617365732074686520726567756c617220776f726b65722f6c656164207374616b6520616e642072657475726e73207468652072656d61696e64657220746f207468653901776f726b6572207374616b696e675f6163636f756e745f69642e2043616e2062652064656372656173656420746f207a65726f2c206e6f20616374696f6e73206f6e207a65726f207374616b652e944163636570747320746865207374616b6520616d6f756e7420746f2064656372656173652e25015265717569726573207369676e6564206c6561646572206f726967696e206f722074686520726f6f742028746f20646563726561736520746865206c6561646572207374616b65292e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e38696e6372656173655f7374616b65080124776f726b65725f696420012c576f726b657249643c543e00014c7374616b655f62616c616e63655f64656c746118013042616c616e63654f663c543e0008280501496e637265617365732074686520726567756c617220776f726b65722f6c656164207374616b652c2064656d616e6473206120776f726b6572206f726967696e2e6d014c6f636b7320746f6b656e732066726f6d2074686520776f726b6572207374616b696e675f6163636f756e745f696420657175616c20746f206e6577207374616b652e204e6f206c696d697473206f6e20746865207374616b652e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e5077697468647261775f6170706c69636174696f6e0401386170706c69636174696f6e5f69642001344170706c69636174696f6e4964000924010157697468647261772074686520776f726b6572206170706c69636174696f6e2e2043616e20626520646f6e652062792074686520776f726b6572206f6e6c792e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e3863616e63656c5f6f70656e696e670401286f70656e696e675f69642001244f70656e696e674964000a28dc43616e63656c20616e206f70656e696e6720666f722074686520726567756c617220776f726b65722f6c65616420706f736974696f6e2e550152657175697265207369676e6564206c6561646572206f726967696e206f722074686520726f6f742028746f2063616e63656c206f70656e696e6720666f7220746865206c656164657220706f736974696f6e292e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e287365745f6275646765740401286e65775f62756467657418013042616c616e63654f663c543e000b28a0536574732061206e65772062756467657420666f722074686520776f726b696e672067726f75702e54526571756972657320726f6f74206f726967696e2e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e547570646174655f7265776172645f6163636f756e74080124776f726b65725f696420012c576f726b657249643c543e0001546e65775f7265776172645f6163636f756e745f6964000130543a3a4163636f756e744964000c2469015570646174652074686520726577617264206163636f756e74206173736f6369617465642077697468206120736574207265776172642072656c6174696f6e7368697020666f72207468652061637469766520776f726b65722e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e507570646174655f7265776172645f616d6f756e74080124776f726b65725f696420012c576f726b657249643c543e0001407265776172645f7065725f626c6f636b290101504f7074696f6e3c42616c616e63654f663c543e3e000d28c855706461746520746865207265776172642070657220626c6f636b20666f72207468652061637469766520776f726b65722e310152657175697265207369676e6564206c6561646572206f726967696e206f722074686520726f6f742028746f20757064617465206c656164657227732072657761726420616d6f756e74292e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e3c7365745f7374617475735f7465787404012c7374617475735f746578741501013c4f7074696f6e3c5665633c75383e3e000e30b4536574732061206e657720737461747573207465787420666f722074686520776f726b696e672067726f75702e54526571756972657320726f6f74206f726967696e2e002823203c7765696768743e002423232057656967687438604f20285329602077686572653a4d012d20605360206973207468652073697a65206f662074686520636f6e74656e7473206f6620607374617475735f746578746020696e206b696c6f6279746573207768656e206974206973206e6f74206e6f6e6500142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e447370656e645f66726f6d5f6275646765740c01286163636f756e745f6964000130543a3a4163636f756e744964000118616d6f756e7418013042616c616e63654f663c543e000124726174696f6e616c651501013c4f7074696f6e3c5665633c75383e3e000f28a85472616e73666572732073706563696669656420616d6f756e7420746f20616e79206163636f756e742e5c5265717569726573206c6561646572206f726967696e2e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e6466756e645f776f726b696e675f67726f75705f6275646765740c01246d656d6265725f696420012c4d656d62657249643c543e000118616d6f756e7418013042616c616e63654f663c543e000124726174696f6e616c6528011c5665633c75383e0010209846756e6420776f726b696e672067726f7570206275646765742062792061206d656d6265722e203c7765696768743e0024232320576569676874c4604f202831296020446f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d6574657273142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e2c6c6561645f72656d61726b04010c6d736728011c5665633c75383e0011284c4c6561642072656d61726b206d657373616765002823203c7765696768743e002423232057656967687438604f20284d29602077686572653a9c2d20604d60206973207468652073697a65206f6620606d73676020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e34776f726b65725f72656d61726b080124776f726b65725f696420012c576f726b657249643c543e00010c6d736728011c5665633c75383e00122854576f726b65722072656d61726b206d657373616765002823203c7765696768743e002423232057656967687438604f20284d29602077686572653a9c2d20604d60206973207468652073697a65206f6620606d73676020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e0c4c446973706174636861626c652063616c6c732e005501456163682076617269616e74206f66207468697320656e756d206d61707320746f206120646973706174636861626c652066756e6374696f6e2066726f6d20746865206173736f636961746564206d6f64756c652e890608586a6f7973747265616d5f6e6f64655f72756e74696d65304f726967696e43616c6c65720001081873797374656d04008d0601746672616d655f73797374656d3a3a4f726967696e3c52756e74696d653e00000010566f69640400910601110173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a566f6964000100008d060c346672616d655f737570706f7274206469737061746368245261774f726967696e04244163636f756e7449640100010c10526f6f74000000185369676e656404000001244163636f756e744964000100104e6f6e65000200009106081c73705f636f726510566f69640001000095060c3870616c6c65745f7574696c6974791870616c6c6574144572726f7204045400010430546f6f4d616e7943616c6c730000045c546f6f206d616e792063616c6c7320626174636865642e04ad010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f76332f72756e74696d652f6576656e74732d616e642d6572726f7273290a0909096f6620746869732070616c6c65742e0a090909990610346672616d655f737570706f72741c73746f72616765407765616b5f626f756e6465645f766563385765616b426f756e646564566563080454019d06045300000400a10601185665633c543e00009d060000040831042000a1060000029d0600a50610346672616d655f737570706f72741c73746f726167652c626f756e6465645f76656328426f756e6465645665630804540104045300000400a90601185665633c543e0000a9060000020400ad0604184f7074696f6e04045401b1060108104e6f6e6500000010536f6d650400b1060000010000b1060c4473705f636f6e73656e7375735f626162651c646967657374732450726544696765737400010c1c5072696d6172790400b50601405072696d617279507265446967657374000100385365636f6e64617279506c61696e0400b906015c5365636f6e64617279506c61696e507265446967657374000200305365636f6e646172795652460400bd0601545365636f6e6461727956524650726544696765737400030000b5060c4473705f636f6e73656e7375735f626162651c64696765737473405072696d617279507265446967657374000010013c617574686f726974795f696e64657810015473757065723a3a417574686f72697479496e646578000110736c6f7435040110536c6f740001287672665f6f75747075740401245652464f75747075740001247672665f70726f6f669505012056524650726f6f660000b9060c4473705f636f6e73656e7375735f626162651c646967657374735c5365636f6e64617279506c61696e507265446967657374000008013c617574686f726974795f696e64657810015473757065723a3a417574686f72697479496e646578000110736c6f7435040110536c6f740000bd060c4473705f636f6e73656e7375735f626162651c64696765737473545365636f6e64617279565246507265446967657374000010013c617574686f726974795f696e64657810015473757065723a3a417574686f72697479496e646578000110736c6f7435040110536c6f740001287672665f6f75747075740401245652464f75747075740001247672665f70726f6f669505012056524650726f6f660000c10604184f7074696f6e04045401040108104e6f6e6500000010536f6d650400040000010000c506084473705f636f6e73656e7375735f62616265584261626545706f6368436f6e66696775726174696f6e00000801046361030128287536342c2075363429000134616c6c6f7765645f736c6f747341040130416c6c6f776564536c6f74730000c9060c2c70616c6c65745f626162651870616c6c6574144572726f7204045400011060496e76616c696445717569766f636174696f6e50726f6f660000043101416e2065717569766f636174696f6e2070726f6f662070726f76696465642061732070617274206f6620616e2065717569766f636174696f6e207265706f727420697320696e76616c69642e60496e76616c69644b65794f776e65727368697050726f6f66000104310141206b6579206f776e6572736869702070726f6f662070726f76696465642061732070617274206f6620616e2065717569766f636174696f6e207265706f727420697320696e76616c69642e584475706c69636174654f6666656e63655265706f727400020415014120676976656e2065717569766f636174696f6e207265706f72742069732076616c69642062757420616c72656164792070726576696f75736c79207265706f727465642e50496e76616c6964436f6e66696775726174696f6e0003048c5375626d697474656420636f6e66696775726174696f6e20697320696e76616c69642e04ad010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f76332f72756e74696d652f6576656e74732d616e642d6572726f7273290a0909096f6620746869732070616c6c65742e0a090909cd06000002d10600d106084470616c6c65745f617574686f727368697038556e636c65456e7472794974656d0c2c426c6f636b4e756d62657201101048617368012418417574686f72010001083c496e636c7573696f6e486569676874040010012c426c6f636b4e756d62657200000014556e636c6508002401104861736800002d0101384f7074696f6e3c417574686f723e00010000d5060c4470616c6c65745f617574686f72736869701870616c6c6574144572726f7204045400011c48496e76616c6964556e636c65506172656e740000048854686520756e636c6520706172656e74206e6f7420696e2074686520636861696e2e40556e636c6573416c726561647953657400010480556e636c657320616c72656164792073657420696e2074686520626c6f636b2e34546f6f4d616e79556e636c657300020440546f6f206d616e7920756e636c65732e3047656e65736973556e636c650003045454686520756e636c652069732067656e657369732e30546f6f48696768556e636c650004047c54686520756e636c6520697320746f6f206869676820696e20636861696e2e50556e636c65416c7265616479496e636c756465640005047854686520756e636c6520697320616c726561647920696e636c756465642e204f6c64556e636c65000604b454686520756e636c652069736e277420726563656e7420656e6f75676820746f20626520696e636c756465642e04ad010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f76332f72756e74696d652f6576656e74732d616e642d6572726f7273290a0909096f6620746869732070616c6c65742e0a090909d90610346672616d655f737570706f72741c73746f72616765407765616b5f626f756e6465645f766563385765616b426f756e64656456656308045401dd06045300000400e50601185665633c543e0000dd06083c70616c6c65745f62616c616e6365732c42616c616e63654c6f636b041c42616c616e63650118000c01086964090401384c6f636b4964656e746966696572000118616d6f756e7418011c42616c616e636500011c726561736f6e73e106011c526561736f6e730000e106083c70616c6c65745f62616c616e6365731c526561736f6e7300010c0c466565000000104d6973630001000c416c6c00020000e506000002dd0600e90610346672616d655f737570706f72741c73746f726167652c626f756e6465645f76656328426f756e64656456656308045401ed06045300000400f10601185665633c543e0000ed06083c70616c6c65745f62616c616e6365732c52657365727665446174610844526573657276654964656e7469666965720109041c42616c616e6365011800080108696409040144526573657276654964656e746966696572000118616d6f756e7418011c42616c616e63650000f106000002ed0600f506083c70616c6c65745f62616c616e6365732052656c65617365730001081856315f305f300000001856325f305f3000010000f9060c3c70616c6c65745f62616c616e6365731870616c6c6574144572726f720804540004490001203856657374696e6742616c616e63650000049856657374696e672062616c616e636520746f6f206869676820746f2073656e642076616c7565544c69717569646974795265737472696374696f6e73000104c44163636f756e74206c6971756964697479207265737472696374696f6e732070726576656e74207769746864726177616c4c496e73756666696369656e7442616c616e63650002047442616c616e636520746f6f206c6f7720746f2073656e642076616c7565484578697374656e7469616c4465706f736974000304e856616c756520746f6f206c6f7720746f20637265617465206163636f756e742064756520746f206578697374656e7469616c206465706f736974244b656570416c6976650004048c5472616e736665722f7061796d656e7420776f756c64206b696c6c206163636f756e745c4578697374696e6756657374696e675363686564756c65000504c8412076657374696e67207363686564756c6520616c72656164792065786973747320666f722074686973206163636f756e742c446561644163636f756e740006048842656e6566696369617279206163636f756e74206d757374207072652d65786973743c546f6f4d616e795265736572766573000704ac4e756d626572206f66206e616d656420726573657276657320657863656564204d6178526573657276657304ad010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f76332f72756e74696d652f6576656e74732d616e642d6572726f7273290a0909096f6620746869732070616c6c65742e0a090909fd060c3473705f61726974686d657469632c66697865645f706f696e7424466978656455313238000004001801107531323800000107086870616c6c65745f7472616e73616374696f6e5f7061796d656e742052656c6561736573000108245631416e6369656e74000000085632000100000507089070616c6c65745f656c656374696f6e5f70726f76696465725f6d756c74695f70686173651450686173650408426e011001100c4f6666000000185369676e656400010020556e7369676e656404000907012828626f6f6c2c20426e2900020024456d657267656e6379000300000907000004088810000d07089070616c6c65745f656c656374696f6e5f70726f76696465725f6d756c74695f7068617365345265616479536f6c7574696f6e0404410100000c0120737570706f7274733905012c537570706f7274733c413e00011473636f72652d050134456c656374696f6e53636f726500011c636f6d7075746584013c456c656374696f6e436f6d7075746500001107089070616c6c65745f656c656374696f6e5f70726f76696465725f6d756c74695f706861736534526f756e64536e617073686f740404540000080118766f746572731507013c5665633c566f7465724f663c543e3e00011c74617267657473510501445665633c543a3a4163636f756e7449643e0000150700000219070019070000040c00201d07001d0710346672616d655f737570706f72741c73746f726167652c626f756e6465645f76656328426f756e6465645665630804540100045300000400510501185665633c543e0000210710346672616d655f737570706f72741c73746f7261676544626f756e6465645f62747265655f6d61703c426f756e64656442547265654d61700c044b012d05045601100453000004002507013842547265654d61703c4b2c20563e00002507042042547265654d617008044b012d0504560110000400290700000029070000022d07002d07000004082d05100031070c9070616c6c65745f656c656374696f6e5f70726f76696465725f6d756c74695f7068617365187369676e6564405369676e65645375626d697373696f6e0c244163636f756e74496401001c42616c616e6365011820536f6c7574696f6e0161040010010c77686f0001244163636f756e74496400011c6465706f73697418011c42616c616e63650001307261775f736f6c7574696f6e5d040154526177536f6c7574696f6e3c536f6c7574696f6e3e00012063616c6c5f66656518011c42616c616e6365000035070c9070616c6c65745f656c656374696f6e5f70726f76696465725f6d756c74695f70686173651870616c6c6574144572726f720404540001306850726544697370617463684561726c795375626d697373696f6e000004645375626d697373696f6e2077617320746f6f206561726c792e6c507265446973706174636857726f6e6757696e6e6572436f756e740001048857726f6e67206e756d626572206f662077696e6e6572732070726573656e7465642e6450726544697370617463685765616b5375626d697373696f6e000204905375626d697373696f6e2077617320746f6f207765616b2c2073636f72652d776973652e3c5369676e6564517565756546756c6c0003044901546865207175657565207761732066756c6c2c20616e642074686520736f6c7574696f6e20776173206e6f7420626574746572207468616e20616e79206f6620746865206578697374696e67206f6e65732e585369676e656443616e6e6f745061794465706f73697400040494546865206f726967696e206661696c656420746f2070617920746865206465706f7369742e505369676e6564496e76616c69645769746e657373000504a05769746e657373206461746120746f20646973706174636861626c6520697320696e76616c69642e4c5369676e6564546f6f4d756368576569676874000604b8546865207369676e6564207375626d697373696f6e20636f6e73756d657320746f6f206d756368207765696768743c4f637743616c6c57726f6e67457261000704984f4357207375626d697474656420736f6c7574696f6e20666f722077726f6e6720726f756e645c4d697373696e67536e617073686f744d65746164617461000804a8536e617073686f74206d657461646174612073686f756c6420657869737420627574206469646e27742e58496e76616c69645375626d697373696f6e496e646578000904d06053656c663a3a696e736572745f7375626d697373696f6e602072657475726e656420616e20696e76616c696420696e6465782e3843616c6c4e6f74416c6c6f776564000a04985468652063616c6c206973206e6f7420616c6c6f776564206174207468697320706f696e742e3846616c6c6261636b4661696c6564000b044c5468652066616c6c6261636b206661696c6564040d014572726f72206f66207468652070616c6c657420746861742063616e2062652072657475726e656420696e20726573706f6e736520746f20646973706174636865732e3907083870616c6c65745f7374616b696e67345374616b696e674c656467657204045400001401147374617368000130543a3a4163636f756e744964000114746f74616cd0013042616c616e63654f663c543e000118616374697665d0013042616c616e63654f663c543e000124756e6c6f636b696e673d0701e4426f756e6465645665633c556e6c6f636b4368756e6b3c42616c616e63654f663c543e3e2c204d6178556e6c6f636b696e674368756e6b733e00013c636c61696d65645f72657761726473590501345665633c457261496e6465783e00003d0710346672616d655f737570706f72741c73746f726167652c626f756e6465645f76656328426f756e646564566563080454014107045300000400450701185665633c543e00004107083870616c6c65745f7374616b696e672c556e6c6f636b4368756e6b041c42616c616e636501180008011476616c7565d0011c42616c616e636500010c657261cd030120457261496e646578000045070000024107004907083870616c6c65745f7374616b696e672c4e6f6d696e6174696f6e7304045400000c011c746172676574731d0701ac426f756e6465645665633c543a3a4163636f756e7449642c20543a3a4d61784e6f6d696e6174696f6e733e0001307375626d69747465645f696e100120457261496e64657800012873757070726573736564880110626f6f6c00004d07083870616c6c65745f7374616b696e6734416374697665457261496e666f0000080114696e646578100120457261496e64657800011473746172741901012c4f7074696f6e3c7536343e00005107000004081000005507083870616c6c65745f7374616b696e673c457261526577617264506f696e747304244163636f756e744964010000080114746f74616c10012c526577617264506f696e74000128696e646976696475616c5907018042547265654d61703c4163636f756e7449642c20526577617264506f696e743e00005907042042547265654d617008044b0100045601100004005d070000005d070000026107006107000004080010006507083870616c6c65745f7374616b696e671c466f7263696e67000110284e6f74466f7263696e6700000020466f7263654e657700010024466f7263654e6f6e650002002c466f726365416c776179730003000069070000026d07006d07083870616c6c65745f7374616b696e6738556e6170706c696564536c61736808244163636f756e74496401001c42616c616e636501180014012476616c696461746f720001244163636f756e74496400010c6f776e18011c42616c616e63650001186f7468657273450501645665633c284163636f756e7449642c2042616c616e6365293e0001247265706f7274657273510501385665633c4163636f756e7449643e0001187061796f757418011c42616c616e636500007107000004089c180075070c3870616c6c65745f7374616b696e6720736c617368696e6734536c617368696e675370616e7300001001287370616e5f696e6465781001245370616e496e6465780001286c6173745f7374617274100120457261496e6465780001486c6173745f6e6f6e7a65726f5f736c617368100120457261496e6465780001147072696f72590501345665633c457261496e6465783e000079070c3870616c6c65745f7374616b696e6720736c617368696e67285370616e5265636f7264041c42616c616e636501180008011c736c617368656418011c42616c616e6365000120706169645f6f757418011c42616c616e636500007d070000028107008107000004081088008507083870616c6c65745f7374616b696e672052656c65617365730001243456315f305f30416e6369656e740000001856325f305f300001001856335f305f300002001856345f305f300003001856355f305f300004001856365f305f300005001856375f305f300006001856385f305f300007001856395f305f30000800008907103870616c6c65745f7374616b696e671870616c6c65741870616c6c6574144572726f72040454000164344e6f74436f6e74726f6c6c6572000004644e6f74206120636f6e74726f6c6c6572206163636f756e742e204e6f745374617368000104504e6f742061207374617368206163636f756e742e34416c7265616479426f6e64656400020460537461736820697320616c726561647920626f6e6465642e34416c726561647950616972656400030474436f6e74726f6c6c657220697320616c7265616479207061697265642e30456d7074795461726765747300040460546172676574732063616e6e6f7420626520656d7074792e384475706c6963617465496e646578000504404475706c696361746520696e6465782e44496e76616c6964536c617368496e64657800060484536c617368207265636f726420696e646578206f7574206f6620626f756e64732e40496e73756666696369656e74426f6e6400070c590143616e6e6f74206861766520612076616c696461746f72206f72206e6f6d696e61746f7220726f6c652c20776974682076616c7565206c657373207468616e20746865206d696e696d756d20646566696e65642062793d01676f7665726e616e6365202873656520604d696e56616c696461746f72426f6e646020616e6420604d696e4e6f6d696e61746f72426f6e6460292e20496620756e626f6e64696e67206973207468651501696e74656e74696f6e2c20606368696c6c6020666972737420746f2072656d6f7665206f6e65277320726f6c652061732076616c696461746f722f6e6f6d696e61746f722e304e6f4d6f72654368756e6b730008049043616e206e6f74207363686564756c65206d6f726520756e6c6f636b206368756e6b732e344e6f556e6c6f636b4368756e6b000904a043616e206e6f74207265626f6e6420776974686f757420756e6c6f636b696e67206368756e6b732e3046756e646564546172676574000a04c8417474656d7074696e6720746f2074617267657420612073746173682074686174207374696c6c206861732066756e64732e48496e76616c6964457261546f526577617264000b0458496e76616c69642065726120746f207265776172642e68496e76616c69644e756d6265724f664e6f6d696e6174696f6e73000c0478496e76616c6964206e756d626572206f66206e6f6d696e6174696f6e732e484e6f74536f72746564416e64556e69717565000d04804974656d7320617265206e6f7420736f7274656420616e6420756e697175652e38416c7265616479436c61696d6564000e0409015265776172647320666f72207468697320657261206861766520616c7265616479206265656e20636c61696d656420666f7220746869732076616c696461746f722e54496e636f7272656374486973746f72794465707468000f04c0496e636f72726563742070726576696f757320686973746f727920646570746820696e7075742070726f76696465642e58496e636f7272656374536c617368696e675370616e73001004b0496e636f7272656374206e756d626572206f6620736c617368696e67207370616e732070726f76696465642e2042616453746174650011043901496e7465726e616c20737461746520686173206265636f6d6520736f6d65686f7720636f7272757074656420616e6420746865206f7065726174696f6e2063616e6e6f7420636f6e74696e75652e38546f6f4d616e795461726765747300120494546f6f206d616e79206e6f6d696e6174696f6e207461726765747320737570706c6965642e244261645461726765740013043d0141206e6f6d696e6174696f6e207461726765742077617320737570706c69656420746861742077617320626c6f636b6564206f72206f7468657277697365206e6f7420612076616c696461746f722e4043616e6e6f744368696c6c4f74686572001404550154686520757365722068617320656e6f75676820626f6e6420616e6420746875732063616e6e6f74206265206368696c6c656420666f72636566756c6c7920627920616e2065787465726e616c20706572736f6e2e44546f6f4d616e794e6f6d696e61746f72730015084d0154686572652061726520746f6f206d616e79206e6f6d696e61746f727320696e207468652073797374656d2e20476f7665726e616e6365206e6565647320746f2061646a75737420746865207374616b696e67b473657474696e677320746f206b656570207468696e6773207361666520666f72207468652072756e74696d652e44546f6f4d616e7956616c696461746f72730016084d0154686572652061726520746f6f206d616e792076616c696461746f727320696e207468652073797374656d2e20476f7665726e616e6365206e6565647320746f2061646a75737420746865207374616b696e67b473657474696e677320746f206b656570207468696e6773207361666520666f72207468652072756e74696d652e40436f6d6d697373696f6e546f6f4c6f77001704e0436f6d6d697373696f6e20697320746f6f206c6f772e204d757374206265206174206c6561737420604d696e436f6d6d697373696f6e602e44426f6e64696e6752657374726963746564001804e045787465726e616c207265737472696374696f6e2070726576656e747320626f6e64696e67207769746820676976656e206163636f756e7404ad010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f76332f72756e74696d652f6576656e74732d616e642d6572726f7273290a0909096f6620746869732070616c6c65742e0a0909098d07000002910700910700000408007105009507000004089907280099070c1c73705f636f72651863727970746f244b65795479706549640000040038011c5b75383b20345d00009d070c3870616c6c65745f73657373696f6e1870616c6c6574144572726f7204045400011430496e76616c696450726f6f6600000460496e76616c6964206f776e6572736869702070726f6f662e5c4e6f4173736f63696174656456616c696461746f7249640001049c4e6f206173736f6369617465642076616c696461746f7220494420666f72206163636f756e742e344475706c6963617465644b65790002046452656769737465726564206475706c6963617465206b65792e184e6f4b657973000304a44e6f206b65797320617265206173736f63696174656420776974682074686973206163636f756e742e244e6f4163636f756e7400040419014b65792073657474696e67206163636f756e74206973206e6f74206c6976652c20736f206974277320696d706f737369626c6520746f206173736f6369617465206b6579732e04744572726f7220666f72207468652073657373696f6e2070616c6c65742ea10700000408241000a507083870616c6c65745f6772616e6470612c53746f726564537461746504044e01100110104c6976650000003050656e64696e6750617573650801307363686564756c65645f61741001044e00011464656c61791001044e000100185061757365640002003450656e64696e67526573756d650801307363686564756c65645f61741001044e00011464656c61791001044e00030000a907083870616c6c65745f6772616e6470614c53746f72656450656e64696e674368616e676508044e0110144c696d697400001001307363686564756c65645f61741001044e00011464656c61791001044e0001406e6578745f617574686f726974696573ad07016c426f756e646564417574686f726974794c6973743c4c696d69743e000118666f72636564e90101244f7074696f6e3c4e3e0000ad0710346672616d655f737570706f72741c73746f72616765407765616b5f626f756e6465645f766563385765616b426f756e64656456656308045401ac045300000400a801185665633c543e0000b1070c3870616c6c65745f6772616e6470611870616c6c6574144572726f7204045400011c2c50617573654661696c65640000080501417474656d707420746f207369676e616c204752414e445041207061757365207768656e2074686520617574686f72697479207365742069736e2774206c697665a42865697468657220706175736564206f7220616c72656164792070656e64696e67207061757365292e30526573756d654661696c65640001081101417474656d707420746f207369676e616c204752414e44504120726573756d65207768656e2074686520617574686f72697479207365742069736e277420706175736564a028656974686572206c697665206f7220616c72656164792070656e64696e6720726573756d65292e344368616e676550656e64696e67000204e8417474656d707420746f207369676e616c204752414e445041206368616e67652077697468206f6e6520616c72656164792070656e64696e672e1c546f6f536f6f6e000304bc43616e6e6f74207369676e616c20666f72636564206368616e676520736f20736f6f6e206166746572206c6173742e60496e76616c69644b65794f776e65727368697050726f6f66000404310141206b6579206f776e6572736869702070726f6f662070726f76696465642061732070617274206f6620616e2065717569766f636174696f6e207265706f727420697320696e76616c69642e60496e76616c696445717569766f636174696f6e50726f6f660005043101416e2065717569766f636174696f6e2070726f6f662070726f76696465642061732070617274206f6620616e2065717569766f636174696f6e207265706f727420697320696e76616c69642e584475706c69636174654f6666656e63655265706f727400060415014120676976656e2065717569766f636174696f6e207265706f72742069732076616c69642062757420616c72656164792070726576696f75736c79207265706f727465642e04ad010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f76332f72756e74696d652f6576656e74732d616e642d6572726f7273290a0909096f6620746869732070616c6c65742e0a090909b50710346672616d655f737570706f72741c73746f72616765407765616b5f626f756e6465645f766563385765616b426f756e646564566563080454017505045300000400b90701185665633c543e0000b907000002750500bd0710346672616d655f737570706f72741c73746f72616765407765616b5f626f756e6465645f766563385765616b426f756e64656456656308045401bc045300000400c10701185665633c543e0000c107000002bc00c50710346672616d655f737570706f727418747261697473106d69736334577261707065724f706171756504045401c907000800cd03000000c9070104540000c907084070616c6c65745f696d5f6f6e6c696e6564426f756e6465644f70617175654e6574776f726b53746174650c4c506565724964456e636f64696e674c696d697400584d756c746941646472456e636f64696e674c696d697400384164647265737365734c696d6974000008011c706565725f6964cd07019c5765616b426f756e6465645665633c75382c20506565724964456e636f64696e674c696d69743e00014865787465726e616c5f616464726573736573d107012d015765616b426f756e6465645665633c5765616b426f756e6465645665633c75382c204d756c746941646472456e636f64696e674c696d69743e2c204164647265737365734c696d69740a3e0000cd0710346672616d655f737570706f72741c73746f72616765407765616b5f626f756e6465645f766563385765616b426f756e64656456656308045401080453000004002801185665633c543e0000d10710346672616d655f737570706f72741c73746f72616765407765616b5f626f756e6465645f766563385765616b426f756e64656456656308045401cd07045300000400d50701185665633c543e0000d507000002cd0700d9070c4070616c6c65745f696d5f6f6e6c696e651870616c6c6574144572726f7204045400010828496e76616c69644b6579000004604e6f6e206578697374656e74207075626c6963206b65792e4c4475706c696361746564486561727462656174000104544475706c696361746564206865617274626561742e04ad010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f76332f72756e74696d652f6576656e74732d616e642d6572726f7273290a0909096f6620746869732070616c6c65742e0a090909dd070c2873705f7374616b696e671c6f6666656e6365384f6666656e636544657461696c7308205265706f727465720100204f6666656e64657201c8000801206f6666656e646572c801204f6666656e6465720001247265706f7274657273510501345665633c5265706f727465723e0000e10700000408e02800e50710346672616d655f737570706f72741c73746f726167652c626f756e6465645f76656328426f756e6465645665630804540124045300000400bd0301185665633c543e0000e9070c4070616c6c65745f626167735f6c697374106c697374104e6f646508045400044900001401086964000130543a3a4163636f756e744964000110707265762d0101504f7074696f6e3c543a3a4163636f756e7449643e0001106e6578742d0101504f7074696f6e3c543a3a4163636f756e7449643e0001246261675f7570706572200120543a3a53636f726500011473636f7265200120543a3a53636f72650000ed070c4070616c6c65745f626167735f6c697374106c6973740c4261670804540004490000080110686561642d0101504f7074696f6e3c543a3a4163636f756e7449643e0001107461696c2d0101504f7074696f6e3c543a3a4163636f756e7449643e0000f1070c4070616c6c65745f626167735f6c6973741870616c6c6574144572726f72080454000449000104104c6973740400f50701244c6973744572726f72000004b441206572726f7220696e20746865206c69737420696e7465726661636520696d706c656d656e746174696f6e2e04ad010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f76332f72756e74696d652f6576656e74732d616e642d6572726f7273290a0909096f6620746869732070616c6c65742e0a090909f5070c4070616c6c65745f626167735f6c697374106c697374244c6973744572726f72000110244475706c6963617465000000284e6f7448656176696572000100304e6f74496e53616d65426167000200304e6f64654e6f74466f756e6400030000f90710346672616d655f737570706f72741c73746f726167652c626f756e6465645f76656328426f756e64656456656308045401d105045300000400fd0701185665633c543e0000fd07000002d105000108083870616c6c65745f76657374696e672052656c65617365730001080856300000000856310001000005080c3870616c6c65745f76657374696e671870616c6c6574144572726f72040454000114284e6f7456657374696e6700000484546865206163636f756e7420676976656e206973206e6f742076657374696e672e5441744d617856657374696e675363686564756c65730001082501546865206163636f756e7420616c72656164792068617320604d617856657374696e675363686564756c65736020636f756e74206f66207363686564756c657320616e642074687573510163616e6e6f742061646420616e6f74686572206f6e652e20436f6e7369646572206d657267696e67206578697374696e67207363686564756c657320696e206f7264657220746f2061646420616e6f746865722e24416d6f756e744c6f770002040501416d6f756e74206265696e67207472616e7366657272656420697320746f6f206c6f7720746f2063726561746520612076657374696e67207363686564756c652e605363686564756c65496e6465784f75744f66426f756e6473000304d0416e20696e64657820776173206f7574206f6620626f756e6473206f66207468652076657374696e67207363686564756c65732e54496e76616c69645363686564756c65506172616d730004040d014661696c656420746f206372656174652061206e6577207363686564756c65206265636175736520736f6d6520706172616d657465722077617320696e76616c69642e04744572726f7220666f72207468652076657374696e672070616c6c65742e0908000004080004000d08083c70616c6c65745f6d756c7469736967204d756c74697369670c2c426c6f636b4e756d62657201101c42616c616e63650118244163636f756e7449640100001001107768656ef0015854696d65706f696e743c426c6f636b4e756d6265723e00011c6465706f73697418011c42616c616e63650001246465706f7369746f720001244163636f756e744964000124617070726f76616c73510501385665633c4163636f756e7449643e000011080000040cdd0500180015080c3c70616c6c65745f6d756c74697369671870616c6c6574144572726f72040454000138404d696e696d756d5468726573686f6c640000047c5468726573686f6c64206d7573742062652032206f7220677265617465722e3c416c7265616479417070726f766564000104ac43616c6c20697320616c726561647920617070726f7665642062792074686973207369676e61746f72792e444e6f417070726f76616c734e65656465640002049c43616c6c20646f65736e2774206e65656420616e7920286d6f72652920617070726f76616c732e44546f6f4665775369676e61746f72696573000304a854686572652061726520746f6f20666577207369676e61746f7269657320696e20746865206c6973742e48546f6f4d616e795369676e61746f72696573000404ac54686572652061726520746f6f206d616e79207369676e61746f7269657320696e20746865206c6973742e545369676e61746f726965734f75744f664f726465720005040d01546865207369676e61746f7269657320776572652070726f7669646564206f7574206f66206f726465723b20746865792073686f756c64206265206f7264657265642e4c53656e646572496e5369676e61746f726965730006040d015468652073656e6465722077617320636f6e7461696e656420696e20746865206f74686572207369676e61746f726965733b2069742073686f756c646e27742062652e204e6f74466f756e64000704dc4d756c7469736967206f7065726174696f6e206e6f7420666f756e64207768656e20617474656d7074696e6720746f2063616e63656c2e204e6f744f776e65720008042d014f6e6c7920746865206163636f756e742074686174206f726967696e616c6c79206372656174656420746865206d756c74697369672069732061626c6520746f2063616e63656c2069742e2c4e6f54696d65706f696e740009041d014e6f2074696d65706f696e742077617320676976656e2c2079657420746865206d756c7469736967206f7065726174696f6e20697320616c726561647920756e6465727761792e3857726f6e6754696d65706f696e74000a042d014120646966666572656e742074696d65706f696e742077617320676976656e20746f20746865206d756c7469736967206f7065726174696f6e207468617420697320756e6465727761792e4c556e657870656374656454696d65706f696e74000b04f4412074696d65706f696e742077617320676976656e2c20796574206e6f206d756c7469736967206f7065726174696f6e20697320756e6465727761792e3c4d6178576569676874546f6f4c6f77000c04d0546865206d6178696d756d2077656967687420696e666f726d6174696f6e2070726f76696465642077617320746f6f206c6f772e34416c726561647953746f726564000d04a0546865206461746120746f2062652073746f72656420697320616c72656164792073746f7265642e04ad010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f76332f72756e74696d652f6576656e74732d616e642d6572726f7273290a0909096f6620746869732070616c6c65742e0a0909091908083870616c6c65745f636f756e63696c48436f756e63696c5374616765557064617465042c426c6f636b4e756d62657201100008011473746167651d080164436f756e63696c53746167653c426c6f636b4e756d6265723e0001286368616e6765645f617410012c426c6f636b4e756d62657200001d08083870616c6c65745f636f756e63696c30436f756e63696c5374616765042c426c6f636b4e756d6265720110010c28416e6e6f756e63696e6704002108018c436f756e63696c5374616765416e6e6f756e63696e673c426c6f636b4e756d6265723e00000020456c656374696f6e040025080150436f756e63696c5374616765456c656374696f6e0001001049646c65040029080174436f756e63696c537461676549646c653c426c6f636b4e756d6265723e000200002108083870616c6c65745f636f756e63696c58436f756e63696c5374616765416e6e6f756e63696e67042c426c6f636b4e756d62657201100008014063616e646964617465735f636f756e7410010c75333200011c656e64735f617410012c426c6f636b4e756d62657200002508083870616c6c65745f636f756e63696c50436f756e63696c5374616765456c656374696f6e000004014063616e646964617465735f636f756e7410010c75333200002908083870616c6c65745f636f756e63696c40436f756e63696c537461676549646c65042c426c6f636b4e756d62657201100004011c656e64735f617410012c426c6f636b4e756d62657200002d0810346672616d655f737570706f72741c73746f72616765407765616b5f626f756e6465645f766563385765616b426f756e646564566563080454013108045300000400350801185665633c543e00003108083870616c6c65745f636f756e63696c34436f756e63696c4d656d62657210244163636f756e7449640100204d656d626572496401201c42616c616e636501182c426c6f636b4e756d6265720110001801487374616b696e675f6163636f756e745f69640001244163636f756e7449640001447265776172645f6163636f756e745f69640001244163636f756e7449640001346d656d626572736869705f69642001204d656d62657249640001147374616b6518011c42616c616e63650001486c6173745f7061796d656e745f626c6f636b10012c426c6f636b4e756d626572000134756e706169645f72657761726418011c42616c616e6365000035080000023108003908083870616c6c65745f636f756e63696c2443616e64696461746510244163636f756e74496401001c42616c616e636501181048617368012424566f7465506f7765720118001801487374616b696e675f6163636f756e745f69640001244163636f756e7449640001447265776172645f6163636f756e745f69640001244163636f756e7449640001206379636c655f696420010c7536340001147374616b6518011c42616c616e6365000128766f74655f706f776572180124566f7465506f7765720001246e6f74655f68617368610201304f7074696f6e3c486173683e00003d08083870616c6c65745f636f756e63696c144572726f720404540001603c41726974686d657469634572726f72000004c8556e65787065637465642061726974686d65746963206572726f7220286f766572666c6f77202f20756e646572666c6f7729244261644f726967696e000104484f726967696e20697320696e76616c69642e4043616e7443616e6469646174654e6f7700020439015573657220747269656420746f20616e6e6f756e63652063616e646964616379206f757473696465206f66207468652063616e64696461637920616e6e6f756e63656d656e7420706572696f642e4c43616e7452656c656173655374616b654e6f77000304f05573657220747269656420746f2072656c65617365207374616b65206f757473696465206f66207468652072657665616c696e6720706572696f642e5043616e6469646163795374616b65546f6f4c6f77000404b043616e64696461746520686176656e27742070726f76696465642073756666696369656e74207374616b652e4843616e7443616e6469646174655477696365000504f45573657220747269656420746f20616e6e6f756e63652063616e64696461637920747769636520696e207468652073616d6520656c656374696f6e732e40436f6e666c696374696e675374616b650006085d015573657220747269656420746f20616e6e6f756e63652063616e646964616379207769746820616e206163636f756e742074686174206861732074686520636f6e666c696374696e672074797065206f66207374616b653901776974682063616e646964616379207374616b6520616e6420686173206e6f7420656e6f7567682062616c616e636520666f72207374616b696e6720666f7220626f746820707572706f7365732e405374616b655374696c6c4e6565646564000704dc436f756e63696c206d656d62657220616e642063616e646964617465732063616e2774207769746864726177207374616b65207965742e1c4e6f5374616b65000804c45573657220747269656420746f2072656c65617365207374616b65207768656e206e6f207374616b65206578697374732e74496e73756666696369656e7442616c616e6365466f725374616b696e67000904ac496e73756666696369656e742062616c616e636520666f722063616e646964616379207374616b696e672e4c43616e74566f7465466f72596f757273656c66000a048443616e6469646174652063616e277420766f746520666f722068696d73656c662e5c4d656d62657249644e6f744d617463684163636f756e74000b044c496e76616c6964206d656d626572736869702e68496e76616c69644163636f756e74546f5374616b655265757365000c08510154686520636f6d62696e6174696f6e206f66206d656d6265727368697020696420616e64206163636f756e7420696420697320696e76616c696420666f7220756e7374616b696e6720616e206578697374696e674063616e646964616379207374616b652e444e6f7443616e6469646174696e674e6f77000d04d85573657220747269656420746f2077697468647261772063616e646964616379207768656e206e6f742063616e6469646174696e672e6043616e74576974686472617743616e6469646163794e6f77000e04190143616e27742077697468647261772063616e646964616379206f757473696465206f66207468652063616e64696461637920616e6e6f756e63656d656e7420706572696f642e304e6f74436f756e63696c6f72000f0478546865206d656d626572206973206e6f74206120636f756e63696c6f722e88496e73756666696369656e7446756e6473466f7246756e64696e6752657175657374001004f0496e737566666963656e742066756e647320696e20636f756e63696c20666f7220657865637574696e67202746756e64696e67205265717565737427585a65726f42616c616e636546756e64526571756573740011045c46756e642072657175657374206e6f2062616c616e636568526570656174656446756e64526571756573744163636f756e74001204fc5468652073616d65206163636f756e7420697320726563696576696e672066756e64732066726f6d207468652073616d65207265717565737420747769636550456d70747946756e64696e675265717565737473001304ac46756e64696e6720726571756573747320776974686f757420726563696576696e67206163636f756e747370496e73756666696369656e74546f6b656e73466f7246756e64696e67001404f8496e73756666696369656e7420746f6b656e7320666f722066756e64696e6720286f6e206d656d62657220636f6e74726f6c6c6572206163636f756e7429445a65726f546f6b656e7346756e64696e670015047c547279696e6720746f2066756e642077697468207a65726f20746f6b656e735443616e646964617465446f65734e6f7445786973740016045843616e646964617465206964206e6f7420666f756e6478496e73756666696369656e7442616c616e6365466f725472616e73666572001704b443616e6e6f742077697468647261773a20696e73756666696369656e74206275646765742062616c616e63652e0438436f756e63696c206572726f72734108084470616c6c65745f7265666572656e64756d3c5265666572656e64756d5374616765082c426c6f636b4e756d62657201104c496e7465726d65646961746557696e6e657273014508010c20496e61637469766500000018566f74696e670400490801885265666572656e64756d5374616765566f74696e673c426c6f636b4e756d6265723e0001002452657665616c696e6704004d0801e85265666572656e64756d537461676552657665616c696e673c426c6f636b4e756d6265722c20496e7465726d65646961746557696e6e6572733e00020000450810346672616d655f737570706f72741c73746f72616765407765616b5f626f756e6465645f766563385765616b426f756e646564566563080454010901045300000400050101185665633c543e00004908084470616c6c65745f7265666572656e64756d545265666572656e64756d5374616765566f74696e67042c426c6f636b4e756d62657201100010011c7374617274656410012c426c6f636b4e756d62657200015077696e6e696e675f7461726765745f636f756e7410010c75333200014063757272656e745f6379636c655f696420010c75363400011c656e64735f617410012c426c6f636b4e756d62657200004d08084470616c6c65745f7265666572656e64756d605265666572656e64756d537461676552657665616c696e67082c426c6f636b4e756d62657201104c496e7465726d65646961746557696e6e6572730145080014011c7374617274656410012c426c6f636b4e756d62657200015077696e6e696e675f7461726765745f636f756e7410010c753332000150696e7465726d6564696174655f77696e6e6572734508014c496e7465726d65646961746557696e6e65727300014063757272656e745f6379636c655f696420010c75363400011c656e64735f617410012c426c6f636b4e756d62657200005108084470616c6c65745f7265666572656e64756d2043617374566f74650c104861736801242043757272656e63790118204d656d6265724964012000100128636f6d6d69746d656e74240110486173680001206379636c655f696420010c7536340001147374616b6518012043757272656e6379000120766f74655f666f72190101404f7074696f6e3c4d656d62657249643e00005508084470616c6c65745f7265666572656e64756d144572726f72080454000449000138244261644f726967696e000004444f726967696e20697320696e76616c6964505265666572656e64756d4e6f7452756e6e696e67000104a85265666572656e64756d206973206e6f742072756e6e696e67207768656e20657870656374656420746f5852657665616c696e674e6f74496e50726f6772657373000204b052657665616c696e67207374616765206973206e6f7420696e2070726f6772657373207269676874206e6f775c436f6e666c6963745374616b65734f6e4163636f756e74000304b05374616b696e67206163636f756e7420636f6e7461696e7320636f6e666c696374696e67207374616b65732e68496e73756666696369656e7442616c616e6365546f5374616b650004049c4163636f756e7420496e73756666696369656e7420467265652042616c616e636520286e6f772944496e73756666696369656e745374616b65000504a8496e73756666696369656e74207374616b652070726f766964656420746f2063617374206120766f746534496e76616c696452657665616c000604190153616c7420616e64207265666572656e64756d206f7074696f6e2070726f766964656420646f6e277420636f72726573706f6e6420746f2074686520636f6d6d69746d656e742c496e76616c6964566f7465000704a4566f746520666f72206e6f74206578697374696e67206f7074696f6e207761732072657665616c65643c566f74654e6f744578697374696e670008049c547279696e6720746f2072657665616c20766f7465207468617420776173206e6f74206361737454416c7265616479566f746564546869734379636c65000904b8547279696e6720746f20766f7465206d756c7469706c652074696d6520696e207468652073616d65206379636c6560556e7374616b696e67566f7465496e53616d654379636c65000a04a0496e76616c69642074696d6520746f2072656c6561736520746865206c6f636b6564207374616b652c53616c74546f6f4c6f6e67000b044053616c7420697320746f6f206c6f6e6748556e7374616b696e67466f7262696464656e000c04f0556e7374616b696e6720686173206265656e20666f7262696464656e20666f7220746865207573657220286174206c6561737420666f72206e6f7729784163636f756e74416c72656164794f707465644f75744f66566f74696e67000d041d014120766f74652063616e6e6f7420626520636173742066726f6d20616e206163636f756e74207468617420616c7265616479206f70746564206f7574206f6620766f74696e672e04445265666572656e64756d206572726f72735908084470616c6c65745f6d656d62657273686970404d656d626572736869704f626a65637408244163636f756e7449640100104861736801240014012c68616e646c655f6861736824011048617368000130726f6f745f6163636f756e740001244163636f756e744964000148636f6e74726f6c6c65725f6163636f756e740001244163636f756e7449640001207665726966696564880110626f6f6c00011c696e766974657310010c75333200005d08084470616c6c65745f6d656d626572736869706c5374616b696e674163636f756e744d656d62657242696e64696e6704204d656d62657249640120000801246d656d6265725f69642001204d656d6265724964000124636f6e6669726d6564880110626f6f6c00006108084470616c6c65745f6d656d62657273686970144572726f720404540001587c4e6f74456e6f75676842616c616e6365546f4275794d656d62657273686970000004944e6f7420656e6f7567682062616c616e636520746f20627579206d656d626572736869702e64436f6e74726f6c6c65724163636f756e74526571756972656400010470436f6e74726f6c6c6572206163636f756e742072657175697265642e4c526f6f744163636f756e74526571756972656400020458526f6f74206163636f756e742072657175697265642e38556e7369676e65644f726967696e00030440556e7369676e6564206f726967696e2e544d656d62657250726f66696c654e6f74466f756e64000404b44d656d6265722070726f66696c65206e6f7420666f756e642028696e76616c6964206d656d626572206964292e5c48616e646c65416c7265616479526567697374657265640005046848616e646c6520616c726561647920726567697374657265642e9848616e646c654d757374426550726f7669646564447572696e67526567697374726174696f6e000604b048616e646c65206d7573742062652070726f766964656420647572696e6720726567697374726174696f6e2e4c526566657272657249734e6f744d656d626572000704d043616e6e6f742066696e642061206d656d6265727368697020666f7220612070726f76696465642072656665727265722069642e8443616e6e6f745472616e73666572496e7669746573466f724e6f744d656d6265720008049853686f756c642062652061206d656d62657220746f207265636569766520696e76697465732e404e6f74456e6f756768496e7669746573000904ac4e6f7420656e6f75676820696e766974657320746f20706572666f726d20616e206f7065726174696f6e2e60576f726b696e6747726f75704c65616465724e6f74536574000a04ac4d656d6265727368697020776f726b696e672067726f7570206c6561646572206973206e6f74207365742e845374616b696e674163636f756e744973416c726561647952656769737465726564000b04b85374616b696e67206163636f756e74206973207265676973746572656420666f7220736f6d65206d656d6265722e645374616b696e674163636f756e74446f65736e744578697374000c04b45374616b696e67206163636f756e7420666f72206d656d6265727368697020646f65736e27742065786973742e785374616b696e674163636f756e74416c7265616479436f6e6669726d6564000d04ac5374616b696e67206163636f756e742068617320616c7265616479206265656e20636f6e6669726d65642eb0576f726b696e6747726f757042756467657449734e6f7453756666696369656e74466f72496e766974696e67000e08490143616e6e6f7420696e766974652061206d656d6265722e20576f726b696e672067726f75702062616c616e6365206973206e6f742073756666696369656e7420746f20736574207468652064656661756c742062616c616e63652e3c436f6e666c696374696e674c6f636b000f04410143616e6e6f7420696e766974652061206d656d6265722e2054686520636f6e74726f6c6c6572206163636f756e742068617320616e206578697374696e6720636f6e666c696374696e67206c6f636b2e8c43616e6e6f74457863656564526566657272616c43757450657263656e744c696d6974001004010143616e6e6f7420736574206120726566657272616c206375742070657263656e742076616c75652e20546865206c696d6974207761732065786365656465642e5c436f6e666c6963745374616b65734f6e4163636f756e74001104b05374616b696e67206163636f756e7420636f6e7461696e7320636f6e666c696374696e67207374616b65732e7c496e73756666696369656e7442616c616e6365546f436f7665725374616b6500120490496e73756666696369656e742062616c616e636520746f20636f766572207374616b652e504769664c6f636b45786365656473437265646974001304ac4c6f636b656420616d6f756e742069732067726561746572207468616e2063726564697420616d6f756e7464496e73756666696369656e7442616c616e6365546f47696674001404c047696674657220646f65736e277420686176652073756666696369656e742062616c616e636520746f2063726564697484496e73756666696369656e7442616c616e6365546f436f7665725061796d656e7400150498496e73756666696369656e742062616c616e636520746f20636f766572207061796d656e742e048c4d656d62657273686970206d6f64756c6520707265646566696e6564206572726f72736508083070616c6c65745f666f72756d2043617465676f72790c2843617465676f7279496401201048617368012444537469636b696564546872656164496473016908002001287469746c655f68617368240110486173680001406465736372697074696f6e5f68617368240110486173680001206172636869766564880110626f6f6c0001606e756d5f6469726563745f73756263617465676f7269657310010c7533320001486e756d5f6469726563745f7468726561647310010c7533320001546e756d5f6469726563745f6d6f64657261746f727310010c753332000148706172656e745f63617465676f72795f6964190101484f7074696f6e3c43617465676f727949643e000144737469636b795f7468726561645f69647369080144537469636b6965645468726561644964730000690810346672616d655f737570706f72741c73746f7261676544626f756e6465645f62747265655f7365743c426f756e646564425472656553657408045401200453000004005101012c42547265655365743c543e00006d08083070616c6c65745f666f72756d185468726561640c2c466f72756d55736572496401202843617465676f72794964012048526570617961626c65426c6f6174426f6e6401c9010010012c63617465676f72795f696420012843617465676f72794964000124617574686f725f696420012c466f72756d55736572496400013c636c65616e75705f7061795f6f6666c9010148526570617961626c65426c6f6174426f6e640001606e756d6265725f6f665f6564697461626c655f706f7374732001344e756d6265724f66506f73747300007108083070616c6c65745f666f72756d10506f7374142c466f72756d55736572496401202054687265616449640120104861736801242c426c6f636b4e756d626572011048526570617961626c65426c6f6174426f6e6401c901001401247468726561645f69642001205468726561644964000124746578745f6861736824011048617368000124617574686f725f696420012c466f72756d55736572496400013c636c65616e75705f7061795f6f6666c9010148526570617961626c65426c6f6174426f6e6400012c6c6173745f65646974656410012c426c6f636b4e756d62657200007508083070616c6c65745f666f72756d144572726f7204045400016c3c41726974686d657469634572726f72000004c8556e65787065637465642061726974686d65746963206572726f7220286f766572666c6f77202f20756e646572666c6f7729484f726967696e4e6f74466f72756d4c656164000104b44f726967696e20646f65736e277420636f72726573706f6e6420746f20616e79206c656164206163636f756e7468466f72756d5573657249644e6f744d617463684163636f756e7400020490466f72756d2075736572206964206e6f74206d6174636820697473206163636f756e742e684d6f64657261746f7249644e6f744d617463684163636f756e740003048c4d6f64657261746f72206964206e6f74206d6174636820697473206163636f756e742e7c4163636f756e74446f65734e6f744d61746368546872656164417574686f7200040498546872656164206e6f7420617574686f7265642062792074686520676976656e20757365722e48546872656164446f65734e6f7445786973740005045454687265616420646f6573206e6f742065786973747c4d6f64657261746f724d6f6465726174654f726967696e43617465676f7279000604d04d6f64657261746f722063616e2774206d6f6465726174652063617465676f727920636f6e7461696e696e67207468726561642e904d6f64657261746f724d6f64657261746544657374696e6174696f6e43617465676f7279000704b84d6f64657261746f722063616e2774206d6f6465726174652064657374696e6174696f6e2063617465676f72792e445468726561644d6f7665496e76616c6964000804984f726967696e206973207468652073616d65206173207468652064657374696e6174696f6e2e545468726561644e6f744265696e675570646174656400090464546872656164206e6f74206265696e6720757064617465642e90496e73756666696369656e7442616c616e6365466f725468726561644372656174696f6e000a048c4e6f7420656e6f7567682062616c616e636520746f20637265617465207468726561649843616e6e6f7444656c657465546872656164576974684f75747374616e64696e67506f737473000b04c441207468726561642077697468206f75747374616e64696e6720706f7374732063616e6e6f742062652072656d6f76656440506f7374446f65734e6f744578697374000c0450506f737420646f6573206e6f742065786973742e744163636f756e74446f65734e6f744d61746368506f7374417574686f72000d048c4163636f756e7420646f6573206e6f74206d6174636820706f737420617574686f722e68496e73756666696369656e7442616c616e6365466f72506f7374000e04684e6f7420656e6f7567682062616c616e636520746f20706f73745c43617465676f72794e6f744265696e6755706461746564000f046c43617465676f7279206e6f74206265696e6720757064617465642e64416e636573746f7243617465676f7279496d6d757461626c65001004d4416e636573746f722063617465676f727920696d6d757461626c652c20692e652e2064656c65746564206f72206172636869766564744d617856616c696443617465676f727944657074684578636565646564001104984d6178696d756d2076616c69642063617465676f72792064657074682065786365656465642e5043617465676f7279446f65734e6f7445786973740012046043617465676f727920646f6573206e6f742065786973742e7443617465676f72794d6f64657261746f72446f65734e6f744578697374001304c850726f7669646564206d6f64657261746f72206973206e6f7420676976656e2063617465676f7279206d6f64657261746f725c43617465676f72794e6f74456d707479546872656164730014049443617465676f7279207374696c6c20636f6e7461696e7320736f6d6520746872656164732e6843617465676f72794e6f74456d70747943617465676f72696573001504ac43617465676f7279207374696c6c20636f6e7461696e7320736f6d652073756263617465676f726965732e6c4d6f64657261746f7243616e7444656c65746543617465676f7279001604884e6f207065726d697373696f6e7320746f2064656c6574652063617465676f72792e6c4d6f64657261746f7243616e7455706461746543617465676f7279001704884e6f207065726d697373696f6e7320746f207570646174652063617465676f72792e304d617053697a654c696d6974001804904d6178696d756d2073697a65206f662073746f72616765206d617020657863656564656484506174684c656e67746853686f756c644265477265617465725468616e5a65726f001904b443617465676f72792070617468206c656e2073686f756c642062652067726561746572207468616e207a65726f884d61784e756d6265724f66537469636b696564546872656164734578636565646564001a04e04d6178696d756d206e756d626572206f6620737469636b6965642074687265616473207065722063617465676f7279206578636565646564045c466f72756d20707265646566696e6564206572726f72737908084c70616c6c65745f636f6e737469747574696f6e40436f6e737469747574696f6e496e666f041048617368012400040124746578745f686173682401104861736800007d08083470616c6c65745f626f756e747930426f756e74795265636f7264101c42616c616e636501182c426c6f636b4e756d6265720110204d656d626572496401205c436c6f736564436f6e747261637457686974656c6973740181080014013c6372656174696f6e5f706172616d738508012501426f756e7479506172616d65746572733c42616c616e63652c20426c6f636b4e756d6265722c204d656d62657249642c20436c6f736564436f6e747261637457686974656c6973743e000134746f74616c5f66756e64696e6718011c42616c616e63650001246d696c6573746f6e658d080170426f756e74794d696c6573746f6e653c426c6f636b4e756d6265723e00015c6163746976655f776f726b5f656e7472795f636f756e7410010c7533320001606861735f756e706169645f6f7261636c655f726577617264880110626f6f6c0000810810346672616d655f737570706f72741c73746f7261676544626f756e6465645f62747265655f7365743c426f756e646564425472656553657408045401200453000004005101012c42547265655365743c543e00008508083470616c6c65745f626f756e747940426f756e7479506172616d6574657273101c42616c616e636501182c426c6f636b4e756d6265720110204d656d626572496401205c436c6f736564436f6e747261637457686974656c697374018108001c01186f7261636c6561010154426f756e74794163746f723c4d656d62657249643e000134636f6e74726163745f74797065890801b84173737572616e6365436f6e7472616374547970653c436c6f736564436f6e747261637457686974656c6973743e00011c63726561746f7261010154426f756e74794163746f723c4d656d62657249643e00011863686572727918011c42616c616e63650001346f7261636c655f72657761726418011c42616c616e6365000134656e7472616e745f7374616b6518011c42616c616e636500013066756e64696e675f747970656901018446756e64696e67547970653c426c6f636b4e756d6265722c2042616c616e63653e00008908083470616c6c65745f626f756e7479544173737572616e6365436f6e747261637454797065045c436c6f736564436f6e747261637457686974656c6973740181080108104f70656e00000018436c6f73656404008108015c436c6f736564436f6e747261637457686974656c697374000100008d08083470616c6c65745f626f756e74793c426f756e74794d696c6573746f6e65042c426c6f636b4e756d626572011001141c43726561746564080128637265617465645f617410012c426c6f636b4e756d6265720001446861735f636f6e747269627574696f6e73880110626f6f6c0000005c426f756e74794d617846756e64696e675265616368656400010034576f726b5375626d6974746564000200285465726d696e61746564000300444a7564676d656e745375626d69747465640401447375636365737366756c5f626f756e7479880110626f6f6c00040000910800000408206101009508083470616c6c65745f626f756e747930436f6e747269627574696f6e0404540000080118616d6f756e7418013042616c616e63654f663c543e00017866756e6465725f73746174655f626c6f61745f626f6e645f616d6f756e7418013042616c616e63654f663c543e00009908083470616c6c65745f626f756e74792c456e7472795265636f72640c244163636f756e7449640100204d656d626572496401202c426c6f636b4e756d6265720110001001246d656d6265725f69642001204d656d62657249640001487374616b696e675f6163636f756e745f69640001244163636f756e7449640001307375626d69747465645f617410012c426c6f636b4e756d626572000138776f726b5f7375626d6974746564880110626f6f6c00009d08083470616c6c65745f626f756e7479144572726f7204045400018c3c41726974686d657469634572726f72000004c8556e65787065637465642061726974686d65746963206572726f7220286f766572666c6f77202f20756e646572666c6f7729b04d696e46756e64696e67416d6f756e7443616e6e6f744265477265617465725468616e4d6178416d6f756e74000104d44d696e2066756e64696e6720616d6f756e742063616e6e6f742062652067726561746572207468616e206d617820616d6f756e742e44426f756e7479446f65736e74457869737400020450426f756e747920646f65736e742065786973742e605377697463684f7261636c654f726967696e4973526f6f7400030489014f726967696e20697320726f6f742c20736f20737769746368696e67206f7261636c65206973206e6f7420616c6c6f77656420696e20746869732065787472696e7369632e202863616c6c207377697463685f6f7261636c655f61735f726f6f742974496e76616c69645374616765556e657870656374656446756e64696e67000404c8556e657870656374656420626f756e747920737461676520666f7220616e206f7065726174696f6e3a2046756e64696e672ea8496e76616c69645374616765556e65787065637465644e6f46756e64696e67436f6e7472696275746564000504fc556e657870656374656420626f756e747920737461676520666f7220616e206f7065726174696f6e3a204e6f46756e64696e67436f6e74726962757465642e7c496e76616c69645374616765556e657870656374656443616e63656c6c6564000604d0556e657870656374656420626f756e747920737461676520666f7220616e206f7065726174696f6e3a2043616e63656c6c65642e90496e76616c69645374616765556e6578706563746564576f726b5375626d697373696f6e000704e4556e657870656374656420626f756e747920737461676520666f7220616e206f7065726174696f6e3a20576f726b5375626d697373696f6e2e78496e76616c69645374616765556e65787065637465644a7564676d656e74000804cc556e657870656374656420626f756e747920737461676520666f7220616e206f7065726174696f6e3a204a7564676d656e742ec0496e76616c69645374616765556e65787065637465645375636365737366756c426f756e74795769746864726177616c0009041501556e657870656374656420626f756e747920737461676520666f7220616e206f7065726174696f6e3a205375636365737366756c426f756e74795769746864726177616c2eb0496e76616c69645374616765556e65787065637465644661696c6564426f756e74795769746864726177616c000a040501556e657870656374656420626f756e747920737461676520666f7220616e206f7065726174696f6e3a204661696c6564426f756e74795769746864726177616c2e70496e73756666696369656e7442616c616e6365466f72426f756e7479000b04a4496e73756666696369656e742062616c616e636520666f72206120626f756e7479206368657272792e644e6f426f756e7479436f6e747269627574696f6e466f756e64000c048443616e6e6f7420666f756e6420626f756e747920636f6e747269627574696f6e2e6c496e73756666696369656e7442616c616e6365466f725374616b65000d04a05468657265206973206e6f7420656e6f7567682062616c616e636520666f722061207374616b652e44436f6e666c696374696e675374616b6573000e04bc54686520636f6e666c696374696e67207374616b6520646973636f76657265642e2043616e6e6f74207374616b652e50576f726b456e747279446f65736e744578697374000f0460576f726b20656e74727920646f65736e742065786973742e704368657272794c6573735468656e4d696e696d756d416c6c6f77656400100484436865727279206c657373207468616e206d696e696d756d20616c6c6f7765642e9843616e6e6f745375626d6974576f726b546f436c6f736564436f6e7472616374426f756e74790011085101496e636f6d70617469626c65206173737572616e636520636f6e7472616374207479706520666f722061206d656d6265723a2063616e6e6f74207375626d697420776f726b20746f207468652027636c6f7365646c6173737572616e63652720626f756e747920636f6e74726163742e7c436c6f736564436f6e74726163744d656d6265724c6973744973456d707479001204290143616e6e6f742063726561746520612027636c6f736564206173737572616e636520636f6e74726163742720626f756e7479207769746820656d707479206d656d626572206c6973742e88436c6f736564436f6e74726163744d656d6265724c6973744973546f6f4c61726765001308290143616e6e6f742063726561746520612027636c6f736564206173737572616e636520636f6e74726163742720626f756e74792077697468206d656d626572206c697374206c6172676572887468616e20616c6c6f776564206d617820776f726b20656e747279206c696d69742e70436c6f736564436f6e74726163744d656d6265724e6f74466f756e64001404410127636c6f736564206173737572616e636520636f6e74726163742720626f756e7479206d656d626572206c6973742063616e206f6e6c7920696e636c756465206578697374696e67206d656d6265727354496e76616c69644f7261636c654d656d6265724964001504fc50726f7669646564206f7261636c65206d656d62657220696420646f6573206e6f742062656c6f6e6720746f20616e206578697374696e67206d656d62657278496e76616c69645374616b696e674163636f756e74466f724d656d626572001604ac5374616b696e67206163636f756e7420646f65736e27742062656c6f6e6720746f2061206d656d6265722e405a65726f57696e6e65725265776172640017048c43616e6e6f7420736574207a65726f2072657761726420666f722077696e6e6572732e98546f74616c52657761726453686f756c644265457175616c546f546f74616c46756e64696e67001804150154686520746f74616c2072657761726420666f722077696e6e6572732073686f756c6420626520657175616c20746f20746f74616c20626f756e74792066756e64696e672e74456e7472616e745374616b6549734c6573735468616e4d696e696e756d0019042d0143616e6e6f7420637265617465206120626f756e7479207769746820616e20656e7472616e74207374616b65206973206c657373207468616e207265717569726564206d696e696d756d2e6446756e64696e67416d6f756e7443616e6e6f7442655a65726f001a04e843616e6e6f7420637265617465206120626f756e74792077697468207a65726f2066756e64696e6720616d6f756e7420706172616d657465722e6446756e64696e67506572696f6443616e6e6f7442655a65726f001b04e843616e6e6f7420637265617465206120626f756e74792077697468207a65726f2066756e64696e6720706572696f6420706172616d657465722e7457696e6e657253686f756c64486173576f726b5375626d697373696f6e001c04f0496e76616c6964206a7564676d656e74202d20616c6c2077696e6e6572732073686f756c64206861766520776f726b207375626d697373696f6e732e80496e76616c6964436f6e7472696275746f724163746f72537065636966696564001d0470426f756e747920636f6e7472696275746f72206e6f7420666f756e646c496e76616c69644f7261636c654163746f72537065636966696564001e045c426f756e7479206f7261636c65206e6f7420666f756e6474496e76616c6964456e7472616e74576f726b6572537065636966696564001f04a44d656d62657220737065636966696564206973206e6f7420616e20656e7472616e7420776f726b657270496e76616c696443726561746f724163746f72537065636966696564002004a8496e76616c69642043726561746f72204163746f7220666f7220426f756e74792073706563696669656474576f726b456e747279446f65736e7442656c6f6e67546f576f726b6572002104f8576f726b657220747269656420746f20616363657373206120776f726b20656e747279207468617420646f65736e27742062656c6f6e6720746f2068696d704f7261636c65526577617264416c726561647957697468647261776e002204884f7261636c65206861766520616c7265616479206265656e2077697468647261776e047c426f756e74792070616c6c657420707265646566696e6564206572726f7273a108083870616c6c65745f7574696c697479144572726f7204045400010c80496e73756666696369656e7446756e6473466f724275646765745570646174650000041d01496e73756666696369656e742066756e647320666f72202755706461746520576f726b696e672047726f757020427564676574272070726f706f73616c20657865637574696f6e385a65726f546f6b656e734275726e00010468547279696e6720746f206275726e207a65726f20746f6b656e7360496e73756666696369656e7446756e6473466f724275726e00020478496e73756666696369656e742066756e647320666f72206275726e696e670478436f646578206d6f64756c6520707265646566696e6564206572726f7273a5080c3870616c6c65745f636f6e74656e741474797065732c566964656f5265636f726410244368616e6e656c49640120204f776e65644e667401a90838566964656f41737365747353657401c90848526570617961626c65426c6f6174426f6e6401c90100100128696e5f6368616e6e656c2001244368616e6e656c49640001286e66745f737461747573cd0801404f7074696f6e3c4f776e65644e66743e000130646174615f6f626a65637473c9080138566964656f417373657473536574000158766964656f5f73746174655f626c6f61745f626f6e64c9010148526570617961626c65426c6f6174426f6e640000a908103870616c6c65745f636f6e74656e740c6e6674147479706573204f776e65644e66740c4c5472616e73616374696f6e616c53746174757301ad08204d656d626572496401202441756374696f6e49640120001001146f776e6572c50801484e66744f776e65723c4d656d62657249643e0001507472616e73616374696f6e616c5f737461747573ad08014c5472616e73616374696f6e616c53746174757300013c63726561746f725f726f79616c7479f901013c4f7074696f6e3c526f79616c74793e00014c6f70656e5f61756374696f6e735f6e6f6e636520012441756374696f6e49640000ad08103870616c6c65745f636f6e74656e740c6e6674147479706573645472616e73616374696f6e616c5374617475735265636f726410204d656d626572496401201c42616c616e6365011848456e676c69736841756374696f6e5479706501b1083c4f70656e41756374696f6e5479706501c10801141049646c6500000058496e697469617465644f66666572546f4d656d62657208002001204d656d626572496400002901013c4f7074696f6e3c42616c616e63653e00010038456e676c69736841756374696f6e0400b1080148456e676c69736841756374696f6e547970650002002c4f70656e41756374696f6e0400c108013c4f70656e41756374696f6e54797065000300184275794e6f77040018011c42616c616e636500040000b108103870616c6c65745f636f6e74656e740c6e667414747970657350456e676c69736841756374696f6e5265636f7264102c426c6f636b4e756d62657201101c42616c616e63650118204d656d626572496401204c4e667441756374696f6e57686974656c69737401b508002001387374617274696e675f707269636518011c42616c616e63650001346275795f6e6f775f70726963652901013c4f7074696f6e3c42616c616e63653e00012477686974656c697374b508014c4e667441756374696f6e57686974656c69737400010c656e6410012c426c6f636b4e756d626572000114737461727410012c426c6f636b4e756d626572000140657874656e73696f6e5f706572696f6410012c426c6f636b4e756d6265720001306d696e5f6269645f7374657018011c42616c616e636500011c746f705f626964b90801b04f7074696f6e3c456e676c69736841756374696f6e4269643c42616c616e63652c204d656d62657249643e3e0000b50810346672616d655f737570706f72741c73746f7261676544626f756e6465645f62747265655f7365743c426f756e646564425472656553657408045401200453000004005101012c42547265655365743c543e0000b90804184f7074696f6e04045401bd080108104e6f6e6500000010536f6d650400bd080000010000bd08103870616c6c65745f636f6e74656e740c6e667414747970657344456e676c69736841756374696f6e426964081c42616c616e63650118204d656d6265724964012000080118616d6f756e7418011c42616c616e63650001246269646465725f69642001204d656d62657249640000c108103870616c6c65745f636f6e74656e740c6e6674147479706573444f70656e41756374696f6e5265636f7264102c426c6f636b4e756d62657201102441756374696f6e496401201c42616c616e636501184c4e667441756374696f6e57686974656c69737401b508001801387374617274696e675f707269636518011c42616c616e63650001346275795f6e6f775f70726963652901013c4f7074696f6e3c42616c616e63653e00012477686974656c697374b508014c4e667441756374696f6e57686974656c6973740001446269645f6c6f636b5f6475726174696f6e10012c426c6f636b4e756d62657200012861756374696f6e5f696420012441756374696f6e4964000114737461727410012c426c6f636b4e756d6265720000c508103870616c6c65745f636f6e74656e740c6e6674147479706573204e66744f776e657204204d656d626572496401200108304368616e6e656c4f776e6572000000184d656d62657204002001204d656d626572496400010000c90810346672616d655f737570706f72741c73746f7261676544626f756e6465645f62747265655f7365743c426f756e646564425472656553657408045401200453000004005101012c42547265655365743c543e0000cd0804184f7074696f6e04045401a9080108104e6f6e6500000010536f6d650400a9080000010000d108103870616c6c65745f636f6e74656e742c7065726d697373696f6e733463757261746f725f67726f75704843757261746f7247726f75705265636f7264085c43757261746f7247726f757043757261746f72734d617001d508704d6f6465726174696f6e5065726d697373696f6e7342794c6576656c01d908000c012063757261746f7273d508015c43757261746f7247726f757043757261746f72734d6170000118616374697665880110626f6f6c0001507065726d697373696f6e735f62795f6c6576656cd90801704d6f6465726174696f6e5065726d697373696f6e7342794c6576656c0000d50810346672616d655f737570706f72741c73746f7261676544626f756e6465645f62747265655f6d61703c426f756e64656442547265654d61700c044b01200456019d01045300000400ad01013842547265654d61703c4b2c20563e0000d90810346672616d655f737570706f72741c73746f7261676544626f756e6465645f62747265655f6d61703c426f756e64656442547265654d61700c044b0108045601dd08045300000400e108013842547265654d61703c4b2c20563e0000dd0810346672616d655f737570706f72741c73746f7261676544626f756e6465645f62747265655f7365743c426f756e64656442547265655365740804540145020453000004004102012c42547265655365743c543e0000e108042042547265654d617008044b0108045601dd08000400e508000000e508000002e90800e9080000040808dd0800ed08103870616c6c65745f636f6e74656e740c6e6674147479706573504f70656e41756374696f6e4269645265636f72640c1c42616c616e636501182c426c6f636b4e756d62657201102441756374696f6e49640120000c0118616d6f756e7418011c42616c616e63650001346d6164655f61745f626c6f636b10012c426c6f636b4e756d62657200012861756374696f6e5f696420012441756374696f6e49640000f1080c3870616c6c65745f636f6e74656e74186572726f7273144572726f7204045400010102704368616e6e656c5374617465426c6f6174426f6e644368616e676564000004e4496e76616c69642065787472696e7369632063616c6c3a204368616e6e656c20737461746520626c6f617420626f6e64206368616e6765642e68566964656f5374617465426c6f6174426f6e644368616e676564000104dc496e76616c69642065787472696e7369632063616c6c3a20766964656f20737461746520626c6f617420626f6e64206368616e6765642e544d696e436173686f757456616c7565546f6f4c6f77000204d8417474656d707420746f20736574206d696e696d756d20636173686f757420616c6c6f7765642062656c6f7720746865206c696d6974584d6178436173686f757456616c7565546f6f48696768000304d8417474656d707420746f20736574206d696e696d756d20636173686f757420616c6c6f7765642061626f766520746865206c696d69749c4d61784e756d6265724f664368616e6e656c436f6c6c61626f7261746f7273457863656564656400040429014e756d626572206f66206368616e6e656c20636f6c6c61626f7261746f72732065786365656473204d61784e756d6265724f66436f6c6c61626f7261746f72735065724368616e6e656c804d61784e756d6265724f664368616e6e656c4173736574734578636565646564000504f04e756d626572206f66206368616e6e656c206173736574732065786365656473204d61784e756d6265724f664173736574735065724368616e6e656c784d61784e756d6265724f66566964656f4173736574734578636565646564000604ec4e756d626572206f6620766964656f206173736574732065786365656473204d61784d61784e756d6265724f66417373657473506572566964656fa84d61784e756d6265724f664368616e6e656c4167656e745065726d697373696f6e73457863656564656400070419014d6178696d756d206e756d626572206f66206368616e6e656c206167656e74207065726d697373696f6e7320666f72206368616e6e656c206167656e74206578636565646564ac4d61784e756d6265724f6650617573656446656174757265735065724368616e6e656c4578636565646564000804d84d6178696d756d206e756d626572206f662070617573656420666561747572657320706572206368616e6e656c20657863656564656480496e76616c69644368616e6e656c4261675769746e65737350726f766964656400090411014368616e6e656c20626167207769746e65737320706172616d657465727320646f6e2774206d61746368207468652063757272656e742072756e74696d652073746174659c496e76616c696453746f726167654275636b6574734e756d5769746e65737350726f7669646564000a04450153746f72616765206275636b657473206e756d626572207769746e65737320706172616d6574657220646f6573206e6f74206d61746368207468652063757272656e742072756e74696d652073746174657c4d697373696e6753746f726167654275636b6574734e756d5769746e657373000b084d0153746f72616765206275636b657473206e756d626572207769746e65737320706172616d65746572206d7573742062652070726f7669646564207768656e206368616e6e656c2f766964656f2061737365747348617265206265696e6720757064617465642e784368616e6e656c4f776e65724d656d626572446f65734e6f744578697374000c04b850726f7669646564206368616e6e656c206f776e657220286d656d6265722920646f6573206e6f74206578697374904368616e6e656c4f776e657243757261746f7247726f7570446f65734e6f744578697374000d04d450726f7669646564206368616e6e656c206f776e6572202863757261746f722067726f75702920646f6573206e6f74206578697374b04368616e6e656c5374617465426c6f6174426f6e6442656c6f774578697374656e7469616c4465706f736974000e0809014368616e6e656c20737461746520626c6f617420626f6e642063616e6e6f74206265206c6f776572207468616e206578697374656e7469616c206465706f7369742c050162656361757365206974206d7573742073656375726520746865206368616e6e656c206d6f64756c65206163636f756e7420616761696e73742064757374696e67704e756d6265724f66417373657473546f52656d6f766549735a65726f000f04a90144656c657465206368616e6e656c20616e642061737365747320616e642064656c65746520766964656f20617373657473206d75737420686176652061206e756d626572206f662061737365747320746f2072656d6f76652067726561746572207468616e207a65726f9843757261746f7249734e6f74414d656d6265724f66476976656e43757261746f7247726f7570001004450143757261746f7220756e6465722070726f76696465642063757261746f72206964206973206e6f742061206d656d626572206f662063757261726f722067726f757020756e64657220676976656e206964a843757261746f724973416c7265616479414d656d6265724f66476976656e43757261746f7247726f7570001104550143757261746f7220756e6465722070726f76696465642063757261746f7220696420697320616c72656164792061206d656d626572206f662063757261726f722067726f757020756e64657220676976656e2069646043757261746f7247726f7570446f65734e6f74457869737400120488476976656e2063757261746f722067726f757020646f6573206e6f742065786973747043757261746f727350657247726f75704c696d697452656163686564001304b84d6178206e756d626572206f662063757261746f7273207065722067726f7570206c696d697420726561636865645c43757261746f7247726f757049734e6f744163746976650014046c43757261746f722067726f7570206973206e6f74206163746976654043757261746f724964496e76616c6964001504d843757261746f72206964206973206e6f74206120776f726b657220696420696e20636f6e74656e7420776f726b696e672067726f7570384c656164417574684661696c6564001604684c6561642061757468656e7469636174696f6e206661696c6564404d656d626572417574684661696c6564001704704d656d6265722061757468656e7469636174696f6e206661696c65644443757261746f72417574684661696c65640018047443757261746f722061757468656e7469636174696f6e206661696c6564244261644f726967696e00190478457870656374656420726f6f74206f72207369676e6564206f726967696e484163746f724e6f74417574686f72697a6564001a04b04f7065726174696f6e2063616e6e6f7420626520706572666f6d656420776974682074686973204163746f725043617465676f7279446f65734e6f744578697374001b04ac41204368616e6e656c206f7220566964656f2043617465676f727920646f6573206e6f742065786973742e4c4368616e6e656c446f65734e6f744578697374001c04584368616e6e656c20646f6573206e6f7420657869737444566964656f446f65734e6f744578697374001d0450566964656f20646f6573206e6f7420657869737434566964656f496e536561736f6e001e04f4566664656f20696e20736561736f6e2063616e60742062652072656d6f766564202862656361757365206f7264657220697320696d706f7274616e7429444163746f7243616e6e6f7442654c656164001f04c84163746f722063616e6e6f7420617574686f72697a65206173206c65616420666f7220676976656e2065787472696e736963544163746f7243616e6e6f744f776e4368616e6e656c002004604163746f722063616e6e6f74204f776e206368616e6e656c604e6674416c72656164794f776e656442794368616e6e656c002104a4417474656d707420746f20736c696e67206261636b2061206368616e6e656c206f776e6564206e6674404e6674416c7265616479457869737473002204944e667420666f7220676976656e20766964656f20696420616c7265616479206578697374733c4e6674446f65734e6f744578697374002304944e667420666f7220676976656e20766964656f20696420646f6573206e6f742065786973746c4f766572666c6f774f72556e646572666c6f7748617070656e6564002404904f766572666c6f77206f7220756e646572666c6f77206572726f722068617070656e656434446f65734e6f744f776e4e667400250474476976656e206f726967696e20646f6573206e6f74206f776e206e667464526f79616c74795570706572426f756e64457863656564656400260470526f79616c747920557070657220426f756e6420457863656564656464526f79616c74794c6f776572426f756e64457863656564656400270470526f79616c7479204c6f77657220426f756e642045786365656465648441756374696f6e4475726174696f6e5570706572426f756e6445786365656465640028049441756374696f6e206475726174696f6e20757070657220626f756e642065786365656465648441756374696f6e4475726174696f6e4c6f776572426f756e6445786365656465640029049441756374696f6e206475726174696f6e206c6f77657220626f756e6420657863656564656484457874656e73696f6e506572696f645570706572426f756e644578636565646564002a04b441756374696f6e20657874656e73696f6e20706572696f6420757070657220626f756e6420657863656564656484457874656e73696f6e506572696f644c6f776572426f756e644578636565646564002b04b441756374696f6e20657874656e73696f6e20706572696f64206c6f77657220626f756e64206578636565646564844269644c6f636b4475726174696f6e5570706572426f756e644578636565646564002c0498426964206c6f636b206475726174696f6e20757070657220626f756e64206578636565646564844269644c6f636b4475726174696f6e4c6f776572426f756e644578636565646564002d0498426964206c6f636b206475726174696f6e206c6f77657220626f756e642065786365656465647c5374617274696e6750726963655570706572426f756e644578636565646564002e048c5374617274696e6720707269636520757070657220626f756e642065786365656465647c5374617274696e6750726963654c6f776572426f756e644578636565646564002f048c5374617274696e67207072696365206c6f77657220626f756e642065786365656465648041756374696f6e426964537465705570706572426f756e6445786365656465640030049441756374696f6e20626964207374657020757070657220626f756e642065786365656465648041756374696f6e426964537465704c6f776572426f756e6445786365656465640031049441756374696f6e206269642073746570206c6f77657220626f756e642065786365656465644c496e73756666696369656e7442616c616e636500320450496e73756666696369656e742062616c616e63656442696453746570436f6e73747261696e7456696f6c61746564003304b44d696e696d616c2061756374696f6e20626964207374657020636f6e73747261696e742076696f6c617465642e64496e76616c6964426964416d6f756e7453706563696669656400340488436f6d6d697420766572696669636174696f6e20666f722062696420616d6f756e747c5374617274696e675072696365436f6e73747261696e7456696f6c61746564003504ac41756374696f6e207374617274696e6720707269636520636f6e73747261696e742076696f6c617465642e50416374696f6e48617342696473416c7265616479003604a8416c7265616479206163746976652061756374696f6e2063616e6e6f742062652063616e63656c6c6564304e667449734e6f7449646c65003704990143616e206e6f74206372656174652061756374696f6e20666f72204e66742c2069662061756374696f6e2068617665206265656e20616c72656164792073746172746564206f72206e6674206973206c6f636b656420666f7220746865207472616e736665726050656e64696e674f66666572446f65734e6f7445786973740038047c4e6f2070656e64696e67206f666665727320666f7220676976656e204e6674545265776172644163636f756e7449734e6f74536574003904c843726561746f7220726f79616c747920726571756972657320726577617264206163636f756e7420746f206265207365742e404163746f7249734e6f74426964646572003a04684163746f72206973206e6f742061206c617374206269646465726041756374696f6e43616e6e6f744265436f6d706c65746564003b046c41756374696f6e2063616e6e6f7420626520636f6d706c657465643c426964446f65734e6f744578697374003c046841756374696f6e20646f6573206e6f74206861766520626964734c4269644973466f725061737441756374696f6e003d049453656c65637465642042696420697320666f722070617374206f70656e2061756374696f6e6853746172747341744c6f776572426f756e644578636565646564003e049841756374696f6e20737461727473206174206c6f77657220626f756e642065786365656465646853746172747341745570706572426f756e644578636565646564003f049841756374696f6e2073746172747320617420757070657220626f756e642065786365656465644841756374696f6e4469644e6f7453746172740040045c41756374696f6e20646964206e6f742073746172746564444e6f74496e41756374696f6e53746174650041046c4e6674206973206e6f7420696e2061756374696f6e2073746174657c4d656d62657249734e6f74416c6c6f776564546f5061727469636970617465004204bc4d656d626572206973206e6f7420616c6c6f77656420746f20706172746963697061746520696e2061756374696f6e544d656d62657250726f66696c654e6f74466f756e64004304604d656d6265722070726f66696c65206e6f7420666f756e644c4e66744e6f74496e4275794e6f7753746174650044049c476976656e20766964656f206e6674206973206e6f7420696e20627579206e6f7720737461746584496e76616c69644275794e6f775769746e657373507269636550726f76696465640045045501607769746e6573735f7072696365602070726f766964656420746f20606275795f6e6f77602065787472696e73696320646f6573206e6f74206d61746368207468652063757272656e742073656c6c2070726963655049734e6f744f70656e41756374696f6e547970650046046841756374696f6e2074797065206973206e6f7420604f70656e605c49734e6f74456e676c69736841756374696f6e547970650047047441756374696f6e2074797065206973206e6f742060456e676c697368606c4269644c6f636b4475726174696f6e49734e6f744578706972656400480480426964206c6f636b206475726174696f6e206973206e6f742065787069726564684e667441756374696f6e4973416c726561647945787069726564004904784e66742061756374696f6e20697320616c72656164792065787069726564904275794e6f774d7573744265477265617465725468616e5374617274696e675072696365004a04ac41756374696f6e20627579206e6f77206973206c657373207468656e207374617274696e67207072696365605461726765744d656d626572446f65734e6f744578697374004b04984e6674206f6666657220746172676574206d656d62657220646f6573206e6f742065786973748c496e76616c69644e66744f666665725769746e657373507269636550726f7669646564004c040d0143757272656e74206e6674206f6666657220707269636520646f6573206e6f74206d61746368207468652070726f766964656420607769746e6573735f707269636560ac4d617841756374696f6e57686974654c6973744c656e6774685570706572426f756e644578636565646564004d04c44d61782061756374696f6e2077686974656c697374206c656e67746820757070657220626f756e642065786365656465646457686974656c6973744861734f6e6c794f6e654d656d626572004e049441756374696f6e2077686974656c69737420686173206f6e6c79206f6e65206d656d6265727457686974656c69737465644d656d626572446f65734e6f744578697374004f04d84174206c65617374206f6e65206f66207468652077686974656c6973746564206d656d6265727320646f6573206e6f74206578697374784e66744e6f6e4368616e6e656c4f776e6572446f65734e6f744578697374005004f84e6f6e2d6368616e6e656c206f776e65722073706563696669656420647572696e67206e66742069737375616e636520646f6573206e6f74206578697374ac457874656e73696f6e506572696f644973477265617465725468656e41756374696f6e4475726174696f6e005104c4457874656e73696f6e20706572696f642069732067726561746572207468656e2061756374696f6e206475726174696f6e444e6f417373657473537065636966696564005204ac4e6f2061737365747320746f2062652072656d6f7665642068617665206265656e2073706563696669656454496e76616c696441737365747350726f7669646564005304684368616e6e656c2061737365747320666561736962696c697479544368616e6e656c436f6e7461696e73566964656f73005404584368616e6e656c20436f6e7461696e7320566964656f544368616e6e656c436f6e7461696e734173736574730055045c4368616e6e656c20436f6e7461696e73204173736574735c496e76616c696442616753697a655370656369666965640056047c4261672053697a6520737065636966696564206973206e6f742076616c6964504d6967726174696f6e4e6f7446696e6973686564005704584d6967726174696f6e206e6f7420646f6e6520796574445265706c79446f65734e6f7445786973740058046c5061727465636970616e74206973206e6f742061206d656d6265724c556e73756666696369656e7442616c616e636500590450496e73756666696369656e742062616c616e63656c496e73756666696369656e74547265617375727942616c616e6365005a0474496e73756666696369656e742074726561737572792062616c616e636554496e76616c69644d656d62657250726f7669646564005b0470496e76616c6964206d656d62657220696420207370656369666965643c4163746f724e6f74414d656d626572005c04544163746f72206973206e6f742041204d656d626572785061796d656e7450726f6f66566572696669636174696f6e4661696c6564005d04845061796d656e742050726f6f6620766572696669636174696f6e206661696c656484436173686f7574416d6f756e74457863656564734d6178696d756d416d6f756e74005e04c04368616e6e656c20636173686f757420616d6f756e7420697320746f6f206869676820746f20626520636c61696d65647c436173686f7574416d6f756e7442656c6f774d696e696d756d416d6f756e74005f04bc4368616e6e656c20636173686f757420616d6f756e7420697320746f6f206c6f7720746f20626520636c61696d6564e05769746864726177616c416d6f756e74457863656564734368616e6e656c4163636f756e74576974686472617761626c6542616c616e63650060085901416e20617474656d707420746f2077697468647261772066756e64732066726f6d206368616e6e656c206163636f756e74206661696c65642c2062656361757365207468652073706563696669656420616d6f756e744901657863656564732074686520776974686472617761626c6520616d6f756e7420286368616e6e656c206163636f756e742062616c616e6365206d696e7573206368616e6e656c20626c6f617420626f6e64297c576974686472617746726f6d4368616e6e656c416d6f756e7449735a65726f0061085901416e20617474656d707420746f2077697468647261772066756e64732066726f6d206368616e6e656c206163636f756e74206661696c65642c2062656361757365207468652073706563696669656420616d6f756e741c6973207a65726f5c4368616e6e656c436173686f75747344697361626c65640062049c4368616e6e656c20636173686f757473206172652063757272656e746c792064697361626c6564a44d696e436173686f7574416c6c6f776564457863656564734d6178436173686f7574416c6c6f77656400630809014e65772076616c75657320666f72206d696e5f636173686f75745f616c6c6f7765642f6d61785f636173686f75745f616c6c6f7765642061726520696e76616c6964d46d696e5f636173686f75745f616c6c6f7765642063616e6e6f7420657863656564206d61785f636173686f75745f616c6c6f7765648443757261746f724d6f6465726174696f6e416374696f6e4e6f74416c6c6f776564006404110143757261746f7220646f6573206e6f742068617665207065726d697373696f6e7320746f20706572666f726d20676976656e206d6f6465726174696f6e20616374696f6e944d617843757261746f725065726d697373696f6e735065724c6576656c457863656564656400650441014d6178696d756d206e756d626572206f662063757261746f72207065726d697373696f6e732070657220676976656e206368616e6e656c2070726976696c656765206c6576656c206578636565646564c043757261746f7247726f75704d61785065726d697373696f6e7342794c6576656c4d617053697a654578636565646564006604290143757261746f722067726f75702773207065726d697373696f6e73206279206c6576656c206d617020657863656564656420746865206d6178696d756d20616c6c6f7765642073697a65504368616e6e656c466561747572655061757365640067045d014f7065726174696f6e2063616e6e6f742062652065786563757465642c20626563617573652074686973206368616e6e656c206665617475726520686173206265656e2070617573656420627920612063757261746f72444368616e6e656c4261674d697373696e670068042d01556e65787065637465642072756e74696d652073746174653a206d697373696e67206368616e6e656c2062616720647572696e672064656c6574655f6368616e6e656c20617474656d70748c417373657473546f52656d6f76654265796f6e64456e74697479417373657473536574006904f5014c697374206f662061737365747320746f2072656d6f76652070726f766964656420666f72207570646174655f6368616e6e656c202f207570646174655f766964656f20636f6e7461696e7320617373657473207468617420646f6e27742062656c6f6e6720746f207468652073706563696669656420656e7469747990496e76616c6964566964656f446174614f626a65637473436f756e7450726f7669646564006a04f4496e76616c6964206e756d626572206f66206f626a6563747320746f2064656c6574652070726f766964656420666f722064656c6574655f766964656f70496e76616c69644368616e6e656c5472616e73666572537461747573006b04bc496e76616c6964206368616e6e656c207472616e736665722073746174757320666f72206f7065726174696f6e732e78496e76616c69644368616e6e656c5472616e736665724163636570746f72006c04d4496e636f7272656374206163746f7220747269657320746f2061636365707420746865206368616e6e656c207472616e736665722e98496e76616c69644368616e6e656c5472616e73666572436f6d6d69746d656e74506172616d73006d08550143616e6e6f742061636365707420746865206368616e6e656c207472616e736665723a2070726f766964656420636f6d6d69746d656e7420706172616d657465727320646f65736e2774206d617463682077697468906368616e6e656c2070656e64696e67207472616e7366657220706172616d65746572732e8c4368616e6e656c4167656e74496e73756666696369656e745065726d697373696f6e73006e004c496e76616c69644368616e6e656c4f776e6572006f04a4496e636f7272656374206368616e6e656c206f776e657220666f7220616e206f7065726174696f6e2e285a65726f5265776172640070046443616e6e6f7420636c61696d207a65726f207265776172642e78496e73756666696369656e7442616c616e6365466f725472616e73666572007104510143616e6e6f74207472616e7366657220746865206368616e6e656c3a206368616e6e656c206f776e65722068617320696e73756666696369656e742062616c616e6365202862756467657420666f72205747732994496e73756666696369656e7442616c616e6365466f724368616e6e656c4372656174696f6e0072080d0143616e6e6f742063726561746520746865206368616e6e656c3a206368616e6e656c2063726561746f722068617320696e73756666696369656e742062616c616e6365e9012862756467657420666f72206368616e6e656c20737461746520626c6f617420626f6e64202b206368616e6e656c2064617461206f626a7320737461746520626c6f617420626f6e6473202b2064617461206f626a732073746f726167652066656573202b206578697374656e7469616c206465706f736974298c496e73756666696369656e7442616c616e6365466f72566964656f4372656174696f6e007308fc43616e6e6f74206372656174652074686520766964656f3a20766964656f2063726561746f722068617320696e73756666696369656e742062616c616e6365d9012862756467657420666f7220766964656f20737461746520626c6f617420626f6e64202b20766964656f2064617461206f626a7320737461746520626c6f617420626f6e6473202b2064617461206f626a732073746f726167652066656573202b206578697374656e7469616c206465706f7369742964496e73756666696369656e74436f756e63696c4275646765740074006c476c6f62616c4e66744461696c794c696d6974457863656564656400750070476c6f62616c4e66745765656b6c794c696d69744578636565646564007600704368616e6e656c4e66744461696c794c696d69744578636565646564007700744368616e6e656c4e66745765656b6c794c696d697445786365656465640078006443726561746f72546f6b656e416c7265616479497373756564007904c443726561746f7220746f6b656e2077617320616c72656164792069737375656420666f722074686973206368616e6e656c5443726561746f72546f6b656e4e6f74497373756564007a04b043726561746f7220746f6b656e207761736e27742069737375656420666f722074686973206368616e6e656c884d656d6265724964436f756c644e6f7442654465726976656446726f6d4163746f72007b0415014d656d62657220696420636f756c64206e6f7420626520646572697665642066726f6d207468652070726f766964656420436f6e74656e744163746f7220636f6e74657874bc43616e6e6f74576974686472617746726f6d4368616e6e656c5769746843726561746f72546f6b656e497373756564007c08290143616e6e6f74206469726563746c792077697468647261772066756e64732066726f6d2061206368616e6e656c206163636f756e74207768656e20746865206368616e6e656c2068617358612063726561746f7220746f6b656e20697373756564bc506174726f6e61676543616e4f6e6c794265436c61696d6564466f724d656d6265724f776e65644368616e6e656c73007d04f4506174726f6e6167652063616e206f6e6c7920626520636c61696d6564206966206368616e6e656c206973206f776e65642062792061206d656d626572a84368616e6e656c5472616e7366657273426c6f636b6564447572696e67526576656e756553706c697473007e04cc4368616e6e656c205472616e73666572732061726520626c6f636b656420647572696e6720726576656e75652073706c6974739c4368616e6e656c5472616e7366657273426c6f636b6564447572696e67546f6b656e53616c6573007f04c04368616e6e656c205472616e73666572732061726520626c6f636b656420647572696e6720746f6b656e2073616c65730460436f6e74656e74206469726563746f7279206572726f7273f508083870616c6c65745f73746f72616765244261675265636f7264084c53746f726167654275636b657449647353657401f90860446973747269627574696f6e4275636b657449647353657401fd080010012473746f7265645f6279f908014c53746f726167654275636b657449647353657400013864697374726962757465645f6279fd080160446973747269627574696f6e4275636b65744964735365740001486f626a656374735f746f74616c5f73697a6520010c7536340001386f626a656374735f6e756d62657220010c7536340000f90810346672616d655f737570706f72741c73746f7261676544626f756e6465645f62747265655f7365743c426f756e646564425472656553657408045401200453000004005101012c42547265655365743c543e0000fd0810346672616d655f737570706f72741c73746f7261676544626f756e6465645f62747265655f7365743c426f756e6465644254726565536574080454010d020453000004002102012c42547265655365743c543e00000109083870616c6c65745f73746f726167654c53746f726167654275636b65745265636f72640820576f726b657249640120244163636f756e74496401000010013c6f70657261746f725f737461747573050901c053746f726167654275636b65744f70657261746f725374617475733c576f726b657249642c204163636f756e7449643e000148616363657074696e675f6e65775f62616773880110626f6f6c00011c766f75636865729502011c566f756368657200013461737369676e65645f6261677320010c75363400000509083870616c6c65745f73746f726167656c53746f726167654275636b65744f70657261746f725374617475730820576f726b657249640120244163636f756e7449640100010c1c4d697373696e6700000050496e766974656453746f72616765576f726b65720400200120576f726b657249640001003453746f72616765576f726b65720800200120576f726b6572496400000001244163636f756e74496400020000090910346672616d655f737570706f72741c73746f726167652c626f756e6465645f76656328426f756e64656456656308045401080453000004002801185665633c543e00000d09083870616c6c65745f73746f726167656044796e616d69634261674372656174696f6e506f6c69637904b0446973747269627574696f6e4275636b657446616d696c79546f4e756d6265724f664275636b6574734d6170011109000801646e756d6265725f6f665f73746f726167655f6275636b65747310010c75333200012066616d696c696573110901b0446973747269627574696f6e4275636b657446616d696c79546f4e756d6265724f664275636b6574734d61700000110910346672616d655f737570706f72741c73746f7261676544626f756e6465645f62747265655f6d61703c426f756e64656442547265654d61700c044b0120045601100453000004009d02013842547265654d61703c4b2c20563e00001509000004087d0220001909083870616c6c65745f73746f7261676528446174614f626a6563740448526570617961626c65426c6f6174426f6e6401c901001001206163636570746564880110626f6f6c00014073746174655f626c6f61745f626f6e64c9010148526570617961626c65426c6f6174426f6e6400011073697a6520010c75363400013c697066735f636f6e74656e745f69640909013c4261736535384d756c74696861736800001d09083870616c6c65745f73746f7261676578446973747269627574696f6e4275636b657446616d696c795265636f7264045c446973747269627574696f6e4275636b6574496e6465780120000401786e6578745f646973747269627574696f6e5f6275636b65745f696e64657820015c446973747269627574696f6e4275636b6574496e64657800002109083870616c6c65745f73746f7261676560446973747269627574696f6e4275636b65745265636f72640888446973747269627574696f6e4275636b6574496e76697465644f70657261746f72730125096c446973747269627574696f6e4275636b65744f70657261746f727301290900140148616363657074696e675f6e65775f62616773880110626f6f6c000130646973747269627574696e67880110626f6f6c00014c70656e64696e675f696e7669746174696f6e7325090188446973747269627574696f6e4275636b6574496e76697465644f70657261746f72730001246f70657261746f72732909016c446973747269627574696f6e4275636b65744f70657261746f727300013461737369676e65645f6261677320010c7536340000250910346672616d655f737570706f72741c73746f7261676544626f756e6465645f62747265655f7365743c426f756e646564425472656553657408045401200453000004005101012c42547265655365743c543e0000290910346672616d655f737570706f72741c73746f7261676544626f756e6465645f62747265655f7365743c426f756e646564425472656553657408045401200453000004005101012c42547265655365743c543e00002d09083870616c6c65745f73746f72616765144572726f72040454000105013c41726974686d657469634572726f72000004f447656e657269632041726974686d65746963204572726f722064756520746f20696e7465726e616c206163636f756e74696e67206f7065726174696f6e40496e76616c69644369644c656e67746800010494496e76616c696420434944206c656e67746820286d75737420626520343620627974657329444e6f4f626a656374734f6e55706c6f6164000204a0456d707479202264617461206f626a656374206372656174696f6e2220636f6c6c656374696f6e2e6053746f726167654275636b6574446f65736e744578697374000304ac546865207265717565737465642073746f72616765206275636b657420646f65736e27742065786973742e7053746f726167654275636b657449734e6f74426f756e64546f426167000404cc546865207265717565737465642073746f72616765206275636b6574206973206e6f7420626f756e6420746f2061206261672e6453746f726167654275636b65744973426f756e64546f426167000504dc546865207265717565737465642073746f72616765206275636b657420697320616c726561647920626f756e6420746f2061206261672e644e6f53746f726167654275636b6574496e7669746174696f6e0006041901496e76616c6964206f7065726174696f6e207769746820696e76697465733a207468657265206973206e6f2073746f72616765206275636b657420696e7669746174696f6e2e6453746f7261676550726f7669646572416c72656164795365740007040501496e76616c6964206f7065726174696f6e207769746820696e76697465733a2073746f726167652070726f76696465722077617320616c7265616479207365742e6053746f7261676550726f76696465724d75737442655365740008047453746f726167652070726f7669646572206d757374206265207365742e7c446966666572656e7453746f7261676550726f7669646572496e76697465640009041501496e76616c6964206f7065726174696f6e207769746820696e76697465733a20616e6f746865722073746f726167652070726f76696465722077617320696e76697465642e58496e766974656453746f7261676550726f7669646572000a041501496e76616c6964206f7065726174696f6e207769746820696e76697465733a2073746f726167652070726f76696465722077617320616c726561647920696e76697465642e8853746f726167654275636b65744964436f6c6c656374696f6e73417265456d707479000b04a053746f72616765206275636b657420696420636f6c6c656374696f6e732061726520656d7074792ed053746f726167654275636b6574734e756d62657256696f6c6174657344796e616d69634261674372656174696f6e506f6c696379000c08290153746f72616765206275636b657420696420636f6c6c656374696f6e2070726f766964656420636f6e747261646963747320746865206578697374696e672064796e616d696320626167406372656174696f6e20706f6c6963792ecc446973747269627574696f6e4275636b65747356696f6c6174657344796e616d69634261674372656174696f6e506f6c696379000d083d01446973747269627574696f6e206275636b657420696420636f6c6c656374696f6e2070726f766964656420636f6e747261646963747320746865206578697374696e672064796e616d696320626167406372656174696f6e20706f6c6963792e38456d707479436f6e74656e744964000e04b455706c6f61642064617461206572726f723a20656d70747920636f6e74656e742049442070726f76696465642e385a65726f4f626a65637453697a65000f049055706c6f61642064617461206572726f723a207a65726f206f626a6563742073697a652e88496e76616c69645374617465426c6f6174426f6e64536f757263654163636f756e74001004ec55706c6f61642064617461206572726f723a20696e76616c696420737461746520626c6f617420626f6e6420736f75726365206163636f756e742e58496e76616c696453746f7261676550726f766964657200110490496e76616c69642073746f726167652070726f766964657220666f72206275636b65742e4c496e73756666696369656e7442616c616e636500120498496e73756666696369656e742062616c616e636520666f7220616e206f7065726174696f6e2e54446174614f626a656374446f65736e7445786973740013046844617461206f626a65637420646f65736e27742065786973742e4055706c6f6164696e67426c6f636b65640014049c55706c6f6164696e67206f6620746865206e6577206f626a65637420697320626c6f636b65642e74446174614f626a6563744964436f6c6c656374696f6e4973456d7074790015048c44617461206f626a65637420696420636f6c6c656374696f6e20697320656d7074792e80536f75726365416e6444657374696e6174696f6e42616773417265457175616c001604a043616e6e6f74206d6f7665206f626a656374732077697468696e207468652073616d65206261672e54446174614f626a656374426c61636b6c6973746564001704a844617461206f626a65637420686173682069732070617274206f662074686520626c61636b6c6973742e68426c61636b6c69737453697a654c696d6974457863656564656400180478426c61636b6c6973742073697a65206c696d69742065786365656465642e84566f75636865724d61784f626a65637453697a654c696d69744578636565646564001904ac4d6178206f626a6563742073697a65206c696d697420657863656564656420666f7220766f75636865722e8c566f75636865724d61784f626a6563744e756d6265724c696d69744578636565646564001a04b44d6178206f626a656374206e756d626572206c696d697420657863656564656420666f7220766f75636865722e9453746f726167654275636b65744f626a6563744e756d6265724c696d697452656163686564001b04cc4f626a656374206e756d626572206c696d697420666f72207468652073746f72616765206275636b657420726561636865642e8c53746f726167654275636b65744f626a65637453697a654c696d697452656163686564001c04e04f626a6563747320746f74616c2073697a65206c696d697420666f72207468652073746f72616765206275636b657420726561636865642e6c496e73756666696369656e74547265617375727942616c616e6365001d04d8496e73756666696369656e74206d6f64756c652074726561737572792062616c616e636520666f7220616e206f7065726174696f6e2e8443616e6e6f7444656c6574654e6f6e456d70747953746f726167654275636b6574001e04a443616e6e6f742064656c6574652061206e6f6e2d656d7074792073746f72616765206275636b65742e68446174614f626a6563744964506172616d73417265456d707479001f04f85468652060646174615f6f626a6563745f696473602065787472696e73696320706172616d6574657220636f6c6c656374696f6e20697320656d7074792e7c53746f726167654275636b6574735065724261674c696d6974546f6f4c6f77002004d8546865206e6577206053746f726167654275636b6574735065724261674c696d697460206e756d62657220697320746f6f206c6f772e8053746f726167654275636b6574735065724261674c696d6974546f6f48696768002104dc546865206e6577206053746f726167654275636b6574735065724261674c696d697460206e756d62657220697320746f6f20686967682e8053746f726167654275636b65745065724261674c696d69744578636565646564002204cc6053746f726167654275636b6574735065724261674c696d6974602077617320657863656564656420666f722061206261672e8053746f726167654275636b6574446f65736e744163636570744e657742616773002304ac5468652073746f72616765206275636b657420646f65736e277420616363657074206e657720626167732e4044796e616d6963426167457869737473002404c843616e6e6f7420637265617465207468652064796e616d6963206261673a2064796e616d696320626167206578697374732e5444796e616d6963426167446f65736e7445786973740025046844796e616d69632062616720646f65736e27742065786973742e8853746f7261676550726f76696465724f70657261746f72446f65736e744578697374002604a053746f726167652070726f7669646572206f70657261746f7220646f65736e27742065786973742e484461746153697a654665654368616e676564002704b8496e76616c69642065787472696e7369632063616c6c3a20646174612073697a6520666565206368616e6765642e7c446174614f626a6563745374617465426c6f6174426f6e644368616e676564002804f4496e76616c69642065787472696e7369632063616c6c3a2064617461206f626a65637420737461746520626c6f617420626f6e64206368616e6765642e7843616e6e6f7444656c6574654e6f6e456d70747944796e616d69634261670029049043616e6e6f742064656c657465206e6f6e20656d7074792064796e616d6963206261672eb84d6178446973747269627574696f6e4275636b657446616d696c794e756d6265724c696d69744578636565646564002a04d44d617820646973747269627574696f6e206275636b65742066616d696c79206e756d626572206c696d69742065786365656465642e8c446973747269627574696f6e4275636b657446616d696c79446f65736e744578697374002b04a4446973747269627574696f6e206275636b65742066616d696c7920646f65736e27742065786973742e74446973747269627574696f6e4275636b6574446f65736e744578697374002c0488446973747269627574696f6e206275636b657420646f65736e27742065786973742e9c446973747269627574696f6e4275636b65744964436f6c6c656374696f6e73417265456d707479002d04b4446973747269627574696f6e206275636b657420696420636f6c6c656374696f6e732061726520656d7074792e94446973747269627574696f6e4275636b6574446f65736e744163636570744e657742616773002e04b0446973747269627574696f6e206275636b657420646f65736e277420616363657074206e657720626167732eb84d6178446973747269627574696f6e4275636b65744e756d6265725065724261674c696d69744578636565646564002f04d84d617820646973747269627574696f6e206275636b6574206e756d6265722070657220626167206c696d69742065786365656465642e84446973747269627574696f6e4275636b657449734e6f74426f756e64546f426167003004a8446973747269627574696f6e206275636b6574206973206e6f7420626f756e6420746f2061206261672e78446973747269627574696f6e4275636b65744973426f756e64546f42616700310498446973747269627574696f6e206275636b657420697320626f756e6420746f2061206261672e90446973747269627574696f6e4275636b6574735065724261674c696d6974546f6f4c6f77003204ec546865206e65772060446973747269627574696f6e4275636b6574735065724261674c696d697460206e756d62657220697320746f6f206c6f772e94446973747269627574696f6e4275636b6574735065724261674c696d6974546f6f48696768003304f0546865206e65772060446973747269627574696f6e4275636b6574735065724261674c696d697460206e756d62657220697320746f6f20686967682e9c446973747269627574696f6e50726f76696465724f70657261746f72446f65736e744578697374003404b4446973747269627574696f6e2070726f7669646572206f70657261746f7220646f65736e27742065786973742ea8446973747269627574696f6e50726f76696465724f70657261746f72416c7265616479496e7669746564003504bc446973747269627574696f6e2070726f7669646572206f70657261746f7220616c726561647920696e76697465642e7c446973747269627574696f6e50726f76696465724f70657261746f72536574003604ac446973747269627574696f6e2070726f7669646572206f70657261746f7220616c7265616479207365742e784e6f446973747269627574696f6e4275636b6574496e7669746174696f6e003704884e6f20646973747269627574696f6e206275636b657420696e7669746174696f6e2eac4d7573744265446973747269627574696f6e50726f76696465724f70657261746f72466f724275636b65740038042901496e76616c6964206f7065726174696f6e733a206d757374206265206120646973747269627574696f6e2070726f7669646572206f70657261746f7220666f722061206275636b65742ef84d61784e756d6265724f6650656e64696e67496e7669746174696f6e734c696d6974466f72446973747269627574696f6e4275636b65745265616368656400390429014d6178206e756d626572206f662070656e64696e6720696e7669746174696f6e73206c696d697420666f72206120646973747269627574696f6e206275636b657420726561636865642ec04d61784e756d6265724f664f70657261746f7273506572446973747269627574696f6e4275636b657452656163686564003a04e84d6178206e756d626572206f66206f70657261746f727320666f72206120646973747269627574696f6e206275636b657420726561636865642ea8446973747269627574696f6e46616d696c79426f756e64546f4261674372656174696f6e506f6c696379003b04cc446973747269627574696f6e2066616d696c7920626f756e6420746f206120626167206372656174696f6e20706f6c6963792e644d6178446174614f626a65637453697a654578636565646564003c04784d61782064617461206f626a6563742073697a652065786365656465642e60496e76616c69645472616e736163746f724163636f756e74003d04b8496e76616c6964207472616e736163746f72206163636f756e7420494420666f722074686973206275636b65742ec04e756d6265724f6653746f726167654275636b6574734f7574736964654f66416c6c6f776564436f6e747261696e7473003e049c4e6f7420616c6c6f77656420276e756d626572206f662073746f72616765206275636b65747327d44e756d6265724f66446973747269627574696f6e4275636b6574734f7574736964654f66416c6c6f776564436f6e747261696e7473003f04b04e6f7420616c6c6f77656420276e756d626572206f6620646973747269627574696f6e206275636b657473273043616c6c44697361626c65640040043443616c6c2044697361626c6564048053746f72616765206d6f64756c6520707265646566696e6564206572726f727331090c5070616c6c65745f70726f6a6563745f746f6b656e1474797065732c4163636f756e7444617461101c42616c616e63650118345374616b696e6753746174757301350948526570617961626c65426c6f6174426f6e6401c9014056657374696e675363686564756c65730139090018014476657374696e675f7363686564756c65733909014056657374696e675363686564756c6573000118616d6f756e7418011c42616c616e636500015073706c69745f7374616b696e675f7374617475734d0901544f7074696f6e3c5374616b696e675374617475733e000128626c6f61745f626f6e64c9010148526570617961626c65426c6f6174426f6e640001606e6578745f76657374696e675f7472616e736665725f696420010c7536340001806c6173745f73616c655f746f74616c5f7075726368617365645f616d6f756e74510901784f7074696f6e3c28546f6b656e53616c6549642c2042616c616e6365293e000035090c5070616c6c65745f70726f6a6563745f746f6b656e147479706573345374616b696e67537461747573041c42616c616e636501180008012073706c69745f6964100138526576656e756553706c69744964000118616d6f756e7418011c42616c616e63650000390910346672616d655f737570706f72741c73746f7261676544626f756e6465645f62747265655f6d61703c426f756e64656442547265654d61700c044b01f9020456013d090453000004004109013842547265654d61703c4b2c20563e00003d090c5070616c6c65745f70726f6a6563745f746f6b656e1474797065733c56657374696e675363686564756c65082c426c6f636b4e756d62657201101c42616c616e63650118001401686c696e6561725f76657374696e675f73746172745f626c6f636b10012c426c6f636b4e756d62657200015c6c696e6561725f76657374696e675f6475726174696f6e10012c426c6f636b4e756d626572000130636c6966665f616d6f756e7418011c42616c616e636500015c706f73745f636c6966665f746f74616c5f616d6f756e7418011c42616c616e63650001346275726e65645f616d6f756e7418011c42616c616e636500004109042042547265654d617008044b01f9020456013d0900040045090000004509000002490900490900000408f9023d09004d0904184f7074696f6e0404540135090108104e6f6e6500000010536f6d65040035090000010000510904184f7074696f6e0404540155090108104e6f6e6500000010536f6d6504005509000001000055090000040810180059090c5070616c6c65745f70726f6a6563745f746f6b656e14747970657324546f6b656e44617461141c42616c616e63650118104861736801242c426c6f636b4e756d626572011024546f6b656e53616c6501090344526576656e756553706c69745374617465015d09002c0130746f74616c5f737570706c7918011c42616c616e6365000134746f6b656e735f69737375656418011c42616c616e63650001306e6578745f73616c655f696410012c546f6b656e53616c65496400011073616c65690901444f7074696f6e3c546f6b656e53616c653e00013c7472616e736665725f706f6c696379ad0201505472616e73666572506f6c6963793c486173683e00011873796d626f6c24011048617368000138706174726f6e6167655f696e666f6d09018c506174726f6e616765446174613c42616c616e63652c20426c6f636b4e756d6265723e00013c6163636f756e74735f6e756d62657220010c753634000148726576656e75655f73706c69745f72617465bd02011c5065726d696c6c000134726576656e75655f73706c69745d090144526576656e756553706c697453746174650001546e6578745f726576656e75655f73706c69745f6964100138526576656e756553706c6974496400005d090c5070616c6c65745f70726f6a6563745f746f6b656e14747970657344526576656e756553706c6974537461746508284a6f7942616c616e636501182c426c6f636b4e756d6265720110010820496e616374697665000000184163746976650400610901a4526576656e756553706c6974496e666f3c4a6f7942616c616e63652c20426c6f636b4e756d6265723e0001000061090c5070616c6c65745f70726f6a6563745f746f6b656e14747970657340526576656e756553706c6974496e666f08284a6f7942616c616e636501182c426c6f636b4e756d6265720110000c0128616c6c6f636174696f6e1801284a6f7942616c616e636500012074696d656c696e656509015454696d656c696e653c426c6f636b4e756d6265723e0001446469766964656e64735f636c61696d65641801284a6f7942616c616e6365000065090c5070616c6c65745f70726f6a6563745f746f6b656e1474797065732054696d656c696e65042c426c6f636b4e756d626572011000080114737461727410012c426c6f636b4e756d6265720001206475726174696f6e10012c426c6f636b4e756d6265720000690904184f7074696f6e0404540109030108104e6f6e6500000010536f6d650400090300000100006d090c5070616c6c65745f70726f6a6563745f746f6b656e14747970657334506174726f6e61676544617461081c42616c616e636501182c426c6f636b4e756d6265720110000c01107261746571090124426c6f636b52617465000180756e636c61696d65645f706174726f6e6167655f74616c6c795f616d6f756e7418011c42616c616e63650001906c6173745f756e636c61696d65645f706174726f6e6167655f74616c6c795f626c6f636b10012c426c6f636b4e756d626572000071090c5070616c6c65745f70726f6a6563745f746f6b656e14747970657324426c6f636b52617465000004000d03012c5065727175696e74696c6c000075090c5070616c6c65745f70726f6a6563745f746f6b656e186572726f7273144572726f720404540001c43c41726974686d657469634572726f72000004c8556e65787065637465642061726974686d65746963206572726f7220286f766572666c6f77202f20756e646572666c6f772980496e73756666696369656e745472616e736665727261626c6542616c616e636500010481014163636f756e742773207472616e736665727261626c652062616c616e636520697320696e73756666696369656e7420746f20706572666f726d20746865207472616e73666572206f7220696e697469616c697a6520746f6b656e2073616c6544546f6b656e446f65734e6f7445786973740002047852657175657374656420746f6b656e20646f6573206e6f74206578697374784163636f756e74496e666f726d6174696f6e446f65734e6f74457869737400030494526571756573746564206163636f756e74206461746120646f6573206e6f74206578697374945472616e7366657244657374696e6174696f6e4d656d626572446f65734e6f74457869737400040419014174206c65617374206f6e65206f6620746865207472616e736665722064657374696e6174696f6e73206973206e6f7420616e206578697374696e67206d656d626572206964784d65726b6c6550726f6f66566572696669636174696f6e4661696c757265000504804d65726b6c652070726f6f6620766572696669636174696f6e206661696c6564a8546172676574506174726f6e6167655261746549734869676865725468616e43757272656e7452617465000604c4546172676574205261746520697320686967686572207468616e2063757272656e7420706174726f6e61676520726174655c546f6b656e53796d626f6c416c7265616479496e5573650007045453796d626f6c20616c726561647920696e2075736590496e697469616c416c6c6f636174696f6e546f4e6f6e4578697374696e674d656d62657200080441014174206c65617374206f6e65206f6620746865206d656d626572732070726f76696465642061732070617274206f6620496e697469616c416c6c6f636174696f6e20646f6573206e6f74206578697374504163636f756e74416c7265616479457869737473000904584163636f756e7420416c7265616479206578697374736c546f6b656e49737375616e63654e6f74496e49646c655374617465000a04a8546f6b656e27732063757272656e74206f66666572696e67207374617465206973206e6f742049646c6558496e73756666696369656e744a6f7942616c616e6365000b04dc496e73756666696369656e74204a4f592042616c616e636520746f20636f76657220746865207472616e73616374696f6e20636f7374736c4a6f795472616e736665725375626a656374546f44757374696e67000c045d0154686520616d6f756e74206f66204a4f5920746f206265207472616e73666572726564206973206e6f7420656e6f75676820746f206b656570207468652064657374696e6174696f6e206163636f756e7420616c697665cc417474656d7074546f52656d6f76654e6f6e4f776e65644163636f756e74556e6465725065726d697373696f6e65644d6f6465000d04ec417474656d707420746f2072656d6f7665206e6f6e206f776e6564206163636f756e7420756e646572207065726d697373696f6e6564206d6f646578417474656d7074546f52656d6f76654e6f6e456d7074794163636f756e74000e04e4417474656d707420746f2072656d6f766520616e206163636f756e74207769746820736f6d65206f75747374616e64696e6720746f6b656e739c43616e6e6f744a6f696e57686974656c697374496e5065726d697373696f6e6c6573734d6f6465000f04b043616e6e6f74206a6f696e2077686974656c69737420696e207065726d697373696f6e6c657373206d6f6465a443616e6e6f7444656973737565546f6b656e576974684f75747374616e64696e674163636f756e7473001004b843616e6e6f74204465697373756520546f6b656e2077697468206f75747374616e64696e67206163636f756e7473384e6f5570636f6d696e6753616c650011047854686520746f6b656e20686173206e6f207570636f6d696e672073616c65304e6f41637469766553616c65001204a854686520746f6b656e20686173206e6f206163746976652073616c6520617420746865206d6f6d656e748c496e73756666696369656e7442616c616e6365466f72546f6b656e507572636861736500130401014163636f756e742773204a4f592062616c616e636520697320696e73756666696369656e7420746f206d616b652074686520746f6b656e207075726368617365544e6f74456e6f756768546f6b656e734f6e53616c650014047d01416d6f756e74206f6620746f6b656e7320746f207075726368617365206f6e2073616c65206578636565647320746865207175616e74697479206f6620746f6b656e73207374696c6c20617661696c61626c65206f6e207468652073616c656853616c655374617274696e67426c6f636b496e54686550617374001504b05370656369666965642073616c65207374617274696e6720626c6f636b20697320696e2074686520706173745c53616c6541636365737350726f6f66526571756972656400160481014f6e6c792077686974656c6973746564207061727469636970616e74732061726520616c6c6f77656420746f20616363657373207468652073616c652c207468657265666f7265206163636573732070726f6f662069732072657175697265649453616c6541636365737350726f6f665061727469636970616e7449734e6f7453656e64657200170829015061727469636970616e7420696e2073616c65206163636573732070726f6f662070726f766964656420647572696e67206070757263686173655f746f6b656e735f6f6e5f73616c656084646f6573206e6f74206d61746368207468652073656e646572206163636f756e745c53616c6550757263686173654361704578636565646564001808610153616c65207061727469636970616e742773206361702028656974686572206361705f7065725f6d656d626572206f722077686974656c6973746564207061727469636970616e742773207370656369666963206361702978776173206578636565646564207769746820746865207075726368617365b04d617856657374696e675363686564756c65735065724163636f756e74506572546f6b656e52656163686564001908c843616e6e6f742061646420616e6f746865722076657374696e67207363686564756c6520746f20616e206163636f756e742e31014d6178696d756d206e756d626572206f662076657374696e67207363686564756c657320666f722074686973206163636f756e742d746f6b656e20706169722077617320726561636865642e6050726576696f757353616c654e6f7446696e616c697a6564001a04e450726576696f75732073616c6520776173207374696c6c206e6f742066696e616c697a65642c2066696e616c697a652069742066697273742e444e6f546f6b656e73546f5265636f766572001b041501546865726520617265206e6f2072656d61696e696e6720746f6b657320746f207265636f7665722066726f6d207468652070726576696f757320746f6b656e2073616c652e5053616c654475726174696f6e546f6f53686f7274001c04dc5370656369666965642073616c65206475726174696f6e2069732073686f72746572207468616e204d696e53616c654475726174696f6e4853616c654475726174696f6e49735a65726f001d047053616c65206475726174696f6e2063616e6e6f74206265207a65726f7053616c655570706572426f756e645175616e7469747949735a65726f001e048c557070657220626f756e64207175616e746974792063616e6e6f74206265207a65726f5853616c654361705065724d656d62657249735a65726f001f049850757263686173652063617020706572206d656d6265722063616e6e6f74206265207a65726f4c53616c65556e6974507269636549735a65726f00200484546f6b656e277320756e69742070726963652063616e6e6f74206265207a65726f6053616c655075726368617365416d6f756e7449735a65726f002104cc416d6f756e74206f6620746f6b656e7320746f207075726368617365206f6e2073616c652063616e6e6f74206265207a65726f7c526576656e756553706c697454696d65546f5374617274546f6f53686f7274002204d453706563696669656420726576656e75652073706c6974207374617274696e6720626c6f636b20697320696e20746865207061737470526576656e756553706c69744475726174696f6e546f6f53686f72740023048c526576656e75652053706c6974206475726174696f6e20697320746f6f2073686f727484526576656e756553706c6974416c7265616479416374697665466f72546f6b656e002404a8417474656d707420746f2061637469766174652073706c69742077697468206f6e65206f6e676f696e6774526576656e756553706c69744e6f74416374697665466f72546f6b656e0025043501417474656d707420746f206d616b6520726576656e75652073706c6974206f7065726174696f6e73207769746820746f6b656e206e6f7420696e206163746976652073706c697420737461746554526576656e756553706c69744469644e6f74456e640026047c526576656e75652053706c697420686173206e6f7420656e6465642079657458526576656e756553706c69744e6f744f6e676f696e67002704bc526576656e75652053706c697420666f7220746f6b656e206163746976652c20627574206e6f74206f6e676f696e676055736572416c726561647950617274696369706174696e67002804bc5573657220616c72656164792070617274696369706174696e6720696e2074686520726576656e75652073706c6974a0496e73756666696369656e7442616c616e6365466f7253706c697450617274696369706174696f6e0029041d015573657220646f6573206e6f7420706f7373657320656e6f7567682062616c616e636520746f20706172746963697061746520696e2074686520726576656e75652073706c69747c557365724e6f745061727469636970616e74696e67496e416e7953706c6974002a049855736572206973206e6f742070617274696369706174696e6720696e20616e792073706c69749843616e6e6f745061727469636970617465496e53706c6974576974685a65726f416d6f756e74002b04e8417474656d707420746f20706172746963697061746520696e20612073706c69742077697468207a65726f20746f6b656e20746f207374616b65a043616e6e6f74497373756553706c6974576974685a65726f416c6c6f636174696f6e416d6f756e74002c04dc417474656d707420746f20697373756520696e20612073706c69742077697468207a65726f20616c6c6f636174696f6e20616d6f756e74b043616e6e6f744d6f64696679537570706c795768656e526576656e756553706c697473417265416374697665002d04d4417474656d707420746f206d6f6469667920737570706c79207768656e20726576656e75652073706c69742069732061637469766558526576656e756553706c69745261746549735a65726f002e0478526576656e75652073706c697420726174652063616e6e6f742062652030404275726e416d6f756e7449735a65726f002f047c50726f766964656420616d6f756e7420746f206275726e206973203d3d2030a04275726e416d6f756e74477265617465725468616e4163636f756e74546f6b656e73416d6f756e740030043101416d6f756e74206f6620746f6b656e7320746f206275726e206578636565647320746f74616c20616d6f756e74206f6620746f6b656e73206f776e656420627920746865206163636f756e740079090c5c70616c6c65745f70726f706f73616c735f656e67696e651474797065732050726f706f73616c102c426c6f636b4e756d62657201102850726f706f736572496401201c42616c616e63650118244163636f756e744964010000200128706172616d65746572737d0901a050726f706f73616c506172616d65746572733c426c6f636b4e756d6265722c2042616c616e63653e00012c70726f706f7365725f696420012850726f706f73657249640001306163746976617465645f617410012c426c6f636b4e756d6265720001187374617475731503016c50726f706f73616c5374617475733c426c6f636b4e756d6265723e000138766f74696e675f726573756c747381090134566f74696e67526573756c747300015465786163745f657865637574696f6e5f626c6f636be901014c4f7074696f6e3c426c6f636b4e756d6265723e00016c6e725f6f665f636f756e63696c5f636f6e6669726d6174696f6e7310010c7533320001487374616b696e675f6163636f756e745f69642d0101444f7074696f6e3c4163636f756e7449643e00007d090c5c70616c6c65745f70726f706f73616c735f656e67696e651474797065734850726f706f73616c506172616d6574657273082c426c6f636b4e756d62657201101c42616c616e6365011800200134766f74696e675f706572696f6410012c426c6f636b4e756d62657200013067726163655f706572696f6410012c426c6f636b4e756d626572000168617070726f76616c5f71756f72756d5f70657263656e7461676510010c753332000174617070726f76616c5f7468726573686f6c645f70657263656e7461676510010c753332000168736c617368696e675f71756f72756d5f70657263656e7461676510010c753332000174736c617368696e675f7468726573686f6c645f70657263656e7461676510010c75333200013872657175697265645f7374616b652901013c4f7074696f6e3c42616c616e63653e000144636f6e737469747574696f6e616c69747910010c753332000081090c5c70616c6c65745f70726f706f73616c735f656e67696e6514747970657334566f74696e67526573756c7473000010012c61627374656e74696f6e7310010c753332000124617070726f76616c7310010c75333200012872656a656374696f6e7310010c75333200011c736c617368657310010c7533320000850910346672616d655f737570706f72741c73746f726167652c626f756e6465645f76656328426f756e64656456656308045401080453000004002801185665633c543e00008909000004081020008d09085c70616c6c65745f70726f706f73616c735f656e67696e65144572726f7204045400015c3c41726974686d657469634572726f72000004c8556e65787065637465642061726974686d65746963206572726f7220286f766572666c6f77202f20756e646572666c6f772948456d7074795469746c6550726f76696465640001049050726f706f73616c2063616e6e6f74206861766520616e20656d707479207469746c652260456d7074794465736372697074696f6e50726f76696465640002048850726f706f73616c2063616e6e6f74206861766520616e20656d70747920626f6479385469746c654973546f6f4c6f6e67000304445469746c6520697320746f6f206c6f6e67504465736372697074696f6e4973546f6f4c6f6e670004045c4465736372697074696f6e20697320746f6f206c6f6e674050726f706f73616c4e6f74466f756e640005046c5468652070726f706f73616c20646f6573206e6f742065786973744450726f706f73616c46696e616c697a65640006047450726f706f73616c2069732066696e616c697a656420616c726561647930416c7265616479566f7465640007049c5468652070726f706f73616c2068617665206265656e20616c726561647920766f746564206f6e244e6f74417574686f72000804344e6f7420616e20617574686f727c4d617841637469766550726f706f73616c4e756d6265724578636565646564000904904d6178206163746976652070726f706f73616c73206e756d62657220657863656564656428456d7074795374616b65000a04a05374616b652063616e6e6f7420626520656d707479207769746820746869732070726f706f73616c485374616b6553686f756c644265456d707479000b049c5374616b652073686f756c6420626520656d70747920666f7220746869732070726f706f73616c605374616b654469666665727346726f6d5265717569726564000c04b05374616b6520646966666572732066726f6d207468652070726f706f73616c20726571756972656d656e747384496e76616c6964506172616d65746572417070726f76616c5468726573686f6c64000d0484417070726f76616c207468726573686f6c642063616e6e6f74206265207a65726f84496e76616c6964506172616d65746572536c617368696e675468726573686f6c64000e0484536c617368696e67207468726573686f6c642063616e6e6f74206265207a65726f4452657175697265526f6f744f726967696e000f04845265717569726520726f6f74206f726967696e20696e2065787472696e736963734050726f706f73616c486173566f746573001004f4446973616c6c6f7720746f2063616e63656c207468652070726f706f73616c2069662074686572652061726520616e7920766f746573206f6e2069742e5c5a65726f4578616374457865637574696f6e426c6f636b00110494457861637420657865637574696f6e20626c6f636b2063616e6e6f74206265207a65726f2e68496e76616c69644578616374457865637574696f6e426c6f636b001204e0457861637420657865637574696f6e20626c6f636b2063616e6e6f74206265206c657373207468616e2063757272656e745f626c6f636b2e6c496e73756666696369656e7442616c616e6365466f725374616b65001304a05468657265206973206e6f7420656e6f7567682062616c616e636520666f722061207374616b652e44436f6e666c696374696e675374616b6573001404bc54686520636f6e666c696374696e67207374616b6520646973636f76657265642e2043616e6e6f74207374616b652e78496e76616c69645374616b696e674163636f756e74466f724d656d626572001504ac5374616b696e67206163636f756e7420646f65736e27742062656c6f6e6720746f2061206d656d6265722e8c4d6178446973706174636861626c6543616c6c436f646553697a6545786365656465640016043d015468652073697a65206f6620656e636f64656420646973706174636861626c652063616c6c20746f206265206578656375746564206279207468652070726f706f73616c20697320746f6f20626967047c456e67696e65206d6f64756c6520707265646566696e6564206572726f727391090c6c70616c6c65745f70726f706f73616c735f64697363757373696f6e1474797065734044697363757373696f6e5468726561640c204d656d626572496401202c426c6f636b4e756d62657201103c54687265616457686974656c697374019509000c01306163746976617465645f617410012c426c6f636b4e756d626572000124617574686f725f69642001204d656d62657249640001106d6f64659909016c5468726561644d6f64653c54687265616457686974656c6973743e0000950910346672616d655f737570706f72741c73746f7261676544626f756e6465645f62747265655f7365743c426f756e646564425472656553657408045401200453000004005101012c42547265655365743c543e000099090c6c70616c6c65745f70726f706f73616c735f64697363757373696f6e147479706573285468726561644d6f6465043c54687265616457686974656c6973740195090108104f70656e00000018436c6f73656404009509013c54687265616457686974656c697374000100009d090c6c70616c6c65745f70726f706f73616c735f64697363757373696f6e1474797065733844697363757373696f6e506f73740c204d656d626572496401202c426c6f636b4e756d626572011048526570617961626c65426c6f6174426f6e6401c901000c0124617574686f725f69642001204d656d626572496400013c636c65616e75705f7061795f6f6666c9010148526570617961626c65426c6f6174426f6e6400012c6c6173745f65646974656410012c426c6f636b4e756d6265720000a109086c70616c6c65745f70726f706f73616c735f64697363757373696f6e144572726f720404540001283c41726974686d657469634572726f72000004c8556e65787065637465642061726974686d65746963206572726f7220286f766572666c6f77202f20756e646572666c6f772944546872656164446f65736e7445786973740001045054687265616420646f65736e27742065786973743c506f7374446f65736e74457869737400020448506f737420646f65736e27742065786973744452657175697265526f6f744f726967696e000304845265717569726520726f6f74206f726967696e20696e2065787472696e736963736043616e6e6f74506f73744f6e436c6f7365645468726561640004046501546865207468726561642068617320436c6f736564206d6f64652e20416e6420706f737420617574686f7220646f65736e27742062656c6f6e6720746f20636f756e63696c206f7220616c6c6f776564206d656d626572732e504e6f74417574686f724f72436f756e63696c6f720005049453686f756c642062652074687265616420617574686f72206f7220636f756e63696c6f722e604d617857686974654c69737453697a654578636565646564000604a04d617820616c6c6f77656420617574686f7273206c697374206c696d69742065786365656465642e7457686974656c69737465644d656d626572446f65734e6f74457869737400070849014174206c65617374206f6e65206f6620746865206d656d626572206964732070726f76696465642061732070617274206f6620636c6f736564207468726561642077686974656c6973742062656c6f6e677364746f2061206e6f6e2d6578697374696e67206d656d6265722e68496e73756666696369656e7442616c616e6365466f72506f7374000804c44163636f756e742068617320696e73756666696369656e742062616c616e636520746f20637265617465206120706f73744043616e6e6f7444656c657465506f73740009049c4163636f756e742063616e27742064656c65746520706f737420617420746865206d6f6d656e74048c44697363757373696f6e206d6f64756c6520707265646566696e6564206572726f7273a509085870616c6c65745f70726f706f73616c735f636f646578144572726f72040454000168545369676e616c50726f706f73616c4973456d707479000004a050726f7669646564207465787420666f7220746578742070726f706f73616c20697320656d7074795852756e74696d6550726f706f73616c4973456d707479000104f050726f7669646564205741534d20636f646520666f72207468652072756e74696d6520757067726164652070726f706f73616c20697320656d70747990496e76616c696446756e64696e675265717565737450726f706f73616c42616c616e6365000204bc496e76616c69642062616c616e63652076616c756520666f7220746865207370656e64696e672070726f706f73616c54496e76616c696456616c696461746f72436f756e74000304f8496e76616c69642076616c696461746f7220636f756e7420666f722074686520277365742076616c696461746f7220636f756e74272070726f706f73616c4452657175697265526f6f744f726967696e000404845265717569726520726f6f74206f726967696e20696e2065787472696e73696373a8496e76616c6964436f756e63696c456c656374696f6e506172616d65746572436f756e63696c53697a65000504c4496e76616c696420636f756e63696c20656c656374696f6e20706172616d65746572202d20636f756e63696c5f73697a65b4496e76616c6964436f756e63696c456c656374696f6e506172616d6574657243616e6469646163794c696d6974000604d0496e76616c696420636f756e63696c20656c656374696f6e20706172616d65746572202d2063616e6469646163792d6c696d6974b4496e76616c6964436f756e63696c456c656374696f6e506172616d657465724d696e566f74696e675374616b65000704d4496e76616c696420636f756e63696c20656c656374696f6e20706172616d65746572202d206d696e2d766f74696e675f7374616b65b8496e76616c6964436f756e63696c456c656374696f6e506172616d657465724e65775465726d4475726174696f6e000804d8496e76616c696420636f756e63696c20656c656374696f6e20706172616d65746572202d206e65775f7465726d5f6475726174696f6eb8496e76616c6964436f756e63696c456c656374696f6e506172616d657465724d696e436f756e63696c5374616b65000904d8496e76616c696420636f756e63696c20656c656374696f6e20706172616d65746572202d206d696e5f636f756e63696c5f7374616b65b8496e76616c6964436f756e63696c456c656374696f6e506172616d6574657252657665616c696e67506572696f64000a04d4496e76616c696420636f756e63696c20656c656374696f6e20706172616d65746572202d2072657665616c696e675f706572696f64ac496e76616c6964436f756e63696c456c656374696f6e506172616d65746572566f74696e67506572696f64000b04c8496e76616c696420636f756e63696c20656c656374696f6e20706172616d65746572202d20766f74696e675f706572696f64bc496e76616c6964436f756e63696c456c656374696f6e506172616d65746572416e6e6f756e63696e67506572696f64000c04d8496e76616c696420636f756e63696c20656c656374696f6e20706172616d65746572202d20616e6e6f756e63696e675f706572696f6484496e76616c6964576f726b696e6747726f75704275646765744361706163697479000d04bc496e76616c696420776f726b696e672067726f75702062756467657420636170616369747920706172616d65746572a0496e76616c69645365744c656164506172616d6574657243616e6e6f744265436f756e63696c6f72000e042d01496e76616c69642027736574206c6561642070726f706f73616c2720706172616d65746572202d2070726f706f736564206c6561642063616e6e6f74206265206120636f756e63696c6f724c536c617368696e675374616b6549735a65726f000f042101496e76616c69642027736c617368207374616b652070726f706f73616c2720706172616d65746572202d2063616e6e6f7420736c617368206279207a65726f2062616c616e63652e5444656372656173696e675374616b6549735a65726f0010043901496e76616c696420276465637265617365207374616b652070726f706f73616c2720706172616d65746572202d2063616e6e6f74206465637265617365206279207a65726f2062616c616e63652e80496e73756666696369656e7446756e6473466f724275646765745570646174650011041d01496e73756666696369656e742066756e647320666f72202755706461746520576f726b696e672047726f757020427564676574272070726f706f73616c20657865637574696f6eb0496e76616c696446756e64696e675265717565737450726f706f73616c4e756d6265724f664163636f756e740012045101496e76616c6964206e756d626572206f66206163636f756e747320726563696576696e672066756e64696e67207265717565737420666f72202746756e64696e672052657175657374272070726f706f73616c2eb0496e76616c696446756e64696e675265717565737450726f706f73616c52657065617465644163636f756e74001304bc5265706561746564206163636f756e7420696e202746756e64696e672052657175657374272070726f706f73616c2ee0496e76616c69644368616e6e656c5061796f75747350726f706f73616c4d696e436173686f7574457863656564734d6178436173686f7574001404e50154686520737065636966696564206d696e206368616e6e656c20636173686f75742069732067726561746572207468616e2074686520737065636966696564206d6178206368616e6e656c20636173686f757420696e2060557064617465204368616e6e656c205061796f757473602070726f706f73616c2e4c496e76616c69644c656164576f726b657249640015049050726f7669646564206c65616420776f726b6572206964206973206e6f742076616c696450496e76616c69644c6561644f70656e696e6749640016049450726f7669646564206c656164206f70656e696e67206964206973206e6f742076616c696460496e76616c69644c6561644170706c69636174696f6e4964001704a450726f7669646564206c656164206170706c69636174696f6e206964206973206e6f742076616c696444496e76616c696450726f706f73616c49640018048450726f76696465642070726f706f73616c206964206973206e6f742076616c69643c41726974686d657469634572726f720019043c41726974686d656963204572726f720478436f646578206d6f64756c6520707265646566696e6564206572726f7273a9090c5070616c6c65745f776f726b696e675f67726f75701474797065731c4f70656e696e670c2c426c6f636b4e756d62657201101c42616c616e6365011810486173680124001801306f70656e696e675f747970656503012c4f70656e696e675479706500011c6372656174656410012c426c6f636b4e756d6265720001406465736372697074696f6e5f68617368240110486173680001307374616b655f706f6c696379490301845374616b65506f6c6963793c426c6f636b4e756d6265722c2042616c616e63653e0001407265776172645f7065725f626c6f636b2901013c4f7074696f6e3c42616c616e63653e0001386372656174696f6e5f7374616b6518011c42616c616e63650000ad090c5070616c6c65745f776f726b696e675f67726f7570147479706573384a6f624170706c69636174696f6e0c244163636f756e7449640100204d656d62657249640120104861736801240018013c726f6c655f6163636f756e745f69640001244163636f756e7449640001447265776172645f6163636f756e745f69640001244163636f756e7449640001487374616b696e675f6163636f756e745f69640001244163636f756e7449640001246d656d6265725f69642001204d656d62657249640001406465736372697074696f6e5f68617368240110486173680001286f70656e696e675f69642001244f70656e696e6749640000b1090c5070616c6c65745f776f726b696e675f67726f75701474797065732c47726f7570576f726b657210244163636f756e7449640100204d656d626572496401202c426c6f636b4e756d62657201101c42616c616e63650118002401246d656d6265725f69642001204d656d626572496400013c726f6c655f6163636f756e745f69640001244163636f756e7449640001487374616b696e675f6163636f756e745f69640001244163636f756e7449640001447265776172645f6163636f756e745f69640001244163636f756e744964000148737461727465645f6c656176696e675f6174e901014c4f7074696f6e3c426c6f636b4e756d6265723e0001506a6f625f756e7374616b696e675f706572696f6410012c426c6f636b4e756d6265720001407265776172645f7065725f626c6f636b2901013c4f7074696f6e3c42616c616e63653e0001346d69737365645f7265776172642901013c4f7074696f6e3c42616c616e63653e000128637265617465645f617410012c426c6f636b4e756d6265720000b5090c5070616c6c65745f776f726b696e675f67726f7570186572726f7273144572726f720804540004490001803c41726974686d657469634572726f72000004c8556e65787065637465642061726974686d65746963206572726f7220286f766572666c6f77202f20756e646572666c6f7729605374616b6542616c616e636543616e6e6f7442655a65726f0001049850726f7669646564207374616b652062616c616e63652063616e6e6f74206265207a65726f2e4c4f70656e696e67446f65734e6f7445786973740002045c4f70656e696e6720646f6573206e6f742065786973742e6443616e6e6f74486972654d756c7469706c654c656164657273000304bc43616e6e6f742066696c6c206f70656e696e672077697468206d756c7469706c65206170706c69636174696f6e732e74576f726b65724170706c69636174696f6e446f65734e6f74457869737400040488576f726b6572206170706c69636174696f6e20646f6573206e6f742065786973742e744d6178416374697665576f726b65724e756d626572457863656564656400050488576f726b696e672067726f75702073697a65206c696d69742065786365656465642e9c5375636365737366756c576f726b65724170706c69636174696f6e446f65734e6f744578697374000604b45375636365737366756c20776f726b6572206170706c69636174696f6e20646f6573206e6f742065786973742e8043616e6e6f74486972654c65616465725768656e4c6561646572457869737473000704c45468657265206973206c656164657220616c72656164792c2063616e6e6f74206869726520616e6f74686572206f6e652e4049734e6f744c6561644163636f756e740008044c4e6f742061206c656164206163636f756e742e4443757272656e744c6561644e6f745365740009046043757272656e74206c656164206973206e6f74207365742e48576f726b6572446f65734e6f744578697374000a0458576f726b657220646f6573206e6f742065786973742e4c496e76616c69644d656d6265724f726967696e000b0470496e76616c6964206f726967696e20666f722061206d656d6265722e705369676e657249734e6f74576f726b6572526f6c654163636f756e74000c04885369676e6572206973206e6f7420776f726b657220726f6c65206163636f756e742e4842656c6f774d696e696d756d5374616b6573000d04885374616b696e67206c657373207468616e20746865206c6f77657220626f756e642e7c496e73756666696369656e7442616c616e6365546f436f7665725374616b65000e0490496e73756666696369656e742062616c616e636520746f20636f766572207374616b652e884170706c69636174696f6e5374616b65446f65736e744d617463684f70656e696e67000f04d84170706c69636174696f6e207374616b65206973206c657373207468616e207265717569726564206f70656e696e67207374616b652e504f726967696e49734e6f744170706c6963616e74001004604f726967696e206973206e6f74206170706c6963616e742e3c576f726b657249734c656176696e6700110498496e76616c6964206f7065726174696f6e202d20776f726b6572206973206c656176696e672e5043616e6e6f74526577617264576974685a65726f0012046452657761726420636f756c64206e6f74206265207a65726f2e78496e76616c69645374616b696e674163636f756e74466f724d656d626572001304ac5374616b696e67206163636f756e7420646f65736e27742062656c6f6e6720746f2061206d656d6265722e5c436f6e666c6963745374616b65734f6e4163636f756e74001404b05374616b696e67206163636f756e7420636f6e7461696e7320636f6e666c696374696e67207374616b65732e44576f726b65724861734e6f5265776172640015047c576f726b657220686173206e6f20726563757272696e67207265776172642e78556e7374616b696e67506572696f644c6573735468616e4d696e696d756d001604090153706563696669656420756e7374616b696e6720706572696f64206973206c657373207468656e206d696e696d756d2073657420666f72207468652067726f75702e3c43616e6e6f745370656e645a65726f00170460496e76616c6964207370656e64696e6720616d6f756e742e74496e73756666696369656e74427564676574466f725370656e64696e67001804a449742773206e6f7420656e6f7567682062756467657420666f722074686973207370656e64696e672e584e6f4170706c69636174696f6e7350726f7669646564001904bc43616e6e6f742066696c6c206f70656e696e67202d206e6f206170706c69636174696f6e732070726f76696465642ea043616e6e6f7444656372656173655374616b6544656c7461477265617465725468616e5374616b65001a04fc43616e6e6f74206465637265617365207374616b65202d207374616b652064656c74612067726561746572207468616e20696e697469616c207374616b652e644170706c69636174696f6e734e6f74466f724f70656e696e67001b04f0547279696e6720746f2066696c6c206f70656e696e67207769746820616e206170706c69636174696f6e20666f72206f74686572206f70656e696e6764576f726b657253746f7261676556616c7565546f6f4c6f6e67001c0480576f726b65722073746f72616765207465787420697320746f6f206c6f6e672e70496e73756666696369656e74546f6b656e73466f7246756e64696e67001d04f8496e73756666696369656e7420746f6b656e7320666f722066756e64696e6720286f6e206d656d62657220636f6e74726f6c6c6572206163636f756e7429445a65726f546f6b656e7346756e64696e67001e047c547279696e6720746f2066756e642077697468207a65726f20746f6b656e7378496e73756666696369656e7442616c616e6365466f725472616e73666572001f04b443616e6e6f742077697468647261773a20696e73756666696369656e74206275646765742062616c616e63652e048c44697363757373696f6e206d6f64756c6520707265646566696e6564206572726f7273b9090c5070616c6c65745f776f726b696e675f67726f7570186572726f7273144572726f720804540004490001803c41726974686d657469634572726f72000004c8556e65787065637465642061726974686d65746963206572726f7220286f766572666c6f77202f20756e646572666c6f7729605374616b6542616c616e636543616e6e6f7442655a65726f0001049850726f7669646564207374616b652062616c616e63652063616e6e6f74206265207a65726f2e4c4f70656e696e67446f65734e6f7445786973740002045c4f70656e696e6720646f6573206e6f742065786973742e6443616e6e6f74486972654d756c7469706c654c656164657273000304bc43616e6e6f742066696c6c206f70656e696e672077697468206d756c7469706c65206170706c69636174696f6e732e74576f726b65724170706c69636174696f6e446f65734e6f74457869737400040488576f726b6572206170706c69636174696f6e20646f6573206e6f742065786973742e744d6178416374697665576f726b65724e756d626572457863656564656400050488576f726b696e672067726f75702073697a65206c696d69742065786365656465642e9c5375636365737366756c576f726b65724170706c69636174696f6e446f65734e6f744578697374000604b45375636365737366756c20776f726b6572206170706c69636174696f6e20646f6573206e6f742065786973742e8043616e6e6f74486972654c65616465725768656e4c6561646572457869737473000704c45468657265206973206c656164657220616c72656164792c2063616e6e6f74206869726520616e6f74686572206f6e652e4049734e6f744c6561644163636f756e740008044c4e6f742061206c656164206163636f756e742e4443757272656e744c6561644e6f745365740009046043757272656e74206c656164206973206e6f74207365742e48576f726b6572446f65734e6f744578697374000a0458576f726b657220646f6573206e6f742065786973742e4c496e76616c69644d656d6265724f726967696e000b0470496e76616c6964206f726967696e20666f722061206d656d6265722e705369676e657249734e6f74576f726b6572526f6c654163636f756e74000c04885369676e6572206973206e6f7420776f726b657220726f6c65206163636f756e742e4842656c6f774d696e696d756d5374616b6573000d04885374616b696e67206c657373207468616e20746865206c6f77657220626f756e642e7c496e73756666696369656e7442616c616e6365546f436f7665725374616b65000e0490496e73756666696369656e742062616c616e636520746f20636f766572207374616b652e884170706c69636174696f6e5374616b65446f65736e744d617463684f70656e696e67000f04d84170706c69636174696f6e207374616b65206973206c657373207468616e207265717569726564206f70656e696e67207374616b652e504f726967696e49734e6f744170706c6963616e74001004604f726967696e206973206e6f74206170706c6963616e742e3c576f726b657249734c656176696e6700110498496e76616c6964206f7065726174696f6e202d20776f726b6572206973206c656176696e672e5043616e6e6f74526577617264576974685a65726f0012046452657761726420636f756c64206e6f74206265207a65726f2e78496e76616c69645374616b696e674163636f756e74466f724d656d626572001304ac5374616b696e67206163636f756e7420646f65736e27742062656c6f6e6720746f2061206d656d6265722e5c436f6e666c6963745374616b65734f6e4163636f756e74001404b05374616b696e67206163636f756e7420636f6e7461696e7320636f6e666c696374696e67207374616b65732e44576f726b65724861734e6f5265776172640015047c576f726b657220686173206e6f20726563757272696e67207265776172642e78556e7374616b696e67506572696f644c6573735468616e4d696e696d756d001604090153706563696669656420756e7374616b696e6720706572696f64206973206c657373207468656e206d696e696d756d2073657420666f72207468652067726f75702e3c43616e6e6f745370656e645a65726f00170460496e76616c6964207370656e64696e6720616d6f756e742e74496e73756666696369656e74427564676574466f725370656e64696e67001804a449742773206e6f7420656e6f7567682062756467657420666f722074686973207370656e64696e672e584e6f4170706c69636174696f6e7350726f7669646564001904bc43616e6e6f742066696c6c206f70656e696e67202d206e6f206170706c69636174696f6e732070726f76696465642ea043616e6e6f7444656372656173655374616b6544656c7461477265617465725468616e5374616b65001a04fc43616e6e6f74206465637265617365207374616b65202d207374616b652064656c74612067726561746572207468616e20696e697469616c207374616b652e644170706c69636174696f6e734e6f74466f724f70656e696e67001b04f0547279696e6720746f2066696c6c206f70656e696e67207769746820616e206170706c69636174696f6e20666f72206f74686572206f70656e696e6764576f726b657253746f7261676556616c7565546f6f4c6f6e67001c0480576f726b65722073746f72616765207465787420697320746f6f206c6f6e672e70496e73756666696369656e74546f6b656e73466f7246756e64696e67001d04f8496e73756666696369656e7420746f6b656e7320666f722066756e64696e6720286f6e206d656d62657220636f6e74726f6c6c6572206163636f756e7429445a65726f546f6b656e7346756e64696e67001e047c547279696e6720746f2066756e642077697468207a65726f20746f6b656e7378496e73756666696369656e7442616c616e6365466f725472616e73666572001f04b443616e6e6f742077697468647261773a20696e73756666696369656e74206275646765742062616c616e63652e048c44697363757373696f6e206d6f64756c6520707265646566696e6564206572726f7273bd090c5070616c6c65745f776f726b696e675f67726f7570186572726f7273144572726f720804540004490001803c41726974686d657469634572726f72000004c8556e65787065637465642061726974686d65746963206572726f7220286f766572666c6f77202f20756e646572666c6f7729605374616b6542616c616e636543616e6e6f7442655a65726f0001049850726f7669646564207374616b652062616c616e63652063616e6e6f74206265207a65726f2e4c4f70656e696e67446f65734e6f7445786973740002045c4f70656e696e6720646f6573206e6f742065786973742e6443616e6e6f74486972654d756c7469706c654c656164657273000304bc43616e6e6f742066696c6c206f70656e696e672077697468206d756c7469706c65206170706c69636174696f6e732e74576f726b65724170706c69636174696f6e446f65734e6f74457869737400040488576f726b6572206170706c69636174696f6e20646f6573206e6f742065786973742e744d6178416374697665576f726b65724e756d626572457863656564656400050488576f726b696e672067726f75702073697a65206c696d69742065786365656465642e9c5375636365737366756c576f726b65724170706c69636174696f6e446f65734e6f744578697374000604b45375636365737366756c20776f726b6572206170706c69636174696f6e20646f6573206e6f742065786973742e8043616e6e6f74486972654c65616465725768656e4c6561646572457869737473000704c45468657265206973206c656164657220616c72656164792c2063616e6e6f74206869726520616e6f74686572206f6e652e4049734e6f744c6561644163636f756e740008044c4e6f742061206c656164206163636f756e742e4443757272656e744c6561644e6f745365740009046043757272656e74206c656164206973206e6f74207365742e48576f726b6572446f65734e6f744578697374000a0458576f726b657220646f6573206e6f742065786973742e4c496e76616c69644d656d6265724f726967696e000b0470496e76616c6964206f726967696e20666f722061206d656d6265722e705369676e657249734e6f74576f726b6572526f6c654163636f756e74000c04885369676e6572206973206e6f7420776f726b657220726f6c65206163636f756e742e4842656c6f774d696e696d756d5374616b6573000d04885374616b696e67206c657373207468616e20746865206c6f77657220626f756e642e7c496e73756666696369656e7442616c616e6365546f436f7665725374616b65000e0490496e73756666696369656e742062616c616e636520746f20636f766572207374616b652e884170706c69636174696f6e5374616b65446f65736e744d617463684f70656e696e67000f04d84170706c69636174696f6e207374616b65206973206c657373207468616e207265717569726564206f70656e696e67207374616b652e504f726967696e49734e6f744170706c6963616e74001004604f726967696e206973206e6f74206170706c6963616e742e3c576f726b657249734c656176696e6700110498496e76616c6964206f7065726174696f6e202d20776f726b6572206973206c656176696e672e5043616e6e6f74526577617264576974685a65726f0012046452657761726420636f756c64206e6f74206265207a65726f2e78496e76616c69645374616b696e674163636f756e74466f724d656d626572001304ac5374616b696e67206163636f756e7420646f65736e27742062656c6f6e6720746f2061206d656d6265722e5c436f6e666c6963745374616b65734f6e4163636f756e74001404b05374616b696e67206163636f756e7420636f6e7461696e7320636f6e666c696374696e67207374616b65732e44576f726b65724861734e6f5265776172640015047c576f726b657220686173206e6f20726563757272696e67207265776172642e78556e7374616b696e67506572696f644c6573735468616e4d696e696d756d001604090153706563696669656420756e7374616b696e6720706572696f64206973206c657373207468656e206d696e696d756d2073657420666f72207468652067726f75702e3c43616e6e6f745370656e645a65726f00170460496e76616c6964207370656e64696e6720616d6f756e742e74496e73756666696369656e74427564676574466f725370656e64696e67001804a449742773206e6f7420656e6f7567682062756467657420666f722074686973207370656e64696e672e584e6f4170706c69636174696f6e7350726f7669646564001904bc43616e6e6f742066696c6c206f70656e696e67202d206e6f206170706c69636174696f6e732070726f76696465642ea043616e6e6f7444656372656173655374616b6544656c7461477265617465725468616e5374616b65001a04fc43616e6e6f74206465637265617365207374616b65202d207374616b652064656c74612067726561746572207468616e20696e697469616c207374616b652e644170706c69636174696f6e734e6f74466f724f70656e696e67001b04f0547279696e6720746f2066696c6c206f70656e696e67207769746820616e206170706c69636174696f6e20666f72206f74686572206f70656e696e6764576f726b657253746f7261676556616c7565546f6f4c6f6e67001c0480576f726b65722073746f72616765207465787420697320746f6f206c6f6e672e70496e73756666696369656e74546f6b656e73466f7246756e64696e67001d04f8496e73756666696369656e7420746f6b656e7320666f722066756e64696e6720286f6e206d656d62657220636f6e74726f6c6c6572206163636f756e7429445a65726f546f6b656e7346756e64696e67001e047c547279696e6720746f2066756e642077697468207a65726f20746f6b656e7378496e73756666696369656e7442616c616e6365466f725472616e73666572001f04b443616e6e6f742077697468647261773a20696e73756666696369656e74206275646765742062616c616e63652e048c44697363757373696f6e206d6f64756c6520707265646566696e6564206572726f7273c1090c5070616c6c65745f776f726b696e675f67726f7570186572726f7273144572726f720804540004490001803c41726974686d657469634572726f72000004c8556e65787065637465642061726974686d65746963206572726f7220286f766572666c6f77202f20756e646572666c6f7729605374616b6542616c616e636543616e6e6f7442655a65726f0001049850726f7669646564207374616b652062616c616e63652063616e6e6f74206265207a65726f2e4c4f70656e696e67446f65734e6f7445786973740002045c4f70656e696e6720646f6573206e6f742065786973742e6443616e6e6f74486972654d756c7469706c654c656164657273000304bc43616e6e6f742066696c6c206f70656e696e672077697468206d756c7469706c65206170706c69636174696f6e732e74576f726b65724170706c69636174696f6e446f65734e6f74457869737400040488576f726b6572206170706c69636174696f6e20646f6573206e6f742065786973742e744d6178416374697665576f726b65724e756d626572457863656564656400050488576f726b696e672067726f75702073697a65206c696d69742065786365656465642e9c5375636365737366756c576f726b65724170706c69636174696f6e446f65734e6f744578697374000604b45375636365737366756c20776f726b6572206170706c69636174696f6e20646f6573206e6f742065786973742e8043616e6e6f74486972654c65616465725768656e4c6561646572457869737473000704c45468657265206973206c656164657220616c72656164792c2063616e6e6f74206869726520616e6f74686572206f6e652e4049734e6f744c6561644163636f756e740008044c4e6f742061206c656164206163636f756e742e4443757272656e744c6561644e6f745365740009046043757272656e74206c656164206973206e6f74207365742e48576f726b6572446f65734e6f744578697374000a0458576f726b657220646f6573206e6f742065786973742e4c496e76616c69644d656d6265724f726967696e000b0470496e76616c6964206f726967696e20666f722061206d656d6265722e705369676e657249734e6f74576f726b6572526f6c654163636f756e74000c04885369676e6572206973206e6f7420776f726b657220726f6c65206163636f756e742e4842656c6f774d696e696d756d5374616b6573000d04885374616b696e67206c657373207468616e20746865206c6f77657220626f756e642e7c496e73756666696369656e7442616c616e6365546f436f7665725374616b65000e0490496e73756666696369656e742062616c616e636520746f20636f766572207374616b652e884170706c69636174696f6e5374616b65446f65736e744d617463684f70656e696e67000f04d84170706c69636174696f6e207374616b65206973206c657373207468616e207265717569726564206f70656e696e67207374616b652e504f726967696e49734e6f744170706c6963616e74001004604f726967696e206973206e6f74206170706c6963616e742e3c576f726b657249734c656176696e6700110498496e76616c6964206f7065726174696f6e202d20776f726b6572206973206c656176696e672e5043616e6e6f74526577617264576974685a65726f0012046452657761726420636f756c64206e6f74206265207a65726f2e78496e76616c69645374616b696e674163636f756e74466f724d656d626572001304ac5374616b696e67206163636f756e7420646f65736e27742062656c6f6e6720746f2061206d656d6265722e5c436f6e666c6963745374616b65734f6e4163636f756e74001404b05374616b696e67206163636f756e7420636f6e7461696e7320636f6e666c696374696e67207374616b65732e44576f726b65724861734e6f5265776172640015047c576f726b657220686173206e6f20726563757272696e67207265776172642e78556e7374616b696e67506572696f644c6573735468616e4d696e696d756d001604090153706563696669656420756e7374616b696e6720706572696f64206973206c657373207468656e206d696e696d756d2073657420666f72207468652067726f75702e3c43616e6e6f745370656e645a65726f00170460496e76616c6964207370656e64696e6720616d6f756e742e74496e73756666696369656e74427564676574466f725370656e64696e67001804a449742773206e6f7420656e6f7567682062756467657420666f722074686973207370656e64696e672e584e6f4170706c69636174696f6e7350726f7669646564001904bc43616e6e6f742066696c6c206f70656e696e67202d206e6f206170706c69636174696f6e732070726f76696465642ea043616e6e6f7444656372656173655374616b6544656c7461477265617465725468616e5374616b65001a04fc43616e6e6f74206465637265617365207374616b65202d207374616b652064656c74612067726561746572207468616e20696e697469616c207374616b652e644170706c69636174696f6e734e6f74466f724f70656e696e67001b04f0547279696e6720746f2066696c6c206f70656e696e67207769746820616e206170706c69636174696f6e20666f72206f74686572206f70656e696e6764576f726b657253746f7261676556616c7565546f6f4c6f6e67001c0480576f726b65722073746f72616765207465787420697320746f6f206c6f6e672e70496e73756666696369656e74546f6b656e73466f7246756e64696e67001d04f8496e73756666696369656e7420746f6b656e7320666f722066756e64696e6720286f6e206d656d62657220636f6e74726f6c6c6572206163636f756e7429445a65726f546f6b656e7346756e64696e67001e047c547279696e6720746f2066756e642077697468207a65726f20746f6b656e7378496e73756666696369656e7442616c616e6365466f725472616e73666572001f04b443616e6e6f742077697468647261773a20696e73756666696369656e74206275646765742062616c616e63652e048c44697363757373696f6e206d6f64756c6520707265646566696e6564206572726f7273c5090c5070616c6c65745f776f726b696e675f67726f7570186572726f7273144572726f720804540004490001803c41726974686d657469634572726f72000004c8556e65787065637465642061726974686d65746963206572726f7220286f766572666c6f77202f20756e646572666c6f7729605374616b6542616c616e636543616e6e6f7442655a65726f0001049850726f7669646564207374616b652062616c616e63652063616e6e6f74206265207a65726f2e4c4f70656e696e67446f65734e6f7445786973740002045c4f70656e696e6720646f6573206e6f742065786973742e6443616e6e6f74486972654d756c7469706c654c656164657273000304bc43616e6e6f742066696c6c206f70656e696e672077697468206d756c7469706c65206170706c69636174696f6e732e74576f726b65724170706c69636174696f6e446f65734e6f74457869737400040488576f726b6572206170706c69636174696f6e20646f6573206e6f742065786973742e744d6178416374697665576f726b65724e756d626572457863656564656400050488576f726b696e672067726f75702073697a65206c696d69742065786365656465642e9c5375636365737366756c576f726b65724170706c69636174696f6e446f65734e6f744578697374000604b45375636365737366756c20776f726b6572206170706c69636174696f6e20646f6573206e6f742065786973742e8043616e6e6f74486972654c65616465725768656e4c6561646572457869737473000704c45468657265206973206c656164657220616c72656164792c2063616e6e6f74206869726520616e6f74686572206f6e652e4049734e6f744c6561644163636f756e740008044c4e6f742061206c656164206163636f756e742e4443757272656e744c6561644e6f745365740009046043757272656e74206c656164206973206e6f74207365742e48576f726b6572446f65734e6f744578697374000a0458576f726b657220646f6573206e6f742065786973742e4c496e76616c69644d656d6265724f726967696e000b0470496e76616c6964206f726967696e20666f722061206d656d6265722e705369676e657249734e6f74576f726b6572526f6c654163636f756e74000c04885369676e6572206973206e6f7420776f726b657220726f6c65206163636f756e742e4842656c6f774d696e696d756d5374616b6573000d04885374616b696e67206c657373207468616e20746865206c6f77657220626f756e642e7c496e73756666696369656e7442616c616e6365546f436f7665725374616b65000e0490496e73756666696369656e742062616c616e636520746f20636f766572207374616b652e884170706c69636174696f6e5374616b65446f65736e744d617463684f70656e696e67000f04d84170706c69636174696f6e207374616b65206973206c657373207468616e207265717569726564206f70656e696e67207374616b652e504f726967696e49734e6f744170706c6963616e74001004604f726967696e206973206e6f74206170706c6963616e742e3c576f726b657249734c656176696e6700110498496e76616c6964206f7065726174696f6e202d20776f726b6572206973206c656176696e672e5043616e6e6f74526577617264576974685a65726f0012046452657761726420636f756c64206e6f74206265207a65726f2e78496e76616c69645374616b696e674163636f756e74466f724d656d626572001304ac5374616b696e67206163636f756e7420646f65736e27742062656c6f6e6720746f2061206d656d6265722e5c436f6e666c6963745374616b65734f6e4163636f756e74001404b05374616b696e67206163636f756e7420636f6e7461696e7320636f6e666c696374696e67207374616b65732e44576f726b65724861734e6f5265776172640015047c576f726b657220686173206e6f20726563757272696e67207265776172642e78556e7374616b696e67506572696f644c6573735468616e4d696e696d756d001604090153706563696669656420756e7374616b696e6720706572696f64206973206c657373207468656e206d696e696d756d2073657420666f72207468652067726f75702e3c43616e6e6f745370656e645a65726f00170460496e76616c6964207370656e64696e6720616d6f756e742e74496e73756666696369656e74427564676574466f725370656e64696e67001804a449742773206e6f7420656e6f7567682062756467657420666f722074686973207370656e64696e672e584e6f4170706c69636174696f6e7350726f7669646564001904bc43616e6e6f742066696c6c206f70656e696e67202d206e6f206170706c69636174696f6e732070726f76696465642ea043616e6e6f7444656372656173655374616b6544656c7461477265617465725468616e5374616b65001a04fc43616e6e6f74206465637265617365207374616b65202d207374616b652064656c74612067726561746572207468616e20696e697469616c207374616b652e644170706c69636174696f6e734e6f74466f724f70656e696e67001b04f0547279696e6720746f2066696c6c206f70656e696e67207769746820616e206170706c69636174696f6e20666f72206f74686572206f70656e696e6764576f726b657253746f7261676556616c7565546f6f4c6f6e67001c0480576f726b65722073746f72616765207465787420697320746f6f206c6f6e672e70496e73756666696369656e74546f6b656e73466f7246756e64696e67001d04f8496e73756666696369656e7420746f6b656e7320666f722066756e64696e6720286f6e206d656d62657220636f6e74726f6c6c6572206163636f756e7429445a65726f546f6b656e7346756e64696e67001e047c547279696e6720746f2066756e642077697468207a65726f20746f6b656e7378496e73756666696369656e7442616c616e6365466f725472616e73666572001f04b443616e6e6f742077697468647261773a20696e73756666696369656e74206275646765742062616c616e63652e048c44697363757373696f6e206d6f64756c6520707265646566696e6564206572726f7273c9090c5070616c6c65745f776f726b696e675f67726f7570186572726f7273144572726f720804540004490001803c41726974686d657469634572726f72000004c8556e65787065637465642061726974686d65746963206572726f7220286f766572666c6f77202f20756e646572666c6f7729605374616b6542616c616e636543616e6e6f7442655a65726f0001049850726f7669646564207374616b652062616c616e63652063616e6e6f74206265207a65726f2e4c4f70656e696e67446f65734e6f7445786973740002045c4f70656e696e6720646f6573206e6f742065786973742e6443616e6e6f74486972654d756c7469706c654c656164657273000304bc43616e6e6f742066696c6c206f70656e696e672077697468206d756c7469706c65206170706c69636174696f6e732e74576f726b65724170706c69636174696f6e446f65734e6f74457869737400040488576f726b6572206170706c69636174696f6e20646f6573206e6f742065786973742e744d6178416374697665576f726b65724e756d626572457863656564656400050488576f726b696e672067726f75702073697a65206c696d69742065786365656465642e9c5375636365737366756c576f726b65724170706c69636174696f6e446f65734e6f744578697374000604b45375636365737366756c20776f726b6572206170706c69636174696f6e20646f6573206e6f742065786973742e8043616e6e6f74486972654c65616465725768656e4c6561646572457869737473000704c45468657265206973206c656164657220616c72656164792c2063616e6e6f74206869726520616e6f74686572206f6e652e4049734e6f744c6561644163636f756e740008044c4e6f742061206c656164206163636f756e742e4443757272656e744c6561644e6f745365740009046043757272656e74206c656164206973206e6f74207365742e48576f726b6572446f65734e6f744578697374000a0458576f726b657220646f6573206e6f742065786973742e4c496e76616c69644d656d6265724f726967696e000b0470496e76616c6964206f726967696e20666f722061206d656d6265722e705369676e657249734e6f74576f726b6572526f6c654163636f756e74000c04885369676e6572206973206e6f7420776f726b657220726f6c65206163636f756e742e4842656c6f774d696e696d756d5374616b6573000d04885374616b696e67206c657373207468616e20746865206c6f77657220626f756e642e7c496e73756666696369656e7442616c616e6365546f436f7665725374616b65000e0490496e73756666696369656e742062616c616e636520746f20636f766572207374616b652e884170706c69636174696f6e5374616b65446f65736e744d617463684f70656e696e67000f04d84170706c69636174696f6e207374616b65206973206c657373207468616e207265717569726564206f70656e696e67207374616b652e504f726967696e49734e6f744170706c6963616e74001004604f726967696e206973206e6f74206170706c6963616e742e3c576f726b657249734c656176696e6700110498496e76616c6964206f7065726174696f6e202d20776f726b6572206973206c656176696e672e5043616e6e6f74526577617264576974685a65726f0012046452657761726420636f756c64206e6f74206265207a65726f2e78496e76616c69645374616b696e674163636f756e74466f724d656d626572001304ac5374616b696e67206163636f756e7420646f65736e27742062656c6f6e6720746f2061206d656d6265722e5c436f6e666c6963745374616b65734f6e4163636f756e74001404b05374616b696e67206163636f756e7420636f6e7461696e7320636f6e666c696374696e67207374616b65732e44576f726b65724861734e6f5265776172640015047c576f726b657220686173206e6f20726563757272696e67207265776172642e78556e7374616b696e67506572696f644c6573735468616e4d696e696d756d001604090153706563696669656420756e7374616b696e6720706572696f64206973206c657373207468656e206d696e696d756d2073657420666f72207468652067726f75702e3c43616e6e6f745370656e645a65726f00170460496e76616c6964207370656e64696e6720616d6f756e742e74496e73756666696369656e74427564676574466f725370656e64696e67001804a449742773206e6f7420656e6f7567682062756467657420666f722074686973207370656e64696e672e584e6f4170706c69636174696f6e7350726f7669646564001904bc43616e6e6f742066696c6c206f70656e696e67202d206e6f206170706c69636174696f6e732070726f76696465642ea043616e6e6f7444656372656173655374616b6544656c7461477265617465725468616e5374616b65001a04fc43616e6e6f74206465637265617365207374616b65202d207374616b652064656c74612067726561746572207468616e20696e697469616c207374616b652e644170706c69636174696f6e734e6f74466f724f70656e696e67001b04f0547279696e6720746f2066696c6c206f70656e696e67207769746820616e206170706c69636174696f6e20666f72206f74686572206f70656e696e6764576f726b657253746f7261676556616c7565546f6f4c6f6e67001c0480576f726b65722073746f72616765207465787420697320746f6f206c6f6e672e70496e73756666696369656e74546f6b656e73466f7246756e64696e67001d04f8496e73756666696369656e7420746f6b656e7320666f722066756e64696e6720286f6e206d656d62657220636f6e74726f6c6c6572206163636f756e7429445a65726f546f6b656e7346756e64696e67001e047c547279696e6720746f2066756e642077697468207a65726f20746f6b656e7378496e73756666696369656e7442616c616e6365466f725472616e73666572001f04b443616e6e6f742077697468647261773a20696e73756666696369656e74206275646765742062616c616e63652e048c44697363757373696f6e206d6f64756c6520707265646566696e6564206572726f7273cd090c5070616c6c65745f776f726b696e675f67726f7570186572726f7273144572726f720804540004490001803c41726974686d657469634572726f72000004c8556e65787065637465642061726974686d65746963206572726f7220286f766572666c6f77202f20756e646572666c6f7729605374616b6542616c616e636543616e6e6f7442655a65726f0001049850726f7669646564207374616b652062616c616e63652063616e6e6f74206265207a65726f2e4c4f70656e696e67446f65734e6f7445786973740002045c4f70656e696e6720646f6573206e6f742065786973742e6443616e6e6f74486972654d756c7469706c654c656164657273000304bc43616e6e6f742066696c6c206f70656e696e672077697468206d756c7469706c65206170706c69636174696f6e732e74576f726b65724170706c69636174696f6e446f65734e6f74457869737400040488576f726b6572206170706c69636174696f6e20646f6573206e6f742065786973742e744d6178416374697665576f726b65724e756d626572457863656564656400050488576f726b696e672067726f75702073697a65206c696d69742065786365656465642e9c5375636365737366756c576f726b65724170706c69636174696f6e446f65734e6f744578697374000604b45375636365737366756c20776f726b6572206170706c69636174696f6e20646f6573206e6f742065786973742e8043616e6e6f74486972654c65616465725768656e4c6561646572457869737473000704c45468657265206973206c656164657220616c72656164792c2063616e6e6f74206869726520616e6f74686572206f6e652e4049734e6f744c6561644163636f756e740008044c4e6f742061206c656164206163636f756e742e4443757272656e744c6561644e6f745365740009046043757272656e74206c656164206973206e6f74207365742e48576f726b6572446f65734e6f744578697374000a0458576f726b657220646f6573206e6f742065786973742e4c496e76616c69644d656d6265724f726967696e000b0470496e76616c6964206f726967696e20666f722061206d656d6265722e705369676e657249734e6f74576f726b6572526f6c654163636f756e74000c04885369676e6572206973206e6f7420776f726b657220726f6c65206163636f756e742e4842656c6f774d696e696d756d5374616b6573000d04885374616b696e67206c657373207468616e20746865206c6f77657220626f756e642e7c496e73756666696369656e7442616c616e6365546f436f7665725374616b65000e0490496e73756666696369656e742062616c616e636520746f20636f766572207374616b652e884170706c69636174696f6e5374616b65446f65736e744d617463684f70656e696e67000f04d84170706c69636174696f6e207374616b65206973206c657373207468616e207265717569726564206f70656e696e67207374616b652e504f726967696e49734e6f744170706c6963616e74001004604f726967696e206973206e6f74206170706c6963616e742e3c576f726b657249734c656176696e6700110498496e76616c6964206f7065726174696f6e202d20776f726b6572206973206c656176696e672e5043616e6e6f74526577617264576974685a65726f0012046452657761726420636f756c64206e6f74206265207a65726f2e78496e76616c69645374616b696e674163636f756e74466f724d656d626572001304ac5374616b696e67206163636f756e7420646f65736e27742062656c6f6e6720746f2061206d656d6265722e5c436f6e666c6963745374616b65734f6e4163636f756e74001404b05374616b696e67206163636f756e7420636f6e7461696e7320636f6e666c696374696e67207374616b65732e44576f726b65724861734e6f5265776172640015047c576f726b657220686173206e6f20726563757272696e67207265776172642e78556e7374616b696e67506572696f644c6573735468616e4d696e696d756d001604090153706563696669656420756e7374616b696e6720706572696f64206973206c657373207468656e206d696e696d756d2073657420666f72207468652067726f75702e3c43616e6e6f745370656e645a65726f00170460496e76616c6964207370656e64696e6720616d6f756e742e74496e73756666696369656e74427564676574466f725370656e64696e67001804a449742773206e6f7420656e6f7567682062756467657420666f722074686973207370656e64696e672e584e6f4170706c69636174696f6e7350726f7669646564001904bc43616e6e6f742066696c6c206f70656e696e67202d206e6f206170706c69636174696f6e732070726f76696465642ea043616e6e6f7444656372656173655374616b6544656c7461477265617465725468616e5374616b65001a04fc43616e6e6f74206465637265617365207374616b65202d207374616b652064656c74612067726561746572207468616e20696e697469616c207374616b652e644170706c69636174696f6e734e6f74466f724f70656e696e67001b04f0547279696e6720746f2066696c6c206f70656e696e67207769746820616e206170706c69636174696f6e20666f72206f74686572206f70656e696e6764576f726b657253746f7261676556616c7565546f6f4c6f6e67001c0480576f726b65722073746f72616765207465787420697320746f6f206c6f6e672e70496e73756666696369656e74546f6b656e73466f7246756e64696e67001d04f8496e73756666696369656e7420746f6b656e7320666f722066756e64696e6720286f6e206d656d62657220636f6e74726f6c6c6572206163636f756e7429445a65726f546f6b656e7346756e64696e67001e047c547279696e6720746f2066756e642077697468207a65726f20746f6b656e7378496e73756666696369656e7442616c616e6365466f725472616e73666572001f04b443616e6e6f742077697468647261773a20696e73756666696369656e74206275646765742062616c616e63652e048c44697363757373696f6e206d6f64756c6520707265646566696e6564206572726f7273d1090c5070616c6c65745f776f726b696e675f67726f7570186572726f7273144572726f720804540004490001803c41726974686d657469634572726f72000004c8556e65787065637465642061726974686d65746963206572726f7220286f766572666c6f77202f20756e646572666c6f7729605374616b6542616c616e636543616e6e6f7442655a65726f0001049850726f7669646564207374616b652062616c616e63652063616e6e6f74206265207a65726f2e4c4f70656e696e67446f65734e6f7445786973740002045c4f70656e696e6720646f6573206e6f742065786973742e6443616e6e6f74486972654d756c7469706c654c656164657273000304bc43616e6e6f742066696c6c206f70656e696e672077697468206d756c7469706c65206170706c69636174696f6e732e74576f726b65724170706c69636174696f6e446f65734e6f74457869737400040488576f726b6572206170706c69636174696f6e20646f6573206e6f742065786973742e744d6178416374697665576f726b65724e756d626572457863656564656400050488576f726b696e672067726f75702073697a65206c696d69742065786365656465642e9c5375636365737366756c576f726b65724170706c69636174696f6e446f65734e6f744578697374000604b45375636365737366756c20776f726b6572206170706c69636174696f6e20646f6573206e6f742065786973742e8043616e6e6f74486972654c65616465725768656e4c6561646572457869737473000704c45468657265206973206c656164657220616c72656164792c2063616e6e6f74206869726520616e6f74686572206f6e652e4049734e6f744c6561644163636f756e740008044c4e6f742061206c656164206163636f756e742e4443757272656e744c6561644e6f745365740009046043757272656e74206c656164206973206e6f74207365742e48576f726b6572446f65734e6f744578697374000a0458576f726b657220646f6573206e6f742065786973742e4c496e76616c69644d656d6265724f726967696e000b0470496e76616c6964206f726967696e20666f722061206d656d6265722e705369676e657249734e6f74576f726b6572526f6c654163636f756e74000c04885369676e6572206973206e6f7420776f726b657220726f6c65206163636f756e742e4842656c6f774d696e696d756d5374616b6573000d04885374616b696e67206c657373207468616e20746865206c6f77657220626f756e642e7c496e73756666696369656e7442616c616e6365546f436f7665725374616b65000e0490496e73756666696369656e742062616c616e636520746f20636f766572207374616b652e884170706c69636174696f6e5374616b65446f65736e744d617463684f70656e696e67000f04d84170706c69636174696f6e207374616b65206973206c657373207468616e207265717569726564206f70656e696e67207374616b652e504f726967696e49734e6f744170706c6963616e74001004604f726967696e206973206e6f74206170706c6963616e742e3c576f726b657249734c656176696e6700110498496e76616c6964206f7065726174696f6e202d20776f726b6572206973206c656176696e672e5043616e6e6f74526577617264576974685a65726f0012046452657761726420636f756c64206e6f74206265207a65726f2e78496e76616c69645374616b696e674163636f756e74466f724d656d626572001304ac5374616b696e67206163636f756e7420646f65736e27742062656c6f6e6720746f2061206d656d6265722e5c436f6e666c6963745374616b65734f6e4163636f756e74001404b05374616b696e67206163636f756e7420636f6e7461696e7320636f6e666c696374696e67207374616b65732e44576f726b65724861734e6f5265776172640015047c576f726b657220686173206e6f20726563757272696e67207265776172642e78556e7374616b696e67506572696f644c6573735468616e4d696e696d756d001604090153706563696669656420756e7374616b696e6720706572696f64206973206c657373207468656e206d696e696d756d2073657420666f72207468652067726f75702e3c43616e6e6f745370656e645a65726f00170460496e76616c6964207370656e64696e6720616d6f756e742e74496e73756666696369656e74427564676574466f725370656e64696e67001804a449742773206e6f7420656e6f7567682062756467657420666f722074686973207370656e64696e672e584e6f4170706c69636174696f6e7350726f7669646564001904bc43616e6e6f742066696c6c206f70656e696e67202d206e6f206170706c69636174696f6e732070726f76696465642ea043616e6e6f7444656372656173655374616b6544656c7461477265617465725468616e5374616b65001a04fc43616e6e6f74206465637265617365207374616b65202d207374616b652064656c74612067726561746572207468616e20696e697469616c207374616b652e644170706c69636174696f6e734e6f74466f724f70656e696e67001b04f0547279696e6720746f2066696c6c206f70656e696e67207769746820616e206170706c69636174696f6e20666f72206f74686572206f70656e696e6764576f726b657253746f7261676556616c7565546f6f4c6f6e67001c0480576f726b65722073746f72616765207465787420697320746f6f206c6f6e672e70496e73756666696369656e74546f6b656e73466f7246756e64696e67001d04f8496e73756666696369656e7420746f6b656e7320666f722066756e64696e6720286f6e206d656d62657220636f6e74726f6c6c6572206163636f756e7429445a65726f546f6b656e7346756e64696e67001e047c547279696e6720746f2066756e642077697468207a65726f20746f6b656e7378496e73756666696369656e7442616c616e6365466f725472616e73666572001f04b443616e6e6f742077697468647261773a20696e73756666696369656e74206275646765742062616c616e63652e048c44697363757373696f6e206d6f64756c6520707265646566696e6564206572726f7273d5090c5070616c6c65745f776f726b696e675f67726f7570186572726f7273144572726f720804540004490001803c41726974686d657469634572726f72000004c8556e65787065637465642061726974686d65746963206572726f7220286f766572666c6f77202f20756e646572666c6f7729605374616b6542616c616e636543616e6e6f7442655a65726f0001049850726f7669646564207374616b652062616c616e63652063616e6e6f74206265207a65726f2e4c4f70656e696e67446f65734e6f7445786973740002045c4f70656e696e6720646f6573206e6f742065786973742e6443616e6e6f74486972654d756c7469706c654c656164657273000304bc43616e6e6f742066696c6c206f70656e696e672077697468206d756c7469706c65206170706c69636174696f6e732e74576f726b65724170706c69636174696f6e446f65734e6f74457869737400040488576f726b6572206170706c69636174696f6e20646f6573206e6f742065786973742e744d6178416374697665576f726b65724e756d626572457863656564656400050488576f726b696e672067726f75702073697a65206c696d69742065786365656465642e9c5375636365737366756c576f726b65724170706c69636174696f6e446f65734e6f744578697374000604b45375636365737366756c20776f726b6572206170706c69636174696f6e20646f6573206e6f742065786973742e8043616e6e6f74486972654c65616465725768656e4c6561646572457869737473000704c45468657265206973206c656164657220616c72656164792c2063616e6e6f74206869726520616e6f74686572206f6e652e4049734e6f744c6561644163636f756e740008044c4e6f742061206c656164206163636f756e742e4443757272656e744c6561644e6f745365740009046043757272656e74206c656164206973206e6f74207365742e48576f726b6572446f65734e6f744578697374000a0458576f726b657220646f6573206e6f742065786973742e4c496e76616c69644d656d6265724f726967696e000b0470496e76616c6964206f726967696e20666f722061206d656d6265722e705369676e657249734e6f74576f726b6572526f6c654163636f756e74000c04885369676e6572206973206e6f7420776f726b657220726f6c65206163636f756e742e4842656c6f774d696e696d756d5374616b6573000d04885374616b696e67206c657373207468616e20746865206c6f77657220626f756e642e7c496e73756666696369656e7442616c616e6365546f436f7665725374616b65000e0490496e73756666696369656e742062616c616e636520746f20636f766572207374616b652e884170706c69636174696f6e5374616b65446f65736e744d617463684f70656e696e67000f04d84170706c69636174696f6e207374616b65206973206c657373207468616e207265717569726564206f70656e696e67207374616b652e504f726967696e49734e6f744170706c6963616e74001004604f726967696e206973206e6f74206170706c6963616e742e3c576f726b657249734c656176696e6700110498496e76616c6964206f7065726174696f6e202d20776f726b6572206973206c656176696e672e5043616e6e6f74526577617264576974685a65726f0012046452657761726420636f756c64206e6f74206265207a65726f2e78496e76616c69645374616b696e674163636f756e74466f724d656d626572001304ac5374616b696e67206163636f756e7420646f65736e27742062656c6f6e6720746f2061206d656d6265722e5c436f6e666c6963745374616b65734f6e4163636f756e74001404b05374616b696e67206163636f756e7420636f6e7461696e7320636f6e666c696374696e67207374616b65732e44576f726b65724861734e6f5265776172640015047c576f726b657220686173206e6f20726563757272696e67207265776172642e78556e7374616b696e67506572696f644c6573735468616e4d696e696d756d001604090153706563696669656420756e7374616b696e6720706572696f64206973206c657373207468656e206d696e696d756d2073657420666f72207468652067726f75702e3c43616e6e6f745370656e645a65726f00170460496e76616c6964207370656e64696e6720616d6f756e742e74496e73756666696369656e74427564676574466f725370656e64696e67001804a449742773206e6f7420656e6f7567682062756467657420666f722074686973207370656e64696e672e584e6f4170706c69636174696f6e7350726f7669646564001904bc43616e6e6f742066696c6c206f70656e696e67202d206e6f206170706c69636174696f6e732070726f76696465642ea043616e6e6f7444656372656173655374616b6544656c7461477265617465725468616e5374616b65001a04fc43616e6e6f74206465637265617365207374616b65202d207374616b652064656c74612067726561746572207468616e20696e697469616c207374616b652e644170706c69636174696f6e734e6f74466f724f70656e696e67001b04f0547279696e6720746f2066696c6c206f70656e696e67207769746820616e206170706c69636174696f6e20666f72206f74686572206f70656e696e6764576f726b657253746f7261676556616c7565546f6f4c6f6e67001c0480576f726b65722073746f72616765207465787420697320746f6f206c6f6e672e70496e73756666696369656e74546f6b656e73466f7246756e64696e67001d04f8496e73756666696369656e7420746f6b656e7320666f722066756e64696e6720286f6e206d656d62657220636f6e74726f6c6c6572206163636f756e7429445a65726f546f6b656e7346756e64696e67001e047c547279696e6720746f2066756e642077697468207a65726f20746f6b656e7378496e73756666696369656e7442616c616e6365466f725472616e73666572001f04b443616e6e6f742077697468647261773a20696e73756666696369656e74206275646765742062616c616e63652e048c44697363757373696f6e206d6f64756c6520707265646566696e6564206572726f7273d909102873705f72756e74696d651c67656e657269634c756e636865636b65645f65787472696e73696348556e636865636b656445787472696e736963101c4164647265737301001043616c6c011d04245369676e617475726501dd0914457874726101e90900040028000000dd09082873705f72756e74696d65384d756c74695369676e617475726500010c1c45643235353139040091050148656432353531393a3a5369676e61747572650000001c537232353531390400c5050148737232353531393a3a5369676e61747572650001001445636473610400e109014065636473613a3a5369676e617475726500020000e1090c1c73705f636f7265146563647361245369676e617475726500000400e50901205b75383b2036355d0000e509000003410000000800e90900000420ed09f109f509f909fd09050a090a0d0a00ed0910306672616d655f73797374656d28657874656e73696f6e7354636865636b5f6e6f6e5f7a65726f5f73656e64657248436865636b4e6f6e5a65726f53656e64657204045400000000f10910306672616d655f73797374656d28657874656e73696f6e7348636865636b5f737065635f76657273696f6e40436865636b5370656356657273696f6e04045400000000f50910306672616d655f73797374656d28657874656e73696f6e7340636865636b5f74785f76657273696f6e38436865636b547856657273696f6e04045400000000f90910306672616d655f73797374656d28657874656e73696f6e7334636865636b5f67656e6573697330436865636b47656e6573697304045400000000fd0910306672616d655f73797374656d28657874656e73696f6e733c636865636b5f6d6f7274616c69747938436865636b4d6f7274616c69747904045400000400010a010c4572610000010a102873705f72756e74696d651c67656e657269630c6572610c4572610001010420496d6d6f7274616c0000001c4d6f7274616c31040008000001001c4d6f7274616c32040008000002001c4d6f7274616c33040008000003001c4d6f7274616c34040008000004001c4d6f7274616c35040008000005001c4d6f7274616c36040008000006001c4d6f7274616c37040008000007001c4d6f7274616c38040008000008001c4d6f7274616c3904000800000900204d6f7274616c313004000800000a00204d6f7274616c313104000800000b00204d6f7274616c313204000800000c00204d6f7274616c313304000800000d00204d6f7274616c313404000800000e00204d6f7274616c313504000800000f00204d6f7274616c313604000800001000204d6f7274616c313704000800001100204d6f7274616c313804000800001200204d6f7274616c313904000800001300204d6f7274616c323004000800001400204d6f7274616c323104000800001500204d6f7274616c323204000800001600204d6f7274616c323304000800001700204d6f7274616c323404000800001800204d6f7274616c323504000800001900204d6f7274616c323604000800001a00204d6f7274616c323704000800001b00204d6f7274616c323804000800001c00204d6f7274616c323904000800001d00204d6f7274616c333004000800001e00204d6f7274616c333104000800001f00204d6f7274616c333204000800002000204d6f7274616c333304000800002100204d6f7274616c333404000800002200204d6f7274616c333504000800002300204d6f7274616c333604000800002400204d6f7274616c333704000800002500204d6f7274616c333804000800002600204d6f7274616c333904000800002700204d6f7274616c343004000800002800204d6f7274616c343104000800002900204d6f7274616c343204000800002a00204d6f7274616c343304000800002b00204d6f7274616c343404000800002c00204d6f7274616c343504000800002d00204d6f7274616c343604000800002e00204d6f7274616c343704000800002f00204d6f7274616c343804000800003000204d6f7274616c343904000800003100204d6f7274616c353004000800003200204d6f7274616c353104000800003300204d6f7274616c353204000800003400204d6f7274616c353304000800003500204d6f7274616c353404000800003600204d6f7274616c353504000800003700204d6f7274616c353604000800003800204d6f7274616c353704000800003900204d6f7274616c353804000800003a00204d6f7274616c353904000800003b00204d6f7274616c363004000800003c00204d6f7274616c363104000800003d00204d6f7274616c363204000800003e00204d6f7274616c363304000800003f00204d6f7274616c363404000800004000204d6f7274616c363504000800004100204d6f7274616c363604000800004200204d6f7274616c363704000800004300204d6f7274616c363804000800004400204d6f7274616c363904000800004500204d6f7274616c373004000800004600204d6f7274616c373104000800004700204d6f7274616c373204000800004800204d6f7274616c373304000800004900204d6f7274616c373404000800004a00204d6f7274616c373504000800004b00204d6f7274616c373604000800004c00204d6f7274616c373704000800004d00204d6f7274616c373804000800004e00204d6f7274616c373904000800004f00204d6f7274616c383004000800005000204d6f7274616c383104000800005100204d6f7274616c383204000800005200204d6f7274616c383304000800005300204d6f7274616c383404000800005400204d6f7274616c383504000800005500204d6f7274616c383604000800005600204d6f7274616c383704000800005700204d6f7274616c383804000800005800204d6f7274616c383904000800005900204d6f7274616c393004000800005a00204d6f7274616c393104000800005b00204d6f7274616c393204000800005c00204d6f7274616c393304000800005d00204d6f7274616c393404000800005e00204d6f7274616c393504000800005f00204d6f7274616c393604000800006000204d6f7274616c393704000800006100204d6f7274616c393804000800006200204d6f7274616c393904000800006300244d6f7274616c31303004000800006400244d6f7274616c31303104000800006500244d6f7274616c31303204000800006600244d6f7274616c31303304000800006700244d6f7274616c31303404000800006800244d6f7274616c31303504000800006900244d6f7274616c31303604000800006a00244d6f7274616c31303704000800006b00244d6f7274616c31303804000800006c00244d6f7274616c31303904000800006d00244d6f7274616c31313004000800006e00244d6f7274616c31313104000800006f00244d6f7274616c31313204000800007000244d6f7274616c31313304000800007100244d6f7274616c31313404000800007200244d6f7274616c31313504000800007300244d6f7274616c31313604000800007400244d6f7274616c31313704000800007500244d6f7274616c31313804000800007600244d6f7274616c31313904000800007700244d6f7274616c31323004000800007800244d6f7274616c31323104000800007900244d6f7274616c31323204000800007a00244d6f7274616c31323304000800007b00244d6f7274616c31323404000800007c00244d6f7274616c31323504000800007d00244d6f7274616c31323604000800007e00244d6f7274616c31323704000800007f00244d6f7274616c31323804000800008000244d6f7274616c31323904000800008100244d6f7274616c31333004000800008200244d6f7274616c31333104000800008300244d6f7274616c31333204000800008400244d6f7274616c31333304000800008500244d6f7274616c31333404000800008600244d6f7274616c31333504000800008700244d6f7274616c31333604000800008800244d6f7274616c31333704000800008900244d6f7274616c31333804000800008a00244d6f7274616c31333904000800008b00244d6f7274616c31343004000800008c00244d6f7274616c31343104000800008d00244d6f7274616c31343204000800008e00244d6f7274616c31343304000800008f00244d6f7274616c31343404000800009000244d6f7274616c31343504000800009100244d6f7274616c31343604000800009200244d6f7274616c31343704000800009300244d6f7274616c31343804000800009400244d6f7274616c31343904000800009500244d6f7274616c31353004000800009600244d6f7274616c31353104000800009700244d6f7274616c31353204000800009800244d6f7274616c31353304000800009900244d6f7274616c31353404000800009a00244d6f7274616c31353504000800009b00244d6f7274616c31353604000800009c00244d6f7274616c31353704000800009d00244d6f7274616c31353804000800009e00244d6f7274616c31353904000800009f00244d6f7274616c3136300400080000a000244d6f7274616c3136310400080000a100244d6f7274616c3136320400080000a200244d6f7274616c3136330400080000a300244d6f7274616c3136340400080000a400244d6f7274616c3136350400080000a500244d6f7274616c3136360400080000a600244d6f7274616c3136370400080000a700244d6f7274616c3136380400080000a800244d6f7274616c3136390400080000a900244d6f7274616c3137300400080000aa00244d6f7274616c3137310400080000ab00244d6f7274616c3137320400080000ac00244d6f7274616c3137330400080000ad00244d6f7274616c3137340400080000ae00244d6f7274616c3137350400080000af00244d6f7274616c3137360400080000b000244d6f7274616c3137370400080000b100244d6f7274616c3137380400080000b200244d6f7274616c3137390400080000b300244d6f7274616c3138300400080000b400244d6f7274616c3138310400080000b500244d6f7274616c3138320400080000b600244d6f7274616c3138330400080000b700244d6f7274616c3138340400080000b800244d6f7274616c3138350400080000b900244d6f7274616c3138360400080000ba00244d6f7274616c3138370400080000bb00244d6f7274616c3138380400080000bc00244d6f7274616c3138390400080000bd00244d6f7274616c3139300400080000be00244d6f7274616c3139310400080000bf00244d6f7274616c3139320400080000c000244d6f7274616c3139330400080000c100244d6f7274616c3139340400080000c200244d6f7274616c3139350400080000c300244d6f7274616c3139360400080000c400244d6f7274616c3139370400080000c500244d6f7274616c3139380400080000c600244d6f7274616c3139390400080000c700244d6f7274616c3230300400080000c800244d6f7274616c3230310400080000c900244d6f7274616c3230320400080000ca00244d6f7274616c3230330400080000cb00244d6f7274616c3230340400080000cc00244d6f7274616c3230350400080000cd00244d6f7274616c3230360400080000ce00244d6f7274616c3230370400080000cf00244d6f7274616c3230380400080000d000244d6f7274616c3230390400080000d100244d6f7274616c3231300400080000d200244d6f7274616c3231310400080000d300244d6f7274616c3231320400080000d400244d6f7274616c3231330400080000d500244d6f7274616c3231340400080000d600244d6f7274616c3231350400080000d700244d6f7274616c3231360400080000d800244d6f7274616c3231370400080000d900244d6f7274616c3231380400080000da00244d6f7274616c3231390400080000db00244d6f7274616c3232300400080000dc00244d6f7274616c3232310400080000dd00244d6f7274616c3232320400080000de00244d6f7274616c3232330400080000df00244d6f7274616c3232340400080000e000244d6f7274616c3232350400080000e100244d6f7274616c3232360400080000e200244d6f7274616c3232370400080000e300244d6f7274616c3232380400080000e400244d6f7274616c3232390400080000e500244d6f7274616c3233300400080000e600244d6f7274616c3233310400080000e700244d6f7274616c3233320400080000e800244d6f7274616c3233330400080000e900244d6f7274616c3233340400080000ea00244d6f7274616c3233350400080000eb00244d6f7274616c3233360400080000ec00244d6f7274616c3233370400080000ed00244d6f7274616c3233380400080000ee00244d6f7274616c3233390400080000ef00244d6f7274616c3234300400080000f000244d6f7274616c3234310400080000f100244d6f7274616c3234320400080000f200244d6f7274616c3234330400080000f300244d6f7274616c3234340400080000f400244d6f7274616c3234350400080000f500244d6f7274616c3234360400080000f600244d6f7274616c3234370400080000f700244d6f7274616c3234380400080000f800244d6f7274616c3234390400080000f900244d6f7274616c3235300400080000fa00244d6f7274616c3235310400080000fb00244d6f7274616c3235320400080000fc00244d6f7274616c3235330400080000fd00244d6f7274616c3235340400080000fe00244d6f7274616c3235350400080000ff0000050a10306672616d655f73797374656d28657874656e73696f6e732c636865636b5f6e6f6e636528436865636b4e6f6e636504045400000400cd030120543a3a496e6465780000090a10306672616d655f73797374656d28657874656e73696f6e7330636865636b5f7765696768742c436865636b576569676874040454000000000d0a086870616c6c65745f7472616e73616374696f6e5f7061796d656e74604368617267655472616e73616374696f6e5061796d656e7404045400000400d0013042616c616e63654f663c543e0000110a08586a6f7973747265616d5f6e6f64655f72756e74696d651c52756e74696d6500000000a41853797374656d011853797374656d401c4163636f756e7401010402000c4101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004e8205468652066756c6c206163636f756e7420696e666f726d6174696f6e20666f72206120706172746963756c6172206163636f756e742049442e3845787472696e736963436f756e74000010040004b820546f74616c2065787472696e7369637320636f756e7420666f72207468652063757272656e7420626c6f636b2e2c426c6f636b57656967687401001c600000000000000000000000000000000000000000000000000488205468652063757272656e742077656967687420666f722074686520626c6f636b2e40416c6c45787472696e736963734c656e000010040004410120546f74616c206c656e6774682028696e2062797465732920666f7220616c6c2065787472696e736963732070757420746f6765746865722c20666f72207468652063757272656e7420626c6f636b2e24426c6f636b486173680101040510248000000000000000000000000000000000000000000000000000000000000000000498204d6170206f6620626c6f636b206e756d6265727320746f20626c6f636b206861736865732e3445787472696e736963446174610101040510280400043d012045787472696e73696373206461746120666f72207468652063757272656e7420626c6f636b20286d61707320616e2065787472696e736963277320696e64657820746f206974732064617461292e184e756d6265720100101000000000040901205468652063757272656e7420626c6f636b206e756d626572206265696e672070726f6365737365642e205365742062792060657865637574655f626c6f636b602e28506172656e744861736801002480000000000000000000000000000000000000000000000000000000000000000004702048617368206f66207468652070726576696f757320626c6f636b2e1844696765737401002c040004f020446967657374206f66207468652063757272656e7420626c6f636b2c20616c736f2070617274206f662074686520626c6f636b206865616465722e184576656e747301003c04001ca0204576656e7473206465706f736974656420666f72207468652063757272656e7420626c6f636b2e001d01204e4f54453a20546865206974656d20697320756e626f756e6420616e642073686f756c64207468657265666f7265206e657665722062652072656164206f6e20636861696e2ed020497420636f756c64206f746865727769736520696e666c6174652074686520506f562073697a65206f66206120626c6f636b2e002d01204576656e747320686176652061206c6172676520696e2d6d656d6f72792073697a652e20426f7820746865206576656e747320746f206e6f7420676f206f75742d6f662d6d656d6f7279fc206a75737420696e206361736520736f6d656f6e65207374696c6c207265616473207468656d2066726f6d2077697468696e207468652072756e74696d652e284576656e74436f756e74010010100000000004b820546865206e756d626572206f66206576656e747320696e2074686520604576656e74733c543e60206c6973742e2c4576656e74546f706963730101040224c1030400282501204d617070696e67206265747765656e206120746f7069632028726570726573656e74656420627920543a3a486173682920616e64206120766563746f72206f6620696e646578657394206f66206576656e747320696e2074686520603c4576656e74733c543e3e60206c6973742e00510120416c6c20746f70696320766563746f727320686176652064657465726d696e69737469632073746f72616765206c6f636174696f6e7320646570656e64696e67206f6e2074686520746f7069632e2054686973450120616c6c6f7773206c696768742d636c69656e747320746f206c6576657261676520746865206368616e67657320747269652073746f7261676520747261636b696e67206d656368616e69736d20616e64e420696e2063617365206f66206368616e67657320666574636820746865206c697374206f66206576656e7473206f6620696e7465726573742e004d01205468652076616c756520686173207468652074797065206028543a3a426c6f636b4e756d6265722c204576656e74496e646578296020626563617573652069662077652075736564206f6e6c79206a7573744d012074686520604576656e74496e64657860207468656e20696e20636173652069662074686520746f70696320686173207468652073616d6520636f6e74656e7473206f6e20746865206e65787420626c6f636b0101206e6f206e6f74696669636174696f6e2077696c6c20626520747269676765726564207468757320746865206576656e74206d69676874206265206c6f73742e484c61737452756e74696d65557067726164650000c90304000455012053746f726573207468652060737065635f76657273696f6e6020616e642060737065635f6e616d6560206f66207768656e20746865206c6173742072756e74696d6520757067726164652068617070656e65642e545570677261646564546f553332526566436f756e740100880400044d012054727565206966207765206861766520757067726164656420736f207468617420607479706520526566436f756e74602069732060753332602e2046616c7365202864656661756c7429206966206e6f742e605570677261646564546f547269706c65526566436f756e740100880400085d012054727565206966207765206861766520757067726164656420736f2074686174204163636f756e74496e666f20636f6e7461696e73207468726565207479706573206f662060526566436f756e74602e2046616c736548202864656661756c7429206966206e6f742e38457865637574696f6e50686173650000b903040004882054686520657865637574696f6e207068617365206f662074686520626c6f636b2e01d50301481830426c6f636b57656967687473e103850120f7d6600100000000204aa9d1010000a0035b06000000000160c4aea72e010000010098f73e5d010000010000000000000000a0035b060000000001604c0112a30100000100204aa9d1010000010088526a74000000a0035b060000000000000004d020426c6f636b20262065787472696e7369637320776569676874733a20626173652076616c75657320616e64206c696d6974732e2c426c6f636b4c656e677468ed033000003c00000050000000500004a820546865206d6178696d756d206c656e677468206f66206120626c6f636b2028696e206279746573292e38426c6f636b48617368436f756e74101060090000045501204d6178696d756d206e756d626572206f6620626c6f636b206e756d62657220746f20626c6f636b2068617368206d617070696e677320746f206b65657020286f6c64657374207072756e6564206669727374292e204462576569676874f503408848890000000000f0b64603000000000409012054686520776569676874206f662072756e74696d65206461746162617365206f7065726174696f6e73207468652072756e74696d652063616e20696e766f6b652e1c56657273696f6ef903d102386a6f7973747265616d2d6e6f6465386a6f7973747265616d2d6e6f64650c000000d0070000000000002cdf6acb689907609b0400000037e397fc7c91f5e40100000040fe3ad401f8959a06000000d2bc9897eed08f1503000000f78b278be53f454c02000000ed99c5acb25eedf503000000cbca25e39f14238702000000687ad44ad37f03c201000000bc9d89904f5b923f0100000037c8bb1350a9a2a801000000ab3c0572291feb8b0100000001000000010484204765742074686520636861696e27732063757272656e742076657273696f6e2e28535335385072656669780d04087e0014a8205468652064657369676e61746564205353383520707265666978206f66207468697320636861696e2e0039012054686973207265706c6163657320746865202273733538466f726d6174222070726f7065727479206465636c6172656420696e2074686520636861696e20737065632e20526561736f6e20697331012074686174207468652072756e74696d652073686f756c64206b6e6f772061626f7574207468652070726566697820696e206f7264657220746f206d616b6520757365206f662069742061737020616e206964656e746966696572206f662074686520636861696e2e011104001c5574696c69747900011504016c044c626174636865645f63616c6c735f6c696d69741010aa2a000004a820546865206c696d6974206f6e20746865206e756d626572206f6620626174636865642063616c6c732e019506011042616265011042616265402845706f6368496e64657801002020000000000000000004542043757272656e742065706f636820696e6465782e2c417574686f726974696573010099060400046c2043757272656e742065706f636820617574686f7269746965732e2c47656e65736973536c6f740100350420000000000000000008f82054686520736c6f74206174207768696368207468652066697273742065706f63682061637475616c6c7920737461727465642e205468697320697320309020756e74696c2074686520666972737420626c6f636b206f662074686520636861696e2e2c43757272656e74536c6f740100350420000000000000000004542043757272656e7420736c6f74206e756d6265722e2852616e646f6d6e65737301000480000000000000000000000000000000000000000000000000000000000000000028b8205468652065706f63682072616e646f6d6e65737320666f7220746865202a63757272656e742a2065706f63682e002c20232053656375726974790005012054686973204d555354204e4f54206265207573656420666f722067616d626c696e672c2061732069742063616e20626520696e666c75656e6365642062792061f8206d616c6963696f75732076616c696461746f7220696e207468652073686f7274207465726d2e204974204d4159206265207573656420696e206d616e7915012063727970746f677261706869632070726f746f636f6c732c20686f77657665722c20736f206c6f6e67206173206f6e652072656d656d6265727320746861742074686973150120286c696b652065766572797468696e6720656c7365206f6e2d636861696e29206974206973207075626c69632e20466f72206578616d706c652c2069742063616e206265050120757365642077686572652061206e756d626572206973206e656564656420746861742063616e6e6f742068617665206265656e2063686f73656e20627920616e0d01206164766572736172792c20666f7220707572706f7365732073756368206173207075626c69632d636f696e207a65726f2d6b6e6f776c656467652070726f6f66732e6050656e64696e6745706f6368436f6e6669674368616e676500003d0404000461012050656e64696e672065706f636820636f6e66696775726174696f6e206368616e676520746861742077696c6c206265206170706c696564207768656e20746865206e6578742065706f636820697320656e61637465642e384e65787452616e646f6d6e657373010004800000000000000000000000000000000000000000000000000000000000000000045c204e6578742065706f63682072616e646f6d6e6573732e3c4e657874417574686f7269746965730100990604000460204e6578742065706f636820617574686f7269746965732e305365676d656e74496e6465780100101000000000247c2052616e646f6d6e65737320756e64657220636f6e737472756374696f6e2e00f8205765206d616b6520612074726164652d6f6666206265747765656e2073746f7261676520616363657373657320616e64206c697374206c656e6774682e01012057652073746f72652074686520756e6465722d636f6e737472756374696f6e2072616e646f6d6e65737320696e207365676d656e7473206f6620757020746f942060554e4445525f434f4e535452554354494f4e5f5345474d454e545f4c454e475448602e00ec204f6e63652061207365676d656e7420726561636865732074686973206c656e6774682c20776520626567696e20746865206e657874206f6e652e090120576520726573657420616c6c207365676d656e747320616e642072657475726e20746f206030602061742074686520626567696e6e696e67206f662065766572791c2065706f63682e44556e646572436f6e737472756374696f6e0101040510a50604000415012054574f582d4e4f54453a20605365676d656e74496e6465786020697320616e20696e6372656173696e6720696e74656765722c20736f2074686973206973206f6b61792e2c496e697469616c697a65640000ad0604000801012054656d706f726172792076616c75652028636c656172656420617420626c6f636b2066696e616c697a6174696f6e292077686963682069732060536f6d65601d01206966207065722d626c6f636b20696e697469616c697a6174696f6e2068617320616c7265616479206265656e2063616c6c656420666f722063757272656e7420626c6f636b2e4c417574686f7256726652616e646f6d6e6573730100c10604001015012054686973206669656c642073686f756c6420616c7761797320626520706f70756c6174656420647572696e6720626c6f636b2070726f63657373696e6720756e6c6573731901207365636f6e6461727920706c61696e20736c6f74732061726520656e61626c65642028776869636820646f6e277420636f6e7461696e206120565246206f7574707574292e0049012049742069732073657420696e20606f6e5f66696e616c697a65602c206265666f72652069742077696c6c20636f6e7461696e207468652076616c75652066726f6d20746865206c61737420626c6f636b2e2845706f636853746172740100c503200000000000000000145d012054686520626c6f636b206e756d62657273207768656e20746865206c61737420616e642063757272656e742065706f6368206861766520737461727465642c20726573706563746976656c7920604e2d316020616e641420604e602e4901204e4f54453a20576520747261636b207468697320697320696e206f7264657220746f20616e6e6f746174652074686520626c6f636b206e756d626572207768656e206120676976656e20706f6f6c206f66590120656e74726f7079207761732066697865642028692e652e20697420776173206b6e6f776e20746f20636861696e206f6273657276657273292e2053696e63652065706f6368732061726520646566696e656420696e590120736c6f74732c207768696368206d617920626520736b69707065642c2074686520626c6f636b206e756d62657273206d6179206e6f74206c696e6520757020776974682074686520736c6f74206e756d626572732e204c6174656e657373010010100000000014d820486f77206c617465207468652063757272656e7420626c6f636b20697320636f6d706172656420746f2069747320706172656e742e001501205468697320656e74727920697320706f70756c617465642061732070617274206f6620626c6f636b20657865637574696f6e20616e6420697320636c65616e65642075701101206f6e20626c6f636b2066696e616c697a6174696f6e2e205175657279696e6720746869732073746f7261676520656e747279206f757473696465206f6620626c6f636bb020657865637574696f6e20636f6e746578742073686f756c6420616c77617973207969656c64207a65726f2e2c45706f6368436f6e6669670000c50604000861012054686520636f6e66696775726174696f6e20666f72207468652063757272656e742065706f63682e2053686f756c64206e6576657220626520604e6f6e656020617320697420697320696e697469616c697a656420696e242067656e657369732e3c4e65787445706f6368436f6e6669670000c5060400082d012054686520636f6e66696775726174696f6e20666f7220746865206e6578742065706f63682c20604e6f6e65602069662074686520636f6e6669672077696c6c206e6f74206368616e6765e82028796f752063616e2066616c6c6261636b20746f206045706f6368436f6e6669676020696e737465616420696e20746861742063617365292e012104000c3445706f63684475726174696f6e202058020000000000000cec2054686520616d6f756e74206f662074696d652c20696e20736c6f74732c207468617420656163682065706f63682073686f756c64206c6173742e1901204e4f54453a2043757272656e746c79206974206973206e6f7420706f737369626c6520746f206368616e6765207468652065706f6368206475726174696f6e20616674657221012074686520636861696e2068617320737461727465642e20417474656d7074696e6720746f20646f20736f2077696c6c20627269636b20626c6f636b2070726f64756374696f6e2e444578706563746564426c6f636b54696d652020701700000000000014050120546865206578706563746564206176657261676520626c6f636b2074696d6520617420776869636820424142452073686f756c64206265206372656174696e67110120626c6f636b732e2053696e636520424142452069732070726f626162696c6973746963206974206973206e6f74207472697669616c20746f20666967757265206f75740501207768617420746865206578706563746564206176657261676520626c6f636b2074696d652073686f756c64206265206261736564206f6e2074686520736c6f740901206475726174696f6e20616e642074686520736563757269747920706172616d657465722060636020287768657265206031202d20636020726570726573656e7473a0207468652070726f626162696c697479206f66206120736c6f74206265696e6720656d707479292e384d6178417574686f7269746965731010a08601000488204d6178206e756d626572206f6620617574686f72697469657320616c6c6f77656401c906022454696d657374616d70012454696d657374616d70080c4e6f7701002020000000000000000004902043757272656e742074696d6520666f72207468652063757272656e7420626c6f636b2e24446964557064617465010088040004b420446964207468652074696d657374616d7020676574207570646174656420696e207468697320626c6f636b3f0145040004344d696e696d756d506572696f642020b80b000000000000104d0120546865206d696e696d756d20706572696f64206265747765656e20626c6f636b732e204265776172652074686174207468697320697320646966666572656e7420746f20746865202a65787065637465642a5d0120706572696f6420746861742074686520626c6f636b2070726f64756374696f6e206170706172617475732070726f76696465732e20596f75722063686f73656e20636f6e73656e7375732073797374656d2077696c6c5d012067656e6572616c6c7920776f726b2077697468207468697320746f2064657465726d696e6520612073656e7369626c6520626c6f636b2074696d652e20652e672e20466f7220417572612c2069742077696c6c206265a020646f75626c65207468697320706572696f64206f6e2064656661756c742073657474696e67732e000328417574686f72736869700128417574686f72736869700c18556e636c65730100cd060400041c20556e636c657318417574686f720000000400046420417574686f72206f662063757272656e7420626c6f636b2e30446964536574556e636c6573010088040004bc205768657468657220756e636c6573207765726520616c72656164792073657420696e207468697320626c6f636b2e014d04000440556e636c6547656e65726174696f6e731010000000000ccc20546865206e756d626572206f6620626c6f636b73206261636b2077652073686f756c642061636365707420756e636c65732ee42054686973206d65616e7320746861742077652077696c6c206465616c207769746820756e636c652d706172656e7473207468617420617265942060556e636c6547656e65726174696f6e73202b203160206265666f726520606e6f77602e01d506042042616c616e636573012042616c616e6365731434546f74616c49737375616e6365010018400000000000000000000000000000000004982054686520746f74616c20756e6974732069737375656420696e207468652073797374656d2e1c4163636f756e74010104020014010100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000600901205468652042616c616e6365732070616c6c6574206578616d706c65206f662073746f72696e67207468652062616c616e6365206f6620616e206163636f756e742e00282023204578616d706c650034206060606e6f636f6d70696c65b02020696d706c2070616c6c65745f62616c616e6365733a3a436f6e66696720666f722052756e74696d65207b19022020202074797065204163636f756e7453746f7265203d2053746f726167654d61705368696d3c53656c663a3a4163636f756e743c52756e74696d653e2c206672616d655f73797374656d3a3a50726f76696465723c52756e74696d653e2c204163636f756e7449642c2053656c663a3a4163636f756e74446174613c42616c616e63653e3e0c20207d102060606000150120596f752063616e20616c736f2073746f7265207468652062616c616e6365206f6620616e206163636f756e7420696e20746865206053797374656d602070616c6c65742e00282023204578616d706c650034206060606e6f636f6d70696c65b02020696d706c2070616c6c65745f62616c616e6365733a3a436f6e66696720666f722052756e74696d65207b7420202074797065204163636f756e7453746f7265203d2053797374656d0c20207d102060606000510120427574207468697320636f6d657320776974682074726164656f6666732c2073746f72696e67206163636f756e742062616c616e63657320696e207468652073797374656d2070616c6c65742073746f7265736d0120606672616d655f73797374656d60206461746120616c6f6e677369646520746865206163636f756e74206461746120636f6e747261727920746f2073746f72696e67206163636f756e742062616c616e63657320696e207468652901206042616c616e636573602070616c6c65742c20776869636820757365732061206053746f726167654d61706020746f2073746f72652062616c616e6365732064617461206f6e6c792e4101204e4f54453a2054686973206973206f6e6c79207573656420696e207468652063617365207468617420746869732070616c6c6574206973207573656420746f2073746f72652062616c616e6365732e144c6f636b730101040200d906040008b820416e79206c6971756964697479206c6f636b73206f6e20736f6d65206163636f756e742062616c616e6365732e2501204e4f54453a2053686f756c64206f6e6c79206265206163636573736564207768656e2073657474696e672c206368616e67696e6720616e642066726565696e672061206c6f636b2e2052657365727665730101040200e906040004a4204e616d6564207265736572766573206f6e20736f6d65206163636f756e742062616c616e6365732e3853746f7261676556657273696f6e0100f50604000c7c2053746f726167652076657273696f6e206f66207468652070616c6c65742e00a020546869732069732073657420746f2076322e302e3020666f72206e6577206e6574776f726b732e01550401780c484578697374656e7469616c4465706f73697418404002e50f00000000000000000000000004d420546865206d696e696d756d20616d6f756e7420726571756972656420746f206b65657020616e206163636f756e74206f70656e2e204d61784c6f636b7310103200000008f420546865206d6178696d756d206e756d626572206f66206c6f636b7320746861742073686f756c64206578697374206f6e20616e206163636f756e742edc204e6f74207374726963746c7920656e666f726365642c20627574207573656420666f722077656967687420657374696d6174696f6e2e2c4d61785265736572766573101032000000040d0120546865206d6178696d756d206e756d626572206f66206e616d656420726573657276657320746861742063616e206578697374206f6e20616e206163636f756e742e01f90605485472616e73616374696f6e5061796d656e7401485472616e73616374696f6e5061796d656e7408444e6578744665654d756c7469706c6965720100fd0640000064a7b3b6e00d0000000000000000003853746f7261676556657273696f6e01000107040000000004604f7065726174696f6e616c4665654d756c7469706c696572080405545901204120666565206d756c6974706c69657220666f7220604f7065726174696f6e616c602065787472696e7369637320746f20636f6d7075746520227669727475616c207469702220746f20626f6f73742074686569722c20607072696f7269747960004d0120546869732076616c7565206973206d756c7469706c656420627920746865206066696e616c5f6665656020746f206f627461696e206120227669727475616c20746970222074686174206973206c61746572f420616464656420746f20612074697020636f6d706f6e656e7420696e20726567756c617220607072696f72697479602063616c63756c6174696f6e732e4d01204974206d65616e732074686174206120604e6f726d616c60207472616e73616374696f6e2063616e2066726f6e742d72756e20612073696d696c61726c792d73697a656420604f7065726174696f6e616c6041012065787472696e736963202877697468206e6f20746970292c20627920696e636c7564696e672061207469702076616c75652067726561746572207468616e20746865207669727475616c207469702e003c20606060727573742c69676e6f726540202f2f20466f7220604e6f726d616c608c206c6574207072696f72697479203d207072696f726974795f63616c6328746970293b0054202f2f20466f7220604f7065726174696f6e616c601101206c6574207669727475616c5f746970203d2028696e636c7573696f6e5f666565202b2074697029202a204f7065726174696f6e616c4665654d756c7469706c6965723bc4206c6574207072696f72697479203d207072696f726974795f63616c6328746970202b207669727475616c5f746970293b1020606060005101204e6f746520746861742073696e636520776520757365206066696e616c5f6665656020746865206d756c7469706c696572206170706c69657320616c736f20746f2074686520726567756c61722060746970605d012073656e74207769746820746865207472616e73616374696f6e2e20536f2c206e6f74206f6e6c7920646f657320746865207472616e73616374696f6e206765742061207072696f726974792062756d702062617365646101206f6e207468652060696e636c7573696f6e5f666565602c2062757420776520616c736f20616d706c6966792074686520696d70616374206f662074697073206170706c69656420746f20604f7065726174696f6e616c6038207472616e73616374696f6e732e000668456c656374696f6e50726f76696465724d756c746950686173650168456c656374696f6e50726f76696465724d756c746950686173652814526f756e64010010100100000018ac20496e7465726e616c20636f756e74657220666f7220746865206e756d626572206f6620726f756e64732e00550120546869732069732075736566756c20666f722064652d6475706c69636174696f6e206f66207472616e73616374696f6e73207375626d697474656420746f2074686520706f6f6c2c20616e642067656e6572616c6c20646961676e6f7374696373206f66207468652070616c6c65742e004d012054686973206973206d6572656c7920696e6372656d656e746564206f6e6365207065722065766572792074696d65207468617420616e20757073747265616d2060656c656374602069732063616c6c65642e3043757272656e745068617365010005070400043c2043757272656e742070686173652e38517565756564536f6c7574696f6e00000d070400043d012043757272656e74206265737420736f6c7574696f6e2c207369676e6564206f7220756e7369676e65642c2071756575656420746f2062652072657475726e65642075706f6e2060656c656374602e20536e617073686f740000110704000c7020536e617073686f742064617461206f662074686520726f756e642e005d01205468697320697320637265617465642061742074686520626567696e6e696e67206f6620746865207369676e656420706861736520616e6420636c65617265642075706f6e2063616c6c696e672060656c656374602e38446573697265645461726765747300001004000ccc2044657369726564206e756d626572206f66207461726765747320746f20656c65637420666f72207468697320726f756e642e00a8204f6e6c7920657869737473207768656e205b60536e617073686f74605d2069732070726573656e742e40536e617073686f744d657461646174610000310504000c9820546865206d65746164617461206f6620746865205b60526f756e64536e617073686f74605d00a8204f6e6c7920657869737473207768656e205b60536e617073686f74605d2069732070726573656e742e645369676e65645375626d697373696f6e4e657874496e646578010010100000000024010120546865206e65787420696e64657820746f2062652061737369676e656420746f20616e20696e636f6d696e67207369676e6564207375626d697373696f6e2e007501204576657279206163636570746564207375626d697373696f6e2069732061737369676e6564206120756e6971756520696e6465783b207468617420696e64657820697320626f756e6420746f207468617420706172746963756c61726501207375626d697373696f6e20666f7220746865206475726174696f6e206f662074686520656c656374696f6e2e204f6e20656c656374696f6e2066696e616c697a6174696f6e2c20746865206e65787420696e6465782069733020726573657420746f20302e0069012057652063616e2774206a7573742075736520605369676e65645375626d697373696f6e496e64696365732e6c656e2829602c206265636175736520746861742773206120626f756e646564207365743b20706173742069747359012063617061636974792c2069742077696c6c2073696d706c792073617475726174652e2057652063616e2774206a7573742069746572617465206f76657220605369676e65645375626d697373696f6e734d6170602cf4206265636175736520697465726174696f6e20697320736c6f772e20496e73746561642c2077652073746f7265207468652076616c756520686572652e5c5369676e65645375626d697373696f6e496e6469636573010021070400184d01204120736f727465642c20626f756e64656420736574206f6620602873636f72652c20696e64657829602c20776865726520656163682060696e6465786020706f696e747320746f20612076616c756520696e5420605369676e65645375626d697373696f6e73602e007101205765206e65766572206e65656420746f2070726f63657373206d6f7265207468616e20612073696e676c65207369676e6564207375626d697373696f6e20617420612074696d652e205369676e6564207375626d697373696f6e7375012063616e206265207175697465206c617267652c20736f2077652772652077696c6c696e6720746f207061792074686520636f7374206f66206d756c7469706c6520646174616261736520616363657373657320746f206163636573732101207468656d206f6e6520617420612074696d6520696e7374656164206f662072656164696e6720616e64206465636f64696e6720616c6c206f66207468656d206174206f6e63652e505369676e65645375626d697373696f6e734d61700001040510310704001c7420556e636865636b65642c207369676e656420736f6c7574696f6e732e00690120546f676574686572207769746820605375626d697373696f6e496e6469636573602c20746869732073746f726573206120626f756e64656420736574206f6620605369676e65645375626d697373696f6e7360207768696c65ec20616c6c6f77696e6720757320746f206b656570206f6e6c7920612073696e676c65206f6e6520696e206d656d6f727920617420612074696d652e0069012054776f78206e6f74653a20746865206b6579206f6620746865206d617020697320616e206175746f2d696e6372656d656e74696e6720696e6465782077686963682075736572732063616e6e6f7420696e7370656374206f72f4206166666563743b2077652073686f756c646e2774206e65656420612063727970746f67726170686963616c6c7920736563757265206861736865722e544d696e696d756d556e7472757374656453636f726500002d050400105d0120546865206d696e696d756d2073636f7265207468617420656163682027756e747275737465642720736f6c7574696f6e206d7573742061747461696e20696e206f7264657220746f20626520636f6e7369646572656428206665617369626c652e00b82043616e206265207365742076696120607365745f6d696e696d756d5f756e747275737465645f73636f7265602e01590401803c34556e7369676e656450686173651010960000000480204475726174696f6e206f662074686520756e7369676e65642070686173652e2c5369676e656450686173651010960000000478204475726174696f6e206f6620746865207369676e65642070686173652e544265747465725369676e65645468726573686f6c649c1000000000084d0120546865206d696e696d756d20616d6f756e74206f6620696d70726f76656d656e7420746f2074686520736f6c7574696f6e2073636f7265207468617420646566696e6573206120736f6c7574696f6e2061737820226265747465722220696e20746865205369676e65642070686173652e5c426574746572556e7369676e65645468726573686f6c649c1020a10700084d0120546865206d696e696d756d20616d6f756e74206f6620696d70726f76656d656e7420746f2074686520736f6c7574696f6e2073636f7265207468617420646566696e6573206120736f6c7574696f6e2061738020226265747465722220696e2074686520556e7369676e65642070686173652e384f6666636861696e52657065617410101200000010b42054686520726570656174207468726573686f6c64206f6620746865206f6666636861696e20776f726b65722e00610120466f72206578616d706c652c20696620697420697320352c2074686174206d65616e732074686174206174206c65617374203520626c6f636b732077696c6c20656c61707365206265747765656e20617474656d7074738420746f207375626d69742074686520776f726b6572277320736f6c7574696f6e2e3c4d696e657254785072696f726974792020feffffffffffff7f04250120546865207072696f72697479206f662074686520756e7369676e6564207472616e73616374696f6e207375626d697474656420696e2074686520756e7369676e65642d7068617365505369676e65644d61785375626d697373696f6e731010100000001ce4204d6178696d756d206e756d626572206f66207369676e6564207375626d697373696f6e7320746861742063616e206265207175657565642e005501204974206973206265737420746f2061766f69642061646a757374696e67207468697320647572696e6720616e20656c656374696f6e2c20617320697420696d706163747320646f776e73747265616d2064617461650120737472756374757265732e20496e20706172746963756c61722c20605369676e65645375626d697373696f6e496e64696365733c543e6020697320626f756e646564206f6e20746869732076616c75652e20496620796f75f42075706461746520746869732076616c756520647572696e6720616e20656c656374696f6e2c20796f75205f6d7573745f20656e7375726520746861744d0120605369676e65645375626d697373696f6e496e64696365732e6c656e282960206973206c657373207468616e206f7220657175616c20746f20746865206e65772076616c75652e204f74686572776973652cf020617474656d70747320746f207375626d6974206e657720736f6c7574696f6e73206d617920636175736520612072756e74696d652070616e69632e3c5369676e65644d6178576569676874202040cdd7462d0100001494204d6178696d756d20776569676874206f662061207369676e656420736f6c7574696f6e2e005d01204966205b60436f6e6669673a3a4d696e6572436f6e666967605d206973206265696e6720696d706c656d656e74656420746f207375626d6974207369676e656420736f6c7574696f6e7320286f757473696465206f663d0120746869732070616c6c6574292c207468656e205b604d696e6572436f6e6669673a3a736f6c7574696f6e5f776569676874605d206973207573656420746f20636f6d7061726520616761696e73743020746869732076616c75652e405369676e65644d6178526566756e647310100400000004190120546865206d6178696d756d20616d6f756e74206f6620756e636865636b656420736f6c7574696f6e7320746f20726566756e64207468652063616c6c2066656520666f722e405369676e6564526577617264426173651840aa821bce260000000000000000000000048820426173652072657761726420666f722061207369676e656420736f6c7574696f6e445369676e65644465706f736974426173651840a41a130d84010000000000000000000004902042617365206465706f73697420666f722061207369676e656420736f6c7574696f6e2e445369676e65644465706f7369744279746518406a6e190000000000000000000000000004a0205065722d62797465206465706f73697420666f722061207369676e656420736f6c7574696f6e2e4c5369676e65644465706f73697457656967687418400000000000000000000000000000000004a8205065722d776569676874206465706f73697420666f722061207369676e656420736f6c7574696f6e2e444d6178456c656374696e67566f746572731010d43000000c5d0120546865206d6178696d756d206e756d626572206f6620656c656374696e6720766f7465727320746f2070757420696e2074686520736e617073686f742e20417420746865206d6f6d656e742c20736e617073686f7473590120617265206f6e6c79206f76657220612073696e676c6520626c6f636b2c20627574206f6e6365206d756c74692d626c6f636b20656c656374696f6e732061726520696e74726f647563656420746865792077696c6c842074616b6520706c616365206f766572206d756c7469706c6520626c6f636b732e4c4d6178456c65637461626c65546172676574730d0408ffff04010120546865206d6178696d756d206e756d626572206f6620656c65637461626c65207461726765747320746f2070757420696e2074686520736e617073686f742e013507071c5374616b696e67011c5374616b696e679c30486973746f7279446570746801001010540000001c8c204e756d626572206f66206572617320746f206b65657020696e20686973746f72792e00390120496e666f726d6174696f6e206973206b65707420666f72206572617320696e20605b63757272656e745f657261202d20686973746f72795f64657074683b2063757272656e745f6572615d602e006101204d757374206265206d6f7265207468616e20746865206e756d626572206f6620657261732064656c617965642062792073657373696f6e206f74686572776973652e20492e652e2061637469766520657261206d757374390120616c7761797320626520696e20686973746f72792e20492e652e20606163746976655f657261203e2063757272656e745f657261202d20686973746f72795f646570746860206d757374206265302067756172616e746565642e3856616c696461746f72436f756e74010010100000000004a82054686520696465616c206e756d626572206f66207374616b696e67207061727469636970616e74732e544d696e696d756d56616c696461746f72436f756e740100101000000000044101204d696e696d756d206e756d626572206f66207374616b696e67207061727469636970616e7473206265666f726520656d657267656e637920636f6e646974696f6e732061726520696d706f7365642e34496e76756c6e657261626c65730100510504000c590120416e792076616c696461746f72732074686174206d6179206e6576657220626520736c6173686564206f7220666f726369626c79206b69636b65642e20497427732061205665632073696e636520746865792772654d01206561737920746f20696e697469616c697a6520616e642074686520706572666f726d616e636520686974206973206d696e696d616c2028776520657870656374206e6f206d6f7265207468616e20666f7572ac20696e76756c6e657261626c65732920616e64207265737472696374656420746f20746573746e6574732e18426f6e6465640001040500000400040101204d61702066726f6d20616c6c206c6f636b65642022737461736822206163636f756e747320746f2074686520636f6e74726f6c6c6572206163636f756e742e404d696e4e6f6d696e61746f72426f6e64010018400000000000000000000000000000000004210120546865206d696e696d756d2061637469766520626f6e6420746f206265636f6d6520616e64206d61696e7461696e2074686520726f6c65206f662061206e6f6d696e61746f722e404d696e56616c696461746f72426f6e64010018400000000000000000000000000000000004210120546865206d696e696d756d2061637469766520626f6e6420746f206265636f6d6520616e64206d61696e7461696e2074686520726f6c65206f6620612076616c696461746f722e344d696e436f6d6d697373696f6e01009c10000000000ce820546865206d696e696d756d20616d6f756e74206f6620636f6d6d697373696f6e20746861742076616c696461746f72732063616e207365742e00802049662073657420746f206030602c206e6f206c696d6974206578697374732e184c6564676572000104020039070400044501204d61702066726f6d20616c6c2028756e6c6f636b6564292022636f6e74726f6c6c657222206163636f756e747320746f2074686520696e666f20726567617264696e6720746865207374616b696e672e14506179656501010405004d05040004e42057686572652074686520726577617264207061796d656e742073686f756c64206265206d6164652e204b657965642062792073746173682e2856616c696461746f727301010405009408000004450120546865206d61702066726f6d202877616e6e616265292076616c696461746f72207374617368206b657920746f2074686520707265666572656e636573206f6620746861742076616c696461746f722e50436f756e746572466f7256616c696461746f7273010010100000000004ac436f756e74657220666f72207468652072656c6174656420636f756e7465642073746f72616765206d6170484d617856616c696461746f7273436f756e7400001004000c310120546865206d6178696d756d2076616c696461746f7220636f756e74206265666f72652077652073746f7020616c6c6f77696e67206e65772076616c696461746f727320746f206a6f696e2e00d0205768656e20746869732076616c7565206973206e6f74207365742c206e6f206c696d6974732061726520656e666f726365642e284e6f6d696e61746f727300010405004907040040750120546865206d61702066726f6d206e6f6d696e61746f72207374617368206b657920746f207468656972206e6f6d696e6174696f6e20707265666572656e6365732c206e616d656c79207468652076616c696461746f72732074686174582074686579207769736820746f20737570706f72742e003901204e6f7465207468617420746865206b657973206f6620746869732073746f72616765206d6170206d69676874206265636f6d65206e6f6e2d6465636f6461626c6520696e2063617365207468656d01205b60436f6e6669673a3a4d61784e6f6d696e6174696f6e73605d20636f6e66696775726174696f6e206973206465637265617365642e20496e2074686973207261726520636173652c207468657365206e6f6d696e61746f7273650120617265207374696c6c206578697374656e7420696e2073746f726167652c207468656972206b657920697320636f727265637420616e64207265747269657661626c652028692e652e2060636f6e7461696e735f6b657960710120696e6469636174657320746861742074686579206578697374292c206275742074686569722076616c75652063616e6e6f74206265206465636f6465642e205468657265666f72652c20746865206e6f6e2d6465636f6461626c656d01206e6f6d696e61746f72732077696c6c206566666563746976656c79206e6f742d65786973742c20756e74696c20746865792072652d7375626d697420746865697220707265666572656e6365732073756368207468617420697401012069732077697468696e2074686520626f756e6473206f6620746865206e65776c79207365742060436f6e6669673a3a4d61784e6f6d696e6174696f6e73602e006101205468697320696d706c696573207468617420603a3a697465725f6b65797328292e636f756e7428296020616e6420603a3a6974657228292e636f756e74282960206d696768742072657475726e20646966666572656e746d012076616c75657320666f722074686973206d61702e204d6f72656f7665722c20746865206d61696e20603a3a636f756e7428296020697320616c69676e656420776974682074686520666f726d65722c206e616d656c79207468656c206e756d626572206f66206b65797320746861742065786973742e006d01204c6173746c792c20696620616e79206f6620746865206e6f6d696e61746f7273206265636f6d65206e6f6e2d6465636f6461626c652c20746865792063616e206265206368696c6c656420696d6d6564696174656c7920766961b8205b6043616c6c3a3a6368696c6c5f6f74686572605d20646973706174636861626c6520627920616e796f6e652e50436f756e746572466f724e6f6d696e61746f7273010010100000000004ac436f756e74657220666f72207468652072656c6174656420636f756e7465642073746f72616765206d6170484d61784e6f6d696e61746f7273436f756e7400001004000c310120546865206d6178696d756d206e6f6d696e61746f7220636f756e74206265666f72652077652073746f7020616c6c6f77696e67206e65772076616c696461746f727320746f206a6f696e2e00d0205768656e20746869732076616c7565206973206e6f74207365742c206e6f206c696d6974732061726520656e666f726365642e2843757272656e744572610000100400105c205468652063757272656e742065726120696e6465782e006501205468697320697320746865206c617465737420706c616e6e6564206572612c20646570656e64696e67206f6e20686f77207468652053657373696f6e2070616c6c657420717565756573207468652076616c696461746f7280207365742c206974206d6967687420626520616374697665206f72206e6f742e2441637469766545726100004d07040010d820546865206163746976652065726120696e666f726d6174696f6e2c20697420686f6c647320696e64657820616e642073746172742e0059012054686520616374697665206572612069732074686520657261206265696e672063757272656e746c792072657761726465642e2056616c696461746f7220736574206f66207468697320657261206d757374206265ac20657175616c20746f205b6053657373696f6e496e746572666163653a3a76616c696461746f7273605d2e5445726173537461727453657373696f6e496e6465780001040510100400103101205468652073657373696f6e20696e646578206174207768696368207468652065726120737461727420666f7220746865206c6173742060484953544f52595f44455054486020657261732e006101204e6f74653a205468697320747261636b7320746865207374617274696e672073657373696f6e2028692e652e2073657373696f6e20696e646578207768656e20657261207374617274206265696e672061637469766529f020666f7220746865206572617320696e20605b43757272656e74457261202d20484953544f52595f44455054482c2043757272656e744572615d602e2c457261735374616b65727301010805055107cc0c0000001878204578706f73757265206f662076616c696461746f72206174206572612e0061012054686973206973206b65796564206669727374206279207468652065726120696e64657820746f20616c6c6f772062756c6b2064656c6574696f6e20616e64207468656e20746865207374617368206163636f756e742e00a82049732069742072656d6f7665642061667465722060484953544f52595f44455054486020657261732e4101204966207374616b657273206861736e2774206265656e20736574206f7220686173206265656e2072656d6f766564207468656e20656d707479206578706f737572652069732072657475726e65642e48457261735374616b657273436c697070656401010805055107cc0c0000002c9820436c6970706564204578706f73757265206f662076616c696461746f72206174206572612e00590120546869732069732073696d696c617220746f205b60457261735374616b657273605d20627574206e756d626572206f66206e6f6d696e61746f7273206578706f736564206973207265647563656420746f20746865dc2060543a3a4d61784e6f6d696e61746f72526577617264656450657256616c696461746f72602062696767657374207374616b6572732e1d0120284e6f74653a20746865206669656c642060746f74616c6020616e6420606f776e60206f6620746865206578706f737572652072656d61696e7320756e6368616e676564292ef42054686973206973207573656420746f206c696d69742074686520692f6f20636f737420666f7220746865206e6f6d696e61746f72207061796f75742e005d012054686973206973206b657965642066697374206279207468652065726120696e64657820746f20616c6c6f772062756c6b2064656c6574696f6e20616e64207468656e20746865207374617368206163636f756e742e00a82049732069742072656d6f7665642061667465722060484953544f52595f44455054486020657261732e4101204966207374616b657273206861736e2774206265656e20736574206f7220686173206265656e2072656d6f766564207468656e20656d707479206578706f737572652069732072657475726e65642e484572617356616c696461746f72507265667301010805055107940800001411012053696d696c617220746f2060457261735374616b657273602c207468697320686f6c64732074686520707265666572656e636573206f662076616c696461746f72732e0061012054686973206973206b65796564206669727374206279207468652065726120696e64657820746f20616c6c6f772062756c6b2064656c6574696f6e20616e64207468656e20746865207374617368206163636f756e742e00a82049732069742072656d6f7665642061667465722060484953544f52595f44455054486020657261732e4c4572617356616c696461746f7252657761726400010405101804000c09012054686520746f74616c2076616c696461746f7220657261207061796f757420666f7220746865206c6173742060484953544f52595f44455054486020657261732e0021012045726173207468617420686176656e27742066696e697368656420796574206f7220686173206265656e2072656d6f76656420646f65736e27742068617665207265776172642e4045726173526577617264506f696e74730101040510550714000000000008ac205265776172647320666f7220746865206c6173742060484953544f52595f44455054486020657261732e250120496620726577617264206861736e2774206265656e20736574206f7220686173206265656e2072656d6f766564207468656e2030207265776172642069732072657475726e65642e3845726173546f74616c5374616b65010104051018400000000000000000000000000000000008ec2054686520746f74616c20616d6f756e74207374616b656420666f7220746865206c6173742060484953544f52595f44455054486020657261732e1d0120496620746f74616c206861736e2774206265656e20736574206f7220686173206265656e2072656d6f766564207468656e2030207374616b652069732072657475726e65642e20466f7263654572610100650704000454204d6f6465206f662065726120666f7263696e672e4c536c6173685265776172644672616374696f6e01009c10000000000cf8205468652070657263656e74616765206f662074686520736c617368207468617420697320646973747269627574656420746f207265706f72746572732e00e4205468652072657374206f662074686520736c61736865642076616c75652069732068616e646c6564206279207468652060536c617368602e4c43616e63656c6564536c6173685061796f757401001840000000000000000000000000000000000815012054686520616d6f756e74206f662063757272656e637920676976656e20746f207265706f7274657273206f66206120736c617368206576656e7420776869636820776173ec2063616e63656c65642062792065787472616f7264696e6172792063697263756d7374616e6365732028652e672e20676f7665726e616e6365292e40556e6170706c696564536c617368657301010405106907040004c420416c6c20756e6170706c69656420736c61736865732074686174206172652071756575656420666f72206c617465722e28426f6e646564457261730100c10304001025012041206d617070696e672066726f6d207374696c6c2d626f6e646564206572617320746f207468652066697273742073657373696f6e20696e646578206f662074686174206572612e00c8204d75737420636f6e7461696e7320696e666f726d6174696f6e20666f72206572617320666f72207468652072616e67653abc20605b6163746976655f657261202d20626f756e64696e675f6475726174696f6e3b206163746976655f6572615d604c56616c696461746f72536c617368496e457261000108050551077107040008450120416c6c20736c617368696e67206576656e7473206f6e2076616c696461746f72732c206d61707065642062792065726120746f20746865206869676865737420736c6173682070726f706f7274696f6e7020616e6420736c6173682076616c7565206f6620746865206572612e4c4e6f6d696e61746f72536c617368496e4572610001080505510718040004610120416c6c20736c617368696e67206576656e7473206f6e206e6f6d696e61746f72732c206d61707065642062792065726120746f20746865206869676865737420736c6173682076616c7565206f6620746865206572612e34536c617368696e675370616e73000104050075070400048c20536c617368696e67207370616e7320666f72207374617368206163636f756e74732e245370616e536c6173680101040561077907800000000000000000000000000000000000000000000000000000000000000000083d01205265636f72647320696e666f726d6174696f6e2061626f757420746865206d6178696d756d20736c617368206f6620612073746173682077697468696e206120736c617368696e67207370616e2cb82061732077656c6c20617320686f77206d7563682072657761726420686173206265656e2070616964206f75742e584561726c69657374556e6170706c696564536c617368000010040004fc20546865206561726c696573742065726120666f72207768696368207765206861766520612070656e64696e672c20756e6170706c69656420736c6173682e5443757272656e74506c616e6e656453657373696f6e01001010000000000ce820546865206c61737420706c616e6e65642073657373696f6e207363686564756c6564206279207468652073657373696f6e2070616c6c65742e0071012054686973206973206261736963616c6c7920696e2073796e632077697468207468652063616c6c20746f205b6070616c6c65745f73657373696f6e3a3a53657373696f6e4d616e616765723a3a6e65775f73657373696f6e605d2e4c4f6666656e64696e6756616c696461746f727301007d07040024690120496e6469636573206f662076616c696461746f727320746861742068617665206f6666656e64656420696e20746865206163746976652065726120616e6420776865746865722074686579206172652063757272656e746c79282064697361626c65642e00690120546869732076616c75652073686f756c642062652061207375706572736574206f662064697361626c65642076616c696461746f72732073696e6365206e6f7420616c6c206f6666656e636573206c65616420746f2074686571012076616c696461746f72206265696e672064697361626c65642028696620746865726520776173206e6f20736c617368292e2054686973206973206e656564656420746f20747261636b207468652070657263656e74616765206f6649012076616c696461746f727320746861742068617665206f6666656e64656420696e207468652063757272656e74206572612c20656e737572696e672061206e65772065726120697320666f72636564206966750120604f6666656e64696e6756616c696461746f72735468726573686f6c646020697320726561636865642e205468652076656320697320616c77617973206b65707420736f7274656420736f20746861742077652063616e2066696e6471012077686574686572206120676976656e2076616c696461746f72206861732070726576696f75736c79206f6666656e646564207573696e672062696e617279207365617263682e204974206765747320636c6561726564207768656e38207468652065726120656e64732e3853746f7261676556657273696f6e01008507040710cc2054727565206966206e6574776f726b20686173206265656e20757067726164656420746f20746869732076657273696f6e2e7c2053746f726167652076657273696f6e206f66207468652070616c6c65742e00a020546869732069732073657420746f2076372e302e3020666f72206e6577206e6574776f726b732e384368696c6c5468726573686f6c640000550504000c510120546865207468726573686f6c6420666f72207768656e2075736572732063616e2073746172742063616c6c696e6720606368696c6c5f6f746865726020666f72206f746865722076616c696461746f7273202f5901206e6f6d696e61746f72732e20546865207468726573686f6c6420697320636f6d706172656420746f207468652061637475616c206e756d626572206f662076616c696461746f7273202f206e6f6d696e61746f72732901202860436f756e74466f722a602920696e207468652073797374656d20636f6d706172656420746f2074686520636f6e66696775726564206d61782028604d61782a436f756e7460292e014905019018384d61784e6f6d696e6174696f6e7310101000000004b4204d6178696d756d206e756d626572206f66206e6f6d696e6174696f6e7320706572206e6f6d696e61746f722e3853657373696f6e735065724572611010060000000470204e756d626572206f662073657373696f6e7320706572206572612e3c426f6e64696e674475726174696f6e10107000000004e4204e756d626572206f6620657261732074686174207374616b65642066756e6473206d7573742072656d61696e20626f6e64656420666f722e48536c61736844656665724475726174696f6e10106f000000100101204e756d626572206f662065726173207468617420736c6173686573206172652064656665727265642062792c20616674657220636f6d7075746174696f6e2e000d0120546869732073686f756c64206265206c657373207468616e2074686520626f6e64696e67206475726174696f6e2e2053657420746f203020696620736c617368657315012073686f756c64206265206170706c69656420696d6d6564696174656c792c20776974686f7574206f70706f7274756e69747920666f7220696e74657276656e74696f6e2e804d61784e6f6d696e61746f72526577617264656450657256616c696461746f7210100001000010f820546865206d6178696d756d206e756d626572206f66206e6f6d696e61746f727320726577617264656420666f7220656163682076616c696461746f722e00510120466f7220656163682076616c696461746f72206f6e6c79207468652060244d61784e6f6d696e61746f72526577617264656450657256616c696461746f72602062696767657374207374616b6572732063616e390120636c61696d207468656972207265776172642e2054686973207573656420746f206c696d69742074686520692f6f20636f737420666f7220746865206e6f6d696e61746f72207061796f75742e484d6178556e6c6f636b696e674368756e6b73101020000000084d0120546865206d6178696d756d206e756d626572206f662060756e6c6f636b696e6760206368756e6b732061205b605374616b696e674c6564676572605d2063616e20686176652e204566666563746976656c79f82064657465726d696e657320686f77206d616e7920756e6971756520657261732061207374616b6572206d617920626520756e626f6e64696e6720696e2e018907081c53657373696f6e011c53657373696f6e1c2856616c696461746f7273010051050400047c205468652063757272656e7420736574206f662076616c696461746f72732e3043757272656e74496e646578010010100000000004782043757272656e7420696e646578206f66207468652073657373696f6e2e345175657565644368616e676564010088040008390120547275652069662074686520756e6465726c79696e672065636f6e6f6d6963206964656e746974696573206f7220776569676874696e6720626568696e64207468652076616c696461746f7273a420686173206368616e67656420696e20746865207175657565642076616c696461746f72207365742e285175657565644b65797301008d070400083d012054686520717565756564206b65797320666f7220746865206e6578742073657373696f6e2e205768656e20746865206e6578742073657373696f6e20626567696e732c207468657365206b657973e02077696c6c206265207573656420746f2064657465726d696e65207468652076616c696461746f7227732073657373696f6e206b6579732e4844697361626c656456616c696461746f7273010059050400148020496e6469636573206f662064697361626c65642076616c696461746f72732e003d01205468652076656320697320616c77617973206b65707420736f7274656420736f20746861742077652063616e2066696e642077686574686572206120676976656e2076616c696461746f722069733d012064697361626c6564207573696e672062696e617279207365617263682e204974206765747320636c6561726564207768656e20606f6e5f73657373696f6e5f656e64696e67602072657475726e73642061206e657720736574206f66206964656e7469746965732e204e6578744b657973000104050071050400049c20546865206e6578742073657373696f6e206b65797320666f7220612076616c696461746f722e204b65794f776e657200010405950700040004090120546865206f776e6572206f662061206b65792e20546865206b65792069732074686520604b657954797065496460202b2074686520656e636f646564206b65792e016d0501a000019d070928486973746f726963616c0128486973746f726963616c0848486973746f726963616c53657373696f6e730001040510a1070400045d01204d617070696e672066726f6d20686973746f726963616c2073657373696f6e20696e646963657320746f2073657373696f6e2d6461746120726f6f74206861736820616e642076616c696461746f7220636f756e742e2c53746f72656452616e67650000c503040004e4205468652072616e6765206f6620686973746f726963616c2073657373696f6e732077652073746f72652e205b66697273742c206c61737429000000000a1c4772616e647061011c4772616e647061181453746174650100a50704000490205374617465206f66207468652063757272656e7420617574686f72697479207365742e3450656e64696e674368616e67650000a907040004c42050656e64696e67206368616e67653a20287369676e616c65642061742c207363686564756c6564206368616e6765292e284e657874466f72636564000010040004bc206e65787420626c6f636b206e756d6265722077686572652077652063616e20666f7263652061206368616e67652e1c5374616c6c65640000c5030400049020607472756560206966207765206172652063757272656e746c79207374616c6c65642e3043757272656e745365744964010020200000000000000000085d0120546865206e756d626572206f66206368616e6765732028626f746820696e207465726d73206f66206b65797320616e6420756e6465726c79696e672065636f6e6f6d696320726573706f6e736962696c697469657329c420696e20746865202273657422206f66204772616e6470612076616c696461746f72732066726f6d2067656e657369732e30536574496453657373696f6e00010405201004001059012041206d617070696e672066726f6d206772616e6470612073657420494420746f2074686520696e646578206f6620746865202a6d6f737420726563656e742a2073657373696f6e20666f722077686963682069747368206d656d62657273207765726520726573706f6e7369626c652e00b82054574f582d4e4f54453a2060536574496460206973206e6f7420756e646572207573657220636f6e74726f6c2e01790501a404384d6178417574686f7269746965731010a0860100045c204d617820417574686f72697469657320696e2075736501b1070b48417574686f72697479446973636f766572790148417574686f72697479446973636f7665727908104b6579730100b5070400048c204b657973206f66207468652063757272656e7420617574686f72697479207365742e204e6578744b6579730100b50704000480204b657973206f6620746865206e65787420617574686f72697479207365742e000000000c20496d4f6e6c696e650120496d4f6e6c696e651038486561727462656174416674657201001010000000002c1d012054686520626c6f636b206e756d6265722061667465722077686963682069742773206f6b20746f2073656e64206865617274626561747320696e207468652063757272656e74242073657373696f6e2e0025012041742074686520626567696e6e696e67206f6620656163682073657373696f6e20776520736574207468697320746f20612076616c756520746861742073686f756c642066616c6c350120726f7567686c7920696e20746865206d6964646c65206f66207468652073657373696f6e206475726174696f6e2e20546865206964656120697320746f206669727374207761697420666f721901207468652076616c696461746f727320746f2070726f64756365206120626c6f636b20696e207468652063757272656e742073657373696f6e2c20736f207468617420746865a820686561727462656174206c61746572206f6e2077696c6c206e6f74206265206e65636573736172792e00390120546869732076616c75652077696c6c206f6e6c79206265207573656420617320612066616c6c6261636b206966207765206661696c20746f2067657420612070726f7065722073657373696f6e2d012070726f677265737320657374696d6174652066726f6d20604e65787453657373696f6e526f746174696f6e602c2061732074686f736520657374696d617465732073686f756c642062650101206d6f7265206163637572617465207468656e207468652076616c75652077652063616c63756c61746520666f7220604865617274626561744166746572602e104b6579730100bd07040004d0205468652063757272656e7420736574206f66206b6579732074686174206d61792069737375652061206865617274626561742e485265636569766564486561727462656174730001080505c503c5070400083d0120466f7220656163682073657373696f6e20696e6465782c207765206b6565702061206d617070696e67206f66206053657373696f6e496e6465786020616e64206041757468496e6465786020746fb02060577261707065724f70617175653c426f756e6465644f70617175654e6574776f726b53746174653e602e38417574686f726564426c6f636b730101080505510710100000000008150120466f7220656163682073657373696f6e20696e6465782c207765206b6565702061206d617070696e67206f66206056616c696461746f7249643c543e6020746f20746865c8206e756d626572206f6620626c6f636b7320617574686f7265642062792074686520676976656e20617574686f726974792e01a90501b80440556e7369676e65645072696f726974792020ffffffffffffffff10f0204120636f6e66696775726174696f6e20666f722062617365207072696f72697479206f6620756e7369676e6564207472616e73616374696f6e732e0015012054686973206973206578706f73656420736f20746861742069742063616e2062652074756e656420666f7220706172746963756c61722072756e74696d652c207768656eb4206d756c7469706c652070616c6c6574732073656e6420756e7369676e6564207472616e73616374696f6e732e01d9070d204f6666656e63657301204f6666656e6365730c1c5265706f7274730001040524dd07040004490120546865207072696d61727920737472756374757265207468617420686f6c647320616c6c206f6666656e6365207265636f726473206b65796564206279207265706f7274206964656e746966696572732e58436f6e63757272656e745265706f727473496e6465780101080505e107bd030400042901204120766563746f72206f66207265706f727473206f66207468652073616d65206b696e6420746861742068617070656e6564206174207468652073616d652074696d6520736c6f742e485265706f72747342794b696e64496e64657801010405e028040018110120456e756d65726174657320616c6c207265706f727473206f662061206b696e6420616c6f6e672077697468207468652074696d6520746865792068617070656e65642e00bc20416c6c207265706f7274732061726520736f72746564206279207468652074696d65206f66206f6666656e63652e004901204e6f74652074686174207468652061637475616c2074797065206f662074686973206d617070696e6720697320605665633c75383e602c207468697320697320626563617573652076616c756573206f66690120646966666572656e7420747970657320617265206e6f7420737570706f7274656420617420746865206d6f6d656e7420736f2077652061726520646f696e6720746865206d616e75616c2073657269616c697a6174696f6e2e0001dc00000e6052616e646f6d6e657373436f6c6c656374697665466c6970016052616e646f6d6e657373436f6c6c656374697665466c6970043852616e646f6d4d6174657269616c0100e50704000c610120536572696573206f6620626c6f636b20686561646572732066726f6d20746865206c61737420383120626c6f636b73207468617420616374732061732072616e646f6d2073656564206d6174657269616c2e2054686973610120697320617272616e67656420617320612072696e672062756666657220776974682060626c6f636b5f6e756d626572202520383160206265696e672074686520696e64657820696e746f20746865206056656360206f664420746865206f6c6465737420686173682e000000000f20426167734c6973740120426167734c6973740c244c6973744e6f6465730001040500e90704000c8020412073696e676c65206e6f64652c2077697468696e20736f6d65206261672e000501204e6f6465732073746f7265206c696e6b7320666f727761726420616e64206261636b2077697468696e207468656972207265737065637469766520626167732e4c436f756e746572466f724c6973744e6f646573010010100000000004ac436f756e74657220666f72207468652072656c6174656420636f756e7465642073746f72616765206d6170204c697374426167730001040520ed0704000c642041206261672073746f72656420696e2073746f726167652e0019012053746f7265732061206042616760207374727563742c2077686963682073746f726573206865616420616e64207461696c20706f696e7465727320746f20697473656c662e01c90501e404344261675468726573686f6c6473f80919210300407a10f35a00006a70ccd4a96000009ef3397fbc660000a907ccd5306d00003d9a67fb0c740000a9bfa275577b0000a6fdf73217830000034f5d91538b0000132445651494000078081001629d00000302f63c45a70000392e6f7fc7b10000f59c23c6f2bc00004ae76aafd1c80000598a64846fd50000129fb243d8e200003f22e1ac18f1000033a4844c3e000100e2e51b895710010076a2c0b0732101006789b407a3330100793ed8d7f646010078131b81815b01000c1cf38a567101004437eeb68a8801009eb56d1434a10100335e9f156abb010067c3c7a545d701003218f340e1f40100de0b230d59140200699c11f5ca350200ad50a2c4565902009ae41c471e7f0200d0244e6745a70200f984ad51f2d10200ace7a7984dff0200a118325b822f0300ffa4c76dbe620300580bfd8532990300a9afce6812d30300109ad81b95100400d9caa519f551040038df488970970400bee1727949e10400cc73401fc62f0500b304f91831830500828bffb4d9db05001235383d143a0600a5b42a473a9e060036662d09ab080700f73aeab4cb790700b87e93d707f20700ffec23c0d1710800b84b0beca2f90800c9dcae7afc89090091752ba867230a0064f1cd4f76c60a003609be76c3730b0078655fdff32b0c00a407f5a5b6ef0c0052f61be7c5bf0d00da71bb70e79c0e000de9127eed870f001477987fb7811000ebee65ef328b11001269fe325ca5120033f8428b3fd113008ba57a13fa0f15001b2b60d0ba6216000d1d37d0c3ca17006c64fa5c6b4919002622c7411de01a00045bb9245c901c00233d83f6c25b1e00c8771c79064420003013fddef64a2200aa8b6e848172240082c096c4b2bc260016a3faebb72b29008296524ae1c12b00a636a865a4812e00d0e2d4509e6d31009c0a9a2796883400e4faafb27fd53700e6e64d367e573b000e4bd66de7113f0088b17db746084300b07def72603e470034de249635b84b00d48bd57b077a5000d0bd20ef5b885500b8f0467801e85a0010f88aee139e60003892925301b066009c95e4fc8e236d00b4126d10dffe730028b43e5976487b00a08a1c7a42078300b09ab083a0428b002846b2f463029400c861a42ade4e9d0050d23d4ae630a700805101a7e1b1b10038e501b2ccdbbc002016527844b9c800388924ba9055d50070ca35a4aebce200805fb1355cfbf0008035685d241f0001a0c3dcd96b361001d07862e87e50210160e852d09f7d330190662c5816cf460110274c3340575b01804be277a22971013082b92dfc5a880180d276075a01a101b0f511592b34bb014031745f580cd701802f6cee59a4f40140ff799b521814026075607d2986350260fde999a60d590200e5e71c91d07e02c0df2575cff2a602a07fd975899ad102a067009d4cf0fe0220dc29a1321f2f0320ff526b0a5562038088caa383c29803e05683fb5c9bd203401dd75d9516100400317e39a06e5104c0b071129de1960480b48c9192b1e00480e8124aad242f05c007ca7082858205007c13c45623db0540836fe869523906c0700f81466c9d0640f09c5017d00707c0e624b301e37807c0332ac78510f10780074ca1e4ca700800d5a9eb8c8bf80800a849588ed3880900804254142c220a80a25170e826c50a00e8d5fafc5e720b801df64e00792a0c80d4fe64f923ee0c006dd038ee19be0d001e90a494209b0e0010bf570e0a860f00da6a9db0b57f1000bf64afd810891100bb5b60cd17a31200f963f3aed6ce1300d5f004766a0d1500e099770202601600103d663bdfc71700de3e2d4158461900ecdbadb2d8dc1a0045c70007e38c1c00b8bde0fc11581e00ba5c2a211a402000407de46dcb462200dea55b03136e2400aaf1f3fcfcb7260014226f63b62629006492803e8fbc2b008486a6c7fc7b2e002cf05fc09b673100da63f7ed32823400f0b13fbdb5ce3700f291c41047503b00422a1a3c3c0a3f002c24212f20004300ac9342d4b6354700cc6ed7a400af4b00c4d022773e70500020017d89f57d5500f86387cef3dc5a008c4c7f7e54926000206207f284a36600cc1e05cb49166d00b42a7a70c4f07300d43a90e278397b0038f461ec53f78200a07264b9b1318b0048c9b3d464f09300007fe998bd3b9d0010058f17921ca70000dfaf7f469cb100e80c880bd6c4bc0058bdcb7ddca0c80038d18d37a03bd50030d55bf01ca1e200704ac01a0fdef0ffffffffffffffffacd020546865206c697374206f66207468726573686f6c64732073657061726174696e672074686520766172696f757320626167732e00490120496473206172652073657061726174656420696e746f20756e736f727465642062616773206163636f7264696e6720746f2074686569722073636f72652e205468697320737065636966696573207468656101207468726573686f6c64732073657061726174696e672074686520626167732e20416e20696427732062616720697320746865206c6172676573742062616720666f722077686963682074686520696427732073636f7265b8206973206c657373207468616e206f7220657175616c20746f20697473207570706572207468726573686f6c642e006501205768656e20696473206172652069746572617465642c2068696768657220626167732061726520697465726174656420636f6d706c6574656c79206265666f7265206c6f77657220626167732e2054686973206d65616e735901207468617420697465726174696f6e206973205f73656d692d736f727465645f3a20696473206f66206869676865722073636f72652074656e6420746f20636f6d65206265666f726520696473206f66206c6f7765722d012073636f72652c206275742070656572206964732077697468696e206120706172746963756c6172206261672061726520736f7274656420696e20696e73657274696f6e206f726465722e006820232045787072657373696e672074686520636f6e7374616e74004d01205468697320636f6e7374616e74206d75737420626520736f7274656420696e207374726963746c7920696e6372656173696e67206f726465722e204475706c6963617465206974656d7320617265206e6f742c207065726d69747465642e00410120546865726520697320616e20696d706c696564207570706572206c696d6974206f66206053636f72653a3a4d4158603b20746861742076616c756520646f6573206e6f74206e65656420746f2062652101207370656369666965642077697468696e20746865206261672e20466f7220616e792074776f207468726573686f6c64206c697374732c206966206f6e6520656e647320776974683101206053636f72653a3a4d4158602c20746865206f74686572206f6e6520646f6573206e6f742c20616e64207468657920617265206f746865727769736520657175616c2c207468652074776f7c206c697374732077696c6c20626568617665206964656e746963616c6c792e003820232043616c63756c6174696f6e005501204974206973207265636f6d6d656e64656420746f2067656e65726174652074686520736574206f66207468726573686f6c647320696e20612067656f6d6574726963207365726965732c2073756368207468617441012074686572652065786973747320736f6d6520636f6e7374616e7420726174696f2073756368207468617420607468726573686f6c645b6b202b20315d203d3d20287468726573686f6c645b6b5d202ad020636f6e7374616e745f726174696f292e6d6178287468726573686f6c645b6b5d202b2031296020666f7220616c6c20606b602e005901205468652068656c7065727320696e2074686520602f7574696c732f6672616d652f67656e65726174652d6261677360206d6f64756c652063616e2073696d706c69667920746869732063616c63756c6174696f6e2e002c2023204578616d706c6573005101202d20496620604261675468726573686f6c64733a3a67657428292e69735f656d7074792829602c207468656e20616c6c20696473206172652070757420696e746f207468652073616d65206261672c20616e64b0202020697465726174696f6e206973207374726963746c7920696e20696e73657274696f6e206f726465722e6101202d20496620604261675468726573686f6c64733a3a67657428292e6c656e2829203d3d203634602c20616e6420746865207468726573686f6c6473206172652064657465726d696e6564206163636f7264696e6720746f11012020207468652070726f63656475726520676976656e2061626f76652c207468656e2074686520636f6e7374616e7420726174696f20697320657175616c20746f20322e6501202d20496620604261675468726573686f6c64733a3a67657428292e6c656e2829203d3d20323030602c20616e6420746865207468726573686f6c6473206172652064657465726d696e6564206163636f7264696e6720746f59012020207468652070726f63656475726520676976656e2061626f76652c207468656e2074686520636f6e7374616e7420726174696f20697320617070726f78696d6174656c7920657175616c20746f20312e3234382e6101202d20496620746865207468726573686f6c64206c69737420626567696e7320605b312c20322c20332c202e2e2e5d602c207468656e20616e20696420776974682073636f72652030206f7220312077696c6c2066616c6cf0202020696e746f2062616720302c20616e20696420776974682073636f726520322077696c6c2066616c6c20696e746f2062616720312c206574632e00302023204d6967726174696f6e00610120496e20746865206576656e7420746861742074686973206c6973742065766572206368616e6765732c206120636f7079206f6620746865206f6c642062616773206c697374206d7573742062652072657461696e65642e5d012057697468207468617420604c6973743a3a6d696772617465602063616e2062652063616c6c65642c2077686963682077696c6c20706572666f726d2074686520617070726f707269617465206d6967726174696f6e2e01f107101c56657374696e67011c56657374696e67081c56657374696e670001040200f907040004d820496e666f726d6174696f6e20726567617264696e67207468652076657374696e67206f66206120676976656e206163636f756e742e3853746f7261676556657273696f6e0100010804000c7c2053746f726167652076657273696f6e206f66207468652070616c6c65742e003101204e6577206e6574776f726b732073746172742077697468206c61746573742076657273696f6e2c2061732064657465726d696e6564206279207468652067656e65736973206275696c642e01cd0501e808444d696e5665737465645472616e736665721840aa821bce26000000000000000000000004e820546865206d696e696d756d20616d6f756e74207472616e7366657272656420746f2063616c6c20607665737465645f7472616e73666572602e4c4d617856657374696e675363686564756c657310101c0000000001050811204d756c746973696701204d756c746973696708244d756c746973696773000108050209080d08040004942054686520736574206f66206f70656e206d756c7469736967206f7065726174696f6e732e1443616c6c730001040604110804000001d50501ec0c2c4465706f736974426173651840d042de1300000000000000000000000018590120546865206261736520616d6f756e74206f662063757272656e6379206e656564656420746f207265736572766520666f72206372656174696e672061206d756c746973696720657865637574696f6e206f7220746f842073746f726520612064697370617463682063616c6c20666f72206c617465722e00010120546869732069732068656c6420666f7220616e206164646974696f6e616c2073746f72616765206974656d2077686f73652076616c75652073697a652069733101206034202b2073697a656f662828426c6f636b4e756d6265722c2042616c616e63652c204163636f756e74496429296020627974657320616e642077686f7365206b65792073697a652069738020603332202b2073697a656f66284163636f756e74496429602062797465732e344465706f736974466163746f72184040cd2d030000000000000000000000000c55012054686520616d6f756e74206f662063757272656e6379206e65656465642070657220756e6974207468726573686f6c64207768656e206372656174696e672061206d756c746973696720657865637574696f6e2e00250120546869732069732068656c6420666f7220616464696e67203332206279746573206d6f726520696e746f2061207072652d6578697374696e672073746f726167652076616c75652e384d61785369676e61746f726965730d0408640004ec20546865206d6178696d756d20616d6f756e74206f66207369676e61746f7269657320616c6c6f77656420696e20746865206d756c74697369672e011508121c436f756e63696c011c436f756e63696c24145374616765010019082402010000000000000004742043757272656e7420636f756e63696c20766f74696e6720737461676538436f756e63696c4d656d6265727301002d08040004602043757272656e7420636f756e63696c206d656d626572732843616e64696461746573000104022039080400041101204d6170206f6620616c6c2063616e64696461746573207468617420657665722063616e6469646174656420616e6420686176656e277420756e7374616b65207965742e50416e6e6f756e63656d656e74506572696f644e72010020200000000000000000085d0120496e646578206f66207468652063757272656e742063616e64696461637920706572696f642e20497420697320696e6372656d656e74656420657665727974696d6520616e6e6f756e63656d656e7420706572696f6420207374617274732e18427564676574010018400000000000000000000000000000000004c82042756467657420666f722074686520636f756e63696c277320656c6563746564206d656d6265727320726577617264732e484e6578745265776172645061796d656e7473010010100000000004290120546865206e65787420626c6f636b20696e2077686963682074686520656c656374656420636f756e63696c206d656d62657220726577617264732077696c6c2062652070617965642e404e657874427564676574526566696c6c010010100000000004d820546865206e65787420626c6f636b20696e20776869636820746865206275646765742077696c6c20626520696e637265617365642e3c427564676574496e6372656d656e74010018400000000000000000000000000000000004d420416d6f756e74206f662062616c616e636520746f20626520726566696c6c65642065766572792062756467657420706572696f643c436f756e63696c6f725265776172640100184000000000000000000000000000000000046c20436f756e63696c6f72207265776172642070657220626c6f636b01e10501f424684d696e4e756d6265724f66457874726143616e64696461746573101000000000080901204d696e696d756d206e756d626572206f662065787472612063616e64696461746573206e656564656420666f72207468652076616c696420656c656374696f6e2e2d01204e756d626572206f6620746f74616c2063616e6469646174657320697320657175616c20746f20636f756e63696c2073697a6520706c75732065787472612063616e646964617465732e2c436f756e63696c53697a65101003000000045420436f756e63696c206d656d62657220636f756e74444d696e43616e6469646174655374616b651840a010a012d3eb050000000000000000000490204d696e696d756d207374616b652063616e6469646174652068617320746f206c6f636b60416e6e6f756e63696e67506572696f644475726174696f6e101040fa01000474204475726174696f6e206f6620616e6e6f6e63696e6720706572696f644849646c65506572696f644475726174696f6e1010010000000460204475726174696f6e206f662069646c6520706572696f6464456c65637465644d656d626572526577617264506572696f6410104038000004a020496e74657276616c20666f72206175746f6d6174696320726577617264207061796d656e74732e48427564676574526566696c6c506572696f6410104038000004ac20496e74657276616c206265747765656e206175746f6d617469632062756467657420726566696c6c732e3c43616e6469646163794c6f636b496409042063616e6469646163048c204578706f72747320636f6e7374202d2063616e646964616379206c6f636b2069642e3c436f756e63696c6f724c6f636b4964090420636f756e63696c6f048c204578706f72747320636f6e7374202d20636f756e63696c6f72206c6f636b2069642e013d0813285265666572656e64756d014c496e7374616e6365315265666572656e64756d0c14537461676501004108040004682043757272656e74207265666572656e64756d2073746167652e14566f74657301010402005108e400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018510120566f746573206361737420696e20746865207265666572656e64756d2e2041206e6577207265636f726420697320616464656420746f2074686973206d6170207768656e20612075736572206361737473206134207365616c656420766f74652e0101204974206973206d6f646966696564207768656e206120757365722072657665616c732074686520766f7465277320636f6d6d69746d656e742070726f6f662e55012041207265636f72642069732066696e616c6c792072656d6f766564207768656e20746865207573657220756e7374616b65732c2077686963682063616e2068617070656e20647572696e67206120766f74696e679c207374616765206f72206166746572207468652063757272656e74206379636c6520656e64732ef82041207374616b6520666f72206120766f74652063616e2062652072657573656420696e20667574757265207265666572656e64756d206379636c65732e404163636f756e74734f707465644f75740101040200740004f4204163636f756e74732074686174207065726d616e656e746c79206f70746564206f7574206f6620766f74696e6720696e207265666572656e64756d2e01e50501fc14344d617853616c744c656e67746820202000000000000000085d01204d6178696d756d206c656e677468206f6620766f746520636f6d6d69746d656e742073616c742e20557365206c656e677468207468617420656e737572657320756e697175656e65737320666f722068617368696e675020652e672e207374643a3a7536343a3a4d41582e44566f746553746167654475726174696f6e1010c0a8000004b0204475726174696f6e206f6620766f74696e6720737461676520286e756d626572206f6620626c6f636b73294c52657665616c53746167654475726174696f6e1010c0a8000004bc204475726174696f6e206f662072657665616c696e6720737461676520286e756d626572206f6620626c6f636b7329304d696e696d756d5374616b651840a41a130d8401000000000000000000000480204d696e696d756d207374616b65206e656564656420666f7220766f74696e67505374616b696e6748616e646c65724c6f636b4964090420766f74696e67202004a4204578706f72747320636f6e7374202d207374616b696e672068616e646c6572206c6f636b2069642e015508141c4d656d6265727301284d656d6265727368697020304e6578744d656d6265724964010020200000000000000000084501204d656d626572496420746f2061737369676e20746f206e657874206d656d626572207468617420697320616464656420746f207468652072656769737472792c20616e6420697320616c736f20746865e820746f74616c206e756d626572206f66206d656d6265727320637265617465642e204d656d626572496473207374617274206174205a65726f2e384d656d626572736869704279496400010402205908040004d0204d617070696e67206f66206d656d626572277320696420746f207468656972206d656d626572736869702070726f66696c652e504d656d6265724964427948616e646c6548617368010104022420200000000000000000040501205265676973746572656420756e697175652068616e646c6573206861736820616e64207468656972206d617070696e6720746f207468656972206f776e65722e2c526566657272616c437574010008040004410120526566657272616c206375742070657263656e74206f6620746865206d656d626572736869702066656520746f2072656365697665206f6e20627579696e6720746865206d656d626572736869702e3c4d656d62657273686970507269636501001840aa821bce26000000000000000000000004682043757272656e74206d656d626572736869702070726963652e58496e697469616c496e7669746174696f6e436f756e74010010100000000004e820496e697469616c20696e7669746174696f6e20636f756e7420666f7220746865206e65776c7920626f75676874206d656d626572736869702e60496e697469616c496e7669746174696f6e42616c616e63650100184034c10d6713000000000000000000000004cc20496e697469616c20696e7669746174696f6e2062616c616e636520666f722074686520696e7669746564206d656d6265722e705374616b696e674163636f756e7449644d656d62657253746174757301010402005d082400000000000000000004250120446f75626c65206f662061207374616b696e67206163636f756e7420696420616e64206d656d62657220696420746f2074686520636f6e6669726d6174696f6e207374617475732e01e905010d01185844656661756c744d656d6265727368697050726963651840aa821bce26000000000000000000000004a0204578706f72747320636f6e7374202d2064656661756c74206d656d62657273686970206665652e64526566657272616c4375744d6178696d756d50657263656e74080432044901204578706f72747320636f6e7374202d206d6178696d756d2070657263656e742076616c7565206f6620746865206d656d626572736869702066656520666f722074686520726566657272616c206375742e7c44656661756c74496e697469616c496e7669746174696f6e42616c616e6365184034c10d6713000000000000000000000004e0204578706f72747320636f6e7374202d2064656661756c742062616c616e636520666f722074686520696e7669746564206d656d6265722e3843616e6469646174655374616b651840a41a130d84010000000000000000000004f8204578706f72747320636f6e7374202d205374616b65206e656564656420746f2063616e646964617465206173207374616b696e67206163636f756e742e4c496e76697465644d656d6265724c6f636b4964090420696e766974656d6204a0204578706f72747320636f6e7374202d20696e7669746564206d656d626572206c6f636b2069642e585374616b696e6743616e6469646174654c6f636b4964090420626f756e6473746104ac204578706f72747320636f6e7374202d207374616b696e672063616e646964617465206c6f636b2069642e0161081514466f72756d0124466f72756d5f315f31203043617465676f727942794964010104022065083d010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004cc204d61702063617465676f7279206964656e74696669657220746f20636f72726573706f6e64696e672063617465676f72792e384e65787443617465676f727949640100202000000000000000000411012043617465676f7279206964656e7469666965722076616c756520746f206265207573656420666f7220746865206e6578742043617465676f727920637265617465642e3c43617465676f7279436f756e746572010020200000000000000000049420436f756e74657220666f7220616c6c206578697374696e672063617465676f726965732e2854687265616442794964010108020261036d08a4000000000000000000000000000000000000000000000000000000000000000000000000000000000004bc204d617020746872656164206964656e74696669657220746f20636f72726573706f6e64696e67207468726561642e304e657874546872656164496401002020000000000000000004090120546872656164206964656e7469666965722076616c756520746f206265207573656420666f72206e6578742054687265616420696e20746872656164427949642e284e657874506f7374496401002020000000000000000004f020506f7374206964656e7469666965722076616c756520746f206265207573656420666f7220666f72206e65787420706f737420637265617465642e4c43617465676f727942794d6f64657261746f720101080202610374000480204d6f64657261746f722073657420666f7220656163682043617465676f727920506f737442794964010108020261037108150100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004ac204d617020706f7374206964656e74696669657220746f20636f72726573706f6e64696e6720706f73742e01ed05013901102c506f73744465706f736974184083890d730000000000000000000000000838204578706f72747320636f6e737480204465706f736974206e656564656420746f20637265617465206120706f7374345468726561644465706f736974184099b06c6f0000000000000000000000000488204465706f736974206e656564656420746f20637265617465206120746872656164804d617844697265637453756263617465676f72696573496e43617465676f7279202005000000000000000484204d617844697265637453756263617465676f72696573496e43617465676f7279484d6178546f74616c43617465676f7269657320202800000000000000044c204d6178546f74616c43617465676f726965730175081630436f6e737469747574696f6e0130436f6e737469747574696f6e0430436f6e737469747574696f6e010079088000000000000000000000000000000000000000000000000000000000000000000001f10501550100001718426f756e74790118426f756e74791420426f756e7469657301010402207d087d010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044020426f756e74792073746f726167652e4c426f756e7479436f6e747269627574696f6e7301010802029108950880000000000000000000000000000000005084c06c000000000000000000000000044d0120446f75626c65206d617020666f7220626f756e74792066756e64696e672e2049742073746f7265732061206d656d626572206f7220636f756e63696c2066756e64696e6720666f7220626f756e746965732e2c426f756e7479436f756e74010010100000000004b820436f756e74206f6620616c6c20626f756e7469657320746861742068617665206265656e20637265617465642e1c456e74726965730001080202610399080400046020576f726b20656e7472792073746f72616765206d61702e28456e747279436f756e74010010100000000004c820436f756e74206f6620616c6c20776f726b20656e747269657320746861742068617665206265656e20637265617465642e01f505015901105c436c6f736564436f6e747261637453697a654c696d6974101032000000044d01204578706f72747320636f6e7374202d206d617820776f726b20656e747279206e756d62657220666f72206120636c6f736564206173737572616e6365207479706520636f6e747261637420626f756e74792e4c4d696e576f726b456e7472616e745374616b651840958ed36d00000000000000000000000004d4204578706f72747320636f6e7374202d206d696e20776f726b20656e7472616e74207374616b6520666f72206120626f756e74792e6846756e6465725374617465426c6f6174426f6e64416d6f756e7418405084c06c00000000000000000000000004f4204578706f72747320636f6e7374202d2066756e64657220737461746520626c6f617420626f6e6420616d6f756e7420666f72206120626f756e74792e6c43726561746f725374617465426c6f6174426f6e64416d6f756e7418400e16e46c00000000000000000000000004f8204578706f72747320636f6e7374202d2063726561746f7220737461746520626c6f617420626f6e6420616d6f756e7420666f72206120626f756e74792e019d0818404a6f7973747265616d5574696c69747901404a6f7973747265616d5574696c6974790001f905017d010001a108191c436f6e74656e74011c436f6e74656e74842c4368616e6e656c4279496401010402209101a10100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024566964656f427949640101040220a5086c00000000000000000000000000000000000000000000000000000000344e6578744368616e6e656c4964010020200000000000000000002c4e657874566964656f496401002020000000000000000000384e6578745472616e73666572496401002020000000000000000000484e65787443757261746f7247726f75704964010020200000000000000000004043757261746f7247726f7570427949640101040220d1080c0000000028436f6d6d69746d656e7401002480000000000000000000000000000000000000000000000000000000000000000000684368616e6e656c5374617465426c6f6174426f6e6456616c756501001840000000000000000000000000000000000425012054686520737461746520626c6f617420626f6e6420666f7220746865206368616e6e656c202868656c70732070726576656e74696e672074686520737461746520626c6f6174292e60566964656f5374617465426c6f6174426f6e6456616c7565010018400000000000000000000000000000000004190154686520737461746520626c6f617420626f6e6420666f722074686520766964656f202868656c70732070726576656e74696e672074686520737461746520626c6f6174292e444d6178436173686f7574416c6c6f776564010018400000000000000000000000000000000000444d696e436173686f7574416c6c6f776564010018400000000000000000000000000000000000584368616e6e656c436173686f757473456e61626c6564010088040000484d696e41756374696f6e4475726174696f6e01001010000000000454204d696e2061756374696f6e206475726174696f6e484d617841756374696f6e4475726174696f6e01001010000000000454204d61782061756374696f6e206475726174696f6e644d696e41756374696f6e457874656e73696f6e506572696f6401001010000000000474204d696e2061756374696f6e20657874656e73696f6e20706572696f64644d617841756374696f6e457874656e73696f6e506572696f6401001010000000000474204d61782061756374696f6e20657874656e73696f6e20706572696f64484d696e4269644c6f636b4475726174696f6e01001010000000000458204d696e20626964206c6f636b206475726174696f6e484d61784269644c6f636b4475726174696f6e01001010000000000458204d617820626964206c6f636b206475726174696f6e404d696e5374617274696e67507269636501001840000000000000000000000000000000000468204d696e2061756374696f6e2073746172696e67207072696365404d61785374617274696e67507269636501001840000000000000000000000000000000000468204d61782061756374696f6e2073746172696e67207072696365444d696e43726561746f72526f79616c747901009c1000000000047c204d696e2063726561746f7220726f79616c74792070657263656e74616765444d617843726561746f72526f79616c747901009c1000000000047c204d61782063726561746f7220726f79616c74792070657263656e74616765284d696e4269645374657001001840000000000000000000000000000000000454204d696e2061756374696f6e206269642073746570284d61784269645374657001001840000000000000000000000000000000000454204d61782061756374696f6e20626964207374657054506c617466726f6d46656550657263656e7461676501009c1000000000046020506c6174666f726d206665652070657263656e746167655c41756374696f6e53746172747341744d617844656c7461010010100000000004b8204d61782064656c7461206265747765656e2063757272656e7420626c6f636b20616e6420737461727473206174784f70656e41756374696f6e4269644279566964656f416e644d656d62657201010802026103ed087000000000000000000000000000000000000000000000000000000000045c204269647320666f72206f70656e2061756374696f6e7354476c6f62616c4461696c794e6674436f756e7465720100e10130000000000000000000000000046820476c6f62616c206461696c79204e465420636f756e7465722e58476c6f62616c5765656b6c794e6674436f756e7465720100e10130000000000000000000000000046c20476c6f62616c207765656b6c79204e465420636f756e7465722e4c476c6f62616c4461696c794e66744c696d69740100dd0130000000000000000000000000046020476c6f62616c206461696c79204e4654206c696d69742e50476c6f62616c5765656b6c794e66744c696d69740100dd0130000000000000000000000000046420476c6f62616c207765656b6c79204e4654206c696d69742e404e66744c696d697473456e61626c656401008804000868204e4654206c696d69747320656e61626c6564206f72206e6f74a02043616e206265207570646174656420696e20666c696768742062792074686520436f756e63696c01fd05018901246c4d61784e756d6265724f6643757261746f727350657247726f757010100a00000004c4204578706f72747320636f6e7374202d206d6178206e756d626572206f662063757261746f7273207065722067726f7570ac4d61784b65797350657243757261746f7247726f75705065726d697373696f6e7342794c6576656c4d6170101019000000045d01204578706f72747320636f6e7374202d206d6178206e756d626572206f66206b657973207065722063757261746f725f67726f75702e7065726d697373696f6e735f62795f6c6576656c206d617020696e7374616e6365704d61784e667441756374696f6e57686974656c6973744c656e67746810101400000004c4204578706f72747320636f6e7374202d206d6178206e66742061756374696f6e2077686974656c697374206c656e6774686844656661756c74476c6f62616c4461696c794e66744c696d6974dd013064000000000000004038000004c0204578706f72747320636f6e7374202d2064656661756c7420676c6f62616c206461696c79204e4654206c696d69742e6c44656661756c74476c6f62616c5765656b6c794e66744c696d6974dd013064000000000000004038000004c4204578706f72747320636f6e7374202d2064656661756c7420676c6f62616c207765656b6c79204e4654206c696d69742e6c44656661756c744368616e6e656c4461696c794e66744c696d6974dd013064000000000000004038000004c4204578706f72747320636f6e7374202d2064656661756c74206368616e6e656c206461696c79204e4654206c696d69742e7044656661756c744368616e6e656c5765656b6c794e66744c696d6974dd013064000000000000004038000004c8204578706f72747320636f6e7374202d2064656661756c74206368616e6e656c207765656b6c79204e4654206c696d69742e684d696e696d756d436173686f7574416c6c6f7765644c696d69741840a41a130d84010000000000000000000004a8204578706f727420636f6e7374202d206d696e20636173686f757420616c6c6f776564206c696d697473684d6178696d756d436173686f7574416c6c6f7765644c696d6974184040a640ba3e363b00000000000000000004a8204578706f727420636f6e7374202d206d617820636173686f757420616c6c6f776564206c696d69747301f1081a1c53746f72616765011c53746f726167654c4055706c6f6164696e67426c6f636b6564010088040004a020446566696e6573207768657468657220616c6c206e65772075706c6f61647320626c6f636b65641042616773010104027d02f50848000000000000000000000000000000000000044820426167732073746f72616765206d61702e4c4e65787453746f726167654275636b6574496401002020000000000000000004ac2053746f72616765206275636b657420696420636f756e7465722e20537461727473206174207a65726f2e404e657874446174614f626a656374496401002020000000000000000004a02044617461206f626a65637420696420636f756e7465722e20537461727473206174207a65726f2e4453746f726167654275636b65744279496400010402200109040004442053746f72616765206275636b6574732e24426c61636b6c6973740101040209097400048020426c61636b6c69737465642064617461206f626a656374206861736865732e5043757272656e74426c61636b6c69737453697a65010020200000000000000000047820426c61636b6c69737420636f6c6c656374696f6e20636f756e7465722e60446174614f626a6563745065724d65676162797465466565010018400000000000000000000000000000000004b02053697a652062617365642070726963696e67206f66206e6577206f626a656374732075706c6f616465642e6453746f726167654275636b6574735065724261674c696d6974010010100000000004a0202253746f72616765206275636b657473207065722062616722206e756d626572206c696d69742e68566f75636865724d61784f626a6563747353697a654c696d697401002020000000000000000004f820224d6178206f626a656374732073697a6520666f7220612073746f72616765206275636b657420766f756368657222206e756d626572206c696d69742e70566f75636865724d61784f626a656374734e756d6265724c696d697401002020000000000000000004050120224d6178206f626a65637473206e756d62657220666f7220612073746f7261676520206275636b657420766f756368657222206e756d626572206c696d69742e74446174614f626a6563745374617465426c6f6174426f6e6456616c756501001840000000000000000000000000000000000439012054686520737461746520626c6f617420626f6e6420666f72207468652064617461206f626a65637473202868656c70732070726576656e74696e672074686520737461746520626c6f6174292e6844796e616d69634261674372656174696f6e506f6c69636965730101040299020d0914000000000004c82044796e616d69634261674372656174696f6e506f6c6963792062792062616720747970652073746f72616765206d61702e3c446174614f626a65637473427949640101080202150919096c00000000000000000000000000000000000000000000000000000004b0202744617461206f626a6563747320666f722062616773272073746f7261676520646f75626c65206d61702e784e657874446973747269627574696f6e4275636b657446616d696c79496401002020000000000000000004dc20446973747269627574696f6e206275636b65742066616d696c7920696420636f756e7465722e20537461727473206174207a65726f2e70446973747269627574696f6e4275636b657446616d696c794279496401010402201d09200000000000000000047820446973747269627574696f6e206275636b65742066616d696c6965732e80446973747269627574696f6e4275636b6574427946616d696c794964427949640101080202610321093000000000000000000000000004a82027446973747269627574696f6e206275636b6574272073746f7261676520646f75626c65206d61702e78446973747269627574696f6e4275636b657446616d696c794e756d62657201002020000000000000000004f020546f74616c206e756d626572206f6620646973747269627574696f6e206275636b65742066616d696c69657320696e207468652073797374656d2e78446973747269627574696f6e4275636b6574735065724261674c696d6974010010100000000004b42022446973747269627574696f6e206275636b657473207065722062616722206e756d626572206c696d69742e012d060175022c48426c61636b6c69737453697a654c696d69742020e803000000000000040501204578706f72747320636f6e7374202d206d6178696d756d2073697a65206f662074686520226861736820626c61636b6c6973742220636f6c6c656374696f6e2e5c4d696e53746f726167654275636b65747350657242616710100300000004ec204578706f72747320636f6e7374202d206d696e696d756d206e756d626572206f662073746f72616765206275636b65747320706572206261672e5c4d617853746f726167654275636b65747350657242616710100d00000004ec204578706f72747320636f6e7374202d206d6178696d756d206e756d626572206f662073746f72616765206275636b65747320706572206261672e704d696e446973747269627574696f6e4275636b657473506572426167101001000000040101204578706f72747320636f6e7374202d206d696e696d756d206e756d626572206f6620646973747269627574696f6e206275636b65747320706572206261672e704d6178446973747269627574696f6e4275636b657473506572426167101033000000040101204578706f72747320636f6e7374202d206d6178696d756d206e756d626572206f6620646973747269627574696f6e206275636b65747320706572206261672eb444656661756c744d656d62657244796e616d69634261674e756d6265724f6653746f726167654275636b657473101005000000085101204578706f72747320636f6e7374202d207468652064656661756c742064796e616d696320626167206372656174696f6e20706f6c69637920666f72206d656d62657273202873746f72616765206275636b657424206e756d626572292eb844656661756c744368616e6e656c44796e616d69634261674e756d6265724f6653746f726167654275636b657473101005000000085501204578706f72747320636f6e7374202d207468652064656661756c742064796e616d696320626167206372656174696f6e20706f6c69637920666f72206368616e6e656c73202873746f72616765206275636b657424206e756d626572292e844d6178446973747269627574696f6e4275636b657446616d696c794e756d6265722020c80000000000000004fc204578706f72747320636f6e7374202d206d617820616c6c6f77656420646973747269627574696f6e206275636b65742066616d696c79206e756d6265722ec84d61784e756d6265724f6650656e64696e67496e7669746174696f6e73506572446973747269627574696f6e4275636b6574101014000000042d01204578706f72747320636f6e7374202d206d6178206e756d626572206f662070656e64696e6720696e7669746174696f6e732070657220646973747269627574696f6e206275636b65742ea44d61784e756d6265724f664f70657261746f7273506572446973747269627574696f6e4275636b6574101014000000040501204578706f72747320636f6e7374202d206d6178206e756d626572206f66206f70657261746f72732070657220646973747269627574696f6e206275636b65742e444d6178446174614f626a65637453697a652020000000000f00000004bc204578706f72747320636f6e7374202d206d61782064617461206f626a6563742073697a6520696e2062797465732e012d091b3050726f6a656374546f6b656e0114546f6b656e246c4163636f756e74496e666f4279546f6b656e416e644d656d626572010108020261033109b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000041d0120446f75626c65206d617020546f6b656e49642078204d656d6265724964203d3e204163636f756e744461746120666f72206d616e6167696e67206163636f756e74206461746134546f6b656e496e666f4279496401010402205909cd010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004dc206d617020546f6b656e4964203d3e20546f6b656e4461746120746f20726574726965766520746f6b656e20696e666f726d6174696f6e2c4e657874546f6b656e4964010020200000000000000000043c20546f6b656e204964206e6f6e63652c53796d626f6c735573656401010402247400046c2053657420666f722074686520746f6b656e732073796d626f6c7324426c6f6174426f6e64010018400000000000000000000000000000000004b820426c6f617420426f6e642076616c7565207573656420647572696e67206163636f756e74206372656174696f6e3c4d696e53616c654475726174696f6e01001010000000000484204d696e696d756d206475726174696f6e206f66206120746f6b656e2073616c655c4d696e526576656e756553706c69744475726174696f6e010010100000000004a8204d696e696d756d20726576656e75652073706c6974206475726174696f6e20636f6e73747261696e74684d696e526576656e756553706c697454696d65546f5374617274010010100000000004bc204d696e696d756d20726576656e75652073706c69742074696d6520746f20737461727420636f6e73747261696e743c53616c65506c6174666f726d4665650100bd021000000000044d0120506c6174666f726d20666565202870657263656e74616765292063686172676564206f6e20746f70206f6620656163682073616c652070757263686173652028696e204a4f592920616e64206275726e656401310601a902000175091c3c50726f706f73616c73456e67696e65013850726f706f73616c456e67696e65142450726f706f73616c73010104021079090101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000460204d61702070726f706f73616c206279206974732069642e3450726f706f73616c436f756e74010010100000000004bc20436f756e74206f6620616c6c2070726f706f73616c7320746861742068617665206265656e20637265617465642e50446973706174636861626c6543616c6c436f646501010402108509040004b4204d61702070726f706f73616c2065786563757461626c6520636f64652062792070726f706f73616c2069642e4c41637469766550726f706f73616c436f756e740100101000000000046c20436f756e74206f66206163746976652070726f706f73616c732e6c566f7465457869737473427950726f706f73616c4279566f746572010108020289092503040104290120446f75626c65206d617020666f722070726576656e74696e67206475706c696361746520766f7465732e2053686f756c6420626520636c65616e65642061667465722075736167652e015906011103183c43616e63656c6c6174696f6e4665651840aa821bce260000000000000000000000047901204578706f72747320636f6e7374202d2074686520666565206973206170706c696564207768656e2063616e63656c207468652070726f706f73616c2e20412066656520776f756c6420626520736c617368656420286275726e6564292e3052656a656374696f6e4665651840528d8906c20000000000000000000000084501204578706f72747320636f6e7374202d202074686520666565206973206170706c696564207768656e207468652070726f706f73616c20676574732072656a65637465642e20412066656520776f756c645420626520736c617368656420286275726e6564292e385469746c654d61784c656e67746810102800000004d0204578706f72747320636f6e7374202d20206d617820616c6c6f7765642070726f706f73616c207469746c65206c656e6774682e504465736372697074696f6e4d61784c656e6774681010b80b000004e8204578706f72747320636f6e7374202d20206d617820616c6c6f7765642070726f706f73616c206465736372697074696f6e206c656e6774682e584d617841637469766550726f706f73616c4c696d697410101400000004ec204578706f72747320636f6e7374202d20206d61782073696d756c74616e656f7573206163746976652070726f706f73616c73206e756d6265722e505374616b696e6748616e646c65724c6f636b496409042070726f706f73616c04a4204578706f72747320636f6e7374202d207374616b696e672068616e646c6572206c6f636b2069642e018d091d4c50726f706f73616c7344697363757373696f6e014850726f706f73616c44697363757373696f6e10285468726561644279496401010402209109340000000000000000000000000004bc204d617020746872656164206964656e74696669657220746f20636f72726573706f6e64696e67207468726561642e2c546872656164436f756e7401002020000000000000000004b420436f756e74206f6620616c6c207468726561647320746861742068617665206265656e20637265617465642e50506f737454687265616449644279506f73744964010108020261039d0974000000000000000000000000000000000000000000000000000000000004c4204d61702074687265616420696420616e6420706f737420696420746f20636f72726573706f6e64696e6720706f73742e24506f7374436f756e7401002020000000000000000004ac20436f756e74206f6620616c6c20706f73747320746861742068617665206265656e20637265617465642e015d060129030c404d617857686974654c69737453697a65101014000000040901204578706f72747320636f6e7374202d20617574686f72206c6973742073697a65206c696d697420666f722074686520436c6f7365642064697363757373696f6e2e2c506f73744465706f736974184092ef216e00000000000000000000000004a0204578706f72747320636f6e7374202d2066656520666f72206372656174696e67206120706f737430506f73744c69666554696d65101058020000043d01204578706f72747320636f6e7374202d206d6178696d756d206e756d626572206f6620626c6f636b73206265666f7265206120706f73742063616e2062652065726173656420627920616e796f6e6501a1091e3850726f706f73616c73436f646578013850726f706f73616c73436f64657804505468726561644964427950726f706f73616c496401010402102020000000000000000004b0204d61702070726f706f73616c20696420746f206974732064697363757373696f6e2074687265616420696401610601310368985365744d617856616c696461746f72436f756e7450726f706f73616c506172616d65746572737d09b4c0890100401901006400000064000000640000006400000001a010a012d3eb050000000000000000000300000004dc204578706f7274732027536574204d61782056616c696461746f7220436f756e74272070726f706f73616c20706172616d65746572732e8052756e74696d655570677261646550726f706f73616c506172616d65746572737d09b4c0890100401901006400000064000000640000006400000001a010a012d3eb050000000000000000000400000004bc204578706f727473202752756e74696d652055706772616465272070726f706f73616c20706172616d65746572732e605369676e616c50726f706f73616c506172616d65746572737d09b4c0a80000b004000064000000640000006400000064000000011068761b959700000000000000000000010000000498204578706f72747320275369676e616c272070726f706f73616c20706172616d65746572732e8046756e64696e675265717565737450726f706f73616c506172616d65746572737d09b4c0a80000b00400004200000042000000640000006400000001a41a130d8401000000000000000000000100000004bc204578706f727473202746756e64696e672052657175657374272070726f706f73616c20706172616d65746572732ebc437265617465576f726b696e6747726f75704c6561644f70656e696e6750726f706f73616c506172616d65746572737d09b4c0a80000b00400004200000042000000640000006400000001680abf82280f0000000000000000000001000000040501204578706f727473202743726561746520576f726b696e672047726f7570204c656164204f70656e696e67272070726f706f73616c20706172616d65746572732ea446696c6c576f726b696e6747726f75704f70656e696e6750726f706f73616c506172616d65746572737d09b4c0a80000b0040000420000004200000064000000640000000134855f419407000000000000000000000100000004fc204578706f727473202746696c6c20576f726b696e672047726f7570204c656164204f70656e696e67272070726f706f73616c20706172616d65746572732ea8557064617465576f726b696e6747726f757042756467657450726f706f73616c506172616d65746572737d09b4c0a80000b0040000420000004200000064000000640000000134855f419407000000000000000000000100000004ec204578706f727473202755706461746520576f726b696e672047726f757020427564676574272070726f706f73616c20706172616d65746572732ebc4465637265617365576f726b696e6747726f75704c6561645374616b6550726f706f73616c506172616d65746572737d09b4c0a80000b0040000640000006400000064000000640000000134855f4194070000000000000000000001000000040501204578706f7274732027446563726561736520576f726b696e672047726f7570204c656164205374616b65272070726f706f73616c20706172616d65746572732e9c536c617368576f726b696e6747726f75704c65616450726f706f73616c506172616d65746572737d09b4c0a80000b0040000420000004200000064000000640000000134855f419407000000000000000000000100000004e0204578706f7274732027536c61736820576f726b696e672047726f7570204c656164272070726f706f73616c20706172616d65746572732eac536574576f726b696e6747726f75704c65616452657761726450726f706f73616c506172616d65746572737d09b4c0a80000b0040000420000004200000064000000640000000134855f419407000000000000000000000100000004f4204578706f727473202753657420576f726b696e672047726f7570204c65616420526577617264272070726f706f73616c20706172616d65746572732eac5465726d696e617465576f726b696e6747726f75704c65616450726f706f73616c506172616d65746572737d09b4c0a80000b0040000420000004200000064000000640000000134855f419407000000000000000000000100000004f0204578706f72747320275465726d696e61746520576f726b696e672047726f7570204c656164272070726f706f73616c20706172616d65746572732e8c416d656e64436f6e737469747574696f6e50726f706f73616c506172616d65746572737d09b4081a01004038000050000000640000003c0000005000000001680abf82280f000000000000000000000200000004c8204578706f7274732027416d656e6420436f6e737469747574696f6e272070726f706f73616c20706172616d65746572732ebc43616e63656c576f726b696e6747726f75704c6561644f70656e696e6750726f706f73616c506172616d65746572737d09b4c0a80000b0040000420000004200000064000000640000000134855f4194070000000000000000000001000000040501204578706f727473202743616e63656c20576f726b696e672047726f7570204c656164204f70656e696e67272070726f706f73616c20706172616d65746572732e905365744d656d62657273686970507269636550726f706f73616c506172616d65746572737d09b4c0a80000b0040000420000004200000064000000640000000134855f419407000000000000000000000100000004d0204578706f7274732027536574204d656d62657273686970205072696365272070726f706f73616c20706172616d65746572732eac536574436f756e63696c427564676574496e6372656d656e7450726f706f73616c506172616d65746572737d09b44019010040190100640000006400000064000000640000000120d0ec362a2f010000000000000000000300000004f0204578706f727473206053657420436f756e63696c2042756467657420496e6372656d656e74602070726f706f73616c20706172616d65746572732e90536574436f756e63696c6f7252657761726450726f706f73616c506172616d65746572737d09b480700000c0a80000640000006400000064000000640000000120d0ec362a2f0100000000000000000002000000042101204578706f727473206053657420436f756e63696c6f72205265776172642050726f706f73616c20506172616d6574657273602070726f706f73616c20706172616d65746572732eb4536574496e697469616c496e7669746174696f6e42616c616e636550726f706f73616c506172616d65746572737d09b480700000b00400004200000042000000640000006400000001d0147e05511e000000000000000000000100000004f8204578706f727473206053657420496e697469616c20496e7669746174696f6e2042616c616e6365602070726f706f73616c20706172616d65746572732e90536574496e7669746174696f6e436f756e7450726f706f73616c506172616d65746572737d09b4c0a80000b0040000420000004200000064000000640000000134855f419407000000000000000000000100000000c85365744d656d626572736869704c656164496e7669746174696f6e51756f746150726f706f73616c506172616d65746572737d09b4c0a80000b0040000420000004200000064000000640000000134855f41940700000000000000000000010000000080536574526566657272616c43757450726f706f73616c506172616d65746572737d09b4c0a80000b0040000420000004200000064000000640000000134855f419407000000000000000000000100000000785665746f50726f706f73616c50726f706f73616c506172616d65746572737d09b4403800000000000064000000640000006400000064000000011068761b959700000000000000000000010000000098557064617465476c6f62616c4e66744c696d697450726f706f73616c506172616d65746572737d09b480700000b00400004200000042000000640000006400000001680abf82280f000000000000000000000100000000985570646174654368616e6e656c5061796f75747350726f706f73616c506172616d65746572737d09b4c0890100403800004200000064000000640000006400000001680abf82280f0000000000000000000001000000009046756e64696e675265717565737450726f706f73616c4d6178546f74616c416d6f756e741840a010a012d3eb0500000000000000000004c4204d6178696d756d20746f74616c20616d6f756e7420696e2066756e64696e6720726571756573742070726f706f73616c8446756e64696e675265717565737450726f706f73616c4d61784163636f756e747310101400000004d0204d6178206e756d626572206f66206163636f756e7473207065722066756e64696e6720726571756573742070726f706f73616ca45365744d617856616c696461746f72436f756e7450726f706f73616c4d617856616c696461746f7273101064000000041501204d617820616c6c6f776564206e756d626572206f662076616c696461746f727320696e20736574206d61782076616c696461746f7220636f756e742070726f706f73616c01a5091f44466f72756d576f726b696e6747726f75700154496e7374616e636531576f726b696e6747726f757028344e6578744f70656e696e67496401002020000000000000000004ac204e657874206964656e7469666965722076616c756520666f72206e6577206a6f62206f70656e696e672e2c4f70656e696e67427949640101040220a909290101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000480204d617073206964656e74696669657220746f206a6f62206f70656e696e672e44416374697665576f726b6572436f756e740100101000000000046420436f756e74206f662061637469766520776f726b6572732e3c4170706c69636174696f6e427949640001040220ad09040004c8204d617073206964656e74696669657220746f20776f726b6572206170706c69636174696f6e206f6e206f70656e696e672e444e6578744170706c69636174696f6e496401002020000000000000000004c8204e657874206964656e7469666965722076616c756520666f72206e657720776f726b6572206170706c69636174696f6e2e304e657874576f726b657249640100202000000000000000000488204e657874206964656e74696669657220666f722061206e657720776f726b65722e28576f726b6572427949640001040220b109040004a4204d617073206964656e74696669657220746f20636f72726573706f6e64696e6720776f726b65722e2c43757272656e744c656164000020040004502043757272656e742067726f7570206c6561642e18427564676574010018400000000000000000000000000000000004782042756467657420666f722074686520776f726b696e672067726f75702e385374617475735465787448617368010024800000000000000000000000000000000000000000000000000000000000000000044820537461747573207465787420686173682e01650601550318504d6178576f726b65724e756d6265724c696d697410101e0000000838204578706f72747320636f6e73749c204d61782073696d756c74616e656f75732061637469766520776f726b6572206e756d6265722e5c4d696e556e7374616b696e67506572696f644c696d697410100065040004ac20446566696e6573206d696e20756e7374616b696e6720706572696f6420696e207468652067726f75702e5c4d696e696d756d4170706c69636174696f6e5374616b6518404835261a08030000000000000000000004d4204d696e696d756d207374616b6520726571756972656420666f72206170706c79696e6720696e746f20616e206f70656e696e672e484c65616465724f70656e696e675374616b651840680abf82280f00000000000000000000048c205374616b65206e656564656420746f2063726561746520616e206f70656e696e672e30526577617264506572696f6410104a38000004d420446566696e65732074686520706572696f6420657665727920776f726b65722067657473207061696420696e20626c6f636b732e505374616b696e6748616e646c65724c6f636b496409042077672d666f72756d0464205374616b696e672068616e646c6572206c6f636b2069642e01b509204c53746f72616765576f726b696e6747726f75700154496e7374616e636532576f726b696e6747726f757028344e6578744f70656e696e67496401002020000000000000000004ac204e657874206964656e7469666965722076616c756520666f72206e6577206a6f62206f70656e696e672e2c4f70656e696e67427949640101040220a909290101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000480204d617073206964656e74696669657220746f206a6f62206f70656e696e672e44416374697665576f726b6572436f756e740100101000000000046420436f756e74206f662061637469766520776f726b6572732e3c4170706c69636174696f6e427949640001040220ad09040004c8204d617073206964656e74696669657220746f20776f726b6572206170706c69636174696f6e206f6e206f70656e696e672e444e6578744170706c69636174696f6e496401002020000000000000000004c8204e657874206964656e7469666965722076616c756520666f72206e657720776f726b6572206170706c69636174696f6e2e304e657874576f726b657249640100202000000000000000000488204e657874206964656e74696669657220666f722061206e657720776f726b65722e28576f726b6572427949640001040220b109040004a4204d617073206964656e74696669657220746f20636f72726573706f6e64696e6720776f726b65722e2c43757272656e744c656164000020040004502043757272656e742067726f7570206c6561642e18427564676574010018400000000000000000000000000000000004782042756467657420666f722074686520776f726b696e672067726f75702e385374617475735465787448617368010024800000000000000000000000000000000000000000000000000000000000000000044820537461747573207465787420686173682e01690601790318504d6178576f726b65724e756d6265724c696d697410101e0000000838204578706f72747320636f6e73749c204d61782073696d756c74616e656f75732061637469766520776f726b6572206e756d6265722e5c4d696e556e7374616b696e67506572696f644c696d697410100065040004ac20446566696e6573206d696e20756e7374616b696e6720706572696f6420696e207468652067726f75702e5c4d696e696d756d4170706c69636174696f6e5374616b6518404835261a08030000000000000000000004d4204d696e696d756d207374616b6520726571756972656420666f72206170706c79696e6720696e746f20616e206f70656e696e672e484c65616465724f70656e696e675374616b651840680abf82280f00000000000000000000048c205374616b65206e656564656420746f2063726561746520616e206f70656e696e672e30526577617264506572696f6410105438000004d420446566696e65732074686520706572696f6420657665727920776f726b65722067657473207061696420696e20626c6f636b732e505374616b696e6748616e646c65724c6f636b496409042077672d73746f72670464205374616b696e672068616e646c6572206c6f636b2069642e01b909214c436f6e74656e74576f726b696e6747726f75700154496e7374616e636533576f726b696e6747726f757028344e6578744f70656e696e67496401002020000000000000000004ac204e657874206964656e7469666965722076616c756520666f72206e6577206a6f62206f70656e696e672e2c4f70656e696e67427949640101040220a909290101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000480204d617073206964656e74696669657220746f206a6f62206f70656e696e672e44416374697665576f726b6572436f756e740100101000000000046420436f756e74206f662061637469766520776f726b6572732e3c4170706c69636174696f6e427949640001040220ad09040004c8204d617073206964656e74696669657220746f20776f726b6572206170706c69636174696f6e206f6e206f70656e696e672e444e6578744170706c69636174696f6e496401002020000000000000000004c8204e657874206964656e7469666965722076616c756520666f72206e657720776f726b6572206170706c69636174696f6e2e304e657874576f726b657249640100202000000000000000000488204e657874206964656e74696669657220666f722061206e657720776f726b65722e28576f726b6572427949640001040220b109040004a4204d617073206964656e74696669657220746f20636f72726573706f6e64696e6720776f726b65722e2c43757272656e744c656164000020040004502043757272656e742067726f7570206c6561642e18427564676574010018400000000000000000000000000000000004782042756467657420666f722074686520776f726b696e672067726f75702e385374617475735465787448617368010024800000000000000000000000000000000000000000000000000000000000000000044820537461747573207465787420686173682e016d0601810318504d6178576f726b65724e756d6265724c696d697410101e0000000838204578706f72747320636f6e73749c204d61782073696d756c74616e656f75732061637469766520776f726b6572206e756d6265722e5c4d696e556e7374616b696e67506572696f644c696d697410100065040004ac20446566696e6573206d696e20756e7374616b696e6720706572696f6420696e207468652067726f75702e5c4d696e696d756d4170706c69636174696f6e5374616b6518404835261a08030000000000000000000004d4204d696e696d756d207374616b6520726571756972656420666f72206170706c79696e6720696e746f20616e206f70656e696e672e484c65616465724f70656e696e675374616b651840680abf82280f00000000000000000000048c205374616b65206e656564656420746f2063726561746520616e206f70656e696e672e30526577617264506572696f6410105e38000004d420446566696e65732074686520706572696f6420657665727920776f726b65722067657473207061696420696e20626c6f636b732e505374616b696e6748616e646c65724c6f636b496409042077672d636f6e74740464205374616b696e672068616e646c6572206c6f636b2069642e01bd09226c4f7065726174696f6e73576f726b696e6747726f7570416c7068610154496e7374616e636534576f726b696e6747726f757028344e6578744f70656e696e67496401002020000000000000000004ac204e657874206964656e7469666965722076616c756520666f72206e6577206a6f62206f70656e696e672e2c4f70656e696e67427949640101040220a909290101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000480204d617073206964656e74696669657220746f206a6f62206f70656e696e672e44416374697665576f726b6572436f756e740100101000000000046420436f756e74206f662061637469766520776f726b6572732e3c4170706c69636174696f6e427949640001040220ad09040004c8204d617073206964656e74696669657220746f20776f726b6572206170706c69636174696f6e206f6e206f70656e696e672e444e6578744170706c69636174696f6e496401002020000000000000000004c8204e657874206964656e7469666965722076616c756520666f72206e657720776f726b6572206170706c69636174696f6e2e304e657874576f726b657249640100202000000000000000000488204e657874206964656e74696669657220666f722061206e657720776f726b65722e28576f726b6572427949640001040220b109040004a4204d617073206964656e74696669657220746f20636f72726573706f6e64696e6720776f726b65722e2c43757272656e744c656164000020040004502043757272656e742067726f7570206c6561642e18427564676574010018400000000000000000000000000000000004782042756467657420666f722074686520776f726b696e672067726f75702e385374617475735465787448617368010024800000000000000000000000000000000000000000000000000000000000000000044820537461747573207465787420686173682e01710601890318504d6178576f726b65724e756d6265724c696d697410101e0000000838204578706f72747320636f6e73749c204d61782073696d756c74616e656f75732061637469766520776f726b6572206e756d6265722e5c4d696e556e7374616b696e67506572696f644c696d697410100065040004ac20446566696e6573206d696e20756e7374616b696e6720706572696f6420696e207468652067726f75702e5c4d696e696d756d4170706c69636174696f6e5374616b6518404835261a08030000000000000000000004d4204d696e696d756d207374616b6520726571756972656420666f72206170706c79696e6720696e746f20616e206f70656e696e672e484c65616465724f70656e696e675374616b651840680abf82280f00000000000000000000048c205374616b65206e656564656420746f2063726561746520616e206f70656e696e672e30526577617264506572696f6410107c38000004d420446566696e65732074686520706572696f6420657665727920776f726b65722067657473207061696420696e20626c6f636b732e505374616b696e6748616e646c65724c6f636b496409042077672d6f706572610464205374616b696e672068616e646c6572206c6f636b2069642e01c109233c417070576f726b696e6747726f75700154496e7374616e636535576f726b696e6747726f757028344e6578744f70656e696e67496401002020000000000000000004ac204e657874206964656e7469666965722076616c756520666f72206e6577206a6f62206f70656e696e672e2c4f70656e696e67427949640101040220a909290101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000480204d617073206964656e74696669657220746f206a6f62206f70656e696e672e44416374697665576f726b6572436f756e740100101000000000046420436f756e74206f662061637469766520776f726b6572732e3c4170706c69636174696f6e427949640001040220ad09040004c8204d617073206964656e74696669657220746f20776f726b6572206170706c69636174696f6e206f6e206f70656e696e672e444e6578744170706c69636174696f6e496401002020000000000000000004c8204e657874206964656e7469666965722076616c756520666f72206e657720776f726b6572206170706c69636174696f6e2e304e657874576f726b657249640100202000000000000000000488204e657874206964656e74696669657220666f722061206e657720776f726b65722e28576f726b6572427949640001040220b109040004a4204d617073206964656e74696669657220746f20636f72726573706f6e64696e6720776f726b65722e2c43757272656e744c656164000020040004502043757272656e742067726f7570206c6561642e18427564676574010018400000000000000000000000000000000004782042756467657420666f722074686520776f726b696e672067726f75702e385374617475735465787448617368010024800000000000000000000000000000000000000000000000000000000000000000044820537461747573207465787420686173682e01750601910318504d6178576f726b65724e756d6265724c696d697410101e0000000838204578706f72747320636f6e73749c204d61782073696d756c74616e656f75732061637469766520776f726b6572206e756d6265722e5c4d696e556e7374616b696e67506572696f644c696d697410100065040004ac20446566696e6573206d696e20756e7374616b696e6720706572696f6420696e207468652067726f75702e5c4d696e696d756d4170706c69636174696f6e5374616b6518404835261a08030000000000000000000004d4204d696e696d756d207374616b6520726571756972656420666f72206170706c79696e6720696e746f20616e206f70656e696e672e484c65616465724f70656e696e675374616b651840680abf82280f00000000000000000000048c205374616b65206e656564656420746f2063726561746520616e206f70656e696e672e30526577617264506572696f6410107238000004d420446566696e65732074686520706572696f6420657665727920776f726b65722067657473207061696420696e20626c6f636b732e505374616b696e6748616e646c65724c6f636b496409042077672d6170706c690464205374616b696e672068616e646c6572206c6f636b2069642e01c50924584d656d62657273686970576f726b696e6747726f75700154496e7374616e636536576f726b696e6747726f757028344e6578744f70656e696e67496401002020000000000000000004ac204e657874206964656e7469666965722076616c756520666f72206e6577206a6f62206f70656e696e672e2c4f70656e696e67427949640101040220a909290101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000480204d617073206964656e74696669657220746f206a6f62206f70656e696e672e44416374697665576f726b6572436f756e740100101000000000046420436f756e74206f662061637469766520776f726b6572732e3c4170706c69636174696f6e427949640001040220ad09040004c8204d617073206964656e74696669657220746f20776f726b6572206170706c69636174696f6e206f6e206f70656e696e672e444e6578744170706c69636174696f6e496401002020000000000000000004c8204e657874206964656e7469666965722076616c756520666f72206e657720776f726b6572206170706c69636174696f6e2e304e657874576f726b657249640100202000000000000000000488204e657874206964656e74696669657220666f722061206e657720776f726b65722e28576f726b6572427949640001040220b109040004a4204d617073206964656e74696669657220746f20636f72726573706f6e64696e6720776f726b65722e2c43757272656e744c656164000020040004502043757272656e742067726f7570206c6561642e18427564676574010018400000000000000000000000000000000004782042756467657420666f722074686520776f726b696e672067726f75702e385374617475735465787448617368010024800000000000000000000000000000000000000000000000000000000000000000044820537461747573207465787420686173682e01790601990318504d6178576f726b65724e756d6265724c696d697410101e0000000838204578706f72747320636f6e73749c204d61782073696d756c74616e656f75732061637469766520776f726b6572206e756d6265722e5c4d696e556e7374616b696e67506572696f644c696d697410100065040004ac20446566696e6573206d696e20756e7374616b696e6720706572696f6420696e207468652067726f75702e5c4d696e696d756d4170706c69636174696f6e5374616b6518404835261a08030000000000000000000004d4204d696e696d756d207374616b6520726571756972656420666f72206170706c79696e6720696e746f20616e206f70656e696e672e484c65616465724f70656e696e675374616b651840680abf82280f00000000000000000000048c205374616b65206e656564656420746f2063726561746520616e206f70656e696e672e30526577617264506572696f6410106838000004d420446566696e65732074686520706572696f6420657665727920776f726b65722067657473207061696420696e20626c6f636b732e505374616b696e6748616e646c65724c6f636b496409042077672d6d656d62720464205374616b696e672068616e646c6572206c6f636b2069642e01c90925684f7065726174696f6e73576f726b696e6747726f7570426574610154496e7374616e636537576f726b696e6747726f757028344e6578744f70656e696e67496401002020000000000000000004ac204e657874206964656e7469666965722076616c756520666f72206e6577206a6f62206f70656e696e672e2c4f70656e696e67427949640101040220a909290101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000480204d617073206964656e74696669657220746f206a6f62206f70656e696e672e44416374697665576f726b6572436f756e740100101000000000046420436f756e74206f662061637469766520776f726b6572732e3c4170706c69636174696f6e427949640001040220ad09040004c8204d617073206964656e74696669657220746f20776f726b6572206170706c69636174696f6e206f6e206f70656e696e672e444e6578744170706c69636174696f6e496401002020000000000000000004c8204e657874206964656e7469666965722076616c756520666f72206e657720776f726b6572206170706c69636174696f6e2e304e657874576f726b657249640100202000000000000000000488204e657874206964656e74696669657220666f722061206e657720776f726b65722e28576f726b6572427949640001040220b109040004a4204d617073206964656e74696669657220746f20636f72726573706f6e64696e6720776f726b65722e2c43757272656e744c656164000020040004502043757272656e742067726f7570206c6561642e18427564676574010018400000000000000000000000000000000004782042756467657420666f722074686520776f726b696e672067726f75702e385374617475735465787448617368010024800000000000000000000000000000000000000000000000000000000000000000044820537461747573207465787420686173682e017d0601a10318504d6178576f726b65724e756d6265724c696d697410101e0000000838204578706f72747320636f6e73749c204d61782073696d756c74616e656f75732061637469766520776f726b6572206e756d6265722e5c4d696e556e7374616b696e67506572696f644c696d697410100065040004ac20446566696e6573206d696e20756e7374616b696e6720706572696f6420696e207468652067726f75702e5c4d696e696d756d4170706c69636174696f6e5374616b6518404835261a08030000000000000000000004d4204d696e696d756d207374616b6520726571756972656420666f72206170706c79696e6720696e746f20616e206f70656e696e672e484c65616465724f70656e696e675374616b651840680abf82280f00000000000000000000048c205374616b65206e656564656420746f2063726561746520616e206f70656e696e672e30526577617264506572696f6410108638000004d420446566696e65732074686520706572696f6420657665727920776f726b65722067657473207061696420696e20626c6f636b732e505374616b696e6748616e646c65724c6f636b496409042077672d6f706572620464205374616b696e672068616e646c6572206c6f636b2069642e01cd09266c4f7065726174696f6e73576f726b696e6747726f757047616d6d610154496e7374616e636538576f726b696e6747726f757028344e6578744f70656e696e67496401002020000000000000000004ac204e657874206964656e7469666965722076616c756520666f72206e6577206a6f62206f70656e696e672e2c4f70656e696e67427949640101040220a909290101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000480204d617073206964656e74696669657220746f206a6f62206f70656e696e672e44416374697665576f726b6572436f756e740100101000000000046420436f756e74206f662061637469766520776f726b6572732e3c4170706c69636174696f6e427949640001040220ad09040004c8204d617073206964656e74696669657220746f20776f726b6572206170706c69636174696f6e206f6e206f70656e696e672e444e6578744170706c69636174696f6e496401002020000000000000000004c8204e657874206964656e7469666965722076616c756520666f72206e657720776f726b6572206170706c69636174696f6e2e304e657874576f726b657249640100202000000000000000000488204e657874206964656e74696669657220666f722061206e657720776f726b65722e28576f726b6572427949640001040220b109040004a4204d617073206964656e74696669657220746f20636f72726573706f6e64696e6720776f726b65722e2c43757272656e744c656164000020040004502043757272656e742067726f7570206c6561642e18427564676574010018400000000000000000000000000000000004782042756467657420666f722074686520776f726b696e672067726f75702e385374617475735465787448617368010024800000000000000000000000000000000000000000000000000000000000000000044820537461747573207465787420686173682e01810601a90318504d6178576f726b65724e756d6265724c696d697410101e0000000838204578706f72747320636f6e73749c204d61782073696d756c74616e656f75732061637469766520776f726b6572206e756d6265722e5c4d696e556e7374616b696e67506572696f644c696d697410100065040004ac20446566696e6573206d696e20756e7374616b696e6720706572696f6420696e207468652067726f75702e5c4d696e696d756d4170706c69636174696f6e5374616b6518404835261a08030000000000000000000004d4204d696e696d756d207374616b6520726571756972656420666f72206170706c79696e6720696e746f20616e206f70656e696e672e484c65616465724f70656e696e675374616b651840680abf82280f00000000000000000000048c205374616b65206e656564656420746f2063726561746520616e206f70656e696e672e30526577617264506572696f6410109038000004d420446566696e65732074686520706572696f6420657665727920776f726b65722067657473207061696420696e20626c6f636b732e505374616b696e6748616e646c65724c6f636b496409042077672d6f706572670464205374616b696e672068616e646c6572206c6f636b2069642e01d1092760446973747269627574696f6e576f726b696e6747726f75700154496e7374616e636539576f726b696e6747726f757028344e6578744f70656e696e67496401002020000000000000000004ac204e657874206964656e7469666965722076616c756520666f72206e6577206a6f62206f70656e696e672e2c4f70656e696e67427949640101040220a909290101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000480204d617073206964656e74696669657220746f206a6f62206f70656e696e672e44416374697665576f726b6572436f756e740100101000000000046420436f756e74206f662061637469766520776f726b6572732e3c4170706c69636174696f6e427949640001040220ad09040004c8204d617073206964656e74696669657220746f20776f726b6572206170706c69636174696f6e206f6e206f70656e696e672e444e6578744170706c69636174696f6e496401002020000000000000000004c8204e657874206964656e7469666965722076616c756520666f72206e657720776f726b6572206170706c69636174696f6e2e304e657874576f726b657249640100202000000000000000000488204e657874206964656e74696669657220666f722061206e657720776f726b65722e28576f726b6572427949640001040220b109040004a4204d617073206964656e74696669657220746f20636f72726573706f6e64696e6720776f726b65722e2c43757272656e744c656164000020040004502043757272656e742067726f7570206c6561642e18427564676574010018400000000000000000000000000000000004782042756467657420666f722074686520776f726b696e672067726f75702e385374617475735465787448617368010024800000000000000000000000000000000000000000000000000000000000000000044820537461747573207465787420686173682e01850601b10318504d6178576f726b65724e756d6265724c696d697410101e0000000838204578706f72747320636f6e73749c204d61782073696d756c74616e656f75732061637469766520776f726b6572206e756d6265722e5c4d696e556e7374616b696e67506572696f644c696d697410100065040004ac20446566696e6573206d696e20756e7374616b696e6720706572696f6420696e207468652067726f75702e5c4d696e696d756d4170706c69636174696f6e5374616b6518404835261a08030000000000000000000004d4204d696e696d756d207374616b6520726571756972656420666f72206170706c79696e6720696e746f20616e206f70656e696e672e484c65616465724f70656e696e675374616b651840680abf82280f00000000000000000000048c205374616b65206e656564656420746f2063726561746520616e206f70656e696e672e30526577617264506572696f6410109a38000004d420446566696e65732074686520706572696f6420657665727920776f726b65722067657473207061696420696e20626c6f636b732e505374616b696e6748616e646c65724c6f636b496409042077672d64697374720464205374616b696e672068616e646c6572206c6f636b2069642e01d50928d909042048436865636b4e6f6e5a65726f53656e646572ed097440436865636b5370656356657273696f6ef1091038436865636b547856657273696f6ef5091030436865636b47656e65736973f9092438436865636b4d6f7274616c697479fd092428436865636b4e6f6e6365050a742c436865636b576569676874090a74604368617267655472616e73616374696f6e5061796d656e740d0a74110a","id":"1"} \ No newline at end of file +{"jsonrpc":"2.0","result":"0x6d6574610e090a000c1c73705f636f72651863727970746f2c4163636f756e7449643332000004000401205b75383b2033325d0000040000032000000008000800000503000c08306672616d655f73797374656d2c4163636f756e74496e666f0814496e64657801102c4163636f756e74446174610114001401146e6f6e6365100114496e646578000124636f6e73756d657273100120526566436f756e7400012470726f766964657273100120526566436f756e7400012c73756666696369656e7473100120526566436f756e740001106461746114012c4163636f756e7444617461000010000005050014083c70616c6c65745f62616c616e6365732c4163636f756e7444617461041c42616c616e63650118001001106672656518011c42616c616e6365000120726573657276656418011c42616c616e636500012c6d6973635f66726f7a656e18011c42616c616e63650001286665655f66726f7a656e18011c42616c616e636500001800000507001c0c346672616d655f737570706f7274206469737061746368405065724469737061746368436c6173730404540120000c01186e6f726d616c2001045400012c6f7065726174696f6e616c200104540001246d616e6461746f7279200104540000200c2873705f77656967687473247765696768745f76321857656967687400000801207265665f74696d6524010c75363400012870726f6f665f73697a6524010c75363400002400000628002800000506002c083c7072696d69746976655f74797065731048323536000004000401205b75383b2033325d000030000002080034102873705f72756e74696d651c67656e65726963186469676573741844696765737400000401106c6f677338013c5665633c4469676573744974656d3e0000380000023c003c102873705f72756e74696d651c67656e6572696318646967657374284469676573744974656d0001142850726552756e74696d650800400144436f6e73656e737573456e67696e654964000030011c5665633c75383e00060024436f6e73656e7375730800400144436f6e73656e737573456e67696e654964000030011c5665633c75383e000400105365616c0800400144436f6e73656e737573456e67696e654964000030011c5665633c75383e000500144f74686572040030011c5665633c75383e0000006452756e74696d65456e7669726f6e6d656e745570646174656400080000400000030400000008004400000248004808306672616d655f73797374656d2c4576656e745265636f7264080445014c0454012c000c01147068617365d503011450686173650001146576656e744c010445000118746f70696373d90301185665633c543e00004c08586a6f7973747265616d5f6e6f64655f72756e74696d653052756e74696d654576656e7400018c1853797374656d04005001706672616d655f73797374656d3a3a4576656e743c52756e74696d653e0000001c5574696c69747904007401607375627374726174655f7574696c6974793a3a4576656e740001002042616c616e636573040080017c70616c6c65745f62616c616e6365733a3a4576656e743c52756e74696d653e000500485472616e73616374696f6e5061796d656e7404008801a870616c6c65745f7472616e73616374696f6e5f7061796d656e743a3a4576656e743c52756e74696d653e00060068456c656374696f6e50726f76696465724d756c7469506861736504008c01d070616c6c65745f656c656374696f6e5f70726f76696465725f6d756c74695f70686173653a3a4576656e743c52756e74696d653e0007001c5374616b696e670400a8017870616c6c65745f7374616b696e673a3a4576656e743c52756e74696d653e0008001c53657373696f6e0400bc015470616c6c65745f73657373696f6e3a3a4576656e740009001c4772616e6470610400c0015470616c6c65745f6772616e6470613a3a4576656e74000b0020496d4f6e6c696e650400d4018070616c6c65745f696d5f6f6e6c696e653a3a4576656e743c52756e74696d653e000d00204f6666656e6365730400f8015870616c6c65745f6f6666656e6365733a3a4576656e74000e0024566f7465724c6973740400010101f470616c6c65745f626167735f6c6973743a3a4576656e743c52756e74696d652c2070616c6c65745f626167735f6c6973743a3a496e7374616e6365313e0010001c56657374696e6704000501017870616c6c65745f76657374696e673a3a4576656e743c52756e74696d653e001100204d756c746973696704000901017c70616c6c65745f6d756c74697369673a3a4576656e743c52756e74696d653e0012001c436f756e63696c04001101015c636f756e63696c3a3a4576656e743c52756e74696d653e001300285265666572656e64756d0400190101c47265666572656e64756d3a3a4576656e743c52756e74696d652c207265666572656e64756d3a3a496e7374616e6365313e0014001c4d656d626572730400290101686d656d626572736869703a3a4576656e743c52756e74696d653e00150014466f72756d040051010154666f72756d3a3a4576656e743c52756e74696d653e00160030436f6e737469747574696f6e04006d01018c70616c6c65745f636f6e737469747574696f6e3a3a4576656e743c52756e74696d653e00170018426f756e7479040071010158626f756e74793a3a4576656e743c52756e74696d653e001800404a6f7973747265616d5574696c6974790400950101846a6f7973747265616d5f7574696c6974793a3a4576656e743c52756e74696d653e0019001c436f6e74656e740400a101015c636f6e74656e743a3a4576656e743c52756e74696d653e001a001c53746f7261676504008d02015c73746f726167653a3a4576656e743c52756e74696d653e001b003050726f6a656374546f6b656e0400c102017470726f6a6563745f746f6b656e3a3a4576656e743c52756e74696d653e001c003c50726f706f73616c73456e67696e6504002903018070726f706f73616c735f656e67696e653a3a4576656e743c52756e74696d653e001d004c50726f706f73616c7344697363757373696f6e04004103019070726f706f73616c735f64697363757373696f6e3a3a4576656e743c52756e74696d653e001e003850726f706f73616c73436f64657804004903017c70726f706f73616c735f636f6465783a3a4576656e743c52756e74696d653e001f0044466f72756d576f726b696e6747726f75700400710301dc776f726b696e675f67726f75703a3a4576656e743c52756e74696d652c20776f726b696e675f67726f75703a3a496e7374616e6365313e0020004c53746f72616765576f726b696e6747726f75700400950301dc776f726b696e675f67726f75703a3a4576656e743c52756e74696d652c20776f726b696e675f67726f75703a3a496e7374616e6365323e0021004c436f6e74656e74576f726b696e6747726f757004009d0301dc776f726b696e675f67726f75703a3a4576656e743c52756e74696d652c20776f726b696e675f67726f75703a3a496e7374616e6365333e0022006c4f7065726174696f6e73576f726b696e6747726f7570416c7068610400a50301dc776f726b696e675f67726f75703a3a4576656e743c52756e74696d652c20776f726b696e675f67726f75703a3a496e7374616e6365343e0023003c417070576f726b696e6747726f75700400ad0301dc776f726b696e675f67726f75703a3a4576656e743c52756e74696d652c20776f726b696e675f67726f75703a3a496e7374616e6365353e002400584d656d62657273686970576f726b696e6747726f75700400b50301dc776f726b696e675f67726f75703a3a4576656e743c52756e74696d652c20776f726b696e675f67726f75703a3a496e7374616e6365363e002500684f7065726174696f6e73576f726b696e6747726f7570426574610400bd0301dc776f726b696e675f67726f75703a3a4576656e743c52756e74696d652c20776f726b696e675f67726f75703a3a496e7374616e6365373e0026006c4f7065726174696f6e73576f726b696e6747726f757047616d6d610400c50301dc776f726b696e675f67726f75703a3a4576656e743c52756e74696d652c20776f726b696e675f67726f75703a3a496e7374616e6365383e00270060446973747269627574696f6e576f726b696e6747726f75700400cd0301dc776f726b696e675f67726f75703a3a4576656e743c52756e74696d652c20776f726b696e675f67726f75703a3a496e7374616e6365393e00280000500c306672616d655f73797374656d1870616c6c6574144576656e740404540001184045787472696e7369635375636365737304013464697370617463685f696e666f5401304469737061746368496e666f00000490416e2065787472696e73696320636f6d706c65746564207375636365737366756c6c792e3c45787472696e7369634661696c656408013864697370617463685f6572726f7260013444697370617463684572726f7200013464697370617463685f696e666f5401304469737061746368496e666f00010450416e2065787472696e736963206661696c65642e2c436f64655570646174656400020450603a636f6465602077617320757064617465642e284e65774163636f756e7404011c6163636f756e74000130543a3a4163636f756e7449640003046841206e6577206163636f756e742077617320637265617465642e344b696c6c65644163636f756e7404011c6163636f756e74000130543a3a4163636f756e74496400040458416e206163636f756e7420776173207265617065642e2052656d61726b656408011873656e646572000130543a3a4163636f756e744964000110686173682c011c543a3a48617368000504704f6e206f6e2d636861696e2072656d61726b2068617070656e65642e04704576656e7420666f72207468652053797374656d2070616c6c65742e540c346672616d655f737570706f7274206469737061746368304469737061746368496e666f00000c0118776569676874200118576569676874000114636c6173735801344469737061746368436c617373000120706179735f6665655c0110506179730000580c346672616d655f737570706f7274206469737061746368344469737061746368436c61737300010c184e6f726d616c0000002c4f7065726174696f6e616c000100244d616e6461746f7279000200005c0c346672616d655f737570706f727420646973706174636810506179730001080c596573000000084e6f0001000060082873705f72756e74696d653444697370617463684572726f72000134144f746865720000003043616e6e6f744c6f6f6b7570000100244261644f726967696e000200184d6f64756c65040064012c4d6f64756c654572726f7200030044436f6e73756d657252656d61696e696e670004002c4e6f50726f76696465727300050040546f6f4d616e79436f6e73756d65727300060014546f6b656e0400680128546f6b656e4572726f720007002841726974686d6574696304006c013c41726974686d657469634572726f72000800345472616e73616374696f6e616c04007001485472616e73616374696f6e616c4572726f7200090024457868617573746564000a0028436f7272757074696f6e000b002c556e617661696c61626c65000c000064082873705f72756e74696d652c4d6f64756c654572726f720000080114696e64657808010875380001146572726f7240018c5b75383b204d41585f4d4f44554c455f4552524f525f454e434f4445445f53495a455d000068082873705f72756e74696d6528546f6b656e4572726f7200011c1c4e6f46756e647300000020576f756c644469650001003042656c6f774d696e696d756d0002003043616e6e6f7443726561746500030030556e6b6e6f776e41737365740004001846726f7a656e0005002c556e737570706f72746564000600006c083473705f61726974686d657469633c41726974686d657469634572726f7200010c24556e646572666c6f77000000204f766572666c6f77000100384469766973696f6e42795a65726f0002000070082873705f72756e74696d65485472616e73616374696f6e616c4572726f72000108304c696d6974526561636865640000001c4e6f4c6179657200010000740c3870616c6c65745f7574696c6974791870616c6c6574144576656e74000118404261746368496e746572727570746564080114696e64657810010c7533320001146572726f7260013444697370617463684572726f7200000855014261746368206f66206469737061746368657320646964206e6f7420636f6d706c6574652066756c6c792e20496e646578206f66206669727374206661696c696e6720646973706174636820676976656e2c2061734877656c6c20617320746865206572726f722e384261746368436f6d706c65746564000104c84261746368206f66206469737061746368657320636f6d706c657465642066756c6c792077697468206e6f206572726f722e604261746368436f6d706c65746564576974684572726f7273000204b44261746368206f66206469737061746368657320636f6d706c657465642062757420686173206572726f72732e344974656d436f6d706c657465640003041d01412073696e676c65206974656d2077697468696e2061204261746368206f6620646973706174636865732068617320636f6d706c657465642077697468206e6f206572726f722e284974656d4661696c65640401146572726f7260013444697370617463684572726f720004041101412073696e676c65206974656d2077697468696e2061204261746368206f6620646973706174636865732068617320636f6d706c657465642077697468206572726f722e30446973706174636865644173040118726573756c747801384469737061746368526573756c7400050458412063616c6c2077617320646973706174636865642e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909780418526573756c74080454017c044501600108084f6b04007c000000000c45727204006000000100007c0000040000800c3c70616c6c65745f62616c616e6365731870616c6c6574144576656e740804540004490001281c456e646f77656408011c6163636f756e74000130543a3a4163636f756e744964000130667265655f62616c616e6365180128543a3a42616c616e6365000004b8416e206163636f756e74207761732063726561746564207769746820736f6d6520667265652062616c616e63652e20447573744c6f737408011c6163636f756e74000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e63650001083d01416e206163636f756e74207761732072656d6f7665642077686f73652062616c616e636520776173206e6f6e2d7a65726f206275742062656c6f77204578697374656e7469616c4465706f7369742c78726573756c74696e6720696e20616e206f75747269676874206c6f73732e205472616e736665720c011066726f6d000130543a3a4163636f756e744964000108746f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e63650002044c5472616e73666572207375636365656465642e2842616c616e63655365740c010c77686f000130543a3a4163636f756e74496400011066726565180128543a3a42616c616e63650001207265736572766564180128543a3a42616c616e636500030468412062616c616e6365207761732073657420627920726f6f742e20526573657276656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000404e0536f6d652062616c616e63652077617320726573657276656420286d6f7665642066726f6d206672656520746f207265736572766564292e28556e726573657276656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000504e8536f6d652062616c616e63652077617320756e726573657276656420286d6f7665642066726f6d20726573657276656420746f2066726565292e4852657365727665526570617472696174656410011066726f6d000130543a3a4163636f756e744964000108746f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e636500014864657374696e6174696f6e5f7374617475738401185374617475730006084d01536f6d652062616c616e636520776173206d6f7665642066726f6d207468652072657365727665206f6620746865206669727374206163636f756e7420746f20746865207365636f6e64206163636f756e742ed846696e616c20617267756d656e7420696e64696361746573207468652064657374696e6174696f6e2062616c616e636520747970652e1c4465706f73697408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000704d8536f6d6520616d6f756e7420776173206465706f73697465642028652e672e20666f72207472616e73616374696f6e2066656573292e20576974686472617708010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e63650008041d01536f6d6520616d6f756e74207761732077697468647261776e2066726f6d20746865206163636f756e742028652e672e20666f72207472616e73616374696f6e2066656573292e1c536c617368656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e63650009040101536f6d6520616d6f756e74207761732072656d6f7665642066726f6d20746865206163636f756e742028652e672e20666f72206d69736265686176696f72292e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a0909098414346672616d655f737570706f72741874726169747318746f6b656e73106d6973633442616c616e6365537461747573000108104672656500000020526573657276656400010000880c6870616c6c65745f7472616e73616374696f6e5f7061796d656e741870616c6c6574144576656e74040454000104485472616e73616374696f6e466565506169640c010c77686f000130543a3a4163636f756e74496400012861637475616c5f66656518013042616c616e63654f663c543e00010c74697018013042616c616e63654f663c543e000008590141207472616e73616374696f6e20666565206061637475616c5f666565602c206f662077686963682060746970602077617320616464656420746f20746865206d696e696d756d20696e636c7573696f6e206665652c5c686173206265656e2070616964206279206077686f602e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a0909098c0c9070616c6c65745f656c656374696f6e5f70726f76696465725f6d756c74695f70686173651870616c6c6574144576656e7404045400011838536f6c7574696f6e53746f7265640c011c636f6d7075746590013c456c656374696f6e436f6d707574650001186f726967696e9401504f7074696f6e3c543a3a4163636f756e7449643e000130707265765f656a6563746564980110626f6f6c00001cb44120736f6c7574696f6e207761732073746f72656420776974682074686520676976656e20636f6d707574652e00510154686520606f726967696e6020696e6469636174657320746865206f726967696e206f662074686520736f6c7574696f6e2e20496620606f726967696e602069732060536f6d65284163636f756e74496429602c55017468652073746f72656420736f6c7574696f6e20776173207375626d6974656420696e20746865207369676e65642070686173652062792061206d696e657220776974682074686520604163636f756e744964602e25014f74686572776973652c2074686520736f6c7574696f6e207761732073746f7265642065697468657220647572696e672074686520756e7369676e6564207068617365206f722062794d0160543a3a466f7263654f726967696e602e205468652060626f6f6c6020697320607472756560207768656e20612070726576696f757320736f6c7574696f6e2077617320656a656374656420746f206d616b6548726f6f6d20666f722074686973206f6e652e44456c656374696f6e46696e616c697a656408011c636f6d7075746590013c456c656374696f6e436f6d7075746500011473636f72659c0134456c656374696f6e53636f7265000104190154686520656c656374696f6e20686173206265656e2066696e616c697a65642c20776974682074686520676976656e20636f6d7075746174696f6e20616e642073636f72652e38456c656374696f6e4661696c656400020c4c416e20656c656374696f6e206661696c65642e0001014e6f74206d7563682063616e20626520736169642061626f757420776869636820636f6d7075746573206661696c656420696e207468652070726f636573732e20526577617264656408011c6163636f756e740001983c54206173206672616d655f73797374656d3a3a436f6e6669673e3a3a4163636f756e74496400011476616c756518013042616c616e63654f663c543e0003042501416e206163636f756e7420686173206265656e20726577617264656420666f72207468656972207369676e6564207375626d697373696f6e206265696e672066696e616c697a65642e1c536c617368656408011c6163636f756e740001983c54206173206672616d655f73797374656d3a3a436f6e6669673e3a3a4163636f756e74496400011476616c756518013042616c616e63654f663c543e0004042101416e206163636f756e7420686173206265656e20736c617368656420666f72207375626d697474696e6720616e20696e76616c6964207369676e6564207375626d697373696f6e2e4450686173655472616e736974696f6e65640c011066726f6da0015450686173653c543a3a426c6f636b4e756d6265723e000108746fa0015450686173653c543a3a426c6f636b4e756d6265723e000114726f756e6410010c753332000504b85468657265207761732061207068617365207472616e736974696f6e20696e206120676976656e20726f756e642e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a09090990089070616c6c65745f656c656374696f6e5f70726f76696465725f6d756c74695f70686173653c456c656374696f6e436f6d707574650001141c4f6e436861696e000000185369676e656400010020556e7369676e65640002002046616c6c6261636b00030024456d657267656e6379000400009404184f7074696f6e04045401000108104e6f6e6500000010536f6d6504000000000100009800000500009c084473705f6e706f735f656c656374696f6e7334456c656374696f6e53636f726500000c01346d696e696d616c5f7374616b6518013c457874656e64656442616c616e636500012473756d5f7374616b6518013c457874656e64656442616c616e636500014473756d5f7374616b655f7371756172656418013c457874656e64656442616c616e63650000a0089070616c6c65745f656c656374696f6e5f70726f76696465725f6d756c74695f70686173651450686173650408426e011001100c4f6666000000185369676e656400010020556e7369676e65640400a4012828626f6f6c2c20426e2900020024456d657267656e637900030000a400000408981000a8103870616c6c65745f7374616b696e671870616c6c65741870616c6c6574144576656e7404045400013c1c457261506169640c01246572615f696e646578100120457261496e64657800014076616c696461746f725f7061796f757418013042616c616e63654f663c543e00012472656d61696e64657218013042616c616e63654f663c543e000008550154686520657261207061796f757420686173206265656e207365743b207468652066697273742062616c616e6365206973207468652076616c696461746f722d7061796f75743b20746865207365636f6e64206973c07468652072656d61696e6465722066726f6d20746865206d6178696d756d20616d6f756e74206f66207265776172642e2052657761726465640801147374617368000130543a3a4163636f756e744964000118616d6f756e7418013042616c616e63654f663c543e000104bc546865206e6f6d696e61746f7220686173206265656e207265776172646564206279207468697320616d6f756e742e1c536c61736865640801187374616b6572000130543a3a4163636f756e744964000118616d6f756e7418013042616c616e63654f663c543e0002041d0141207374616b6572202876616c696461746f72206f72206e6f6d696e61746f722920686173206265656e20736c61736865642062792074686520676976656e20616d6f756e742e34536c6173685265706f727465640c012476616c696461746f72000130543a3a4163636f756e7449640001206672616374696f6eac011c50657262696c6c000124736c6173685f657261100120457261496e64657800030859014120736c61736820666f722074686520676976656e2076616c696461746f722c20666f722074686520676976656e2070657263656e74616765206f66207468656972207374616b652c2061742074686520676976656e54657261206173206265656e207265706f727465642e684f6c64536c617368696e675265706f727444697363617264656404013473657373696f6e5f696e64657810013053657373696f6e496e6465780004081901416e206f6c6420736c617368696e67207265706f72742066726f6d2061207072696f72206572612077617320646973636172646564206265636175736520697420636f756c64446e6f742062652070726f6365737365642e385374616b657273456c65637465640005048441206e657720736574206f66207374616b6572732077617320656c65637465642e18426f6e6465640801147374617368000130543a3a4163636f756e744964000118616d6f756e7418013042616c616e63654f663c543e000610d0416e206163636f756e742068617320626f6e646564207468697320616d6f756e742e205c5b73746173682c20616d6f756e745c5d004d014e4f54453a2054686973206576656e74206973206f6e6c7920656d6974746564207768656e2066756e64732061726520626f6e64656420766961206120646973706174636861626c652e204e6f7461626c792c210169742077696c6c206e6f7420626520656d697474656420666f72207374616b696e672072657761726473207768656e20746865792061726520616464656420746f207374616b652e20556e626f6e6465640801147374617368000130543a3a4163636f756e744964000118616d6f756e7418013042616c616e63654f663c543e00070490416e206163636f756e742068617320756e626f6e646564207468697320616d6f756e742e2457697468647261776e0801147374617368000130543a3a4163636f756e744964000118616d6f756e7418013042616c616e63654f663c543e0008085901416e206163636f756e74206861732063616c6c6564206077697468647261775f756e626f6e6465646020616e642072656d6f76656420756e626f6e64696e67206368756e6b7320776f727468206042616c616e6365606466726f6d2074686520756e6c6f636b696e672071756575652e184b69636b65640801246e6f6d696e61746f72000130543a3a4163636f756e7449640001147374617368000130543a3a4163636f756e744964000904b441206e6f6d696e61746f7220686173206265656e206b69636b65642066726f6d20612076616c696461746f722e545374616b696e67456c656374696f6e4661696c6564000a04ac54686520656c656374696f6e206661696c65642e204e6f206e65772065726120697320706c616e6e65642e1c4368696c6c65640401147374617368000130543a3a4163636f756e744964000b042101416e206163636f756e74206861732073746f707065642070617274696369706174696e672061732065697468657220612076616c696461746f72206f72206e6f6d696e61746f722e345061796f7574537461727465640801246572615f696e646578100120457261496e64657800013c76616c696461746f725f7374617368000130543a3a4163636f756e744964000c0498546865207374616b657273272072657761726473206172652067657474696e6720706169642e4456616c696461746f7250726566735365740801147374617368000130543a3a4163636f756e7449640001147072656673b0013856616c696461746f725072656673000d0498412076616c696461746f72206861732073657420746865697220707265666572656e6365732e20466f7263654572610401106d6f6465b8011c466f7263696e67000e047441206e657720666f72636520657261206d6f646520776173207365742e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909ac0c3473705f61726974686d65746963287065725f7468696e67731c50657262696c6c0000040010010c7533320000b0083870616c6c65745f7374616b696e673856616c696461746f7250726566730000080128636f6d6d697373696f6eb4011c50657262696c6c00011c626c6f636b6564980110626f6f6c0000b4000006ac00b8083870616c6c65745f7374616b696e671c466f7263696e67000110284e6f74466f7263696e6700000020466f7263654e657700010024466f7263654e6f6e650002002c466f726365416c7761797300030000bc0c3870616c6c65745f73657373696f6e1870616c6c6574144576656e74000104284e657753657373696f6e04013473657373696f6e5f696e64657810013053657373696f6e496e64657800000839014e65772073657373696f6e206861732068617070656e65642e204e6f746520746861742074686520617267756d656e74206973207468652073657373696f6e20696e6465782c206e6f74207468659c626c6f636b206e756d626572206173207468652074797065206d6967687420737567676573742e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909c00c3870616c6c65745f6772616e6470611870616c6c6574144576656e7400010c384e6577417574686f726974696573040134617574686f726974795f736574c40134417574686f726974794c6973740000048c4e657720617574686f726974792073657420686173206265656e206170706c6965642e185061757365640001049843757272656e7420617574686f726974792073657420686173206265656e207061757365642e1c526573756d65640002049c43757272656e7420617574686f726974792073657420686173206265656e20726573756d65642e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909c4000002c800c800000408cc2800cc0c5073705f636f6e73656e7375735f6772616e6470610c617070185075626c696300000400d0013c656432353531393a3a5075626c69630000d00c1c73705f636f72651c65643235353139185075626c6963000004000401205b75383b2033325d0000d40c4070616c6c65745f696d5f6f6e6c696e651870616c6c6574144576656e7404045400010c444865617274626561745265636569766564040130617574686f726974795f6964d80138543a3a417574686f726974794964000004c041206e657720686561727462656174207761732072656365697665642066726f6d2060417574686f726974794964602e1c416c6c476f6f64000104d041742074686520656e64206f66207468652073657373696f6e2c206e6f206f6666656e63652077617320636f6d6d69747465642e2c536f6d654f66666c696e6504011c6f66666c696e65e0016c5665633c4964656e74696669636174696f6e5475706c653c543e3e000204290141742074686520656e64206f66207468652073657373696f6e2c206174206c65617374206f6e652076616c696461746f722077617320666f756e6420746f206265206f66666c696e652e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909d8104070616c6c65745f696d5f6f6e6c696e651c737232353531392c6170705f73723235353139185075626c696300000400dc013c737232353531393a3a5075626c69630000dc0c1c73705f636f72651c73723235353139185075626c6963000004000401205b75383b2033325d0000e0000002e400e40000040800e800e8083870616c6c65745f7374616b696e67204578706f7375726508244163636f756e74496401001c42616c616e63650118000c0114746f74616cec011c42616c616e636500010c6f776eec011c42616c616e63650001186f7468657273f001ac5665633c496e646976696475616c4578706f737572653c4163636f756e7449642c2042616c616e63653e3e0000ec0000061800f0000002f400f4083870616c6c65745f7374616b696e6748496e646976696475616c4578706f7375726508244163636f756e74496401001c42616c616e636501180008010c77686f0001244163636f756e74496400011476616c7565ec011c42616c616e63650000f80c3c70616c6c65745f6f6666656e6365731870616c6c6574144576656e740001041c4f6666656e63650801106b696e64fc01104b696e6400012074696d65736c6f743001384f706171756554696d65536c6f7400000c5101546865726520697320616e206f6666656e6365207265706f72746564206f662074686520676976656e20606b696e64602068617070656e656420617420746865206073657373696f6e5f696e6465786020616e643501286b696e642d7370656369666963292074696d6520736c6f742e2054686973206576656e74206973206e6f74206465706f736974656420666f72206475706c696361746520736c61736865732e4c5c5b6b696e642c2074696d65736c6f745c5d2e04304576656e747320747970652efc00000310000000080001010c4070616c6c65745f626167735f6c6973741870616c6c6574144576656e740804540004490001082052656261676765640c010c77686f000130543a3a4163636f756e74496400011066726f6d280120543a3a53636f7265000108746f280120543a3a53636f7265000004a44d6f76656420616e206163636f756e742066726f6d206f6e652062616720746f20616e6f746865722e3053636f72655570646174656408010c77686f000130543a3a4163636f756e7449640001246e65775f73636f7265280120543a3a53636f7265000104d855706461746564207468652073636f7265206f6620736f6d65206163636f756e7420746f2074686520676976656e20616d6f756e742e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a09090905010c3870616c6c65745f76657374696e671870616c6c6574144576656e740404540001083856657374696e675570646174656408011c6163636f756e74000130543a3a4163636f756e744964000120756e76657374656418013042616c616e63654f663c543e000008510154686520616d6f756e742076657374656420686173206265656e20757064617465642e205468697320636f756c6420696e6469636174652061206368616e676520696e2066756e647320617661696c61626c652e25015468652062616c616e636520676976656e2069732074686520616d6f756e74207768696368206973206c65667420756e7665737465642028616e642074687573206c6f636b6564292e4056657374696e67436f6d706c6574656404011c6163636f756e74000130543a3a4163636f756e7449640001049c416e205c5b6163636f756e745c5d20686173206265636f6d652066756c6c79207665737465642e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a09090909010c3c70616c6c65745f6d756c74697369671870616c6c6574144576656e740404540001102c4e65774d756c74697369670c0124617070726f76696e67000130543a3a4163636f756e7449640001206d756c7469736967000130543a3a4163636f756e74496400012463616c6c5f6861736804012043616c6c486173680000048c41206e6577206d756c7469736967206f7065726174696f6e2068617320626567756e2e404d756c7469736967417070726f76616c100124617070726f76696e67000130543a3a4163636f756e74496400012474696d65706f696e740d01016454696d65706f696e743c543a3a426c6f636b4e756d6265723e0001206d756c7469736967000130543a3a4163636f756e74496400012463616c6c5f6861736804012043616c6c48617368000104c841206d756c7469736967206f7065726174696f6e20686173206265656e20617070726f76656420627920736f6d656f6e652e404d756c74697369674578656375746564140124617070726f76696e67000130543a3a4163636f756e74496400012474696d65706f696e740d01016454696d65706f696e743c543a3a426c6f636b4e756d6265723e0001206d756c7469736967000130543a3a4163636f756e74496400012463616c6c5f6861736804012043616c6c48617368000118726573756c747801384469737061746368526573756c740002049c41206d756c7469736967206f7065726174696f6e20686173206265656e2065786563757465642e444d756c746973696743616e63656c6c656410012863616e63656c6c696e67000130543a3a4163636f756e74496400012474696d65706f696e740d01016454696d65706f696e743c543a3a426c6f636b4e756d6265723e0001206d756c7469736967000130543a3a4163636f756e74496400012463616c6c5f6861736804012043616c6c48617368000304a041206d756c7469736967206f7065726174696f6e20686173206265656e2063616e63656c6c65642e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a0909090d01083c70616c6c65745f6d756c74697369672454696d65706f696e74042c426c6f636b4e756d62657201100008011868656967687410012c426c6f636b4e756d626572000114696e64657810010c75333200001101083870616c6c65745f636f756e63696c205261774576656e74101c42616c616e636501182c426c6f636b4e756d6265720110204d656d62657249640128244163636f756e7449640100014c5c416e6e6f756e63696e67506572696f6453746172746564040010012c426c6f636b4e756d6265720000045c4e657720636f756e63696c2077617320656c65637465644c4e6f74456e6f75676843616e64696461746573040010012c426c6f636b4e756d6265720001041d01416e6e6f756e63696e6720706572696f642063616e27742066696e6973682062656361757365206f6620696e73756666696369656e742063616e6469647461746520636f756e744c566f74696e67506572696f6453746172746564040010010c753332000204a843616e646964617465732061726520616e6e6f756e63656420616e6420766f74696e6720737461727473304e657743616e64696461746510002801204d656d626572496400000001244163636f756e74496400000001244163636f756e744964000018011c42616c616e63650003045c4e65772063616e64696461746520616e6e6f756e636564444e6577436f756e63696c456c65637465640800150101345665633c4d656d62657249643e000010012c426c6f636b4e756d626572000404944e657720636f756e63696c2077617320656c656374656420616e64206170706f696e746564504e6577436f756e63696c4e6f74456c6563746564040010012c426c6f636b4e756d6265720005046c4e657720636f756e63696c20776173206e6f7420656c65637465645443616e6469646163795374616b6552656c6561736504002801204d656d6265724964000604d843616e646964616379207374616b65207468617420776173206e6f206c6f6e676572206e6565646564207761732072656c65617365644443616e646964616379576974686472617704002801204d656d62657249640007049443616e646964617465206861732077697468647261776e206869732063616e6469646163794043616e6469646163794e6f746553657408002801204d656d6265724964000030011c5665633c75383e000804d05468652063616e64696461746520686173207365742061206e6577206e6f746520666f722074686569722063616e646964616379345265776172645061796d656e7410002801204d656d626572496400000001244163636f756e744964000018011c42616c616e6365000018011c42616c616e6365000904c05468652077686f6c652072657761726420776173207061696420746f2074686520636f756e63696c206d656d6265722e4042756467657442616c616e6365536574040018011c42616c616e6365000a049c4275646765742062616c616e636520776173206368616e6765642062792074686520726f6f742e30427564676574526566696c6c040018011c42616c616e6365000b04c44275646765742062616c616e63652077617320696e63726561736564206279206175746f6d6174696320726566696c6c2e4c427564676574526566696c6c506c616e6e6564040010012c426c6f636b4e756d626572000c048c546865206e6578742062756467657420726566696c6c2077617320706c616e6e65642e58427564676574496e6372656d656e7455706461746564040018011c42616c616e6365000d048842756467657420696e6372656d656e7420686173206265656e20757064617465642e58436f756e63696c6f7252657761726455706461746564040018011c42616c616e6365000e0488436f756e63696c6f722072657761726420686173206265656e20757064617465642e345265717565737446756e64656408000001244163636f756e744964000018011c42616c616e6365000f045c5265717565737420686173206265656e2066756e6465644c436f756e63696c42756467657446756e6465640c002801204d656d6265724964000018011c42616c616e6365000030011c5665633c75383e0010146046756e642074686520636f756e63696c206275646765742e1c506172616d733a2c2d204d656d6265722049444c2d20416d6f756e74206f662062616c616e63652c2d20526174696f6e616c6544436f756e63696c6f7252656d61726b656408002801204d656d6265724964000030011c5665633c75383e00110460436f756e63696c6f722072656d61726b206d6573736167654443616e64696461746552656d61726b656408002801204d656d6265724964000030011c5665633c75383e0012046043616e6469646174652072656d61726b206d657373616765085c4576656e747320666f722074686973206d6f64756c652e00150100000228001901084470616c6c65745f7265666572656e64756d205261774576656e741c2c426c6f636b4e756d62657201101c42616c616e636501181048617368012c244163636f756e744964010024566f7465506f7765720118204d656d626572496401280449011d010120445265666572656e64756d53746172746564080010010c753332000010012c426c6f636b4e756d626572000004485265666572656e64756d20737461727465646c5265666572656e64756d53746172746564466f72636566756c6c79080010010c753332000010012c426c6f636b4e756d626572000104485265666572656e64756d20737461727465645452657665616c696e67537461676553746172746564040010012c426c6f636b4e756d6265720002046452657665616c696e672070686173652068617320626567756e485265666572656e64756d46696e69736865640400210101985665633c4f7074696f6e526573756c743c4d656d62657249642c20566f7465506f7765723e3e000304c05265666572656e64756d20656e64656420616e642077696e6e696e67206f7074696f6e207761732073656c656374656420566f7465436173740c000001244163636f756e74496400002c011048617368000018011c42616c616e636500040478557365722063617374206120766f746520696e207265666572656e64756d30566f746552657665616c65640c000001244163636f756e74496400002801204d656d6265724964000030011c5665633c75383e00050458557365722072657665616c65642068697320766f7465345374616b6552656c656173656404000001244163636f756e7449640006045c557365722072656c656173656420686973207374616b655c4163636f756e744f707465644f75744f66566f74696e6704000001244163636f756e744964000704d84163636f756e74207065726d616e656e746c79206f70746564206f7574206f6620766f74696e6720696e207265666572656e64756d2e085c4576656e747320666f722074686973206d6f64756c652e001d01084470616c6c65745f7265666572656e64756d24496e7374616e6365310000000021010000022501002501084470616c6c65745f7265666572656e64756d304f7074696f6e526573756c7408204d656d6265724964012824566f7465506f7765720118000801246f7074696f6e5f69642801204d656d6265724964000128766f74655f706f776572180124566f7465506f77657200002901084470616c6c65745f6d656d62657273686970205261774576656e7420204d656d626572496401281c42616c616e63650118244163636f756e74496401005c4275794d656d62657273686970506172616d6574657273012d011c4163746f724964012868496e766974654d656d62657273686970506172616d6574657273013901584372656174654d656d626572506172616d6574657273013d0160476966744d656d62657273686970506172616d65746572730141010144344d656d626572496e76697465640c002801204d656d6265724964000039010168496e766974654d656d62657273686970506172616d6574657273000018011c42616c616e6365000000404d656d6265727368697047696674656408002801204d656d6265724964000041010160476966744d656d62657273686970506172616d6574657273000100404d656d62657273686970426f756768740c002801204d656d626572496400002d01015c4275794d656d62657273686970506172616d6574657273000010010c753332000200504d656d62657250726f66696c65557064617465640c002801204d656d626572496400003101013c4f7074696f6e3c5665633c75383e3e00003101013c4f7074696f6e3c5665633c75383e3e000300544d656d6265724163636f756e7473557064617465640c002801204d656d626572496400009401444f7074696f6e3c4163636f756e7449643e00009401444f7074696f6e3c4163636f756e7449643e0004007c4d656d626572566572696669636174696f6e537461747573557064617465640c002801204d656d62657249640000980110626f6f6c000028011c4163746f72496400050048526566657272616c437574557064617465640400080108753800060048496e76697465735472616e736665727265640c002801204d656d626572496400002801204d656d6265724964000010010c753332000700584d656d62657273686970507269636555706461746564040018011c42616c616e63650008007c496e697469616c496e7669746174696f6e42616c616e636555706461746564040018011c42616c616e6365000900704c6561646572496e7669746174696f6e51756f746155706461746564040010010c753332000a0074496e697469616c496e7669746174696f6e436f756e7455706461746564040010010c753332000b004c5374616b696e674163636f756e74416464656408000001244163636f756e74496400002801204d656d6265724964000c00545374616b696e674163636f756e7452656d6f76656408000001244163636f756e74496400002801204d656d6265724964000d005c5374616b696e674163636f756e74436f6e6669726d656408000001244163636f756e74496400002801204d656d6265724964000e00384d656d62657252656d61726b65640c002801204d656d6265724964000030011c5665633c75383e0000490101704f7074696f6e3c284163636f756e7449642c2042616c616e6365293e000f00344d656d626572437265617465640c002801204d656d626572496400003d0101584372656174654d656d626572506172616d6574657273000010010c753332001000085c4576656e747320666f722074686973206d6f64756c652e002d01084470616c6c65745f6d656d626572736869705c4275794d656d62657273686970506172616d657465727308244163636f756e7449640100204d656d6265724964012800140130726f6f745f6163636f756e740001244163636f756e744964000148636f6e74726f6c6c65725f6163636f756e740001244163636f756e74496400011868616e646c653101013c4f7074696f6e3c5665633c75383e3e0001206d6574616461746130011c5665633c75383e00012c72656665727265725f6964350101404f7074696f6e3c4d656d62657249643e0000310104184f7074696f6e04045401300108104e6f6e6500000010536f6d650400300000010000350104184f7074696f6e04045401280108104e6f6e6500000010536f6d6504002800000100003901084470616c6c65745f6d656d6265727368697068496e766974654d656d62657273686970506172616d657465727308244163636f756e7449640100204d656d6265724964012800140148696e766974696e675f6d656d6265725f69642801204d656d6265724964000130726f6f745f6163636f756e740001244163636f756e744964000148636f6e74726f6c6c65725f6163636f756e740001244163636f756e74496400011868616e646c653101013c4f7074696f6e3c5665633c75383e3e0001206d6574616461746130011c5665633c75383e00003d01084470616c6c65745f6d656d62657273686970584372656174654d656d626572506172616d657465727304244163636f756e744964010000140130726f6f745f6163636f756e740001244163636f756e744964000148636f6e74726f6c6c65725f6163636f756e740001244163636f756e74496400011868616e646c6530011c5665633c75383e0001206d6574616461746130011c5665633c75383e00014869735f666f756e64696e675f6d656d626572980110626f6f6c00004101084470616c6c65745f6d656d6265727368697060476966744d656d62657273686970506172616d657465727308244163636f756e74496401001c42616c616e6365011800200130726f6f745f6163636f756e740001244163636f756e744964000148636f6e74726f6c6c65725f6163636f756e740001244163636f756e74496400011868616e646c653101013c4f7074696f6e3c5665633c75383e3e0001206d6574616461746130011c5665633c75383e0001646372656469745f636f6e74726f6c6c65725f6163636f756e7418011c42616c616e63650001a06170706c795f636f6e74726f6c6c65725f6163636f756e745f696e7669746174696f6e5f6c6f636b4501013c4f7074696f6e3c42616c616e63653e00014c6372656469745f726f6f745f6163636f756e7418011c42616c616e63650001886170706c795f726f6f745f6163636f756e745f696e7669746174696f6e5f6c6f636b4501013c4f7074696f6e3c42616c616e63653e0000450104184f7074696f6e04045401180108104e6f6e6500000010536f6d650400180000010000490104184f7074696f6e040454014d010108104e6f6e6500000010536f6d6504004d0100000100004d01000004080018005101083070616c6c65745f666f72756d205261774576656e74202843617465676f7279496401282c4d6f64657261746f7249640128205468726561644964012818506f7374496401281048617368012c2c466f72756d55736572496401283c50726976696c656765644163746f7201550138457874656e646564506f7374496401590101443c43617465676f727943726561746564100028012843617465676f727949640000350101484f7074696f6e3c43617465676f727949643e000030011c5665633c75383e000030011c5665633c75383e00000464412063617465676f72792077617320696e74726f64756365647443617465676f7279417263686976616c537461747573557064617465640c0028012843617465676f727949640000980110626f6f6c00005501013c50726976696c656765644163746f72000108e0416e206172686963616c20737461747573206f662063617465676f7279207769746820676976656e2069642077617320757064617465642e1501546865207365636f6e6420617267756d656e74207265666c6563747320746865206e657720617263686976616c20737461747573206f66207468652063617465676f72792e5043617465676f72795469746c65557064617465640c0028012843617465676f7279496400002c01104861736800005501013c50726976696c656765644163746f72000208b841207469746c65206f662063617465676f7279207769746820676976656e2069642077617320757064617465642e0101546865207365636f6e6420617267756d656e74207265666c6563747320746865206e6577207469746c652068617368206f66207468652063617465676f72792e6843617465676f72794465736372697074696f6e557064617465640c0028012843617465676f7279496400002c01104861736800005501013c50726976696c656765644163746f72000308d041206469736372697074696f6e206f662063617465676f7279207769746820676976656e2069642077617320757064617465642e1901546865207365636f6e6420617267756d656e74207265666c6563747320746865206e6577206465736372697074696f6e2068617368206f66207468652063617465676f72792e3c43617465676f727944656c65746564080028012843617465676f7279496400005501013c50726976696c656765644163746f7200040458412063617465676f7279207761732064656c657465643454687265616443726561746564180028012843617465676f72794964000028012054687265616449640000280118506f73744964000028012c466f72756d557365724964000030011c5665633c75383e000030011c5665633c75383e0005088c4120746872656164207769746820676976656e2069642077617320637265617465642ef04120746869726420617267756d656e74207265666c656374732074686520696e697469616c20706f7374206964206f6620746865207468726561642e3c5468726561644d6f6465726174656410002801205468726561644964000030011c5665633c75383e00005501013c50726976696c656765644163746f72000028012843617465676f72794964000604944120746872656164207769746820676976656e20696420776173206d6f646572617465642e3454687265616455706461746564100028012054687265616449640000980110626f6f6c00005501013c50726976696c656765644163746f72000028012843617465676f727949640007088c4120746872656164207769746820676976656e2069642077617320757064617465642e0d01546865207365636f6e6420617267756d656e74207265666c6563747320746865206e657720617263686976616c20737461747573206f6620746865207468726561642e545468726561644d657461646174615570646174656410002801205468726561644964000028012c466f72756d557365724964000028012843617465676f72794964000030011c5665633c75383e0008049c4120746872656164206d6574616461746120676976656e2069642077617320757064617465642e3454687265616444656c6574656410002801205468726561644964000028012c466f72756d557365724964000028012843617465676f727949640000980110626f6f6c000904544120746872656164207761732064656c657465642e2c5468726561644d6f76656410002801205468726561644964000028012843617465676f7279496400005501013c50726976696c656765644163746f72000028012843617465676f72794964000a0488412074687265616420776173206d6f76656420746f206e65772063617465676f727924506f737441646465641800280118506f73744964000028012c466f72756d557365724964000028012843617465676f7279496400002801205468726561644964000030011c5665633c75383e0000980110626f6f6c000b047c506f7374207769746820676976656e2069642077617320637265617465642e34506f73744d6f646572617465641400280118506f73744964000030011c5665633c75383e00005501013c50726976696c656765644163746f72000028012843617465676f7279496400002801205468726561644964000c0484506f73742077697468206769766e6520696420776173206d6f646572617465642e2c506f737444656c657465640c0030011c5665633c75383e000028012c466f72756d55736572496400005d01017842547265654d61703c457874656e646564506f737449642c20626f6f6c3e000d047c506f73742077697468206769766e65206964207761732064656c657465642e3c506f737454657874557064617465641400280118506f73744964000028012c466f72756d557365724964000028012843617465676f7279496400002801205468726561644964000030011c5665633c75383e000e08a0506f7374207769746820676976656e2069642068616420697473207465787420757064617465642e4d01546865207365636f6e6420617267756d656e74207265666c6563747320746865206e756d626572206f6620746f74616c206564697473207768656e20746865207465787420757064617465206f63637572732e6843617465676f7279537469636b795468726561645570646174650c0028012843617465676f7279496400006901014842547265655365743c54687265616449643e00005501013c50726976696c656765644163746f72000f0488537469636b7920746872656164207570646174656420666f722063617465676f72799043617465676f72794d656d626572736869704f664d6f64657261746f72557064617465640c0028012c4d6f64657261746f724964000028012843617465676f727949640000980110626f6f6c0010042501416e206d6f64657261746f72206162696c69747920746f206d6f64657261746520612063617465676f727920616e64206974732073756263617465676f726965732075706461746564085c4576656e747320666f722074686973206d6f64756c652e005501083070616c6c65745f666f72756d3c50726976696c656765644163746f72040454000108104c656164000000244d6f64657261746f7204002801384d6f64657261746f7249643c543e000100005901083070616c6c65745f666f72756d50457874656e646564506f737449644f626a6563740c2843617465676f727949640128205468726561644964012818506f737449640128000c012c63617465676f72795f696428012843617465676f727949640001247468726561645f6964280120546872656164496400011c706f73745f6964280118506f7374496400005d01042042547265654d617008044b015901045601980004006101000000610100000265010065010000040859019800690104204254726565536574040454012800040015010000006d01084c70616c6c65745f636f6e737469747574696f6e205261774576656e74041048617368012c010444436f6e73747574696f6e416d656e64656408002c011048617368000030011c5665633c75383e00001080456d697473206f6e20636f6e737469747574696f6e20616d656e646d656e742e2c506172616d65746572733a602d20636f6e737469747574696f6e207465787420686173684c2d20636f6e737469747574696f6e2074657874085c4576656e747320666f722074686973206d6f64756c652e007101083470616c6c65745f626f756e7479205261774576656e741c20426f756e7479496401281c456e747279496401281c42616c616e63650118204d656d62657249640128244163636f756e744964010060426f756e74794372656174696f6e506172616d6574657273017501384f7261636c654a7564676d656e74018501015c34426f756e7479437265617465640c00280120426f756e74794964000075010160426f756e74794372656174696f6e506172616d6574657273000030011c5665633c75383e000014544120626f756e74792077617320637265617465642e1c506172616d733a2c2d20626f756e7479204944542d206372656174696f6e20706172616d6574657273442d20626f756e7479206d6574616461746150426f756e74794f7261636c6553776974636865641000280120426f756e74794964000079010154426f756e74794163746f723c4d656d62657249643e000079010154426f756e74794163746f723c4d656d62657249643e000079010154426f756e74794163746f723c4d656d62657249643e000118d0426f756e7479204f7261636c652053776974636865642062792063757272656e74206f7261636c65206f7220636f756e63696c2e1c506172616d733a2c2d20626f756e7479204944282d207377697463686572442d2063757272656e745f6f7261636c652c302d206e6577206f7261636c6540426f756e74795465726d696e617465641000280120426f756e74794964000079010154426f756e74794163746f723c4d656d62657249643e000079010154426f756e74794163746f723c4d656d62657249643e000079010154426f756e74794163746f723c4d656d62657249643e0002188c4120626f756e747920776173207465726d696e6174656420627920636f756e63696c2e1c506172616d733a2c2d20626f756e74792049444c2d20626f756e7479207465726d696e61746f72402d20626f756e74792063726561746f723c2d20626f756e7479206f7261636c6530426f756e747946756e6465640c00280120426f756e74794964000079010154426f756e74794163746f723c4d656d62657249643e000018011c42616c616e6365000314b44120626f756e7479207761732066756e6465642062792061206d656d626572206f72206120636f756e63696c2e1c506172616d733a2c2d20626f756e74792049443c2d20626f756e74792066756e646572402d2066756e64696e6720616d6f756e745c426f756e74794d617846756e64696e67526561636865640400280120426f756e7479496400040cbc4120626f756e747920686173207265616368656420697473207461726765742066756e64696e6720616d6f756e742e1c506172616d733a2c2d20626f756e74792049445c426f756e747946756e64696e675769746864726177616c0800280120426f756e74794964000079010154426f756e74794163746f723c4d656d62657249643e000510c041206d656d626572206f72206120636f756e63696c206861732077697468647261776e207468652066756e64696e672e1c506172616d733a2c2d20626f756e74792049443c2d20626f756e74792066756e64657274426f756e747943726561746f724368657272795769746864726177616c0800280120426f756e74794964000079010154426f756e74794163746f723c4d656d62657249643e000610f84120626f756e74792063726561746f72206861732077697468647261776e207468652063686572727920286d656d626572206f7220636f756e63696c292e1c506172616d733a2c2d20626f756e7479204944402d20626f756e74792063726561746f728c426f756e747943726561746f724f7261636c655265776172645769746864726177616c0800280120426f756e74794964000079010154426f756e74794163746f723c4d656d62657249643e00071015014120626f756e74792063726561746f72206861732077697468647261776e20746865206f7261636c652072657761726420286d656d626572206f7220636f756e63696c292e1c506172616d733a2c2d20626f756e7479204944402d20626f756e74792063726561746f7270426f756e74794f7261636c655265776172645769746864726177616c0c00280120426f756e74794964000079010154426f756e74794163746f723c4d656d62657249643e000018011c42616c616e6365000814f441204f7261636c65206861732077697468647261776e20746865206f7261636c652072657761726420286d656d626572206f7220636f756e63696c292e1c506172616d733a2c2d20626f756e7479204944402d20626f756e74792063726561746f723c2d204f7261636c652052657761726434426f756e747952656d6f7665640400280120426f756e7479496400090c544120626f756e7479207761732072656d6f7665642e1c506172616d733a2c2d20626f756e747920494448576f726b456e747279416e6e6f756e6365641400280120426f756e74794964000028011c456e747279496400002801204d656d626572496400000001244163636f756e744964000030011c5665633c75383e000a1c64576f726b20656e7472792077617320616e6e6f756e6365642e1c506172616d733a2c2d20626f756e7479204944482d206372656174656420656e7472792049444c2d20656e7472616e74206d656d626572204944502d207374616b696e67206163636f756e74204944482d20776f726b206465736372697074696f6e34576f726b5375626d69747465641000280120426f756e74794964000028011c456e747279496400002801204d656d6265724964000030011c5665633c75383e000b18305375626d697420776f726b2e1c506172616d733a2c2d20626f756e7479204944482d206372656174656420656e7472792049444c2d20656e7472616e74206d656d626572204944a82d20776f726b206461746120286465736372697074696f6e2c2055524c2c20424c4f422c206574632e295c4f7261636c654a7564676d656e745375626d69747465641000280120426f756e74794964000079010154426f756e74794163746f723c4d656d62657249643e0000850101384f7261636c654a7564676d656e74000030011c5665633c75383e000c185c5375626d6974206f7261636c65206a7564676d656e742e1c506172616d733a2c2d20626f756e7479204944202d206f7261636c653c2d206a7564676d656e7420646174612c2d20726174696f6e616c6564576f726b456e7472616e7446756e647357697468647261776e0c00280120426f756e74794964000028011c456e747279496400002801204d656d6265724964000d145c576f726b20656e7472792077617320736c61736865642e1c506172616d733a2c2d20626f756e7479204944282d20656e7472792049444c2d20656e7472616e74206d656d62657220494464426f756e7479436f6e7472696275746f7252656d61726b65640c0079010154426f756e74794163746f723c4d656d62657249643e0000280120426f756e74794964000030011c5665633c75383e000e14a0426f756e747920636f6e7472696275746f72206d6164652061206d6573736167652072656d61726b1c506172616d733a342d20636f6e7472696275746f722c2d20626f756e7479206964242d206d65737361676550426f756e74794f7261636c6552656d61726b65640c0079010154426f756e74794163746f723c4d656d62657249643e0000280120426f756e74794964000030011c5665633c75383e000f148c426f756e7479206f7261636c65206d6164652061206d6573736167652072656d61726b1c506172616d733a202d206f7261636c652c2d20626f756e7479206964242d206d65737361676554426f756e7479456e7472616e7452656d61726b656410002801204d656d62657249640000280120426f756e74794964000028011c456e7472794964000030011c5665633c75383e00101890426f756e747920656e7472616e74206d6164652061206d6573736167652072656d61726b1c506172616d733a302d20656e7472616e745f69642c2d20626f756e7479206964282d20656e747279206964242d206d65737361676554426f756e747943726561746f7252656d61726b65640c0079010154426f756e74794163746f723c4d656d62657249643e0000280120426f756e74794964000030011c5665633c75383e00111490426f756e74792063726561746f72206d6164652061206d6573736167652072656d61726b1c506172616d733a242d2063726561746f722c2d20626f756e7479206964242d206d65737361676564576f726b5375626d697373696f6e506572696f64456e6465640800280120426f756e74794964000079010154426f756e74794163746f723c4d656d62657249643e0012105c576f726b20656e7472792077617320736c61736865642e1c506172616d733a2c2d20626f756e7479204944442d206f7261636c65202863616c6c65722960576f726b456e7472616e745374616b65556e6c6f636b65640c00280120426f756e74794964000028011c456e747279496400000001244163636f756e74496400131468576f726b20656e747279207374616b6520756e6c6f636b65642e1c506172616d733a2c2d20626f756e7479204944282d20656e7472792049443c2d207374616b65206163636f756e745c576f726b456e7472616e745374616b65536c61736865641000280120426f756e74794964000028011c456e747279496400000001244163636f756e744964000018011c42616c616e636500141864576f726b20656e747279207374616b6520736c61736865642e1c506172616d733a2c2d20626f756e7479204944282d20656e7472792049443c2d207374616b65206163636f756e74402d20736c617368656420616d6f756e747446756e6465725374617465426c6f6174426f6e6457697468647261776e0c00280120426f756e74794964000079010154426f756e74794163746f723c4d656d62657249643e000018011c42616c616e63650015141d0141206d656d626572206f72206120636f756e63696c2066756e646572206861732077697468647261776e207468652066756e64657220737461746520626c6f617420626f6e642e1c506172616d733a2c2d20626f756e74792049443c2d20626f756e74792066756e646572802d2066756e64657220537461746520626c6f617420626f6e6420616d6f756e747843726561746f725374617465426c6f6174426f6e6457697468647261776e0c00280120426f756e74794964000079010154426f756e74794163746f723c4d656d62657249643e000018011c42616c616e6365001614250141206d656d626572206f72206120636f756e63696c2063726561746f72206861732077697468647261776e207468652063726561746f7220737461746520626c6f617420626f6e642e1c506172616d733a2c2d20626f756e7479204944402d20626f756e74792063726561746f72842d2043726561746f7220537461746520626c6f617420626f6e6420616d6f756e74085c4576656e747320666f722074686973206d6f64756c652e007501083470616c6c65745f626f756e747940426f756e7479506172616d6574657273101c42616c616e636501182c426c6f636b4e756d6265720110204d656d626572496401285c436c6f736564436f6e747261637457686974656c697374016901001c01186f7261636c6579010154426f756e74794163746f723c4d656d62657249643e000134636f6e74726163745f747970657d0101b84173737572616e6365436f6e7472616374547970653c436c6f736564436f6e747261637457686974656c6973743e00011c63726561746f7279010154426f756e74794163746f723c4d656d62657249643e00011863686572727918011c42616c616e63650001346f7261636c655f72657761726418011c42616c616e6365000134656e7472616e745f7374616b6518011c42616c616e636500013066756e64696e675f747970658101018446756e64696e67547970653c426c6f636b4e756d6265722c2042616c616e63653e00007901083470616c6c65745f626f756e74792c426f756e74794163746f7204204d656d6265724964012801081c436f756e63696c000000184d656d62657204002801204d656d6265724964000100007d01083470616c6c65745f626f756e7479544173737572616e6365436f6e747261637454797065045c436c6f736564436f6e747261637457686974656c6973740169010108104f70656e00000018436c6f73656404006901015c436c6f736564436f6e747261637457686974656c697374000100008101083470616c6c65745f626f756e74792c46756e64696e6754797065082c426c6f636b4e756d62657201101c42616c616e6365011801082450657270657475616c04011874617267657418011c42616c616e63650000001c4c696d6974656408011874617267657418011c42616c616e636500013866756e64696e675f706572696f6410012c426c6f636b4e756d626572000100008501042042547265654d617008044b012804560189010004008d010000008901083470616c6c65745f626f756e74795c4f7261636c65576f726b456e7472794a7564676d656e74041c42616c616e6365011801081857696e6e657204011872657761726418011c42616c616e63650000002052656a6563746564080138736c617368696e675f7368617265ac011c50657262696c6c000150616374696f6e5f6a757374696669636174696f6e30011c5665633c75383e000100008d01000002910100910100000408288901009501086070616c6c65745f6a6f7973747265616d5f7574696c697479205261774576656e74081c42616c616e63650118244163636f756e74496401000110205369676e616c6564040030011c5665633c75383e00000c7841207369676e616c2070726f706f73616c207761732065786563757465641c506172616d733adc2d205369676e616c20676976656e207768656e206372656174696e672074686520636f72726573706f6e64696e672070726f706f73616c3c52756e74696d655570677261646564040030011c5665633c75383e00010c78412072756e74696d652075706772616465207761732065786563757465641c506172616d733a6c2d204e657720636f646520656e636f64656420696e2062797465736455706461746564576f726b696e6747726f75704275646765740c0099010130576f726b696e6747726f7570000018011c42616c616e636500009d01012c42616c616e63654b696e64000218d8416e206055706461746520576f726b696e672047726f757020427564676574602070726f706f73616c207761732065786563757465641c506172616d733ab42d20576f726b696e672067726f757020776869636820627564676574206973206265696e6720757064617465647c2d20416d6f756e74206f662062616c616e6365206265696e67206d6f7665645d012d20456e756d2076617269616e74207769746820706f73697469766520696e6469636174696e672066756e6473206d6f76656420746f72776172647320776f726b696e672067726f757020616e64206e65676174697665c0616e64206e656761746976652066756e6473206d6f76696e672066726f6d2074686520776f726b696e672067726f757030546f6b656e734275726e656408000001244163636f756e744964000018011c42616c616e636500031060416e206163636f756e74206275726e656420746f6b656e731c506172616d733a882d204163636f756e74204964206f6620746865206275726e696e6720746f6b656e73882d2042616c616e6365206275726e65642066726f6d2074686174206163636f756e74085c4576656e747320666f722074686973206d6f64756c652e009901103470616c6c65745f636f6d6d6f6e34776f726b696e675f67726f7570386974657261626c655f656e756d7330576f726b696e6747726f757000012414466f72756d0000001c53746f726167650001001c436f6e74656e740002003c4f7065726174696f6e73416c7068610003000c41707000040030446973747269627574696f6e000500384f7065726174696f6e73426574610006003c4f7065726174696f6e7347616d6d61000700284d656d62657273686970000800009d01083470616c6c65745f636f6d6d6f6e2c42616c616e63654b696e6400010820506f736974697665000000204e6567617469766500010000a101083870616c6c65745f636f6e74656e74205261774576656e746430436f6e74656e744163746f7201a501204d656d626572496401283843757261746f7247726f7570496401282443757261746f72496401281c566964656f49640128244368616e6e656c496401281c4368616e6e656c01a90130446174614f626a6563744964012850456e676c69736841756374696f6e506172616d7301fd01444f70656e41756374696f6e506172616d73010502344f70656e41756374696f6e49640128544e667449737375616e6365506172616d65746572730109021c42616c616e63650118644368616e6e656c4372656174696f6e506172616d65746572730115025c4368616e6e656c557064617465506172616d65746572730141025c566964656f4372656174696f6e506172616d657465727301490254566964656f557064617465506172616d6574657273015102544368616e6e656c50726976696c6567654c6576656c0108704d6f6465726174696f6e5065726d697373696f6e7342794c6576656c015502645472616e73666572436f6d6d69746d656e745769746e657373016d023c50656e64696e675472616e7366657201ed01244163636f756e7449640100785570646174654368616e6e656c5061796f757473506172616d65746572730171021c546f6b656e496401285c4368616e6e656c46756e647344657374696e6174696f6e01850201d44c43757261746f7247726f757043726561746564040028013843757261746f7247726f757049640000007843757261746f7247726f75705065726d697373696f6e7355706461746564080028013843757261746f7247726f757049640000550201704d6f6465726174696f6e5065726d697373696f6e7342794c6576656c0001005443757261746f7247726f7570537461747573536574080028013843757261746f7247726f757049640000980110626f6f6c0002003043757261746f7241646465640c0028013843757261746f7247726f75704964000028012443757261746f7249640000bd01015c4368616e6e656c4167656e745065726d697373696f6e730003003843757261746f7252656d6f766564080028013843757261746f7247726f75704964000028012443757261746f724964000400384368616e6e656c4372656174656410002801244368616e6e656c49640000a901011c4368616e6e656c0000150201644368616e6e656c4372656174696f6e506172616d657465727300000001244163636f756e744964000500384368616e6e656c557064617465641000a5010130436f6e74656e744163746f7200002801244368616e6e656c496400004102015c4368616e6e656c557064617465506172616d657465727300006901015842547265655365743c446174614f626a65637449643e000600704368616e6e656c50726976696c6567654c6576656c5570646174656408002801244368616e6e656c496400000801544368616e6e656c50726976696c6567654c6576656c000700844368616e6e656c5374617465426c6f6174426f6e6456616c756555706461746564040018011c42616c616e63650008007c566964656f5374617465426c6f6174426f6e6456616c756555706461746564040018011c42616c616e6365000900504368616e6e656c41737365747352656d6f7665641000a5010130436f6e74656e744163746f7200002801244368616e6e656c496400006901015842547265655365743c446174614f626a65637449643e0000a901011c4368616e6e656c000a00384368616e6e656c44656c657465640800a5010130436f6e74656e744163746f7200002801244368616e6e656c4964000b007c4368616e6e656c5669736962696c69747953657442794d6f64657261746f721000a5010130436f6e74656e744163746f7200002801244368616e6e656c49640000980110626f6f6c000030011c5665633c75383e000c009c4368616e6e656c50617573656446656174757265735570646174656442794d6f64657261746f721000a5010130436f6e74656e744163746f7200002801244368616e6e656c49640000d901018042547265655365743c5061757361626c654368616e6e656c466561747572653e000030011c5665633c75383e000d007c4368616e6e656c41737365747344656c6574656442794d6f64657261746f721000a5010130436f6e74656e744163746f7200002801244368616e6e656c496400006901015842547265655365743c446174614f626a65637449643e000030011c5665633c75383e000e00544368616e6e656c46756e647357697468647261776e1000a5010130436f6e74656e744163746f7200002801244368616e6e656c4964000018011c42616c616e636500008502015c4368616e6e656c46756e647344657374696e6174696f6e000f00804368616e6e656c526577617264436c61696d6564416e6457697468647261776e1000a5010130436f6e74656e744163746f7200002801244368616e6e656c4964000018011c42616c616e636500008502015c4368616e6e656c46756e647344657374696e6174696f6e00100030566964656f437265617465641400a5010130436f6e74656e744163746f7200002801244368616e6e656c4964000028011c566964656f496400004902015c566964656f4372656174696f6e506172616d657465727300006901015842547265655365743c446174614f626a65637449643e00110030566964656f557064617465641000a5010130436f6e74656e744163746f72000028011c566964656f4964000051020154566964656f557064617465506172616d657465727300006901015842547265655365743c446174614f626a65637449643e00120030566964656f44656c657465640800a5010130436f6e74656e744163746f72000028011c566964656f496400130074566964656f5669736962696c69747953657442794d6f64657261746f721000a5010130436f6e74656e744163746f72000028011c566964656f49640000980110626f6f6c000030011c5665633c75383e00140074566964656f41737365747344656c6574656442794d6f64657261746f721400a5010130436f6e74656e744163746f72000028011c566964656f496400006901015842547265655365743c446174614f626a65637449643e0000980110626f6f6c000030011c5665633c75383e001500544368616e6e656c5061796f757473557064617465640c00710201785570646174654368616e6e656c5061796f757473506172616d65746572730000350101504f7074696f6e3c446174614f626a65637449643e00000001244163636f756e744964001600504368616e6e656c526577617264557064617465640c0018011c42616c616e6365000018011c42616c616e636500002801244368616e6e656c496400170054456e676c69736841756374696f6e537461727465640c00a5010130436f6e74656e744163746f72000028011c566964656f49640000fd010150456e676c69736841756374696f6e506172616d73001800484f70656e41756374696f6e537461727465641000a5010130436f6e74656e744163746f72000028011c566964656f49640000050201444f70656e41756374696f6e506172616d7300002801344f70656e41756374696f6e4964001900244e66744973737565640c00a5010130436f6e74656e744163746f72000028011c566964656f49640000090201544e667449737375616e6365506172616d6574657273001a00304e667444657374726f7965640800a5010130436f6e74656e744163746f72000028011c566964656f4964001b003841756374696f6e4269644d61646510002801204d656d6265724964000028011c566964656f4964000018011c42616c616e63650000350101404f7074696f6e3c4d656d62657249643e001c004841756374696f6e42696443616e63656c656408002801204d656d6265724964000028011c566964656f4964001d003c41756374696f6e43616e63656c65640800a5010130436f6e74656e744163746f72000028011c566964656f4964001e0054456e676c69736841756374696f6e536574746c65640c002801204d656d626572496400000001244163636f756e744964000028011c566964656f4964001f00604269644d616465436f6d706c6574696e6741756374696f6e0c002801204d656d6265724964000028011c566964656f49640000350101404f7074696f6e3c4d656d62657249643e002000584f70656e41756374696f6e42696441636365707465641000a5010130436f6e74656e744163746f72000028011c566964656f496400002801204d656d6265724964000018011c42616c616e6365002100304f6666657253746172746564100028011c566964656f49640000a5010130436f6e74656e744163746f7200002801204d656d626572496400004501013c4f7074696f6e3c42616c616e63653e002200344f666665724163636570746564040028011c566964656f4964002300344f6666657243616e63656c6564080028011c566964656f49640000a5010130436f6e74656e744163746f72002400404e667453656c6c4f726465724d6164650c0028011c566964656f49640000a5010130436f6e74656e744163746f72000018011c42616c616e6365002500244e6674426f75676874080028011c566964656f496400002801204d656d6265724964002600384275794e6f7743616e63656c6564080028011c566964656f49640000a5010130436f6e74656e744163746f72002700484275794e6f775072696365557064617465640c0028011c566964656f49640000a5010130436f6e74656e744163746f72000018011c42616c616e6365002800844e6674536c696e6765644261636b546f5468654f726967696e616c417274697374080028011c566964656f49640000a5010130436f6e74656e744163746f72002900504368616e6e656c4f776e657252656d61726b656408002801244368616e6e656c4964000030011c5665633c75383e002a046c4d65746170726f746f636f6c732072656c61746564206576656e74504368616e6e656c4167656e7452656d61726b65640c00a5010130436f6e74656e744163746f7200002801244368616e6e656c4964000030011c5665633c75383e002b00404e66744f776e657252656d61726b65640c00a5010130436f6e74656e744163746f72000028011c566964656f4964000030011c5665633c75383e002c0068496e697469616c697a65644368616e6e656c5472616e736665720c002801244368616e6e656c49640000a5010130436f6e74656e744163746f720000ed01013c50656e64696e675472616e73666572002d005443616e63656c4368616e6e656c5472616e7366657208002801244368616e6e656c49640000a5010130436f6e74656e744163746f72002e005c4368616e6e656c5472616e73666572416363657074656408002801244368616e6e656c496400006d0201645472616e73666572436f6d6d69746d656e745769746e657373002f0054476c6f62616c4e66744c696d6974557064617465640800890201384e66744c696d6974506572696f64000028010c753634003000584368616e6e656c4e66744c696d6974557064617465641000a5010130436f6e74656e744163746f720000890201384e66744c696d6974506572696f6400002801244368616e6e656c4964000028010c75363400310040546f67676c65644e66744c696d6974730400980110626f6f6c0032004843726561746f72546f6b656e4973737565640c00a5010130436f6e74656e744163746f7200002801244368616e6e656c4964000028011c546f6b656e49640033006843726561746f72546f6b656e49737375657252656d61726b65640c002801244368616e6e656c4964000028011c546f6b656e4964000030011c5665633c75383e003400085c4576656e747320666f722074686973206d6f64756c652e00a5010c3870616c6c65745f636f6e74656e742c7065726d697373696f6e7330436f6e74656e744163746f720c3843757261746f7247726f7570496401282443757261746f7249640128204d656d62657249640128010c1c43757261746f72080028013843757261746f7247726f75704964000028012443757261746f724964000000184d656d62657204002801204d656d6265724964000100104c65616400020000a9010c3870616c6c65745f636f6e74656e74147479706573344368616e6e656c5265636f72642c204d656d626572496401283843757261746f7247726f7570496401281c42616c616e63650118544368616e6e656c50726976696c6567654c6576656c01082c426c6f636b4e756d62657201101c546f6b656e49640128285472616e7366657249640128404368616e6e656c41737365747353657401ad015c4368616e6e656c436f6c6c61626f7261746f72734d617001b10144506175736564466561747572657353657401d10148526570617961626c65426c6f6174426f6e6401e101003801146f776e6572e50101984368616e6e656c4f776e65723c4d656d62657249642c2043757261746f7247726f757049643e0001286e756d5f766964656f7328010c753634000134636f6c6c61626f7261746f7273b101015c4368616e6e656c436f6c6c61626f7261746f72734d617000016463756d756c61746976655f7265776172645f636c61696d656418011c42616c616e636500013c70726976696c6567655f6c6576656c0801544368616e6e656c50726976696c6567654c6576656c00013c7061757365645f6665617475726573d1010144506175736564466561747572657353657400013c7472616e736665725f737461747573e9010179014368616e6e656c5472616e736665725374617475733c4d656d62657249642c2043757261746f7247726f757049642c2042616c616e63652c205472616e7366657249642c0a4368616e6e656c436f6c6c61626f7261746f72734d61702c3e000130646174615f6f626a65637473ad0101404368616e6e656c41737365747353657400013c6461696c795f6e66745f6c696d6974f501016c4c696d6974506572506572696f643c426c6f636b4e756d6265723e0001407765656b6c795f6e66745f6c696d6974f501016c4c696d6974506572506572696f643c426c6f636b4e756d6265723e0001446461696c795f6e66745f636f756e746572f901015c4e6674436f756e7465723c426c6f636b4e756d6265723e0001487765656b6c795f6e66745f636f756e746572f901015c4e6674436f756e7465723c426c6f636b4e756d6265723e00014063726561746f725f746f6b656e5f69643501013c4f7074696f6e3c546f6b656e49643e0001606368616e6e656c5f73746174655f626c6f61745f626f6e64e1010148526570617961626c65426c6f6174426f6e640000ad010c4c626f756e6465645f636f6c6c656374696f6e7344626f756e6465645f62747265655f7365743c426f756e646564425472656553657408045401280453000004006901012c42547265655365743c543e0000b1010c4c626f756e6465645f636f6c6c656374696f6e7344626f756e6465645f62747265655f6d61703c426f756e64656442547265654d61700c044b0128045601b501045300000400c501013842547265654d61703c4b2c20563e0000b5010c4c626f756e6465645f636f6c6c656374696f6e7344626f756e6465645f62747265655f7365743c426f756e646564425472656553657408045401b901045300000400bd01012c42547265655365743c543e0000b901103870616c6c65745f636f6e74656e74147479706573386974657261626c655f656e756d735c4368616e6e656c416374696f6e5065726d697373696f6e000158545570646174654368616e6e656c4d657461646174610000006c4d616e6167654e6f6e566964656f4368616e6e656c417373657473000100684d616e6167654368616e6e656c436f6c6c61626f7261746f72730002004c557064617465566964656f4d6574616461746100030020416464566964656f000400444d616e616765566964656f4173736574730005003444656c6574654368616e6e656c0006002c44656c657465566964656f0007003c4d616e616765566964656f4e6674730008002c4167656e7452656d61726b0009003c5472616e736665724368616e6e656c000a0048436c61696d4368616e6e656c526577617264000b0068576974686472617746726f6d4368616e6e656c42616c616e6365000c0044497373756543726561746f72546f6b656e000d0068436c61696d43726561746f72546f6b656e506174726f6e616765000e0074496e6974416e644d616e61676543726561746f72546f6b656e53616c65000f006843726561746f72546f6b656e4973737565725472616e73666572001000784d616b6543726561746f72546f6b656e5065726d697373696f6e6c6573730011007c52656475636543726561746f72546f6b656e506174726f6e616765526174650012004c4d616e616765526576656e756553706c6974730013004c4465697373756543726561746f72546f6b656e00140028416d6d436f6e74726f6c00150000bd010420425472656553657404045401b901000400c101000000c101000002b90100c501042042547265654d617008044b0128045601b501000400c901000000c901000002cd0100cd010000040828b50100d1010c4c626f756e6465645f636f6c6c656374696f6e7344626f756e6465645f62747265655f7365743c426f756e646564425472656553657408045401d501045300000400d901012c42547265655365743c543e0000d501143870616c6c65745f636f6e74656e742c7065726d697373696f6e733463757261746f725f67726f7570386974657261626c655f656e756d73585061757361626c654368616e6e656c4665617475726500011c504368616e6e656c46756e64735472616e736665720000003843726561746f72436173686f757400010040566964656f4e667449737375616e636500020034566964656f4372656174696f6e0003002c566964656f557064617465000400344368616e6e656c5570646174650005005043726561746f72546f6b656e49737375616e636500060000d9010420425472656553657404045401d501000400dd01000000dd01000002d50100e1010c3470616c6c65745f636f6d6d6f6e28626c6f61745f626f6e6448526570617961626c65426c6f6174426f6e6408244163636f756e74496401001c42616c616e636501180008015c72657061796d656e745f726573747269637465645f746f9401444f7074696f6e3c4163636f756e7449643e000118616d6f756e7418011c42616c616e63650000e5010c3870616c6c65745f636f6e74656e74147479706573304368616e6e656c4f776e657208204d656d626572496401283843757261746f7247726f7570496401280108184d656d62657204002801204d656d62657249640000003043757261746f7247726f7570040028013843757261746f7247726f7570496400010000e9010c3870616c6c65745f636f6e74656e74147479706573544368616e6e656c5472616e7366657253746174757314204d656d626572496401283843757261746f7247726f7570496401281c42616c616e63650118285472616e73666572496401285c4368616e6e656c436f6c6c61626f7261746f72734d617001b1010108404e6f4163746976655472616e736665720000003c50656e64696e675472616e736665720400ed01015d0150656e64696e675472616e736665723c4d656d62657249642c2043757261746f7247726f757049642c2042616c616e63652c205472616e7366657249642c0a4368616e6e656c436f6c6c61626f7261746f72734d61703e00010000ed010c3870616c6c65745f636f6e74656e741474797065733c50656e64696e675472616e7366657214204d656d626572496401283843757261746f7247726f7570496401281c42616c616e63650118285472616e73666572496401285c4368616e6e656c436f6c6c61626f7261746f72734d617001b101000801246e65775f6f776e6572e50101984368616e6e656c4f776e65723c4d656d62657249642c2043757261746f7247726f757049643e00013c7472616e736665725f706172616d73f1010129015472616e73666572436f6d6d69746d656e74506172616d65746572733c4368616e6e656c436f6c6c61626f7261746f72734d61702c2042616c616e63652c205472616e7366657249643e0000f1010c3870616c6c65745f636f6e74656e74147479706573705472616e73666572436f6d6d69746d656e74506172616d65746572730c5c4368616e6e656c436f6c6c61626f7261746f72734d617001b1011c42616c616e63650118285472616e7366657249640128000c01446e65775f636f6c6c61626f7261746f7273b101015c4368616e6e656c436f6c6c61626f7261746f72734d6170000114707269636518011c42616c616e636500012c7472616e736665725f69642801285472616e7366657249640000f5010c3870616c6c65745f636f6e74656e74147479706573384c696d6974506572506572696f64042c426c6f636b4e756d6265720110000801146c696d697428010c75363400014c626c6f636b5f6e756d6265725f706572696f6410012c426c6f636b4e756d6265720000f9010c3870616c6c65745f636f6e74656e74147479706573284e6674436f756e746572042c426c6f636b4e756d62657201100008011c636f756e74657228010c7536340001306c6173745f7570646174656410012c426c6f636b4e756d6265720000fd01103870616c6c65745f636f6e74656e740c6e667414747970657368456e676c69736841756374696f6e506172616d735265636f72640c2c426c6f636b4e756d62657201101c42616c616e63650118204d656d62657249640128001c01387374617274696e675f707269636518011c42616c616e63650001346275795f6e6f775f70726963654501013c4f7074696f6e3c42616c616e63653e00012477686974656c6973746901014842547265655365743c4d656d62657249643e0001247374617274735f61740102014c4f7074696f6e3c426c6f636b4e756d6265723e0001206475726174696f6e10012c426c6f636b4e756d626572000140657874656e73696f6e5f706572696f6410012c426c6f636b4e756d6265720001306d696e5f6269645f7374657018011c42616c616e63650000010204184f7074696f6e04045401100108104e6f6e6500000010536f6d6504001000000100000502103870616c6c65745f636f6e74656e740c6e66741474797065735c4f70656e41756374696f6e506172616d735265636f72640c2c426c6f636b4e756d62657201101c42616c616e63650118204d656d62657249640128001401387374617274696e675f707269636518011c42616c616e63650001346275795f6e6f775f70726963654501013c4f7074696f6e3c42616c616e63653e0001247374617274735f61740102014c4f7074696f6e3c426c6f636b4e756d6265723e00012477686974656c6973746901014842547265655365743c4d656d62657249643e0001446269645f6c6f636b5f6475726174696f6e10012c426c6f636b4e756d62657200000902103870616c6c65745f636f6e74656e740c6e66741474797065736c4e667449737375616e6365506172616d65746572735265636f726408204d656d626572496401285c496e69745472616e73616374696f6e616c537461747573010d020010011c726f79616c74791102013c4f7074696f6e3c526f79616c74793e0001306e66745f6d6574616461746130012c4e66744d657461646174610001446e6f6e5f6368616e6e656c5f6f776e6572350101404f7074696f6e3c4d656d62657249643e000164696e69745f7472616e73616374696f6e616c5f7374617475730d02015c496e69745472616e73616374696f6e616c53746174757300000d02103870616c6c65745f636f6e74656e740c6e667414747970657374496e69745472616e73616374696f6e616c5374617475735265636f72641050456e676c69736841756374696f6e506172616d7301fd01444f70656e41756374696f6e506172616d73010502204d656d626572496401281c42616c616e6365011801141049646c65000000184275794e6f77040018011c42616c616e636500010058496e697469617465644f66666572546f4d656d62657208002801204d656d626572496400004501013c4f7074696f6e3c42616c616e63653e00020038456e676c69736841756374696f6e0400fd010150456e676c69736841756374696f6e506172616d730003002c4f70656e41756374696f6e0400050201444f70656e41756374696f6e506172616d7300040000110204184f7074696f6e04045401ac0108104e6f6e6500000010536f6d650400ac000001000015020c3870616c6c65745f636f6e74656e741474797065737c4368616e6e656c4372656174696f6e506172616d65746572735265636f7264143453746f72616765417373657473011902204d656d626572496401283c53746f726167654275636b65744964012850446973747269627574696f6e4275636b657449640125021c42616c616e63650118001c0118617373657473290201544f7074696f6e3c53746f726167654173736574733e0001106d6574613101013c4f7074696f6e3c5665633c75383e3e000134636f6c6c61626f7261746f72732d0201ac42547265654d61703c4d656d62657249642c204368616e6e656c4167656e745065726d697373696f6e733e00013c73746f726167655f6275636b6574736901016442547265655365743c53746f726167654275636b657449643e000150646973747269627574696f6e5f6275636b6574733902017842547265655365743c446973747269627574696f6e4275636b657449643e00018465787065637465645f6368616e6e656c5f73746174655f626c6f61745f626f6e6418011c42616c616e636500019465787065637465645f646174615f6f626a6563745f73746174655f626c6f61745f626f6e6418011c42616c616e6365000019020c3870616c6c65745f636f6e74656e741474797065734c53746f726167654173736574735265636f7264041c42616c616e63650118000801506f626a6563745f6372656174696f6e5f6c6973741d0201845665633c446174614f626a6563744372656174696f6e506172616d65746572733e00015865787065637465645f646174615f73697a655f66656518011c42616c616e636500001d020000022102002102083870616c6c65745f73746f7261676570446174614f626a6563744372656174696f6e506172616d6574657273000008011073697a6528010c75363400013c697066735f636f6e74656e745f696430011c5665633c75383e00002502083870616c6c65745f73746f7261676568446973747269627574696f6e4275636b657449645265636f72640868446973747269627574696f6e4275636b657446616d696c79496401285c446973747269627574696f6e4275636b6574496e646578012800080174646973747269627574696f6e5f6275636b65745f66616d696c795f6964280168446973747269627574696f6e4275636b657446616d696c794964000164646973747269627574696f6e5f6275636b65745f696e64657828015c446973747269627574696f6e4275636b6574496e6465780000290204184f7074696f6e0404540119020108104e6f6e6500000010536f6d650400190200000100002d02042042547265654d617008044b0128045601bd010004003102000000310200000235020035020000040828bd01003902042042547265655365740404540125020004003d020000003d0200000225020041020c3870616c6c65745f636f6e74656e74147479706573744368616e6e656c557064617465506172616d65746572735265636f7264103453746f7261676541737365747301190230446174614f626a65637449640128204d656d626572496401281c42616c616e63650118001801406173736574735f746f5f75706c6f6164290201544f7074696f6e3c53746f726167654173736574733e0001206e65775f6d6574613101013c4f7074696f6e3c5665633c75383e3e0001406173736574735f746f5f72656d6f76656901015842547265655365743c446174614f626a65637449643e000134636f6c6c61626f7261746f7273450201cc4f7074696f6e3c42547265654d61703c4d656d62657249642c204368616e6e656c4167656e745065726d697373696f6e733e3e00019465787065637465645f646174615f6f626a6563745f73746174655f626c6f61745f626f6e6418011c42616c616e636500016c73746f726167655f6275636b6574735f6e756d5f7769746e6573730102012c4f7074696f6e3c7533323e0000450204184f7074696f6e040454012d020108104e6f6e6500000010536f6d6504002d02000001000049020c3870616c6c65745f636f6e74656e7414747970657374566964656f4372656174696f6e506172616d65746572735265636f72640c3453746f72616765417373657473011902544e667449737375616e6365506172616d65746572730109021c42616c616e6365011800180118617373657473290201544f7074696f6e3c53746f726167654173736574733e0001106d6574613101013c4f7074696f6e3c5665633c75383e3e0001386175746f5f69737375655f6e66744d0201744f7074696f6e3c4e667449737375616e6365506172616d65746572733e00017c65787065637465645f766964656f5f73746174655f626c6f61745f626f6e6418011c42616c616e636500019465787065637465645f646174615f6f626a6563745f73746174655f626c6f61745f626f6e6418011c42616c616e636500016c73746f726167655f6275636b6574735f6e756d5f7769746e65737310010c75333200004d0204184f7074696f6e0404540109020108104e6f6e6500000010536f6d6504000902000001000051020c3870616c6c65745f636f6e74656e741474797065736c566964656f557064617465506172616d65746572735265636f7264103453746f7261676541737365747301190230446174614f626a65637449640128544e667449737375616e6365506172616d65746572730109021c42616c616e63650118001801406173736574735f746f5f75706c6f6164290201544f7074696f6e3c53746f726167654173736574733e0001206e65775f6d6574613101013c4f7074696f6e3c5665633c75383e3e0001406173736574735f746f5f72656d6f76656901015842547265655365743c446174614f626a65637449643e0001386175746f5f69737375655f6e66744d0201744f7074696f6e3c4e667449737375616e6365506172616d65746572733e00019465787065637465645f646174615f6f626a6563745f73746174655f626c6f61745f626f6e6418011c42616c616e636500016c73746f726167655f6275636b6574735f6e756d5f7769746e6573730102012c4f7074696f6e3c7533323e00005502042042547265654d617008044b010804560159020004006502000000590204204254726565536574040454015d0200040061020000005d02143870616c6c65745f636f6e74656e742c7065726d697373696f6e733463757261746f725f67726f7570386974657261626c655f656e756d735c436f6e74656e744d6f6465726174696f6e416374696f6e0001182448696465566964656f0000002c486964654368616e6e656c000100684368616e67654368616e6e656c466561747572655374617475730400d50101585061757361626c654368616e6e656c466561747572650002004444656c657465566964656f4173736574730400980110626f6f6c0003006c44656c6574654e6f6e566964656f4368616e6e656c417373657473000400585570646174654368616e6e656c4e66744c696d6974730005000061020000025d02006502000002690200690200000408085902006d020c3870616c6c65745f636f6e74656e74147479706573705472616e73666572436f6d6d69746d656e74506172616d65746572730c5c4368616e6e656c436f6c6c61626f7261746f72734d6170012d021c42616c616e63650118285472616e7366657249640128000c01446e65775f636f6c6c61626f7261746f72732d02015c4368616e6e656c436f6c6c61626f7261746f72734d6170000114707269636518011c42616c616e636500012c7472616e736665725f69642801285472616e736665724964000071020c3870616c6c65745f636f6e74656e74147479706573905570646174654368616e6e656c5061796f757473506172616d65746572735265636f72640c7c4368616e6e656c5061796f7574735061796c6f6164506172616d65746572730175021c42616c616e636501181048617368012c00140128636f6d6d69746d656e74790201304f7074696f6e3c486173683e00011c7061796c6f61647d02019c4f7074696f6e3c4368616e6e656c5061796f7574735061796c6f6164506172616d65746572733e00014c6d696e5f636173686f75745f616c6c6f7765644501013c4f7074696f6e3c42616c616e63653e00014c6d61785f636173686f75745f616c6c6f7765644501013c4f7074696f6e3c42616c616e63653e0001606368616e6e656c5f636173686f7574735f656e61626c6564810201304f7074696f6e3c626f6f6c3e000075020c3870616c6c65745f636f6e74656e74147479706573944368616e6e656c5061796f7574735061796c6f6164506172616d65746572735265636f7264041c42616c616e63650118000c01586f626a6563745f6372656174696f6e5f706172616d7321020170446174614f626a6563744372656174696f6e506172616d657465727300015865787065637465645f646174615f73697a655f66656518011c42616c616e636500019465787065637465645f646174615f6f626a6563745f73746174655f626c6f61745f626f6e6418011c42616c616e63650000790204184f7074696f6e040454012c0108104e6f6e6500000010536f6d6504002c00000100007d0204184f7074696f6e0404540175020108104e6f6e6500000010536f6d65040075020000010000810204184f7074696f6e04045401980108104e6f6e6500000010536f6d65040098000001000085020c3870616c6c65745f636f6e74656e741474797065735c4368616e6e656c46756e647344657374696e6174696f6e04244163636f756e74496401000108244163636f756e74496404000001244163636f756e74496400000034436f756e63696c4275646765740001000089020c3870616c6c65745f636f6e74656e74147479706573384e66744c696d6974506572696f64000108144461696c79000000185765656b6c79000100008d02083870616c6c65745f73746f72616765205261774576656e74303c53746f726167654275636b65744964012820576f726b65724964012830446174614f626a656374496401284055706c6f6164506172616d65746572730191021442616749640195023044796e616d69634261674964019d02244163636f756e74496401001c42616c616e6365011868446973747269627574696f6e4275636b657446616d696c794964012850446973747269627574696f6e4275636b657449640125025c446973747269627574696f6e4275636b6574496e64657801287044796e616d69634261674372656174696f6e506172616d657465727301a10201a85053746f726167654275636b657443726561746564140028013c53746f726167654275636b657449640000350101404f7074696f6e3c576f726b657249643e0000980110626f6f6c000028010c753634000028010c75363400001c94456d697473206f6e206372656174696e67207468652073746f72616765206275636b65742e18506172616d734c2d2073746f72616765206275636b6574204944402d20696e766974656420776f726b65726c2d20666c61672022616363657074696e675f6e65775f6261677322642d2073697a65206c696d697420666f7220766f75636865722c702d206f626a65637473206c696d697420666f7220766f75636865722c7c53746f726167654275636b6574496e7669746174696f6e41636365707465640c0028013c53746f726167654275636b657449640000280120576f726b6572496400000001244163636f756e744964000114c4456d697473206f6e20616363657074696e67207468652073746f72616765206275636b657420696e7669746174696f6e2e18506172616d734c2d2073746f72616765206275636b65742049444c2d20696e766974656420776f726b65722049445c2d207472616e736163746f72206163636f756e742049446c53746f726167654275636b65747355706461746564466f724261670c0095020114426167496400006901016442547265655365743c53746f726167654275636b657449643e00006901016442547265655365743c53746f726167654275636b657449643e000214a8456d697473206f6e207570646174696e672073746f72616765206275636b65747320666f72206261672e18506172616d73202d20626167204944982d2073746f72616765206275636b65747320746f2061646420494420636f6c6c656374696f6ea42d2073746f72616765206275636b65747320746f2072656d6f766520494420636f6c6c656374696f6e4c446174614f626a6563747355706c6f616465640c006901015842547265655365743c446174614f626a65637449643e00009102014055706c6f6164506172616d6574657273000018011c42616c616e636500031480456d697473206f6e2075706c6f6164696e672064617461206f626a656374732e18506172616d73482d2064617461206f626a6563747320494473782d20696e697469616c2075706c6f6164696e6720706172616d6574657273782d20737461746520626c6f617420626f6e6420666f72206f626a656374736853746f726167654f70657261746f724d657461646174615365740c0028013c53746f726167654275636b657449640000280120576f726b65724964000030011c5665633c75383e000414bc456d697473206f6e2073657474696e67207468652073746f72616765206f70657261746f72206d657461646174612e18506172616d734c2d2073746f72616765206275636b65742049444c2d20696e766974656420776f726b6572204944282d206d657461646174617453746f726167654275636b6574566f75636865724c696d6974735365740c0028013c53746f726167654275636b65744964000028010c753634000028010c753634000514cc456d697473206f6e2073657474696e67207468652073746f72616765206275636b657420766f7563686572206c696d6974732e18506172616d734c2d2073746f72616765206275636b6574204944782d206e657720746f74616c206f626a656374732073697a65206c696d6974802d206e657720746f74616c206f626a65637473206e756d626572206c696d69746850656e64696e67446174614f626a656374734163636570746564100028013c53746f726167654275636b657449640000280120576f726b65724964000095020114426167496400006901015842547265655365743c446174614f626a65637449643e000618a0456d697473206f6e20616363657074696e672070656e64696e672064617461206f626a656374732e18506172616d734c2d2073746f72616765206275636b6574204944842d20776f726b6572204944202873746f726167652070726f766964657220494429202d20626167204944582d2070656e64696e672064617461206f626a656374738053746f726167654275636b6574496e7669746174696f6e43616e63656c6c6564040028013c53746f726167654275636b6574496400070cc8456d697473206f6e2063616e63656c6c696e67207468652073746f72616765206275636b657420696e7669746174696f6e2e18506172616d734c2d2073746f72616765206275636b65742049447053746f726167654275636b65744f70657261746f72496e7669746564080028013c53746f726167654275636b657449640000280120576f726b65724964000810c0456d697473206f6e207468652073746f72616765206275636b6574206f70657261746f7220696e7669746174696f6e2e18506172616d734c2d2073746f72616765206275636b6574204944a82d206f70657261746f7220776f726b6572204944202873746f726167652070726f7669646572204944297053746f726167654275636b65744f70657261746f7252656d6f766564040028013c53746f726167654275636b6574496400090cb4456d697473206f6e207468652073746f72616765206275636b6574206f70657261746f722072656d6f76616c2e18506172616d734c2d2073746f72616765206275636b65742049446c55706c6f6164696e67426c6f636b537461747573557064617465640400980110626f6f6c000a0c0501456d697473206f6e206368616e67696e67207468652073697a652d62617365642070726963696e67206f66206e6577206f626a656374732075706c6f616465642e18506172616d73302d206e6577207374617475737c446174614f626a6563745065724d6567616279746546656555706461746564040018011c42616c616e6365000b0c0501456d697473206f6e206368616e67696e67207468652073697a652d62617365642070726963696e67206f66206e6577206f626a656374732075706c6f616465642e18506172616d734c2d206e657720646174612073697a65206665658053746f726167654275636b6574735065724261674c696d697455706461746564040010010c753332000c0cf4456d697473206f6e206368616e67696e6720746865202253746f72616765206275636b657473207065722062616722206e756d626572206c696d69742e18506172616d732c2d206e6577206c696d69749453746f726167654275636b657473566f75636865724d61784c696d69747355706461746564080028010c753634000028010c753634000d10ec456d697473206f6e206368616e67696e6720746865202253746f72616765206275636b65747320766f7563686572206d6178206c696d697473222e18506172616d73602d206e6577206f626a656374732073697a65206c696d6974682d206e6577206f626a65637473206e756d626572206c696d697440446174614f626a656374734d6f7665640c00950201144261674964000095020114426167496400006901015842547265655365743c446174614f626a65637449643e000e14a8456d697473206f6e206d6f76696e672064617461206f626a65637473206265747765656e20626167732e18506172616d733c2d20736f7572636520626167204944502d2064657374696e6174696f6e20626167204944442d2064617461206f626a6563742049447348446174614f626a6563747344656c657465640c000001244163636f756e744964000095020114426167496400006901015842547265655365743c446174614f626a65637449643e000f14a4456d697473206f6e2064617461206f626a656374732064656c6574696f6e2066726f6d20626167732e18506172616d73942d206163636f756e7420494420666f722074686520737461746520626c6f617420626f6e64202d20626167204944442d2064617461206f626a656374204944736853746f726167654275636b657453746174757355706461746564080028013c53746f726167654275636b657449640000980110626f6f6c00101098456d697473206f6e2073746f72616765206275636b657420737461747573207570646174652e18506172616d734c2d2073746f72616765206275636b6574204944302d206e6577207374617475733c557064617465426c61636b6c6973740800a502014442547265655365743c5665633c75383e3e0000a502014442547265655365743c5665633c75383e3e001110c4456d697473206f6e207570646174696e672074686520626c61636b6c69737420776974682064617461206861736865732e18506172616d73942d2068617368657320746f2072656d6f76652066726f6d2074686520626c61636b6c697374802d2068617368657320746f2061646420746f2074686520626c61636b6c6973744444796e616d696342616744656c6574656404009d02013044796e616d6963426167496400120c80456d697473206f6e2064656c6574696e6720612064796e616d6963206261672e18506172616d73402d2064796e616d6963206261672049444444796e616d6963426167437265617465640800a102017044796e616d69634261674372656174696f6e506172616d657465727300006901015842547265655365743c446174614f626a65637449643e00131080456d697473206f6e206372656174696e6720612064796e616d6963206261672e18506172616d73842d2064796e616d696320626167206372656174696f6e20706172616d65746572736c2d2075706c6f616465642064617461206f626a656374732069647338566f75636865724368616e676564080028013c53746f726167654275636b657449640000ad02011c566f7563686572001410cc456d697473206f6e206368616e67696e672074686520766f756368657220666f7220612073746f72616765206275636b65742e18506172616d734c2d2073746f72616765206275636b6574204944342d206e657720766f75636865725053746f726167654275636b657444656c65746564040028013c53746f726167654275636b6574496400150c84456d697473206f6e2073746f72616765206275636b65742064656c6574696e672e18506172616d734c2d2073746f72616765206275636b6574204944dc4e756d6265724f6653746f726167654275636b657473496e44796e616d69634261674372656174696f6e506f6c696379557064617465640800b102013844796e616d696342616754797065000010010c7533320016103d01456d697473206f6e207570646174696e6720746865206e756d626572206f662073746f72616765206275636b65747320696e2064796e616d696320626167206372656174696f6e20706f6c6963792e18506172616d73482d2064796e616d69632062616720747970657c2d206e6577206e756d626572206f662073746f72616765206275636b6574737c446973747269627574696f6e4275636b657446616d696c79437265617465640400280168446973747269627574696f6e4275636b657446616d696c79496400170cb4456d697473206f6e206372656174696e6720646973747269627574696f6e206275636b65742066616d696c792e18506172616d737c2d20646973747269627574696f6e2066616d696c79206275636b65742049447c446973747269627574696f6e4275636b657446616d696c7944656c657465640400280168446973747269627574696f6e4275636b657446616d696c79496400180cb4456d697473206f6e2064656c6574696e6720646973747269627574696f6e206275636b65742066616d696c792e18506172616d737c2d20646973747269627574696f6e2066616d696c79206275636b657420494464446973747269627574696f6e4275636b6574437265617465640c00280168446973747269627574696f6e4275636b657446616d696c7949640000980110626f6f6c000025020150446973747269627574696f6e4275636b6574496400191498456d697473206f6e206372656174696e6720646973747269627574696f6e206275636b65742e18506172616d737c2d20646973747269627574696f6e206275636b65742066616d696c79204944502d20616363657074696e67206e65772062616773602d20646973747269627574696f6e206275636b65742049447c446973747269627574696f6e4275636b657453746174757355706461746564080025020150446973747269627574696f6e4275636b657449640000980110626f6f6c001a10ec456d697473206f6e2073746f72616765206275636b657420737461747573207570646174652028616363657074696e67206e65772062616773292e18506172616d73602d20646973747269627574696f6e206275636b6574204944842d206e6577207374617475732028616363657074696e67206e657720626167732964446973747269627574696f6e4275636b657444656c65746564040025020150446973747269627574696f6e4275636b65744964001b0c98456d697473206f6e2064656c6574696e6720646973747269627574696f6e206275636b65742e18506172616d73602d20646973747269627574696f6e206275636b657420494480446973747269627574696f6e4275636b65747355706461746564466f7242616710009502011442616749640000280168446973747269627574696f6e4275636b657446616d696c79496400006901018442547265655365743c446973747269627574696f6e4275636b6574496e6465783e00006901018442547265655365743c446973747269627574696f6e4275636b6574496e6465783e001c14bc456d697473206f6e207570646174696e6720646973747269627574696f6e206275636b65747320666f72206261672e18506172616d73202d20626167204944982d2073746f72616765206275636b65747320746f2061646420494420636f6c6c656374696f6ea42d2073746f72616765206275636b65747320746f2072656d6f766520494420636f6c6c656374696f6e94446973747269627574696f6e4275636b6574735065724261674c696d697455706461746564040010010c753332001d0c0901456d697473206f6e206368616e67696e67207468652022446973747269627574696f6e206275636b657473207065722062616722206e756d626572206c696d69742e18506172616d732c2d206e6577206c696d697474446973747269627574696f6e4275636b65744d6f646555706461746564080025020150446973747269627574696f6e4275636b657449640000980110626f6f6c001e10e0456d697473206f6e2073746f72616765206275636b6574206d6f6465207570646174652028646973747269627574696e6720666c6167292e18506172616d73602d20646973747269627574696f6e206275636b6574204944382d20646973747269627574696e67a446616d696c696573496e44796e616d69634261674372656174696f6e506f6c696379557064617465640800b102013844796e616d6963426167547970650000b50201a442547265654d61703c446973747269627574696f6e4275636b657446616d696c7949642c207533323e001f102d01456d697473206f6e2064796e616d696320626167206372656174696f6e20706f6c696379207570646174652028646973747269627574696f6e206275636b65742066616d696c696573292e18506172616d73482d2064796e616d6963206261672074797065742d2066616d696c69657320616e64206275636b6574206e756d6265727384446973747269627574696f6e4275636b65744f70657261746f72496e7669746564080025020150446973747269627574696f6e4275636b657449640000280120576f726b657249640020101101456d697473206f6e206372656174696e67206120646973747269627574696f6e206275636b657420696e7669746174696f6e20666f7220746865206f70657261746f722e18506172616d73602d20646973747269627574696f6e206275636b65742049442c2d20776f726b657220494494446973747269627574696f6e4275636b6574496e7669746174696f6e43616e63656c6c6564080025020150446973747269627574696f6e4275636b657449640000280120576f726b657249640021101501456d697473206f6e2063616e63656c696e67206120646973747269627574696f6e206275636b657420696e7669746174696f6e20666f7220746865206f70657261746f722e18506172616d73602d20646973747269627574696f6e206275636b6574204944502d206f70657261746f7220776f726b657220494490446973747269627574696f6e4275636b6574496e7669746174696f6e41636365707465640800280120576f726b65724964000025020150446973747269627574696f6e4275636b657449640022101501456d697473206f6e20616363657074696e67206120646973747269627574696f6e206275636b657420696e7669746174696f6e20666f7220746865206f70657261746f722e18506172616d732c2d20776f726b6572204944602d20646973747269627574696f6e206275636b657420494474446973747269627574696f6e4275636b65744d657461646174615365740c00280120576f726b65724964000025020150446973747269627574696f6e4275636b65744964000030011c5665633c75383e0023140101456d697473206f6e2073657474696e6720746865206d65746164617461206279206120646973747269627574696f6e206275636b6574206f70657261746f722e18506172616d732c2d20776f726b6572204944602d20646973747269627574696f6e206275636b6574204944282d206d6574616461746184446973747269627574696f6e4275636b65744f70657261746f7252656d6f766564080025020150446973747269627574696f6e4275636b657449640000280120576f726b65724964002410c8456d697473206f6e2074686520646973747269627574696f6e206275636b6574206f70657261746f722072656d6f76616c2e18506172616d73602d20646973747269627574696f6e206275636b6574204944842d20646973747269627574696f6e206275636b6574206f70657261746f722049448c446973747269627574696f6e4275636b657446616d696c794d657461646174615365740800280168446973747269627574696f6e4275636b657446616d696c794964000030011c5665633c75383e002510f8456d697473206f6e2073657474696e6720746865206d65746164617461206279206120646973747269627574696f6e206275636b65742066616d696c792e18506172616d737c2d20646973747269627574696f6e206275636b65742066616d696c79204944282d206d6574616461746190446174614f626a6563745374617465426c6f6174426f6e6456616c756555706461746564040018011c42616c616e636500260ccc456d697473206f6e207570646174696e67207468652064617461206f626a65637420737461746520626c6f617420626f6e642e18506172616d73602d20737461746520626c6f617420626f6e642076616c756548446174614f626a65637473557064617465640c009102014055706c6f6164506172616d657465727300006901015842547265655365743c446174614f626a65637449643e00006901015842547265655365743c446174614f626a65637449643e0027140d01456d697473206f6e2073746f7261676520617373657473206265696e672075706c6f6164656420616e642064656c65746564206174207468652073616d652074696d6518506172616d73482d2055706c6f6164506172616d6574657273742d20496473206f66207468652075706c6f61646564206f626a65637473702d20496473206f66207468652072656d6f766564206f626a656374735c53746f726167654f70657261746f7252656d61726b65640c00280120576f726b65724964000028013c53746f726167654275636b65744964000030011c5665633c75383e002814a4456d697473206f6e2053746f72616765204f70657261746f72206d616b696e6720612072656d61726b18506172616d73582d206f70657261746f72277320776f726b65722069644c2d2073746f72616765206275636b6574206964402d2072656d61726b206d65737361676570446973747269627574696f6e4f70657261746f7252656d61726b65640c00280120576f726b65724964000025020150446973747269627574696f6e4275636b65744964000030011c5665633c75383e002914b8456d697473206f6e20446973747269627574696f6e204f70657261746f72206d616b696e6720612072656d61726b18506172616d73582d206f70657261746f72277320776f726b6572206964602d20646973747269627574696f6e206275636b6574206964402d2072656d61726b206d6573736167650c5c4576656e747320666f722074686973206d6f64756c652e003853746f72616765206576656e74739102083870616c6c65745f73746f726167655855706c6f6164506172616d65746572735265636f72640c144261674964019502244163636f756e74496401001c42616c616e63650118001401186261675f69649502011442616749640001506f626a6563745f6372656174696f6e5f6c6973741d0201845665633c446174614f626a6563744372656174696f6e506172616d65746572733e00018873746174655f626c6f61745f626f6e645f736f757263655f6163636f756e745f69640001244163636f756e74496400015865787065637465645f646174615f73697a655f66656518011c42616c616e636500019465787065637465645f646174615f6f626a6563745f73746174655f626c6f61745f626f6e6418011c42616c616e636500009502083870616c6c65745f73746f726167652442616749645479706508204d656d62657249640128244368616e6e656c4964012801081853746174696304009902012c53746174696342616749640000001c44796e616d696304009d02019444796e616d69634261674964547970653c4d656d62657249642c204368616e6e656c49643e000100009902083870616c6c65745f73746f726167652c53746174696342616749640001081c436f756e63696c00000030576f726b696e6747726f7570040099010130576f726b696e6747726f7570000100009d02083870616c6c65745f73746f726167654044796e616d696342616749645479706508204d656d62657249640128244368616e6e656c496401280108184d656d62657204002801204d656d62657249640000001c4368616e6e656c04002801244368616e6e656c496400010000a102083870616c6c65745f73746f726167657844796e4261674372656174696f6e506172616d65746572735265636f726414144261674964019d02244163636f756e74496401001c42616c616e636501183c53746f726167654275636b65744964012850446973747269627574696f6e4275636b65744964012502001c01186261675f69649d02011442616749640001506f626a6563745f6372656174696f6e5f6c6973741d0201845665633c446174614f626a6563744372656174696f6e506172616d65746572733e00018873746174655f626c6f61745f626f6e645f736f757263655f6163636f756e745f69640001244163636f756e74496400015865787065637465645f646174615f73697a655f66656518011c42616c616e636500019465787065637465645f646174615f6f626a6563745f73746174655f626c6f61745f626f6e6418011c42616c616e636500013c73746f726167655f6275636b6574736901016442547265655365743c53746f726167654275636b657449643e000150646973747269627574696f6e5f6275636b6574733902017842547265655365743c446973747269627574696f6e4275636b657449643e0000a502042042547265655365740404540130000400a902000000a9020000023000ad02083870616c6c65745f73746f726167651c566f7563686572000010012873697a655f6c696d697428010c7536340001346f626a656374735f6c696d697428010c75363400012473697a655f7573656428010c7536340001306f626a656374735f7573656428010c7536340000b102083870616c6c65745f73746f726167653844796e616d696342616754797065000108184d656d6265720000001c4368616e6e656c00010000b502042042547265654d617008044b012804560110000400b902000000b902000002bd0200bd0200000408281000c1020c5070616c6c65745f70726f6a6563745f746f6b656e186576656e7473205261774576656e742c1c42616c616e63650118284a6f7942616c616e636501181c546f6b656e49640128244163636f756e7449640100204d656d626572496401282c426c6f636b4e756d6265720110385472616e73666572506f6c69637901c5025c546f6b656e49737375616e6365506172616d657465727301c9024856616c6964617465645472616e736665727301fd0224546f6b656e53616c6501210320416d6d4375727665012503015c58546f6b656e416d6f756e745472616e73666572726564100028011c546f6b656e496400002801204d656d62657249640000fd02014856616c6964617465645472616e7366657273000030011c5665633c75383e000018ac546f6b656e20616d6f756e74206973207472616e736665727265642066726f6d2073726320746f206473741c506172616d733a482d20746f6b656e206964656e746966696572482d20736f75726365206d656d62657220696459012d206d617020636f6e7461696e696e672076616c696461746564206f7574707574732028616d6f756e7420696e646578656420627920286d656d6265725f6964202b206163636f756e74206578697374616e63652929542d207472616e736665722773206d6574616461746178546f6b656e416d6f756e745472616e736665727265644279497373756572100028011c546f6b656e496400002801204d656d62657249640000fd02014856616c6964617465645472616e7366657273000030011c5665633c75383e00012088546f6b656e20616d6f756e74207472616e73666572726564206279206973737565721c506172616d733a482d20746f6b656e206964656e7469666965726c2d20736f75726365202869737375657229206d656d626572206964882d206d617020636f6e7461696e696e672076616c696461746564206f7574707574732d01202028616d6f756e742c206f70742e2076657374696e67207363686564756c652c206f70742e2076657374696e6720636c65616e7570206b657929206461746120696e6465786564206279882020286163636f756e745f6964202b206163636f756e74206578697374616e636529542d207472616e736665722773206d6574616461746160506174726f6e61676552617465446563726561736564546f080028011c546f6b656e49640000f9020128596561726c795261746500021060506174726f6e6167652072617465206465637265617365641c506172616d733a482d20746f6b656e206964656e746966696572502d206e657720706174726f6e616765207261746558506174726f6e616765437265646974436c61696d65640c0028011c546f6b656e4964000018011c42616c616e636500002801204d656d62657249640003148c506174726f6e6167652063726564697420636c61696d65642062792063726561746f721c506172616d733a482d20746f6b656e206964656e7469666965723c2d2063726564697420616d6f756e742c2d206d656d62657220696448526576656e756553706c6974497373756564100028011c546f6b656e4964000010012c426c6f636b4e756d626572000010012c426c6f636b4e756d62657200001801284a6f7942616c616e636500041850526576656e75652053706c6974206973737565641c506172616d733a482d20746f6b656e206964656e746966696572782d207374617274696e6720626c6f636b20666f72207468652073706c69745c2d206475726174696f6e206f66207468652073706c6974742d204a4f5920616c6c6f636174656420666f72207468652073706c697454526576656e756553706c697446696e616c697a65640c0028011c546f6b656e496400000001244163636f756e74496400001801284a6f7942616c616e63650005145c526576656e75652053706c69742066696e616c697a65641c506172616d733a482d20746f6b656e206964656e746966696572a42d207265636f76657279206163636f756e7420666f7220746865206c6566746f7665722066756e6473402d206c6566746f7665722066756e64735c55736572506172746963697061746564496e53706c6974140028011c546f6b656e496400002801204d656d6265724964000018011c42616c616e636500001801284a6f7942616c616e63650000100138526576656e756553706c6974496400061c8855736572207061727469706174656420696e206120726576656e75652073706c69741c506172616d733a482d20746f6b656e206964656e746966696572642d207061727469636970616e742773206d656d6265722069647c2d207573657220616c6c6f6361746564207374616b65642062616c616e63657c2d206469766964656e6420616d6f756e7420284a4f5929206772616e746564682d20726576656e75652073706c6974206964656e74696669657240526576656e756553706c69744c6566740c0028011c546f6b656e496400002801204d656d6265724964000018011c42616c616e63650007145c55736572206c65667420726576656e75652073706c69741c506172616d733a482d20746f6b656e206964656e746966696572702d2065782d7061727469636970616e742773206d656d626572206964442d20616d6f756e7420756e7374616b6564544d656d6265724a6f696e656457686974656c6973740c0028011c546f6b656e496400002801204d656d62657249640000c50201385472616e73666572506f6c6963790008145c4d656d626572206a6f696e65642077686974656c6973741c506172616d733a482d20746f6b656e206964656e7469666965722c2d206d656d626572206964642d206f6e676f696e67207472616e7366657220706f6c6963793c4163636f756e744475737465644279100028011c546f6b656e496400002801204d656d626572496400000001244163636f756e7449640000c50201385472616e73666572506f6c696379000918384163636f756e74204475737465641c506172616d733a482d20746f6b656e206964656e7469666965729c2d206964206f662074686520647573746564206163636f756e74206f776e6572206d656d6265728c2d206163636f756e7420746861742063616c6c6564207468652065787472696e736963402d206f6e676f696e6720706f6c69637934546f6b656e4465697373756564040028011c546f6b656e4964000a0c38546f6b656e2044656973737565641c506172616d733a282d20746f6b656e2069642c546f6b656e497373756564080028011c546f6b656e49640000c902015c546f6b656e49737375616e6365506172616d6574657273000b1030546f6b656e204973737565641c506172616d733a282d20746f6b656e2069646c2d20746f6b656e2069737375616e636520706172616d657465727350546f6b656e53616c65496e697469616c697a6564100028011c546f6b656e4964000010012c546f6b656e53616c654964000021030124546f6b656e53616c6500003101013c4f7074696f6e3c5665633c75383e3e000c1864546f6b652053616c652077617320496e697469616c697a65641c506172616d733a282d20746f6b656e2069643c2d20746f6b656e2073616c65206964442d20746f6b656e2073616c652064617461542d20746f6b656e2073616c65206d65746164617461605570636f6d696e67546f6b656e53616c6555706461746564100028011c546f6b656e4964000010012c546f6b656e53616c65496400000102014c4f7074696f6e3c426c6f636b4e756d6265723e00000102014c4f7074696f6e3c426c6f636b4e756d6265723e000d187c5570636f6d696e6720546f6b656e2053616c652077617320557064617465641c506172616d733a282d20746f6b656e2069643c2d20746f6b656e2073616c65206964582d206e65772073616c6520737461727420626c6f636b4c2d206e65772073616c65206475726174696f6e54546f6b656e735075726368617365644f6e53616c65100028011c546f6b656e4964000010012c546f6b656e53616c654964000018011c42616c616e636500002801204d656d6265724964000e1860546f6b656e7320507572636861736564204f6e2053616c651c506172616d733a282d20746f6b656e2069643c2d20746f6b656e2073616c65206964702d20616d6f756e74206f6620746f6b656e73207075726368617365644c2d2062757965722773206d656d62657220696448546f6b656e53616c6546696e616c697a6564100028011c546f6b656e4964000010012c546f6b656e53616c654964000018011c42616c616e636500001801284a6f7942616c616e6365000f1850546f6b656e2053616c652046696e616c697a65641c506172616d733a282d20746f6b656e2069643c2d20746f6b656e2073616c652069648c2d20616d6f756e74206f6620756e736f6c6420746f6b656e73207265636f7665726564642d20616d6f756e74206f66204a4f5920636f6c6c6563746564945472616e73666572506f6c6963794368616e676564546f5065726d697373696f6e6c657373040028011c546f6b656e496400100ca45472616e7366657220506f6c696379204368616e67656420546f205065726d697373696f6e6c6573731c506172616d733a282d20746f6b656e20696430546f6b656e734275726e65640c0028011c546f6b656e496400002801204d656d6265724964000018011c42616c616e636500111434546f6b656e73204275726e65641c506172616d733a282d20746f6b656e2069642c2d206d656d626572206964642d206e756d626572206f6620746f6b656e73206275726e656430416d6d4163746976617465640c0028011c546f6b656e496400002801204d656d6265724964000025030120416d6d437572766500121434414d4d206163746976617465641c506172616d733a282d20746f6b656e2069642c2d206d656d626572206964782d20706172616d7320666f722074686520626f6e64696e6720637572766544546f6b656e73426f756768744f6e416d6d100028011c546f6b656e496400002801204d656d6265724964000018011c42616c616e636500001801284a6f7942616c616e636500131850546f6b656e7320426f75676874206f6e20414d4d1c506172616d733a282d20746f6b656e2069642c2d206d656d626572206964582d20616d6f756e74206f6620435254206d696e746564b42d20616d6f756e74206f66204a4f59206465706f736974656420696e746f2063757276652074726561737572793c546f6b656e73536f6c644f6e416d6d100028011c546f6b656e496400002801204d656d6265724964000018011c42616c616e636500001801284a6f7942616c616e636500141848546f6b656e7320536f6c64206f6e20414d4d1c506172616d733a282d20746f6b656e2069642c2d206d656d626572206964582d20616d6f756e74206f6620435254206275726e6564b42d20616d6f756e74206f66204a4f592077697468647261776e2066726f6d20637572766520747265617375727938416d6d44656163746976617465640c0028011c546f6b656e496400002801204d656d626572496400001801284a6f7942616c616e63650015143c414d4d2064656163746976617465641c506172616d733a282d20746f6b656e2069642c2d206d656d626572206964b82d20616d6d20747265617375727920616d6f756e74206275726e65642075706f6e20646561637469766174696f6e4c46726f7a656e537461747573557064617465640400980110626f6f6c00160c7050616c6c65742046726f7a656e2073746174757320746f67676c65641c506172616d733a882d206e65772066726f7a656e20737461747573202874727565207c2066616c736529085c4576656e747320666f722074686973206d6f64756c652e00c5020c5070616c6c65745f70726f6a6563745f746f6b656e147479706573385472616e73666572506f6c696379041048617368012c0108385065726d697373696f6e6c657373000000305065726d697373696f6e656404002c01104861736800010000c9020c5070616c6c65745f70726f6a6563745f746f6b656e1474797065735c546f6b656e49737375616e6365506172616d65746572730c3c546f6b656e416c6c6f636174696f6e01cd02505472616e73666572506f6c696379506172616d7301dd02204d656d6265724964012800140148696e697469616c5f616c6c6f636174696f6eed02018c42547265654d61703c4d656d62657249642c20546f6b656e416c6c6f636174696f6e3e00013c7472616e736665725f706f6c696379dd0201505472616e73666572506f6c696379506172616d73000138706174726f6e6167655f72617465f9020128596561726c7952617465000148726576656e75655f73706c69745f72617465d502011c5065726d696c6c0001206d6574616461746130011c5665633c75383e0000cd020c5070616c6c65745f70726f6a6563745f746f6b656e1474797065733c546f6b656e416c6c6f636174696f6e081c42616c616e636501185456657374696e675363686564756c65506172616d7301d10200080118616d6f756e7418011c42616c616e636500015c76657374696e675f7363686564756c655f706172616d73d90201744f7074696f6e3c56657374696e675363686564756c65506172616d733e0000d1020c5070616c6c65745f70726f6a6563745f746f6b656e1474797065735456657374696e675363686564756c65506172616d73042c426c6f636b4e756d6265720110000c015c6c696e6561725f76657374696e675f6475726174696f6e10012c426c6f636b4e756d62657200014c626c6f636b735f6265666f72655f636c69666610012c426c6f636b4e756d62657200015c636c6966665f616d6f756e745f70657263656e74616765d502011c5065726d696c6c0000d5020c3473705f61726974686d65746963287065725f7468696e67731c5065726d696c6c0000040010010c7533320000d90204184f7074696f6e04045401d1020108104e6f6e6500000010536f6d650400d1020000010000dd020c5070616c6c65745f70726f6a6563745f746f6b656e147479706573505472616e73666572506f6c696379506172616d73043c57686974656c697374506172616d7301e1020108385065726d697373696f6e6c657373000000305065726d697373696f6e65640400e102013c57686974656c697374506172616d7300010000e1020c5070616c6c65745f70726f6a6563745f746f6b656e1474797065733c57686974656c697374506172616d73081048617368012c7053696e676c65446174614f626a65637455706c6f6164506172616d7301e50200080128636f6d6d69746d656e742c01104861736800011c7061796c6f6164e90201904f7074696f6e3c53696e676c65446174614f626a65637455706c6f6164506172616d733e0000e5020c5070616c6c65745f70726f6a6563745f746f6b656e1474797065737053696e676c65446174614f626a65637455706c6f6164506172616d7304284a6f7942616c616e63650118000c01586f626a6563745f6372656174696f6e5f706172616d7321020170446174614f626a6563744372656174696f6e506172616d657465727300015865787065637465645f646174615f73697a655f6665651801284a6f7942616c616e636500019465787065637465645f646174615f6f626a6563745f73746174655f626c6f61745f626f6e641801284a6f7942616c616e63650000e90204184f7074696f6e04045401e5020108104e6f6e6500000010536f6d650400e5020000010000ed02042042547265654d617008044b0128045601cd02000400f102000000f102000002f50200f5020000040828cd0200f9020c5070616c6c65745f70726f6a6563745f746f6b656e14747970657328596561726c795261746500000400d502011c5065726d696c6c0000fd020c5070616c6c65745f70726f6a6563745f746f6b656e147479706573245472616e736665727308204d656d62657249640101031c5061796d656e740105030004001503016c42547265654d61703c4d656d62657249642c205061796d656e743e000001030c5070616c6c65745f70726f6a6563745f746f6b656e1474797065732456616c69646174656404204d656d626572496401280108204578697374696e6704002801204d656d62657249640000002c4e6f6e4578697374696e6704002801204d656d62657249640001000005030c5070616c6c65745f70726f6a6563745f746f6b656e1474797065734056616c6964617465645061796d656e7404485061796d656e745769746856657374696e670109030008011c7061796d656e74090301485061796d656e745769746856657374696e6700016476657374696e675f636c65616e75705f63616e6469646174650d0301544f7074696f6e3c56657374696e67536f757263653e000009030c5070616c6c65745f70726f6a6563745f746f6b656e147479706573485061796d656e745769746856657374696e67081c42616c616e636501185456657374696e675363686564756c65506172616d7301d10200080118616d6f756e7418011c42616c616e636500014076657374696e675f7363686564756c65d90201744f7074696f6e3c56657374696e675363686564756c65506172616d733e00000d0304184f7074696f6e0404540111030108104e6f6e6500000010536f6d6504001103000001000011030c5070616c6c65745f70726f6a6563745f746f6b656e1474797065733456657374696e67536f7572636500010c3c496e697469616c49737375616e63650000001053616c65040010012c546f6b656e53616c654964000100384973737565725472616e73666572040028010c753634000200001503042042547265654d617008044b0101030456010503000400190300000019030000021d03001d0300000408010305030021030c5070616c6c65745f70726f6a6563745f746f6b656e14747970657324546f6b656e53616c6518284a6f7942616c616e636501181c42616c616e636501182c426c6f636b4e756d62657201105456657374696e675363686564756c65506172616d7301d102204d656d62657249640128244163636f756e744964010000280128756e69745f70726963651801284a6f7942616c616e63650001347175616e746974795f6c65667418011c42616c616e636500013c66756e64735f636f6c6c65637465641801284a6f7942616c616e6365000134746f6b656e735f736f757263652801204d656d62657249640001506561726e696e67735f64657374696e6174696f6e9401444f7074696f6e3c4163636f756e7449643e00012c73746172745f626c6f636b10012c426c6f636b4e756d6265720001206475726174696f6e10012c426c6f636b4e756d62657200015c76657374696e675f7363686564756c655f706172616d73d90201744f7074696f6e3c56657374696e675363686564756c65506172616d733e0001386361705f7065725f6d656d6265724501013c4f7074696f6e3c42616c616e63653e0001346175746f5f66696e616c697a65980110626f6f6c000025030c5070616c6c65745f70726f6a6563745f746f6b656e14747970657320416d6d4375727665041c42616c616e63650118000c0114736c6f706518011c42616c616e6365000124696e7465726365707418011c42616c616e636500013c70726f76696465645f737570706c7918011c42616c616e636500002903085c70616c6c65745f70726f706f73616c735f656e67696e65205261774576656e740c2850726f706f73616c49640110204d656d626572496401282c426c6f636b4e756d626572011001185450726f706f73616c53746174757355706461746564080010012850726f706f73616c496400002d03016c50726f706f73616c5374617475733c426c6f636b4e756d6265723e0000106c456d697473206f6e2070726f706f73616c206372656174696f6e2e1c506172616d733a4c2d204964206f6620612070726f706f73616c2e582d204e65772070726f706f73616c207374617475732e5050726f706f73616c4465636973696f6e4d616465080010012850726f706f73616c496400003103014050726f706f73616c4465636973696f6e000110b0456d697473206f6e2067657474696e6720612070726f706f73616c20737461747573206465636973696f6e2e1c506172616d733a4c2d204964206f6620612070726f706f73616c2e4c2d2050726f706f73616c206465636973696f6e4050726f706f73616c4578656375746564080010012850726f706f73616c496400003903013c457865637574696f6e53746174757300021070456d697473206f6e2070726f706f73616c20657865637574696f6e2e1c506172616d733a6c2d204964206f66206120757064617465642070726f706f73616c2e702d2050726f706f73616c20657865637574696f6e207374617475732e14566f74656410002801204d656d6265724964000010012850726f706f73616c496400003d030120566f74654b696e64000030011c5665633c75383e00031880456d697473206f6e20766f74696e6720666f72207468652070726f706f73616c1c506172616d733a7c2d20566f746572202d206d656d626572206964206f66206120766f7465722e4c2d204964206f6620612070726f706f73616c2e3c2d204b696e64206f6620766f74652e302d20526174696f6e616c652e4450726f706f73616c43616e63656c6c656408002801204d656d6265724964000010012850726f706f73616c49640004108c456d697473206f6e20612070726f706f73616c206265696e672063616e63656c6c65641c506172616d733a6c2d204d656d626572204964206f66207468652070726f706f736572502d204964206f66207468652070726f706f73616c4050726f706f73657252656d61726b65640c002801204d656d6265724964000010012850726f706f73616c4964000030011c5665633c75383e00051084456d697473206f6e2070726f706f736572206d616b696e6720612072656d61726b342d2070726f706f736572206964342d2070726f706f73616c206964242d206d6573736167650c5c4576656e747320666f722074686973206d6f64756c652e005c50726f706f73616c7320656e67696e65206576656e74732d03105c70616c6c65745f70726f706f73616c735f656e67696e651474797065734470726f706f73616c5f73746174757365733850726f706f73616c537461747573042c426c6f636b4e756d6265720110010c184163746976650000004050656e64696e67457865637574696f6e040010012c426c6f636b4e756d6265720001006050656e64696e67436f6e737469747574696f6e616c697479000200003103105c70616c6c65745f70726f706f73616c735f656e67696e651474797065734470726f706f73616c5f73746174757365734050726f706f73616c4465636973696f6e00011c2043616e63656c65640000004443616e63656c6564427952756e74696d65000100185665746f65640002002052656a65637465640003001c536c61736865640004001c4578706972656400050020417070726f766564040035030160417070726f76656450726f706f73616c4465636973696f6e000600003503105c70616c6c65745f70726f706f73616c735f656e67696e651474797065734470726f706f73616c5f737461747573657360417070726f76656450726f706f73616c4465636973696f6e0001084050656e64696e67457865637574696f6e0000006050656e64696e67436f6e737469747574696f6e616c697479000100003903105c70616c6c65745f70726f706f73616c735f656e67696e651474797065734470726f706f73616c5f73746174757365733c457865637574696f6e5374617475730001082045786563757465640000003c457865637574696f6e4661696c65640401146572726f7230011c5665633c75383e000100003d030c5c70616c6c65745f70726f706f73616c735f656e67696e6514747970657320566f74654b696e640001101c417070726f76650000001852656a65637400010014536c6173680002001c4162737461696e000300004103086c70616c6c65745f70726f706f73616c735f64697363757373696f6e205261774576656e740c2054687265616449640128204d656d6265724964012818506f737449640128011434546872656164437265617465640800280120546872656164496400002801204d656d626572496400000464456d697473206f6e20746872656164206372656174696f6e2e2c506f7374437265617465641400280118506f7374496400002801204d656d626572496400002801205468726561644964000030011c5665633c75383e0000980110626f6f6c0001045c456d697473206f6e20706f7374206372656174696f6e2e2c506f7374557064617465641000280118506f7374496400002801204d656d626572496400002801205468726561644964000030011c5665633c75383e00020454456d697473206f6e20706f7374207570646174652e445468726561644d6f64654368616e6765640c0028012054687265616449640000450301785468726561644d6f64653c42547265655365743c4d656d62657249643e3e00002801204d656d626572496400030470456d697473206f6e20746872656164206d6f6465206368616e67652e2c506f737444656c6574656410002801204d656d6265724964000028012054687265616449640000280118506f737449640000980110626f6f6c00040454456d697473206f6e20706f73742064656c657465640c5c4576656e747320666f722074686973206d6f64756c652e005c50726f706f73616c7320656e67696e65206576656e747345030c6c70616c6c65745f70726f706f73616c735f64697363757373696f6e147479706573285468726561644d6f6465043c54687265616457686974656c6973740169010108104f70656e00000018436c6f73656404006901013c54687265616457686974656c697374000100004903085870616c6c65745f70726f706f73616c735f636f646578205261774576656e74106447656e6572616c50726f706f73616c506172616d6574657273014d034450726f706f73616c44657461696c734f660151032850726f706f73616c49640110205468726561644964012801043c50726f706f73616c43726561746564100010012850726f706f73616c496400004d03016447656e6572616c50726f706f73616c506172616d657465727300005103014450726f706f73616c44657461696c734f660000280120546872656164496400001858412070726f706f73616c2077617320637265617465641c506172616d733afc2d204964206f662061206e65776c7920637265617465642070726f706f73616c2061667465722069742077617320736176656420696e2073746f726167652e01012d2047656e6572616c2070726f706f73616c20706172616d657465722e20506172616d65746572732073686172656420627920616c6c2070726f706f73616c7349012d2050726f706f73616c2044657461696c732e20506172616d65746572206f662070726f706f73616c207769746820612076617269616e7420666f722065616368206b696e64206f662070726f706f73616c9c2d204964206f662061206e65776c7920637265617465642070726f706f73616c20746872656164085c4576656e747320666f722074686973206d6f64756c652e004d030c5870616c6c65745f70726f706f73616c735f636f6465781474797065735447656e6572616c50726f706f73616c506172616d730c204d656d62657249640128244163636f756e74496401002c426c6f636b4e756d6265720110001401246d656d6265725f69642801204d656d62657249640001147469746c6530011c5665633c75383e00012c6465736372697074696f6e30011c5665633c75383e0001487374616b696e675f6163636f756e745f69649401444f7074696f6e3c4163636f756e7449643e00015465786163745f657865637574696f6e5f626c6f636b0102014c4f7074696f6e3c426c6f636b4e756d6265723e000051030c5870616c6c65745f70726f706f73616c735f636f6465781474797065733c50726f706f73616c44657461696c731c1c42616c616e636501182c426c6f636b4e756d6265720110244163636f756e744964010020576f726b657249640128244f70656e696e67496401282850726f706f73616c49640110785570646174654368616e6e656c5061796f757473506172616d65746572730171020160185369676e616c040030011c5665633c75383e0000003852756e74696d6555706772616465040030011c5665633c75383e0001003846756e64696e67526571756573740400550301c45665633c46756e64696e6752657175657374506172616d65746572733c42616c616e63652c204163636f756e7449643e3e000200505365744d617856616c696461746f72436f756e74040010010c75333200030074437265617465576f726b696e6747726f75704c6561644f70656e696e6704005d0301b44372656174654f70656e696e67506172616d65746572733c426c6f636b4e756d6265722c2042616c616e63653e0004006c46696c6c576f726b696e6747726f75704c6561644f70656e696e6704006503015446696c6c4f70656e696e67506172616d657465727300050060557064617465576f726b696e6747726f75704275646765740c0018011c42616c616e6365000099010130576f726b696e6747726f757000009d01012c42616c616e63654b696e64000600744465637265617365576f726b696e6747726f75704c6561645374616b650c00280120576f726b65724964000018011c42616c616e6365000099010130576f726b696e6747726f757000070054536c617368576f726b696e6747726f75704c6561640c00280120576f726b65724964000018011c42616c616e6365000099010130576f726b696e6747726f757000080064536574576f726b696e6747726f75704c6561645265776172640c00280120576f726b6572496400004501013c4f7074696f6e3c42616c616e63653e000099010130576f726b696e6747726f7570000900645465726d696e617465576f726b696e6747726f75704c6561640400690301a85465726d696e617465526f6c65506172616d65746572733c576f726b657249642c2042616c616e63653e000a0044416d656e64436f6e737469747574696f6e040030011c5665633c75383e000b007443616e63656c576f726b696e6747726f75704c6561644f70656e696e6708002801244f70656e696e674964000099010130576f726b696e6747726f7570000c00485365744d656d626572736869705072696365040018011c42616c616e6365000d0064536574436f756e63696c427564676574496e6372656d656e74040018011c42616c616e6365000e0048536574436f756e63696c6f72526577617264040018011c42616c616e6365000f006c536574496e697469616c496e7669746174696f6e42616c616e6365040018011c42616c616e636500100064536574496e697469616c496e7669746174696f6e436f756e74040010010c753332001100805365744d656d626572736869704c656164496e7669746174696f6e51756f7461040010010c75333200120038536574526566657272616c43757404000801087538001300305665746f50726f706f73616c040010012850726f706f73616c496400140050557064617465476c6f62616c4e66744c696d69740800890201384e66744c696d6974506572696f64000028010c753634001500505570646174654368616e6e656c5061796f7574730400710201785570646174654368616e6e656c5061796f757473506172616d65746572730016005053657450616c6c6574466f7a656e5374617475730800980110626f6f6c00006d03013c467265657a61626c6550616c6c65740017000055030000025903005903083470616c6c65745f636f6d6d6f6e6046756e64696e6752657175657374506172616d6574657273081c42616c616e63650118244163636f756e74496401000008011c6163636f756e740001244163636f756e744964000118616d6f756e7418011c42616c616e636500005d030c5870616c6c65745f70726f706f73616c735f636f6465781474797065735c4372656174654f70656e696e67506172616d6574657273082c426c6f636b4e756d62657201101c42616c616e636501180010012c6465736372697074696f6e30011c5665633c75383e0001307374616b655f706f6c696379610301845374616b65506f6c6963793c426c6f636b4e756d6265722c2042616c616e63653e0001407265776172645f7065725f626c6f636b4501013c4f7074696f6e3c42616c616e63653e00011467726f757099010130576f726b696e6747726f7570000061030c5070616c6c65745f776f726b696e675f67726f75701474797065732c5374616b65506f6c696379082c426c6f636b4e756d62657201101c42616c616e63650118000801307374616b655f616d6f756e7418011c42616c616e63650001606c656176696e675f756e7374616b696e675f706572696f6410012c426c6f636b4e756d626572000065030c5870616c6c65745f70726f706f73616c735f636f6465781474797065735446696c6c4f70656e696e67506172616d657465727300000c01286f70656e696e675f6964280160776f726b696e675f67726f75703a3a4f70656e696e6749640001386170706c69636174696f6e5f6964280170776f726b696e675f67726f75703a3a4170706c69636174696f6e4964000134776f726b696e675f67726f757099010130576f726b696e6747726f7570000069030c5870616c6c65745f70726f706f73616c735f636f6465781474797065735c5465726d696e617465526f6c65506172616d65746572730820576f726b6572496401281c42616c616e63650118000c0124776f726b65725f6964280120576f726b6572496400013c736c617368696e675f616d6f756e744501013c4f7074696f6e3c42616c616e63653e00011467726f757099010130576f726b696e6747726f757000006d03083470616c6c65745f636f6d6d6f6e3c467265657a61626c6550616c6c65740001043050726f6a656374546f6b656e000000007103085070616c6c65745f776f726b696e675f67726f7570205261774576656e7430244f70656e696e6749640128344170706c69636174696f6e49640128684170706c69636174696f6e4964546f576f726b657249644d617001750320576f726b657249640128244163636f756e74496401001c42616c616e636501182c4f70656e696e67547970650181032c5374616b65506f6c696379016103604170706c794f6e4f70656e696e67506172616d6574657273018503204d656d626572496401281048617368012c0449018d030164304f70656e696e67416464656414002801244f70656e696e674964000030011c5665633c75383e00008103012c4f70656e696e675479706500006103012c5374616b65506f6c69637900004501013c4f7074696f6e3c42616c616e63653e00001c80456d697473206f6e20616464696e67206e6577206a6f62206f70656e696e672e1c506172616d733a302d204f70656e696e67206964342d204465736372697074696f6e782d204f70656e696e672054797065284c656164206f7220576f726b657229782d205374616b6520506f6c69637920666f7220746865206f70656e696e67482d205265776172642070657220626c6f636b404170706c6965644f6e4f70656e696e670800850301604170706c794f6e4f70656e696e67506172616d657465727300002801344170706c69636174696f6e4964000110dc456d697473206f6e20616464696e6720746865206170706c69636174696f6e20666f722074686520776f726b6572206f70656e696e672e1c506172616d733a542d204f70656e696e6720706172616d657465726573402d204170706c69636174696f6e206964344f70656e696e6746696c6c65640c002801244f70656e696e6749640000750301684170706c69636174696f6e4964546f576f726b657249644d617000006901015c42547265655365743c4170706c69636174696f6e49643e00021484456d697473206f6e2066696c6c696e6720746865206a6f62206f70656e696e672e1c506172616d733a4c2d20576f726b6572206f70656e696e67206964cc2d20576f726b6572206170706c69636174696f6e20696420746f2074686520776f726b65722069642064696374696f6e617279ac2d204170706c69636174696f6e6420696473207573656420746f2066696c6c20746865206f70656e696e67244c65616465725365740400280120576f726b6572496400030c88456d697473206f6e2073657474696e67207468652067726f7570206c65616465722e1c506172616d733a482d2047726f757020776f726b65722069642e60576f726b6572526f6c654163636f756e74557064617465640800280120576f726b6572496400000001244163636f756e744964000410c4456d697473206f6e207570646174696e672074686520726f6c65206163636f756e74206f662074686520776f726b65722e1c506172616d733a4c2d204964206f662074686520776f726b65722e802d20526f6c65206163636f756e74206964206f662074686520776f726b65722e2c4c6561646572556e7365740005047c456d697473206f6e20756e2d73657474696e6720746865206c65616465722e30576f726b65724578697465640400280120576f726b6572496400061070456d697473206f6e2065786974696e672074686520776f726b65722e1c506172616d733a302d20776f726b65722069642e302d20526174696f6e616c652e50576f726b6572537461727465644c656176696e670800280120576f726b6572496400003101013c4f7074696f6e3c5665633c75383e3e000710b4456d697473207768656e20776f726b65722073746172746564206c656176696e6720746865697220726f6c652e1c506172616d733a302d20576f726b65722069642e302d20526174696f6e616c652e405465726d696e61746564576f726b65720c00280120576f726b6572496400004501013c4f7074696f6e3c42616c616e63653e00003101013c4f7074696f6e3c5665633c75383e3e00081480456d697473206f6e207465726d696e6174696e672074686520776f726b65722e1c506172616d733a302d20776f726b65722069642e282d2050656e616c74792e302d20526174696f6e616c652e405465726d696e617465644c65616465720c00280120576f726b6572496400004501013c4f7074696f6e3c42616c616e63653e00003101013c4f7074696f6e3c5665633c75383e3e00091480456d697473206f6e207465726d696e6174696e6720746865206c65616465722e1c506172616d733a4c2d206c656164657220776f726b65722069642e282d2050656e616c74792e302d20526174696f6e616c652e305374616b65536c61736865641000280120576f726b65724964000018011c42616c616e6365000018011c42616c616e636500003101013c4f7074696f6e3c5665633c75383e3e000a18c0456d697473206f6e20736c617368696e672074686520726567756c617220776f726b65722f6c656164207374616b652e1c506172616d733a642d20726567756c617220776f726b65722f6c6561642069642e642d2061637475616c20736c61736865642062616c616e63652e702d2052657175657374656420736c61736865642062616c616e63652e302d20526174696f6e616c652e385374616b654465637265617365640800280120576f726b65724964000018011c42616c616e6365000b10c8456d697473206f6e2064656372656173696e672074686520726567756c617220776f726b65722f6c656164207374616b652e1c506172616d733a642d20726567756c617220776f726b65722f6c6561642069642e502d207374616b652064656c746120616d6f756e74385374616b65496e637265617365640800280120576f726b65724964000018011c42616c616e6365000c10c8456d697473206f6e20696e6372656173696e672074686520726567756c617220776f726b65722f6c656164207374616b652e1c506172616d733a642d20726567756c617220776f726b65722f6c6561642069642e502d207374616b652064656c746120616d6f756e74504170706c69636174696f6e57697468647261776e04002801344170706c69636174696f6e4964000d0c2501456d697473206f6e207769746864726177696e6720746865206170706c69636174696f6e20666f722074686520726567756c617220776f726b65722f6c656164206f70656e696e672e1c506172616d733a502d204a6f62206170706c69636174696f6e2069643c4f70656e696e6743616e63656c656404002801244f70656e696e674964000e0c8c456d697473206f6e2063616e63656c696e6720746865206a6f62206f70656e696e672e1c506172616d733a302d204f70656e696e6720696424427564676574536574040018011c42616c616e6365000f0cc8456d697473206f6e2073657474696e67207468652062756467657420666f722074686520776f726b696e672067726f75702e1c506172616d733a302d206e65772062756467657468576f726b65725265776172644163636f756e74557064617465640800280120576f726b6572496400000001244163636f756e744964001010cc456d697473206f6e207570646174696e672074686520726577617264206163636f756e74206f662074686520776f726b65722e1c506172616d733a4c2d204964206f662074686520776f726b65722e882d20526577617264206163636f756e74206964206f662074686520776f726b65722e64576f726b6572526577617264416d6f756e74557064617465640800280120576f726b6572496400004501013c4f7074696f6e3c42616c616e63653e001110c8456d697473206f6e207570646174696e67207468652072657761726420616d6f756e74206f662074686520776f726b65722e1c506172616d733a4c2d204964206f662074686520776f726b65722e482d205265776172642070657220626c6f636b44537461747573546578744368616e67656408002c01104861736800003101013c4f7074696f6e3c5665633c75383e3e001210dc456d697473206f6e207570646174696e6720746865207374617475732074657874206f662074686520776f726b696e672067726f75702e1c506172616d733a482d2073746174757320746578742068617368342d207374617475732074657874384275646765745370656e64696e670c000001244163636f756e744964000018011c42616c616e636500003101013c4f7074696f6e3c5665633c75383e3e001314c8456d697473206f6e206275646765742066726f6d2074686520776f726b696e672067726f7570206265696e67207370656e741c506172616d733a582d205265636569766572204163636f756e742049642e402d2042616c616e6365207370656e742e302d20526174696f6e616c652e28526577617264506169641000280120576f726b6572496400000001244163636f756e744964000018011c42616c616e63650000910301445265776172645061796d656e74547970650014186c456d697473206f6e20706179696e6720746865207265776172642e1c506172616d733a4c2d204964206f662074686520776f726b65722e582d205265636569766572204163636f756e742049642e202d20526577617264b42d205061796d656e74207479706520286d697373656420726577617264206f7220726567756c6172206f6e65296c4e65774d69737365645265776172644c6576656c526561636865640800280120576f726b6572496400004501013c4f7074696f6e3c42616c616e63653e00151090456d697473206f6e207265616368696e67206e6577206d6973736564207265776172642e1c506172616d733a302d20576f726b65722049442ee82d204d69737365642072657761726420286f7074696f6e616c292e204e6f6e65206d65616e7320276e6f206d697373656420726577617264272e60576f726b696e6747726f757042756467657446756e6465640c002801204d656d6265724964000018011c42616c616e6365000030011c5665633c75383e0016147846756e642074686520776f726b696e672067726f7570206275646765742e1c506172616d733a2c2d204d656d6265722049444c2d20416d6f756e74206f662062616c616e63652c2d20526174696f6e616c65304c65616452656d61726b6564040030011c5665633c75383e00170c94456d697473206f6e204c656164206d616b696e6720612072656d61726b206d6573736167651c506172616d733a242d206d65737361676538576f726b657252656d61726b65640800280120576f726b65724964000030011c5665633c75383e00181094456d697473206f6e204c656164206d616b696e6720612072656d61726b206d6573736167651c506172616d733a202d20776f726b6572242d206d6573736167650c5c4576656e747320666f722074686973206d6f64756c652e00385f47726f75705f206576656e74737503042042547265654d617008044b012804560128000400790300000079030000027d03007d030000040828280081030c5070616c6c65745f776f726b696e675f67726f75701474797065732c4f70656e696e6754797065000108184c65616465720000001c526567756c61720001000085030c5070616c6c65745f776f726b696e675f67726f7570147479706573504170706c794f6e4f70656e696e67506172616d7310204d656d62657249640128244f70656e696e6749640128244163636f756e74496401001c42616c616e63650118001801246d656d6265725f69642801204d656d62657249640001286f70656e696e675f69642801244f70656e696e67496400013c726f6c655f6163636f756e745f69640001244163636f756e7449640001447265776172645f6163636f756e745f69640001244163636f756e74496400012c6465736372697074696f6e30011c5665633c75383e0001407374616b655f706172616d65746572738903018c5374616b65506172616d65746572733c4163636f756e7449642c2042616c616e63653e000089030c5070616c6c65745f776f726b696e675f67726f75701474797065733c5374616b65506172616d657465727308244163636f756e74496401001c42616c616e63650118000801147374616b6518011c42616c616e63650001487374616b696e675f6163636f756e745f69640001244163636f756e74496400008d03085070616c6c65745f776f726b696e675f67726f757024496e7374616e6365310000000091030c5070616c6c65745f776f726b696e675f67726f7570147479706573445265776172645061796d656e7454797065000108304d697373656452657761726400000034526567756c6172526577617264000100009503085070616c6c65745f776f726b696e675f67726f7570205261774576656e7430244f70656e696e6749640128344170706c69636174696f6e49640128684170706c69636174696f6e4964546f576f726b657249644d617001750320576f726b657249640128244163636f756e74496401001c42616c616e636501182c4f70656e696e67547970650181032c5374616b65506f6c696379016103604170706c794f6e4f70656e696e67506172616d6574657273018503204d656d626572496401281048617368012c04490199030164304f70656e696e67416464656414002801244f70656e696e674964000030011c5665633c75383e00008103012c4f70656e696e675479706500006103012c5374616b65506f6c69637900004501013c4f7074696f6e3c42616c616e63653e00001c80456d697473206f6e20616464696e67206e6577206a6f62206f70656e696e672e1c506172616d733a302d204f70656e696e67206964342d204465736372697074696f6e782d204f70656e696e672054797065284c656164206f7220576f726b657229782d205374616b6520506f6c69637920666f7220746865206f70656e696e67482d205265776172642070657220626c6f636b404170706c6965644f6e4f70656e696e670800850301604170706c794f6e4f70656e696e67506172616d657465727300002801344170706c69636174696f6e4964000110dc456d697473206f6e20616464696e6720746865206170706c69636174696f6e20666f722074686520776f726b6572206f70656e696e672e1c506172616d733a542d204f70656e696e6720706172616d657465726573402d204170706c69636174696f6e206964344f70656e696e6746696c6c65640c002801244f70656e696e6749640000750301684170706c69636174696f6e4964546f576f726b657249644d617000006901015c42547265655365743c4170706c69636174696f6e49643e00021484456d697473206f6e2066696c6c696e6720746865206a6f62206f70656e696e672e1c506172616d733a4c2d20576f726b6572206f70656e696e67206964cc2d20576f726b6572206170706c69636174696f6e20696420746f2074686520776f726b65722069642064696374696f6e617279ac2d204170706c69636174696f6e6420696473207573656420746f2066696c6c20746865206f70656e696e67244c65616465725365740400280120576f726b6572496400030c88456d697473206f6e2073657474696e67207468652067726f7570206c65616465722e1c506172616d733a482d2047726f757020776f726b65722069642e60576f726b6572526f6c654163636f756e74557064617465640800280120576f726b6572496400000001244163636f756e744964000410c4456d697473206f6e207570646174696e672074686520726f6c65206163636f756e74206f662074686520776f726b65722e1c506172616d733a4c2d204964206f662074686520776f726b65722e802d20526f6c65206163636f756e74206964206f662074686520776f726b65722e2c4c6561646572556e7365740005047c456d697473206f6e20756e2d73657474696e6720746865206c65616465722e30576f726b65724578697465640400280120576f726b6572496400061070456d697473206f6e2065786974696e672074686520776f726b65722e1c506172616d733a302d20776f726b65722069642e302d20526174696f6e616c652e50576f726b6572537461727465644c656176696e670800280120576f726b6572496400003101013c4f7074696f6e3c5665633c75383e3e000710b4456d697473207768656e20776f726b65722073746172746564206c656176696e6720746865697220726f6c652e1c506172616d733a302d20576f726b65722069642e302d20526174696f6e616c652e405465726d696e61746564576f726b65720c00280120576f726b6572496400004501013c4f7074696f6e3c42616c616e63653e00003101013c4f7074696f6e3c5665633c75383e3e00081480456d697473206f6e207465726d696e6174696e672074686520776f726b65722e1c506172616d733a302d20776f726b65722069642e282d2050656e616c74792e302d20526174696f6e616c652e405465726d696e617465644c65616465720c00280120576f726b6572496400004501013c4f7074696f6e3c42616c616e63653e00003101013c4f7074696f6e3c5665633c75383e3e00091480456d697473206f6e207465726d696e6174696e6720746865206c65616465722e1c506172616d733a4c2d206c656164657220776f726b65722069642e282d2050656e616c74792e302d20526174696f6e616c652e305374616b65536c61736865641000280120576f726b65724964000018011c42616c616e6365000018011c42616c616e636500003101013c4f7074696f6e3c5665633c75383e3e000a18c0456d697473206f6e20736c617368696e672074686520726567756c617220776f726b65722f6c656164207374616b652e1c506172616d733a642d20726567756c617220776f726b65722f6c6561642069642e642d2061637475616c20736c61736865642062616c616e63652e702d2052657175657374656420736c61736865642062616c616e63652e302d20526174696f6e616c652e385374616b654465637265617365640800280120576f726b65724964000018011c42616c616e6365000b10c8456d697473206f6e2064656372656173696e672074686520726567756c617220776f726b65722f6c656164207374616b652e1c506172616d733a642d20726567756c617220776f726b65722f6c6561642069642e502d207374616b652064656c746120616d6f756e74385374616b65496e637265617365640800280120576f726b65724964000018011c42616c616e6365000c10c8456d697473206f6e20696e6372656173696e672074686520726567756c617220776f726b65722f6c656164207374616b652e1c506172616d733a642d20726567756c617220776f726b65722f6c6561642069642e502d207374616b652064656c746120616d6f756e74504170706c69636174696f6e57697468647261776e04002801344170706c69636174696f6e4964000d0c2501456d697473206f6e207769746864726177696e6720746865206170706c69636174696f6e20666f722074686520726567756c617220776f726b65722f6c656164206f70656e696e672e1c506172616d733a502d204a6f62206170706c69636174696f6e2069643c4f70656e696e6743616e63656c656404002801244f70656e696e674964000e0c8c456d697473206f6e2063616e63656c696e6720746865206a6f62206f70656e696e672e1c506172616d733a302d204f70656e696e6720696424427564676574536574040018011c42616c616e6365000f0cc8456d697473206f6e2073657474696e67207468652062756467657420666f722074686520776f726b696e672067726f75702e1c506172616d733a302d206e65772062756467657468576f726b65725265776172644163636f756e74557064617465640800280120576f726b6572496400000001244163636f756e744964001010cc456d697473206f6e207570646174696e672074686520726577617264206163636f756e74206f662074686520776f726b65722e1c506172616d733a4c2d204964206f662074686520776f726b65722e882d20526577617264206163636f756e74206964206f662074686520776f726b65722e64576f726b6572526577617264416d6f756e74557064617465640800280120576f726b6572496400004501013c4f7074696f6e3c42616c616e63653e001110c8456d697473206f6e207570646174696e67207468652072657761726420616d6f756e74206f662074686520776f726b65722e1c506172616d733a4c2d204964206f662074686520776f726b65722e482d205265776172642070657220626c6f636b44537461747573546578744368616e67656408002c01104861736800003101013c4f7074696f6e3c5665633c75383e3e001210dc456d697473206f6e207570646174696e6720746865207374617475732074657874206f662074686520776f726b696e672067726f75702e1c506172616d733a482d2073746174757320746578742068617368342d207374617475732074657874384275646765745370656e64696e670c000001244163636f756e744964000018011c42616c616e636500003101013c4f7074696f6e3c5665633c75383e3e001314c8456d697473206f6e206275646765742066726f6d2074686520776f726b696e672067726f7570206265696e67207370656e741c506172616d733a582d205265636569766572204163636f756e742049642e402d2042616c616e6365207370656e742e302d20526174696f6e616c652e28526577617264506169641000280120576f726b6572496400000001244163636f756e744964000018011c42616c616e63650000910301445265776172645061796d656e74547970650014186c456d697473206f6e20706179696e6720746865207265776172642e1c506172616d733a4c2d204964206f662074686520776f726b65722e582d205265636569766572204163636f756e742049642e202d20526577617264b42d205061796d656e74207479706520286d697373656420726577617264206f7220726567756c6172206f6e65296c4e65774d69737365645265776172644c6576656c526561636865640800280120576f726b6572496400004501013c4f7074696f6e3c42616c616e63653e00151090456d697473206f6e207265616368696e67206e6577206d6973736564207265776172642e1c506172616d733a302d20576f726b65722049442ee82d204d69737365642072657761726420286f7074696f6e616c292e204e6f6e65206d65616e7320276e6f206d697373656420726577617264272e60576f726b696e6747726f757042756467657446756e6465640c002801204d656d6265724964000018011c42616c616e6365000030011c5665633c75383e0016147846756e642074686520776f726b696e672067726f7570206275646765742e1c506172616d733a2c2d204d656d6265722049444c2d20416d6f756e74206f662062616c616e63652c2d20526174696f6e616c65304c65616452656d61726b6564040030011c5665633c75383e00170c94456d697473206f6e204c656164206d616b696e6720612072656d61726b206d6573736167651c506172616d733a242d206d65737361676538576f726b657252656d61726b65640800280120576f726b65724964000030011c5665633c75383e00181094456d697473206f6e204c656164206d616b696e6720612072656d61726b206d6573736167651c506172616d733a202d20776f726b6572242d206d6573736167650c5c4576656e747320666f722074686973206d6f64756c652e00385f47726f75705f206576656e74739903085070616c6c65745f776f726b696e675f67726f757024496e7374616e636532000000009d03085070616c6c65745f776f726b696e675f67726f7570205261774576656e7430244f70656e696e6749640128344170706c69636174696f6e49640128684170706c69636174696f6e4964546f576f726b657249644d617001750320576f726b657249640128244163636f756e74496401001c42616c616e636501182c4f70656e696e67547970650181032c5374616b65506f6c696379016103604170706c794f6e4f70656e696e67506172616d6574657273018503204d656d626572496401281048617368012c044901a1030164304f70656e696e67416464656414002801244f70656e696e674964000030011c5665633c75383e00008103012c4f70656e696e675479706500006103012c5374616b65506f6c69637900004501013c4f7074696f6e3c42616c616e63653e00001c80456d697473206f6e20616464696e67206e6577206a6f62206f70656e696e672e1c506172616d733a302d204f70656e696e67206964342d204465736372697074696f6e782d204f70656e696e672054797065284c656164206f7220576f726b657229782d205374616b6520506f6c69637920666f7220746865206f70656e696e67482d205265776172642070657220626c6f636b404170706c6965644f6e4f70656e696e670800850301604170706c794f6e4f70656e696e67506172616d657465727300002801344170706c69636174696f6e4964000110dc456d697473206f6e20616464696e6720746865206170706c69636174696f6e20666f722074686520776f726b6572206f70656e696e672e1c506172616d733a542d204f70656e696e6720706172616d657465726573402d204170706c69636174696f6e206964344f70656e696e6746696c6c65640c002801244f70656e696e6749640000750301684170706c69636174696f6e4964546f576f726b657249644d617000006901015c42547265655365743c4170706c69636174696f6e49643e00021484456d697473206f6e2066696c6c696e6720746865206a6f62206f70656e696e672e1c506172616d733a4c2d20576f726b6572206f70656e696e67206964cc2d20576f726b6572206170706c69636174696f6e20696420746f2074686520776f726b65722069642064696374696f6e617279ac2d204170706c69636174696f6e6420696473207573656420746f2066696c6c20746865206f70656e696e67244c65616465725365740400280120576f726b6572496400030c88456d697473206f6e2073657474696e67207468652067726f7570206c65616465722e1c506172616d733a482d2047726f757020776f726b65722069642e60576f726b6572526f6c654163636f756e74557064617465640800280120576f726b6572496400000001244163636f756e744964000410c4456d697473206f6e207570646174696e672074686520726f6c65206163636f756e74206f662074686520776f726b65722e1c506172616d733a4c2d204964206f662074686520776f726b65722e802d20526f6c65206163636f756e74206964206f662074686520776f726b65722e2c4c6561646572556e7365740005047c456d697473206f6e20756e2d73657474696e6720746865206c65616465722e30576f726b65724578697465640400280120576f726b6572496400061070456d697473206f6e2065786974696e672074686520776f726b65722e1c506172616d733a302d20776f726b65722069642e302d20526174696f6e616c652e50576f726b6572537461727465644c656176696e670800280120576f726b6572496400003101013c4f7074696f6e3c5665633c75383e3e000710b4456d697473207768656e20776f726b65722073746172746564206c656176696e6720746865697220726f6c652e1c506172616d733a302d20576f726b65722069642e302d20526174696f6e616c652e405465726d696e61746564576f726b65720c00280120576f726b6572496400004501013c4f7074696f6e3c42616c616e63653e00003101013c4f7074696f6e3c5665633c75383e3e00081480456d697473206f6e207465726d696e6174696e672074686520776f726b65722e1c506172616d733a302d20776f726b65722069642e282d2050656e616c74792e302d20526174696f6e616c652e405465726d696e617465644c65616465720c00280120576f726b6572496400004501013c4f7074696f6e3c42616c616e63653e00003101013c4f7074696f6e3c5665633c75383e3e00091480456d697473206f6e207465726d696e6174696e6720746865206c65616465722e1c506172616d733a4c2d206c656164657220776f726b65722069642e282d2050656e616c74792e302d20526174696f6e616c652e305374616b65536c61736865641000280120576f726b65724964000018011c42616c616e6365000018011c42616c616e636500003101013c4f7074696f6e3c5665633c75383e3e000a18c0456d697473206f6e20736c617368696e672074686520726567756c617220776f726b65722f6c656164207374616b652e1c506172616d733a642d20726567756c617220776f726b65722f6c6561642069642e642d2061637475616c20736c61736865642062616c616e63652e702d2052657175657374656420736c61736865642062616c616e63652e302d20526174696f6e616c652e385374616b654465637265617365640800280120576f726b65724964000018011c42616c616e6365000b10c8456d697473206f6e2064656372656173696e672074686520726567756c617220776f726b65722f6c656164207374616b652e1c506172616d733a642d20726567756c617220776f726b65722f6c6561642069642e502d207374616b652064656c746120616d6f756e74385374616b65496e637265617365640800280120576f726b65724964000018011c42616c616e6365000c10c8456d697473206f6e20696e6372656173696e672074686520726567756c617220776f726b65722f6c656164207374616b652e1c506172616d733a642d20726567756c617220776f726b65722f6c6561642069642e502d207374616b652064656c746120616d6f756e74504170706c69636174696f6e57697468647261776e04002801344170706c69636174696f6e4964000d0c2501456d697473206f6e207769746864726177696e6720746865206170706c69636174696f6e20666f722074686520726567756c617220776f726b65722f6c656164206f70656e696e672e1c506172616d733a502d204a6f62206170706c69636174696f6e2069643c4f70656e696e6743616e63656c656404002801244f70656e696e674964000e0c8c456d697473206f6e2063616e63656c696e6720746865206a6f62206f70656e696e672e1c506172616d733a302d204f70656e696e6720696424427564676574536574040018011c42616c616e6365000f0cc8456d697473206f6e2073657474696e67207468652062756467657420666f722074686520776f726b696e672067726f75702e1c506172616d733a302d206e65772062756467657468576f726b65725265776172644163636f756e74557064617465640800280120576f726b6572496400000001244163636f756e744964001010cc456d697473206f6e207570646174696e672074686520726577617264206163636f756e74206f662074686520776f726b65722e1c506172616d733a4c2d204964206f662074686520776f726b65722e882d20526577617264206163636f756e74206964206f662074686520776f726b65722e64576f726b6572526577617264416d6f756e74557064617465640800280120576f726b6572496400004501013c4f7074696f6e3c42616c616e63653e001110c8456d697473206f6e207570646174696e67207468652072657761726420616d6f756e74206f662074686520776f726b65722e1c506172616d733a4c2d204964206f662074686520776f726b65722e482d205265776172642070657220626c6f636b44537461747573546578744368616e67656408002c01104861736800003101013c4f7074696f6e3c5665633c75383e3e001210dc456d697473206f6e207570646174696e6720746865207374617475732074657874206f662074686520776f726b696e672067726f75702e1c506172616d733a482d2073746174757320746578742068617368342d207374617475732074657874384275646765745370656e64696e670c000001244163636f756e744964000018011c42616c616e636500003101013c4f7074696f6e3c5665633c75383e3e001314c8456d697473206f6e206275646765742066726f6d2074686520776f726b696e672067726f7570206265696e67207370656e741c506172616d733a582d205265636569766572204163636f756e742049642e402d2042616c616e6365207370656e742e302d20526174696f6e616c652e28526577617264506169641000280120576f726b6572496400000001244163636f756e744964000018011c42616c616e63650000910301445265776172645061796d656e74547970650014186c456d697473206f6e20706179696e6720746865207265776172642e1c506172616d733a4c2d204964206f662074686520776f726b65722e582d205265636569766572204163636f756e742049642e202d20526577617264b42d205061796d656e74207479706520286d697373656420726577617264206f7220726567756c6172206f6e65296c4e65774d69737365645265776172644c6576656c526561636865640800280120576f726b6572496400004501013c4f7074696f6e3c42616c616e63653e00151090456d697473206f6e207265616368696e67206e6577206d6973736564207265776172642e1c506172616d733a302d20576f726b65722049442ee82d204d69737365642072657761726420286f7074696f6e616c292e204e6f6e65206d65616e7320276e6f206d697373656420726577617264272e60576f726b696e6747726f757042756467657446756e6465640c002801204d656d6265724964000018011c42616c616e6365000030011c5665633c75383e0016147846756e642074686520776f726b696e672067726f7570206275646765742e1c506172616d733a2c2d204d656d6265722049444c2d20416d6f756e74206f662062616c616e63652c2d20526174696f6e616c65304c65616452656d61726b6564040030011c5665633c75383e00170c94456d697473206f6e204c656164206d616b696e6720612072656d61726b206d6573736167651c506172616d733a242d206d65737361676538576f726b657252656d61726b65640800280120576f726b65724964000030011c5665633c75383e00181094456d697473206f6e204c656164206d616b696e6720612072656d61726b206d6573736167651c506172616d733a202d20776f726b6572242d206d6573736167650c5c4576656e747320666f722074686973206d6f64756c652e00385f47726f75705f206576656e7473a103085070616c6c65745f776f726b696e675f67726f757024496e7374616e63653300000000a503085070616c6c65745f776f726b696e675f67726f7570205261774576656e7430244f70656e696e6749640128344170706c69636174696f6e49640128684170706c69636174696f6e4964546f576f726b657249644d617001750320576f726b657249640128244163636f756e74496401001c42616c616e636501182c4f70656e696e67547970650181032c5374616b65506f6c696379016103604170706c794f6e4f70656e696e67506172616d6574657273018503204d656d626572496401281048617368012c044901a9030164304f70656e696e67416464656414002801244f70656e696e674964000030011c5665633c75383e00008103012c4f70656e696e675479706500006103012c5374616b65506f6c69637900004501013c4f7074696f6e3c42616c616e63653e00001c80456d697473206f6e20616464696e67206e6577206a6f62206f70656e696e672e1c506172616d733a302d204f70656e696e67206964342d204465736372697074696f6e782d204f70656e696e672054797065284c656164206f7220576f726b657229782d205374616b6520506f6c69637920666f7220746865206f70656e696e67482d205265776172642070657220626c6f636b404170706c6965644f6e4f70656e696e670800850301604170706c794f6e4f70656e696e67506172616d657465727300002801344170706c69636174696f6e4964000110dc456d697473206f6e20616464696e6720746865206170706c69636174696f6e20666f722074686520776f726b6572206f70656e696e672e1c506172616d733a542d204f70656e696e6720706172616d657465726573402d204170706c69636174696f6e206964344f70656e696e6746696c6c65640c002801244f70656e696e6749640000750301684170706c69636174696f6e4964546f576f726b657249644d617000006901015c42547265655365743c4170706c69636174696f6e49643e00021484456d697473206f6e2066696c6c696e6720746865206a6f62206f70656e696e672e1c506172616d733a4c2d20576f726b6572206f70656e696e67206964cc2d20576f726b6572206170706c69636174696f6e20696420746f2074686520776f726b65722069642064696374696f6e617279ac2d204170706c69636174696f6e6420696473207573656420746f2066696c6c20746865206f70656e696e67244c65616465725365740400280120576f726b6572496400030c88456d697473206f6e2073657474696e67207468652067726f7570206c65616465722e1c506172616d733a482d2047726f757020776f726b65722069642e60576f726b6572526f6c654163636f756e74557064617465640800280120576f726b6572496400000001244163636f756e744964000410c4456d697473206f6e207570646174696e672074686520726f6c65206163636f756e74206f662074686520776f726b65722e1c506172616d733a4c2d204964206f662074686520776f726b65722e802d20526f6c65206163636f756e74206964206f662074686520776f726b65722e2c4c6561646572556e7365740005047c456d697473206f6e20756e2d73657474696e6720746865206c65616465722e30576f726b65724578697465640400280120576f726b6572496400061070456d697473206f6e2065786974696e672074686520776f726b65722e1c506172616d733a302d20776f726b65722069642e302d20526174696f6e616c652e50576f726b6572537461727465644c656176696e670800280120576f726b6572496400003101013c4f7074696f6e3c5665633c75383e3e000710b4456d697473207768656e20776f726b65722073746172746564206c656176696e6720746865697220726f6c652e1c506172616d733a302d20576f726b65722069642e302d20526174696f6e616c652e405465726d696e61746564576f726b65720c00280120576f726b6572496400004501013c4f7074696f6e3c42616c616e63653e00003101013c4f7074696f6e3c5665633c75383e3e00081480456d697473206f6e207465726d696e6174696e672074686520776f726b65722e1c506172616d733a302d20776f726b65722069642e282d2050656e616c74792e302d20526174696f6e616c652e405465726d696e617465644c65616465720c00280120576f726b6572496400004501013c4f7074696f6e3c42616c616e63653e00003101013c4f7074696f6e3c5665633c75383e3e00091480456d697473206f6e207465726d696e6174696e6720746865206c65616465722e1c506172616d733a4c2d206c656164657220776f726b65722069642e282d2050656e616c74792e302d20526174696f6e616c652e305374616b65536c61736865641000280120576f726b65724964000018011c42616c616e6365000018011c42616c616e636500003101013c4f7074696f6e3c5665633c75383e3e000a18c0456d697473206f6e20736c617368696e672074686520726567756c617220776f726b65722f6c656164207374616b652e1c506172616d733a642d20726567756c617220776f726b65722f6c6561642069642e642d2061637475616c20736c61736865642062616c616e63652e702d2052657175657374656420736c61736865642062616c616e63652e302d20526174696f6e616c652e385374616b654465637265617365640800280120576f726b65724964000018011c42616c616e6365000b10c8456d697473206f6e2064656372656173696e672074686520726567756c617220776f726b65722f6c656164207374616b652e1c506172616d733a642d20726567756c617220776f726b65722f6c6561642069642e502d207374616b652064656c746120616d6f756e74385374616b65496e637265617365640800280120576f726b65724964000018011c42616c616e6365000c10c8456d697473206f6e20696e6372656173696e672074686520726567756c617220776f726b65722f6c656164207374616b652e1c506172616d733a642d20726567756c617220776f726b65722f6c6561642069642e502d207374616b652064656c746120616d6f756e74504170706c69636174696f6e57697468647261776e04002801344170706c69636174696f6e4964000d0c2501456d697473206f6e207769746864726177696e6720746865206170706c69636174696f6e20666f722074686520726567756c617220776f726b65722f6c656164206f70656e696e672e1c506172616d733a502d204a6f62206170706c69636174696f6e2069643c4f70656e696e6743616e63656c656404002801244f70656e696e674964000e0c8c456d697473206f6e2063616e63656c696e6720746865206a6f62206f70656e696e672e1c506172616d733a302d204f70656e696e6720696424427564676574536574040018011c42616c616e6365000f0cc8456d697473206f6e2073657474696e67207468652062756467657420666f722074686520776f726b696e672067726f75702e1c506172616d733a302d206e65772062756467657468576f726b65725265776172644163636f756e74557064617465640800280120576f726b6572496400000001244163636f756e744964001010cc456d697473206f6e207570646174696e672074686520726577617264206163636f756e74206f662074686520776f726b65722e1c506172616d733a4c2d204964206f662074686520776f726b65722e882d20526577617264206163636f756e74206964206f662074686520776f726b65722e64576f726b6572526577617264416d6f756e74557064617465640800280120576f726b6572496400004501013c4f7074696f6e3c42616c616e63653e001110c8456d697473206f6e207570646174696e67207468652072657761726420616d6f756e74206f662074686520776f726b65722e1c506172616d733a4c2d204964206f662074686520776f726b65722e482d205265776172642070657220626c6f636b44537461747573546578744368616e67656408002c01104861736800003101013c4f7074696f6e3c5665633c75383e3e001210dc456d697473206f6e207570646174696e6720746865207374617475732074657874206f662074686520776f726b696e672067726f75702e1c506172616d733a482d2073746174757320746578742068617368342d207374617475732074657874384275646765745370656e64696e670c000001244163636f756e744964000018011c42616c616e636500003101013c4f7074696f6e3c5665633c75383e3e001314c8456d697473206f6e206275646765742066726f6d2074686520776f726b696e672067726f7570206265696e67207370656e741c506172616d733a582d205265636569766572204163636f756e742049642e402d2042616c616e6365207370656e742e302d20526174696f6e616c652e28526577617264506169641000280120576f726b6572496400000001244163636f756e744964000018011c42616c616e63650000910301445265776172645061796d656e74547970650014186c456d697473206f6e20706179696e6720746865207265776172642e1c506172616d733a4c2d204964206f662074686520776f726b65722e582d205265636569766572204163636f756e742049642e202d20526577617264b42d205061796d656e74207479706520286d697373656420726577617264206f7220726567756c6172206f6e65296c4e65774d69737365645265776172644c6576656c526561636865640800280120576f726b6572496400004501013c4f7074696f6e3c42616c616e63653e00151090456d697473206f6e207265616368696e67206e6577206d6973736564207265776172642e1c506172616d733a302d20576f726b65722049442ee82d204d69737365642072657761726420286f7074696f6e616c292e204e6f6e65206d65616e7320276e6f206d697373656420726577617264272e60576f726b696e6747726f757042756467657446756e6465640c002801204d656d6265724964000018011c42616c616e6365000030011c5665633c75383e0016147846756e642074686520776f726b696e672067726f7570206275646765742e1c506172616d733a2c2d204d656d6265722049444c2d20416d6f756e74206f662062616c616e63652c2d20526174696f6e616c65304c65616452656d61726b6564040030011c5665633c75383e00170c94456d697473206f6e204c656164206d616b696e6720612072656d61726b206d6573736167651c506172616d733a242d206d65737361676538576f726b657252656d61726b65640800280120576f726b65724964000030011c5665633c75383e00181094456d697473206f6e204c656164206d616b696e6720612072656d61726b206d6573736167651c506172616d733a202d20776f726b6572242d206d6573736167650c5c4576656e747320666f722074686973206d6f64756c652e00385f47726f75705f206576656e7473a903085070616c6c65745f776f726b696e675f67726f757024496e7374616e63653400000000ad03085070616c6c65745f776f726b696e675f67726f7570205261774576656e7430244f70656e696e6749640128344170706c69636174696f6e49640128684170706c69636174696f6e4964546f576f726b657249644d617001750320576f726b657249640128244163636f756e74496401001c42616c616e636501182c4f70656e696e67547970650181032c5374616b65506f6c696379016103604170706c794f6e4f70656e696e67506172616d6574657273018503204d656d626572496401281048617368012c044901b1030164304f70656e696e67416464656414002801244f70656e696e674964000030011c5665633c75383e00008103012c4f70656e696e675479706500006103012c5374616b65506f6c69637900004501013c4f7074696f6e3c42616c616e63653e00001c80456d697473206f6e20616464696e67206e6577206a6f62206f70656e696e672e1c506172616d733a302d204f70656e696e67206964342d204465736372697074696f6e782d204f70656e696e672054797065284c656164206f7220576f726b657229782d205374616b6520506f6c69637920666f7220746865206f70656e696e67482d205265776172642070657220626c6f636b404170706c6965644f6e4f70656e696e670800850301604170706c794f6e4f70656e696e67506172616d657465727300002801344170706c69636174696f6e4964000110dc456d697473206f6e20616464696e6720746865206170706c69636174696f6e20666f722074686520776f726b6572206f70656e696e672e1c506172616d733a542d204f70656e696e6720706172616d657465726573402d204170706c69636174696f6e206964344f70656e696e6746696c6c65640c002801244f70656e696e6749640000750301684170706c69636174696f6e4964546f576f726b657249644d617000006901015c42547265655365743c4170706c69636174696f6e49643e00021484456d697473206f6e2066696c6c696e6720746865206a6f62206f70656e696e672e1c506172616d733a4c2d20576f726b6572206f70656e696e67206964cc2d20576f726b6572206170706c69636174696f6e20696420746f2074686520776f726b65722069642064696374696f6e617279ac2d204170706c69636174696f6e6420696473207573656420746f2066696c6c20746865206f70656e696e67244c65616465725365740400280120576f726b6572496400030c88456d697473206f6e2073657474696e67207468652067726f7570206c65616465722e1c506172616d733a482d2047726f757020776f726b65722069642e60576f726b6572526f6c654163636f756e74557064617465640800280120576f726b6572496400000001244163636f756e744964000410c4456d697473206f6e207570646174696e672074686520726f6c65206163636f756e74206f662074686520776f726b65722e1c506172616d733a4c2d204964206f662074686520776f726b65722e802d20526f6c65206163636f756e74206964206f662074686520776f726b65722e2c4c6561646572556e7365740005047c456d697473206f6e20756e2d73657474696e6720746865206c65616465722e30576f726b65724578697465640400280120576f726b6572496400061070456d697473206f6e2065786974696e672074686520776f726b65722e1c506172616d733a302d20776f726b65722069642e302d20526174696f6e616c652e50576f726b6572537461727465644c656176696e670800280120576f726b6572496400003101013c4f7074696f6e3c5665633c75383e3e000710b4456d697473207768656e20776f726b65722073746172746564206c656176696e6720746865697220726f6c652e1c506172616d733a302d20576f726b65722069642e302d20526174696f6e616c652e405465726d696e61746564576f726b65720c00280120576f726b6572496400004501013c4f7074696f6e3c42616c616e63653e00003101013c4f7074696f6e3c5665633c75383e3e00081480456d697473206f6e207465726d696e6174696e672074686520776f726b65722e1c506172616d733a302d20776f726b65722069642e282d2050656e616c74792e302d20526174696f6e616c652e405465726d696e617465644c65616465720c00280120576f726b6572496400004501013c4f7074696f6e3c42616c616e63653e00003101013c4f7074696f6e3c5665633c75383e3e00091480456d697473206f6e207465726d696e6174696e6720746865206c65616465722e1c506172616d733a4c2d206c656164657220776f726b65722069642e282d2050656e616c74792e302d20526174696f6e616c652e305374616b65536c61736865641000280120576f726b65724964000018011c42616c616e6365000018011c42616c616e636500003101013c4f7074696f6e3c5665633c75383e3e000a18c0456d697473206f6e20736c617368696e672074686520726567756c617220776f726b65722f6c656164207374616b652e1c506172616d733a642d20726567756c617220776f726b65722f6c6561642069642e642d2061637475616c20736c61736865642062616c616e63652e702d2052657175657374656420736c61736865642062616c616e63652e302d20526174696f6e616c652e385374616b654465637265617365640800280120576f726b65724964000018011c42616c616e6365000b10c8456d697473206f6e2064656372656173696e672074686520726567756c617220776f726b65722f6c656164207374616b652e1c506172616d733a642d20726567756c617220776f726b65722f6c6561642069642e502d207374616b652064656c746120616d6f756e74385374616b65496e637265617365640800280120576f726b65724964000018011c42616c616e6365000c10c8456d697473206f6e20696e6372656173696e672074686520726567756c617220776f726b65722f6c656164207374616b652e1c506172616d733a642d20726567756c617220776f726b65722f6c6561642069642e502d207374616b652064656c746120616d6f756e74504170706c69636174696f6e57697468647261776e04002801344170706c69636174696f6e4964000d0c2501456d697473206f6e207769746864726177696e6720746865206170706c69636174696f6e20666f722074686520726567756c617220776f726b65722f6c656164206f70656e696e672e1c506172616d733a502d204a6f62206170706c69636174696f6e2069643c4f70656e696e6743616e63656c656404002801244f70656e696e674964000e0c8c456d697473206f6e2063616e63656c696e6720746865206a6f62206f70656e696e672e1c506172616d733a302d204f70656e696e6720696424427564676574536574040018011c42616c616e6365000f0cc8456d697473206f6e2073657474696e67207468652062756467657420666f722074686520776f726b696e672067726f75702e1c506172616d733a302d206e65772062756467657468576f726b65725265776172644163636f756e74557064617465640800280120576f726b6572496400000001244163636f756e744964001010cc456d697473206f6e207570646174696e672074686520726577617264206163636f756e74206f662074686520776f726b65722e1c506172616d733a4c2d204964206f662074686520776f726b65722e882d20526577617264206163636f756e74206964206f662074686520776f726b65722e64576f726b6572526577617264416d6f756e74557064617465640800280120576f726b6572496400004501013c4f7074696f6e3c42616c616e63653e001110c8456d697473206f6e207570646174696e67207468652072657761726420616d6f756e74206f662074686520776f726b65722e1c506172616d733a4c2d204964206f662074686520776f726b65722e482d205265776172642070657220626c6f636b44537461747573546578744368616e67656408002c01104861736800003101013c4f7074696f6e3c5665633c75383e3e001210dc456d697473206f6e207570646174696e6720746865207374617475732074657874206f662074686520776f726b696e672067726f75702e1c506172616d733a482d2073746174757320746578742068617368342d207374617475732074657874384275646765745370656e64696e670c000001244163636f756e744964000018011c42616c616e636500003101013c4f7074696f6e3c5665633c75383e3e001314c8456d697473206f6e206275646765742066726f6d2074686520776f726b696e672067726f7570206265696e67207370656e741c506172616d733a582d205265636569766572204163636f756e742049642e402d2042616c616e6365207370656e742e302d20526174696f6e616c652e28526577617264506169641000280120576f726b6572496400000001244163636f756e744964000018011c42616c616e63650000910301445265776172645061796d656e74547970650014186c456d697473206f6e20706179696e6720746865207265776172642e1c506172616d733a4c2d204964206f662074686520776f726b65722e582d205265636569766572204163636f756e742049642e202d20526577617264b42d205061796d656e74207479706520286d697373656420726577617264206f7220726567756c6172206f6e65296c4e65774d69737365645265776172644c6576656c526561636865640800280120576f726b6572496400004501013c4f7074696f6e3c42616c616e63653e00151090456d697473206f6e207265616368696e67206e6577206d6973736564207265776172642e1c506172616d733a302d20576f726b65722049442ee82d204d69737365642072657761726420286f7074696f6e616c292e204e6f6e65206d65616e7320276e6f206d697373656420726577617264272e60576f726b696e6747726f757042756467657446756e6465640c002801204d656d6265724964000018011c42616c616e6365000030011c5665633c75383e0016147846756e642074686520776f726b696e672067726f7570206275646765742e1c506172616d733a2c2d204d656d6265722049444c2d20416d6f756e74206f662062616c616e63652c2d20526174696f6e616c65304c65616452656d61726b6564040030011c5665633c75383e00170c94456d697473206f6e204c656164206d616b696e6720612072656d61726b206d6573736167651c506172616d733a242d206d65737361676538576f726b657252656d61726b65640800280120576f726b65724964000030011c5665633c75383e00181094456d697473206f6e204c656164206d616b696e6720612072656d61726b206d6573736167651c506172616d733a202d20776f726b6572242d206d6573736167650c5c4576656e747320666f722074686973206d6f64756c652e00385f47726f75705f206576656e7473b103085070616c6c65745f776f726b696e675f67726f757024496e7374616e63653500000000b503085070616c6c65745f776f726b696e675f67726f7570205261774576656e7430244f70656e696e6749640128344170706c69636174696f6e49640128684170706c69636174696f6e4964546f576f726b657249644d617001750320576f726b657249640128244163636f756e74496401001c42616c616e636501182c4f70656e696e67547970650181032c5374616b65506f6c696379016103604170706c794f6e4f70656e696e67506172616d6574657273018503204d656d626572496401281048617368012c044901b9030164304f70656e696e67416464656414002801244f70656e696e674964000030011c5665633c75383e00008103012c4f70656e696e675479706500006103012c5374616b65506f6c69637900004501013c4f7074696f6e3c42616c616e63653e00001c80456d697473206f6e20616464696e67206e6577206a6f62206f70656e696e672e1c506172616d733a302d204f70656e696e67206964342d204465736372697074696f6e782d204f70656e696e672054797065284c656164206f7220576f726b657229782d205374616b6520506f6c69637920666f7220746865206f70656e696e67482d205265776172642070657220626c6f636b404170706c6965644f6e4f70656e696e670800850301604170706c794f6e4f70656e696e67506172616d657465727300002801344170706c69636174696f6e4964000110dc456d697473206f6e20616464696e6720746865206170706c69636174696f6e20666f722074686520776f726b6572206f70656e696e672e1c506172616d733a542d204f70656e696e6720706172616d657465726573402d204170706c69636174696f6e206964344f70656e696e6746696c6c65640c002801244f70656e696e6749640000750301684170706c69636174696f6e4964546f576f726b657249644d617000006901015c42547265655365743c4170706c69636174696f6e49643e00021484456d697473206f6e2066696c6c696e6720746865206a6f62206f70656e696e672e1c506172616d733a4c2d20576f726b6572206f70656e696e67206964cc2d20576f726b6572206170706c69636174696f6e20696420746f2074686520776f726b65722069642064696374696f6e617279ac2d204170706c69636174696f6e6420696473207573656420746f2066696c6c20746865206f70656e696e67244c65616465725365740400280120576f726b6572496400030c88456d697473206f6e2073657474696e67207468652067726f7570206c65616465722e1c506172616d733a482d2047726f757020776f726b65722069642e60576f726b6572526f6c654163636f756e74557064617465640800280120576f726b6572496400000001244163636f756e744964000410c4456d697473206f6e207570646174696e672074686520726f6c65206163636f756e74206f662074686520776f726b65722e1c506172616d733a4c2d204964206f662074686520776f726b65722e802d20526f6c65206163636f756e74206964206f662074686520776f726b65722e2c4c6561646572556e7365740005047c456d697473206f6e20756e2d73657474696e6720746865206c65616465722e30576f726b65724578697465640400280120576f726b6572496400061070456d697473206f6e2065786974696e672074686520776f726b65722e1c506172616d733a302d20776f726b65722069642e302d20526174696f6e616c652e50576f726b6572537461727465644c656176696e670800280120576f726b6572496400003101013c4f7074696f6e3c5665633c75383e3e000710b4456d697473207768656e20776f726b65722073746172746564206c656176696e6720746865697220726f6c652e1c506172616d733a302d20576f726b65722069642e302d20526174696f6e616c652e405465726d696e61746564576f726b65720c00280120576f726b6572496400004501013c4f7074696f6e3c42616c616e63653e00003101013c4f7074696f6e3c5665633c75383e3e00081480456d697473206f6e207465726d696e6174696e672074686520776f726b65722e1c506172616d733a302d20776f726b65722069642e282d2050656e616c74792e302d20526174696f6e616c652e405465726d696e617465644c65616465720c00280120576f726b6572496400004501013c4f7074696f6e3c42616c616e63653e00003101013c4f7074696f6e3c5665633c75383e3e00091480456d697473206f6e207465726d696e6174696e6720746865206c65616465722e1c506172616d733a4c2d206c656164657220776f726b65722069642e282d2050656e616c74792e302d20526174696f6e616c652e305374616b65536c61736865641000280120576f726b65724964000018011c42616c616e6365000018011c42616c616e636500003101013c4f7074696f6e3c5665633c75383e3e000a18c0456d697473206f6e20736c617368696e672074686520726567756c617220776f726b65722f6c656164207374616b652e1c506172616d733a642d20726567756c617220776f726b65722f6c6561642069642e642d2061637475616c20736c61736865642062616c616e63652e702d2052657175657374656420736c61736865642062616c616e63652e302d20526174696f6e616c652e385374616b654465637265617365640800280120576f726b65724964000018011c42616c616e6365000b10c8456d697473206f6e2064656372656173696e672074686520726567756c617220776f726b65722f6c656164207374616b652e1c506172616d733a642d20726567756c617220776f726b65722f6c6561642069642e502d207374616b652064656c746120616d6f756e74385374616b65496e637265617365640800280120576f726b65724964000018011c42616c616e6365000c10c8456d697473206f6e20696e6372656173696e672074686520726567756c617220776f726b65722f6c656164207374616b652e1c506172616d733a642d20726567756c617220776f726b65722f6c6561642069642e502d207374616b652064656c746120616d6f756e74504170706c69636174696f6e57697468647261776e04002801344170706c69636174696f6e4964000d0c2501456d697473206f6e207769746864726177696e6720746865206170706c69636174696f6e20666f722074686520726567756c617220776f726b65722f6c656164206f70656e696e672e1c506172616d733a502d204a6f62206170706c69636174696f6e2069643c4f70656e696e6743616e63656c656404002801244f70656e696e674964000e0c8c456d697473206f6e2063616e63656c696e6720746865206a6f62206f70656e696e672e1c506172616d733a302d204f70656e696e6720696424427564676574536574040018011c42616c616e6365000f0cc8456d697473206f6e2073657474696e67207468652062756467657420666f722074686520776f726b696e672067726f75702e1c506172616d733a302d206e65772062756467657468576f726b65725265776172644163636f756e74557064617465640800280120576f726b6572496400000001244163636f756e744964001010cc456d697473206f6e207570646174696e672074686520726577617264206163636f756e74206f662074686520776f726b65722e1c506172616d733a4c2d204964206f662074686520776f726b65722e882d20526577617264206163636f756e74206964206f662074686520776f726b65722e64576f726b6572526577617264416d6f756e74557064617465640800280120576f726b6572496400004501013c4f7074696f6e3c42616c616e63653e001110c8456d697473206f6e207570646174696e67207468652072657761726420616d6f756e74206f662074686520776f726b65722e1c506172616d733a4c2d204964206f662074686520776f726b65722e482d205265776172642070657220626c6f636b44537461747573546578744368616e67656408002c01104861736800003101013c4f7074696f6e3c5665633c75383e3e001210dc456d697473206f6e207570646174696e6720746865207374617475732074657874206f662074686520776f726b696e672067726f75702e1c506172616d733a482d2073746174757320746578742068617368342d207374617475732074657874384275646765745370656e64696e670c000001244163636f756e744964000018011c42616c616e636500003101013c4f7074696f6e3c5665633c75383e3e001314c8456d697473206f6e206275646765742066726f6d2074686520776f726b696e672067726f7570206265696e67207370656e741c506172616d733a582d205265636569766572204163636f756e742049642e402d2042616c616e6365207370656e742e302d20526174696f6e616c652e28526577617264506169641000280120576f726b6572496400000001244163636f756e744964000018011c42616c616e63650000910301445265776172645061796d656e74547970650014186c456d697473206f6e20706179696e6720746865207265776172642e1c506172616d733a4c2d204964206f662074686520776f726b65722e582d205265636569766572204163636f756e742049642e202d20526577617264b42d205061796d656e74207479706520286d697373656420726577617264206f7220726567756c6172206f6e65296c4e65774d69737365645265776172644c6576656c526561636865640800280120576f726b6572496400004501013c4f7074696f6e3c42616c616e63653e00151090456d697473206f6e207265616368696e67206e6577206d6973736564207265776172642e1c506172616d733a302d20576f726b65722049442ee82d204d69737365642072657761726420286f7074696f6e616c292e204e6f6e65206d65616e7320276e6f206d697373656420726577617264272e60576f726b696e6747726f757042756467657446756e6465640c002801204d656d6265724964000018011c42616c616e6365000030011c5665633c75383e0016147846756e642074686520776f726b696e672067726f7570206275646765742e1c506172616d733a2c2d204d656d6265722049444c2d20416d6f756e74206f662062616c616e63652c2d20526174696f6e616c65304c65616452656d61726b6564040030011c5665633c75383e00170c94456d697473206f6e204c656164206d616b696e6720612072656d61726b206d6573736167651c506172616d733a242d206d65737361676538576f726b657252656d61726b65640800280120576f726b65724964000030011c5665633c75383e00181094456d697473206f6e204c656164206d616b696e6720612072656d61726b206d6573736167651c506172616d733a202d20776f726b6572242d206d6573736167650c5c4576656e747320666f722074686973206d6f64756c652e00385f47726f75705f206576656e7473b903085070616c6c65745f776f726b696e675f67726f757024496e7374616e63653600000000bd03085070616c6c65745f776f726b696e675f67726f7570205261774576656e7430244f70656e696e6749640128344170706c69636174696f6e49640128684170706c69636174696f6e4964546f576f726b657249644d617001750320576f726b657249640128244163636f756e74496401001c42616c616e636501182c4f70656e696e67547970650181032c5374616b65506f6c696379016103604170706c794f6e4f70656e696e67506172616d6574657273018503204d656d626572496401281048617368012c044901c1030164304f70656e696e67416464656414002801244f70656e696e674964000030011c5665633c75383e00008103012c4f70656e696e675479706500006103012c5374616b65506f6c69637900004501013c4f7074696f6e3c42616c616e63653e00001c80456d697473206f6e20616464696e67206e6577206a6f62206f70656e696e672e1c506172616d733a302d204f70656e696e67206964342d204465736372697074696f6e782d204f70656e696e672054797065284c656164206f7220576f726b657229782d205374616b6520506f6c69637920666f7220746865206f70656e696e67482d205265776172642070657220626c6f636b404170706c6965644f6e4f70656e696e670800850301604170706c794f6e4f70656e696e67506172616d657465727300002801344170706c69636174696f6e4964000110dc456d697473206f6e20616464696e6720746865206170706c69636174696f6e20666f722074686520776f726b6572206f70656e696e672e1c506172616d733a542d204f70656e696e6720706172616d657465726573402d204170706c69636174696f6e206964344f70656e696e6746696c6c65640c002801244f70656e696e6749640000750301684170706c69636174696f6e4964546f576f726b657249644d617000006901015c42547265655365743c4170706c69636174696f6e49643e00021484456d697473206f6e2066696c6c696e6720746865206a6f62206f70656e696e672e1c506172616d733a4c2d20576f726b6572206f70656e696e67206964cc2d20576f726b6572206170706c69636174696f6e20696420746f2074686520776f726b65722069642064696374696f6e617279ac2d204170706c69636174696f6e6420696473207573656420746f2066696c6c20746865206f70656e696e67244c65616465725365740400280120576f726b6572496400030c88456d697473206f6e2073657474696e67207468652067726f7570206c65616465722e1c506172616d733a482d2047726f757020776f726b65722069642e60576f726b6572526f6c654163636f756e74557064617465640800280120576f726b6572496400000001244163636f756e744964000410c4456d697473206f6e207570646174696e672074686520726f6c65206163636f756e74206f662074686520776f726b65722e1c506172616d733a4c2d204964206f662074686520776f726b65722e802d20526f6c65206163636f756e74206964206f662074686520776f726b65722e2c4c6561646572556e7365740005047c456d697473206f6e20756e2d73657474696e6720746865206c65616465722e30576f726b65724578697465640400280120576f726b6572496400061070456d697473206f6e2065786974696e672074686520776f726b65722e1c506172616d733a302d20776f726b65722069642e302d20526174696f6e616c652e50576f726b6572537461727465644c656176696e670800280120576f726b6572496400003101013c4f7074696f6e3c5665633c75383e3e000710b4456d697473207768656e20776f726b65722073746172746564206c656176696e6720746865697220726f6c652e1c506172616d733a302d20576f726b65722069642e302d20526174696f6e616c652e405465726d696e61746564576f726b65720c00280120576f726b6572496400004501013c4f7074696f6e3c42616c616e63653e00003101013c4f7074696f6e3c5665633c75383e3e00081480456d697473206f6e207465726d696e6174696e672074686520776f726b65722e1c506172616d733a302d20776f726b65722069642e282d2050656e616c74792e302d20526174696f6e616c652e405465726d696e617465644c65616465720c00280120576f726b6572496400004501013c4f7074696f6e3c42616c616e63653e00003101013c4f7074696f6e3c5665633c75383e3e00091480456d697473206f6e207465726d696e6174696e6720746865206c65616465722e1c506172616d733a4c2d206c656164657220776f726b65722069642e282d2050656e616c74792e302d20526174696f6e616c652e305374616b65536c61736865641000280120576f726b65724964000018011c42616c616e6365000018011c42616c616e636500003101013c4f7074696f6e3c5665633c75383e3e000a18c0456d697473206f6e20736c617368696e672074686520726567756c617220776f726b65722f6c656164207374616b652e1c506172616d733a642d20726567756c617220776f726b65722f6c6561642069642e642d2061637475616c20736c61736865642062616c616e63652e702d2052657175657374656420736c61736865642062616c616e63652e302d20526174696f6e616c652e385374616b654465637265617365640800280120576f726b65724964000018011c42616c616e6365000b10c8456d697473206f6e2064656372656173696e672074686520726567756c617220776f726b65722f6c656164207374616b652e1c506172616d733a642d20726567756c617220776f726b65722f6c6561642069642e502d207374616b652064656c746120616d6f756e74385374616b65496e637265617365640800280120576f726b65724964000018011c42616c616e6365000c10c8456d697473206f6e20696e6372656173696e672074686520726567756c617220776f726b65722f6c656164207374616b652e1c506172616d733a642d20726567756c617220776f726b65722f6c6561642069642e502d207374616b652064656c746120616d6f756e74504170706c69636174696f6e57697468647261776e04002801344170706c69636174696f6e4964000d0c2501456d697473206f6e207769746864726177696e6720746865206170706c69636174696f6e20666f722074686520726567756c617220776f726b65722f6c656164206f70656e696e672e1c506172616d733a502d204a6f62206170706c69636174696f6e2069643c4f70656e696e6743616e63656c656404002801244f70656e696e674964000e0c8c456d697473206f6e2063616e63656c696e6720746865206a6f62206f70656e696e672e1c506172616d733a302d204f70656e696e6720696424427564676574536574040018011c42616c616e6365000f0cc8456d697473206f6e2073657474696e67207468652062756467657420666f722074686520776f726b696e672067726f75702e1c506172616d733a302d206e65772062756467657468576f726b65725265776172644163636f756e74557064617465640800280120576f726b6572496400000001244163636f756e744964001010cc456d697473206f6e207570646174696e672074686520726577617264206163636f756e74206f662074686520776f726b65722e1c506172616d733a4c2d204964206f662074686520776f726b65722e882d20526577617264206163636f756e74206964206f662074686520776f726b65722e64576f726b6572526577617264416d6f756e74557064617465640800280120576f726b6572496400004501013c4f7074696f6e3c42616c616e63653e001110c8456d697473206f6e207570646174696e67207468652072657761726420616d6f756e74206f662074686520776f726b65722e1c506172616d733a4c2d204964206f662074686520776f726b65722e482d205265776172642070657220626c6f636b44537461747573546578744368616e67656408002c01104861736800003101013c4f7074696f6e3c5665633c75383e3e001210dc456d697473206f6e207570646174696e6720746865207374617475732074657874206f662074686520776f726b696e672067726f75702e1c506172616d733a482d2073746174757320746578742068617368342d207374617475732074657874384275646765745370656e64696e670c000001244163636f756e744964000018011c42616c616e636500003101013c4f7074696f6e3c5665633c75383e3e001314c8456d697473206f6e206275646765742066726f6d2074686520776f726b696e672067726f7570206265696e67207370656e741c506172616d733a582d205265636569766572204163636f756e742049642e402d2042616c616e6365207370656e742e302d20526174696f6e616c652e28526577617264506169641000280120576f726b6572496400000001244163636f756e744964000018011c42616c616e63650000910301445265776172645061796d656e74547970650014186c456d697473206f6e20706179696e6720746865207265776172642e1c506172616d733a4c2d204964206f662074686520776f726b65722e582d205265636569766572204163636f756e742049642e202d20526577617264b42d205061796d656e74207479706520286d697373656420726577617264206f7220726567756c6172206f6e65296c4e65774d69737365645265776172644c6576656c526561636865640800280120576f726b6572496400004501013c4f7074696f6e3c42616c616e63653e00151090456d697473206f6e207265616368696e67206e6577206d6973736564207265776172642e1c506172616d733a302d20576f726b65722049442ee82d204d69737365642072657761726420286f7074696f6e616c292e204e6f6e65206d65616e7320276e6f206d697373656420726577617264272e60576f726b696e6747726f757042756467657446756e6465640c002801204d656d6265724964000018011c42616c616e6365000030011c5665633c75383e0016147846756e642074686520776f726b696e672067726f7570206275646765742e1c506172616d733a2c2d204d656d6265722049444c2d20416d6f756e74206f662062616c616e63652c2d20526174696f6e616c65304c65616452656d61726b6564040030011c5665633c75383e00170c94456d697473206f6e204c656164206d616b696e6720612072656d61726b206d6573736167651c506172616d733a242d206d65737361676538576f726b657252656d61726b65640800280120576f726b65724964000030011c5665633c75383e00181094456d697473206f6e204c656164206d616b696e6720612072656d61726b206d6573736167651c506172616d733a202d20776f726b6572242d206d6573736167650c5c4576656e747320666f722074686973206d6f64756c652e00385f47726f75705f206576656e7473c103085070616c6c65745f776f726b696e675f67726f757024496e7374616e63653700000000c503085070616c6c65745f776f726b696e675f67726f7570205261774576656e7430244f70656e696e6749640128344170706c69636174696f6e49640128684170706c69636174696f6e4964546f576f726b657249644d617001750320576f726b657249640128244163636f756e74496401001c42616c616e636501182c4f70656e696e67547970650181032c5374616b65506f6c696379016103604170706c794f6e4f70656e696e67506172616d6574657273018503204d656d626572496401281048617368012c044901c9030164304f70656e696e67416464656414002801244f70656e696e674964000030011c5665633c75383e00008103012c4f70656e696e675479706500006103012c5374616b65506f6c69637900004501013c4f7074696f6e3c42616c616e63653e00001c80456d697473206f6e20616464696e67206e6577206a6f62206f70656e696e672e1c506172616d733a302d204f70656e696e67206964342d204465736372697074696f6e782d204f70656e696e672054797065284c656164206f7220576f726b657229782d205374616b6520506f6c69637920666f7220746865206f70656e696e67482d205265776172642070657220626c6f636b404170706c6965644f6e4f70656e696e670800850301604170706c794f6e4f70656e696e67506172616d657465727300002801344170706c69636174696f6e4964000110dc456d697473206f6e20616464696e6720746865206170706c69636174696f6e20666f722074686520776f726b6572206f70656e696e672e1c506172616d733a542d204f70656e696e6720706172616d657465726573402d204170706c69636174696f6e206964344f70656e696e6746696c6c65640c002801244f70656e696e6749640000750301684170706c69636174696f6e4964546f576f726b657249644d617000006901015c42547265655365743c4170706c69636174696f6e49643e00021484456d697473206f6e2066696c6c696e6720746865206a6f62206f70656e696e672e1c506172616d733a4c2d20576f726b6572206f70656e696e67206964cc2d20576f726b6572206170706c69636174696f6e20696420746f2074686520776f726b65722069642064696374696f6e617279ac2d204170706c69636174696f6e6420696473207573656420746f2066696c6c20746865206f70656e696e67244c65616465725365740400280120576f726b6572496400030c88456d697473206f6e2073657474696e67207468652067726f7570206c65616465722e1c506172616d733a482d2047726f757020776f726b65722069642e60576f726b6572526f6c654163636f756e74557064617465640800280120576f726b6572496400000001244163636f756e744964000410c4456d697473206f6e207570646174696e672074686520726f6c65206163636f756e74206f662074686520776f726b65722e1c506172616d733a4c2d204964206f662074686520776f726b65722e802d20526f6c65206163636f756e74206964206f662074686520776f726b65722e2c4c6561646572556e7365740005047c456d697473206f6e20756e2d73657474696e6720746865206c65616465722e30576f726b65724578697465640400280120576f726b6572496400061070456d697473206f6e2065786974696e672074686520776f726b65722e1c506172616d733a302d20776f726b65722069642e302d20526174696f6e616c652e50576f726b6572537461727465644c656176696e670800280120576f726b6572496400003101013c4f7074696f6e3c5665633c75383e3e000710b4456d697473207768656e20776f726b65722073746172746564206c656176696e6720746865697220726f6c652e1c506172616d733a302d20576f726b65722069642e302d20526174696f6e616c652e405465726d696e61746564576f726b65720c00280120576f726b6572496400004501013c4f7074696f6e3c42616c616e63653e00003101013c4f7074696f6e3c5665633c75383e3e00081480456d697473206f6e207465726d696e6174696e672074686520776f726b65722e1c506172616d733a302d20776f726b65722069642e282d2050656e616c74792e302d20526174696f6e616c652e405465726d696e617465644c65616465720c00280120576f726b6572496400004501013c4f7074696f6e3c42616c616e63653e00003101013c4f7074696f6e3c5665633c75383e3e00091480456d697473206f6e207465726d696e6174696e6720746865206c65616465722e1c506172616d733a4c2d206c656164657220776f726b65722069642e282d2050656e616c74792e302d20526174696f6e616c652e305374616b65536c61736865641000280120576f726b65724964000018011c42616c616e6365000018011c42616c616e636500003101013c4f7074696f6e3c5665633c75383e3e000a18c0456d697473206f6e20736c617368696e672074686520726567756c617220776f726b65722f6c656164207374616b652e1c506172616d733a642d20726567756c617220776f726b65722f6c6561642069642e642d2061637475616c20736c61736865642062616c616e63652e702d2052657175657374656420736c61736865642062616c616e63652e302d20526174696f6e616c652e385374616b654465637265617365640800280120576f726b65724964000018011c42616c616e6365000b10c8456d697473206f6e2064656372656173696e672074686520726567756c617220776f726b65722f6c656164207374616b652e1c506172616d733a642d20726567756c617220776f726b65722f6c6561642069642e502d207374616b652064656c746120616d6f756e74385374616b65496e637265617365640800280120576f726b65724964000018011c42616c616e6365000c10c8456d697473206f6e20696e6372656173696e672074686520726567756c617220776f726b65722f6c656164207374616b652e1c506172616d733a642d20726567756c617220776f726b65722f6c6561642069642e502d207374616b652064656c746120616d6f756e74504170706c69636174696f6e57697468647261776e04002801344170706c69636174696f6e4964000d0c2501456d697473206f6e207769746864726177696e6720746865206170706c69636174696f6e20666f722074686520726567756c617220776f726b65722f6c656164206f70656e696e672e1c506172616d733a502d204a6f62206170706c69636174696f6e2069643c4f70656e696e6743616e63656c656404002801244f70656e696e674964000e0c8c456d697473206f6e2063616e63656c696e6720746865206a6f62206f70656e696e672e1c506172616d733a302d204f70656e696e6720696424427564676574536574040018011c42616c616e6365000f0cc8456d697473206f6e2073657474696e67207468652062756467657420666f722074686520776f726b696e672067726f75702e1c506172616d733a302d206e65772062756467657468576f726b65725265776172644163636f756e74557064617465640800280120576f726b6572496400000001244163636f756e744964001010cc456d697473206f6e207570646174696e672074686520726577617264206163636f756e74206f662074686520776f726b65722e1c506172616d733a4c2d204964206f662074686520776f726b65722e882d20526577617264206163636f756e74206964206f662074686520776f726b65722e64576f726b6572526577617264416d6f756e74557064617465640800280120576f726b6572496400004501013c4f7074696f6e3c42616c616e63653e001110c8456d697473206f6e207570646174696e67207468652072657761726420616d6f756e74206f662074686520776f726b65722e1c506172616d733a4c2d204964206f662074686520776f726b65722e482d205265776172642070657220626c6f636b44537461747573546578744368616e67656408002c01104861736800003101013c4f7074696f6e3c5665633c75383e3e001210dc456d697473206f6e207570646174696e6720746865207374617475732074657874206f662074686520776f726b696e672067726f75702e1c506172616d733a482d2073746174757320746578742068617368342d207374617475732074657874384275646765745370656e64696e670c000001244163636f756e744964000018011c42616c616e636500003101013c4f7074696f6e3c5665633c75383e3e001314c8456d697473206f6e206275646765742066726f6d2074686520776f726b696e672067726f7570206265696e67207370656e741c506172616d733a582d205265636569766572204163636f756e742049642e402d2042616c616e6365207370656e742e302d20526174696f6e616c652e28526577617264506169641000280120576f726b6572496400000001244163636f756e744964000018011c42616c616e63650000910301445265776172645061796d656e74547970650014186c456d697473206f6e20706179696e6720746865207265776172642e1c506172616d733a4c2d204964206f662074686520776f726b65722e582d205265636569766572204163636f756e742049642e202d20526577617264b42d205061796d656e74207479706520286d697373656420726577617264206f7220726567756c6172206f6e65296c4e65774d69737365645265776172644c6576656c526561636865640800280120576f726b6572496400004501013c4f7074696f6e3c42616c616e63653e00151090456d697473206f6e207265616368696e67206e6577206d6973736564207265776172642e1c506172616d733a302d20576f726b65722049442ee82d204d69737365642072657761726420286f7074696f6e616c292e204e6f6e65206d65616e7320276e6f206d697373656420726577617264272e60576f726b696e6747726f757042756467657446756e6465640c002801204d656d6265724964000018011c42616c616e6365000030011c5665633c75383e0016147846756e642074686520776f726b696e672067726f7570206275646765742e1c506172616d733a2c2d204d656d6265722049444c2d20416d6f756e74206f662062616c616e63652c2d20526174696f6e616c65304c65616452656d61726b6564040030011c5665633c75383e00170c94456d697473206f6e204c656164206d616b696e6720612072656d61726b206d6573736167651c506172616d733a242d206d65737361676538576f726b657252656d61726b65640800280120576f726b65724964000030011c5665633c75383e00181094456d697473206f6e204c656164206d616b696e6720612072656d61726b206d6573736167651c506172616d733a202d20776f726b6572242d206d6573736167650c5c4576656e747320666f722074686973206d6f64756c652e00385f47726f75705f206576656e7473c903085070616c6c65745f776f726b696e675f67726f757024496e7374616e63653800000000cd03085070616c6c65745f776f726b696e675f67726f7570205261774576656e7430244f70656e696e6749640128344170706c69636174696f6e49640128684170706c69636174696f6e4964546f576f726b657249644d617001750320576f726b657249640128244163636f756e74496401001c42616c616e636501182c4f70656e696e67547970650181032c5374616b65506f6c696379016103604170706c794f6e4f70656e696e67506172616d6574657273018503204d656d626572496401281048617368012c044901d1030164304f70656e696e67416464656414002801244f70656e696e674964000030011c5665633c75383e00008103012c4f70656e696e675479706500006103012c5374616b65506f6c69637900004501013c4f7074696f6e3c42616c616e63653e00001c80456d697473206f6e20616464696e67206e6577206a6f62206f70656e696e672e1c506172616d733a302d204f70656e696e67206964342d204465736372697074696f6e782d204f70656e696e672054797065284c656164206f7220576f726b657229782d205374616b6520506f6c69637920666f7220746865206f70656e696e67482d205265776172642070657220626c6f636b404170706c6965644f6e4f70656e696e670800850301604170706c794f6e4f70656e696e67506172616d657465727300002801344170706c69636174696f6e4964000110dc456d697473206f6e20616464696e6720746865206170706c69636174696f6e20666f722074686520776f726b6572206f70656e696e672e1c506172616d733a542d204f70656e696e6720706172616d657465726573402d204170706c69636174696f6e206964344f70656e696e6746696c6c65640c002801244f70656e696e6749640000750301684170706c69636174696f6e4964546f576f726b657249644d617000006901015c42547265655365743c4170706c69636174696f6e49643e00021484456d697473206f6e2066696c6c696e6720746865206a6f62206f70656e696e672e1c506172616d733a4c2d20576f726b6572206f70656e696e67206964cc2d20576f726b6572206170706c69636174696f6e20696420746f2074686520776f726b65722069642064696374696f6e617279ac2d204170706c69636174696f6e6420696473207573656420746f2066696c6c20746865206f70656e696e67244c65616465725365740400280120576f726b6572496400030c88456d697473206f6e2073657474696e67207468652067726f7570206c65616465722e1c506172616d733a482d2047726f757020776f726b65722069642e60576f726b6572526f6c654163636f756e74557064617465640800280120576f726b6572496400000001244163636f756e744964000410c4456d697473206f6e207570646174696e672074686520726f6c65206163636f756e74206f662074686520776f726b65722e1c506172616d733a4c2d204964206f662074686520776f726b65722e802d20526f6c65206163636f756e74206964206f662074686520776f726b65722e2c4c6561646572556e7365740005047c456d697473206f6e20756e2d73657474696e6720746865206c65616465722e30576f726b65724578697465640400280120576f726b6572496400061070456d697473206f6e2065786974696e672074686520776f726b65722e1c506172616d733a302d20776f726b65722069642e302d20526174696f6e616c652e50576f726b6572537461727465644c656176696e670800280120576f726b6572496400003101013c4f7074696f6e3c5665633c75383e3e000710b4456d697473207768656e20776f726b65722073746172746564206c656176696e6720746865697220726f6c652e1c506172616d733a302d20576f726b65722069642e302d20526174696f6e616c652e405465726d696e61746564576f726b65720c00280120576f726b6572496400004501013c4f7074696f6e3c42616c616e63653e00003101013c4f7074696f6e3c5665633c75383e3e00081480456d697473206f6e207465726d696e6174696e672074686520776f726b65722e1c506172616d733a302d20776f726b65722069642e282d2050656e616c74792e302d20526174696f6e616c652e405465726d696e617465644c65616465720c00280120576f726b6572496400004501013c4f7074696f6e3c42616c616e63653e00003101013c4f7074696f6e3c5665633c75383e3e00091480456d697473206f6e207465726d696e6174696e6720746865206c65616465722e1c506172616d733a4c2d206c656164657220776f726b65722069642e282d2050656e616c74792e302d20526174696f6e616c652e305374616b65536c61736865641000280120576f726b65724964000018011c42616c616e6365000018011c42616c616e636500003101013c4f7074696f6e3c5665633c75383e3e000a18c0456d697473206f6e20736c617368696e672074686520726567756c617220776f726b65722f6c656164207374616b652e1c506172616d733a642d20726567756c617220776f726b65722f6c6561642069642e642d2061637475616c20736c61736865642062616c616e63652e702d2052657175657374656420736c61736865642062616c616e63652e302d20526174696f6e616c652e385374616b654465637265617365640800280120576f726b65724964000018011c42616c616e6365000b10c8456d697473206f6e2064656372656173696e672074686520726567756c617220776f726b65722f6c656164207374616b652e1c506172616d733a642d20726567756c617220776f726b65722f6c6561642069642e502d207374616b652064656c746120616d6f756e74385374616b65496e637265617365640800280120576f726b65724964000018011c42616c616e6365000c10c8456d697473206f6e20696e6372656173696e672074686520726567756c617220776f726b65722f6c656164207374616b652e1c506172616d733a642d20726567756c617220776f726b65722f6c6561642069642e502d207374616b652064656c746120616d6f756e74504170706c69636174696f6e57697468647261776e04002801344170706c69636174696f6e4964000d0c2501456d697473206f6e207769746864726177696e6720746865206170706c69636174696f6e20666f722074686520726567756c617220776f726b65722f6c656164206f70656e696e672e1c506172616d733a502d204a6f62206170706c69636174696f6e2069643c4f70656e696e6743616e63656c656404002801244f70656e696e674964000e0c8c456d697473206f6e2063616e63656c696e6720746865206a6f62206f70656e696e672e1c506172616d733a302d204f70656e696e6720696424427564676574536574040018011c42616c616e6365000f0cc8456d697473206f6e2073657474696e67207468652062756467657420666f722074686520776f726b696e672067726f75702e1c506172616d733a302d206e65772062756467657468576f726b65725265776172644163636f756e74557064617465640800280120576f726b6572496400000001244163636f756e744964001010cc456d697473206f6e207570646174696e672074686520726577617264206163636f756e74206f662074686520776f726b65722e1c506172616d733a4c2d204964206f662074686520776f726b65722e882d20526577617264206163636f756e74206964206f662074686520776f726b65722e64576f726b6572526577617264416d6f756e74557064617465640800280120576f726b6572496400004501013c4f7074696f6e3c42616c616e63653e001110c8456d697473206f6e207570646174696e67207468652072657761726420616d6f756e74206f662074686520776f726b65722e1c506172616d733a4c2d204964206f662074686520776f726b65722e482d205265776172642070657220626c6f636b44537461747573546578744368616e67656408002c01104861736800003101013c4f7074696f6e3c5665633c75383e3e001210dc456d697473206f6e207570646174696e6720746865207374617475732074657874206f662074686520776f726b696e672067726f75702e1c506172616d733a482d2073746174757320746578742068617368342d207374617475732074657874384275646765745370656e64696e670c000001244163636f756e744964000018011c42616c616e636500003101013c4f7074696f6e3c5665633c75383e3e001314c8456d697473206f6e206275646765742066726f6d2074686520776f726b696e672067726f7570206265696e67207370656e741c506172616d733a582d205265636569766572204163636f756e742049642e402d2042616c616e6365207370656e742e302d20526174696f6e616c652e28526577617264506169641000280120576f726b6572496400000001244163636f756e744964000018011c42616c616e63650000910301445265776172645061796d656e74547970650014186c456d697473206f6e20706179696e6720746865207265776172642e1c506172616d733a4c2d204964206f662074686520776f726b65722e582d205265636569766572204163636f756e742049642e202d20526577617264b42d205061796d656e74207479706520286d697373656420726577617264206f7220726567756c6172206f6e65296c4e65774d69737365645265776172644c6576656c526561636865640800280120576f726b6572496400004501013c4f7074696f6e3c42616c616e63653e00151090456d697473206f6e207265616368696e67206e6577206d6973736564207265776172642e1c506172616d733a302d20576f726b65722049442ee82d204d69737365642072657761726420286f7074696f6e616c292e204e6f6e65206d65616e7320276e6f206d697373656420726577617264272e60576f726b696e6747726f757042756467657446756e6465640c002801204d656d6265724964000018011c42616c616e6365000030011c5665633c75383e0016147846756e642074686520776f726b696e672067726f7570206275646765742e1c506172616d733a2c2d204d656d6265722049444c2d20416d6f756e74206f662062616c616e63652c2d20526174696f6e616c65304c65616452656d61726b6564040030011c5665633c75383e00170c94456d697473206f6e204c656164206d616b696e6720612072656d61726b206d6573736167651c506172616d733a242d206d65737361676538576f726b657252656d61726b65640800280120576f726b65724964000030011c5665633c75383e00181094456d697473206f6e204c656164206d616b696e6720612072656d61726b206d6573736167651c506172616d733a202d20776f726b6572242d206d6573736167650c5c4576656e747320666f722074686973206d6f64756c652e00385f47726f75705f206576656e7473d103085070616c6c65745f776f726b696e675f67726f757024496e7374616e63653900000000d50308306672616d655f73797374656d14506861736500010c384170706c7945787472696e736963040010010c7533320000003046696e616c697a6174696f6e00010038496e697469616c697a6174696f6e00020000d9030000022c00dd03000002e10300e10300000408101000e50308306672616d655f73797374656d584c61737452756e74696d6555706772616465496e666f0000080130737065635f76657273696f6ee903014c636f6465633a3a436f6d706163743c7533323e000124737065635f6e616d65ed03016473705f72756e74696d653a3a52756e74696d65537472696e670000e9030000061000ed030000050200f1030c306672616d655f73797374656d1870616c6c65741043616c6c0404540001201872656d61726b04011872656d61726b30011c5665633c75383e000010684d616b6520736f6d65206f6e2d636861696e2072656d61726b2e0034232320436f6d706c6578697479202d20604f28312960387365745f686561705f7061676573040114706167657328010c753634000104f853657420746865206e756d626572206f6620706167657320696e2074686520576562417373656d626c7920656e7669726f6e6d656e74277320686561702e207365745f636f6465040110636f646530011c5665633c75383e0002106453657420746865206e65772072756e74696d6520636f64652e0034232320436f6d706c657869747931012d20604f2843202b2053296020776865726520604360206c656e677468206f662060636f64656020616e642060536020636f6d706c6578697479206f66206063616e5f7365745f636f6465605c7365745f636f64655f776974686f75745f636865636b73040110636f646530011c5665633c75383e000310190153657420746865206e65772072756e74696d6520636f646520776974686f757420646f696e6720616e7920636865636b73206f662074686520676976656e2060636f6465602e0034232320436f6d706c65786974798c2d20604f2843296020776865726520604360206c656e677468206f662060636f6465602c7365745f73746f726167650401146974656d73f50301345665633c4b657956616c75653e0004046853657420736f6d65206974656d73206f662073746f726167652e306b696c6c5f73746f726167650401106b657973a90201205665633c4b65793e000504744b696c6c20736f6d65206974656d732066726f6d2073746f726167652e2c6b696c6c5f70726566697808011870726566697830010c4b657900011c7375626b65797310010c75333200061011014b696c6c20616c6c2073746f72616765206974656d7320776974682061206b657920746861742073746172747320776974682074686520676976656e207072656669782e0039012a2a4e4f54453a2a2a2057652072656c79206f6e2074686520526f6f74206f726967696e20746f2070726f7669646520757320746865206e756d626572206f66207375626b65797320756e6465723d0174686520707265666978207765206172652072656d6f76696e6720746f2061636375726174656c792063616c63756c6174652074686520776569676874206f6620746869732066756e6374696f6e2e4472656d61726b5f776974685f6576656e7404011872656d61726b30011c5665633c75383e000704a44d616b6520736f6d65206f6e2d636861696e2072656d61726b20616e6420656d6974206576656e742e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632ef503000002f90300f90300000408303000fd030c306672616d655f73797374656d186c696d69747330426c6f636b5765696768747300000c0128626173655f626c6f636b2001185765696768740001246d61785f626c6f636b2001185765696768740001247065725f636c617373010401845065724469737061746368436c6173733c57656967687473506572436c6173733e000001040c346672616d655f737570706f7274206469737061746368405065724469737061746368436c617373040454010504000c01186e6f726d616c050401045400012c6f7065726174696f6e616c05040104540001246d616e6461746f72790504010454000005040c306672616d655f73797374656d186c696d6974733c57656967687473506572436c6173730000100138626173655f65787472696e7369632001185765696768740001346d61785f65787472696e736963090401384f7074696f6e3c5765696768743e0001246d61785f746f74616c090401384f7074696f6e3c5765696768743e0001207265736572766564090401384f7074696f6e3c5765696768743e0000090404184f7074696f6e04045401200108104e6f6e6500000010536f6d6504002000000100000d040c306672616d655f73797374656d186c696d6974732c426c6f636b4c656e677468000004010c6d6178110401545065724469737061746368436c6173733c7533323e000011040c346672616d655f737570706f7274206469737061746368405065724469737061746368436c6173730404540110000c01186e6f726d616c1001045400012c6f7065726174696f6e616c100104540001246d616e6461746f72791001045400001504082873705f776569676874733c52756e74696d65446257656967687400000801107265616428010c753634000114777269746528010c75363400001904082873705f76657273696f6e3852756e74696d6556657273696f6e0000200124737065635f6e616d65ed03013452756e74696d65537472696e67000124696d706c5f6e616d65ed03013452756e74696d65537472696e67000144617574686f72696e675f76657273696f6e10010c753332000130737065635f76657273696f6e10010c753332000130696d706c5f76657273696f6e10010c753332000110617069731d04011c4170697356656300014c7472616e73616374696f6e5f76657273696f6e10010c75333200013473746174655f76657273696f6e080108753800001d04040c436f77040454012104000400210400000021040000022504002504000004082904100029040000030800000008002d04000005040031040c306672616d655f73797374656d1870616c6c6574144572726f720404540001183c496e76616c6964537065634e616d650000081101546865206e616d65206f662073706563696669636174696f6e20646f6573206e6f74206d61746368206265747765656e207468652063757272656e742072756e74696d6550616e6420746865206e65772072756e74696d652e685370656356657273696f6e4e65656473546f496e63726561736500010841015468652073706563696669636174696f6e2076657273696f6e206973206e6f7420616c6c6f77656420746f206465637265617365206265747765656e207468652063757272656e742072756e74696d6550616e6420746865206e65772072756e74696d652e744661696c6564546f4578747261637452756e74696d6556657273696f6e00020cec4661696c656420746f2065787472616374207468652072756e74696d652076657273696f6e2066726f6d20746865206e65772072756e74696d652e0009014569746865722063616c6c696e672060436f72655f76657273696f6e60206f72206465636f64696e67206052756e74696d6556657273696f6e60206661696c65642e4c4e6f6e44656661756c74436f6d706f73697465000304fc537569636964652063616c6c6564207768656e20746865206163636f756e7420686173206e6f6e2d64656661756c7420636f6d706f7369746520646174612e3c4e6f6e5a65726f526566436f756e74000404350154686572652069732061206e6f6e2d7a65726f207265666572656e636520636f756e742070726576656e74696e6720746865206163636f756e742066726f6d206265696e67207075726765642e3043616c6c46696c7465726564000504d0546865206f726967696e2066696c7465722070726576656e74207468652063616c6c20746f20626520646973706174636865642e046c4572726f7220666f72207468652053797374656d2070616c6c657435040c3870616c6c65745f7574696c6974791870616c6c65741043616c6c04045400011814626174636804011463616c6c733904017c5665633c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e0000487c53656e642061206261746368206f662064697370617463682063616c6c732e00b04d61792062652063616c6c65642066726f6d20616e79206f726967696e2065786365707420604e6f6e65602e005d012d206063616c6c73603a205468652063616c6c7320746f20626520646973706174636865642066726f6d207468652073616d65206f726967696e2e20546865206e756d626572206f662063616c6c206d757374206e6f74390120206578636565642074686520636f6e7374616e743a2060626174636865645f63616c6c735f6c696d6974602028617661696c61626c6520696e20636f6e7374616e74206d65746164617461292e0055014966206f726967696e20697320726f6f74207468656e207468652063616c6c7320617265206469737061746368656420776974686f757420636865636b696e67206f726967696e2066696c7465722e202854686973ec696e636c7564657320627970617373696e6720606672616d655f73797374656d3a3a436f6e6669673a3a4261736543616c6c46696c74657260292e0034232320436f6d706c6578697479d02d204f284329207768657265204320697320746865206e756d626572206f662063616c6c7320746f20626520626174636865642e005501546869732077696c6c2072657475726e20604f6b6020696e20616c6c2063697263756d7374616e6365732e20546f2064657465726d696e65207468652073756363657373206f66207468652062617463682c20616e31016576656e74206973206465706f73697465642e20496620612063616c6c206661696c656420616e64207468652062617463682077617320696e7465727275707465642c207468656e207468655501604261746368496e74657272757074656460206576656e74206973206465706f73697465642c20616c6f6e67207769746820746865206e756d626572206f66207375636365737366756c2063616c6c73206d6164654d01616e6420746865206572726f72206f6620746865206661696c65642063616c6c2e20496620616c6c2077657265207375636365737366756c2c207468656e2074686520604261746368436f6d706c65746564604c6576656e74206973206465706f73697465642e3461735f64657269766174697665080114696e6465782d04010c75313600011063616c6c3d04017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e000134dc53656e6420612063616c6c207468726f75676820616e20696e64657865642070736575646f6e796d206f66207468652073656e6465722e00550146696c7465722066726f6d206f726967696e206172652070617373656420616c6f6e672e205468652063616c6c2077696c6c2062652064697370617463686564207769746820616e206f726967696e207768696368bc757365207468652073616d652066696c74657220617320746865206f726967696e206f6620746869732063616c6c2e0045014e4f54453a20496620796f75206e65656420746f20656e73757265207468617420616e79206163636f756e742d62617365642066696c746572696e67206973206e6f7420686f6e6f7265642028692e652e61016265636175736520796f7520657870656374206070726f78796020746f2068617665206265656e2075736564207072696f7220696e207468652063616c6c20737461636b20616e6420796f7520646f206e6f742077616e7451017468652063616c6c207265737472696374696f6e7320746f206170706c7920746f20616e79207375622d6163636f756e7473292c207468656e20757365206061735f6d756c74695f7468726573686f6c645f31607c696e20746865204d756c74697369672070616c6c657420696e73746561642e00f44e4f54453a205072696f7220746f2076657273696f6e202a31322c2074686973207761732063616c6c6564206061735f6c696d697465645f737562602e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e2462617463685f616c6c04011463616c6c733904017c5665633c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e000234ec53656e642061206261746368206f662064697370617463682063616c6c7320616e642061746f6d6963616c6c792065786563757465207468656d2e21015468652077686f6c65207472616e73616374696f6e2077696c6c20726f6c6c6261636b20616e64206661696c20696620616e79206f66207468652063616c6c73206661696c65642e00b04d61792062652063616c6c65642066726f6d20616e79206f726967696e2065786365707420604e6f6e65602e005d012d206063616c6c73603a205468652063616c6c7320746f20626520646973706174636865642066726f6d207468652073616d65206f726967696e2e20546865206e756d626572206f662063616c6c206d757374206e6f74390120206578636565642074686520636f6e7374616e743a2060626174636865645f63616c6c735f6c696d6974602028617661696c61626c6520696e20636f6e7374616e74206d65746164617461292e0055014966206f726967696e20697320726f6f74207468656e207468652063616c6c7320617265206469737061746368656420776974686f757420636865636b696e67206f726967696e2066696c7465722e202854686973ec696e636c7564657320627970617373696e6720606672616d655f73797374656d3a3a436f6e6669673a3a4261736543616c6c46696c74657260292e0034232320436f6d706c6578697479d02d204f284329207768657265204320697320746865206e756d626572206f662063616c6c7320746f20626520626174636865642e2c64697370617463685f617308012461735f6f726967696e95060154426f783c543a3a50616c6c6574734f726967696e3e00011063616c6c3d04017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e000318c84469737061746368657320612066756e6374696f6e2063616c6c207769746820612070726f7669646564206f726967696e2e00c4546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f526f6f745f2e0034232320436f6d706c65786974791c2d204f2831292e2c666f7263655f626174636804011463616c6c733904017c5665633c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e0004347c53656e642061206261746368206f662064697370617463682063616c6c732ed4556e6c696b6520606261746368602c20697420616c6c6f7773206572726f727320616e6420776f6e277420696e746572727570742e00b04d61792062652063616c6c65642066726f6d20616e79206f726967696e2065786365707420604e6f6e65602e005d012d206063616c6c73603a205468652063616c6c7320746f20626520646973706174636865642066726f6d207468652073616d65206f726967696e2e20546865206e756d626572206f662063616c6c206d757374206e6f74390120206578636565642074686520636f6e7374616e743a2060626174636865645f63616c6c735f6c696d6974602028617661696c61626c6520696e20636f6e7374616e74206d65746164617461292e004d014966206f726967696e20697320726f6f74207468656e207468652063616c6c732061726520646973706174636820776974686f757420636865636b696e67206f726967696e2066696c7465722e202854686973ec696e636c7564657320627970617373696e6720606672616d655f73797374656d3a3a436f6e6669673a3a4261736543616c6c46696c74657260292e0034232320436f6d706c6578697479d02d204f284329207768657265204320697320746865206e756d626572206f662063616c6c7320746f20626520626174636865642e2c776974685f77656967687408011063616c6c3d04017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e000118776569676874200118576569676874000518c4446973706174636820612066756e6374696f6e2063616c6c2077697468206120737065636966696564207765696768742e002d01546869732066756e6374696f6e20646f6573206e6f7420636865636b2074686520776569676874206f66207468652063616c6c2c20616e6420696e737465616420616c6c6f777320746865b8526f6f74206f726967696e20746f20737065636966792074686520776569676874206f66207468652063616c6c2e00c4546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f526f6f745f2e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e39040000023d04003d0408586a6f7973747265616d5f6e6f64655f72756e74696d652c52756e74696d6543616c6c00018c1853797374656d0400f10301ad0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c53797374656d2c2052756e74696d653e0000001c5574696c6974790400350401b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c5574696c6974792c2052756e74696d653e00010010426162650400410401a50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c426162652c2052756e74696d653e0002002454696d657374616d700400650401b90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c54696d657374616d702c2052756e74696d653e0003002042616c616e6365730400690401b50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c42616c616e6365732c2052756e74696d653e00050068456c656374696f6e50726f76696465724d756c7469506861736504006d0401fd0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c456c656374696f6e50726f76696465724d756c746950686173652c2052756e74696d653e0007001c5374616b696e670400590501b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c5374616b696e672c2052756e74696d653e0008001c53657373696f6e04007d0501b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c53657373696f6e2c2052756e74696d653e0009001c4772616e6470610400890501b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4772616e6470612c2052756e74696d653e000b0020496d4f6e6c696e650400b90501b50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c496d4f6e6c696e652c2052756e74696d653e000d0024566f7465724c6973740400d90501b90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c566f7465724c6973742c2052756e74696d653e0010001c56657374696e670400dd0501b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c56657374696e672c2052756e74696d653e001100204d756c74697369670400e50501b50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4d756c74697369672c2052756e74696d653e0012001c436f756e63696c0400ed0501b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c436f756e63696c2c2052756e74696d653e001300285265666572656e64756d0400f10501bd0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c5265666572656e64756d2c2052756e74696d653e0014001c4d656d626572730400f50501b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4d656d626572732c2052756e74696d653e00150014466f72756d0400f90501a90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c466f72756d2c2052756e74696d653e00160030436f6e737469747574696f6e0400fd0501c50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c436f6e737469747574696f6e2c2052756e74696d653e00170018426f756e74790400010601ad0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c426f756e74792c2052756e74696d653e001800404a6f7973747265616d5574696c6974790400050601d50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4a6f7973747265616d5574696c6974792c2052756e74696d653e0019001c436f6e74656e740400090601b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c436f6e74656e742c2052756e74696d653e001a001c53746f726167650400390601b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c53746f726167652c2052756e74696d653e001b003050726f6a656374546f6b656e04003d0601c50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c50726f6a656374546f6b656e2c2052756e74696d653e001c003c50726f706f73616c73456e67696e650400650601d10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c50726f706f73616c73456e67696e652c2052756e74696d653e001d004c50726f706f73616c7344697363757373696f6e0400690601e10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c50726f706f73616c7344697363757373696f6e2c2052756e74696d653e001e003850726f706f73616c73436f64657804006d0601cd0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c50726f706f73616c73436f6465782c2052756e74696d653e001f0044466f72756d576f726b696e6747726f75700400710601d90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c466f72756d576f726b696e6747726f75702c2052756e74696d653e0020004c53746f72616765576f726b696e6747726f75700400750601e10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c53746f72616765576f726b696e6747726f75702c2052756e74696d653e0021004c436f6e74656e74576f726b696e6747726f75700400790601e10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c436f6e74656e74576f726b696e6747726f75702c2052756e74696d653e0022006c4f7065726174696f6e73576f726b696e6747726f7570416c70686104007d0601010273656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4f7065726174696f6e73576f726b696e6747726f7570416c7068612c2052756e74696d653e0023003c417070576f726b696e6747726f75700400810601d10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c417070576f726b696e6747726f75702c2052756e74696d653e002400584d656d62657273686970576f726b696e6747726f75700400850601ed0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4d656d62657273686970576f726b696e6747726f75702c2052756e74696d653e002500684f7065726174696f6e73576f726b696e6747726f7570426574610400890601fd0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4f7065726174696f6e73576f726b696e6747726f7570426574612c2052756e74696d653e0026006c4f7065726174696f6e73576f726b696e6747726f757047616d6d6104008d0601010273656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4f7065726174696f6e73576f726b696e6747726f757047616d6d612c2052756e74696d653e00270060446973747269627574696f6e576f726b696e6747726f75700400910601f50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c446973747269627574696f6e576f726b696e6747726f75702c2052756e74696d653e0028000041040c2c70616c6c65745f626162651870616c6c65741043616c6c04045400010c4c7265706f72745f65717569766f636174696f6e08014865717569766f636174696f6e5f70726f6f6645040184426f783c45717569766f636174696f6e50726f6f663c543a3a4865616465723e3e00013c6b65795f6f776e65725f70726f6f6659040140543a3a4b65794f776e657250726f6f6600001009015265706f727420617574686f726974792065717569766f636174696f6e2f6d69736265686176696f722e2054686973206d6574686f642077696c6c2076657269667905017468652065717569766f636174696f6e2070726f6f6620616e642076616c69646174652074686520676976656e206b6579206f776e6572736869702070726f6f660d01616761696e73742074686520657874726163746564206f6666656e6465722e20496620626f7468206172652076616c69642c20746865206f6666656e63652077696c6c306265207265706f727465642e707265706f72745f65717569766f636174696f6e5f756e7369676e656408014865717569766f636174696f6e5f70726f6f6645040184426f783c45717569766f636174696f6e50726f6f663c543a3a4865616465723e3e00013c6b65795f6f776e65725f70726f6f6659040140543a3a4b65794f776e657250726f6f6600012009015265706f727420617574686f726974792065717569766f636174696f6e2f6d69736265686176696f722e2054686973206d6574686f642077696c6c2076657269667905017468652065717569766f636174696f6e2070726f6f6620616e642076616c69646174652074686520676976656e206b6579206f776e6572736869702070726f6f660d01616761696e73742074686520657874726163746564206f6666656e6465722e20496620626f7468206172652076616c69642c20746865206f6666656e63652077696c6c306265207265706f727465642e0d01546869732065787472696e736963206d7573742062652063616c6c656420756e7369676e656420616e642069742069732065787065637465642074686174206f6e6c791501626c6f636b20617574686f72732077696c6c2063616c6c206974202876616c69646174656420696e206056616c6964617465556e7369676e656460292c2061732073756368150169662074686520626c6f636b20617574686f7220697320646566696e65642069742077696c6c20626520646566696e6564206173207468652065717569766f636174696f6e247265706f727465722e48706c616e5f636f6e6669675f6368616e6765040118636f6e6669675d0401504e657874436f6e66696744657363726970746f720002105d01506c616e20616e2065706f636820636f6e666967206368616e67652e205468652065706f636820636f6e666967206368616e6765206973207265636f7264656420616e642077696c6c20626520656e6163746564206f6e5101746865206e6578742063616c6c20746f2060656e6163745f65706f63685f6368616e6765602e2054686520636f6e6669672077696c6c20626520616374697661746564206f6e652065706f63682061667465722e59014d756c7469706c652063616c6c7320746f2074686973206d6574686f642077696c6c207265706c61636520616e79206578697374696e6720706c616e6e656420636f6e666967206368616e6765207468617420686164546e6f74206265656e20656e6163746564207965742e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e4504084873705f636f6e73656e7375735f736c6f74734445717569766f636174696f6e50726f6f660818486561646572014904084964015104001001206f6666656e646572510401084964000110736c6f7455040110536c6f7400013066697273745f686561646572490401184865616465720001347365636f6e645f6865616465724904011848656164657200004904102873705f72756e74696d651c67656e65726963186865616465721848656164657208184e756d62657201101048617368014d040014012c706172656e745f686173682c0130486173683a3a4f75747075740001186e756d626572e90301184e756d62657200012873746174655f726f6f742c0130486173683a3a4f757470757400013c65787472696e736963735f726f6f742c0130486173683a3a4f757470757400011864696765737434011844696765737400004d040c2873705f72756e74696d65187472616974732c426c616b6554776f3235360000000051040c4473705f636f6e73656e7375735f626162650c617070185075626c696300000400dc013c737232353531393a3a5075626c696300005504084873705f636f6e73656e7375735f736c6f747310536c6f740000040028010c75363400005904082873705f73657373696f6e3c4d656d6265727368697050726f6f6600000c011c73657373696f6e10013053657373696f6e496e646578000128747269655f6e6f646573a90201305665633c5665633c75383e3e00013c76616c696461746f725f636f756e7410013856616c696461746f72436f756e7400005d040c4473705f636f6e73656e7375735f626162651c64696765737473504e657874436f6e66696744657363726970746f72000104085631080104637d030128287536342c2075363429000134616c6c6f7765645f736c6f747361040130416c6c6f776564536c6f7473000100006104084473705f636f6e73656e7375735f6261626530416c6c6f776564536c6f747300010c305072696d617279536c6f7473000000745072696d617279416e645365636f6e64617279506c61696e536c6f74730001006c5072696d617279416e645365636f6e64617279565246536c6f74730002000065040c4070616c6c65745f74696d657374616d701870616c6c65741043616c6c0404540001040c73657404010c6e6f77240124543a3a4d6f6d656e7400003c54536574207468652063757272656e742074696d652e005501546869732063616c6c2073686f756c6420626520696e766f6b65642065786163746c79206f6e63652070657220626c6f636b2e2049742077696c6c2070616e6963206174207468652066696e616c697a6174696f6ed470686173652c20696620746869732063616c6c206861736e2774206265656e20696e766f6b656420627920746861742074696d652e0041015468652074696d657374616d702073686f756c642062652067726561746572207468616e207468652070726576696f7573206f6e652062792074686520616d6f756e742073706563696669656420627940604d696e696d756d506572696f64602e00d4546865206469737061746368206f726967696e20666f7220746869732063616c6c206d7573742062652060496e686572656e74602e0034232320436f6d706c657869747931012d20604f2831296020284e6f7465207468617420696d706c656d656e746174696f6e73206f6620604f6e54696d657374616d7053657460206d75737420616c736f20626520604f283129602961012d20312073746f72616765207265616420616e6420312073746f72616765206d75746174696f6e2028636f64656320604f28312960292e202862656361757365206f6620604469645570646174653a3a74616b656020696e402020606f6e5f66696e616c697a656029d42d2031206576656e742068616e646c657220606f6e5f74696d657374616d705f736574602e204d75737420626520604f283129602e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e69040c3c70616c6c65745f62616c616e6365731870616c6c65741043616c6c080454000449000118207472616e73666572080110646573740001504163636f756e7449644c6f6f6b75704f663c543e00011476616c7565ec0128543a3a42616c616e6365000058d45472616e7366657220736f6d65206c697175696420667265652062616c616e636520746f20616e6f74686572206163636f756e742e000501607472616e73666572602077696c6c207365742074686520604672656542616c616e636560206f66207468652073656e64657220616e642072656365697665722e11014966207468652073656e6465722773206163636f756e742069732062656c6f7720746865206578697374656e7469616c206465706f736974206173206120726573756c74b06f6620746865207472616e736665722c20746865206163636f756e742077696c6c206265207265617065642e001501546865206469737061746368206f726967696e20666f7220746869732063616c6c206d75737420626520605369676e65646020627920746865207472616e736163746f722e0034232320436f6d706c657869747961012d20446570656e64656e74206f6e20617267756d656e747320627574206e6f7420637269746963616c2c20676976656e2070726f70657220696d706c656d656e746174696f6e7320666f7220696e70757420636f6e66696794202074797065732e205365652072656c617465642066756e6374696f6e732062656c6f772e31012d20497420636f6e7461696e732061206c696d69746564206e756d626572206f6620726561647320616e642077726974657320696e7465726e616c6c7920616e64206e6f20636f6d706c6578382020636f6d7075746174696f6e2e004852656c617465642066756e6374696f6e733a004d0120202d2060656e737572655f63616e5f77697468647261776020697320616c776179732063616c6c656420696e7465726e616c6c792062757420686173206120626f756e64656420636f6d706c65786974792e290120202d205472616e7366657272696e672062616c616e63657320746f206163636f756e7473207468617420646964206e6f74206578697374206265666f72652077696c6c206361757365cc2020202060543a3a4f6e4e65774163636f756e743a3a6f6e5f6e65775f6163636f756e746020746f2062652063616c6c65642e5d0120202d2052656d6f76696e6720656e6f7567682066756e64732066726f6d20616e206163636f756e742077696c6c20747269676765722060543a3a4475737452656d6f76616c3a3a6f6e5f756e62616c616e636564602e5d0120202d20607472616e736665725f6b6565705f616c6976656020776f726b73207468652073616d652077617920617320607472616e73666572602c206275742068617320616e206164646974696f6e616c20636865636bdc202020207468617420746865207472616e736665722077696c6c206e6f74206b696c6c20746865206f726967696e206163636f756e742e2c7365745f62616c616e63650c010c77686f0001504163636f756e7449644c6f6f6b75704f663c543e0001206e65775f66726565ec0128543a3a42616c616e63650001306e65775f7265736572766564ec0128543a3a42616c616e636500012090536574207468652062616c616e636573206f66206120676976656e206163636f756e742e001d01546869732077696c6c20616c74657220604672656542616c616e63656020616e642060526573657276656442616c616e63656020696e2073746f726167652e2069742077696c6c3101616c736f20616c7465722074686520746f74616c2069737375616e6365206f66207468652073797374656d202860546f74616c49737375616e6365602920617070726f7072696174656c792e1501496620746865206e65772066726565206f722072657365727665642062616c616e63652069732062656c6f7720746865206578697374656e7469616c206465706f7369742cfc69742077696c6c20726573657420746865206163636f756e74206e6f6e63652028606672616d655f73797374656d3a3a4163636f756e744e6f6e636560292e00b0546865206469737061746368206f726967696e20666f7220746869732063616c6c2069732060726f6f74602e38666f7263655f7472616e736665720c0118736f757263650001504163636f756e7449644c6f6f6b75704f663c543e000110646573740001504163636f756e7449644c6f6f6b75704f663c543e00011476616c7565ec0128543a3a42616c616e63650002144d0145786163746c7920617320607472616e73666572602c2065786365707420746865206f726967696e206d75737420626520726f6f7420616e642074686520736f75726365206163636f756e74206d6179206265287370656369666965642e34232320436f6d706c65786974794d012d2053616d65206173207472616e736665722c20627574206164646974696f6e616c207265616420616e6420777269746520626563617573652074686520736f75726365206163636f756e74206973206e6f747c2020617373756d656420746f20626520696e20746865206f7665726c61792e4c7472616e736665725f6b6565705f616c697665080110646573740001504163636f756e7449644c6f6f6b75704f663c543e00011476616c7565ec0128543a3a42616c616e63650003184d0153616d6520617320746865205b607472616e73666572605d2063616c6c2c206275742077697468206120636865636b207468617420746865207472616e736665722077696c6c206e6f74206b696c6c207468653c6f726967696e206163636f756e742e00b8393925206f66207468652074696d6520796f752077616e74205b607472616e73666572605d20696e73746561642e00c05b607472616e73666572605d3a207374727563742e50616c6c65742e68746d6c236d6574686f642e7472616e73666572307472616e736665725f616c6c080110646573740001504163636f756e7449644c6f6f6b75704f663c543e0001286b6565705f616c697665980110626f6f6c00044005015472616e736665722074686520656e74697265207472616e7366657261626c652062616c616e63652066726f6d207468652063616c6c6572206163636f756e742e0059014e4f54453a20546869732066756e6374696f6e206f6e6c7920617474656d70747320746f207472616e73666572205f7472616e7366657261626c655f2062616c616e6365732e2054686973206d65616e7320746861746101616e79206c6f636b65642c2072657365727665642c206f72206578697374656e7469616c206465706f7369747320287768656e20606b6565705f616c6976656020697320607472756560292c2077696c6c206e6f742062655d017472616e7366657272656420627920746869732066756e6374696f6e2e20546f20656e73757265207468617420746869732066756e6374696f6e20726573756c747320696e2061206b696c6c6564206163636f756e742c4501796f75206d69676874206e65656420746f207072657061726520746865206163636f756e742062792072656d6f76696e6720616e79207265666572656e636520636f756e746572732c2073746f72616765406465706f736974732c206574632e2e2e00c0546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265205369676e65642e00a02d206064657374603a2054686520726563697069656e74206f6620746865207472616e736665722e59012d20606b6565705f616c697665603a204120626f6f6c65616e20746f2064657465726d696e652069662074686520607472616e736665725f616c6c60206f7065726174696f6e2073686f756c642073656e6420616c6c4d0120206f66207468652066756e647320746865206163636f756e74206861732c2063617573696e67207468652073656e646572206163636f756e7420746f206265206b696c6c6564202866616c7365292c206f72590120207472616e736665722065766572797468696e6720657863657074206174206c6561737420746865206578697374656e7469616c206465706f7369742c2077686963682077696c6c2067756172616e74656520746fd420206b656570207468652073656e646572206163636f756e7420616c697665202874727565292e20232320436f6d706c657869747939012d204f2831292e204a757374206c696b65207472616e736665722c206275742072656164696e672074686520757365722773207472616e7366657261626c652062616c616e63652066697273742e3c666f7263655f756e7265736572766508010c77686f0001504163636f756e7449644c6f6f6b75704f663c543e000118616d6f756e74180128543a3a42616c616e636500050cb0556e7265736572766520736f6d652062616c616e63652066726f6d2061207573657220627920666f7263652e006c43616e206f6e6c792062652063616c6c656420627920524f4f542e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e6d040c9070616c6c65745f656c656374696f6e5f70726f76696465725f6d756c74695f70686173651870616c6c65741043616c6c0404540001143c7375626d69745f756e7369676e65640801307261775f736f6c7574696f6e710401b0426f783c526177536f6c7574696f6e3c536f6c7574696f6e4f663c543a3a4d696e6572436f6e6669673e3e3e00011c7769746e65737341050158536f6c7574696f6e4f72536e617073686f7453697a65000038a45375626d6974206120736f6c7574696f6e20666f722074686520756e7369676e65642070686173652e00c8546865206469737061746368206f726967696e20666f20746869732063616c6c206d757374206265205f5f6e6f6e655f5f2e003d0154686973207375626d697373696f6e20697320636865636b6564206f6e2074686520666c792e204d6f72656f7665722c207468697320756e7369676e656420736f6c7574696f6e206973206f6e6c79550176616c696461746564207768656e207375626d697474656420746f2074686520706f6f6c2066726f6d20746865202a2a6c6f63616c2a2a206e6f64652e204566666563746976656c792c2074686973206d65616e735d0174686174206f6e6c79206163746976652076616c696461746f72732063616e207375626d69742074686973207472616e73616374696f6e207768656e20617574686f72696e67206120626c6f636b202873696d696c617240746f20616e20696e686572656e74292e005901546f2070726576656e7420616e7920696e636f727265637420736f6c7574696f6e2028616e642074687573207761737465642074696d652f776569676874292c2074686973207472616e73616374696f6e2077696c6c4d0170616e69632069662074686520736f6c7574696f6e207375626d6974746564206279207468652076616c696461746f7220697320696e76616c696420696e20616e79207761792c206566666563746976656c799c70757474696e6720746865697220617574686f72696e6720726577617264206174207269736b2e00e04e6f206465706f736974206f7220726577617264206973206173736f63696174656420776974682074686973207375626d697373696f6e2e6c7365745f6d696e696d756d5f756e747275737465645f73636f72650401406d617962655f6e6578745f73636f7265450501544f7074696f6e3c456c656374696f6e53636f72653e000114b05365742061206e65772076616c756520666f7220604d696e696d756d556e7472757374656453636f7265602e00d84469737061746368206f726967696e206d75737420626520616c69676e656420776974682060543a3a466f7263654f726967696e602e00f05468697320636865636b2063616e206265207475726e6564206f66662062792073657474696e67207468652076616c756520746f20604e6f6e65602e747365745f656d657267656e63795f656c656374696f6e5f726573756c74040120737570706f72747349050158537570706f7274733c543a3a4163636f756e7449643e0002205901536574206120736f6c7574696f6e20696e207468652071756575652c20746f2062652068616e646564206f757420746f2074686520636c69656e74206f6620746869732070616c6c657420696e20746865206e6578748863616c6c20746f2060456c656374696f6e50726f76696465723a3a656c656374602e004501546869732063616e206f6e6c79206265207365742062792060543a3a466f7263654f726967696e602c20616e64206f6e6c79207768656e207468652070686173652069732060456d657267656e6379602e00610154686520736f6c7574696f6e206973206e6f7420636865636b656420666f7220616e7920666561736962696c69747920616e6420697320617373756d656420746f206265207472757374776f727468792c20617320616e795101666561736962696c69747920636865636b20697473656c662063616e20696e207072696e6369706c652063617573652074686520656c656374696f6e2070726f6365737320746f206661696c202864756520746f686d656d6f72792f77656967687420636f6e73747261696e73292e187375626d69740401307261775f736f6c7574696f6e710401b0426f783c526177536f6c7574696f6e3c536f6c7574696f6e4f663c543a3a4d696e6572436f6e6669673e3e3e0003249c5375626d6974206120736f6c7574696f6e20666f7220746865207369676e65642070686173652e00d0546865206469737061746368206f726967696e20666f20746869732063616c6c206d757374206265205f5f7369676e65645f5f2e005d0154686520736f6c7574696f6e20697320706f74656e7469616c6c79207175657565642c206261736564206f6e2074686520636c61696d65642073636f726520616e642070726f6365737365642061742074686520656e64506f6620746865207369676e65642070686173652e005d0141206465706f73697420697320726573657276656420616e64207265636f7264656420666f722074686520736f6c7574696f6e2e204261736564206f6e20746865206f7574636f6d652c2074686520736f6c7574696f6e15016d696768742062652072657761726465642c20736c61736865642c206f722067657420616c6c206f7220612070617274206f6620746865206465706f736974206261636b2e4c676f7665726e616e63655f66616c6c6261636b0801406d617962655f6d61785f766f746572730102012c4f7074696f6e3c7533323e0001446d617962655f6d61785f746172676574730102012c4f7074696f6e3c7533323e00041080547269676765722074686520676f7665726e616e63652066616c6c6261636b2e004901546869732063616e206f6e6c792062652063616c6c6564207768656e205b6050686173653a3a456d657267656e6379605d20697320656e61626c65642c20617320616e20616c7465726e617469766520746fc063616c6c696e67205b6043616c6c3a3a7365745f656d657267656e63795f656c656374696f6e5f726573756c74605d2e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e7104089070616c6c65745f656c656374696f6e5f70726f76696465725f6d756c74695f70686173652c526177536f6c7574696f6e040453017504000c0120736f6c7574696f6e750401045300011473636f72659c0134456c656374696f6e53636f7265000114726f756e6410010c7533320000750408586a6f7973747265616d5f6e6f64655f72756e74696d65384e706f73536f6c7574696f6e31360000400118766f74657331790400000118766f74657332850400000118766f74657333990400000118766f74657334a50400000118766f74657335b10400000118766f74657336bd0400000118766f74657337c90400000118766f74657338d50400000118766f74657339e1040000011c766f7465733130ed040000011c766f7465733131f9040000011c766f746573313205050000011c766f746573313311050000011c766f74657331341d050000011c766f746573313529050000011c766f7465733136350500000079040000027d04007d0400000408e90381040081040000062d0400850400000289040089040000040ce9038d048104008d04000004088104910400910400000695040095040c3473705f61726974686d65746963287065725f7468696e677318506572553136000004002d04010c753136000099040000029d04009d040000040ce903a104810400a104000003020000008d0400a504000002a90400a9040000040ce903ad04810400ad04000003030000008d0400b104000002b50400b5040000040ce903b904810400b904000003040000008d0400bd04000002c10400c1040000040ce903c504810400c504000003050000008d0400c904000002cd0400cd040000040ce903d104810400d104000003060000008d0400d504000002d90400d9040000040ce903dd04810400dd04000003070000008d0400e104000002e50400e5040000040ce903e904810400e904000003080000008d0400ed04000002f10400f1040000040ce903f504810400f504000003090000008d0400f904000002fd0400fd040000040ce903010581040001050000030a0000008d0400050500000209050009050000040ce9030d058104000d050000030b0000008d0400110500000215050015050000040ce903190581040019050000030c0000008d04001d0500000221050021050000040ce903250581040025050000030d0000008d040029050000022d05002d050000040ce903310581040031050000030e0000008d0400350500000239050039050000040ce9033d058104003d050000030f0000008d04004105089070616c6c65745f656c656374696f6e5f70726f76696465725f6d756c74695f706861736558536f6c7574696f6e4f72536e617073686f7453697a650000080118766f74657273e903010c75333200011c74617267657473e903010c7533320000450504184f7074696f6e040454019c0108104e6f6e6500000010536f6d6504009c000001000049050000024d05004d0500000408005105005105084473705f6e706f735f656c656374696f6e731c537570706f727404244163636f756e744964010000080114746f74616c18013c457874656e64656442616c616e6365000118766f74657273550501845665633c284163636f756e7449642c20457874656e64656442616c616e6365293e000055050000024d01005905103870616c6c65745f7374616b696e671870616c6c65741870616c6c65741043616c6c04045400016810626f6e640c0128636f6e74726f6c6c65720001504163636f756e7449644c6f6f6b75704f663c543e00011476616c7565ec013042616c616e63654f663c543e00011470617965655d05017c52657761726444657374696e6174696f6e3c543a3a4163636f756e7449643e00003c610154616b6520746865206f726967696e206163636f756e74206173206120737461736820616e64206c6f636b207570206076616c756560206f66206974732062616c616e63652e2060636f6e74726f6c6c6572602077696c6c80626520746865206163636f756e74207468617420636f6e74726f6c732069742e002d016076616c756560206d757374206265206d6f7265207468616e2074686520606d696e696d756d5f62616c616e636560207370656369666965642062792060543a3a43757272656e6379602e002101546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20627920746865207374617368206163636f756e742e003c456d6974732060426f6e646564602e34232320436f6d706c6578697479d02d20496e646570656e64656e74206f662074686520617267756d656e74732e204d6f64657261746520636f6d706c65786974792e1c2d204f2831292e642d20546872656520657874726120444220656e74726965732e004d014e4f54453a2054776f206f66207468652073746f726167652077726974657320286053656c663a3a626f6e646564602c206053656c663a3a7061796565602920617265205f6e657665725f20636c65616e65643d01756e6c6573732074686520606f726967696e602066616c6c732062656c6f77205f6578697374656e7469616c206465706f7369745f20616e6420676574732072656d6f76656420617320647573742e28626f6e645f65787472610401386d61785f6164646974696f6e616cec013042616c616e63654f663c543e000138610141646420736f6d6520657874726120616d6f756e742074686174206861766520617070656172656420696e207468652073746173682060667265655f62616c616e63656020696e746f207468652062616c616e636520757030666f72207374616b696e672e005101546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f206279207468652073746173682c206e6f742074686520636f6e74726f6c6c65722e004d01557365207468697320696620746865726520617265206164646974696f6e616c2066756e647320696e20796f7572207374617368206163636f756e74207468617420796f75207769736820746f20626f6e642e5501556e6c696b65205b60626f6e64605d2853656c663a3a626f6e6429206f72205b60756e626f6e64605d2853656c663a3a756e626f6e642920746869732066756e6374696f6e20646f6573206e6f7420696d706f7365bc616e79206c696d69746174696f6e206f6e2074686520616d6f756e7420746861742063616e2062652061646465642e003c456d6974732060426f6e646564602e0034232320436f6d706c6578697479e42d20496e646570656e64656e74206f662074686520617267756d656e74732e20496e7369676e69666963616e7420636f6d706c65786974792e1c2d204f2831292e18756e626f6e6404011476616c7565ec013042616c616e63654f663c543e00024c51015363686564756c65206120706f7274696f6e206f662074686520737461736820746f20626520756e6c6f636b656420726561647920666f72207472616e73666572206f75742061667465722074686520626f6e64fc706572696f6420656e64732e2049662074686973206c656176657320616e20616d6f756e74206163746976656c7920626f6e646564206c657373207468616e2101543a3a43757272656e63793a3a6d696e696d756d5f62616c616e636528292c207468656e20697420697320696e6372656173656420746f207468652066756c6c20616d6f756e742e005101546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2062792074686520636f6e74726f6c6c65722c206e6f74207468652073746173682e0045014f6e63652074686520756e6c6f636b20706572696f6420697320646f6e652c20796f752063616e2063616c6c206077697468647261775f756e626f6e6465646020746f2061637475616c6c79206d6f7665bc7468652066756e6473206f7574206f66206d616e6167656d656e7420726561647920666f72207472616e736665722e0031014e6f206d6f7265207468616e2061206c696d69746564206e756d626572206f6620756e6c6f636b696e67206368756e6b73202873656520604d6178556e6c6f636b696e674368756e6b736029410163616e20636f2d657869737473206174207468652073616d652074696d652e20496620746865726520617265206e6f20756e6c6f636b696e67206368756e6b7320736c6f747320617661696c61626c6545015b6043616c6c3a3a77697468647261775f756e626f6e646564605d2069732063616c6c656420746f2072656d6f766520736f6d65206f6620746865206368756e6b732028696620706f737369626c65292e00390149662061207573657220656e636f756e74657273207468652060496e73756666696369656e74426f6e6460206572726f72207768656e2063616c6c696e6720746869732065787472696e7369632c1901746865792073686f756c642063616c6c20606368696c6c6020666972737420696e206f7264657220746f206672656520757020746865697220626f6e6465642066756e64732e0044456d6974732060556e626f6e646564602e009453656520616c736f205b6043616c6c3a3a77697468647261775f756e626f6e646564605d2e4477697468647261775f756e626f6e6465640401486e756d5f736c617368696e675f7370616e7310010c753332000338290152656d6f766520616e7920756e6c6f636b6564206368756e6b732066726f6d207468652060756e6c6f636b696e67602071756575652066726f6d206f7572206d616e6167656d656e742e0031015468697320657373656e7469616c6c7920667265657320757020746861742062616c616e636520746f206265207573656420627920746865207374617368206163636f756e7420746f20646f4877686174657665722069742077616e74732e001501546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2062792074686520636f6e74726f6c6c65722e0048456d697473206057697468647261776e602e006853656520616c736f205b6043616c6c3a3a756e626f6e64605d2e0034232320436f6d706c6578697479d84f285329207768657265205320697320746865206e756d626572206f6620736c617368696e67207370616e7320746f2072656d6f766509014e4f54453a2057656967687420616e6e6f746174696f6e20697320746865206b696c6c207363656e6172696f2c20776520726566756e64206f74686572776973652e2076616c69646174650401147072656673b0013856616c696461746f725072656673000414e44465636c617265207468652064657369726520746f2076616c696461746520666f7220746865206f726967696e20636f6e74726f6c6c65722e00d8456666656374732077696c6c2062652066656c742061742074686520626567696e6e696e67206f6620746865206e657874206572612e005101546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2062792074686520636f6e74726f6c6c65722c206e6f74207468652073746173682e206e6f6d696e61746504011c74617267657473610501645665633c4163636f756e7449644c6f6f6b75704f663c543e3e0005280d014465636c617265207468652064657369726520746f206e6f6d696e6174652060746172676574736020666f7220746865206f726967696e20636f6e74726f6c6c65722e00d8456666656374732077696c6c2062652066656c742061742074686520626567696e6e696e67206f6620746865206e657874206572612e005101546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2062792074686520636f6e74726f6c6c65722c206e6f74207468652073746173682e0034232320436f6d706c65786974792d012d20546865207472616e73616374696f6e277320636f6d706c65786974792069732070726f706f7274696f6e616c20746f207468652073697a65206f662060746172676574736020284e29050177686963682069732063617070656420617420436f6d7061637441737369676e6d656e74733a3a4c494d49542028543a3a4d61784e6f6d696e6174696f6e73292ed42d20426f74682074686520726561647320616e642077726974657320666f6c6c6f7720612073696d696c6172207061747465726e2e146368696c6c000628c44465636c617265206e6f2064657369726520746f206569746865722076616c6964617465206f72206e6f6d696e6174652e00d8456666656374732077696c6c2062652066656c742061742074686520626567696e6e696e67206f6620746865206e657874206572612e005101546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2062792074686520636f6e74726f6c6c65722c206e6f74207468652073746173682e0034232320436f6d706c6578697479e42d20496e646570656e64656e74206f662074686520617267756d656e74732e20496e7369676e69666963616e7420636f6d706c65786974792e502d20436f6e7461696e73206f6e6520726561642ec42d2057726974657320617265206c696d6974656420746f2074686520606f726967696e60206163636f756e74206b65792e247365745f706179656504011470617965655d05017c52657761726444657374696e6174696f6e3c543a3a4163636f756e7449643e000730b42852652d2973657420746865207061796d656e742074617267657420666f72206120636f6e74726f6c6c65722e005101456666656374732077696c6c2062652066656c7420696e7374616e746c792028617320736f6f6e20617320746869732066756e6374696f6e20697320636f6d706c65746564207375636365737366756c6c79292e005101546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2062792074686520636f6e74726f6c6c65722c206e6f74207468652073746173682e0034232320436f6d706c6578697479182d204f283129e42d20496e646570656e64656e74206f662074686520617267756d656e74732e20496e7369676e69666963616e7420636f6d706c65786974792e942d20436f6e7461696e732061206c696d69746564206e756d626572206f662072656164732ec42d2057726974657320617265206c696d6974656420746f2074686520606f726967696e60206163636f756e74206b65792e242d2d2d2d2d2d2d2d2d387365745f636f6e74726f6c6c6572040128636f6e74726f6c6c65720001504163636f756e7449644c6f6f6b75704f663c543e00082c8c2852652d297365742074686520636f6e74726f6c6c6572206f6620612073746173682e005101456666656374732077696c6c2062652066656c7420696e7374616e746c792028617320736f6f6e20617320746869732066756e6374696f6e20697320636f6d706c65746564207375636365737366756c6c79292e005101546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f206279207468652073746173682c206e6f742074686520636f6e74726f6c6c65722e0034232320436f6d706c6578697479104f283129e42d20496e646570656e64656e74206f662074686520617267756d656e74732e20496e7369676e69666963616e7420636f6d706c65786974792e942d20436f6e7461696e732061206c696d69746564206e756d626572206f662072656164732ec42d2057726974657320617265206c696d6974656420746f2074686520606f726967696e60206163636f756e74206b65792e4c7365745f76616c696461746f725f636f756e7404010c6e6577e903010c75333200091890536574732074686520696465616c206e756d626572206f662076616c696461746f72732e0084546865206469737061746368206f726967696e206d75737420626520526f6f742e0034232320436f6d706c6578697479104f28312960696e6372656173655f76616c696461746f725f636f756e740401286164646974696f6e616ce903010c753332000a1ce4496e6372656d656e74732074686520696465616c206e756d626572206f662076616c696461746f7273207570746f206d6178696d756d206f668c60456c656374696f6e50726f7669646572426173653a3a4d617857696e6e657273602e0084546865206469737061746368206f726967696e206d75737420626520526f6f742e0034232320436f6d706c65786974799853616d65206173205b6053656c663a3a7365745f76616c696461746f725f636f756e74605d2e547363616c655f76616c696461746f725f636f756e74040118666163746f726505011c50657263656e74000b1c0d015363616c652075702074686520696465616c206e756d626572206f662076616c696461746f7273206279206120666163746f72207570746f206d6178696d756d206f668c60456c656374696f6e50726f7669646572426173653a3a4d617857696e6e657273602e0084546865206469737061746368206f726967696e206d75737420626520526f6f742e0034232320436f6d706c65786974799853616d65206173205b6053656c663a3a7365745f76616c696461746f725f636f756e74605d2e34666f7263655f6e6f5f65726173000c34ac466f72636520746865726520746f206265206e6f206e6577206572617320696e646566696e6974656c792e0084546865206469737061746368206f726967696e206d75737420626520526f6f742e002423205761726e696e6700190154686520656c656374696f6e2070726f6365737320737461727473206d756c7469706c6520626c6f636b73206265666f72652074686520656e64206f6620746865206572612e3901546875732074686520656c656374696f6e2070726f63657373206d6179206265206f6e676f696e67207768656e20746869732069732063616c6c65642e20496e2074686973206361736520746865dc656c656374696f6e2077696c6c20636f6e74696e756520756e74696c20746865206e65787420657261206973207472696767657265642e0034232320436f6d706c65786974793c2d204e6f20617267756d656e74732e382d205765696768743a204f28312934666f7263655f6e65775f657261000d384901466f72636520746865726520746f2062652061206e6577206572612061742074686520656e64206f6620746865206e6578742073657373696f6e2e20416674657220746869732c2069742077696c6c2062659c726573657420746f206e6f726d616c20286e6f6e2d666f7263656429206265686176696f75722e0084546865206469737061746368206f726967696e206d75737420626520526f6f742e002423205761726e696e6700190154686520656c656374696f6e2070726f6365737320737461727473206d756c7469706c6520626c6f636b73206265666f72652074686520656e64206f6620746865206572612e4901496620746869732069732063616c6c6564206a757374206265666f72652061206e657720657261206973207472696767657265642c2074686520656c656374696f6e2070726f63657373206d6179206e6f748c6861766520656e6f75676820626c6f636b7320746f20676574206120726573756c742e0034232320436f6d706c65786974793c2d204e6f20617267756d656e74732e382d205765696768743a204f283129447365745f696e76756c6e657261626c6573040134696e76756c6e657261626c6573610501445665633c543a3a4163636f756e7449643e000e0cc8536574207468652076616c696461746f72732077686f2063616e6e6f7420626520736c61736865642028696620616e79292e0084546865206469737061746368206f726967696e206d75737420626520526f6f742e34666f7263655f756e7374616b650801147374617368000130543a3a4163636f756e7449640001486e756d5f736c617368696e675f7370616e7310010c753332000f0c0901466f72636520612063757272656e74207374616b657220746f206265636f6d6520636f6d706c6574656c7920756e7374616b65642c20696d6d6564696174656c792e0084546865206469737061746368206f726967696e206d75737420626520526f6f742e50666f7263655f6e65775f6572615f616c776179730010240101466f72636520746865726520746f2062652061206e6577206572612061742074686520656e64206f662073657373696f6e7320696e646566696e6974656c792e0084546865206469737061746368206f726967696e206d75737420626520526f6f742e002423205761726e696e6700190154686520656c656374696f6e2070726f6365737320737461727473206d756c7469706c6520626c6f636b73206265666f72652074686520656e64206f6620746865206572612e4901496620746869732069732063616c6c6564206a757374206265666f72652061206e657720657261206973207472696767657265642c2074686520656c656374696f6e2070726f63657373206d6179206e6f748c6861766520656e6f75676820626c6f636b7320746f20676574206120726573756c742e5463616e63656c5f64656665727265645f736c61736808010c657261100120457261496e646578000134736c6173685f696e6469636573690501205665633c7533323e0011149443616e63656c20656e6163746d656e74206f66206120646566657272656420736c6173682e009843616e2062652063616c6c6564206279207468652060543a3a41646d696e4f726967696e602e000101506172616d65746572733a2065726120616e6420696e6469636573206f662074686520736c617368657320666f7220746861742065726120746f206b696c6c2e387061796f75745f7374616b65727308013c76616c696461746f725f7374617368000130543a3a4163636f756e74496400010c657261100120457261496e64657800122c0d01506179206f757420616c6c20746865207374616b65727320626568696e6420612073696e676c652076616c696461746f7220666f7220612073696e676c65206572612e0049012d206076616c696461746f725f73746173686020697320746865207374617368206163636f756e74206f66207468652076616c696461746f722e205468656972206e6f6d696e61746f72732c20757020746f2501202060543a3a4d61784e6f6d696e61746f72526577617264656450657256616c696461746f72602c2077696c6c20616c736f207265636569766520746865697220726577617264732e31012d206065726160206d617920626520616e7920657261206265747765656e20605b63757272656e745f657261202d20686973746f72795f64657074683b2063757272656e745f6572615d602e005501546865206f726967696e206f6620746869732063616c6c206d757374206265205f5369676e65645f2e20416e79206163636f756e742063616e2063616c6c20746869732066756e6374696f6e2c206576656e206966746974206973206e6f74206f6e65206f6620746865207374616b6572732e0034232320436f6d706c6578697479b82d204174206d6f7374204f284d61784e6f6d696e61746f72526577617264656450657256616c696461746f72292e187265626f6e6404011476616c7565ec013042616c616e63654f663c543e00131cdc5265626f6e64206120706f7274696f6e206f6620746865207374617368207363686564756c656420746f20626520756e6c6f636b65642e00d4546865206469737061746368206f726967696e206d757374206265207369676e65642062792074686520636f6e74726f6c6c65722e0034232320436f6d706c6578697479d02d2054696d6520636f6d706c65786974793a204f284c292c207768657265204c20697320756e6c6f636b696e67206368756e6b73882d20426f756e64656420627920604d6178556e6c6f636b696e674368756e6b73602e28726561705f73746173680801147374617368000130543a3a4163636f756e7449640001486e756d5f736c617368696e675f7370616e7310010c7533320014305d0152656d6f766520616c6c2064617461207374727563747572657320636f6e6365726e696e672061207374616b65722f7374617368206f6e636520697420697320617420612073746174652077686572652069742063616e0501626520636f6e736964657265642060647573746020696e20746865207374616b696e672073797374656d2e2054686520726571756972656d656e7473206172653a000501312e207468652060746f74616c5f62616c616e636560206f66207468652073746173682069732062656c6f77206578697374656e7469616c206465706f7369742e1101322e206f722c2074686520606c65646765722e746f74616c60206f66207468652073746173682069732062656c6f77206578697374656e7469616c206465706f7369742e00550154686520666f726d65722063616e2068617070656e20696e206361736573206c696b65206120736c6173683b20746865206c6174746572207768656e20612066756c6c7920756e626f6e646564206163636f756e7409016973207374696c6c20726563656976696e67207374616b696e67207265776172647320696e206052657761726444657374696e6174696f6e3a3a5374616b6564602e00310149742063616e2062652063616c6c656420627920616e796f6e652c206173206c6f6e672061732060737461736860206d65657473207468652061626f766520726571756972656d656e74732e00dc526566756e647320746865207472616e73616374696f6e20666565732075706f6e207375636365737366756c20657865637574696f6e2e106b69636b04010c77686f610501645665633c4163636f756e7449644c6f6f6b75704f663c543e3e00152ce052656d6f76652074686520676976656e206e6f6d696e6174696f6e732066726f6d207468652063616c6c696e672076616c696461746f722e00d8456666656374732077696c6c2062652066656c742061742074686520626567696e6e696e67206f6620746865206e657874206572612e005101546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2062792074686520636f6e74726f6c6c65722c206e6f74207468652073746173682e004d012d206077686f603a2041206c697374206f66206e6f6d696e61746f72207374617368206163636f756e74732077686f20617265206e6f6d696e6174696e6720746869732076616c696461746f72207768696368c0202073686f756c64206e6f206c6f6e676572206265206e6f6d696e6174696e6720746869732076616c696461746f722e0055014e6f74653a204d616b696e6720746869732063616c6c206f6e6c79206d616b65732073656e736520696620796f7520666972737420736574207468652076616c696461746f7220707265666572656e63657320746f78626c6f636b20616e792066757274686572206e6f6d696e6174696f6e732e4c7365745f7374616b696e675f636f6e666967731801486d696e5f6e6f6d696e61746f725f626f6e646d050158436f6e6669674f703c42616c616e63654f663c543e3e0001486d696e5f76616c696461746f725f626f6e646d050158436f6e6669674f703c42616c616e63654f663c543e3e00014c6d61785f6e6f6d696e61746f725f636f756e7471050134436f6e6669674f703c7533323e00014c6d61785f76616c696461746f725f636f756e7471050134436f6e6669674f703c7533323e00013c6368696c6c5f7468726573686f6c6475050144436f6e6669674f703c50657263656e743e0001386d696e5f636f6d6d697373696f6e79050144436f6e6669674f703c50657262696c6c3e001644ac5570646174652074686520766172696f7573207374616b696e6720636f6e66696775726174696f6e73202e0025012a20606d696e5f6e6f6d696e61746f725f626f6e64603a20546865206d696e696d756d2061637469766520626f6e64206e656564656420746f2062652061206e6f6d696e61746f722e25012a20606d696e5f76616c696461746f725f626f6e64603a20546865206d696e696d756d2061637469766520626f6e64206e656564656420746f20626520612076616c696461746f722e55012a20606d61785f6e6f6d696e61746f725f636f756e74603a20546865206d6178206e756d626572206f662075736572732077686f2063616e2062652061206e6f6d696e61746f72206174206f6e63652e205768656e98202073657420746f20604e6f6e65602c206e6f206c696d697420697320656e666f726365642e55012a20606d61785f76616c696461746f725f636f756e74603a20546865206d6178206e756d626572206f662075736572732077686f2063616e20626520612076616c696461746f72206174206f6e63652e205768656e98202073657420746f20604e6f6e65602c206e6f206c696d697420697320656e666f726365642e59012a20606368696c6c5f7468726573686f6c64603a2054686520726174696f206f6620606d61785f6e6f6d696e61746f725f636f756e7460206f7220606d61785f76616c696461746f725f636f756e74602077686963681901202073686f756c642062652066696c6c656420696e206f7264657220666f722074686520606368696c6c5f6f7468657260207472616e73616374696f6e20746f20776f726b2e61012a20606d696e5f636f6d6d697373696f6e603a20546865206d696e696d756d20616d6f756e74206f6620636f6d6d697373696f6e207468617420656163682076616c696461746f7273206d757374206d61696e7461696e2e550120205468697320697320636865636b6564206f6e6c792075706f6e2063616c6c696e67206076616c6964617465602e204578697374696e672076616c696461746f727320617265206e6f742061666665637465642e00c452756e74696d654f726967696e206d75737420626520526f6f7420746f2063616c6c20746869732066756e6374696f6e2e0035014e4f54453a204578697374696e67206e6f6d696e61746f727320616e642076616c696461746f72732077696c6c206e6f742062652061666665637465642062792074686973207570646174652e1101746f206b69636b2070656f706c6520756e64657220746865206e6577206c696d6974732c20606368696c6c5f6f74686572602073686f756c642062652063616c6c65642e2c6368696c6c5f6f74686572040128636f6e74726f6c6c6572000130543a3a4163636f756e74496400176841014465636c61726520612060636f6e74726f6c6c65726020746f2073746f702070617274696369706174696e672061732065697468657220612076616c696461746f72206f72206e6f6d696e61746f722e00d8456666656374732077696c6c2062652066656c742061742074686520626567696e6e696e67206f6620746865206e657874206572612e004101546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2c206275742063616e2062652063616c6c656420627920616e796f6e652e0059014966207468652063616c6c6572206973207468652073616d652061732074686520636f6e74726f6c6c6572206265696e672074617267657465642c207468656e206e6f206675727468657220636865636b7320617265d8656e666f726365642c20616e6420746869732066756e6374696f6e2062656861766573206a757374206c696b6520606368696c6c602e005d014966207468652063616c6c657220697320646966666572656e74207468616e2074686520636f6e74726f6c6c6572206265696e672074617267657465642c2074686520666f6c6c6f77696e6720636f6e646974696f6e73306d757374206265206d65743a001d012a2060636f6e74726f6c6c657260206d7573742062656c6f6e6720746f2061206e6f6d696e61746f722077686f20686173206265636f6d65206e6f6e2d6465636f6461626c652c000c4f723a003d012a204120604368696c6c5468726573686f6c6460206d7573742062652073657420616e6420636865636b656420776869636820646566696e657320686f7720636c6f736520746f20746865206d6178550120206e6f6d696e61746f7273206f722076616c696461746f7273207765206d757374207265616368206265666f72652075736572732063616e207374617274206368696c6c696e67206f6e652d616e6f746865722e59012a204120604d61784e6f6d696e61746f72436f756e746020616e6420604d617856616c696461746f72436f756e7460206d75737420626520736574207768696368206973207573656420746f2064657465726d696e65902020686f7720636c6f73652077652061726520746f20746865207468726573686f6c642e5d012a204120604d696e4e6f6d696e61746f72426f6e646020616e6420604d696e56616c696461746f72426f6e6460206d7573742062652073657420616e6420636865636b65642c2077686963682064657465726d696e65735101202069662074686973206973206120706572736f6e20746861742073686f756c64206265206368696c6c6564206265636175736520746865792068617665206e6f74206d657420746865207468726573686f6c64402020626f6e642072657175697265642e005501546869732063616e2062652068656c7066756c20696620626f6e6420726571756972656d656e74732061726520757064617465642c20616e64207765206e65656420746f2072656d6f7665206f6c642075736572739877686f20646f206e6f74207361746973667920746865736520726571756972656d656e74732e68666f7263655f6170706c795f6d696e5f636f6d6d697373696f6e04013c76616c696461746f725f7374617368000130543a3a4163636f756e74496400180c4501466f72636520612076616c696461746f7220746f2068617665206174206c6561737420746865206d696e696d756d20636f6d6d697373696f6e2e20546869732077696c6c206e6f74206166666563742061610176616c696461746f722077686f20616c726561647920686173206120636f6d6d697373696f6e2067726561746572207468616e206f7220657175616c20746f20746865206d696e696d756d2e20416e79206163636f756e743863616e2063616c6c20746869732e487365745f6d696e5f636f6d6d697373696f6e04010c6e6577ac011c50657262696c6c00191025015365747320746865206d696e696d756d20616d6f756e74206f6620636f6d6d697373696f6e207468617420656163682076616c696461746f7273206d757374206d61696e7461696e2e005901546869732063616c6c20686173206c6f7765722070726976696c65676520726571756972656d656e7473207468616e20607365745f7374616b696e675f636f6e6669676020616e642063616e2062652063616c6c6564cc6279207468652060543a3a41646d696e4f726967696e602e20526f6f742063616e20616c776179732063616c6c20746869732e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e5d05083870616c6c65745f7374616b696e674452657761726444657374696e6174696f6e04244163636f756e74496401000114185374616b656400000014537461736800010028436f6e74726f6c6c65720002001c4163636f756e7404000001244163636f756e744964000300104e6f6e65000400006105000002000065050c3473705f61726974686d65746963287065725f7468696e67731c50657263656e740000040008010875380000690500000210006d05103870616c6c65745f7374616b696e671870616c6c65741870616c6c657420436f6e6669674f700404540118010c104e6f6f700000000c5365740400180104540001001852656d6f7665000200007105103870616c6c65745f7374616b696e671870616c6c65741870616c6c657420436f6e6669674f700404540110010c104e6f6f700000000c5365740400100104540001001852656d6f7665000200007505103870616c6c65745f7374616b696e671870616c6c65741870616c6c657420436f6e6669674f70040454016505010c104e6f6f700000000c536574040065050104540001001852656d6f7665000200007905103870616c6c65745f7374616b696e671870616c6c65741870616c6c657420436f6e6669674f7004045401ac010c104e6f6f700000000c5365740400ac0104540001001852656d6f7665000200007d050c3870616c6c65745f73657373696f6e1870616c6c65741043616c6c040454000108207365745f6b6579730801106b6579738105011c543a3a4b65797300011470726f6f6630011c5665633c75383e000024e453657473207468652073657373696f6e206b6579287329206f66207468652066756e6374696f6e2063616c6c657220746f20606b657973602e1d01416c6c6f777320616e206163636f756e7420746f20736574206974732073657373696f6e206b6579207072696f7220746f206265636f6d696e6720612076616c696461746f722ec05468697320646f65736e27742074616b652065666665637420756e74696c20746865206e6578742073657373696f6e2e00d0546865206469737061746368206f726967696e206f6620746869732066756e6374696f6e206d757374206265207369676e65642e0034232320436f6d706c657869747959012d20604f283129602e2041637475616c20636f737420646570656e6473206f6e20746865206e756d626572206f66206c656e677468206f662060543a3a4b6579733a3a6b65795f69647328296020776869636820697320202066697865642e2870757267655f6b657973000130c852656d6f76657320616e792073657373696f6e206b6579287329206f66207468652066756e6374696f6e2063616c6c65722e00c05468697320646f65736e27742074616b652065666665637420756e74696c20746865206e6578742073657373696f6e2e005501546865206469737061746368206f726967696e206f6620746869732066756e6374696f6e206d757374206265205369676e656420616e6420746865206163636f756e74206d757374206265206569746865722062655d01636f6e7665727469626c6520746f20612076616c696461746f72204944207573696e672074686520636861696e2773207479706963616c2061646472657373696e672073797374656d20287468697320757375616c6c7951016d65616e73206265696e67206120636f6e74726f6c6c6572206163636f756e7429206f72206469726563746c7920636f6e7665727469626c6520696e746f20612076616c696461746f722049442028776869636894757375616c6c79206d65616e73206265696e672061207374617368206163636f756e74292e0034232320436f6d706c65786974793d012d20604f2831296020696e206e756d626572206f66206b65792074797065732e2041637475616c20636f737420646570656e6473206f6e20746865206e756d626572206f66206c656e677468206f6698202060543a3a4b6579733a3a6b65795f6964732829602077686963682069732066697865642e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e810508586a6f7973747265616d5f6e6f64655f72756e74696d652c53657373696f6e4b657973000010011c6772616e647061cc01d03c4772616e647061206173202463726174653a3a426f756e64546f52756e74696d654170705075626c69633e3a3a5075626c696300011062616265510401c43c42616265206173202463726174653a3a426f756e64546f52756e74696d654170705075626c69633e3a3a5075626c6963000124696d5f6f6e6c696e65d801d43c496d4f6e6c696e65206173202463726174653a3a426f756e64546f52756e74696d654170705075626c69633e3a3a5075626c696300014c617574686f726974795f646973636f76657279850501fc3c417574686f72697479446973636f76657279206173202463726174653a3a426f756e64546f52756e74696d654170705075626c69633e3a3a5075626c6963000085050c5873705f617574686f726974795f646973636f766572790c617070185075626c696300000400dc013c737232353531393a3a5075626c6963000089050c3870616c6c65745f6772616e6470611870616c6c65741043616c6c04045400010c4c7265706f72745f65717569766f636174696f6e08014865717569766f636174696f6e5f70726f6f668d0501bc426f783c45717569766f636174696f6e50726f6f663c543a3a486173682c20543a3a426c6f636b4e756d6265723e3e00013c6b65795f6f776e65725f70726f6f6659040140543a3a4b65794f776e657250726f6f6600001009015265706f727420766f7465722065717569766f636174696f6e2f6d69736265686176696f722e2054686973206d6574686f642077696c6c2076657269667920746865f465717569766f636174696f6e2070726f6f6620616e642076616c69646174652074686520676976656e206b6579206f776e6572736869702070726f6f66f8616761696e73742074686520657874726163746564206f6666656e6465722e20496620626f7468206172652076616c69642c20746865206f6666656e63654477696c6c206265207265706f727465642e707265706f72745f65717569766f636174696f6e5f756e7369676e656408014865717569766f636174696f6e5f70726f6f668d0501bc426f783c45717569766f636174696f6e50726f6f663c543a3a486173682c20543a3a426c6f636b4e756d6265723e3e00013c6b65795f6f776e65725f70726f6f6659040140543a3a4b65794f776e657250726f6f6600012409015265706f727420766f7465722065717569766f636174696f6e2f6d69736265686176696f722e2054686973206d6574686f642077696c6c2076657269667920746865f465717569766f636174696f6e2070726f6f6620616e642076616c69646174652074686520676976656e206b6579206f776e6572736869702070726f6f66f8616761696e73742074686520657874726163746564206f6666656e6465722e20496620626f7468206172652076616c69642c20746865206f6666656e63654477696c6c206265207265706f727465642e000d01546869732065787472696e736963206d7573742062652063616c6c656420756e7369676e656420616e642069742069732065787065637465642074686174206f6e6c791501626c6f636b20617574686f72732077696c6c2063616c6c206974202876616c69646174656420696e206056616c6964617465556e7369676e656460292c2061732073756368150169662074686520626c6f636b20617574686f7220697320646566696e65642069742077696c6c20626520646566696e6564206173207468652065717569766f636174696f6e247265706f727465722e306e6f74655f7374616c6c656408011464656c6179100138543a3a426c6f636b4e756d62657200016c626573745f66696e616c697a65645f626c6f636b5f6e756d626572100138543a3a426c6f636b4e756d6265720002303d014e6f74652074686174207468652063757272656e7420617574686f7269747920736574206f6620746865204752414e4450412066696e616c6974792067616467657420686173207374616c6c65642e006101546869732077696c6c2074726967676572206120666f7263656420617574686f7269747920736574206368616e67652061742074686520626567696e6e696e67206f6620746865206e6578742073657373696f6e2c20746f6101626520656e6163746564206064656c61796020626c6f636b7320616674657220746861742e20546865206064656c6179602073686f756c64206265206869676820656e6f75676820746f20736166656c7920617373756d654901746861742074686520626c6f636b207369676e616c6c696e672074686520666f72636564206368616e67652077696c6c206e6f742062652072652d6f7267656420652e672e203130303020626c6f636b732e5d0154686520626c6f636b2070726f64756374696f6e207261746520287768696368206d617920626520736c6f77656420646f776e2062656361757365206f662066696e616c697479206c616767696e67292073686f756c64510162652074616b656e20696e746f206163636f756e74207768656e2063686f6f73696e6720746865206064656c6179602e20546865204752414e44504120766f74657273206261736564206f6e20746865206e65775501617574686f726974792077696c6c20737461727420766f74696e67206f6e20746f70206f662060626573745f66696e616c697a65645f626c6f636b5f6e756d6265726020666f72206e65772066696e616c697a65644d01626c6f636b732e2060626573745f66696e616c697a65645f626c6f636b5f6e756d626572602073686f756c64206265207468652068696768657374206f6620746865206c61746573742066696e616c697a6564c4626c6f636b206f6620616c6c2076616c696461746f7273206f6620746865206e657720617574686f72697479207365742e00584f6e6c792063616c6c61626c6520627920726f6f742e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e8d05085073705f636f6e73656e7375735f6772616e6470614445717569766f636174696f6e50726f6f66080448012c044e0110000801187365745f6964280114536574496400013065717569766f636174696f6e9105014845717569766f636174696f6e3c482c204e3e00009105085073705f636f6e73656e7375735f6772616e6470613045717569766f636174696f6e080448012c044e011001081c507265766f7465040095050139016772616e6470613a3a45717569766f636174696f6e3c417574686f7269747949642c206772616e6470613a3a507265766f74653c482c204e3e2c0a417574686f726974795369676e61747572653e00000024507265636f6d6d69740400ad050141016772616e6470613a3a45717569766f636174696f6e3c417574686f7269747949642c206772616e6470613a3a507265636f6d6d69743c482c204e3e2c0a417574686f726974795369676e61747572653e000100009505084066696e616c6974795f6772616e6470613045717569766f636174696f6e0c08496401cc04560199050453019d0500100130726f756e645f6e756d62657228010c7536340001206964656e74697479cc010849640001146669727374a905011828562c2053290001187365636f6e64a905011828562c20532900009905084066696e616c6974795f6772616e6470611c507265766f7465080448012c044e01100008012c7461726765745f686173682c0104480001347461726765745f6e756d6265721001044e00009d050c5073705f636f6e73656e7375735f6772616e6470610c617070245369676e617475726500000400a1050148656432353531393a3a5369676e61747572650000a1050c1c73705f636f72651c65643235353139245369676e617475726500000400a50501205b75383b2036345d0000a505000003400000000800a9050000040899059d0500ad05084066696e616c6974795f6772616e6470613045717569766f636174696f6e0c08496401cc045601b1050453019d0500100130726f756e645f6e756d62657228010c7536340001206964656e74697479cc010849640001146669727374b505011828562c2053290001187365636f6e64b505011828562c2053290000b105084066696e616c6974795f6772616e64706124507265636f6d6d6974080448012c044e01100008012c7461726765745f686173682c0104480001347461726765745f6e756d6265721001044e0000b50500000408b1059d0500b9050c4070616c6c65745f696d5f6f6e6c696e651870616c6c65741043616c6c04045400010424686561727462656174080124686561727462656174bd0501644865617274626561743c543a3a426c6f636b4e756d6265723e0001247369676e6174757265d10501bc3c543a3a417574686f7269747949642061732052756e74696d654170705075626c69633e3a3a5369676e617475726500001438232320436f6d706c65786974793a59012d20604f284b202b20452960207768657265204b206973206c656e677468206f6620604b6579736020286865617274626561742e76616c696461746f72735f6c656e2920616e642045206973206c656e677468206f66b02020606865617274626561742e6e6574776f726b5f73746174652e65787465726e616c5f61646472657373608820202d20604f284b29603a206465636f64696e67206f66206c656e67746820604b60ac20202d20604f284529603a206465636f64696e672f656e636f64696e67206f66206c656e67746820604560042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632ebd05084070616c6c65745f696d5f6f6e6c696e6524486561727462656174042c426c6f636b4e756d626572011000140130626c6f636b5f6e756d62657210012c426c6f636b4e756d6265720001346e6574776f726b5f7374617465c10501484f70617175654e6574776f726b537461746500013473657373696f6e5f696e64657810013053657373696f6e496e64657800013c617574686f726974795f696e64657810012441757468496e64657800013876616c696461746f72735f6c656e10010c7533320000c1050c1c73705f636f7265206f6666636861696e484f70617175654e6574776f726b5374617465000008011c706565725f6964c50501304f706171756550656572496400014865787465726e616c5f616464726573736573c90501505665633c4f70617175654d756c7469616464723e0000c505081c73705f636f7265304f70617175655065657249640000040030011c5665633c75383e0000c905000002cd0500cd050c1c73705f636f7265206f6666636861696e3c4f70617175654d756c7469616464720000040030011c5665633c75383e0000d105104070616c6c65745f696d5f6f6e6c696e651c737232353531392c6170705f73723235353139245369676e617475726500000400d5050148737232353531393a3a5369676e61747572650000d5050c1c73705f636f72651c73723235353139245369676e617475726500000400a50501205b75383b2036345d0000d9050c4070616c6c65745f626167735f6c6973741870616c6c65741043616c6c0804540004490001081472656261670401286469736c6f63617465640001504163636f756e7449644c6f6f6b75704f663c543e00002859014465636c617265207468617420736f6d6520606469736c6f636174656460206163636f756e74206861732c207468726f7567682072657761726473206f722070656e616c746965732c2073756666696369656e746c7951016368616e676564206974732073636f726520746861742069742073686f756c642070726f7065726c792066616c6c20696e746f206120646966666572656e7420626167207468616e206974732063757272656e74106f6e652e001d01416e796f6e652063616e2063616c6c20746869732066756e6374696f6e2061626f757420616e7920706f74656e7469616c6c79206469736c6f6361746564206163636f756e742e00490157696c6c20616c7761797320757064617465207468652073746f7265642073636f7265206f6620606469736c6f63617465646020746f2074686520636f72726563742073636f72652c206261736564206f6e406053636f726550726f7669646572602e00d4496620606469736c6f63617465646020646f6573206e6f74206578697374732c2069742072657475726e7320616e206572726f722e3c7075745f696e5f66726f6e745f6f6604011c6c6967687465720001504163636f756e7449644c6f6f6b75704f663c543e000120d04d6f7665207468652063616c6c65722773204964206469726563746c7920696e2066726f6e74206f6620606c696768746572602e005901546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e642063616e206f6e6c792062652063616c6c656420627920746865204964206f66a0746865206163636f756e7420676f696e6720696e2066726f6e74206f6620606c696768746572602e00344f6e6c7920776f726b73206966942d20626f7468206e6f646573206172652077697468696e207468652073616d65206261672cd02d20616e6420606f726967696e602068617320612067726561746572206053636f726560207468616e20606c696768746572602e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632edd050c3870616c6c65745f76657374696e671870616c6c65741043616c6c0404540001141076657374000024b8556e6c6f636b20616e79207665737465642066756e6473206f66207468652073656e646572206163636f756e742e005d01546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e64207468652073656e646572206d75737420686176652066756e6473207374696c6c646c6f636b656420756e64657220746869732070616c6c65742e00d0456d69747320656974686572206056657374696e67436f6d706c6574656460206f72206056657374696e6755706461746564602e0034232320436f6d706c6578697479242d20604f283129602e28766573745f6f746865720401187461726765740001504163636f756e7449644c6f6f6b75704f663c543e00012cb8556e6c6f636b20616e79207665737465642066756e6473206f662061206074617267657460206163636f756e742e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e0051012d2060746172676574603a20546865206163636f756e742077686f7365207665737465642066756e64732073686f756c6420626520756e6c6f636b65642e204d75737420686176652066756e6473207374696c6c646c6f636b656420756e64657220746869732070616c6c65742e00d0456d69747320656974686572206056657374696e67436f6d706c6574656460206f72206056657374696e6755706461746564602e0034232320436f6d706c6578697479242d20604f283129602e3c7665737465645f7472616e736665720801187461726765740001504163636f756e7449644c6f6f6b75704f663c543e0001207363686564756c65e10501a456657374696e67496e666f3c42616c616e63654f663c543e2c20543a3a426c6f636b4e756d6265723e00023464437265617465206120766573746564207472616e736665722e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e00cc2d2060746172676574603a20546865206163636f756e7420726563656976696e6720746865207665737465642066756e64732ef02d20607363686564756c65603a205468652076657374696e67207363686564756c6520617474616368656420746f20746865207472616e736665722e005c456d697473206056657374696e6743726561746564602e00fc4e4f54453a20546869732077696c6c20756e6c6f636b20616c6c207363686564756c6573207468726f756768207468652063757272656e7420626c6f636b2e0034232320436f6d706c6578697479242d20604f283129602e54666f7263655f7665737465645f7472616e736665720c0118736f757263650001504163636f756e7449644c6f6f6b75704f663c543e0001187461726765740001504163636f756e7449644c6f6f6b75704f663c543e0001207363686564756c65e10501a456657374696e67496e666f3c42616c616e63654f663c543e2c20543a3a426c6f636b4e756d6265723e00033860466f726365206120766573746564207472616e736665722e00c4546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f526f6f745f2e00e82d2060736f75726365603a20546865206163636f756e742077686f73652066756e64732073686f756c64206265207472616e736665727265642e11012d2060746172676574603a20546865206163636f756e7420746861742073686f756c64206265207472616e7366657272656420746865207665737465642066756e64732ef02d20607363686564756c65603a205468652076657374696e67207363686564756c6520617474616368656420746f20746865207472616e736665722e005c456d697473206056657374696e6743726561746564602e00fc4e4f54453a20546869732077696c6c20756e6c6f636b20616c6c207363686564756c6573207468726f756768207468652063757272656e7420626c6f636b2e0034232320436f6d706c6578697479242d20604f283129602e3c6d657267655f7363686564756c657308013c7363686564756c65315f696e64657810010c75333200013c7363686564756c65325f696e64657810010c7533320004545d014d657267652074776f2076657374696e67207363686564756c657320746f6765746865722c206372656174696e672061206e65772076657374696e67207363686564756c65207468617420756e6c6f636b73206f7665725501746865206869676865737420706f737369626c6520737461727420616e6420656e6420626c6f636b732e20496620626f7468207363686564756c6573206861766520616c7265616479207374617274656420746865590163757272656e7420626c6f636b2077696c6c206265207573656420617320746865207363686564756c652073746172743b207769746820746865206361766561742074686174206966206f6e65207363686564756c655d0169732066696e6973686564206279207468652063757272656e7420626c6f636b2c20746865206f746865722077696c6c206265207472656174656420617320746865206e6577206d6572676564207363686564756c652c2c756e6d6f6469666965642e00f84e4f54453a20496620607363686564756c65315f696e646578203d3d207363686564756c65325f696e6465786020746869732069732061206e6f2d6f702e41014e4f54453a20546869732077696c6c20756e6c6f636b20616c6c207363686564756c6573207468726f756768207468652063757272656e7420626c6f636b207072696f7220746f206d657267696e672e61014e4f54453a20496620626f7468207363686564756c6573206861766520656e646564206279207468652063757272656e7420626c6f636b2c206e6f206e6577207363686564756c652077696c6c206265206372656174656464616e6420626f74682077696c6c2062652072656d6f7665642e006c4d6572676564207363686564756c6520617474726962757465733a35012d20607374617274696e675f626c6f636b603a20604d4158287363686564756c65312e7374617274696e675f626c6f636b2c207363686564756c6564322e7374617274696e675f626c6f636b2c48202063757272656e745f626c6f636b29602e21012d2060656e64696e675f626c6f636b603a20604d4158287363686564756c65312e656e64696e675f626c6f636b2c207363686564756c65322e656e64696e675f626c6f636b29602e59012d20606c6f636b6564603a20607363686564756c65312e6c6f636b65645f61742863757272656e745f626c6f636b29202b207363686564756c65322e6c6f636b65645f61742863757272656e745f626c6f636b29602e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e00e82d20607363686564756c65315f696e646578603a20696e646578206f6620746865206669727374207363686564756c6520746f206d657267652eec2d20607363686564756c65325f696e646578603a20696e646578206f6620746865207365636f6e64207363686564756c6520746f206d657267652e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632ee1050c3870616c6c65745f76657374696e673076657374696e675f696e666f2c56657374696e67496e666f081c42616c616e636501182c426c6f636b4e756d6265720110000c01186c6f636b656418011c42616c616e63650001247065725f626c6f636b18011c42616c616e63650001387374617274696e675f626c6f636b10012c426c6f636b4e756d6265720000e5050c3c70616c6c65745f6d756c74697369671870616c6c65741043616c6c0404540001105061735f6d756c74695f7468726573686f6c645f310801446f746865725f7369676e61746f72696573610501445665633c543a3a4163636f756e7449643e00011063616c6c3d04017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e0000305101496d6d6564696174656c792064697370617463682061206d756c74692d7369676e61747572652063616c6c207573696e6720612073696e676c6520617070726f76616c2066726f6d207468652063616c6c65722e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e003d012d20606f746865725f7369676e61746f72696573603a20546865206163636f756e747320286f74686572207468616e207468652073656e646572292077686f206172652070617274206f662074686501016d756c74692d7369676e61747572652c2062757420646f206e6f7420706172746963697061746520696e2074686520617070726f76616c2070726f636573732e882d206063616c6c603a205468652063616c6c20746f2062652065786563757465642e00b8526573756c74206973206571756976616c656e7420746f20746865206469737061746368656420726573756c742e0034232320436f6d706c657869747919014f285a202b204329207768657265205a20697320746865206c656e677468206f66207468652063616c6c20616e6420432069747320657865637574696f6e207765696768742e2061735f6d756c74691401247468726573686f6c642d04010c7531360001446f746865725f7369676e61746f72696573610501445665633c543a3a4163636f756e7449643e00013c6d617962655f74696d65706f696e74e90501844f7074696f6e3c54696d65706f696e743c543a3a426c6f636b4e756d6265723e3e00011063616c6c3d04017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e0001286d61785f77656967687420011857656967687400019c5501526567697374657220617070726f76616c20666f72206120646973706174636820746f206265206d6164652066726f6d20612064657465726d696e697374696320636f6d706f73697465206163636f756e74206966f8617070726f766564206279206120746f74616c206f6620607468726573686f6c64202d203160206f6620606f746865725f7369676e61746f72696573602e00b049662074686572652061726520656e6f7567682c207468656e206469737061746368207468652063616c6c2e002d015061796d656e743a20604465706f73697442617365602077696c6c20626520726573657276656420696620746869732069732074686520666972737420617070726f76616c2c20706c75733d01607468726573686f6c64602074696d657320604465706f736974466163746f72602e2049742069732072657475726e6564206f6e636520746869732064697370617463682068617070656e73206f723469732063616e63656c6c65642e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e0055012d20607468726573686f6c64603a2054686520746f74616c206e756d626572206f6620617070726f76616c7320666f722074686973206469737061746368206265666f72652069742069732065786563757465642e41012d20606f746865725f7369676e61746f72696573603a20546865206163636f756e747320286f74686572207468616e207468652073656e646572292077686f2063616e20617070726f766520746869736c64697370617463682e204d6179206e6f7420626520656d7074792e59012d20606d617962655f74696d65706f696e74603a20496620746869732069732074686520666972737420617070726f76616c2c207468656e2074686973206d75737420626520604e6f6e65602e20496620697420697351016e6f742074686520666972737420617070726f76616c2c207468656e206974206d7573742062652060536f6d65602c2077697468207468652074696d65706f696e742028626c6f636b206e756d62657220616e64d47472616e73616374696f6e20696e64657829206f662074686520666972737420617070726f76616c207472616e73616374696f6e2e882d206063616c6c603a205468652063616c6c20746f2062652065786563757465642e001d014e4f54453a20556e6c6573732074686973206973207468652066696e616c20617070726f76616c2c20796f752077696c6c2067656e6572616c6c792077616e7420746f20757365190160617070726f76655f61735f6d756c74696020696e73746561642c2073696e6365206974206f6e6c7920726571756972657320612068617368206f66207468652063616c6c2e005901526573756c74206973206571756976616c656e7420746f20746865206469737061746368656420726573756c7420696620607468726573686f6c64602069732065786163746c79206031602e204f746865727769736555016f6e20737563636573732c20726573756c7420697320604f6b6020616e642074686520726573756c742066726f6d2074686520696e746572696f722063616c6c2c206966206974207761732065786563757465642cdc6d617920626520666f756e6420696e20746865206465706f736974656420604d756c7469736967457865637574656460206576656e742e0034232320436f6d706c6578697479502d20604f2853202b205a202b2043616c6c29602ecc2d20557020746f206f6e652062616c616e63652d72657365727665206f7220756e72657365727665206f7065726174696f6e2e3d012d204f6e6520706173737468726f756768206f7065726174696f6e2c206f6e6520696e736572742c20626f746820604f285329602077686572652060536020697320746865206e756d626572206f66450120207369676e61746f726965732e206053602069732063617070656420627920604d61785369676e61746f72696573602c207769746820776569676874206265696e672070726f706f7274696f6e616c2e21012d204f6e652063616c6c20656e636f6465202620686173682c20626f7468206f6620636f6d706c657869747920604f285a296020776865726520605a602069732074782d6c656e2ebc2d204f6e6520656e636f6465202620686173682c20626f7468206f6620636f6d706c657869747920604f285329602ed42d20557020746f206f6e652062696e6172792073656172636820616e6420696e736572742028604f286c6f6753202b20532960292ef82d20492f4f3a2031207265616420604f285329602c20757020746f2031206d757461746520604f285329602e20557020746f206f6e652072656d6f76652e302d204f6e65206576656e742e6c2d2054686520776569676874206f6620746865206063616c6c602e4d012d2053746f726167653a20696e7365727473206f6e65206974656d2c2076616c75652073697a6520626f756e64656420627920604d61785369676e61746f72696573602c20776974682061206465706f7369741901202074616b656e20666f7220697473206c69666574696d65206f6620604465706f73697442617365202b207468726573686f6c64202a204465706f736974466163746f72602e40617070726f76655f61735f6d756c74691401247468726573686f6c642d04010c7531360001446f746865725f7369676e61746f72696573610501445665633c543a3a4163636f756e7449643e00013c6d617962655f74696d65706f696e74e90501844f7074696f6e3c54696d65706f696e743c543a3a426c6f636b4e756d6265723e3e00012463616c6c5f686173680401205b75383b2033325d0001286d61785f7765696768742001185765696768740002785501526567697374657220617070726f76616c20666f72206120646973706174636820746f206265206d6164652066726f6d20612064657465726d696e697374696320636f6d706f73697465206163636f756e74206966f8617070726f766564206279206120746f74616c206f6620607468726573686f6c64202d203160206f6620606f746865725f7369676e61746f72696573602e002d015061796d656e743a20604465706f73697442617365602077696c6c20626520726573657276656420696620746869732069732074686520666972737420617070726f76616c2c20706c75733d01607468726573686f6c64602074696d657320604465706f736974466163746f72602e2049742069732072657475726e6564206f6e636520746869732064697370617463682068617070656e73206f723469732063616e63656c6c65642e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e0055012d20607468726573686f6c64603a2054686520746f74616c206e756d626572206f6620617070726f76616c7320666f722074686973206469737061746368206265666f72652069742069732065786563757465642e41012d20606f746865725f7369676e61746f72696573603a20546865206163636f756e747320286f74686572207468616e207468652073656e646572292077686f2063616e20617070726f766520746869736c64697370617463682e204d6179206e6f7420626520656d7074792e59012d20606d617962655f74696d65706f696e74603a20496620746869732069732074686520666972737420617070726f76616c2c207468656e2074686973206d75737420626520604e6f6e65602e20496620697420697351016e6f742074686520666972737420617070726f76616c2c207468656e206974206d7573742062652060536f6d65602c2077697468207468652074696d65706f696e742028626c6f636b206e756d62657220616e64d47472616e73616374696f6e20696e64657829206f662074686520666972737420617070726f76616c207472616e73616374696f6e2ecc2d206063616c6c5f68617368603a205468652068617368206f66207468652063616c6c20746f2062652065786563757465642e0035014e4f54453a2049662074686973206973207468652066696e616c20617070726f76616c2c20796f752077696c6c2077616e7420746f20757365206061735f6d756c74696020696e73746561642e0034232320436f6d706c6578697479242d20604f285329602ecc2d20557020746f206f6e652062616c616e63652d72657365727665206f7220756e72657365727665206f7065726174696f6e2e3d012d204f6e6520706173737468726f756768206f7065726174696f6e2c206f6e6520696e736572742c20626f746820604f285329602077686572652060536020697320746865206e756d626572206f66450120207369676e61746f726965732e206053602069732063617070656420627920604d61785369676e61746f72696573602c207769746820776569676874206265696e672070726f706f7274696f6e616c2ebc2d204f6e6520656e636f6465202620686173682c20626f7468206f6620636f6d706c657869747920604f285329602ed42d20557020746f206f6e652062696e6172792073656172636820616e6420696e736572742028604f286c6f6753202b20532960292ef82d20492f4f3a2031207265616420604f285329602c20757020746f2031206d757461746520604f285329602e20557020746f206f6e652072656d6f76652e302d204f6e65206576656e742e4d012d2053746f726167653a20696e7365727473206f6e65206974656d2c2076616c75652073697a6520626f756e64656420627920604d61785369676e61746f72696573602c20776974682061206465706f7369741901202074616b656e20666f7220697473206c69666574696d65206f6620604465706f73697442617365202b207468726573686f6c64202a204465706f736974466163746f72602e3c63616e63656c5f61735f6d756c74691001247468726573686f6c642d04010c7531360001446f746865725f7369676e61746f72696573610501445665633c543a3a4163636f756e7449643e00012474696d65706f696e740d01016454696d65706f696e743c543a3a426c6f636b4e756d6265723e00012463616c6c5f686173680401205b75383b2033325d000354550143616e63656c2061207072652d6578697374696e672c206f6e2d676f696e67206d756c7469736967207472616e73616374696f6e2e20416e79206465706f7369742072657365727665642070726576696f75736c79c4666f722074686973206f7065726174696f6e2077696c6c20626520756e7265736572766564206f6e20737563636573732e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e0055012d20607468726573686f6c64603a2054686520746f74616c206e756d626572206f6620617070726f76616c7320666f722074686973206469737061746368206265666f72652069742069732065786563757465642e41012d20606f746865725f7369676e61746f72696573603a20546865206163636f756e747320286f74686572207468616e207468652073656e646572292077686f2063616e20617070726f766520746869736c64697370617463682e204d6179206e6f7420626520656d7074792e5d012d206074696d65706f696e74603a205468652074696d65706f696e742028626c6f636b206e756d62657220616e64207472616e73616374696f6e20696e64657829206f662074686520666972737420617070726f76616c787472616e73616374696f6e20666f7220746869732064697370617463682ecc2d206063616c6c5f68617368603a205468652068617368206f66207468652063616c6c20746f2062652065786563757465642e0034232320436f6d706c6578697479242d20604f285329602ecc2d20557020746f206f6e652062616c616e63652d72657365727665206f7220756e72657365727665206f7065726174696f6e2e3d012d204f6e6520706173737468726f756768206f7065726174696f6e2c206f6e6520696e736572742c20626f746820604f285329602077686572652060536020697320746865206e756d626572206f66450120207369676e61746f726965732e206053602069732063617070656420627920604d61785369676e61746f72696573602c207769746820776569676874206265696e672070726f706f7274696f6e616c2ebc2d204f6e6520656e636f6465202620686173682c20626f7468206f6620636f6d706c657869747920604f285329602e302d204f6e65206576656e742e842d20492f4f3a2031207265616420604f285329602c206f6e652072656d6f76652e702d2053746f726167653a2072656d6f766573206f6e65206974656d2e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632ee90504184f7074696f6e040454010d010108104e6f6e6500000010536f6d6504000d010000010000ed05083870616c6c65745f636f756e63696c1043616c6c04045400013048616e6e6f756e63655f63616e6469646163791001346d656d626572736869705f696428012c543a3a4d656d62657249640001487374616b696e675f6163636f756e745f6964000130543a3a4163636f756e7449640001447265776172645f6163636f756e745f6964000130543a3a4163636f756e7449640001147374616b6518012842616c616e63653c543e0000244c5375627363726962652063616e646964617465002823203c7765696768743e00242323207765696768741c604f2028312960142d2064623ad42020202d20604f2831296020646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e5c72656c656173655f63616e6469646163795f7374616b650401346d656d626572736869705f696428012c543a3a4d656d6265724964000124c452656c656173652063616e646964616379207374616b652074686174206973206e6f206c6f6e676572206e65656465642e002823203c7765696768743e00242323207765696768741c604f2028312960142d2064623ad42020202d20604f2831296020646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e4877697468647261775f63616e6469646163790401346d656d626572736869705f696428012c543a3a4d656d6265724964000224bc57697468647261772063616e64696461637920616e642072656c656173652063616e646964616379207374616b652e002823203c7765696768743e00242323207765696768741c604f2028312960142d2064623ad42020202d20604f2831296020646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e487365745f63616e6469646163795f6e6f74650801346d656d626572736869705f696428012c543a3a4d656d62657249640001106e6f746530011c5665633c75383e00032879015365742073686f7274206465736372697074696f6e20666f7220746865207573657227732063616e6469646163792e2043616e2062652063616c6c656420616e7974696d6520647572696e67207573657227732063616e6469646163792e002823203c7765696768743e002423232077656967687438604f20284e29602077686572653a98604e60206973207468652073697a65206f6620606e6f74656020696e206b696c6f6279746573142d2064623ad42020202d20604f2831296020646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e287365745f62756467657404011c62616c616e636518012842616c616e63653c543e000424605365747320746865206275646765742062616c616e63652e002823203c7765696768743e00242323207765696768741c604f2028312960142d2064623ad42020202d20604f2831296020646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e48706c616e5f6275646765745f726566696c6c04012c6e6578745f726566696c6c100138543a3a426c6f636b4e756d62657200052470506c616e20746865206e6578742062756467657420726566696c6c2e002823203c7765696768743e00242323207765696768741c604f2028312960142d2064623ad42020202d20604f2831296020646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e507365745f6275646765745f696e6372656d656e740401406275646765745f696e6372656d656e7418012842616c616e63653c543e0006247453657473207468652062756467657420726566696c6c20616d6f756e74002823203c7765696768743e00242323207765696768741c604f2028312960142d2064623ad42020202d20604f2831296020646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e507365745f636f756e63696c6f725f726577617264040140636f756e63696c6f725f72657761726418012842616c616e63653c543e0007248c536574732074686520636f756e63696c6f72207265776172642070657220626c6f636b002823203c7765696768743e00242323207765696768741c604f2028312960142d2064623ad42020202d20604f2831296020646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e3c66756e64696e675f7265717565737404014066756e64696e675f7265717565737473550301dc5665633c46756e64696e6752657175657374506172616d65746572733c42616c616e63653c543e2c20543a3a4163636f756e7449643e3e000828b85472616e73666572732066756e64732066726f6d20636f756e63696c2062756467657420746f206163636f756e74002823203c7765696768743e002423232077656967687438604f20284629602077686572653a9c60466020697320746865206c656e677468206f66206066756e64696e675f726571756573747360142d2064623ad42020202d20604f2831296020646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e4c66756e645f636f756e63696c5f6275646765740c01246d656d6265725f696428012c4d656d62657249643c543e000118616d6f756e7418012842616c616e63653c543e000124726174696f6e616c6530011c5665633c75383e0009209046756e642074686520636f756e63696c206275646765742062792061206d656d6265722e203c7765696768743e0024232320576569676874c4604f202831296020446f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d6574657273142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e40636f756e63696c6f725f72656d61726b080130636f756e63696c6f725f696428012c543a3a4d656d626572496400010c6d736730011c5665633c75383e000a2480436f756e63696c6f72206d616b657320612072656d61726b206d657373616765002823203c7765696768743e00242323207765696768741c604f2028312960142d2064623ad42020202d20604f2831296020646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e4063616e6469646174655f72656d61726b08013063616e6469646174655f696428012c543a3a4d656d626572496400010c6d736730011c5665633c75383e000b248043616e646964617465206d616b657320612072656d61726b206d657373616765002823203c7765696768743e00242323207765696768741c604f2028312960142d2064623ad42020202d20604f2831296020646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e0c4c446973706174636861626c652063616c6c732e005501456163682076617269616e74206f66207468697320656e756d206d61707320746f206120646973706174636861626c652066756e6374696f6e2066726f6d20746865206173736f636961746564206d6f64756c652ef105084470616c6c65745f7265666572656e64756d1043616c6c08045400044900011010766f7465080128636f6d6d69746d656e742c011c543a3a486173680001147374616b6518013042616c616e63654f663c543e00002494436173742061207365616c656420766f746520696e20746865207265666572656e64756d2e002823203c7765696768743e00242323207765696768741c604f2028312960142d2064623ad42020202d20604f2831296020646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e2c72657665616c5f766f746508011073616c7430011c5665633c75383e000138766f74655f6f7074696f6e5f69642801d03c5420617320636f6d6d6f6e3a3a6d656d626572736869703a3a4d656d6265727368697054797065733e3a3a4d656d626572496400012c9c52657665616c2061207365616c656420766f746520696e20746865207265666572656e64756d2e002823203c7765696768743e002423232057656967687438604f20285729602077686572653a0d012d2060576020697320746865206e756d626572206f662060696e7465726d6564696174655f77696e6e657273602073746f72656420696e207468652063757272656e7468202020206053746167653a3a3c542c20493e3a3a676574282960142d2044423ad42020202d20604f2831296020646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e4872656c656173655f766f74655f7374616b650002205c52656c656173652061206c6f636b6564207374616b652e2823203c7765696768743e00242323207765696768741c604f2028312960142d2064623ad42020202d20604f2831296020646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e446f70745f6f75745f6f665f766f74696e67000324cc5065726d616e656e746c79206f7074206f7574206f6620766f74696e672066726f6d206120676976656e206163636f756e742e002823203c7765696768743e00242323207765696768741c604f2028312960142d2064623ad42020202d20604f2831296020646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e0c4c446973706174636861626c652063616c6c732e005501456163682076617269616e74206f66207468697320656e756d206d61707320746f206120646973706174636861626c652066756e6374696f6e2066726f6d20746865206173736f636961746564206d6f64756c652ef505084470616c6c65745f6d656d626572736869701043616c6c040454000144386275795f6d656d62657273686970040118706172616d732d0101c84275794d656d62657273686970506172616d65746572733c543a3a4163636f756e7449642c20543a3a4d656d62657249643e00002c7c4e6f6e2d6d656d626572732063616e20627579206d656d626572736869702e00203c7765696768743e002423232057656967687448604f202857202b204d29602077686572653a942d20605760206973207468652068616e646c652073697a6520696e206b696c6f62797465739c2d20604d6020697320746865206d657461646174612073697a6520696e206b696c6f6279746573142d2044423a242020202d204f2831292c23203c2f7765696768743e387570646174655f70726f66696c650c01246d656d6265725f696428012c543a3a4d656d626572496400011868616e646c653101013c4f7074696f6e3c5665633c75383e3e0001206d657461646174613101013c4f7074696f6e3c5665633c75383e3e0001300d01557064617465206d656d626572277320616c6c206f7220736f6d65206f66206e616d652c2068616e646c652c2061766174617220616e642061626f757420746578742e7c4e6f20656666656374206966206e6f206368616e676564206669656c64732e00203c7765696768743e002423232057656967687448604f202857202b204d29602077686572653a942d20605760206973207468652068616e646c652073697a6520696e206b696c6f62797465739c2d20604d6020697320746865206d657461646174612073697a6520696e206b696c6f6279746573142d2044423a242020202d204f2831292c23203c2f7765696768743e3c7570646174655f6163636f756e74730c01246d656d6265725f696428012c543a3a4d656d62657249640001406e65775f726f6f745f6163636f756e749401504f7074696f6e3c543a3a4163636f756e7449643e0001586e65775f636f6e74726f6c6c65725f6163636f756e749401504f7074696f6e3c543a3a4163636f756e7449643e00022c550155706461746573206d656d62657220726f6f74206f7220636f6e74726f6c6c6572206163636f756e74732e204e6f2065666665637420696620626f7468206e6577206163636f756e74732061726520656d7074792e00203c7765696768743e00203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e6c7570646174655f70726f66696c655f766572696669636174696f6e0c0124776f726b65725f6964280128543a3a4163746f7249640001407461726765745f6d656d6265725f696428012c543a3a4d656d626572496400012c69735f7665726966696564980110626f6f6c000324450155706461746573206d656d6265722070726f66696c6520766572696669636174696f6e207374617475732e20526571756972657320776f726b696e672067726f7570206d656d626572206f726967696e2e00203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e407365745f726566657272616c5f63757404013470657263656e745f76616c75650801087538000424110155706461746573206d656d6265727368697020726566657272616c206375742070657263656e742076616c75652e20526571756972657320726f6f74206f726967696e2e00203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e407472616e736665725f696e76697465730c0140736f757263655f6d656d6265725f696428012c543a3a4d656d62657249640001407461726765745f6d656d6265725f696428012c543a3a4d656d62657249640001446e756d6265725f6f665f696e766974657310010c753332000524b45472616e736665727320696e76697465732066726f6d206f6e65206d656d62657220746f20616e6f746865722e00203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e34696e766974655f6d656d626572040118706172616d73390101d4496e766974654d656d62657273686970506172616d65746572733c543a3a4163636f756e7449642c20543a3a4d656d62657249643e00062c50496e766974652061206e6577206d656d6265722e00203c7765696768743e002423232057656967687448604f202857202b204d29602077686572653a942d20605760206973207468652068616e646c652073697a6520696e206b696c6f62797465739c2d20604d6020697320746865206d657461646174612073697a6520696e206b696c6f6279746573142d2044423a242020202d204f2831292c23203c2f7765696768743e3c676966745f6d656d62657273686970040118706172616d73410101d0476966744d656d62657273686970506172616d65746572733c543a3a4163636f756e7449642c2042616c616e63654f663c543e3e00070c1d01476966742061206d656d62657273686970207573696e67206f776e2066756e64732e2047696674657220646f6573206e6f74206e65656420746f2062652061206d656d6265722e5d0143616e206f7074696e616c6c79206170706c792061206c6f636b206f6e206120706f7274696f6e206f66207468652066756e6473207472616e7366657272656420746f20726f6f7420616e6420636f6e74726f6c6c6572b86163636f756e74732e2047696674657220616c736f207061797320746865206d656d62657273686970206665652e507365745f6d656d626572736869705f70726963650401246e65775f707269636518013042616c616e63654f663c543e000824bc55706461746573206d656d626572736869702070726963652e20526571756972657320726f6f74206f726967696e2e00203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e6c7365745f6c65616465725f696e7669746174696f6e5f71756f7461040140696e7669746174696f6e5f71756f746110010c753332000924d855706461746573206c656164657220696e7669746174696f6e2071756f74612e20526571756972657320726f6f74206f726967696e2e00203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e787365745f696e697469616c5f696e7669746174696f6e5f62616c616e636504014c6e65775f696e697469616c5f62616c616e636518013042616c616e63654f663c543e000a2439015570646174657320696e697469616c20696e7669746174696f6e2062616c616e636520666f72206120696e7669746564206d656d6265722e20526571756972657320726f6f74206f726967696e2e00203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e707365745f696e697469616c5f696e7669746174696f6e5f636f756e740401506e65775f696e7669746174696f6e5f636f756e7410010c753332000b2411015570646174657320696e697469616c20696e7669746174696f6e20636f756e7420666f722061206d656d6265722e20526571756972657320726f6f74206f726967696e2e00203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e746164645f7374616b696e675f6163636f756e745f63616e6469646174650401246d656d6265725f696428012c543a3a4d656d6265724964000c28ac416464207374616b696e67206163636f756e742063616e64696461746520666f722061206d656d6265722eb8546865206d656d62657273686970206d75737420626520636f6e6669726d6564206265666f72652075736167652e00203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e5872656d6f76655f7374616b696e675f6163636f756e740401246d656d6265725f696428012c543a3a4d656d6265724964000d249052656d6f7665207374616b696e67206163636f756e7420666f722061206d656d6265722e00203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e5c636f6e6669726d5f7374616b696e675f6163636f756e740801246d656d6265725f696428012c543a3a4d656d62657249640001487374616b696e675f6163636f756e745f6964000130543a3a4163636f756e744964000e24bc436f6e6669726d207374616b696e67206163636f756e742063616e64696461746520666f722061206d656d6265722e00203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e346d656d6265725f72656d61726b0c01246d656d6265725f696428012c543a3a4d656d626572496400010c6d736730011c5665633c75383e00011c7061796d656e74490101884f7074696f6e3c28543a3a4163636f756e7449642c20543a3a42616c616e6365293e000f24544d656d626572206d616b657320612072656d61726b00203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e346372656174655f6d656d626572040118706172616d733d0101904372656174654d656d626572506172616d65746572733c543a3a4163636f756e7449643e00102c804372656174652061206d656d6265722070726f66696c6520617320726f6f742e00203c7765696768743e002423232057656967687448604f202849202b204a29602077686572653a942d20604960206973207468652068616e646c652073697a6520696e206b696c6f62797465739c2d20604a6020697320746865206d657461646174612073697a6520696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e0c4c446973706174636861626c652063616c6c732e005501456163682076617269616e74206f66207468697320656e756d206d61707320746f206120646973706174636861626c652066756e6374696f6e2066726f6d20746865206173736f636961746564206d6f64756c652ef905083070616c6c65745f666f72756d1043616c6c0404540001409c7570646174655f63617465676f72795f6d656d626572736869705f6f665f6d6f64657261746f720c01306d6f64657261746f725f69642801384d6f64657261746f7249643c543e00012c63617465676f72795f6964280134543a3a43617465676f727949640001246e65775f76616c7565980110626f6f6c0000240901456e61626c652061206d6f64657261746f722063616e206d6f64657261746520612063617465676f727920616e6420697473207375622063617465676f726965732e00203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e3c6372656174655f63617465676f72790c0148706172656e745f63617465676f72795f6964350101544f7074696f6e3c543a3a43617465676f727949643e0001147469746c6530011c5665633c75383e00012c6465736372697074696f6e30011c5665633c75383e0001304c4164642061206e65772063617465676f72792e00203c7765696768743e002423232057656967687458604f202857202b2056202b205829602077686572653a6c2d20605760206973207468652063617465676f7279206465707468d42d20605660206973207468652073697a65206f66207468652063617465676f7279207469746c6520696e206b696c6f62797465732eec2d20605860206973207468652073697a65206f66207468652063617465676f7279206465736372697074696f6e20696e206b696c6f62797465732e142d2044423a242020202d204f2857292c23203c2f7765696768743e7c7570646174655f63617465676f72795f617263686976616c5f7374617475730c01146163746f725501014850726976696c656765644163746f723c543e00012c63617465676f72795f6964280134543a3a43617465676f7279496400014c6e65775f617263686976616c5f737461747573980110626f6f6c0002285855706461746520617263686976616c2073746174757300203c7765696768743e002423232057656967687438604f20285729602077686572653a6c2d20605760206973207468652063617465676f7279206465707468142d2044423a242020202d204f2857292c23203c2f7765696768743e547570646174655f63617465676f72795f7469746c650c01146163746f725501014850726976696c656765644163746f723c543e00012c63617465676f72795f6964280134543a3a43617465676f727949640001147469746c6530011c5665633c75383e00032c545570646174652063617465676f7279207469746c6500203c7765696768743e002423232057656967687448604f202857202b205629602077686572653a6c2d20605760206973207468652063617465676f7279206465707468d42d20605660206973207468652073697a65206f66207468652063617465676f7279207469746c6520696e206b696c6f62797465732e142d2044423a242020202d204f2857292c23203c2f7765696768743e6c7570646174655f63617465676f72795f6465736372697074696f6e0c01146163746f725501014850726976696c656765644163746f723c543e00012c63617465676f72795f6964280134543a3a43617465676f7279496400012c6465736372697074696f6e30011c5665633c75383e00042c6c5570646174652063617465676f7279206465736372697074696f6e00203c7765696768743e002423232057656967687438604f20285729602077686572653a6c2d20605760206973207468652063617465676f7279206465707468ec2d20605660206973207468652073697a65206f66207468652063617465676f7279206465736372697074696f6e20696e206b696c6f62797465732e142d2044423a242020202d204f2857292c23203c2f7765696768743e3c64656c6574655f63617465676f72790801146163746f725501014850726976696c656765644163746f723c543e00012c63617465676f72795f6964280134543a3a43617465676f727949640005283c44656c6574652063617465676f727900203c7765696768743e002423232057656967687438604f20285729602077686572653a6c2d20605760206973207468652063617465676f7279206465707468142d2044423a242020202d204f2857292c23203c2f7765696768743e346372656174655f746872656164100134666f72756d5f757365725f6964280138466f72756d5573657249643c543e00012c63617465676f72795f6964280134543a3a43617465676f727949640001206d6574616461746130011c5665633c75383e0001107465787430011c5665633c75383e00063074437265617465206e65772074687265616420696e2063617465676f727900203c7765696768743e002423232057656967687458604f202857202b2056202b205829602077686572653a6c2d20605760206973207468652063617465676f7279206465707468cc2d20605660206973207468652073697a65206f662074686520746872656164207469746c6520696e206b696c6f62797465732ec82d20605860206973207468652073697a65206f662074686520746872656164207465787420696e206b696c6f62797465732e142d2044423a242020202d204f2857292c23203c2f7765696768743e50656469745f7468726561645f6d65746164617461100134666f72756d5f757365725f6964280138466f72756d5573657249643c543e00012c63617465676f72795f6964280134543a3a43617465676f727949640001247468726561645f696428012c543a3a54687265616449640001306e65775f6d6574616461746130011c5665633c75383e00072c504564697420746872656164206d6574616461746100203c7765696768743e002423232057656967687448604f202857202b205629602077686572653a6c2d20605760206973207468652063617465676f7279206465707468d82d20605660206973207468652073697a65206f662074686520746872656164206d6574616461746120696e206b696c6f62797465732e142d2044423a242020202d204f2857292c23203c2f7765696768743e3464656c6574655f746872656164100134666f72756d5f757365725f6964280138466f72756d5573657249643c543e00012c63617465676f72795f6964280134543a3a43617465676f727949640001247468726561645f696428012c543a3a546872656164496400011068696465980110626f6f6c0008283444656c6574652074687265616400203c7765696768743e002423232057656967687438604f20285729602077686572653a6c2d20605760206973207468652063617465676f7279206465707468142d2044423a242020202d204f2857292c23203c2f7765696768743e5c6d6f76655f7468726561645f746f5f63617465676f72791001146163746f725501014850726976696c656765644163746f723c543e00012c63617465676f72795f6964280134543a3a43617465676f727949640001247468726561645f696428012c543a3a546872656164496400013c6e65775f63617465676f72795f6964280134543a3a43617465676f727949640009287c4d6f76652074687265616420746f20616e6f746865722063617465676f727900203c7765696768743e002423232057656967687438604f20285729602077686572653a6c2d20605760206973207468652063617465676f7279206465707468142d2044423a242020202d204f2857292c23203c2f7765696768743e3c6d6f6465726174655f7468726561641001146163746f725501014850726976696c656765644163746f723c543e00012c63617465676f72795f6964280134543a3a43617465676f727949640001247468726561645f696428012c543a3a5468726561644964000124726174696f6e616c6530011c5665633c75383e000a303c4d6f6465726174652074687265616400203c7765696768743e002423232057656967687458604f202857202b2056202b205829602077686572653a702d20605760206973207468652063617465676f72792064657074682c902d2060566020697320746865206e756d626572206f662074687265616420706f7374732cbc2d20605860206973207468652073697a65206f662074686520726174696f6e616c6520696e206b696c6f6279746573142d2044423a342020202d204f2857202b2056292c23203c2f7765696768743e206164645f706f7374140134666f72756d5f757365725f6964280138466f72756d5573657249643c543e00012c63617465676f72795f6964280134543a3a43617465676f727949640001247468726561645f696428012c543a3a54687265616449640001107465787430011c5665633c75383e0001206564697461626c65980110626f6f6c000b2c2041646420706f737400203c7765696768743e002423232057656967687448604f202857202b205629602077686572653a702d20605760206973207468652063617465676f72792064657074682ca82d20605660206973207468652073697a65206f6620746865207465787420696e206b696c6f6279746573142d2044423a242020202d204f2857292c23203c2f7765696768743e38656469745f706f73745f74657874140134666f72756d5f757365725f6964280138466f72756d5573657249643c543e00012c63617465676f72795f6964280134543a3a43617465676f727949640001247468726561645f696428012c543a3a546872656164496400011c706f73745f6964280124543a3a506f737449640001206e65775f7465787430011c5665633c75383e000c2c384564697420706f7374207465787400203c7765696768743e002423232057656967687448604f202857202b205629602077686572653a702d20605760206973207468652063617465676f72792064657074682cb82d20605660206973207468652073697a65206f6620746865206e6577207465787420696e206b696c6f6279746573142d2044423a242020202d204f2857292c23203c2f7765696768743e346d6f6465726174655f706f73741401146163746f725501014850726976696c656765644163746f723c543e00012c63617465676f72795f6964280134543a3a43617465676f727949640001247468726561645f696428012c543a3a546872656164496400011c706f73745f6964280124543a3a506f73744964000124726174696f6e616c6530011c5665633c75383e000d2c344d6f64657261746520706f737400203c7765696768743e002423232057656967687448604f202857202b205629602077686572653a702d20605760206973207468652063617465676f72792064657074682cbc2d20605660206973207468652073697a65206f662074686520726174696f6e616c6520696e206b696c6f6279746573142d2044423a242020202d204f2857292c23203c2f7765696768743e3064656c6574655f706f7374730c0134666f72756d5f757365725f6964280138466f72756d5573657249643c543e000114706f7374735d01018442547265654d61703c457874656e646564506f737449643c543e2c20626f6f6c3e000124726174696f6e616c6530011c5665633c75383e000e346444656c65746520706f73742066726f6d2073746f726167652eec596f75206e65656420746f2070726f76696465206120766563746f72206f6620706f73747320746f2064656c65746520696e2074686520666f726db428543a3a43617465676f727949642c20543a3a54687265616449642c20543a3a506f737449642c20626f6f6c292501776865726520746865206c61737420626f6f6c206973207768657468657220796f752077616e7420746f20686964652069742061706172742066726f6d2064656c6574696e67206974002423232057656967687458604f202857202b2056202b205029602077686572653a702d20605760206973207468652063617465676f72792064657074682cbc2d20605660206973207468652073697a65206f662074686520726174696f6e616c6520696e206b696c6f6279746573982d2060506020697320746865206e756d626572206f6620706f73747320746f2064656c657465142d2044423a342020202d204f2857202b2050292c23203c2f7765696768743e507365745f737469636b6965645f746872656164730c01146163746f725501014850726976696c656765644163746f723c543e00012c63617465676f72795f6964280134543a3a43617465676f72794964000130737469636b6965645f6964736901015442547265655365743c543a3a54687265616449643e000f2c8453657420737469636b696564207468726561647320666f722063617465676f727900203c7765696768743e002423232057656967687448604f202857202b205629602077686572653a702d20605760206973207468652063617465676f72792064657074682c9c2d2060566020697320746865206c656e677468206f662074686520737469636b6965645f696473142d2044423a342020202d204f2857202b2056292c23203c2f7765696768743e0c4c446973706174636861626c652063616c6c732e005501456163682076617269616e74206f66207468697320656e756d206d61707320746f206120646973706174636861626c652066756e6374696f6e2066726f6d20746865206173736f636961746564206d6f64756c652efd05084c70616c6c65745f636f6e737469747574696f6e1043616c6c04045400010448616d656e645f636f6e737469747574696f6e040144636f6e737469747574696f6e5f7465787430011c5665633c75383e000018e453657473207468652063757272656e7420636f6e737469747574696f6e20686173682e20526571756972657320726f6f74206f726967696e2e2823203c7765696768743e11012d20436f6d706c65786974793a20604f28432960207768657265204320697320746865206c656e677468206f662074686520636f6e737469747574696f6e20746578742e342d2044622072656164733a20307c2d204462207772697465733a20312028636f6e7374616e742076616c7565292c23203c2f7765696768743e0c4c446973706174636861626c652063616c6c732e005501456163682076617269616e74206f66207468697320656e756d206d61707320746f206120646973706174636861626c652066756e6374696f6e2066726f6d20746865206173736f636961746564206d6f64756c652e0106083470616c6c65745f626f756e74791043616c6c04045400013c346372656174655f626f756e7479080118706172616d737501016c426f756e74794372656174696f6e506172616d65746572733c543e0001206d6574616461746130011c5665633c75383e000028490143726561746573206120626f756e74792e204d657461646174612073746f72656420696e20746865207472616e73616374696f6e206c6f67206275742064697363617264656420616674657220746861742e203c7765696768743e002423232057656967687438604f20285729602077686572653aa42d2060576020697320746865205f6d657461646174612073697a6520696e206b696c6f62797465732eb02d20604d6020697320636c6f73656420636f6e7472616374206d656d626572206c697374206c656e6774682e142d2044423a842020202d204f284d2920284f283129206f6e206f70656e20636f6e7472616374292c23203c2f7765696768743e2c66756e645f626f756e74790c011866756e64657279010160426f756e74794163746f723c4d656d62657249643c543e3e000124626f756e74795f696428012c543a3a426f756e74794964000118616d6f756e7418013042616c616e63654f663c543e0001206050726f766964657320626f756e74792066756e64696e672e2823203c7765696768743e00242323207765696768741c604f2028312960142d2064623ad42020202d20604f2831296020646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e407465726d696e6174655f626f756e7479040124626f756e74795f696428012c543a3a426f756e74794964000224c05465726d696e61746573206120626f756e747920696e2066756e64696e672c2066756e64696e6720657870697265642c7c776f726b7375626d697373696f6e2c206a756467696e6720706572696f642e2823203c7765696768743e00242323207765696768741c604f2028312960142d2064623ad42020202d20604f2831296020646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e347377697463685f6f7261636c650801286e65775f6f7261636c6579010160426f756e74794163746f723c4d656d62657249643c543e3e000124626f756e74795f696428012c543a3a426f756e74794964000324904f7261636c652073776974636865732068696d73656c6620746f2061206e6577206f6e652823203c7765696768743e00242323207765696768741c604f2028312960142d2064623ad42020202d20604f2831296020646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e004077697468647261775f66756e64696e6708011866756e64657279010160426f756e74794163746f723c4d656d62657249643c543e3e000124626f756e74795f696428012c543a3a426f756e74794964000420c4576974686472617720626f756e74792066756e64696e672062792061206d656d626572206f72206120636f756e63696c2e2823203c7765696768743e00242323207765696768741c604f2028312960142d2064623ad42020202d20604f2831296020646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e4c616e6e6f756e63655f776f726b5f656e7472791001246d656d6265725f696428012c4d656d62657249643c543e000124626f756e74795f696428012c543a3a426f756e747949640001487374616b696e675f6163636f756e745f6964000130543a3a4163636f756e744964000140776f726b5f6465736372697074696f6e30011c5665633c75383e000528b0416e6e6f756e636520776f726b20656e74727920666f722061207375636365737366756c20626f756e74792e2823203c7765696768743e002423232077656967687448604f202857202b204d29602077686572653ac02d206057602069732074686520776f726b5f6465736372697074696f6e2073697a6520696e206b696c6f62797465732eb02d20604d6020697320636c6f73656420636f6e7472616374206d656d626572206c697374206c656e6774682e142d2064623ad42020202d20604f2831296020646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e2c7375626d69745f776f726b1001246d656d6265725f696428012c4d656d62657249643c543e000124626f756e74795f696428012c543a3a426f756e74794964000120656e7472795f6964280128543a3a456e7472794964000124776f726b5f6461746130011c5665633c75383e000624645375626d697420776f726b20666f72206120626f756e74792e2823203c7765696768743e00242323207765696768741c604f20284e2960a42d20604e602069732074686520776f726b5f646174612073697a6520696e206b696c6f62797465732c142d2064623ad42020202d20604f2831296020646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e48656e645f776f726b696e675f706572696f64040124626f756e74795f696428012c543a3a426f756e7479496400072068656e6420626f756e747920776f726b696e6720706572696f642e2823203c7765696768743e00242323207765696768741c604f2028312960142d2064623ad42020202d20604f2831296020646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e587375626d69745f6f7261636c655f6a7564676d656e740c0124626f756e74795f696428012c543a3a426f756e747949640001206a7564676d656e74850101a04f7261636c654a7564676d656e743c543a3a456e74727949642c2042616c616e63654f663c543e3e000124726174696f6e616c6530011c5665633c75383e00083819015375626d69747320616e206f7261636c65206a7564676d656e7420666f72206120626f756e74792c20736c617368696e672074686520656e74726965732072656a65637465642d01627920616e206172626974726172792070657263656e7461676520616e6420726577617264696e67207468652077696e6e65727320627920616e2061726269747261727920616d6f756e7498286e6f742073757270617373696e672074686520746f74616c2066756e6420616d6f756e74292823203c7765696768743e00242323207765696768744c604f20284a202b204b202b2057202b20522960942d20604a6020697320726174696f6e616c652073697a6520696e206b696c6f62797465732c61012d20604b60206973207468652073756d206f6620616c6c20616374696f6e5f6a757374696669636174696f6e2073697a65732028696e206b696c6f62797465732920696e73696465204f7261636c654a7564676d656e742cac2d20605760206973206e756d626572206f662077696e6e6572206a7564676d656e7420656e74726965732cb42d20605260206973206e756d626572206f662072656a6563746564206a7564676d656e7420656e74726965732c142d2064623a3c2020202d20604f2857202b205229602c23203c2f7765696768743e5877697468647261775f656e7472616e745f7374616b650c01246d656d6265725f696428012c4d656d62657249643c543e000124626f756e74795f696428012c543a3a426f756e74794964000120656e7472795f6964280128543a3a456e7472794964000928a4556e6c6f636b7320746865207374616b652072656c6174656420746f206120776f726b20656e747279a901416674657220746865206f7261636c65206d616b657320746865206a7564676d656e74206f722074686520636f756e63696c207465726d696e617465732074686520626f756e74792062792063616c6c696e67207465726d696e6174655f626f756e7479282e2e2e292c51016561636820776f726b65722077686f736520656e74727920686173206e6f74206265656e206a75646765642c2063616e20756e6c6f636b2074686520746f74616c697479206f66207468656972207374616b652e2823203c7765696768743e00242323207765696768741c604f2028312960142d2064623ad42020202d20604f2831296020646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e5877697468647261775f6f7261636c655f726577617264040124626f756e74795f696428012c543a3a426f756e74794964000a2890576974687261777320746865206f7261636c652072657761726420746f206f7261636c651101496620626f756e7479206973207375636365737366756c6c792c204661696c6564206f722043616e63656c6c6564206f7261636c65206d7573742063616c6c2074686973a065787472696e73696320746f20776974686472617720746865206f7261636c65207265776172642c2823203c7765696768743e00242323207765696768741c604f2028312960142d2064623ad42020202d20604f2831296020646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e48636f6e7472696275746f725f72656d61726b0c012c636f6e7472696275746f7279010160426f756e74794163746f723c4d656d62657249643c543e3e000124626f756e74795f696428012c543a3a426f756e7479496400010c6d736730011c5665633c75383e000b2880426f756e747920436f6e7472696275746f72206d61646520612072656d61726b002823203c7765696768743e00242323207765696768741c604f20284e2960782d20604e60206973206d73672073697a6520696e206b696c6f6279746573142d2064623ad42020202d20604f2831296020646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e346f7261636c655f72656d61726b0c01186f7261636c6579010160426f756e74794163746f723c4d656d62657249643c543e3e000124626f756e74795f696428012c543a3a426f756e7479496400010c6d736730011c5665633c75383e000c286c426f756e7479204f7261636c65206d61646520612072656d61726b002823203c7765696768743e00242323207765696768741c604f20284e2960782d20604e60206973206d73672073697a6520696e206b696c6f6279746573142d2064623ad42020202d20604f2831296020646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e38656e7472616e745f72656d61726b100128656e7472616e745f696428012c4d656d62657249643c543e000124626f756e74795f696428012c543a3a426f756e74794964000120656e7472795f6964280128543a3a456e747279496400010c6d736730011c5665633c75383e000d288c426f756e747920456e7472616e7420576f726b6572206d61646520612072656d61726b002823203c7765696768743e00242323207765696768741c604f20284e2960782d20604e60206973206d73672073697a6520696e206b696c6f6279746573142d2064623ad42020202d20604f2831296020646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e3863726561746f725f72656d61726b0c011c63726561746f7279010160426f756e74794163746f723c4d656d62657249643c543e3e000124626f756e74795f696428012c543a3a426f756e7479496400010c6d736730011c5665633c75383e000e286c426f756e7479204f7261636c65206d61646520612072656d61726b002823203c7765696768743e00242323207765696768741c604f20284e2960782d20604e60206973206d73672073697a6520696e206b696c6f6279746573142d2064623ad42020202d20604f2831296020646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e0c4c446973706174636861626c652063616c6c732e005501456163682076617269616e74206f66207468697320656e756d206d61707320746f206120646973706174636861626c652066756e6374696f6e2066726f6d20746865206173736f636961746564206d6f64756c652e0506086070616c6c65745f6a6f7973747265616d5f7574696c6974791043616c6c0404540001105c657865637574655f7369676e616c5f70726f706f73616c0401187369676e616c30011c5665633c75383e00002871015369676e616c2070726f706f73616c2065787472696e7369632e2053686f756c6420626520757365642061732063616c6c61626c65206f626a65637420746f207061737320746f207468652060656e67696e6560206d6f64756c652e00203c7765696768743e002423232057656967687438604f20285329602077686572653ab02d20605360206973207468652073697a65206f6620746865207369676e616c20696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e80657865637574655f72756e74696d655f757067726164655f70726f706f73616c0401107761736d30011c5665633c75383e0001288c52756e74696d6520757067726164652070726f706f73616c2065787472696e7369632e050153686f756c6420626520757365642061732063616c6c61626c65206f626a65637420746f207061737320746f207468652060656e67696e6560206d6f64756c652e203c7765696768743e002423232057656967687438604f20284329602077686572653a742d2060436020697320746865206c656e677468206f6620607761736d603d01486f77657665722c207765207472656174207468697320617320612066756c6c20626c6f636b20617320606672616d655f73797374656d3a3a4d6f64756c653a3a7365745f636f64656020646f65732c23203c2f7765696768743ebd01235b776569676874203d2028543a3a426c6f636b576569676874733a3a67657428292e676574284469737061746368436c6173733a3a4f7065726174696f6e616c292e626173655f65787472696e7369632c204469737061746368436c6173733a3a4f7065726174696f6e616c295d6c7570646174655f776f726b696e675f67726f75705f6275646765740c0134776f726b696e675f67726f757099010130576f726b696e6747726f7570000118616d6f756e7418013042616c616e63654f663c543e00013062616c616e63655f6b696e649d01012c42616c616e63654b696e640002206c55706461746520776f726b696e672067726f757020627564676574203c7765696768743e0024232320576569676874c4604f202831296020446f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d6574657273142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e4c6275726e5f6163636f756e745f746f6b656e73040118616d6f756e7418013042616c616e63654f663c543e000320784275726e7320746f6b656e20666f722063616c6c6572206163636f756e74203c7765696768743e0024232320576569676874c4604f202831296020446f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d6574657273142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e0c4c446973706174636861626c652063616c6c732e005501456163682076617269616e74206f66207468697320656e756d206d61707320746f206120646973706174636861626c652066756e6374696f6e2066726f6d20746865206173736f636961746564206d6f64756c652e0906083870616c6c65745f636f6e74656e741043616c6c04045400010101506372656174655f63757261746f725f67726f757008012469735f616374697665980110626f6f6c0001507065726d697373696f6e735f62795f6c6576656c5502017c4d6f6465726174696f6e5065726d697373696f6e7342794c6576656c3c543e000028a0416464206e65772063757261746f722067726f757020746f2072756e74696d652073746f7261676500203c7765696768743e002423232057656967687438604f20284129602077686572653af02d2060416020697320746865206e756d626572206f6620656e747269657320696e20607065726d697373696f6e735f62795f6c6576656c60206d6170142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e807570646174655f63757261746f725f67726f75705f7065726d697373696f6e7308014063757261746f725f67726f75705f6964280144543a3a43757261746f7247726f757049640001507065726d697373696f6e735f62795f6c6576656c5502017c4d6f6465726174696f6e5065726d697373696f6e7342794c6576656c3c543e000128ac557064617465206578697374696e672063757261746f722067726f75702773207065726d697373696f6e7300203c7765696768743e002423232057656967687438604f20284129602077686572653af02d2060416020697320746865206e756d626572206f6620656e747269657320696e20607065726d697373696f6e735f62795f6c6576656c60206d6170142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e607365745f63757261746f725f67726f75705f73746174757308014063757261746f725f67726f75705f6964280144543a3a43757261746f7247726f7570496400012469735f616374697665980110626f6f6c0002241d01536574206069735f616374697665602073746174757320666f722063757261746f722067726f757020756e64657220676976656e206063757261746f725f67726f75705f69646000203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e506164645f63757261746f725f746f5f67726f75700c014063757261746f725f67726f75705f6964280144543a3a43757261746f7247726f7570496400012863757261746f725f6964280130543a3a43757261746f72496400012c7065726d697373696f6e73bd01015c4368616e6e656c4167656e745065726d697373696f6e73000324ec4164642063757261746f7220746f2063757261746f722067726f757020756e64657220676976656e206063757261746f725f67726f75705f69646000203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e6472656d6f76655f63757261746f725f66726f6d5f67726f757008014063757261746f725f67726f75705f6964280144543a3a43757261746f7247726f7570496400012863757261746f725f6964280130543a3a43757261746f724964000424a452656d6f76652063757261746f722066726f6d206120676976656e2063757261746f722067726f757000203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e386372656174655f6368616e6e656c0801346368616e6e656c5f6f776e6572e50101b04368616e6e656c4f776e65723c543a3a4d656d62657249642c20543a3a43757261746f7247726f757049643e000118706172616d73150201704368616e6e656c4372656174696f6e506172616d65746572733c543e000530203c7765696768743e002423232057656967687478604f202841202b2042202b2043202b2044202b204529602077686572653ae02d2060416020697320746865206e756d626572206f6620656e747269657320696e2060706172616d732e636f6c6c61626f7261746f727360e02d2060426020697320746865206e756d626572206f66206974656d7320696e2060706172616d732e73746f726167655f6275636b65747360f42d2060436020697320746865206e756d626572206f66206974656d7320696e2060706172616d732e646973747269627574696f6e5f6275636b6574736011012d2060446020697320746865206e756d626572206f66206974656d7320696e2060706172616d732e6173736574732e6f626a6563745f6372656174696f6e5f6c69737460c02d20604560206973207468652073697a65206f66202060706172616d732e6d6574616020696e206b696c6f6279746573142d2044423ae02020202d20604f2841202b2042202b2043202b20442960202d2066726f6d20746865207468652067656e65726174656420776569676874732c23203c2f7765696768743e387570646174655f6368616e6e656c0c01146163746f72a50101e8436f6e74656e744163746f723c543a3a43757261746f7247726f757049642c20543a3a43757261746f7249642c20543a3a4d656d62657249643e0001286368616e6e656c5f6964280130543a3a4368616e6e656c4964000118706172616d73410201684368616e6e656c557064617465506172616d65746572733c543e000630203c7765696768743e002423232057656967687478604f202841202b2042202b2043202b2044202b204529602077686572653ae02d2060416020697320746865206e756d626572206f6620656e747269657320696e2060706172616d732e636f6c6c61626f7261746f72736071012d2060426020697320746865206e756d626572206f66206974656d7320696e2060706172616d732e6173736574735f746f5f75706c6f61642e6f626a6563745f6372656174696f6e5f6c69737460202869662070726f766964656429e42d2060436020697320746865206e756d626572206f66206974656d7320696e2060706172616d732e6173736574735f746f5f72656d6f766560cc2d20604460206973207468652073697a65206f662060706172616d732e6e65775f6d6574616020696e206b696c6f6279746573ec2d206045602069732060706172616d732e73746f726167655f6275636b6574735f6e756d5f7769746e65737360202869662070726f766964656429142d2044423ae02020202d20604f2841202b2042202b2043202b20452960202d2066726f6d20746865207468652067656e65726174656420776569676874732c23203c2f7765696768743e787570646174655f6368616e6e656c5f70726976696c6567655f6c6576656c0801286368616e6e656c5f6964280130543a3a4368616e6e656c496400014c6e65775f70726976696c6567655f6c6576656c080160543a3a4368616e6e656c50726976696c6567654c6576656c000724150145787472696e73696320666f72207570646174696e67206368616e6e656c2070726976696c656765206c6576656c20287265717569726573206c656164206163636573732900203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743ea07365745f6368616e6e656c5f7061757365645f66656174757265735f61735f6d6f64657261746f721001146163746f72a50101e8436f6e74656e744163746f723c543a3a43757261746f7247726f757049642c20543a3a43757261746f7249642c20543a3a4d656d62657249643e0001286368616e6e656c5f6964280130543a3a4368616e6e656c496400014c6e65775f7061757365645f6665617475726573d901018042547265655365743c5061757361626c654368616e6e656c466561747572653e000124726174696f6e616c6530011c5665633c75383e000828c845787472696e73696320666f722070617573696e672f72652d656e61626c696e67206368616e6e656c20666561747572657300203c7765696768743e002423232057656967687438604f20284129602077686572653ab42d20604160206973207468652073697a65206f662060726174696f6e616c656020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e3864656c6574655f6368616e6e656c1001146163746f72a50101e8436f6e74656e744163746f723c543a3a43757261746f7247726f757049642c20543a3a43757261746f7249642c20543a3a4d656d62657249643e0001286368616e6e656c5f6964280130543a3a4368616e6e656c496400014c6368616e6e656c5f6261675f7769746e6573730d0601444368616e6e656c4261675769746e6573730001546e756d5f6f626a656374735f746f5f64656c65746528010c753634000928203c7765696768743e002423232057656967687458604f202841202b2042202b204329602077686572653a802d2060416020697320606e756d5f6f626a656374735f746f5f64656c65746560c82d2060426020697320606368616e6e656c5f6261675f7769746e6573732e73746f726167655f6275636b6574735f6e756d60dc2d2060436020697320606368616e6e656c5f6261675f7769746e6573732e646973747269627574696f6e5f6275636b6574735f6e756d60142d2044423ad02020202d20604f2841202b2042202b20432960202d2066726f6d20746865207468652067656e65726174656420776569676874732c23203c2f7765696768743e8864656c6574655f6368616e6e656c5f6173736574735f61735f6d6f64657261746f721401146163746f72a50101e8436f6e74656e744163746f723c543a3a43757261746f7247726f757049642c20543a3a43757261746f7249642c20543a3a4d656d62657249643e0001286368616e6e656c5f6964280130543a3a4368616e6e656c49640001406173736574735f746f5f72656d6f76656901016442547265655365743c446174614f626a65637449643c543e3e00016c73746f726167655f6275636b6574735f6e756d5f7769746e65737310010c753332000124726174696f6e616c6530011c5665633c75383e000a28203c7765696768743e002423232057656967687458604f202841202b2042202b204329602077686572653aa42d2060416020697320746865206c656e677468206f6620606173736574735f746f5f72656d6f766560cc2d20604260206973207468652076616c7565206f66206073746f726167655f6275636b6574735f6e756d5f7769746e65737360b42d20604360206973207468652073697a65206f662060726174696f6e616c656020696e206b696c6f6279746573142d2044423ac02020202d20604f2841202b20422960202d2066726f6d20746865207468652067656e65726174656420776569676874732c23203c2f7765696768743e8c7365745f6368616e6e656c5f7669736962696c6974795f61735f6d6f64657261746f721001146163746f72a50101e8436f6e74656e744163746f723c543a3a43757261746f7247726f757049642c20543a3a43757261746f7249642c20543a3a4d656d62657249643e0001286368616e6e656c5f6964280130543a3a4368616e6e656c496400012469735f68696464656e980110626f6f6c000124726174696f6e616c6530011c5665633c75383e000b28350145787472696e73696320666f722073657474696e67206368616e6e656c207669736962696c69747920737461747573202868696464656e2f76697369626c6529206279206d6f64657261746f7200203c7765696768743e002423232057656967687438604f20284129602077686572653ab42d20604160206973207468652073697a65206f662060726174696f6e616c656020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e306372656174655f766964656f0c01146163746f72a50101e8436f6e74656e744163746f723c543a3a43757261746f7247726f757049642c20543a3a43757261746f7249642c20543a3a4d656d62657249643e0001286368616e6e656c5f6964280130543a3a4368616e6e656c4964000118706172616d7349020168566964656f4372656174696f6e506172616d65746572733c543e000c2c203c7765696768743e002423232057656967687468604f202841202b2042202b2043202b204429602077686572653a11012d2060416020697320746865206e756d626572206f66206974656d7320696e2060706172616d732e6173736574732e6f626a6563745f6372656174696f6e5f6c69737460b42d206042602069732060706172616d732e73746f726167655f6275636b6574735f6e756d5f7769746e6573736035012d2060436020697320746865206c656e677468206f66206f70656e2061756374696f6e202f20656e676c6973682061756374696f6e2077686974656c697374202869662070726f766964656429f42d20604460206973207468652073697a65206f662060706172616d732e6d6574616020696e206b696c6f6279746573202869662070726f766964656429142d2044423ad02020202d20604f2841202b2042202b20432960202d2066726f6d20746865207468652067656e65726174656420776569676874732c23203c2f7765696768743e307570646174655f766964656f0c01146163746f72a50101e8436f6e74656e744163746f723c543a3a43757261746f7247726f757049642c20543a3a43757261746f7249642c20543a3a4d656d62657249643e000120766964656f5f6964280128543a3a566964656f4964000118706172616d7351020160566964656f557064617465506172616d65746572733c543e000d30203c7765696768743e002423232057656967687478604f202841202b2042202b2043202b2044202b204529602077686572653a25012d2060416020697320706172616d732e6173736574735f746f5f75706c6f61642e6f626a6563745f6372656174696f6e5f6c6973742e6c656e2829202869662070726f766964656429982d2060426020697320706172616d732e6173736574735f746f5f72656d6f76652e6c656e2829ec2d206043602069732060706172616d732e73746f726167655f6275636b6574735f6e756d5f7769746e65737360202869662070726f76696465642935012d2060446020697320746865206c656e677468206f66206f70656e2061756374696f6e202f20656e676c6973682061756374696f6e2077686974656c697374202869662070726f76696465642905012d20604560206973207468652073697a65206f662060706172616d732e6e65775f6d6574616020696e206b696c6f6279746573202869662070726f766964656429142d2044423ae02020202d20604f2841202b2042202b2043202b20442960202d2066726f6d20746865207468652067656e65726174656420776569676874732c23203c2f7765696768743e3064656c6574655f766964656f1001146163746f72a50101e8436f6e74656e744163746f723c543a3a43757261746f7247726f757049642c20543a3a43757261746f7249642c20543a3a4d656d62657249643e000120766964656f5f6964280128543a3a566964656f49640001546e756d5f6f626a656374735f746f5f64656c65746528010c75363400016c73746f726167655f6275636b6574735f6e756d5f7769746e6573730102012c4f7074696f6e3c7533323e000e24203c7765696768743e002423232057656967687448604f202841202b204229602077686572653a782d20604160206973206e756d5f6f626a656374735f746f5f64656c657465ec2d206042602069732060706172616d732e73746f726167655f6275636b6574735f6e756d5f7769746e65737360202869662070726f766964656429142d2044423ac02020202d20604f2841202b20422960202d2066726f6d20746865207468652067656e65726174656420776569676874732c23203c2f7765696768743e8064656c6574655f766964656f5f6173736574735f61735f6d6f64657261746f721401146163746f72a50101e8436f6e74656e744163746f723c543a3a43757261746f7247726f757049642c20543a3a43757261746f7249642c20543a3a4d656d62657249643e000120766964656f5f6964280128543a3a566964656f496400016c73746f726167655f6275636b6574735f6e756d5f7769746e65737310010c7533320001406173736574735f746f5f72656d6f76656901016442547265655365743c446174614f626a65637449643c543e3e000124726174696f6e616c6530011c5665633c75383e000f28203c7765696768743e002423232057656967687458604f202841202b2042202b204329602077686572653aa42d2060416020697320746865206c656e677468206f6620606173736574735f746f5f72656d6f766560cc2d20604260206973207468652076616c7565206f66206073746f726167655f6275636b6574735f6e756d5f7769746e65737360b42d20604360206973207468652073697a65206f662060726174696f6e616c656020696e206b696c6f6279746573142d2044423ac02020202d20604f2841202b20422960202d2066726f6d20746865207468652067656e65726174656420776569676874732c23203c2f7765696768743e847365745f766964656f5f7669736962696c6974795f61735f6d6f64657261746f721001146163746f72a50101e8436f6e74656e744163746f723c543a3a43757261746f7247726f757049642c20543a3a43757261746f7249642c20543a3a4d656d62657249643e000120766964656f5f6964280128543a3a566964656f496400012469735f68696464656e980110626f6f6c000124726174696f6e616c6530011c5665633c75383e0010282d0145787472696e73696320666f7220766964656f207669736962696c69747920737461747573202868696464656e2f76697369626c65292073657474696e67206279206d6f64657261746f7200203c7765696768743e002423232057656967687438604f20284129602077686572653ab42d20604160206973207468652073697a65206f662060726174696f6e616c656020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e587570646174655f6368616e6e656c5f7061796f757473080118706172616d73710201845570646174654368616e6e656c5061796f757473506172616d65746572733c543e00014075706c6f616465725f6163636f756e74000130543a3a4163636f756e74496400112458557064617465206368616e6e656c207061796f75747300203c7765696768743e002423232057656967687438604f20283129602077686572653a142d2044423a182d204f2831292c23203c2f7765696768743e50636c61696d5f6368616e6e656c5f7265776172640c01146163746f72a50101e8436f6e74656e744163746f723c543a3a43757261746f7247726f757049642c20543a3a43757261746f7249642c20543a3a4d656d62657249643e00011470726f6f66110601505665633c50726f6f66456c656d656e743c543e3e0001106974656d1d06013850756c6c5061796d656e743c543e001228a0436c61696d2072657761726420696e204a4f592066726f6d206368616e6e656c206163636f756e7400203c7765696768743e002423232057656967687438604f20284829602077686572653ac82d2060486020697320746865206c656e676874206f66207468652070726f7669646564206d65726b6c65206070726f6f6660142d2044423a242020202d204f2831292c23203c2f7765696768743e7477697468647261775f66726f6d5f6368616e6e656c5f62616c616e63650c01146163746f72a50101e8436f6e74656e744163746f723c543a3a43757261746f7247726f757049642c20543a3a43757261746f7249642c20543a3a4d656d62657249643e0001286368616e6e656c5f6964280130543a3a4368616e6e656c4964000118616d6f756e7418013042616c616e63654f663c543e001324845769746864726177204a4f592066726f6d206368616e6e656c206163636f756e7400203c7765696768743e00242323205765696768741c604f2028312960142d2044423a242020202d204f2831292c23203c2f7765696768743e7c7570646174655f6368616e6e656c5f73746174655f626c6f61745f626f6e640401706e65775f6368616e6e656c5f73746174655f626c6f61745f626f6e6418013042616c616e63654f663c543e0014289c55706461746573206368616e6e656c20737461746520626c6f617420626f6e642076616c75652e7c4f6e6c79206c6561642063616e2075706c6f616420746869732076616c756500203c7765696768743e00242323205765696768741c604f2028312960142d2044423a242020202d204f2831292c23203c2f7765696768743e747570646174655f766964656f5f73746174655f626c6f61745f626f6e640401686e65775f766964656f5f73746174655f626c6f61745f626f6e6418013042616c616e63654f663c543e001528945570646174657320766964656f20737461746520626c6f617420626f6e642076616c75652e7c4f6e6c79206c6561642063616e2075706c6f616420746869732076616c756500203c7765696768743e00242323205765696768741c604f2028312960142d2044423a242020202d204f2831292c23203c2f7765696768743e2469737375655f6e66740c01146163746f72a50101e8436f6e74656e744163746f723c543a3a43757261746f7247726f757049642c20543a3a43757261746f7249642c20543a3a4d656d62657249643e000120766964656f5f6964280128543a3a566964656f4964000118706172616d73090201604e667449737375616e6365506172616d65746572733c543e001630244973737565204e465400203c7765696768743e00242323205765696768742c604f202857202b20422960142d2044423a242020202d204f2857291877686572653a19012020202d2057203a206d656d6265722077686974656c697374206c656e67746820696e2063617365206e667420696e697469616c207374617475732069732061756374696f6ec02020202d2042203a2073697a65206f66206d6574616461746120706172616d6574657220696e206b696c6f62797465732c23203c2f7765696768743e2c64657374726f795f6e66740801146163746f72a50101e8436f6e74656e744163746f723c543a3a43757261746f7247726f757049642c20543a3a43757261746f7249642c20543a3a4d656d62657249643e000120766964656f5f6964280128543a3a566964656f49640017242c44657374726f79204e465400203c7765696768743e00242323205765696768741c604f2028312960142d2044423a242020202d204f2831292c23203c2f7765696768743e4873746172745f6f70656e5f61756374696f6e0c01206f776e65725f6964a50101e8436f6e74656e744163746f723c543a3a43757261746f7247726f757049642c20543a3a43757261746f7249642c20543a3a4d656d62657249643e000120766964656f5f6964280128543a3a566964656f496400013861756374696f6e5f706172616d73050201504f70656e41756374696f6e506172616d733c543e00182470537461727420766964656f206e6674206f70656e2061756374696f6e203c7765696768743e002423232057656967687438604f20285729602077686572653a742d2057203a206d656d6265722077686974656c697374206c656e677468142d2044423a242020202d204f2857292c23203c2f7765696768743e5473746172745f656e676c6973685f61756374696f6e0c01206f776e65725f6964a50101e8436f6e74656e744163746f723c543a3a43757261746f7247726f757049642c20543a3a43757261746f7249642c20543a3a4d656d62657249643e000120766964656f5f6964280128543a3a566964656f496400013861756374696f6e5f706172616d73fd01015c456e676c69736841756374696f6e506172616d733c543e0019247c537461727420766964656f206e667420656e676c6973682061756374696f6e203c7765696768743e002423232057656967687438604f20285729602077686572653a882d2057203a2077686974656c697374206d656d626572206c697374206c656e677468142d2044423a242020202d204f2857292c23203c2f7765696768743e5863616e63656c5f656e676c6973685f61756374696f6e0801206f776e65725f6964a50101e8436f6e74656e744163746f723c543a3a43757261746f7247726f757049642c20543a3a43757261746f7249642c20543a3a4d656d62657249643e000120766964656f5f6964280128543a3a566964656f4964001a208043616e63656c20766964656f206e667420656e676c6973682061756374696f6e203c7765696768743e00242323205765696768741c604f2028312960142d2044423a242020202d204f2831292c23203c2f7765696768743e4c63616e63656c5f6f70656e5f61756374696f6e0801206f776e65725f6964a50101e8436f6e74656e744163746f723c543a3a43757261746f7247726f757049642c20543a3a43757261746f7249642c20543a3a4d656d62657249643e000120766964656f5f6964280128543a3a566964656f4964001b207443616e63656c20766964656f206e6674206f70656e2061756374696f6e203c7765696768743e00242323205765696768741c604f2028312960142d2044423a242020202d204f2831292c23203c2f7765696768743e3063616e63656c5f6f666665720801206f776e65725f6964a50101e8436f6e74656e744163746f723c543a3a43757261746f7247726f757049642c20543a3a43757261746f7249642c20543a3a4d656d62657249643e000120766964656f5f6964280128543a3a566964656f4964001c244043616e63656c204e6674206f6666657200203c7765696768743e00242323205765696768741c604f2028312960142d2044423a242020202d204f2831292c23203c2f7765696768743e3863616e63656c5f6275795f6e6f770801206f776e65725f6964a50101e8436f6e74656e744163746f723c543a3a43757261746f7247726f757049642c20543a3a43757261746f7249642c20543a3a4d656d62657249643e000120766964656f5f6964280128543a3a566964656f4964001d245443616e63656c204e66742073656c6c206f7264657200203c7765696768743e00242323205765696768741c604f2028312960142d2044423a242020202d204f283129243c2f7765696768743e507570646174655f6275795f6e6f775f70726963650c01206f776e65725f6964a50101e8436f6e74656e744163746f723c543a3a43757261746f7247726f757049642c20543a3a43757261746f7249642c20543a3a4d656d62657249643e000120766964656f5f6964280128543a3a566964656f49640001246e65775f707269636518013042616c616e63654f663c543e001e246055706461746520427579206e6f77206e667420707269636500203c7765696768743e00242323205765696768741c604f2028312960142d2044423a242020202d204f2831292c23203c2f7765696768743e546d616b655f6f70656e5f61756374696f6e5f6269640c01387061727469636970616e745f696428012c543a3a4d656d6265724964000120766964656f5f6964280128543a3a566964656f49640001286269645f616d6f756e7418013042616c616e63654f663c543e001f20404d616b652061756374696f6e20626964203c7765696768743e00242323205765696768741c604f2028312960142d2044423a242020202d204f2831292c23203c2f7765696768743e606d616b655f656e676c6973685f61756374696f6e5f6269640c01387061727469636970616e745f696428012c543a3a4d656d6265724964000120766964656f5f6964280128543a3a566964656f49640001286269645f616d6f756e7418013042616c616e63654f663c543e002020604d616b6520656e676c6973682061756374696f6e20626964203c7765696768743e00242323205765696768741c604f2028312960142d2044423a242020202d204f2831292c23203c2f7765696768743e5c63616e63656c5f6f70656e5f61756374696f6e5f6269640801387061727469636970616e745f696428012c543a3a4d656d6265724964000120766964656f5f6964280128543a3a566964656f49640021205c43616e63656c206f70656e2061756374696f6e20626964203c7765696768743e00242323205765696768741c604f2028312960142d2044423a242020202d204f2831292c23203c2f7765696768743e58736574746c655f656e676c6973685f61756374696f6e040120766964656f5f6964280128543a3a566964656f496400222464436c61696d20776f6e20656e676c6973682061756374696f6e5c43616e2062652063616c6c656420627920616e796f6e65203c7765696768743e00242323205765696768741c604f2028312960142d2044423a242020202d204f2831292c23203c2f7765696768743e607069636b5f6f70656e5f61756374696f6e5f77696e6e65721001206f776e65725f6964a50101e8436f6e74656e744163746f723c543a3a43757261746f7247726f757049642c20543a3a43757261746f7249642c20543a3a4d656d62657249643e000120766964656f5f6964280128543a3a566964656f496400012477696e6e65725f696428012c543a3a4d656d6265724964000118636f6d6d697418013042616c616e63654f663c543e0023245c416363657074206f70656e2061756374696f6e206269648c53686f756c64206f6e6c792062652063616c6c65642062792061756374696f6e656572203c7765696768743e00242323205765696768741c604f2028312960142d2044423a242020202d204f2831292c23203c2f7765696768743e246f666665725f6e6674100120766964656f5f6964280128543a3a566964656f49640001206f776e65725f6964a50101e8436f6e74656e744163746f723c543a3a43757261746f7247726f757049642c20543a3a43757261746f7249642c20543a3a4d656d62657249643e000108746f28012c543a3a4d656d62657249640001147072696365450101504f7074696f6e3c42616c616e63654f663c543e3e002424244f66666572204e667400203c7765696768743e00242323205765696768741c604f2028312960142d2044423a242020202d204f2831292c23203c2f7765696768743e38736c696e675f6e66745f6261636b080120766964656f5f6964280128543a3a566964656f49640001206f776e65725f6964a50101e8436f6e74656e744163746f723c543a3a43757261746f7247726f757049642c20543a3a43757261746f7249642c20543a3a4d656d62657249643e002524c452657475726e204e6674206261636b20746f20746865206f726967696e616c20617274697374206174206e6f20636f737400203c7765696768743e00242323205765696768741c604f2028312960142d2044423a242020202d204f2831292c23203c2f7765696768743e546163636570745f696e636f6d696e675f6f66666572080120766964656f5f6964280128543a3a566964656f49640001347769746e6573735f7072696365450101a04f7074696f6e3c3c542061732062616c616e6365733a3a436f6e6669673e3a3a42616c616e63653e0026246441636365707420696e636f6d696e67204e6674206f6666657200203c7765696768743e00242323205765696768741c604f2028312960142d2044423a242020202d204f2831292c23203c2f7765696768743e2073656c6c5f6e66740c0120766964656f5f6964280128543a3a566964656f49640001206f776e65725f6964a50101e8436f6e74656e744163746f723c543a3a43757261746f7247726f757049642c20543a3a43757261746f7249642c20543a3a4d656d62657249643e000114707269636518013042616c616e63654f663c543e0027202053656c6c204e6674203c7765696768743e00242323205765696768741c604f2028312960142d2044423a242020202d204f2831292c23203c2f7765696768743e1c6275795f6e66740c0120766964656f5f6964280128543a3a566964656f49640001387061727469636970616e745f696428012c543a3a4d656d62657249640001347769746e6573735f707269636518013042616c616e63654f663c543e0028241c427579204e667400203c7765696768743e00242323205765696768741c604f2028312960142d2044423a242020202d204f2831292c23203c2f7765696768743e44746f67676c655f6e66745f6c696d69747304011c656e61626c6564980110626f6f6c002920dc4f6e6c7920436f756e63696c2063616e20746f67676c65206e66742069737375616e6365206c696d69747320636f6e73747261696e7473203c7765696768743e00242323205765696768741c604f2028312960142d2044423a242020202d204f2831292c23203c2f7765696768743e506368616e6e656c5f6f776e65725f72656d61726b0801286368616e6e656c5f6964280130543a3a4368616e6e656c496400010c6d736730011c5665633c75383e002a28504368616e6e656c206f776e65722072656d61726b203c7765696768743e00242323205765696768741c604f2028422960142d2044423a242020202d204f2831291877686572653a8c2d204220697320746865206b696c6f62797465206c656e676874206f6620606d7367602c23203c2f7765696768743e506368616e6e656c5f6167656e745f72656d61726b0c01146163746f72a50101e8436f6e74656e744163746f723c543a3a43757261746f7247726f757049642c20543a3a43757261746f7249642c20543a3a4d656d62657249643e0001286368616e6e656c5f6964280130543a3a4368616e6e656c496400010c6d736730011c5665633c75383e002b286c4368616e6e656c20636f6c6c61626f7261746f722072656d61726b203c7765696768743e00242323205765696768741c604f2028422960142d2044423a242020202d204f2831291877686572653a8420202d2042206973207468652062797465206c656e676874206f6620606d7367602c23203c2f7765696768743e406e66745f6f776e65725f72656d61726b0c01146163746f72a50101e8436f6e74656e744163746f723c543a3a43757261746f7247726f757049642c20543a3a43757261746f7249642c20543a3a4d656d62657249643e000120766964656f5f6964280128543a3a566964656f496400010c6d736730011c5665633c75383e002c28404e4654206f776e65722072656d61726b203c7765696768743e00242323205765696768741c604f2028422960142d2044423a2020202d204f2831291877686572653a8420202d2042206973207468652062797465206c656e676874206f6620606d7367602c23203c2f7765696768743e6c696e697469616c697a655f6368616e6e656c5f7472616e736665720c01286368616e6e656c5f6964280130543a3a4368616e6e656c49640001146163746f72a50101e8436f6e74656e744163746f723c543a3a43757261746f7247726f757049642c20543a3a43757261746f7249642c20543a3a4d656d62657249643e00013c7472616e736665725f706172616d732106016c496e69745472616e73666572506172616d65746572734f663c543e002d28dc53746172742061206368616e6e656c207472616e736665722077697468207370656369666965642063686172616374657269737469637300203c7765696768743e002423232057656967687438604f20284129602077686572653a25012d2060416020697320746865206e756d626572206f6620656e747269657320696e20607472616e736665725f706172616d732e6e65775f636f6c6c61626f7261746f727360206d6170142d2044423aa82020202d204f284129202d2066726f6d20746865207468652067656e65726174656420776569676874732c23203c2f7765696768743e5c63616e63656c5f6368616e6e656c5f7472616e736665720801286368616e6e656c5f6964280130543a3a4368616e6e656c49640001146163746f72a50101e8436f6e74656e744163746f723c543a3a43757261746f7247726f757049642c20543a3a43757261746f7249642c20543a3a4d656d62657249643e002e245c63616e63656c206368616e6e656c207472616e7366657200203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e5c6163636570745f6368616e6e656c5f7472616e736665720801286368616e6e656c5f6964280130543a3a4368616e6e656c4964000144636f6d6d69746d656e745f706172616d736d0201785472616e73666572436f6d6d69746d656e745769746e6573734f663c543e002f2c6441636365707473206368616e6e656c207472616e736665722e310160636f6d6d69746d656e745f706172616d736020697320726571756972656420746f2070726576656e74206368616e67696e6720746865207472616e7366657220636f6e646974696f6e732e00203c7765696768743e002423232057656967687438604f20284129602077686572653a2d012d2060416020697320746865206e756d626572206f6620656e747269657320696e2060636f6d6d69746d656e745f706172616d732e6e65775f636f6c6c61626f7261746f727360206d6170142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e5c7570646174655f676c6f62616c5f6e66745f6c696d69740801406e66745f6c696d69745f706572696f64890201384e66744c696d6974506572696f640001146c696d697428010c753634003020605570646174657320676c6f62616c204e4654206c696d6974203c7765696768743e00242323205765696768741c604f2028312960142d2044423a242020202d204f2831292c23203c2f7765696768743e607570646174655f6368616e6e656c5f6e66745f6c696d69741001146163746f72a50101e8436f6e74656e744163746f723c543a3a43757261746f7247726f757049642c20543a3a43757261746f7249642c20543a3a4d656d62657249643e0001406e66745f6c696d69745f706572696f64890201384e66744c696d6974506572696f640001286368616e6e656c5f6964280130543a3a4368616e6e656c49640001146c696d697428010c7536340031207055706461746573206368616e6e656c2773204e4654206c696d69742e203c7765696768743e00242323205765696768741c604f2028312960142d2044423a242020202d204f2831292c23203c2f7765696768743e4c69737375655f63726561746f725f746f6b656e0c01146163746f72a50101e8436f6e74656e744163746f723c543a3a43757261746f7247726f757049642c20543a3a43757261746f7249642c20543a3a4d656d62657249643e0001286368616e6e656c5f6964280130543a3a4368616e6e656c4964000118706172616d73c9020170546f6b656e49737375616e6365506172616d65746572734f663c543e0032284c49737375652063726561746f7220746f6b656e00203c7765696768743e002423232057656967687438604f20284129602077686572653a05012d2060416020697320746865206e756d626572206f6620656e747269657320696e2060706172616d732e696e697469616c5f616c6c6f636174696f6e60206d6170142d2044423ab02020202d20604f28412960202d2066726f6d20746865207468652067656e65726174656420776569676874732c23203c2f7765696768743e5c696e69745f63726561746f725f746f6b656e5f73616c650c01146163746f72a50101e8436f6e74656e744163746f723c543a3a43757261746f7247726f757049642c20543a3a43757261746f7249642c20543a3a4d656d62657249643e0001286368616e6e656c5f6964280130543a3a4368616e6e656c4964000118706172616d7325060150546f6b656e53616c65506172616d734f663c543e00332874496e697469616c697a652063726561746f7220746f6b656e2073616c6500203c7765696768743e002423232057656967687438604f20284129602077686572653a29012d20604160206973207468652073697a65206f662060706172616d732e6d657461646174616020696e206b696c6f627974657320286f722030206966206e6f742070726f766964656429142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e887570646174655f7570636f6d696e675f63726561746f725f746f6b656e5f73616c651001146163746f72a50101e8436f6e74656e744163746f723c543a3a43757261746f7247726f757049642c20543a3a43757261746f7249642c20543a3a4d656d62657249643e0001286368616e6e656c5f6964280130543a3a4368616e6e656c496400013c6e65775f73746172745f626c6f636b010201584f7074696f6e3c543a3a426c6f636b4e756d6265723e0001306e65775f6475726174696f6e010201584f7074696f6e3c543a3a426c6f636b4e756d6265723e00342488557064617465207570636f6d696e672063726561746f7220746f6b656e2073616c6500203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e7463726561746f725f746f6b656e5f6973737565725f7472616e736665721001146163746f72a50101e8436f6e74656e744163746f723c543a3a43757261746f7247726f757049642c20543a3a43757261746f7249642c20543a3a4d656d62657249643e0001286368616e6e656c5f6964280130543a3a4368616e6e656c496400011c6f7574707574732906017c5472616e736665725769746856657374696e674f7574707574734f663c543e0001206d6574616461746130011c5665633c75383e00352cc8506572666f726d207472616e73666572206f6620746f6b656e732061732063726561746f7220746f6b656e2069737375657200203c7765696768743e002423232057656967687448604f202841202b204229602077686572653aac2d2060416020697320746865206e756d626572206f6620656e747269657320696e20606f75747075747360c02d20604260206973207468652073697a65206f662074686520606d657461646174616020696e206b696c6f6279746573142d2044423ab02020202d20604f28412960202d2066726f6d20746865207468652067656e65726174656420776569676874732c23203c2f7765696768743e846d616b655f63726561746f725f746f6b656e5f7065726d697373696f6e6c6573730801146163746f72a50101e8436f6e74656e744163746f723c543a3a43757261746f7247726f757049642c20543a3a43757261746f7249642c20543a3a4d656d62657249643e0001286368616e6e656c5f6964280130543a3a4368616e6e656c4964003624ac4d616b65206368616e6e656c27732063726561746f7220746f6b656e207065726d697373696f6e6c65737300203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e987265647563655f63726561746f725f746f6b656e5f706174726f6e6167655f726174655f746f0c01146163746f72a50101e8436f6e74656e744163746f723c543a3a43757261746f7247726f757049642c20543a3a43757261746f7249642c20543a3a4d656d62657249643e0001286368616e6e656c5f6964280130543a3a4368616e6e656c496400012c7461726765745f72617465f9020128596561726c7952617465003724f0526564756365206368616e6e656c27732063726561746f7220746f6b656e20706174726f6e616765207261746520746f20676976656e2076616c756500203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e90636c61696d5f63726561746f725f746f6b656e5f706174726f6e6167655f6372656469740801146163746f72a50101e8436f6e74656e744163746f723c543a3a43757261746f7247726f757049642c20543a3a43757261746f7249642c20543a3a4d656d62657249643e0001286368616e6e656c5f6964280130543a3a4368616e6e656c4964003824b8436c61696d206368616e6e656c27732063726561746f7220746f6b656e20706174726f6e6167652063726564697400203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e4c69737375655f726576656e75655f73706c69741001146163746f72a50101e8436f6e74656e744163746f723c543a3a43757261746f7247726f757049642c20543a3a43757261746f7249642c20543a3a4d656d62657249643e0001286368616e6e656c5f6964280130543a3a4368616e6e656c49640001147374617274010201584f7074696f6e3c543a3a426c6f636b4e756d6265723e0001206475726174696f6e100138543a3a426c6f636b4e756d62657200392484497373756520726576656e75652073706c697420666f722061206368616e6e656c00203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e5866696e616c697a655f726576656e75655f73706c69740801146163746f72a50101e8436f6e74656e744163746f723c543a3a43757261746f7247726f757049642c20543a3a43757261746f7249642c20543a3a4d656d62657249643e0001286368616e6e656c5f6964280130543a3a4368616e6e656c4964003a247c46696e616c697a6520616e20656e64656420726576656e75652073706c697400203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e6c66696e616c697a655f63726561746f725f746f6b656e5f73616c650801146163746f72a50101e8436f6e74656e744163746f723c543a3a43757261746f7247726f757049642c20543a3a43757261746f7249642c20543a3a4d656d62657249643e0001286368616e6e656c5f6964280130543a3a4368616e6e656c4964003b249046696e616c697a6520616e20656e6465642063726561746f7220746f6b656e2073616c6500203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e54646569737375655f63726561746f725f746f6b656e0801146163746f72a50101e8436f6e74656e744163746f723c543a3a43757261746f7247726f757049642c20543a3a43757261746f7249642c20543a3a4d656d62657249643e0001286368616e6e656c5f6964280130543a3a4368616e6e656c4964003c247c44656973737565206368616e6e656c27732063726561746f7220746f6b656e00203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e3061637469766174655f616d6d0c01146163746f72a50101e8436f6e74656e744163746f723c543a3a43757261746f7247726f757049642c20543a3a43757261746f7249642c20543a3a4d656d62657249643e0001286368616e6e656c5f6964280130543a3a4368616e6e656c4964000118706172616d7335060138416d6d506172616d734f663c543e003d0490416374697661746520416d6d2066756e6374696f6e616c69747920666f7220746f6b656e38646561637469766174655f616d6d0801146163746f72a50101e8436f6e74656e744163746f723c543a3a43757261746f7247726f757049642c20543a3a43757261746f7249642c20543a3a4d656d62657249643e0001286368616e6e656c5f6964280130543a3a4368616e6e656c4964003e04984465616374697661746520416d6d2066756e6374696f6e616c69747920666f7220746f6b656e6c63726561746f725f746f6b656e5f6973737565725f72656d61726b0c01146163746f72a50101e8436f6e74656e744163746f723c543a3a43757261746f7247726f757049642c20543a3a43757261746f7249642c20543a3a4d656d62657249643e0001286368616e6e656c5f6964280130543a3a4368616e6e656c496400011872656d61726b30011c5665633c75383e003f04e4416c6c6f77206372742069737375657220746f20757064617465206d6574616461746120666f7220616e206578697374696e6720746f6b656e0c4c446973706174636861626c652063616c6c732e005501456163682076617269616e74206f66207468697320656e756d206d61707320746f206120646973706174636861626c652066756e6374696f6e2066726f6d20746865206173736f636961746564206d6f64756c652e0d060c3870616c6c65745f636f6e74656e74147479706573444368616e6e656c4261675769746e657373000008014c73746f726167655f6275636b6574735f6e756d10010c753332000160646973747269627574696f6e5f6275636b6574735f6e756d10010c7533320000110600000215060015060c3470616c6c65745f636f6d6d6f6e2c6d65726b6c655f747265654850726f6f66456c656d656e745265636f7264081048617368012c105369646501190600080110686173682c011048617368000110736964651906011053696465000019060c3470616c6c65745f636f6d6d6f6e2c6d65726b6c655f747265651053696465000108104c656674000000145269676874000100001d060c3870616c6c65745f636f6e74656e741474797065734850756c6c5061796d656e74456c656d656e740c244368616e6e656c496401281c42616c616e636501181048617368012c000c01286368616e6e656c5f69642801244368616e6e656c496400016063756d756c61746976655f7265776172645f6561726e656418011c42616c616e6365000118726561736f6e2c011048617368000021060c3870616c6c65745f636f6e74656e7414747970657358496e69745472616e73666572506172616d65746572730c204d656d626572496401283843757261746f7247726f7570496401281c42616c616e63650118000c01446e65775f636f6c6c61626f7261746f72732d0201ac42547265654d61703c4d656d62657249642c204368616e6e656c4167656e745065726d697373696f6e733e000114707269636518011c42616c616e63650001246e65775f6f776e6572e50101984368616e6e656c4f776e65723c4d656d62657249642c2043757261746f7247726f757049643e000025060c5070616c6c65745f70726f6a6563745f746f6b656e1474797065733c546f6b656e53616c65506172616d7310284a6f7942616c616e636501181c42616c616e636501182c426c6f636b4e756d62657201105456657374696e675363686564756c65506172616d7301d102001c0128756e69745f70726963651801284a6f7942616c616e636500015075707065725f626f756e645f7175616e7469747918011c42616c616e63650001247374617274735f61740102014c4f7074696f6e3c426c6f636b4e756d6265723e0001206475726174696f6e10012c426c6f636b4e756d62657200015c76657374696e675f7363686564756c655f706172616d73d90201744f7074696f6e3c56657374696e675363686564756c65506172616d733e0001386361705f7065725f6d656d6265724501013c4f7074696f6e3c42616c616e63653e0001206d657461646174613101013c4f7074696f6e3c5665633c75383e3e000029060c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454012d06045300000400310601185665633c543e00002d06000004082809030031060000022d060035060c5070616c6c65745f70726f6a6563745f746f6b656e14747970657324416d6d506172616d73041c42616c616e6365011800080114736c6f706518011c42616c616e6365000124696e7465726365707418011c42616c616e636500003906083870616c6c65745f73746f726167651043616c6c04045400018c5464656c6574655f73746f726167655f6275636b657404014473746f726167655f6275636b65745f6964280148543a3a53746f726167654275636b657449640000201d0144656c6574652073746f72616765206275636b65742e204d75737420626520656d7074792e2053746f72616765206f70657261746f72206d757374206265206d697373696e672e203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e7c7570646174655f75706c6f6164696e675f626c6f636b65645f7374617475730401286e65775f737461747573980110626f6f6c000120785570646174657320676c6f62616c2075706c6f6164696e6720666c61672e203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e507570646174655f646174615f73697a655f6665650401446e65775f646174615f73697a655f66656518013042616c616e63654f663c543e000220cc557064617465732073697a652d62617365642070726963696e67206f66206e6577206f626a656374732075706c6f616465642e203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e907570646174655f73746f726167655f6275636b6574735f7065725f6261675f6c696d69740401246e65775f6c696d697410010c753332000320bc55706461746573202253746f72616765206275636b657473207065722062616722206e756d626572206c696d69742e203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743ea47570646174655f73746f726167655f6275636b6574735f766f75636865725f6d61785f6c696d6974730801406e65775f6f626a656374735f73697a6528010c7536340001486e65775f6f626a656374735f6e756d62657228010c753634000420b455706461746573202253746f72616765206275636b65747320766f7563686572206d6178206c696d697473222e203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e8c7570646174655f646174615f6f626a6563745f73746174655f626c6f61745f626f6e6404014073746174655f626c6f61745f626f6e6418013042616c616e63654f663c543e000520ac557064617465732064617461206f626a65637420737461746520626c6f617420626f6e642076616c75652e203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743efc7570646174655f6e756d6265725f6f665f73746f726167655f6275636b6574735f696e5f64796e616d69635f6261675f6372656174696f6e5f706f6c69637908014064796e616d69635f6261675f74797065b102013844796e616d6963426167547970650001646e756d6265725f6f665f73746f726167655f6275636b65747310010c7533320006202d01557064617465206e756d626572206f662073746f72616765206275636b657473207573656420696e20676976656e2064796e616d696320626167206372656174696f6e20706f6c6963792e203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e407570646174655f626c61636b6c69737408013472656d6f76655f686173686573a502014442547265655365743c5665633c75383e3e0001286164645f686173686573a502014442547265655365743c5665633c75383e3e000728bc41646420616e642072656d6f76652068617368657320746f207468652063757272656e7420626c61636b6c6973742e203c7765696768743e002423232057656967687448604f202857202b205629602077686572653abc2d2060576020697320746865206e756d626572206f66206974656d7320696e206072656d6f76655f68617368657360b02d2060566020697320746865206e756d626572206f66206974656d7320696e20606164645f68617368657360142d2044423ab02020202d20604f28572960202d2066726f6d20746865207468652067656e65726174656420776569676874732c23203c2f7765696768743e546372656174655f73746f726167655f6275636b6574100134696e766974655f776f726b65723501014c4f7074696f6e3c576f726b657249643c543e3e000148616363657074696e675f6e65775f62616773980110626f6f6c00012873697a655f6c696d697428010c7536340001346f626a656374735f6c696d697428010c753634000820584372656174652073746f72616765206275636b65742e203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e787570646174655f73746f726167655f6275636b6574735f666f725f6261670c01186261675f69649502012042616749643c543e00012c6164645f6275636b6574736901017042547265655365743c543a3a53746f726167654275636b657449643e00013872656d6f76655f6275636b6574736901017042547265655365743c543a3a53746f726167654275636b657449643e00092888557064617465732073746f72616765206275636b65747320666f722061206261672e203c7765696768743e002423232057656967687448604f202857202b205629602077686572653ab42d2060576020697320746865206e756d626572206f66206974656d7320696e20606164645f6275636b65747360c02d2060566020697320746865206e756d626572206f66206974656d7320696e206072656d6f76655f6275636b65747360142d2044423ac02020202d20604f2856202b20572960202d2066726f6d20746865207468652067656e65726174656420776569676874732c23203c2f7765696768743e9463616e63656c5f73746f726167655f6275636b65745f6f70657261746f725f696e7669746504014473746f726167655f6275636b65745f6964280148543a3a53746f726167654275636b65744964000a20110143616e63656c2070656e64696e672073746f72616765206275636b657420696e766974652e20416e20696e7669746174696f6e206d7573742062652070656e64696e672e203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e78696e766974655f73746f726167655f6275636b65745f6f70657261746f7208014473746f726167655f6275636b65745f6964280148543a3a53746f726167654275636b6574496400012c6f70657261746f725f696428012c576f726b657249643c543e000b20c0496e766974652073746f72616765206275636b6574206f70657261746f722e204d757374206265206d697373696e672e203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e7872656d6f76655f73746f726167655f6275636b65745f6f70657261746f7204014473746f726167655f6275636b65745f6964280148543a3a53746f726167654275636b65744964000c208052656d6f7665732073746f72616765206275636b6574206f70657261746f722e203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e707570646174655f73746f726167655f6275636b65745f73746174757308014473746f726167655f6275636b65745f6964280148543a3a53746f726167654275636b65744964000148616363657074696e675f6e65775f62616773980110626f6f6c000d20dc5570646174652077686574686572206e6577206261677320617265206265696e6720616363657074656420666f722073746f726167652e203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e847365745f73746f726167655f6275636b65745f766f75636865725f6c696d6974730c014473746f726167655f6275636b65745f6964280148543a3a53746f726167654275636b657449640001586e65775f6f626a656374735f73697a655f6c696d697428010c7536340001606e65775f6f626a656374735f6e756d6265725f6c696d697428010c753634000e208c536574732073746f72616765206275636b657420766f7563686572206c696d6974732e203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e806163636570745f73746f726167655f6275636b65745f696e7669746174696f6e0c0124776f726b65725f696428012c576f726b657249643c543e00014473746f726167655f6275636b65745f6964280148543a3a53746f726167654275636b657449640001547472616e736163746f725f6163636f756e745f6964000130543a3a4163636f756e744964000f285d01416363657074207468652073746f72616765206275636b657420696e7669746174696f6e2e20416e20696e7669746174696f6e206d757374206d617463682074686520776f726b65725f696420706172616d657465722e59014974206163636570747320616e206164646974696f6e616c206163636f756e7420494420287472616e736163746f722920666f7220616363657074696e672064617461206f626a6563747320746f2070726576656e74747472616e73616374696f6e206e6f6e636520636f6c6c6973696f6e732e203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e747365745f73746f726167655f6f70657261746f725f6d657461646174610c0124776f726b65725f696428012c576f726b657249643c543e00014473746f726167655f6275636b65745f6964280148543a3a53746f726167654275636b657449640001206d6574616461746130011c5665633c75383e001024dc536574732073746f72616765206f70657261746f72206d65746164617461202865672e3a2073746f72616765206e6f64652055524c292e203c7765696768743e002423232057656967687438604f20285729602077686572653aa02d206057602069732073697a65206f6620606d657461646174616020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e6c6163636570745f70656e64696e675f646174615f6f626a65637473100124776f726b65725f696428012c576f726b657249643c543e00014473746f726167655f6275636b65745f6964280148543a3a53746f726167654275636b657449640001186261675f69649502012042616749643c543e000130646174615f6f626a656374736901016442547265655365743c543a3a446174614f626a65637449643e0011246501412073746f726167652070726f7669646572207369676e616c732074686174207468652064617461206f626a65637420776173207375636365737366756c6c792075706c6f6164656420746f206974732073746f726167652e203c7765696768743e00242323205765696768743c604f2028572029602077686572653ab82d2060576020697320746865206e756d626572206f66206974656d7320696e2060646174615f6f626a6563747360142d2044423ab02020202d20604f28572960202d2066726f6d20746865207468652067656e65726174656420776569676874732c23203c2f7765696768743e846372656174655f646973747269627574696f6e5f6275636b65745f66616d696c7900122090437265617465206120646973747269627574696f6e206275636b65742066616d696c792e203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e8464656c6574655f646973747269627574696f6e5f6275636b65745f66616d696c7904012466616d696c795f6964280174543a3a446973747269627574696f6e4275636b657446616d696c7949640013209444656c65746573206120646973747269627574696f6e206275636b65742066616d696c792e203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e686372656174655f646973747269627574696f6e5f6275636b657408012466616d696c795f6964280174543a3a446973747269627574696f6e4275636b657446616d696c794964000148616363657074696e675f6e65775f62616773980110626f6f6c00142074437265617465206120646973747269627574696f6e206275636b65742e203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e847570646174655f646973747269627574696f6e5f6275636b65745f7374617475730801246275636b65745f69642502015c446973747269627574696f6e4275636b657449643c543e000148616363657074696e675f6e65775f62616773980110626f6f6c001520d855706461746573206120646973747269627574696f6e206275636b6574202761636365707473206e657720626167732720666c61672e203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e6864656c6574655f646973747269627574696f6e5f6275636b65740401246275636b65745f69642502015c446973747269627574696f6e4275636b657449643c543e001620a844656c65746520646973747269627574696f6e206275636b65742e204d75737420626520656d7074792e203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e8c7570646174655f646973747269627574696f6e5f6275636b6574735f666f725f6261671001186261675f69649502012042616749643c543e00012466616d696c795f6964280174543a3a446973747269627574696f6e4275636b657446616d696c79496400014c6164645f6275636b6574735f696e64696365736901019042547265655365743c543a3a446973747269627574696f6e4275636b6574496e6465783e00015872656d6f76655f6275636b6574735f696e64696365736901019042547265655365743c543a3a446973747269627574696f6e4275636b6574496e6465783e0017289c5570646174657320646973747269627574696f6e206275636b65747320666f722061206261672e203c7765696768743e002423232057656967687448604f202857202b205629602077686572653ad42d2060576020697320746865206e756d626572206f66206974656d7320696e20606164645f6275636b6574735f696e646963657360e02d2060566020697320746865206e756d626572206f66206974656d7320696e206072656d6f76655f6275636b6574735f696e646963657360142d2044423ac02020202d20604f2856202b20572960202d2066726f6d20746865207468652067656e65726174656420776569676874732c23203c2f7765696768743ea47570646174655f646973747269627574696f6e5f6275636b6574735f7065725f6261675f6c696d69740401246e65775f6c696d697410010c753332001820d0557064617465732022446973747269627574696f6e206275636b657473207065722062616722206e756d626572206c696d69742e203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e7c7570646174655f646973747269627574696f6e5f6275636b65745f6d6f64650801246275636b65745f69642502015c446973747269627574696f6e4275636b657449643c543e000130646973747269627574696e67980110626f6f6c001920d8557064617465732027646973747269627574696e672720666c616720666f722074686520646973747269627574696e6720666c61672e203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743eb87570646174655f66616d696c6965735f696e5f64796e616d69635f6261675f6372656174696f6e5f706f6c69637908014064796e616d69635f6261675f74797065b102013844796e616d69634261675479706500012066616d696c696573b50201b042547265654d61703c543a3a446973747269627574696f6e4275636b657446616d696c7949642c207533323e001a283d01557064617465206e756d626572206f66206469737472696275746564206275636b657473207573656420696e20676976656e2064796e616d696320626167206372656174696f6e20706f6c6963792e9c5570646174657320646973747269627574696f6e206275636b65747320666f722061206261672e203c7765696768743e002423232057656967687438604f20285729602077686572653aa82d2060576020697320746865206e756d626572206f66206974656d7320696e206066616d696c69657360142d2044423ab02020202d20604f28572960202d2066726f6d20746865207468652067656e65726174656420776569676874732c23203c2f7765696768743e8c696e766974655f646973747269627574696f6e5f6275636b65745f6f70657261746f720801246275636b65745f69642502015c446973747269627574696f6e4275636b657449643c543e0001486f70657261746f725f776f726b65725f696428012c576f726b657249643c543e001b2090496e7669746520616e206f70657261746f722e204d757374206265206d697373696e672e203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743ea863616e63656c5f646973747269627574696f6e5f6275636b65745f6f70657261746f725f696e766974650801246275636b65745f69642502015c446973747269627574696f6e4275636b657449643c543e0001486f70657261746f725f776f726b65725f696428012c576f726b657249643c543e001c209c43616e63656c2070656e64696e6720696e766974652e204d7573742062652070656e64696e672e203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e8c72656d6f76655f646973747269627574696f6e5f6275636b65745f6f70657261746f720801246275636b65745f69642502015c446973747269627574696f6e4275636b657449643c543e0001486f70657261746f725f776f726b65725f696428012c576f726b657249643c543e001d209452656d6f76657320646973747269627574696f6e206275636b6574206f70657261746f722e203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e9c7365745f646973747269627574696f6e5f6275636b65745f66616d696c795f6d6574616461746108012466616d696c795f6964280174543a3a446973747269627574696f6e4275636b657446616d696c7949640001206d6574616461746130011c5665633c75383e001e24a053657420646973747269627574696f6e206275636b65742066616d696c79206d657461646174612e203c7765696768743e002423232057656967687438604f20285729602077686572653aa02d206057602069732073697a65206f6620606d657461646174616020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e946163636570745f646973747269627574696f6e5f6275636b65745f696e7669746174696f6e080124776f726b65725f696428012c576f726b657249643c543e0001246275636b65745f69642502015c446973747269627574696f6e4275636b657449643c543e001f20584163636570742070656e64696e6720696e766974652e203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e887365745f646973747269627574696f6e5f6f70657261746f725f6d657461646174610c0124776f726b65725f696428012c576f726b657249643c543e0001246275636b65745f69642502015c446973747269627574696f6e4275636b657449643c543e0001206d6574616461746130011c5665633c75383e002024fc53657420646973747269627574696f6e206f70657261746f72206d6574616461746120666f722074686520646973747269627574696f6e206275636b65742e203c7765696768743e002423232057656967687438604f20285729602077686572653aa02d206057602069732073697a65206f6620606d657461646174616020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e5c73746f726167655f6f70657261746f725f72656d61726b0c0124776f726b65725f696428012c576f726b657249643c543e00014473746f726167655f6275636b65745f6964280148543a3a53746f726167654275636b6574496400010c6d736730011c5665633c75383e0021289c4465706f73697420612053746f726167654f70657261746f7252656d61726b6564206576656e7474636f6e7461696e696e6720612067656e65726963206d6573736167652e203c7765696768743e002423232057656967687438604f20285729602077686572653a9c2d206057602069732073697a65206f6620606d6573736167656020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e70646973747269627574696f6e5f6f70657261746f725f72656d61726b0c0124776f726b65725f696428012c576f726b657249643c543e000158646973747269627574696f6e5f6275636b65745f69642502015c446973747269627574696f6e4275636b657449643c543e00010c6d736730011c5665633c75383e0022249c43726561746520612064796e616d6963206261672e20446576656c6f706d656e74206d6f64652e203c7765696768743e002423232057656967687438604f20285729602077686572653a9c2d206057602069732073697a65206f6620606d6573736167656020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e0c4c446973706174636861626c652063616c6c732e005501456163682076617269616e74206f66207468697320656e756d206d61707320746f206120646973706174636861626c652066756e6374696f6e2066726f6d20746865206173736f636961746564206d6f64756c652e3d06085070616c6c65745f70726f6a6563745f746f6b656e1043616c6c040454000128207472616e736665721001347372635f6d656d6265725f696428012c543a3a4d656d6265724964000120746f6b656e5f6964280128543a3a546f6b656e496400011c6f757470757473410601505472616e736665724f7574707574734f663c543e0001206d6574616461746130011c5665633c75383e0000685501416c6c6f7720746f207472616e736665722066726f6d20607372635f6d656d6265725f696460206163636f756e7420746f2074686520766172696f757320606f757470757473602062656e6566696369617269657364696e207468652073706563696669656420616d6f756e74732e0038507265636f6e646974696f6e733ae82d206f726967696e207369676e6572206d75737420626520607372635f6d656d6265725f69646020636f6e74726f6c6c6572206163636f756e74842d20746f6b656e2062792060746f6b656e5f696460206d75737420657869737473d82d206163636f756e74206f6620607372635f6d656d6265725f696460206d75737420657869737420666f722060746f6b656e5f69646041012d2073656e646572206d757374206861766520656e6f756768204a4f597320746f20636f7665722074686520746f74616c20626c6f617420626f6e6420726571756972656420696e2063617365206f6678202064657374696e6174696f6e287329206e6f74206578697374696e672e29012d20736f75726365206163636f756e74206d757374206861766520656e6f75676820746f6b656e2066756e647320746f20636f76657220616c6c20746865207472616e7366657228732941012d20606f75747075747360206d7573742064657369676e617465206578697374696e672064657374696e6174696f6e28732920666f7220225065726d697373696f6e656422207472616e73666572732e3c506f7374636f6e646974696f6e733ae82d20736f75726365206163636f756e74277320746f6b656e7320616d6f756e74206973206465637265617365642062792060616d6f756e74602e49012d20746f74616c20626c6f617420626f6e64207472616e736665727265642066726f6d2073656e6465722773204a4f592062616c616e636520696e746f20746865207472656173757279206163636f756e74cc2020696e20636173652064657374696e6174696f6e2873292068617665206265656e20616464656420746f2073746f72616765ec2d20606f7574707574732e62656e65666963696172796020746f6b656e7320616d6f756e7420696e637265617365642062792060616d6f756e746000203c7765696768743e002423232057656967687448604f202854202b204d29602077686572653a802d2060546020697320746865206c656e677468206f6620606f75747075747360b02d20604d60206973207468652073697a65206f6620606d657461646174616020696e206b696c6f6279746573142d2044423aac20202d20604f28542960202d2066726f6d20746865207468652067656e65726174656420776569676874732c23203c2f7765696768743e106275726e0c0120746f6b656e5f6964280128543a3a546f6b656e49640001246d656d6265725f696428012c543a3a4d656d6265724964000118616d6f756e74180144546f6b656e42616c616e63654f663c543e000178884275726e20746f6b656e732066726f6d20737065636966696564206163636f756e740038507265636f6e646974696f6e733a442d2060616d6f756e7460206973203e2030f42d206f726967696e207369676e6572206973206120636f6e74726f6c6c6572206163636f756e74206f6620606d656d6265725f696460206d656d626572702d20746f6b656e2062792060746f6b656e5f69646020657869737473c02d20616e206163636f756e742065786973747320666f722060746f6b656e5f696460207820606d656d6265725f696460a02d206163636f756e74277320746f6b656e7320616d6f756e74206973203e3d2060616d6f756e746005012d20746f6b656e20737570706c792063616e206265206d6f64696669656420287468657265206973206e6f2061637469766520726576656e75652073706c697429003c506f7374636f6e646974696f6e733a4d012d207374617274696e6720776974682060756e70726f6365737365646020626565696e6720657175616c20746f2060616d6f756e74602c206163636f756e7427732076657374696e67207363686564756c6573602020617265206974657261746564206f76657220616e643a5d0120202d2075706461746564207769746820606275726e65645f616d6f756e74202b3d207570726f636573736564602069662076657374696e67207363686564756c65277320756e76657374656420616d6f756e74206973742020202067726561746572207468616e20607570726f636573736564605420202d2072656d6f766564206f746865727769736545012020286166746572206561636820697465726174696f6e2060756e70726f6365737365646020697320726564756365642062792074686520616d6f756e74206f6620756e76657374656420746f6b656e737c20206275726e656420647572696e67207468617420697465726174696f6e2949012d20696620746865206163636f756e742068617320616e79206073706c69745f7374616b696e675f737461747573602c20746865206073706c69745f7374616b696e675f7374617475732e616d6f756e7460e820206973207265647563656420627920606d696e28616d6f756e742c2073706c69745f7374616b696e675f7374617475732e616d6f756e742960a42d20606163636f756e742e616d6f756e746020697320726564756365642062792060616d6f756e7460942d20746f6b656e20737570706c7920697320726564756365642062792060616d6f756e746000203c7765696768743e00242323205765696768741c604f2028312960142d2044423ad820202d20604f28312960202d20646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e30647573745f6163636f756e74080120746f6b656e5f6964280128543a3a546f6b656e49640001246d656d6265725f696428012c543a3a4d656d62657249640002508c416c6c6f7720616e79207573657220746f2072656d6f766520616e206163636f756e740038507265636f6e646974696f6e733a802d20746f6b656e2062792060746f6b656e5f696460206d757374206578697374d02d20616e206163636f756e74206d75737420657869737420666f722060746f6b656e5f696460207820606d656d6265725f69646015012d206966205065726d697373696f6e656420746f6b656e3a20606f726967696e60207369676e6572206d75737420626520606d656d6265725f696460206d656d6265722773502020636f6e74726f6c6c6572206163636f756e74ec2d2060746f6b656e5f696460207820606d656d6265725f696460206163636f756e74206d75737420626520616e20656d707479206163636f756e7478202028606163636f756e745f646174612e616d6f756e7460203d3d2030293c506f7374636f6e646974696f6e733a1d012d204163636f756e7420696e666f726d6174696f6e20666f722060746f6b656e5f696460207820606d656d6265725f6964602072656d6f7665642066726f6d2073746f72616765dc2d20626c6f617420626f6e6420726566756e64656420746f20606d656d6265725f69646020636f6e74726f6c6c6572206163636f756e74cc2020286f722060626c6f61745f626f6e642e72657061796d656e745f726573747269637465645f746f60206163636f756e742900203c7765696768743e001c604f2028312960142d2044423ad820202d20604f28312960202d20646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e386a6f696e5f77686974656c6973740c01246d656d6265725f696428012c543a3a4d656d6265724964000120746f6b656e5f6964280128543a3a546f6b656e496400011470726f6f664d0601404d65726b6c6550726f6f664f663c543e00034c11014a6f696e2077686974656c69737420666f72207065726d697373696f6e656420636173653a207573656420746f20616464206163636f756e747320666f7220746f6b656e38507265636f6e646974696f6e733a682d2027746f6b656e5f696427206d7573742062652076616c6964f42d20606f726967696e60207369676e6572206d757374206265206120636f6e74726f6c6c6572206163636f756e74206f6620606d656d6265725f696460c02d206163636f756e7420666f7220606d656d6265725f696460206d757374206e6f7420616c726561647920657869737409012d207472616e7366657220706f6c69637920697320605065726d697373696f6e65646020616e64206d65726b6c652070726f6f66206d7573742062652076616c6964003c506f7374636f6e646974696f6e733af42d206163636f756e7420666f7220606d656d6265725f696460206372656174656420616e6420616464656420746f2070616c6c65742073746f72616765e82d2060626c6f61745f626f6e6460207472616e736665727265642066726f6d2073656e64657220746f207472656173757279206163636f756e7400203c7765696768743e002423232057656967687438604f20284829602077686572653a802d2060486020697320746865206c656e677468206f66206070726f6f662e3060142d2044423ad820202d20604f28312960202d20646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e5c70757263686173655f746f6b656e735f6f6e5f73616c650c0120746f6b656e5f6964280128543a3a546f6b656e49640001246d656d6265725f696428012c543a3a4d656d6265724964000118616d6f756e74180144546f6b656e42616c616e63654f663c543e0004ec94507572636861736520746f6b656e73206f6e2061637469766520746f6b656e2073616c652e0038507265636f6e646974696f6e733a802d20746f6b656e2062792060746f6b656e5f696460206d757374206578697374d02d20746f6b656e2062792060746f6b656e5f696460206d75737420626520696e204f66666572696e6753746174653a3a53616c65ec2d2060616d6f756e74602063616e6e6f7420657863656564206e756d626572206f6620746f6b656e732072656d61696e696e67206f6e2073616c6509012d20606f726967696e60207369676e6572206d75737420626520636f6e74726f6c6c6572206163636f756e74206f6620606d656d6265725f696460206d656d626572a42d2073656e646572277320617661696c61626c65204a4f592062616c616e6365206d7573742062653aec20202d203e3d20606a6f795f6578697374656e7469616c5f6465706f736974202b20616d6f756e74202a2073616c652e756e69745f70726963656080202020206966204163636f756e744461746120616c7265616479206578697374210120202d203e3d20606a6f795f6578697374656e7469616c5f6465706f736974202b20616d6f756e74202a2073616c652e756e69745f7072696365202b20626c6f61745f626f6e646084202020206966204163636f756e744461746120646f6573206e6f7420657869737435012d206c657420606665655f616d6f756e7460206265206073616c655f706c6174666f726d5f6665652e6d756c5f666c6f6f7228616d6f756e74202a2073616c652e756e69745f7072696365296059012d206966206073616c652e6561726e696e67735f64657374696e6174696f6e2e69735f736f6d6528296020616e64206073616c652e6561726e696e67735f64657374696e6174696f6e60206163636f756e74206861733c20207a65726f2062616c616e63653a390120202d2074686520616d6f756e7420746f206265207472616e736665727265642066726f6d206073656e6465726020746f206073616c652e6561726e696e67735f64657374696e6174696f6e602c4d0120202020776869636820697320657175616c20746f2060616d6f756e74202a2073616c652e756e69745f7072696365202d206665655f616d6f756e74602c206d7573742062652067726561746572207468616e7420202020606a6f795f6578697374656e7469616c5f6465706f7369746031012d20746f74616c206e756d626572206f6620746f6b656e7320616c72656164792070757263686173656420627920746865206d656d626572206f6e207468652063757272656e742073616c65f82020504c55532060616d6f756e7460206d757374206e6f74206578636565642073616c6527732070757263686173652063617020706572206d656d626572602d206966205065726d697373696f6e656420746f6b656e3a010120202d204163636f756e74496e666f4279546f6b656e416e644d656d62657228746f6b656e5f69642c20266d656d6265725f696429206d7573742065786973749c2d206966206073616c652e76657374696e675f7363686564756c652e69735f736f6d652829603ae020202d206e756d626572206f662073656e646572206163636f756e742773206f6e676f696e672076657374696e67207363686564756c6573cc202020206d757374206265203c204d617856657374696e675363686564756c65735065724163636f756e74506572546f6b656e003c506f7374636f6e646974696f6e733aac2d206966206073616c652e6561726e696e67735f64657374696e6174696f6e2e69735f736f6d652829603a4d0120202d2060616d6f756e74202a2073616c652e756e69745f7072696365202d206665655f616d6f756e7460204a4f5920746f6b656e7320617265207472616e7366657265642066726f6d206073656e646572608820202020746f206073616c652e6561726e696e67735f64657374696e6174696f6e60d420202d20606665655f616d6f756e7460204a4f5920697320736c61736865642066726f6d206073656e646572602062616c616e6365ac2d206966206073616c652e6561726e696e67735f64657374696e6174696f6e2e69735f6e6f6e652829603a0d0120202d2060616d6f756e74202a2073616c652e756e69745f707269636560204a4f5920697320736c61736865642066726f6d206073656e646572602062616c616e636549012d206966206e657720746f6b656e206163636f756e7420637265617465643a2060626c6f61745f626f6e6460207472616e736665727265642066726f6d206073656e6465726020746f2074726561737572799c2d206966206073616c652e76657374696e675f7363686564756c652e69735f736f6d652829603a0d0120202d20696620627579657220686173206e6f206076657374696e675f7363686564756c65602072656c6174656420746f207468652063757272656e742073616c653a5d01202020202d2061206e65772076657374696e67207363686564756c6520286073616c652e6765745f76657374696e675f7363686564756c652870757263686173655f616d6f756e7429602920697320616464656420746f80202020202020627579657227732060766573696e675f7363686564756c6573605501202020202d20736f6d652066696e69736865642076657374696e67207363686564756c652069732072656d6f7665642066726f6d2062757965722773206163636f756e745f6461746120696e20636173652074686559012020202020206e756d626572206f6620627579657227732076657374696e675f7363686564756c657320776173203d3d204d617856657374696e675363686564756c65735065724163636f756e74506572546f6b656e290120202d20696620627579657220616c7265616479206861732061206076657374696e675f7363686564756c65602072656c6174656420746f207468652063757272656e742073616c653afc202020202d2063757272656e742076657374696e67207363686564756c6527732060636c6966665f616d6f756e746020697320696e63726561736564206279fc2020202020206073616c652e6765745f76657374696e675f7363686564756c652870757263686173655f616d6f756e74292e636c6966665f616d6f756e74602901202020202d2063757272656e742076657374696e67207363686564756c6527732060706f73745f636c6966665f746f74616c5f616d6f756e746020697320696e6372656173656420627929012020202020206073616c652e6765745f76657374696e675f7363686564756c652870757263686173655f616d6f756e74292e706f73745f636c6966665f746f74616c5f616d6f756e74609c2d206966206073616c652e76657374696e675f7363686564756c652e69735f6e6f6e652829603ad820202d2062757965722773206163636f756e7420746f6b656e20616d6f756e7420696e637265617365642062792060616d6f756e746055012d2069662060746f6b656e5f646174612e73616c652e7175616e746974795f6c656674202d20616d6f756e74203d3d20306020616e64206073616c652e6175746f5f66696e616c697a6560206973206074727565604101202060746f6b656e5f646174612e73616c65602069732073657420746f204e6f6e652c206f74686572776973652060746f6b656e5f646174612e73616c652e7175616e746974795f6c65667460206973350120206465637265617365642062792060616d6f756e746020616e642060746f6b656e5f646174612e73616c652e66756e64735f636f6c6c65637465646020696e20696e6372656173656420627970202060616d6f756e74202a2073616c652e756e69745f70726963656000203c7765696768743e00242323205765696768741c604f2028312960142d2044423ad820202d20604f28312960202d20646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e5070617274696369706174655f696e5f73706c69740c0120746f6b656e5f6964280128543a3a546f6b656e49640001246d656d6265725f696428012c543a3a4d656d6265724964000118616d6f756e74180144546f6b656e42616c616e63654f663c543e000568f0506172746963697061746520696e20746865202a6c61746573742a20746f6b656e20726576656e75652073706c697420286966206f6e676f696e672938507265636f6e646974696f6e733a8c2d2060746f6b656e60206d75737420657869737420666f722060746f6b656e5f696460fc2d20606f726967696e60207369676e6572206d75737420626520606d656d6265725f696460206d656d62657220636f6e74726f6c6c6572206163636f756e74582d2060616d6f756e7460206d757374206265203e2030cc2d20606163636f756e7460206d7573742065786973742020666f72206028746f6b656e5f69642c206d656d6265725f69642960fc2d2060746f6b656e2e73706c69745f73746174757360206d7573742062652061637469766520414e44205448454e2063757272656e745f626c6f636b20696eb82020205b73706c69742e73746172742c2073706c69742e7374617274202b2073706c69745f6475726174696f6e2981012d20606163636f756e742e7374616b696e675f7374617475732e69735f6e6f6e65282960204f5220606163636f756e742e7374616b696e675f7374617475732e73706c69745f6964602072656665727320746f206120706173742073706c6974782d20606163636f756e742e616d6f756e7460203e3d2060616d6f756e74602d012d206c657420606469766964656e64203d2073706c69745f616c6c6f636174696f6e202a206163636f756e742e7374616b65645f616d6f756e74202f20746f6b656e2e737570706c79606015012020207468656e2060747265617375727960206d7573742062652061626c6520746f207472616e7366657220606469766964656e646020616d6f756e74206f66204a4f592eec202020285468697320636f6e646974696f6e20746563686e6963616c6c792c2073686f756c6420616c7761797320626520736174697366696564290038506f7374636f6e646974696f6e732d012d20606469766964656e646020616d6f756e74206f66204a4f5973207472616e736665727265642066726f6d206074726561737572795f6163636f756e746020746f206073656e6465726045012d2060746f6b656e6020726576656e75652073706c6974206469766964656e647320706179656420747261636b696e67207661726961626c6520696e6372656173656420627920606469766964656e646045012d20606163636f756e742e7374616b696e675f737461747573602073657420746f20536f6d65282e2e2920776974682060616d6f756e746020616e642060746f6b656e2e6c61746573745f73706c69746000203c7765696768743e00242323205765696768741c604f2028312960142d2044423ad820202d20604f28312960202d20646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e48657869745f726576656e75655f73706c6974080120746f6b656e5f6964280128543a3a546f6b656e49640001246d656d6265725f696428012c543a3a4d656d626572496400064cb453706c69742d70617274696369706174696e672075736572206c656176657320726576656e75652073706c697434507265636f6e646974696f6e738c2d2060746f6b656e60206d75737420657869737420666f722060746f6b656e5f696460fc2d20606f726967696e60207369676e6572206d75737420626520606d656d6265725f696460206d656d62657220636f6e74726f6c6c6572206163636f756e74c82d20606163636f756e7460206d75737420657869737420666f72206028746f6b656e5f69642c206d656d6265725f69642960902d20606163636f756e742e7374616b696e67207374617475732e69735f736f6d6528292729012d2069662060286163636f756e742e7374616b696e675f7374617475732e73706c69745f6964203d3d20746f6b656e2e6e6578745f726576656e75655f73706c69745f6964202d2031604101202020414e442060746f6b656e2e726576656e75655f73706c6974602069732061637469766529205448454e2073706c6974207374616b696e6720706572696f6420206d75737420626520656e6465640038506f7374636f6e646974696f6e73982d20606163636f756e742e7374616b696e675f737461747573602073657420746f204e6f6e6500203c7765696768743e00242323205765696768741c604f2028312960142d2044423ad820202d20604f28312960202d20646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e286275795f6f6e5f616d6d100120746f6b656e5f6964280128543a3a546f6b656e49640001246d656d6265725f696428012c543a3a4d656d6265724964000118616d6f756e741801583c5420617320436f6e6669673e3a3a42616c616e6365000148736c6970706167655f746f6c6572616e63655d0601884f7074696f6e3c285065726d696c6c2c204a6f7942616c616e63654f663c543e293e00073005014d696e7420646573697265642060746f6b656e5f69646020616d6f756e7420696e746f2075736572206163636f756e7420766961204a4f5920657863686e61676534507265636f6e646974696f6e73f02d206f726967696e2c206d656d6265725f69642070616972206d75737420626520612076616c69642061757468656e7469636174696f6e2070616972542d20746f6b656e5f6964206d7573742065786973742d012d207573657220757361626c65204a4f592062616c616e6365206d75737420626520656e6f75676820666f7220627579696e6720282b206578697374656e7469616c206465706f73697429d82d20736c69707061676520746f6c6572616e636520636f6e73747261696e7473207265737065637465642069662070726f76696465644d012d20746f6b656e20746f74616c20737570706c7920616e6420616d6f756e742076616c7565206d75737420626520732e742e20606576616c602066756e6374696f6e20646f65736e2774206f766572666c6f770038506f7374636f6e646974696f6e73b5012d2060616d6f756e746020435254206d696e74656420696e746f206163636f756e74202877686963682069732063726561746564206966206e65636573736172792077697468206578697374656e7469616c206465706f736974207472616e7366657272656420746f2069742935012d2072657370656374697665204a4f5920616d6f756e74207472616e736665727265642066726f6d20757365722062616c616e636520746f20616d6d207472656173757279206163636f756e74442d206576656e74206465706f73697465642c73656c6c5f6f6e5f616d6d100120746f6b656e5f6964280128543a3a546f6b656e49640001246d656d6265725f696428012c543a3a4d656d6265724964000118616d6f756e741801583c5420617320436f6e6669673e3a3a42616c616e6365000148736c6970706167655f746f6c6572616e63655d0601884f7074696f6e3c285065726d696c6c2c204a6f7942616c616e63654f663c543e293e00083c49014275726e20646573697265642060746f6b656e5f69646020616d6f756e742066726f6d2075736572206163636f756e7420616e6420676574204a4f592066726f6d207472656173757279206163636f756e7434507265636f6e646974696f6e73f02d206f726967696e2c206d656d6265725f69642070616972206d75737420626520612076616c69642061757468656e7469636174696f6e2070616972542d20746f6b656e5f6964206d757374206578697374dc2d20746f6b656e5f69642c206d656d6265725f6964206d7573742062652076616c6964206163636f756e7420636f6f7264696e61746573cc2d207573657220757361626c65204352542062616c616e6365206d757374206265206174206c656173742060616d6f756e7460d82d20736c69707061676520746f6c6572616e636520636f6e73747261696e7473207265737065637465642069662070726f76696465644d012d20746f6b656e20746f74616c20737570706c7920616e6420616d6f756e742076616c7565206d75737420626520732e742e20606576616c602066756e6374696f6e20646f65736e2774206f766572666c6f7709012d20616d6d207472656173757279206163636f756e74206d75737420686176652073756666696369656e74204a4f597320666f7220746865206f7065726174696f6e0038506f7374636f6e646974696f6e738c2d2060616d6f756e7460206275726e65642066726f6d2075736572206163636f756e74882d20746f74616c20737570706c792064656372656173656420627920616d6f756e7435012d2072657370656374697665204a4f5920616d6f756e74207472616e736665727265642066726f6d20616d6d207472656173757279206163636f756e7420746f2075736572206163636f756e74442d206576656e74206465706f7369746564447365745f66726f7a656e5f737461747573040118667265657a65980110626f6f6c000924fc416c6c6f777320746f20667265657a65206f7220756e667265657a6520746869732070616c6c65742e20526571756972657320726f6f74206f726967696e2e00203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e0c4c446973706174636861626c652063616c6c732e005501456163682076617269616e74206f66207468697320656e756d206d61707320746f206120646973706174636861626c652066756e6374696f6e2066726f6d20746865206173736f636961746564206d6f64756c652e41060c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454014506045300000400490601185665633c543e000045060000040828180049060000024506004d060c5070616c6c65745f70726f6a6563745f746f6b656e1474797065732c4d65726b6c6550726f6f660418486173686572014d04000400510601845665633c284861736865723a3a4f75747075742c204d65726b6c6553696465293e000051060000025506005506000004082c59060059060c5070616c6c65745f70726f6a6563745f746f6b656e147479706573284d65726b6c6553696465000108145269676874000000104c656674000100005d0604184f7074696f6e0404540161060108104e6f6e6500000010536f6d65040061060000010000610600000408d50218006506085c70616c6c65745f70726f706f73616c735f656e67696e651043616c6c04045400011010766f7465100120766f7465725f696428012c4d656d62657249643c543e00012c70726f706f73616c5f6964100134543a3a50726f706f73616c4964000110766f74653d030120566f74654b696e64000124726174696f6e616c6530011c5665633c75383e000028d4566f74652065787472696e7369632e20436f6e646974696f6e733a20206f726967696e206d75737420616c6c6f7720766f7465732e00203c7765696768743e002423232057656967687438604f20285229602077686572653ab42d20605260206973207468652073697a65206f662060726174696f6e616c656020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f722070617261656d746572732c23203c2f7765696768743e3c63616e63656c5f70726f706f73616c08012c70726f706f7365725f696428012c4d656d62657249643c543e00012c70726f706f73616c5f6964100134543a3a50726f706f73616c4964000128ac43616e63656c20612070726f706f73616c20627920697473206f726967696e616c2070726f706f7365722e00203c7765696768743e002423232057656967687438604f20284c29602077686572653ac02d20604c602069732074686520746f74616c206e756d626572206f66206c6f636b7320696e206042616c616e63657360142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e347665746f5f70726f706f73616c04012c70726f706f73616c5f6964100134543a3a50726f706f73616c4964000224785665746f20612070726f706f73616c2e204d75737420626520726f6f742e00203c7765696768743e0024232320576569676874c4604f202831296020646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d6574657273142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e3c70726f706f7365725f72656d61726b0c012c70726f706f73616c5f6964100134543a3a50726f706f73616c496400012c70726f706f7365725f696428012c4d656d62657249643c543e00010c6d736730011c5665633c75383e0003243c50726f706f7365722052656d61726b00203c7765696768743e0024232320576569676874c4604f202831296020646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d6574657273142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e0c4c446973706174636861626c652063616c6c732e005501456163682076617269616e74206f66207468697320656e756d206d61707320746f206120646973706174636861626c652066756e6374696f6e2066726f6d20746865206173736f636961746564206d6f64756c652e6906086c70616c6c65745f70726f706f73616c735f64697363757373696f6e1043616c6c040454000110206164645f706f7374100138706f73745f617574686f725f696428012c4d656d62657249643c543e0001247468726561645f696428012c543a3a54687265616449640001107465787430011c5665633c75383e0001206564697461626c65980110626f6f6c0000289441646473206120706f7374207769746820617574686f72206f726967696e20636865636b2e00203c7765696768743e002423232057656967687438604f20284c29602077686572653aa02d20604c60206973207468652073697a65206f662060746578746020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e2c64656c6574655f706f737410012864656c657465725f696428012c4d656d62657249643c543e00011c706f73745f6964280124543a3a506f737449640001247468726561645f696428012c543a3a546872656164496400011068696465980110626f6f6c000128510152656d6f766520706f73742066726f6d2073746f726167652c207769746820746865206c61737420706172616d6574657220696e6469636174696e67207768657468657220746f20616c736f206869646520697428696e207468652055492e00203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e2c7570646174655f706f73740c01247468726561645f696428012c543a3a546872656164496400011c706f73745f6964280124543a3a506f737449640001107465787430011c5665633c75383e0002282d0155706461746573206120706f7374207769746820617574686f72206f726967696e20636865636b2e2055706461746520617474656d707473206e756d626572206973206c696d697465642e00203c7765696768743e002423232057656967687438604f20284c29602077686572653aa02d20604c60206973207468652073697a65206f662060746578746020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e486368616e67655f7468726561645f6d6f64650c01246d656d6265725f696428012c4d656d62657249643c543e0001247468726561645f696428012c543a3a54687265616449640001106d6f6465450301d85468726561644d6f64653c42547265655365743c3c54206173204d656d6265727368697054797065733e3a3a4d656d62657249643e3e0003287c4368616e67657320746872656164207065726d697373696f6e206d6f64652e00203c7765696768743e0024232320576569676874dc604f2028572960206966205468726561644d6f646520697320636c6f7365206f72204f283129206f74686572776973652077686572653ad02d2060576020697320746865206e756d626572206f662077686974656c6973746564206d656d6265727320696e20606d6f646560142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e0c4c446973706174636861626c652063616c6c732e005501456163682076617269616e74206f66207468697320656e756d206d61707320746f206120646973706174636861626c652066756e6374696f6e2066726f6d20746865206173736f636961746564206d6f64756c652e6d06085870616c6c65745f70726f706f73616c735f636f6465781043616c6c0404540001043c6372656174655f70726f706f73616c08016c67656e6572616c5f70726f706f73616c5f706172616d65746572734d03017047656e6572616c50726f706f73616c506172616d65746572733c543e00014070726f706f73616c5f64657461696c735103015050726f706f73616c44657461696c734f663c543e000034450143726561746520612070726f706f73616c2c207468652074797065206f662070726f706f73616c20646570656e6473206f6e20746865206070726f706f73616c5f64657461696c73602076617269616e7400203c7765696768743e002423232057656967687458604f202854202b2044202b204929602077686572653a902d2060546020697320746865207469746c652073697a6520696e206b696c6f6279746573a82d2060446020697320746865206465736372697074696f6e2073697a6520696e206b696c6f6279746573e02d20604960206973207468652073697a65206f6620616e7920706172616d6574657220696e206070726f706f73616c5f64657461696c736084202028696e206b696c6f62797465732069662069742773206d6574616461746129142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e0c4c446973706174636861626c652063616c6c732e005501456163682076617269616e74206f66207468697320656e756d206d61707320746f206120646973706174636861626c652066756e6374696f6e2066726f6d20746865206173736f636961746564206d6f64756c652e7106085070616c6c65745f776f726b696e675f67726f75701043616c6c08045400044900014c2c6164645f6f70656e696e6710012c6465736372697074696f6e30011c5665633c75383e0001306f70656e696e675f747970658103012c4f70656e696e67547970650001307374616b655f706f6c696379610301a45374616b65506f6c6963793c543a3a426c6f636b4e756d6265722c2042616c616e63654f663c543e3e0001407265776172645f7065725f626c6f636b450101504f7074696f6e3c42616c616e63654f663c543e3e00002cc44164642061206a6f62206f70656e696e6720666f72206120726567756c617220776f726b65722f6c65616420726f6c652e490152657175697265207369676e6564206c6561646572206f726967696e206f722074686520726f6f742028746f20616464206f70656e696e6720666f7220746865206c656164657220706f736974696f6e292e002823203c7765696768743e002423232057656967687438604f20284429602077686572653abc2d20604460206973207468652073697a65206f6620606465736372697074696f6e6020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e406170706c795f6f6e5f6f70656e696e67040104708503016c4170706c794f6e4f70656e696e67506172616d65746572733c543e000128684170706c79206f6e206120776f726b6572206f70656e696e672e002823203c7765696768743e002423232057656967687438604f20284429602077686572653ac42d20604460206973207468652073697a65206f662060702e6465736372697074696f6e6020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e3066696c6c5f6f70656e696e670801286f70656e696e675f69642801244f70656e696e6749640001687375636365737366756c5f6170706c69636174696f6e5f6964736901015c42547265655365743c4170706c69636174696f6e49643e000228ac46696c6c206f70656e696e6720666f722074686520726567756c61722f6c65616420706f736974696f6e2e4d0152657175697265207369676e6564206c6561646572206f726967696e206f722074686520726f6f742028746f2066696c6c206f70656e696e6720666f7220746865206c656164657220706f736974696f6e292e2823203c7765696768743e002423232057656967687438604f20284129602077686572653acc2d2060416020697320746865206c656e677468206f6620607375636365737366756c5f6170706c69636174696f6e5f69647360142d2044423a242020202d204f2841292c23203c2f7765696768743e4c7570646174655f726f6c655f6163636f756e74080124776f726b65725f696428012c576f726b657249643c543e00014c6e65775f726f6c655f6163636f756e745f6964000130543a3a4163636f756e744964000324150155706461746520746865206173736f63696174656420726f6c65206163636f756e74206f66207468652061637469766520726567756c617220776f726b65722f6c6561642e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e286c656176655f726f6c65080124776f726b65725f696428012c576f726b657249643c543e000124726174696f6e616c653101013c4f7074696f6e3c5665633c75383e3e000424904c656176652074686520726f6c65206279207468652061637469766520776f726b65722e2823203c7765696768743e002423232057656967687438604f20285229602077686572653ab42d20605260206973207468652073697a65206f662060726174696f6e616c656020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e387465726d696e6174655f726f6c650c0124776f726b65725f696428012c576f726b657249643c543e00011c70656e616c7479450101504f7074696f6e3c42616c616e63654f663c543e3e000124726174696f6e616c653101013c4f7074696f6e3c5665633c75383e3e000528a05465726d696e617465207468652061637469766520776f726b657220627920746865206c6561642e25015265717569726573207369676e6564206c6561646572206f726967696e206f722074686520726f6f742028746f207465726d696e61746520746865206c656164657220726f6c65292e2823203c7765696768743e002423232057656967687438604f20285029602077686572653ad82d20605060206973207468652073697a65206070656e616c74792e736c617368696e675f746578746020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e2c736c6173685f7374616b650c0124776f726b65725f696428012c576f726b657249643c543e00011c70656e616c747918013042616c616e63654f663c543e000124726174696f6e616c653101013c4f7074696f6e3c5665633c75383e3e00062c7d01536c61736865732074686520726567756c617220776f726b6572207374616b652c2064656d616e64732061206c6561646572206f726967696e2e204e6f206c696d6974732c206e6f20616374696f6e73206f6e207a65726f207374616b652e3d01496620736c617368696e672062616c616e63652067726561746572207468616e20746865206578697374696e67207374616b65202d207374616b6520697320736c617368656420746f207a65726f2e19015265717569726573207369676e6564206c6561646572206f726967696e206f722074686520726f6f742028746f20736c61736820746865206c6561646572207374616b65292e2823203c7765696768743e002423232057656967687438604f20285029602077686572653ae82d20605060206973207468652073697a65206f66206070656e616c6974792e736c617368696e675f746578746020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e3864656372656173655f7374616b65080124776f726b65725f696428012c576f726b657249643c543e00014c7374616b655f62616c616e63655f64656c746118013042616c616e63654f663c543e00073021014465637265617365732074686520726567756c617220776f726b65722f6c656164207374616b6520616e642072657475726e73207468652072656d61696e64657220746f207468653901776f726b6572207374616b696e675f6163636f756e745f69642e2043616e2062652064656372656173656420746f207a65726f2c206e6f20616374696f6e73206f6e207a65726f207374616b652e944163636570747320746865207374616b6520616d6f756e7420746f2064656372656173652e25015265717569726573207369676e6564206c6561646572206f726967696e206f722074686520726f6f742028746f20646563726561736520746865206c6561646572207374616b65292e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e38696e6372656173655f7374616b65080124776f726b65725f696428012c576f726b657249643c543e00014c7374616b655f62616c616e63655f64656c746118013042616c616e63654f663c543e0008280501496e637265617365732074686520726567756c617220776f726b65722f6c656164207374616b652c2064656d616e6473206120776f726b6572206f726967696e2e6d014c6f636b7320746f6b656e732066726f6d2074686520776f726b6572207374616b696e675f6163636f756e745f696420657175616c20746f206e6577207374616b652e204e6f206c696d697473206f6e20746865207374616b652e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e5077697468647261775f6170706c69636174696f6e0401386170706c69636174696f6e5f69642801344170706c69636174696f6e4964000924010157697468647261772074686520776f726b6572206170706c69636174696f6e2e2043616e20626520646f6e652062792074686520776f726b6572206f6e6c792e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e3863616e63656c5f6f70656e696e670401286f70656e696e675f69642801244f70656e696e674964000a28dc43616e63656c20616e206f70656e696e6720666f722074686520726567756c617220776f726b65722f6c65616420706f736974696f6e2e550152657175697265207369676e6564206c6561646572206f726967696e206f722074686520726f6f742028746f2063616e63656c206f70656e696e6720666f7220746865206c656164657220706f736974696f6e292e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e287365745f6275646765740401286e65775f62756467657418013042616c616e63654f663c543e000b28a0536574732061206e65772062756467657420666f722074686520776f726b696e672067726f75702e54526571756972657320726f6f74206f726967696e2e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e547570646174655f7265776172645f6163636f756e74080124776f726b65725f696428012c576f726b657249643c543e0001546e65775f7265776172645f6163636f756e745f6964000130543a3a4163636f756e744964000c2469015570646174652074686520726577617264206163636f756e74206173736f6369617465642077697468206120736574207265776172642072656c6174696f6e7368697020666f72207468652061637469766520776f726b65722e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e507570646174655f7265776172645f616d6f756e74080124776f726b65725f696428012c576f726b657249643c543e0001407265776172645f7065725f626c6f636b450101504f7074696f6e3c42616c616e63654f663c543e3e000d28c855706461746520746865207265776172642070657220626c6f636b20666f72207468652061637469766520776f726b65722e310152657175697265207369676e6564206c6561646572206f726967696e206f722074686520726f6f742028746f20757064617465206c656164657227732072657761726420616d6f756e74292e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e3c7365745f7374617475735f7465787404012c7374617475735f746578743101013c4f7074696f6e3c5665633c75383e3e000e30b4536574732061206e657720737461747573207465787420666f722074686520776f726b696e672067726f75702e54526571756972657320726f6f74206f726967696e2e002823203c7765696768743e002423232057656967687438604f20285329602077686572653a4d012d20605360206973207468652073697a65206f662074686520636f6e74656e7473206f6620607374617475735f746578746020696e206b696c6f6279746573207768656e206974206973206e6f74206e6f6e6500142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e447370656e645f66726f6d5f6275646765740c01286163636f756e745f6964000130543a3a4163636f756e744964000118616d6f756e7418013042616c616e63654f663c543e000124726174696f6e616c653101013c4f7074696f6e3c5665633c75383e3e000f28a85472616e73666572732073706563696669656420616d6f756e7420746f20616e79206163636f756e742e5c5265717569726573206c6561646572206f726967696e2e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e6466756e645f776f726b696e675f67726f75705f6275646765740c01246d656d6265725f696428012c4d656d62657249643c543e000118616d6f756e7418013042616c616e63654f663c543e000124726174696f6e616c6530011c5665633c75383e0010209846756e6420776f726b696e672067726f7570206275646765742062792061206d656d6265722e203c7765696768743e0024232320576569676874c4604f202831296020446f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d6574657273142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e2c6c6561645f72656d61726b04010c6d736730011c5665633c75383e0011284c4c6561642072656d61726b206d657373616765002823203c7765696768743e002423232057656967687438604f20284d29602077686572653a9c2d20604d60206973207468652073697a65206f6620606d73676020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e34776f726b65725f72656d61726b080124776f726b65725f696428012c576f726b657249643c543e00010c6d736730011c5665633c75383e00122854576f726b65722072656d61726b206d657373616765002823203c7765696768743e002423232057656967687438604f20284d29602077686572653a9c2d20604d60206973207468652073697a65206f6620606d73676020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e0c4c446973706174636861626c652063616c6c732e005501456163682076617269616e74206f66207468697320656e756d206d61707320746f206120646973706174636861626c652066756e6374696f6e2066726f6d20746865206173736f636961746564206d6f64756c652e7506085070616c6c65745f776f726b696e675f67726f75701043616c6c08045400044900014c2c6164645f6f70656e696e6710012c6465736372697074696f6e30011c5665633c75383e0001306f70656e696e675f747970658103012c4f70656e696e67547970650001307374616b655f706f6c696379610301a45374616b65506f6c6963793c543a3a426c6f636b4e756d6265722c2042616c616e63654f663c543e3e0001407265776172645f7065725f626c6f636b450101504f7074696f6e3c42616c616e63654f663c543e3e00002cc44164642061206a6f62206f70656e696e6720666f72206120726567756c617220776f726b65722f6c65616420726f6c652e490152657175697265207369676e6564206c6561646572206f726967696e206f722074686520726f6f742028746f20616464206f70656e696e6720666f7220746865206c656164657220706f736974696f6e292e002823203c7765696768743e002423232057656967687438604f20284429602077686572653abc2d20604460206973207468652073697a65206f6620606465736372697074696f6e6020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e406170706c795f6f6e5f6f70656e696e67040104708503016c4170706c794f6e4f70656e696e67506172616d65746572733c543e000128684170706c79206f6e206120776f726b6572206f70656e696e672e002823203c7765696768743e002423232057656967687438604f20284429602077686572653ac42d20604460206973207468652073697a65206f662060702e6465736372697074696f6e6020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e3066696c6c5f6f70656e696e670801286f70656e696e675f69642801244f70656e696e6749640001687375636365737366756c5f6170706c69636174696f6e5f6964736901015c42547265655365743c4170706c69636174696f6e49643e000228ac46696c6c206f70656e696e6720666f722074686520726567756c61722f6c65616420706f736974696f6e2e4d0152657175697265207369676e6564206c6561646572206f726967696e206f722074686520726f6f742028746f2066696c6c206f70656e696e6720666f7220746865206c656164657220706f736974696f6e292e2823203c7765696768743e002423232057656967687438604f20284129602077686572653acc2d2060416020697320746865206c656e677468206f6620607375636365737366756c5f6170706c69636174696f6e5f69647360142d2044423a242020202d204f2841292c23203c2f7765696768743e4c7570646174655f726f6c655f6163636f756e74080124776f726b65725f696428012c576f726b657249643c543e00014c6e65775f726f6c655f6163636f756e745f6964000130543a3a4163636f756e744964000324150155706461746520746865206173736f63696174656420726f6c65206163636f756e74206f66207468652061637469766520726567756c617220776f726b65722f6c6561642e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e286c656176655f726f6c65080124776f726b65725f696428012c576f726b657249643c543e000124726174696f6e616c653101013c4f7074696f6e3c5665633c75383e3e000424904c656176652074686520726f6c65206279207468652061637469766520776f726b65722e2823203c7765696768743e002423232057656967687438604f20285229602077686572653ab42d20605260206973207468652073697a65206f662060726174696f6e616c656020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e387465726d696e6174655f726f6c650c0124776f726b65725f696428012c576f726b657249643c543e00011c70656e616c7479450101504f7074696f6e3c42616c616e63654f663c543e3e000124726174696f6e616c653101013c4f7074696f6e3c5665633c75383e3e000528a05465726d696e617465207468652061637469766520776f726b657220627920746865206c6561642e25015265717569726573207369676e6564206c6561646572206f726967696e206f722074686520726f6f742028746f207465726d696e61746520746865206c656164657220726f6c65292e2823203c7765696768743e002423232057656967687438604f20285029602077686572653ad82d20605060206973207468652073697a65206070656e616c74792e736c617368696e675f746578746020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e2c736c6173685f7374616b650c0124776f726b65725f696428012c576f726b657249643c543e00011c70656e616c747918013042616c616e63654f663c543e000124726174696f6e616c653101013c4f7074696f6e3c5665633c75383e3e00062c7d01536c61736865732074686520726567756c617220776f726b6572207374616b652c2064656d616e64732061206c6561646572206f726967696e2e204e6f206c696d6974732c206e6f20616374696f6e73206f6e207a65726f207374616b652e3d01496620736c617368696e672062616c616e63652067726561746572207468616e20746865206578697374696e67207374616b65202d207374616b6520697320736c617368656420746f207a65726f2e19015265717569726573207369676e6564206c6561646572206f726967696e206f722074686520726f6f742028746f20736c61736820746865206c6561646572207374616b65292e2823203c7765696768743e002423232057656967687438604f20285029602077686572653ae82d20605060206973207468652073697a65206f66206070656e616c6974792e736c617368696e675f746578746020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e3864656372656173655f7374616b65080124776f726b65725f696428012c576f726b657249643c543e00014c7374616b655f62616c616e63655f64656c746118013042616c616e63654f663c543e00073021014465637265617365732074686520726567756c617220776f726b65722f6c656164207374616b6520616e642072657475726e73207468652072656d61696e64657220746f207468653901776f726b6572207374616b696e675f6163636f756e745f69642e2043616e2062652064656372656173656420746f207a65726f2c206e6f20616374696f6e73206f6e207a65726f207374616b652e944163636570747320746865207374616b6520616d6f756e7420746f2064656372656173652e25015265717569726573207369676e6564206c6561646572206f726967696e206f722074686520726f6f742028746f20646563726561736520746865206c6561646572207374616b65292e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e38696e6372656173655f7374616b65080124776f726b65725f696428012c576f726b657249643c543e00014c7374616b655f62616c616e63655f64656c746118013042616c616e63654f663c543e0008280501496e637265617365732074686520726567756c617220776f726b65722f6c656164207374616b652c2064656d616e6473206120776f726b6572206f726967696e2e6d014c6f636b7320746f6b656e732066726f6d2074686520776f726b6572207374616b696e675f6163636f756e745f696420657175616c20746f206e6577207374616b652e204e6f206c696d697473206f6e20746865207374616b652e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e5077697468647261775f6170706c69636174696f6e0401386170706c69636174696f6e5f69642801344170706c69636174696f6e4964000924010157697468647261772074686520776f726b6572206170706c69636174696f6e2e2043616e20626520646f6e652062792074686520776f726b6572206f6e6c792e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e3863616e63656c5f6f70656e696e670401286f70656e696e675f69642801244f70656e696e674964000a28dc43616e63656c20616e206f70656e696e6720666f722074686520726567756c617220776f726b65722f6c65616420706f736974696f6e2e550152657175697265207369676e6564206c6561646572206f726967696e206f722074686520726f6f742028746f2063616e63656c206f70656e696e6720666f7220746865206c656164657220706f736974696f6e292e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e287365745f6275646765740401286e65775f62756467657418013042616c616e63654f663c543e000b28a0536574732061206e65772062756467657420666f722074686520776f726b696e672067726f75702e54526571756972657320726f6f74206f726967696e2e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e547570646174655f7265776172645f6163636f756e74080124776f726b65725f696428012c576f726b657249643c543e0001546e65775f7265776172645f6163636f756e745f6964000130543a3a4163636f756e744964000c2469015570646174652074686520726577617264206163636f756e74206173736f6369617465642077697468206120736574207265776172642072656c6174696f6e7368697020666f72207468652061637469766520776f726b65722e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e507570646174655f7265776172645f616d6f756e74080124776f726b65725f696428012c576f726b657249643c543e0001407265776172645f7065725f626c6f636b450101504f7074696f6e3c42616c616e63654f663c543e3e000d28c855706461746520746865207265776172642070657220626c6f636b20666f72207468652061637469766520776f726b65722e310152657175697265207369676e6564206c6561646572206f726967696e206f722074686520726f6f742028746f20757064617465206c656164657227732072657761726420616d6f756e74292e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e3c7365745f7374617475735f7465787404012c7374617475735f746578743101013c4f7074696f6e3c5665633c75383e3e000e30b4536574732061206e657720737461747573207465787420666f722074686520776f726b696e672067726f75702e54526571756972657320726f6f74206f726967696e2e002823203c7765696768743e002423232057656967687438604f20285329602077686572653a4d012d20605360206973207468652073697a65206f662074686520636f6e74656e7473206f6620607374617475735f746578746020696e206b696c6f6279746573207768656e206974206973206e6f74206e6f6e6500142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e447370656e645f66726f6d5f6275646765740c01286163636f756e745f6964000130543a3a4163636f756e744964000118616d6f756e7418013042616c616e63654f663c543e000124726174696f6e616c653101013c4f7074696f6e3c5665633c75383e3e000f28a85472616e73666572732073706563696669656420616d6f756e7420746f20616e79206163636f756e742e5c5265717569726573206c6561646572206f726967696e2e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e6466756e645f776f726b696e675f67726f75705f6275646765740c01246d656d6265725f696428012c4d656d62657249643c543e000118616d6f756e7418013042616c616e63654f663c543e000124726174696f6e616c6530011c5665633c75383e0010209846756e6420776f726b696e672067726f7570206275646765742062792061206d656d6265722e203c7765696768743e0024232320576569676874c4604f202831296020446f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d6574657273142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e2c6c6561645f72656d61726b04010c6d736730011c5665633c75383e0011284c4c6561642072656d61726b206d657373616765002823203c7765696768743e002423232057656967687438604f20284d29602077686572653a9c2d20604d60206973207468652073697a65206f6620606d73676020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e34776f726b65725f72656d61726b080124776f726b65725f696428012c576f726b657249643c543e00010c6d736730011c5665633c75383e00122854576f726b65722072656d61726b206d657373616765002823203c7765696768743e002423232057656967687438604f20284d29602077686572653a9c2d20604d60206973207468652073697a65206f6620606d73676020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e0c4c446973706174636861626c652063616c6c732e005501456163682076617269616e74206f66207468697320656e756d206d61707320746f206120646973706174636861626c652066756e6374696f6e2066726f6d20746865206173736f636961746564206d6f64756c652e7906085070616c6c65745f776f726b696e675f67726f75701043616c6c08045400044900014c2c6164645f6f70656e696e6710012c6465736372697074696f6e30011c5665633c75383e0001306f70656e696e675f747970658103012c4f70656e696e67547970650001307374616b655f706f6c696379610301a45374616b65506f6c6963793c543a3a426c6f636b4e756d6265722c2042616c616e63654f663c543e3e0001407265776172645f7065725f626c6f636b450101504f7074696f6e3c42616c616e63654f663c543e3e00002cc44164642061206a6f62206f70656e696e6720666f72206120726567756c617220776f726b65722f6c65616420726f6c652e490152657175697265207369676e6564206c6561646572206f726967696e206f722074686520726f6f742028746f20616464206f70656e696e6720666f7220746865206c656164657220706f736974696f6e292e002823203c7765696768743e002423232057656967687438604f20284429602077686572653abc2d20604460206973207468652073697a65206f6620606465736372697074696f6e6020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e406170706c795f6f6e5f6f70656e696e67040104708503016c4170706c794f6e4f70656e696e67506172616d65746572733c543e000128684170706c79206f6e206120776f726b6572206f70656e696e672e002823203c7765696768743e002423232057656967687438604f20284429602077686572653ac42d20604460206973207468652073697a65206f662060702e6465736372697074696f6e6020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e3066696c6c5f6f70656e696e670801286f70656e696e675f69642801244f70656e696e6749640001687375636365737366756c5f6170706c69636174696f6e5f6964736901015c42547265655365743c4170706c69636174696f6e49643e000228ac46696c6c206f70656e696e6720666f722074686520726567756c61722f6c65616420706f736974696f6e2e4d0152657175697265207369676e6564206c6561646572206f726967696e206f722074686520726f6f742028746f2066696c6c206f70656e696e6720666f7220746865206c656164657220706f736974696f6e292e2823203c7765696768743e002423232057656967687438604f20284129602077686572653acc2d2060416020697320746865206c656e677468206f6620607375636365737366756c5f6170706c69636174696f6e5f69647360142d2044423a242020202d204f2841292c23203c2f7765696768743e4c7570646174655f726f6c655f6163636f756e74080124776f726b65725f696428012c576f726b657249643c543e00014c6e65775f726f6c655f6163636f756e745f6964000130543a3a4163636f756e744964000324150155706461746520746865206173736f63696174656420726f6c65206163636f756e74206f66207468652061637469766520726567756c617220776f726b65722f6c6561642e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e286c656176655f726f6c65080124776f726b65725f696428012c576f726b657249643c543e000124726174696f6e616c653101013c4f7074696f6e3c5665633c75383e3e000424904c656176652074686520726f6c65206279207468652061637469766520776f726b65722e2823203c7765696768743e002423232057656967687438604f20285229602077686572653ab42d20605260206973207468652073697a65206f662060726174696f6e616c656020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e387465726d696e6174655f726f6c650c0124776f726b65725f696428012c576f726b657249643c543e00011c70656e616c7479450101504f7074696f6e3c42616c616e63654f663c543e3e000124726174696f6e616c653101013c4f7074696f6e3c5665633c75383e3e000528a05465726d696e617465207468652061637469766520776f726b657220627920746865206c6561642e25015265717569726573207369676e6564206c6561646572206f726967696e206f722074686520726f6f742028746f207465726d696e61746520746865206c656164657220726f6c65292e2823203c7765696768743e002423232057656967687438604f20285029602077686572653ad82d20605060206973207468652073697a65206070656e616c74792e736c617368696e675f746578746020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e2c736c6173685f7374616b650c0124776f726b65725f696428012c576f726b657249643c543e00011c70656e616c747918013042616c616e63654f663c543e000124726174696f6e616c653101013c4f7074696f6e3c5665633c75383e3e00062c7d01536c61736865732074686520726567756c617220776f726b6572207374616b652c2064656d616e64732061206c6561646572206f726967696e2e204e6f206c696d6974732c206e6f20616374696f6e73206f6e207a65726f207374616b652e3d01496620736c617368696e672062616c616e63652067726561746572207468616e20746865206578697374696e67207374616b65202d207374616b6520697320736c617368656420746f207a65726f2e19015265717569726573207369676e6564206c6561646572206f726967696e206f722074686520726f6f742028746f20736c61736820746865206c6561646572207374616b65292e2823203c7765696768743e002423232057656967687438604f20285029602077686572653ae82d20605060206973207468652073697a65206f66206070656e616c6974792e736c617368696e675f746578746020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e3864656372656173655f7374616b65080124776f726b65725f696428012c576f726b657249643c543e00014c7374616b655f62616c616e63655f64656c746118013042616c616e63654f663c543e00073021014465637265617365732074686520726567756c617220776f726b65722f6c656164207374616b6520616e642072657475726e73207468652072656d61696e64657220746f207468653901776f726b6572207374616b696e675f6163636f756e745f69642e2043616e2062652064656372656173656420746f207a65726f2c206e6f20616374696f6e73206f6e207a65726f207374616b652e944163636570747320746865207374616b6520616d6f756e7420746f2064656372656173652e25015265717569726573207369676e6564206c6561646572206f726967696e206f722074686520726f6f742028746f20646563726561736520746865206c6561646572207374616b65292e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e38696e6372656173655f7374616b65080124776f726b65725f696428012c576f726b657249643c543e00014c7374616b655f62616c616e63655f64656c746118013042616c616e63654f663c543e0008280501496e637265617365732074686520726567756c617220776f726b65722f6c656164207374616b652c2064656d616e6473206120776f726b6572206f726967696e2e6d014c6f636b7320746f6b656e732066726f6d2074686520776f726b6572207374616b696e675f6163636f756e745f696420657175616c20746f206e6577207374616b652e204e6f206c696d697473206f6e20746865207374616b652e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e5077697468647261775f6170706c69636174696f6e0401386170706c69636174696f6e5f69642801344170706c69636174696f6e4964000924010157697468647261772074686520776f726b6572206170706c69636174696f6e2e2043616e20626520646f6e652062792074686520776f726b6572206f6e6c792e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e3863616e63656c5f6f70656e696e670401286f70656e696e675f69642801244f70656e696e674964000a28dc43616e63656c20616e206f70656e696e6720666f722074686520726567756c617220776f726b65722f6c65616420706f736974696f6e2e550152657175697265207369676e6564206c6561646572206f726967696e206f722074686520726f6f742028746f2063616e63656c206f70656e696e6720666f7220746865206c656164657220706f736974696f6e292e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e287365745f6275646765740401286e65775f62756467657418013042616c616e63654f663c543e000b28a0536574732061206e65772062756467657420666f722074686520776f726b696e672067726f75702e54526571756972657320726f6f74206f726967696e2e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e547570646174655f7265776172645f6163636f756e74080124776f726b65725f696428012c576f726b657249643c543e0001546e65775f7265776172645f6163636f756e745f6964000130543a3a4163636f756e744964000c2469015570646174652074686520726577617264206163636f756e74206173736f6369617465642077697468206120736574207265776172642072656c6174696f6e7368697020666f72207468652061637469766520776f726b65722e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e507570646174655f7265776172645f616d6f756e74080124776f726b65725f696428012c576f726b657249643c543e0001407265776172645f7065725f626c6f636b450101504f7074696f6e3c42616c616e63654f663c543e3e000d28c855706461746520746865207265776172642070657220626c6f636b20666f72207468652061637469766520776f726b65722e310152657175697265207369676e6564206c6561646572206f726967696e206f722074686520726f6f742028746f20757064617465206c656164657227732072657761726420616d6f756e74292e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e3c7365745f7374617475735f7465787404012c7374617475735f746578743101013c4f7074696f6e3c5665633c75383e3e000e30b4536574732061206e657720737461747573207465787420666f722074686520776f726b696e672067726f75702e54526571756972657320726f6f74206f726967696e2e002823203c7765696768743e002423232057656967687438604f20285329602077686572653a4d012d20605360206973207468652073697a65206f662074686520636f6e74656e7473206f6620607374617475735f746578746020696e206b696c6f6279746573207768656e206974206973206e6f74206e6f6e6500142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e447370656e645f66726f6d5f6275646765740c01286163636f756e745f6964000130543a3a4163636f756e744964000118616d6f756e7418013042616c616e63654f663c543e000124726174696f6e616c653101013c4f7074696f6e3c5665633c75383e3e000f28a85472616e73666572732073706563696669656420616d6f756e7420746f20616e79206163636f756e742e5c5265717569726573206c6561646572206f726967696e2e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e6466756e645f776f726b696e675f67726f75705f6275646765740c01246d656d6265725f696428012c4d656d62657249643c543e000118616d6f756e7418013042616c616e63654f663c543e000124726174696f6e616c6530011c5665633c75383e0010209846756e6420776f726b696e672067726f7570206275646765742062792061206d656d6265722e203c7765696768743e0024232320576569676874c4604f202831296020446f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d6574657273142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e2c6c6561645f72656d61726b04010c6d736730011c5665633c75383e0011284c4c6561642072656d61726b206d657373616765002823203c7765696768743e002423232057656967687438604f20284d29602077686572653a9c2d20604d60206973207468652073697a65206f6620606d73676020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e34776f726b65725f72656d61726b080124776f726b65725f696428012c576f726b657249643c543e00010c6d736730011c5665633c75383e00122854576f726b65722072656d61726b206d657373616765002823203c7765696768743e002423232057656967687438604f20284d29602077686572653a9c2d20604d60206973207468652073697a65206f6620606d73676020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e0c4c446973706174636861626c652063616c6c732e005501456163682076617269616e74206f66207468697320656e756d206d61707320746f206120646973706174636861626c652066756e6374696f6e2066726f6d20746865206173736f636961746564206d6f64756c652e7d06085070616c6c65745f776f726b696e675f67726f75701043616c6c08045400044900014c2c6164645f6f70656e696e6710012c6465736372697074696f6e30011c5665633c75383e0001306f70656e696e675f747970658103012c4f70656e696e67547970650001307374616b655f706f6c696379610301a45374616b65506f6c6963793c543a3a426c6f636b4e756d6265722c2042616c616e63654f663c543e3e0001407265776172645f7065725f626c6f636b450101504f7074696f6e3c42616c616e63654f663c543e3e00002cc44164642061206a6f62206f70656e696e6720666f72206120726567756c617220776f726b65722f6c65616420726f6c652e490152657175697265207369676e6564206c6561646572206f726967696e206f722074686520726f6f742028746f20616464206f70656e696e6720666f7220746865206c656164657220706f736974696f6e292e002823203c7765696768743e002423232057656967687438604f20284429602077686572653abc2d20604460206973207468652073697a65206f6620606465736372697074696f6e6020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e406170706c795f6f6e5f6f70656e696e67040104708503016c4170706c794f6e4f70656e696e67506172616d65746572733c543e000128684170706c79206f6e206120776f726b6572206f70656e696e672e002823203c7765696768743e002423232057656967687438604f20284429602077686572653ac42d20604460206973207468652073697a65206f662060702e6465736372697074696f6e6020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e3066696c6c5f6f70656e696e670801286f70656e696e675f69642801244f70656e696e6749640001687375636365737366756c5f6170706c69636174696f6e5f6964736901015c42547265655365743c4170706c69636174696f6e49643e000228ac46696c6c206f70656e696e6720666f722074686520726567756c61722f6c65616420706f736974696f6e2e4d0152657175697265207369676e6564206c6561646572206f726967696e206f722074686520726f6f742028746f2066696c6c206f70656e696e6720666f7220746865206c656164657220706f736974696f6e292e2823203c7765696768743e002423232057656967687438604f20284129602077686572653acc2d2060416020697320746865206c656e677468206f6620607375636365737366756c5f6170706c69636174696f6e5f69647360142d2044423a242020202d204f2841292c23203c2f7765696768743e4c7570646174655f726f6c655f6163636f756e74080124776f726b65725f696428012c576f726b657249643c543e00014c6e65775f726f6c655f6163636f756e745f6964000130543a3a4163636f756e744964000324150155706461746520746865206173736f63696174656420726f6c65206163636f756e74206f66207468652061637469766520726567756c617220776f726b65722f6c6561642e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e286c656176655f726f6c65080124776f726b65725f696428012c576f726b657249643c543e000124726174696f6e616c653101013c4f7074696f6e3c5665633c75383e3e000424904c656176652074686520726f6c65206279207468652061637469766520776f726b65722e2823203c7765696768743e002423232057656967687438604f20285229602077686572653ab42d20605260206973207468652073697a65206f662060726174696f6e616c656020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e387465726d696e6174655f726f6c650c0124776f726b65725f696428012c576f726b657249643c543e00011c70656e616c7479450101504f7074696f6e3c42616c616e63654f663c543e3e000124726174696f6e616c653101013c4f7074696f6e3c5665633c75383e3e000528a05465726d696e617465207468652061637469766520776f726b657220627920746865206c6561642e25015265717569726573207369676e6564206c6561646572206f726967696e206f722074686520726f6f742028746f207465726d696e61746520746865206c656164657220726f6c65292e2823203c7765696768743e002423232057656967687438604f20285029602077686572653ad82d20605060206973207468652073697a65206070656e616c74792e736c617368696e675f746578746020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e2c736c6173685f7374616b650c0124776f726b65725f696428012c576f726b657249643c543e00011c70656e616c747918013042616c616e63654f663c543e000124726174696f6e616c653101013c4f7074696f6e3c5665633c75383e3e00062c7d01536c61736865732074686520726567756c617220776f726b6572207374616b652c2064656d616e64732061206c6561646572206f726967696e2e204e6f206c696d6974732c206e6f20616374696f6e73206f6e207a65726f207374616b652e3d01496620736c617368696e672062616c616e63652067726561746572207468616e20746865206578697374696e67207374616b65202d207374616b6520697320736c617368656420746f207a65726f2e19015265717569726573207369676e6564206c6561646572206f726967696e206f722074686520726f6f742028746f20736c61736820746865206c6561646572207374616b65292e2823203c7765696768743e002423232057656967687438604f20285029602077686572653ae82d20605060206973207468652073697a65206f66206070656e616c6974792e736c617368696e675f746578746020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e3864656372656173655f7374616b65080124776f726b65725f696428012c576f726b657249643c543e00014c7374616b655f62616c616e63655f64656c746118013042616c616e63654f663c543e00073021014465637265617365732074686520726567756c617220776f726b65722f6c656164207374616b6520616e642072657475726e73207468652072656d61696e64657220746f207468653901776f726b6572207374616b696e675f6163636f756e745f69642e2043616e2062652064656372656173656420746f207a65726f2c206e6f20616374696f6e73206f6e207a65726f207374616b652e944163636570747320746865207374616b6520616d6f756e7420746f2064656372656173652e25015265717569726573207369676e6564206c6561646572206f726967696e206f722074686520726f6f742028746f20646563726561736520746865206c6561646572207374616b65292e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e38696e6372656173655f7374616b65080124776f726b65725f696428012c576f726b657249643c543e00014c7374616b655f62616c616e63655f64656c746118013042616c616e63654f663c543e0008280501496e637265617365732074686520726567756c617220776f726b65722f6c656164207374616b652c2064656d616e6473206120776f726b6572206f726967696e2e6d014c6f636b7320746f6b656e732066726f6d2074686520776f726b6572207374616b696e675f6163636f756e745f696420657175616c20746f206e6577207374616b652e204e6f206c696d697473206f6e20746865207374616b652e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e5077697468647261775f6170706c69636174696f6e0401386170706c69636174696f6e5f69642801344170706c69636174696f6e4964000924010157697468647261772074686520776f726b6572206170706c69636174696f6e2e2043616e20626520646f6e652062792074686520776f726b6572206f6e6c792e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e3863616e63656c5f6f70656e696e670401286f70656e696e675f69642801244f70656e696e674964000a28dc43616e63656c20616e206f70656e696e6720666f722074686520726567756c617220776f726b65722f6c65616420706f736974696f6e2e550152657175697265207369676e6564206c6561646572206f726967696e206f722074686520726f6f742028746f2063616e63656c206f70656e696e6720666f7220746865206c656164657220706f736974696f6e292e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e287365745f6275646765740401286e65775f62756467657418013042616c616e63654f663c543e000b28a0536574732061206e65772062756467657420666f722074686520776f726b696e672067726f75702e54526571756972657320726f6f74206f726967696e2e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e547570646174655f7265776172645f6163636f756e74080124776f726b65725f696428012c576f726b657249643c543e0001546e65775f7265776172645f6163636f756e745f6964000130543a3a4163636f756e744964000c2469015570646174652074686520726577617264206163636f756e74206173736f6369617465642077697468206120736574207265776172642072656c6174696f6e7368697020666f72207468652061637469766520776f726b65722e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e507570646174655f7265776172645f616d6f756e74080124776f726b65725f696428012c576f726b657249643c543e0001407265776172645f7065725f626c6f636b450101504f7074696f6e3c42616c616e63654f663c543e3e000d28c855706461746520746865207265776172642070657220626c6f636b20666f72207468652061637469766520776f726b65722e310152657175697265207369676e6564206c6561646572206f726967696e206f722074686520726f6f742028746f20757064617465206c656164657227732072657761726420616d6f756e74292e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e3c7365745f7374617475735f7465787404012c7374617475735f746578743101013c4f7074696f6e3c5665633c75383e3e000e30b4536574732061206e657720737461747573207465787420666f722074686520776f726b696e672067726f75702e54526571756972657320726f6f74206f726967696e2e002823203c7765696768743e002423232057656967687438604f20285329602077686572653a4d012d20605360206973207468652073697a65206f662074686520636f6e74656e7473206f6620607374617475735f746578746020696e206b696c6f6279746573207768656e206974206973206e6f74206e6f6e6500142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e447370656e645f66726f6d5f6275646765740c01286163636f756e745f6964000130543a3a4163636f756e744964000118616d6f756e7418013042616c616e63654f663c543e000124726174696f6e616c653101013c4f7074696f6e3c5665633c75383e3e000f28a85472616e73666572732073706563696669656420616d6f756e7420746f20616e79206163636f756e742e5c5265717569726573206c6561646572206f726967696e2e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e6466756e645f776f726b696e675f67726f75705f6275646765740c01246d656d6265725f696428012c4d656d62657249643c543e000118616d6f756e7418013042616c616e63654f663c543e000124726174696f6e616c6530011c5665633c75383e0010209846756e6420776f726b696e672067726f7570206275646765742062792061206d656d6265722e203c7765696768743e0024232320576569676874c4604f202831296020446f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d6574657273142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e2c6c6561645f72656d61726b04010c6d736730011c5665633c75383e0011284c4c6561642072656d61726b206d657373616765002823203c7765696768743e002423232057656967687438604f20284d29602077686572653a9c2d20604d60206973207468652073697a65206f6620606d73676020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e34776f726b65725f72656d61726b080124776f726b65725f696428012c576f726b657249643c543e00010c6d736730011c5665633c75383e00122854576f726b65722072656d61726b206d657373616765002823203c7765696768743e002423232057656967687438604f20284d29602077686572653a9c2d20604d60206973207468652073697a65206f6620606d73676020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e0c4c446973706174636861626c652063616c6c732e005501456163682076617269616e74206f66207468697320656e756d206d61707320746f206120646973706174636861626c652066756e6374696f6e2066726f6d20746865206173736f636961746564206d6f64756c652e8106085070616c6c65745f776f726b696e675f67726f75701043616c6c08045400044900014c2c6164645f6f70656e696e6710012c6465736372697074696f6e30011c5665633c75383e0001306f70656e696e675f747970658103012c4f70656e696e67547970650001307374616b655f706f6c696379610301a45374616b65506f6c6963793c543a3a426c6f636b4e756d6265722c2042616c616e63654f663c543e3e0001407265776172645f7065725f626c6f636b450101504f7074696f6e3c42616c616e63654f663c543e3e00002cc44164642061206a6f62206f70656e696e6720666f72206120726567756c617220776f726b65722f6c65616420726f6c652e490152657175697265207369676e6564206c6561646572206f726967696e206f722074686520726f6f742028746f20616464206f70656e696e6720666f7220746865206c656164657220706f736974696f6e292e002823203c7765696768743e002423232057656967687438604f20284429602077686572653abc2d20604460206973207468652073697a65206f6620606465736372697074696f6e6020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e406170706c795f6f6e5f6f70656e696e67040104708503016c4170706c794f6e4f70656e696e67506172616d65746572733c543e000128684170706c79206f6e206120776f726b6572206f70656e696e672e002823203c7765696768743e002423232057656967687438604f20284429602077686572653ac42d20604460206973207468652073697a65206f662060702e6465736372697074696f6e6020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e3066696c6c5f6f70656e696e670801286f70656e696e675f69642801244f70656e696e6749640001687375636365737366756c5f6170706c69636174696f6e5f6964736901015c42547265655365743c4170706c69636174696f6e49643e000228ac46696c6c206f70656e696e6720666f722074686520726567756c61722f6c65616420706f736974696f6e2e4d0152657175697265207369676e6564206c6561646572206f726967696e206f722074686520726f6f742028746f2066696c6c206f70656e696e6720666f7220746865206c656164657220706f736974696f6e292e2823203c7765696768743e002423232057656967687438604f20284129602077686572653acc2d2060416020697320746865206c656e677468206f6620607375636365737366756c5f6170706c69636174696f6e5f69647360142d2044423a242020202d204f2841292c23203c2f7765696768743e4c7570646174655f726f6c655f6163636f756e74080124776f726b65725f696428012c576f726b657249643c543e00014c6e65775f726f6c655f6163636f756e745f6964000130543a3a4163636f756e744964000324150155706461746520746865206173736f63696174656420726f6c65206163636f756e74206f66207468652061637469766520726567756c617220776f726b65722f6c6561642e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e286c656176655f726f6c65080124776f726b65725f696428012c576f726b657249643c543e000124726174696f6e616c653101013c4f7074696f6e3c5665633c75383e3e000424904c656176652074686520726f6c65206279207468652061637469766520776f726b65722e2823203c7765696768743e002423232057656967687438604f20285229602077686572653ab42d20605260206973207468652073697a65206f662060726174696f6e616c656020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e387465726d696e6174655f726f6c650c0124776f726b65725f696428012c576f726b657249643c543e00011c70656e616c7479450101504f7074696f6e3c42616c616e63654f663c543e3e000124726174696f6e616c653101013c4f7074696f6e3c5665633c75383e3e000528a05465726d696e617465207468652061637469766520776f726b657220627920746865206c6561642e25015265717569726573207369676e6564206c6561646572206f726967696e206f722074686520726f6f742028746f207465726d696e61746520746865206c656164657220726f6c65292e2823203c7765696768743e002423232057656967687438604f20285029602077686572653ad82d20605060206973207468652073697a65206070656e616c74792e736c617368696e675f746578746020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e2c736c6173685f7374616b650c0124776f726b65725f696428012c576f726b657249643c543e00011c70656e616c747918013042616c616e63654f663c543e000124726174696f6e616c653101013c4f7074696f6e3c5665633c75383e3e00062c7d01536c61736865732074686520726567756c617220776f726b6572207374616b652c2064656d616e64732061206c6561646572206f726967696e2e204e6f206c696d6974732c206e6f20616374696f6e73206f6e207a65726f207374616b652e3d01496620736c617368696e672062616c616e63652067726561746572207468616e20746865206578697374696e67207374616b65202d207374616b6520697320736c617368656420746f207a65726f2e19015265717569726573207369676e6564206c6561646572206f726967696e206f722074686520726f6f742028746f20736c61736820746865206c6561646572207374616b65292e2823203c7765696768743e002423232057656967687438604f20285029602077686572653ae82d20605060206973207468652073697a65206f66206070656e616c6974792e736c617368696e675f746578746020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e3864656372656173655f7374616b65080124776f726b65725f696428012c576f726b657249643c543e00014c7374616b655f62616c616e63655f64656c746118013042616c616e63654f663c543e00073021014465637265617365732074686520726567756c617220776f726b65722f6c656164207374616b6520616e642072657475726e73207468652072656d61696e64657220746f207468653901776f726b6572207374616b696e675f6163636f756e745f69642e2043616e2062652064656372656173656420746f207a65726f2c206e6f20616374696f6e73206f6e207a65726f207374616b652e944163636570747320746865207374616b6520616d6f756e7420746f2064656372656173652e25015265717569726573207369676e6564206c6561646572206f726967696e206f722074686520726f6f742028746f20646563726561736520746865206c6561646572207374616b65292e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e38696e6372656173655f7374616b65080124776f726b65725f696428012c576f726b657249643c543e00014c7374616b655f62616c616e63655f64656c746118013042616c616e63654f663c543e0008280501496e637265617365732074686520726567756c617220776f726b65722f6c656164207374616b652c2064656d616e6473206120776f726b6572206f726967696e2e6d014c6f636b7320746f6b656e732066726f6d2074686520776f726b6572207374616b696e675f6163636f756e745f696420657175616c20746f206e6577207374616b652e204e6f206c696d697473206f6e20746865207374616b652e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e5077697468647261775f6170706c69636174696f6e0401386170706c69636174696f6e5f69642801344170706c69636174696f6e4964000924010157697468647261772074686520776f726b6572206170706c69636174696f6e2e2043616e20626520646f6e652062792074686520776f726b6572206f6e6c792e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e3863616e63656c5f6f70656e696e670401286f70656e696e675f69642801244f70656e696e674964000a28dc43616e63656c20616e206f70656e696e6720666f722074686520726567756c617220776f726b65722f6c65616420706f736974696f6e2e550152657175697265207369676e6564206c6561646572206f726967696e206f722074686520726f6f742028746f2063616e63656c206f70656e696e6720666f7220746865206c656164657220706f736974696f6e292e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e287365745f6275646765740401286e65775f62756467657418013042616c616e63654f663c543e000b28a0536574732061206e65772062756467657420666f722074686520776f726b696e672067726f75702e54526571756972657320726f6f74206f726967696e2e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e547570646174655f7265776172645f6163636f756e74080124776f726b65725f696428012c576f726b657249643c543e0001546e65775f7265776172645f6163636f756e745f6964000130543a3a4163636f756e744964000c2469015570646174652074686520726577617264206163636f756e74206173736f6369617465642077697468206120736574207265776172642072656c6174696f6e7368697020666f72207468652061637469766520776f726b65722e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e507570646174655f7265776172645f616d6f756e74080124776f726b65725f696428012c576f726b657249643c543e0001407265776172645f7065725f626c6f636b450101504f7074696f6e3c42616c616e63654f663c543e3e000d28c855706461746520746865207265776172642070657220626c6f636b20666f72207468652061637469766520776f726b65722e310152657175697265207369676e6564206c6561646572206f726967696e206f722074686520726f6f742028746f20757064617465206c656164657227732072657761726420616d6f756e74292e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e3c7365745f7374617475735f7465787404012c7374617475735f746578743101013c4f7074696f6e3c5665633c75383e3e000e30b4536574732061206e657720737461747573207465787420666f722074686520776f726b696e672067726f75702e54526571756972657320726f6f74206f726967696e2e002823203c7765696768743e002423232057656967687438604f20285329602077686572653a4d012d20605360206973207468652073697a65206f662074686520636f6e74656e7473206f6620607374617475735f746578746020696e206b696c6f6279746573207768656e206974206973206e6f74206e6f6e6500142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e447370656e645f66726f6d5f6275646765740c01286163636f756e745f6964000130543a3a4163636f756e744964000118616d6f756e7418013042616c616e63654f663c543e000124726174696f6e616c653101013c4f7074696f6e3c5665633c75383e3e000f28a85472616e73666572732073706563696669656420616d6f756e7420746f20616e79206163636f756e742e5c5265717569726573206c6561646572206f726967696e2e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e6466756e645f776f726b696e675f67726f75705f6275646765740c01246d656d6265725f696428012c4d656d62657249643c543e000118616d6f756e7418013042616c616e63654f663c543e000124726174696f6e616c6530011c5665633c75383e0010209846756e6420776f726b696e672067726f7570206275646765742062792061206d656d6265722e203c7765696768743e0024232320576569676874c4604f202831296020446f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d6574657273142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e2c6c6561645f72656d61726b04010c6d736730011c5665633c75383e0011284c4c6561642072656d61726b206d657373616765002823203c7765696768743e002423232057656967687438604f20284d29602077686572653a9c2d20604d60206973207468652073697a65206f6620606d73676020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e34776f726b65725f72656d61726b080124776f726b65725f696428012c576f726b657249643c543e00010c6d736730011c5665633c75383e00122854576f726b65722072656d61726b206d657373616765002823203c7765696768743e002423232057656967687438604f20284d29602077686572653a9c2d20604d60206973207468652073697a65206f6620606d73676020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e0c4c446973706174636861626c652063616c6c732e005501456163682076617269616e74206f66207468697320656e756d206d61707320746f206120646973706174636861626c652066756e6374696f6e2066726f6d20746865206173736f636961746564206d6f64756c652e8506085070616c6c65745f776f726b696e675f67726f75701043616c6c08045400044900014c2c6164645f6f70656e696e6710012c6465736372697074696f6e30011c5665633c75383e0001306f70656e696e675f747970658103012c4f70656e696e67547970650001307374616b655f706f6c696379610301a45374616b65506f6c6963793c543a3a426c6f636b4e756d6265722c2042616c616e63654f663c543e3e0001407265776172645f7065725f626c6f636b450101504f7074696f6e3c42616c616e63654f663c543e3e00002cc44164642061206a6f62206f70656e696e6720666f72206120726567756c617220776f726b65722f6c65616420726f6c652e490152657175697265207369676e6564206c6561646572206f726967696e206f722074686520726f6f742028746f20616464206f70656e696e6720666f7220746865206c656164657220706f736974696f6e292e002823203c7765696768743e002423232057656967687438604f20284429602077686572653abc2d20604460206973207468652073697a65206f6620606465736372697074696f6e6020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e406170706c795f6f6e5f6f70656e696e67040104708503016c4170706c794f6e4f70656e696e67506172616d65746572733c543e000128684170706c79206f6e206120776f726b6572206f70656e696e672e002823203c7765696768743e002423232057656967687438604f20284429602077686572653ac42d20604460206973207468652073697a65206f662060702e6465736372697074696f6e6020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e3066696c6c5f6f70656e696e670801286f70656e696e675f69642801244f70656e696e6749640001687375636365737366756c5f6170706c69636174696f6e5f6964736901015c42547265655365743c4170706c69636174696f6e49643e000228ac46696c6c206f70656e696e6720666f722074686520726567756c61722f6c65616420706f736974696f6e2e4d0152657175697265207369676e6564206c6561646572206f726967696e206f722074686520726f6f742028746f2066696c6c206f70656e696e6720666f7220746865206c656164657220706f736974696f6e292e2823203c7765696768743e002423232057656967687438604f20284129602077686572653acc2d2060416020697320746865206c656e677468206f6620607375636365737366756c5f6170706c69636174696f6e5f69647360142d2044423a242020202d204f2841292c23203c2f7765696768743e4c7570646174655f726f6c655f6163636f756e74080124776f726b65725f696428012c576f726b657249643c543e00014c6e65775f726f6c655f6163636f756e745f6964000130543a3a4163636f756e744964000324150155706461746520746865206173736f63696174656420726f6c65206163636f756e74206f66207468652061637469766520726567756c617220776f726b65722f6c6561642e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e286c656176655f726f6c65080124776f726b65725f696428012c576f726b657249643c543e000124726174696f6e616c653101013c4f7074696f6e3c5665633c75383e3e000424904c656176652074686520726f6c65206279207468652061637469766520776f726b65722e2823203c7765696768743e002423232057656967687438604f20285229602077686572653ab42d20605260206973207468652073697a65206f662060726174696f6e616c656020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e387465726d696e6174655f726f6c650c0124776f726b65725f696428012c576f726b657249643c543e00011c70656e616c7479450101504f7074696f6e3c42616c616e63654f663c543e3e000124726174696f6e616c653101013c4f7074696f6e3c5665633c75383e3e000528a05465726d696e617465207468652061637469766520776f726b657220627920746865206c6561642e25015265717569726573207369676e6564206c6561646572206f726967696e206f722074686520726f6f742028746f207465726d696e61746520746865206c656164657220726f6c65292e2823203c7765696768743e002423232057656967687438604f20285029602077686572653ad82d20605060206973207468652073697a65206070656e616c74792e736c617368696e675f746578746020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e2c736c6173685f7374616b650c0124776f726b65725f696428012c576f726b657249643c543e00011c70656e616c747918013042616c616e63654f663c543e000124726174696f6e616c653101013c4f7074696f6e3c5665633c75383e3e00062c7d01536c61736865732074686520726567756c617220776f726b6572207374616b652c2064656d616e64732061206c6561646572206f726967696e2e204e6f206c696d6974732c206e6f20616374696f6e73206f6e207a65726f207374616b652e3d01496620736c617368696e672062616c616e63652067726561746572207468616e20746865206578697374696e67207374616b65202d207374616b6520697320736c617368656420746f207a65726f2e19015265717569726573207369676e6564206c6561646572206f726967696e206f722074686520726f6f742028746f20736c61736820746865206c6561646572207374616b65292e2823203c7765696768743e002423232057656967687438604f20285029602077686572653ae82d20605060206973207468652073697a65206f66206070656e616c6974792e736c617368696e675f746578746020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e3864656372656173655f7374616b65080124776f726b65725f696428012c576f726b657249643c543e00014c7374616b655f62616c616e63655f64656c746118013042616c616e63654f663c543e00073021014465637265617365732074686520726567756c617220776f726b65722f6c656164207374616b6520616e642072657475726e73207468652072656d61696e64657220746f207468653901776f726b6572207374616b696e675f6163636f756e745f69642e2043616e2062652064656372656173656420746f207a65726f2c206e6f20616374696f6e73206f6e207a65726f207374616b652e944163636570747320746865207374616b6520616d6f756e7420746f2064656372656173652e25015265717569726573207369676e6564206c6561646572206f726967696e206f722074686520726f6f742028746f20646563726561736520746865206c6561646572207374616b65292e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e38696e6372656173655f7374616b65080124776f726b65725f696428012c576f726b657249643c543e00014c7374616b655f62616c616e63655f64656c746118013042616c616e63654f663c543e0008280501496e637265617365732074686520726567756c617220776f726b65722f6c656164207374616b652c2064656d616e6473206120776f726b6572206f726967696e2e6d014c6f636b7320746f6b656e732066726f6d2074686520776f726b6572207374616b696e675f6163636f756e745f696420657175616c20746f206e6577207374616b652e204e6f206c696d697473206f6e20746865207374616b652e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e5077697468647261775f6170706c69636174696f6e0401386170706c69636174696f6e5f69642801344170706c69636174696f6e4964000924010157697468647261772074686520776f726b6572206170706c69636174696f6e2e2043616e20626520646f6e652062792074686520776f726b6572206f6e6c792e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e3863616e63656c5f6f70656e696e670401286f70656e696e675f69642801244f70656e696e674964000a28dc43616e63656c20616e206f70656e696e6720666f722074686520726567756c617220776f726b65722f6c65616420706f736974696f6e2e550152657175697265207369676e6564206c6561646572206f726967696e206f722074686520726f6f742028746f2063616e63656c206f70656e696e6720666f7220746865206c656164657220706f736974696f6e292e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e287365745f6275646765740401286e65775f62756467657418013042616c616e63654f663c543e000b28a0536574732061206e65772062756467657420666f722074686520776f726b696e672067726f75702e54526571756972657320726f6f74206f726967696e2e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e547570646174655f7265776172645f6163636f756e74080124776f726b65725f696428012c576f726b657249643c543e0001546e65775f7265776172645f6163636f756e745f6964000130543a3a4163636f756e744964000c2469015570646174652074686520726577617264206163636f756e74206173736f6369617465642077697468206120736574207265776172642072656c6174696f6e7368697020666f72207468652061637469766520776f726b65722e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e507570646174655f7265776172645f616d6f756e74080124776f726b65725f696428012c576f726b657249643c543e0001407265776172645f7065725f626c6f636b450101504f7074696f6e3c42616c616e63654f663c543e3e000d28c855706461746520746865207265776172642070657220626c6f636b20666f72207468652061637469766520776f726b65722e310152657175697265207369676e6564206c6561646572206f726967696e206f722074686520726f6f742028746f20757064617465206c656164657227732072657761726420616d6f756e74292e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e3c7365745f7374617475735f7465787404012c7374617475735f746578743101013c4f7074696f6e3c5665633c75383e3e000e30b4536574732061206e657720737461747573207465787420666f722074686520776f726b696e672067726f75702e54526571756972657320726f6f74206f726967696e2e002823203c7765696768743e002423232057656967687438604f20285329602077686572653a4d012d20605360206973207468652073697a65206f662074686520636f6e74656e7473206f6620607374617475735f746578746020696e206b696c6f6279746573207768656e206974206973206e6f74206e6f6e6500142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e447370656e645f66726f6d5f6275646765740c01286163636f756e745f6964000130543a3a4163636f756e744964000118616d6f756e7418013042616c616e63654f663c543e000124726174696f6e616c653101013c4f7074696f6e3c5665633c75383e3e000f28a85472616e73666572732073706563696669656420616d6f756e7420746f20616e79206163636f756e742e5c5265717569726573206c6561646572206f726967696e2e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e6466756e645f776f726b696e675f67726f75705f6275646765740c01246d656d6265725f696428012c4d656d62657249643c543e000118616d6f756e7418013042616c616e63654f663c543e000124726174696f6e616c6530011c5665633c75383e0010209846756e6420776f726b696e672067726f7570206275646765742062792061206d656d6265722e203c7765696768743e0024232320576569676874c4604f202831296020446f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d6574657273142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e2c6c6561645f72656d61726b04010c6d736730011c5665633c75383e0011284c4c6561642072656d61726b206d657373616765002823203c7765696768743e002423232057656967687438604f20284d29602077686572653a9c2d20604d60206973207468652073697a65206f6620606d73676020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e34776f726b65725f72656d61726b080124776f726b65725f696428012c576f726b657249643c543e00010c6d736730011c5665633c75383e00122854576f726b65722072656d61726b206d657373616765002823203c7765696768743e002423232057656967687438604f20284d29602077686572653a9c2d20604d60206973207468652073697a65206f6620606d73676020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e0c4c446973706174636861626c652063616c6c732e005501456163682076617269616e74206f66207468697320656e756d206d61707320746f206120646973706174636861626c652066756e6374696f6e2066726f6d20746865206173736f636961746564206d6f64756c652e8906085070616c6c65745f776f726b696e675f67726f75701043616c6c08045400044900014c2c6164645f6f70656e696e6710012c6465736372697074696f6e30011c5665633c75383e0001306f70656e696e675f747970658103012c4f70656e696e67547970650001307374616b655f706f6c696379610301a45374616b65506f6c6963793c543a3a426c6f636b4e756d6265722c2042616c616e63654f663c543e3e0001407265776172645f7065725f626c6f636b450101504f7074696f6e3c42616c616e63654f663c543e3e00002cc44164642061206a6f62206f70656e696e6720666f72206120726567756c617220776f726b65722f6c65616420726f6c652e490152657175697265207369676e6564206c6561646572206f726967696e206f722074686520726f6f742028746f20616464206f70656e696e6720666f7220746865206c656164657220706f736974696f6e292e002823203c7765696768743e002423232057656967687438604f20284429602077686572653abc2d20604460206973207468652073697a65206f6620606465736372697074696f6e6020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e406170706c795f6f6e5f6f70656e696e67040104708503016c4170706c794f6e4f70656e696e67506172616d65746572733c543e000128684170706c79206f6e206120776f726b6572206f70656e696e672e002823203c7765696768743e002423232057656967687438604f20284429602077686572653ac42d20604460206973207468652073697a65206f662060702e6465736372697074696f6e6020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e3066696c6c5f6f70656e696e670801286f70656e696e675f69642801244f70656e696e6749640001687375636365737366756c5f6170706c69636174696f6e5f6964736901015c42547265655365743c4170706c69636174696f6e49643e000228ac46696c6c206f70656e696e6720666f722074686520726567756c61722f6c65616420706f736974696f6e2e4d0152657175697265207369676e6564206c6561646572206f726967696e206f722074686520726f6f742028746f2066696c6c206f70656e696e6720666f7220746865206c656164657220706f736974696f6e292e2823203c7765696768743e002423232057656967687438604f20284129602077686572653acc2d2060416020697320746865206c656e677468206f6620607375636365737366756c5f6170706c69636174696f6e5f69647360142d2044423a242020202d204f2841292c23203c2f7765696768743e4c7570646174655f726f6c655f6163636f756e74080124776f726b65725f696428012c576f726b657249643c543e00014c6e65775f726f6c655f6163636f756e745f6964000130543a3a4163636f756e744964000324150155706461746520746865206173736f63696174656420726f6c65206163636f756e74206f66207468652061637469766520726567756c617220776f726b65722f6c6561642e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e286c656176655f726f6c65080124776f726b65725f696428012c576f726b657249643c543e000124726174696f6e616c653101013c4f7074696f6e3c5665633c75383e3e000424904c656176652074686520726f6c65206279207468652061637469766520776f726b65722e2823203c7765696768743e002423232057656967687438604f20285229602077686572653ab42d20605260206973207468652073697a65206f662060726174696f6e616c656020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e387465726d696e6174655f726f6c650c0124776f726b65725f696428012c576f726b657249643c543e00011c70656e616c7479450101504f7074696f6e3c42616c616e63654f663c543e3e000124726174696f6e616c653101013c4f7074696f6e3c5665633c75383e3e000528a05465726d696e617465207468652061637469766520776f726b657220627920746865206c6561642e25015265717569726573207369676e6564206c6561646572206f726967696e206f722074686520726f6f742028746f207465726d696e61746520746865206c656164657220726f6c65292e2823203c7765696768743e002423232057656967687438604f20285029602077686572653ad82d20605060206973207468652073697a65206070656e616c74792e736c617368696e675f746578746020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e2c736c6173685f7374616b650c0124776f726b65725f696428012c576f726b657249643c543e00011c70656e616c747918013042616c616e63654f663c543e000124726174696f6e616c653101013c4f7074696f6e3c5665633c75383e3e00062c7d01536c61736865732074686520726567756c617220776f726b6572207374616b652c2064656d616e64732061206c6561646572206f726967696e2e204e6f206c696d6974732c206e6f20616374696f6e73206f6e207a65726f207374616b652e3d01496620736c617368696e672062616c616e63652067726561746572207468616e20746865206578697374696e67207374616b65202d207374616b6520697320736c617368656420746f207a65726f2e19015265717569726573207369676e6564206c6561646572206f726967696e206f722074686520726f6f742028746f20736c61736820746865206c6561646572207374616b65292e2823203c7765696768743e002423232057656967687438604f20285029602077686572653ae82d20605060206973207468652073697a65206f66206070656e616c6974792e736c617368696e675f746578746020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e3864656372656173655f7374616b65080124776f726b65725f696428012c576f726b657249643c543e00014c7374616b655f62616c616e63655f64656c746118013042616c616e63654f663c543e00073021014465637265617365732074686520726567756c617220776f726b65722f6c656164207374616b6520616e642072657475726e73207468652072656d61696e64657220746f207468653901776f726b6572207374616b696e675f6163636f756e745f69642e2043616e2062652064656372656173656420746f207a65726f2c206e6f20616374696f6e73206f6e207a65726f207374616b652e944163636570747320746865207374616b6520616d6f756e7420746f2064656372656173652e25015265717569726573207369676e6564206c6561646572206f726967696e206f722074686520726f6f742028746f20646563726561736520746865206c6561646572207374616b65292e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e38696e6372656173655f7374616b65080124776f726b65725f696428012c576f726b657249643c543e00014c7374616b655f62616c616e63655f64656c746118013042616c616e63654f663c543e0008280501496e637265617365732074686520726567756c617220776f726b65722f6c656164207374616b652c2064656d616e6473206120776f726b6572206f726967696e2e6d014c6f636b7320746f6b656e732066726f6d2074686520776f726b6572207374616b696e675f6163636f756e745f696420657175616c20746f206e6577207374616b652e204e6f206c696d697473206f6e20746865207374616b652e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e5077697468647261775f6170706c69636174696f6e0401386170706c69636174696f6e5f69642801344170706c69636174696f6e4964000924010157697468647261772074686520776f726b6572206170706c69636174696f6e2e2043616e20626520646f6e652062792074686520776f726b6572206f6e6c792e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e3863616e63656c5f6f70656e696e670401286f70656e696e675f69642801244f70656e696e674964000a28dc43616e63656c20616e206f70656e696e6720666f722074686520726567756c617220776f726b65722f6c65616420706f736974696f6e2e550152657175697265207369676e6564206c6561646572206f726967696e206f722074686520726f6f742028746f2063616e63656c206f70656e696e6720666f7220746865206c656164657220706f736974696f6e292e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e287365745f6275646765740401286e65775f62756467657418013042616c616e63654f663c543e000b28a0536574732061206e65772062756467657420666f722074686520776f726b696e672067726f75702e54526571756972657320726f6f74206f726967696e2e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e547570646174655f7265776172645f6163636f756e74080124776f726b65725f696428012c576f726b657249643c543e0001546e65775f7265776172645f6163636f756e745f6964000130543a3a4163636f756e744964000c2469015570646174652074686520726577617264206163636f756e74206173736f6369617465642077697468206120736574207265776172642072656c6174696f6e7368697020666f72207468652061637469766520776f726b65722e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e507570646174655f7265776172645f616d6f756e74080124776f726b65725f696428012c576f726b657249643c543e0001407265776172645f7065725f626c6f636b450101504f7074696f6e3c42616c616e63654f663c543e3e000d28c855706461746520746865207265776172642070657220626c6f636b20666f72207468652061637469766520776f726b65722e310152657175697265207369676e6564206c6561646572206f726967696e206f722074686520726f6f742028746f20757064617465206c656164657227732072657761726420616d6f756e74292e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e3c7365745f7374617475735f7465787404012c7374617475735f746578743101013c4f7074696f6e3c5665633c75383e3e000e30b4536574732061206e657720737461747573207465787420666f722074686520776f726b696e672067726f75702e54526571756972657320726f6f74206f726967696e2e002823203c7765696768743e002423232057656967687438604f20285329602077686572653a4d012d20605360206973207468652073697a65206f662074686520636f6e74656e7473206f6620607374617475735f746578746020696e206b696c6f6279746573207768656e206974206973206e6f74206e6f6e6500142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e447370656e645f66726f6d5f6275646765740c01286163636f756e745f6964000130543a3a4163636f756e744964000118616d6f756e7418013042616c616e63654f663c543e000124726174696f6e616c653101013c4f7074696f6e3c5665633c75383e3e000f28a85472616e73666572732073706563696669656420616d6f756e7420746f20616e79206163636f756e742e5c5265717569726573206c6561646572206f726967696e2e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e6466756e645f776f726b696e675f67726f75705f6275646765740c01246d656d6265725f696428012c4d656d62657249643c543e000118616d6f756e7418013042616c616e63654f663c543e000124726174696f6e616c6530011c5665633c75383e0010209846756e6420776f726b696e672067726f7570206275646765742062792061206d656d6265722e203c7765696768743e0024232320576569676874c4604f202831296020446f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d6574657273142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e2c6c6561645f72656d61726b04010c6d736730011c5665633c75383e0011284c4c6561642072656d61726b206d657373616765002823203c7765696768743e002423232057656967687438604f20284d29602077686572653a9c2d20604d60206973207468652073697a65206f6620606d73676020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e34776f726b65725f72656d61726b080124776f726b65725f696428012c576f726b657249643c543e00010c6d736730011c5665633c75383e00122854576f726b65722072656d61726b206d657373616765002823203c7765696768743e002423232057656967687438604f20284d29602077686572653a9c2d20604d60206973207468652073697a65206f6620606d73676020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e0c4c446973706174636861626c652063616c6c732e005501456163682076617269616e74206f66207468697320656e756d206d61707320746f206120646973706174636861626c652066756e6374696f6e2066726f6d20746865206173736f636961746564206d6f64756c652e8d06085070616c6c65745f776f726b696e675f67726f75701043616c6c08045400044900014c2c6164645f6f70656e696e6710012c6465736372697074696f6e30011c5665633c75383e0001306f70656e696e675f747970658103012c4f70656e696e67547970650001307374616b655f706f6c696379610301a45374616b65506f6c6963793c543a3a426c6f636b4e756d6265722c2042616c616e63654f663c543e3e0001407265776172645f7065725f626c6f636b450101504f7074696f6e3c42616c616e63654f663c543e3e00002cc44164642061206a6f62206f70656e696e6720666f72206120726567756c617220776f726b65722f6c65616420726f6c652e490152657175697265207369676e6564206c6561646572206f726967696e206f722074686520726f6f742028746f20616464206f70656e696e6720666f7220746865206c656164657220706f736974696f6e292e002823203c7765696768743e002423232057656967687438604f20284429602077686572653abc2d20604460206973207468652073697a65206f6620606465736372697074696f6e6020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e406170706c795f6f6e5f6f70656e696e67040104708503016c4170706c794f6e4f70656e696e67506172616d65746572733c543e000128684170706c79206f6e206120776f726b6572206f70656e696e672e002823203c7765696768743e002423232057656967687438604f20284429602077686572653ac42d20604460206973207468652073697a65206f662060702e6465736372697074696f6e6020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e3066696c6c5f6f70656e696e670801286f70656e696e675f69642801244f70656e696e6749640001687375636365737366756c5f6170706c69636174696f6e5f6964736901015c42547265655365743c4170706c69636174696f6e49643e000228ac46696c6c206f70656e696e6720666f722074686520726567756c61722f6c65616420706f736974696f6e2e4d0152657175697265207369676e6564206c6561646572206f726967696e206f722074686520726f6f742028746f2066696c6c206f70656e696e6720666f7220746865206c656164657220706f736974696f6e292e2823203c7765696768743e002423232057656967687438604f20284129602077686572653acc2d2060416020697320746865206c656e677468206f6620607375636365737366756c5f6170706c69636174696f6e5f69647360142d2044423a242020202d204f2841292c23203c2f7765696768743e4c7570646174655f726f6c655f6163636f756e74080124776f726b65725f696428012c576f726b657249643c543e00014c6e65775f726f6c655f6163636f756e745f6964000130543a3a4163636f756e744964000324150155706461746520746865206173736f63696174656420726f6c65206163636f756e74206f66207468652061637469766520726567756c617220776f726b65722f6c6561642e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e286c656176655f726f6c65080124776f726b65725f696428012c576f726b657249643c543e000124726174696f6e616c653101013c4f7074696f6e3c5665633c75383e3e000424904c656176652074686520726f6c65206279207468652061637469766520776f726b65722e2823203c7765696768743e002423232057656967687438604f20285229602077686572653ab42d20605260206973207468652073697a65206f662060726174696f6e616c656020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e387465726d696e6174655f726f6c650c0124776f726b65725f696428012c576f726b657249643c543e00011c70656e616c7479450101504f7074696f6e3c42616c616e63654f663c543e3e000124726174696f6e616c653101013c4f7074696f6e3c5665633c75383e3e000528a05465726d696e617465207468652061637469766520776f726b657220627920746865206c6561642e25015265717569726573207369676e6564206c6561646572206f726967696e206f722074686520726f6f742028746f207465726d696e61746520746865206c656164657220726f6c65292e2823203c7765696768743e002423232057656967687438604f20285029602077686572653ad82d20605060206973207468652073697a65206070656e616c74792e736c617368696e675f746578746020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e2c736c6173685f7374616b650c0124776f726b65725f696428012c576f726b657249643c543e00011c70656e616c747918013042616c616e63654f663c543e000124726174696f6e616c653101013c4f7074696f6e3c5665633c75383e3e00062c7d01536c61736865732074686520726567756c617220776f726b6572207374616b652c2064656d616e64732061206c6561646572206f726967696e2e204e6f206c696d6974732c206e6f20616374696f6e73206f6e207a65726f207374616b652e3d01496620736c617368696e672062616c616e63652067726561746572207468616e20746865206578697374696e67207374616b65202d207374616b6520697320736c617368656420746f207a65726f2e19015265717569726573207369676e6564206c6561646572206f726967696e206f722074686520726f6f742028746f20736c61736820746865206c6561646572207374616b65292e2823203c7765696768743e002423232057656967687438604f20285029602077686572653ae82d20605060206973207468652073697a65206f66206070656e616c6974792e736c617368696e675f746578746020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e3864656372656173655f7374616b65080124776f726b65725f696428012c576f726b657249643c543e00014c7374616b655f62616c616e63655f64656c746118013042616c616e63654f663c543e00073021014465637265617365732074686520726567756c617220776f726b65722f6c656164207374616b6520616e642072657475726e73207468652072656d61696e64657220746f207468653901776f726b6572207374616b696e675f6163636f756e745f69642e2043616e2062652064656372656173656420746f207a65726f2c206e6f20616374696f6e73206f6e207a65726f207374616b652e944163636570747320746865207374616b6520616d6f756e7420746f2064656372656173652e25015265717569726573207369676e6564206c6561646572206f726967696e206f722074686520726f6f742028746f20646563726561736520746865206c6561646572207374616b65292e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e38696e6372656173655f7374616b65080124776f726b65725f696428012c576f726b657249643c543e00014c7374616b655f62616c616e63655f64656c746118013042616c616e63654f663c543e0008280501496e637265617365732074686520726567756c617220776f726b65722f6c656164207374616b652c2064656d616e6473206120776f726b6572206f726967696e2e6d014c6f636b7320746f6b656e732066726f6d2074686520776f726b6572207374616b696e675f6163636f756e745f696420657175616c20746f206e6577207374616b652e204e6f206c696d697473206f6e20746865207374616b652e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e5077697468647261775f6170706c69636174696f6e0401386170706c69636174696f6e5f69642801344170706c69636174696f6e4964000924010157697468647261772074686520776f726b6572206170706c69636174696f6e2e2043616e20626520646f6e652062792074686520776f726b6572206f6e6c792e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e3863616e63656c5f6f70656e696e670401286f70656e696e675f69642801244f70656e696e674964000a28dc43616e63656c20616e206f70656e696e6720666f722074686520726567756c617220776f726b65722f6c65616420706f736974696f6e2e550152657175697265207369676e6564206c6561646572206f726967696e206f722074686520726f6f742028746f2063616e63656c206f70656e696e6720666f7220746865206c656164657220706f736974696f6e292e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e287365745f6275646765740401286e65775f62756467657418013042616c616e63654f663c543e000b28a0536574732061206e65772062756467657420666f722074686520776f726b696e672067726f75702e54526571756972657320726f6f74206f726967696e2e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e547570646174655f7265776172645f6163636f756e74080124776f726b65725f696428012c576f726b657249643c543e0001546e65775f7265776172645f6163636f756e745f6964000130543a3a4163636f756e744964000c2469015570646174652074686520726577617264206163636f756e74206173736f6369617465642077697468206120736574207265776172642072656c6174696f6e7368697020666f72207468652061637469766520776f726b65722e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e507570646174655f7265776172645f616d6f756e74080124776f726b65725f696428012c576f726b657249643c543e0001407265776172645f7065725f626c6f636b450101504f7074696f6e3c42616c616e63654f663c543e3e000d28c855706461746520746865207265776172642070657220626c6f636b20666f72207468652061637469766520776f726b65722e310152657175697265207369676e6564206c6561646572206f726967696e206f722074686520726f6f742028746f20757064617465206c656164657227732072657761726420616d6f756e74292e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e3c7365745f7374617475735f7465787404012c7374617475735f746578743101013c4f7074696f6e3c5665633c75383e3e000e30b4536574732061206e657720737461747573207465787420666f722074686520776f726b696e672067726f75702e54526571756972657320726f6f74206f726967696e2e002823203c7765696768743e002423232057656967687438604f20285329602077686572653a4d012d20605360206973207468652073697a65206f662074686520636f6e74656e7473206f6620607374617475735f746578746020696e206b696c6f6279746573207768656e206974206973206e6f74206e6f6e6500142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e447370656e645f66726f6d5f6275646765740c01286163636f756e745f6964000130543a3a4163636f756e744964000118616d6f756e7418013042616c616e63654f663c543e000124726174696f6e616c653101013c4f7074696f6e3c5665633c75383e3e000f28a85472616e73666572732073706563696669656420616d6f756e7420746f20616e79206163636f756e742e5c5265717569726573206c6561646572206f726967696e2e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e6466756e645f776f726b696e675f67726f75705f6275646765740c01246d656d6265725f696428012c4d656d62657249643c543e000118616d6f756e7418013042616c616e63654f663c543e000124726174696f6e616c6530011c5665633c75383e0010209846756e6420776f726b696e672067726f7570206275646765742062792061206d656d6265722e203c7765696768743e0024232320576569676874c4604f202831296020446f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d6574657273142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e2c6c6561645f72656d61726b04010c6d736730011c5665633c75383e0011284c4c6561642072656d61726b206d657373616765002823203c7765696768743e002423232057656967687438604f20284d29602077686572653a9c2d20604d60206973207468652073697a65206f6620606d73676020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e34776f726b65725f72656d61726b080124776f726b65725f696428012c576f726b657249643c543e00010c6d736730011c5665633c75383e00122854576f726b65722072656d61726b206d657373616765002823203c7765696768743e002423232057656967687438604f20284d29602077686572653a9c2d20604d60206973207468652073697a65206f6620606d73676020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e0c4c446973706174636861626c652063616c6c732e005501456163682076617269616e74206f66207468697320656e756d206d61707320746f206120646973706174636861626c652066756e6374696f6e2066726f6d20746865206173736f636961746564206d6f64756c652e9106085070616c6c65745f776f726b696e675f67726f75701043616c6c08045400044900014c2c6164645f6f70656e696e6710012c6465736372697074696f6e30011c5665633c75383e0001306f70656e696e675f747970658103012c4f70656e696e67547970650001307374616b655f706f6c696379610301a45374616b65506f6c6963793c543a3a426c6f636b4e756d6265722c2042616c616e63654f663c543e3e0001407265776172645f7065725f626c6f636b450101504f7074696f6e3c42616c616e63654f663c543e3e00002cc44164642061206a6f62206f70656e696e6720666f72206120726567756c617220776f726b65722f6c65616420726f6c652e490152657175697265207369676e6564206c6561646572206f726967696e206f722074686520726f6f742028746f20616464206f70656e696e6720666f7220746865206c656164657220706f736974696f6e292e002823203c7765696768743e002423232057656967687438604f20284429602077686572653abc2d20604460206973207468652073697a65206f6620606465736372697074696f6e6020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e406170706c795f6f6e5f6f70656e696e67040104708503016c4170706c794f6e4f70656e696e67506172616d65746572733c543e000128684170706c79206f6e206120776f726b6572206f70656e696e672e002823203c7765696768743e002423232057656967687438604f20284429602077686572653ac42d20604460206973207468652073697a65206f662060702e6465736372697074696f6e6020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e3066696c6c5f6f70656e696e670801286f70656e696e675f69642801244f70656e696e6749640001687375636365737366756c5f6170706c69636174696f6e5f6964736901015c42547265655365743c4170706c69636174696f6e49643e000228ac46696c6c206f70656e696e6720666f722074686520726567756c61722f6c65616420706f736974696f6e2e4d0152657175697265207369676e6564206c6561646572206f726967696e206f722074686520726f6f742028746f2066696c6c206f70656e696e6720666f7220746865206c656164657220706f736974696f6e292e2823203c7765696768743e002423232057656967687438604f20284129602077686572653acc2d2060416020697320746865206c656e677468206f6620607375636365737366756c5f6170706c69636174696f6e5f69647360142d2044423a242020202d204f2841292c23203c2f7765696768743e4c7570646174655f726f6c655f6163636f756e74080124776f726b65725f696428012c576f726b657249643c543e00014c6e65775f726f6c655f6163636f756e745f6964000130543a3a4163636f756e744964000324150155706461746520746865206173736f63696174656420726f6c65206163636f756e74206f66207468652061637469766520726567756c617220776f726b65722f6c6561642e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e286c656176655f726f6c65080124776f726b65725f696428012c576f726b657249643c543e000124726174696f6e616c653101013c4f7074696f6e3c5665633c75383e3e000424904c656176652074686520726f6c65206279207468652061637469766520776f726b65722e2823203c7765696768743e002423232057656967687438604f20285229602077686572653ab42d20605260206973207468652073697a65206f662060726174696f6e616c656020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e387465726d696e6174655f726f6c650c0124776f726b65725f696428012c576f726b657249643c543e00011c70656e616c7479450101504f7074696f6e3c42616c616e63654f663c543e3e000124726174696f6e616c653101013c4f7074696f6e3c5665633c75383e3e000528a05465726d696e617465207468652061637469766520776f726b657220627920746865206c6561642e25015265717569726573207369676e6564206c6561646572206f726967696e206f722074686520726f6f742028746f207465726d696e61746520746865206c656164657220726f6c65292e2823203c7765696768743e002423232057656967687438604f20285029602077686572653ad82d20605060206973207468652073697a65206070656e616c74792e736c617368696e675f746578746020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e2c736c6173685f7374616b650c0124776f726b65725f696428012c576f726b657249643c543e00011c70656e616c747918013042616c616e63654f663c543e000124726174696f6e616c653101013c4f7074696f6e3c5665633c75383e3e00062c7d01536c61736865732074686520726567756c617220776f726b6572207374616b652c2064656d616e64732061206c6561646572206f726967696e2e204e6f206c696d6974732c206e6f20616374696f6e73206f6e207a65726f207374616b652e3d01496620736c617368696e672062616c616e63652067726561746572207468616e20746865206578697374696e67207374616b65202d207374616b6520697320736c617368656420746f207a65726f2e19015265717569726573207369676e6564206c6561646572206f726967696e206f722074686520726f6f742028746f20736c61736820746865206c6561646572207374616b65292e2823203c7765696768743e002423232057656967687438604f20285029602077686572653ae82d20605060206973207468652073697a65206f66206070656e616c6974792e736c617368696e675f746578746020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e3864656372656173655f7374616b65080124776f726b65725f696428012c576f726b657249643c543e00014c7374616b655f62616c616e63655f64656c746118013042616c616e63654f663c543e00073021014465637265617365732074686520726567756c617220776f726b65722f6c656164207374616b6520616e642072657475726e73207468652072656d61696e64657220746f207468653901776f726b6572207374616b696e675f6163636f756e745f69642e2043616e2062652064656372656173656420746f207a65726f2c206e6f20616374696f6e73206f6e207a65726f207374616b652e944163636570747320746865207374616b6520616d6f756e7420746f2064656372656173652e25015265717569726573207369676e6564206c6561646572206f726967696e206f722074686520726f6f742028746f20646563726561736520746865206c6561646572207374616b65292e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e38696e6372656173655f7374616b65080124776f726b65725f696428012c576f726b657249643c543e00014c7374616b655f62616c616e63655f64656c746118013042616c616e63654f663c543e0008280501496e637265617365732074686520726567756c617220776f726b65722f6c656164207374616b652c2064656d616e6473206120776f726b6572206f726967696e2e6d014c6f636b7320746f6b656e732066726f6d2074686520776f726b6572207374616b696e675f6163636f756e745f696420657175616c20746f206e6577207374616b652e204e6f206c696d697473206f6e20746865207374616b652e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e5077697468647261775f6170706c69636174696f6e0401386170706c69636174696f6e5f69642801344170706c69636174696f6e4964000924010157697468647261772074686520776f726b6572206170706c69636174696f6e2e2043616e20626520646f6e652062792074686520776f726b6572206f6e6c792e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e3863616e63656c5f6f70656e696e670401286f70656e696e675f69642801244f70656e696e674964000a28dc43616e63656c20616e206f70656e696e6720666f722074686520726567756c617220776f726b65722f6c65616420706f736974696f6e2e550152657175697265207369676e6564206c6561646572206f726967696e206f722074686520726f6f742028746f2063616e63656c206f70656e696e6720666f7220746865206c656164657220706f736974696f6e292e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e287365745f6275646765740401286e65775f62756467657418013042616c616e63654f663c543e000b28a0536574732061206e65772062756467657420666f722074686520776f726b696e672067726f75702e54526571756972657320726f6f74206f726967696e2e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e547570646174655f7265776172645f6163636f756e74080124776f726b65725f696428012c576f726b657249643c543e0001546e65775f7265776172645f6163636f756e745f6964000130543a3a4163636f756e744964000c2469015570646174652074686520726577617264206163636f756e74206173736f6369617465642077697468206120736574207265776172642072656c6174696f6e7368697020666f72207468652061637469766520776f726b65722e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e507570646174655f7265776172645f616d6f756e74080124776f726b65725f696428012c576f726b657249643c543e0001407265776172645f7065725f626c6f636b450101504f7074696f6e3c42616c616e63654f663c543e3e000d28c855706461746520746865207265776172642070657220626c6f636b20666f72207468652061637469766520776f726b65722e310152657175697265207369676e6564206c6561646572206f726967696e206f722074686520726f6f742028746f20757064617465206c656164657227732072657761726420616d6f756e74292e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e3c7365745f7374617475735f7465787404012c7374617475735f746578743101013c4f7074696f6e3c5665633c75383e3e000e30b4536574732061206e657720737461747573207465787420666f722074686520776f726b696e672067726f75702e54526571756972657320726f6f74206f726967696e2e002823203c7765696768743e002423232057656967687438604f20285329602077686572653a4d012d20605360206973207468652073697a65206f662074686520636f6e74656e7473206f6620607374617475735f746578746020696e206b696c6f6279746573207768656e206974206973206e6f74206e6f6e6500142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e447370656e645f66726f6d5f6275646765740c01286163636f756e745f6964000130543a3a4163636f756e744964000118616d6f756e7418013042616c616e63654f663c543e000124726174696f6e616c653101013c4f7074696f6e3c5665633c75383e3e000f28a85472616e73666572732073706563696669656420616d6f756e7420746f20616e79206163636f756e742e5c5265717569726573206c6561646572206f726967696e2e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e6466756e645f776f726b696e675f67726f75705f6275646765740c01246d656d6265725f696428012c4d656d62657249643c543e000118616d6f756e7418013042616c616e63654f663c543e000124726174696f6e616c6530011c5665633c75383e0010209846756e6420776f726b696e672067726f7570206275646765742062792061206d656d6265722e203c7765696768743e0024232320576569676874c4604f202831296020446f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d6574657273142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e2c6c6561645f72656d61726b04010c6d736730011c5665633c75383e0011284c4c6561642072656d61726b206d657373616765002823203c7765696768743e002423232057656967687438604f20284d29602077686572653a9c2d20604d60206973207468652073697a65206f6620606d73676020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e34776f726b65725f72656d61726b080124776f726b65725f696428012c576f726b657249643c543e00010c6d736730011c5665633c75383e00122854576f726b65722072656d61726b206d657373616765002823203c7765696768743e002423232057656967687438604f20284d29602077686572653a9c2d20604d60206973207468652073697a65206f6620606d73676020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e0c4c446973706174636861626c652063616c6c732e005501456163682076617269616e74206f66207468697320656e756d206d61707320746f206120646973706174636861626c652066756e6374696f6e2066726f6d20746865206173736f636961746564206d6f64756c652e950608586a6f7973747265616d5f6e6f64655f72756e74696d65304f726967696e43616c6c65720001081873797374656d0400990601746672616d655f73797374656d3a3a4f726967696e3c52756e74696d653e00000010566f696404009d0601110173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a566f69640001000099060c346672616d655f737570706f7274206469737061746368245261774f726967696e04244163636f756e7449640100010c10526f6f74000000185369676e656404000001244163636f756e744964000100104e6f6e65000200009d06081c73705f636f726510566f696400010000a1060c3870616c6c65745f7574696c6974791870616c6c6574144572726f7204045400010430546f6f4d616e7943616c6c730000045c546f6f206d616e792063616c6c7320626174636865642e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a090909a5060c4c626f756e6465645f636f6c6c656374696f6e73407765616b5f626f756e6465645f766563385765616b426f756e64656456656308045401a906045300000400ad0601185665633c543e0000a9060000040851042800ad06000002a90600b1060c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540104045300000400b50601185665633c543e0000b5060000020400b90604184f7074696f6e04045401bd060108104e6f6e6500000010536f6d650400bd060000010000bd060c4473705f636f6e73656e7375735f626162651c646967657374732450726544696765737400010c1c5072696d6172790400c10601405072696d617279507265446967657374000100385365636f6e64617279506c61696e0400c506015c5365636f6e64617279506c61696e507265446967657374000200305365636f6e646172795652460400c90601545365636f6e6461727956524650726544696765737400030000c1060c4473705f636f6e73656e7375735f626162651c64696765737473405072696d617279507265446967657374000010013c617574686f726974795f696e64657810015473757065723a3a417574686f72697479496e646578000110736c6f7455040110536c6f740001287672665f6f75747075740401245652464f75747075740001247672665f70726f6f66a505012056524650726f6f660000c5060c4473705f636f6e73656e7375735f626162651c646967657374735c5365636f6e64617279506c61696e507265446967657374000008013c617574686f726974795f696e64657810015473757065723a3a417574686f72697479496e646578000110736c6f7455040110536c6f740000c9060c4473705f636f6e73656e7375735f626162651c64696765737473545365636f6e64617279565246507265446967657374000010013c617574686f726974795f696e64657810015473757065723a3a417574686f72697479496e646578000110736c6f7455040110536c6f740001287672665f6f75747075740401245652464f75747075740001247672665f70726f6f66a505012056524650726f6f660000cd0604184f7074696f6e04045401040108104e6f6e6500000010536f6d650400040000010000d106084473705f636f6e73656e7375735f62616265584261626545706f6368436f6e66696775726174696f6e0000080104637d030128287536342c2075363429000134616c6c6f7765645f736c6f747361040130416c6c6f776564536c6f74730000d5060c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401bd02045300000400b90201185665633c543e0000d9060c2c70616c6c65745f626162651870616c6c6574144572726f7204045400011060496e76616c696445717569766f636174696f6e50726f6f660000043101416e2065717569766f636174696f6e2070726f6f662070726f76696465642061732070617274206f6620616e2065717569766f636174696f6e207265706f727420697320696e76616c69642e60496e76616c69644b65794f776e65727368697050726f6f66000104310141206b6579206f776e6572736869702070726f6f662070726f76696465642061732070617274206f6620616e2065717569766f636174696f6e207265706f727420697320696e76616c69642e584475706c69636174654f6666656e63655265706f727400020415014120676976656e2065717569766f636174696f6e207265706f72742069732076616c69642062757420616c72656164792070726576696f75736c79207265706f727465642e50496e76616c6964436f6e66696775726174696f6e0003048c5375626d697474656420636f6e66696775726174696f6e20697320696e76616c69642e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a090909dd060c4c626f756e6465645f636f6c6c656374696f6e73407765616b5f626f756e6465645f766563385765616b426f756e64656456656308045401e106045300000400e90601185665633c543e0000e106083c70616c6c65745f62616c616e6365732c42616c616e63654c6f636b041c42616c616e63650118000c01086964290401384c6f636b4964656e746966696572000118616d6f756e7418011c42616c616e636500011c726561736f6e73e506011c526561736f6e730000e506083c70616c6c65745f62616c616e6365731c526561736f6e7300010c0c466565000000104d6973630001000c416c6c00020000e906000002e10600ed060c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401f106045300000400f50601185665633c543e0000f106083c70616c6c65745f62616c616e6365732c52657365727665446174610844526573657276654964656e7469666965720129041c42616c616e6365011800080108696429040144526573657276654964656e746966696572000118616d6f756e7418011c42616c616e63650000f506000002f10600f9060c3c70616c6c65745f62616c616e6365731870616c6c6574144572726f720804540004490001203856657374696e6742616c616e63650000049856657374696e672062616c616e636520746f6f206869676820746f2073656e642076616c7565544c69717569646974795265737472696374696f6e73000104c44163636f756e74206c6971756964697479207265737472696374696f6e732070726576656e74207769746864726177616c4c496e73756666696369656e7442616c616e63650002047842616c616e636520746f6f206c6f7720746f2073656e642076616c75652e484578697374656e7469616c4465706f736974000304e856616c756520746f6f206c6f7720746f20637265617465206163636f756e742064756520746f206578697374656e7469616c206465706f736974244b656570416c6976650004048c5472616e736665722f7061796d656e7420776f756c64206b696c6c206163636f756e745c4578697374696e6756657374696e675363686564756c65000504c8412076657374696e67207363686564756c6520616c72656164792065786973747320666f722074686973206163636f756e742c446561644163636f756e740006048842656e6566696369617279206163636f756e74206d757374207072652d65786973743c546f6f4d616e795265736572766573000704ac4e756d626572206f66206e616d656420726573657276657320657863656564204d6178526573657276657304b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a090909fd060c3473705f61726974686d657469632c66697865645f706f696e7424466978656455313238000004001801107531323800000107086870616c6c65745f7472616e73616374696f6e5f7061796d656e742052656c6561736573000108245631416e6369656e74000000085632000100000507089070616c6c65745f656c656374696f6e5f70726f76696465725f6d756c74695f7068617365345265616479536f6c7574696f6e08244163636f756e74496400284d617857696e6e65727300000c0120737570706f72747309070198426f756e646564537570706f7274733c4163636f756e7449642c204d617857696e6e6572733e00011473636f72659c0134456c656374696f6e53636f726500011c636f6d7075746590013c456c656374696f6e436f6d70757465000009070c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454014d05045300000400490501185665633c543e00000d07089070616c6c65745f656c656374696f6e5f70726f76696465725f6d756c74695f706861736534526f756e64536e617073686f7408244163636f756e7449640100304461746150726f766964657201110700080118766f74657273190701445665633c4461746150726f76696465723e00011c74617267657473610501385665633c4163636f756e7449643e000011070000040c002815070015070c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540100045300000400610501185665633c543e000019070000021107001d070c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454012107045300000400250701185665633c543e000021070000040c9c101000250700000221070029070c9070616c6c65745f656c656374696f6e5f70726f76696465725f6d756c74695f7068617365187369676e6564405369676e65645375626d697373696f6e0c244163636f756e74496401001c42616c616e6365011820536f6c7574696f6e0175040010010c77686f0001244163636f756e74496400011c6465706f73697418011c42616c616e63650001307261775f736f6c7574696f6e71040154526177536f6c7574696f6e3c536f6c7574696f6e3e00012063616c6c5f66656518011c42616c616e636500002d070c9070616c6c65745f656c656374696f6e5f70726f76696465725f6d756c74695f70686173651870616c6c6574144572726f720404540001386850726544697370617463684561726c795375626d697373696f6e000004645375626d697373696f6e2077617320746f6f206561726c792e6c507265446973706174636857726f6e6757696e6e6572436f756e740001048857726f6e67206e756d626572206f662077696e6e6572732070726573656e7465642e6450726544697370617463685765616b5375626d697373696f6e000204905375626d697373696f6e2077617320746f6f207765616b2c2073636f72652d776973652e3c5369676e6564517565756546756c6c0003044901546865207175657565207761732066756c6c2c20616e642074686520736f6c7574696f6e20776173206e6f7420626574746572207468616e20616e79206f6620746865206578697374696e67206f6e65732e585369676e656443616e6e6f745061794465706f73697400040494546865206f726967696e206661696c656420746f2070617920746865206465706f7369742e505369676e6564496e76616c69645769746e657373000504a05769746e657373206461746120746f20646973706174636861626c6520697320696e76616c69642e4c5369676e6564546f6f4d756368576569676874000604b8546865207369676e6564207375626d697373696f6e20636f6e73756d657320746f6f206d756368207765696768743c4f637743616c6c57726f6e67457261000704984f4357207375626d697474656420736f6c7574696f6e20666f722077726f6e6720726f756e645c4d697373696e67536e617073686f744d65746164617461000804a8536e617073686f74206d657461646174612073686f756c6420657869737420627574206469646e27742e58496e76616c69645375626d697373696f6e496e646578000904d06053656c663a3a696e736572745f7375626d697373696f6e602072657475726e656420616e20696e76616c696420696e6465782e3843616c6c4e6f74416c6c6f776564000a04985468652063616c6c206973206e6f7420616c6c6f776564206174207468697320706f696e742e3846616c6c6261636b4661696c6564000b044c5468652066616c6c6261636b206661696c65642c426f756e644e6f744d6574000c0448536f6d6520626f756e64206e6f74206d657438546f6f4d616e7957696e6e657273000d049c5375626d697474656420736f6c7574696f6e2068617320746f6f206d616e792077696e6e657273040d014572726f72206f66207468652070616c6c657420746861742063616e2062652072657475726e656420696e20726573706f6e736520746f20646973706174636865732e3107083870616c6c65745f7374616b696e67345374616b696e674c656467657204045400001401147374617368000130543a3a4163636f756e744964000114746f74616cec013042616c616e63654f663c543e000118616374697665ec013042616c616e63654f663c543e000124756e6c6f636b696e67350701f0426f756e6465645665633c556e6c6f636b4368756e6b3c42616c616e63654f663c543e3e2c20543a3a4d6178556e6c6f636b696e674368756e6b733e00013c636c61696d65645f7265776172647341070194426f756e6465645665633c457261496e6465782c20543a3a486973746f727944657074683e000035070c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540139070453000004003d0701185665633c543e00003907083870616c6c65745f7374616b696e672c556e6c6f636b4368756e6b041c42616c616e636501180008011476616c7565ec011c42616c616e636500010c657261e9030120457261496e64657800003d0700000239070041070c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540110045300000400690501185665633c543e00004507083870616c6c65745f7374616b696e672c4e6f6d696e6174696f6e7304045400000c011c74617267657473150701ac426f756e6465645665633c543a3a4163636f756e7449642c20543a3a4d61784e6f6d696e6174696f6e733e0001307375626d69747465645f696e100120457261496e64657800012873757070726573736564980110626f6f6c00004907083870616c6c65745f7374616b696e6734416374697665457261496e666f0000080114696e646578100120457261496e64657800011473746172743501012c4f7074696f6e3c7536343e00004d07000004081000005107083870616c6c65745f7374616b696e673c457261526577617264506f696e747304244163636f756e744964010000080114746f74616c10012c526577617264506f696e74000128696e646976696475616c5507018042547265654d61703c4163636f756e7449642c20526577617264506f696e743e00005507042042547265654d617008044b010004560110000400590700000059070000025d07005d070000040800100061070000026507006507083870616c6c65745f7374616b696e6738556e6170706c696564536c61736808244163636f756e74496401001c42616c616e636501180014012476616c696461746f720001244163636f756e74496400010c6f776e18011c42616c616e63650001186f7468657273550501645665633c284163636f756e7449642c2042616c616e6365293e0001247265706f7274657273610501385665633c4163636f756e7449643e0001187061796f757418011c42616c616e63650000690700000408ac18006d070c3870616c6c65745f7374616b696e6720736c617368696e6734536c617368696e675370616e7300001001287370616e5f696e6465781001245370616e496e6465780001286c6173745f7374617274100120457261496e6465780001486c6173745f6e6f6e7a65726f5f736c617368100120457261496e6465780001147072696f72690501345665633c457261496e6465783e000071070c3870616c6c65745f7374616b696e6720736c617368696e67285370616e5265636f7264041c42616c616e636501180008011c736c617368656418011c42616c616e6365000120706169645f6f757418011c42616c616e6365000075070000027907007907000004081098007d07103870616c6c65745f7374616b696e671870616c6c65741870616c6c6574144572726f72040454000168344e6f74436f6e74726f6c6c6572000004644e6f74206120636f6e74726f6c6c6572206163636f756e742e204e6f745374617368000104504e6f742061207374617368206163636f756e742e34416c7265616479426f6e64656400020460537461736820697320616c726561647920626f6e6465642e34416c726561647950616972656400030474436f6e74726f6c6c657220697320616c7265616479207061697265642e30456d7074795461726765747300040460546172676574732063616e6e6f7420626520656d7074792e384475706c6963617465496e646578000504404475706c696361746520696e6465782e44496e76616c6964536c617368496e64657800060484536c617368207265636f726420696e646578206f7574206f6620626f756e64732e40496e73756666696369656e74426f6e6400070c590143616e6e6f74206861766520612076616c696461746f72206f72206e6f6d696e61746f7220726f6c652c20776974682076616c7565206c657373207468616e20746865206d696e696d756d20646566696e65642062793d01676f7665726e616e6365202873656520604d696e56616c696461746f72426f6e646020616e6420604d696e4e6f6d696e61746f72426f6e6460292e20496620756e626f6e64696e67206973207468651501696e74656e74696f6e2c20606368696c6c6020666972737420746f2072656d6f7665206f6e65277320726f6c652061732076616c696461746f722f6e6f6d696e61746f722e304e6f4d6f72654368756e6b730008049043616e206e6f74207363686564756c65206d6f726520756e6c6f636b206368756e6b732e344e6f556e6c6f636b4368756e6b000904a043616e206e6f74207265626f6e6420776974686f757420756e6c6f636b696e67206368756e6b732e3046756e646564546172676574000a04c8417474656d7074696e6720746f2074617267657420612073746173682074686174207374696c6c206861732066756e64732e48496e76616c6964457261546f526577617264000b0458496e76616c69642065726120746f207265776172642e68496e76616c69644e756d6265724f664e6f6d696e6174696f6e73000c0478496e76616c6964206e756d626572206f66206e6f6d696e6174696f6e732e484e6f74536f72746564416e64556e69717565000d04804974656d7320617265206e6f7420736f7274656420616e6420756e697175652e38416c7265616479436c61696d6564000e0409015265776172647320666f72207468697320657261206861766520616c7265616479206265656e20636c61696d656420666f7220746869732076616c696461746f722e54496e636f7272656374486973746f72794465707468000f04c0496e636f72726563742070726576696f757320686973746f727920646570746820696e7075742070726f76696465642e58496e636f7272656374536c617368696e675370616e73001004b0496e636f7272656374206e756d626572206f6620736c617368696e67207370616e732070726f76696465642e2042616453746174650011043901496e7465726e616c20737461746520686173206265636f6d6520736f6d65686f7720636f7272757074656420616e6420746865206f7065726174696f6e2063616e6e6f7420636f6e74696e75652e38546f6f4d616e795461726765747300120494546f6f206d616e79206e6f6d696e6174696f6e207461726765747320737570706c6965642e244261645461726765740013043d0141206e6f6d696e6174696f6e207461726765742077617320737570706c69656420746861742077617320626c6f636b6564206f72206f7468657277697365206e6f7420612076616c696461746f722e4043616e6e6f744368696c6c4f74686572001404550154686520757365722068617320656e6f75676820626f6e6420616e6420746875732063616e6e6f74206265206368696c6c656420666f72636566756c6c7920627920616e2065787465726e616c20706572736f6e2e44546f6f4d616e794e6f6d696e61746f72730015084d0154686572652061726520746f6f206d616e79206e6f6d696e61746f727320696e207468652073797374656d2e20476f7665726e616e6365206e6565647320746f2061646a75737420746865207374616b696e67b473657474696e677320746f206b656570207468696e6773207361666520666f72207468652072756e74696d652e44546f6f4d616e7956616c696461746f7273001608550154686572652061726520746f6f206d616e792076616c696461746f722063616e6469646174657320696e207468652073797374656d2e20476f7665726e616e6365206e6565647320746f2061646a75737420746865d47374616b696e672073657474696e677320746f206b656570207468696e6773207361666520666f72207468652072756e74696d652e40436f6d6d697373696f6e546f6f4c6f77001704e0436f6d6d697373696f6e20697320746f6f206c6f772e204d757374206265206174206c6561737420604d696e436f6d6d697373696f6e602e2c426f756e644e6f744d657400180458536f6d6520626f756e64206973206e6f74206d65742e44426f6e64696e6752657374726963746564001904e045787465726e616c207265737472696374696f6e2070726576656e747320626f6e64696e67207769746820676976656e206163636f756e7404b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a0909098107000002850700850700000408008105008907000004088d0730008d070c1c73705f636f72651863727970746f244b65795479706549640000040040011c5b75383b20345d000091070c3870616c6c65745f73657373696f6e1870616c6c6574144572726f7204045400011430496e76616c696450726f6f6600000460496e76616c6964206f776e6572736869702070726f6f662e5c4e6f4173736f63696174656456616c696461746f7249640001049c4e6f206173736f6369617465642076616c696461746f7220494420666f72206163636f756e742e344475706c6963617465644b65790002046452656769737465726564206475706c6963617465206b65792e184e6f4b657973000304a44e6f206b65797320617265206173736f63696174656420776974682074686973206163636f756e742e244e6f4163636f756e7400040419014b65792073657474696e67206163636f756e74206973206e6f74206c6976652c20736f206974277320696d706f737369626c6520746f206173736f6369617465206b6579732e04744572726f7220666f72207468652073657373696f6e2070616c6c65742e9507000004082c10009907083870616c6c65745f6772616e6470612c53746f726564537461746504044e01100110104c6976650000003050656e64696e6750617573650801307363686564756c65645f61741001044e00011464656c61791001044e000100185061757365640002003450656e64696e67526573756d650801307363686564756c65645f61741001044e00011464656c61791001044e000300009d07083870616c6c65745f6772616e6470614c53746f72656450656e64696e674368616e676508044e0110144c696d697400001001307363686564756c65645f61741001044e00011464656c61791001044e0001406e6578745f617574686f726974696573a107016c426f756e646564417574686f726974794c6973743c4c696d69743e000118666f72636564010201244f7074696f6e3c4e3e0000a1070c4c626f756e6465645f636f6c6c656374696f6e73407765616b5f626f756e6465645f766563385765616b426f756e64656456656308045401c8045300000400c401185665633c543e0000a5070c3870616c6c65745f6772616e6470611870616c6c6574144572726f7204045400011c2c50617573654661696c65640000080501417474656d707420746f207369676e616c204752414e445041207061757365207768656e2074686520617574686f72697479207365742069736e2774206c697665a42865697468657220706175736564206f7220616c72656164792070656e64696e67207061757365292e30526573756d654661696c65640001081101417474656d707420746f207369676e616c204752414e44504120726573756d65207768656e2074686520617574686f72697479207365742069736e277420706175736564a028656974686572206c697665206f7220616c72656164792070656e64696e6720726573756d65292e344368616e676550656e64696e67000204e8417474656d707420746f207369676e616c204752414e445041206368616e67652077697468206f6e6520616c72656164792070656e64696e672e1c546f6f536f6f6e000304bc43616e6e6f74207369676e616c20666f72636564206368616e676520736f20736f6f6e206166746572206c6173742e60496e76616c69644b65794f776e65727368697050726f6f66000404310141206b6579206f776e6572736869702070726f6f662070726f76696465642061732070617274206f6620616e2065717569766f636174696f6e207265706f727420697320696e76616c69642e60496e76616c696445717569766f636174696f6e50726f6f660005043101416e2065717569766f636174696f6e2070726f6f662070726f76696465642061732070617274206f6620616e2065717569766f636174696f6e207265706f727420697320696e76616c69642e584475706c69636174654f6666656e63655265706f727400060415014120676976656e2065717569766f636174696f6e207265706f72742069732076616c69642062757420616c72656164792070726576696f75736c79207265706f727465642e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a090909a9070c4c626f756e6465645f636f6c6c656374696f6e73407765616b5f626f756e6465645f766563385765616b426f756e646564566563080454018505045300000400ad0701185665633c543e0000ad07000002850500b1070c4c626f756e6465645f636f6c6c656374696f6e73407765616b5f626f756e6465645f766563385765616b426f756e64656456656308045401d8045300000400b50701185665633c543e0000b507000002d800b90710346672616d655f737570706f727418747261697473106d69736334577261707065724f706171756504045401bd07000800e903000000bd070104540000bd07084070616c6c65745f696d5f6f6e6c696e6564426f756e6465644f70617175654e6574776f726b53746174650c4c506565724964456e636f64696e674c696d697400584d756c746941646472456e636f64696e674c696d697400384164647265737365734c696d6974000008011c706565725f6964c107019c5765616b426f756e6465645665633c75382c20506565724964456e636f64696e674c696d69743e00014865787465726e616c5f616464726573736573c507012d015765616b426f756e6465645665633c5765616b426f756e6465645665633c75382c204d756c746941646472456e636f64696e674c696d69743e2c204164647265737365734c696d69740a3e0000c1070c4c626f756e6465645f636f6c6c656374696f6e73407765616b5f626f756e6465645f766563385765616b426f756e64656456656308045401080453000004003001185665633c543e0000c5070c4c626f756e6465645f636f6c6c656374696f6e73407765616b5f626f756e6465645f766563385765616b426f756e64656456656308045401c107045300000400c90701185665633c543e0000c907000002c10700cd070c4070616c6c65745f696d5f6f6e6c696e651870616c6c6574144572726f7204045400010828496e76616c69644b6579000004604e6f6e206578697374656e74207075626c6963206b65792e4c4475706c696361746564486561727462656174000104544475706c696361746564206865617274626561742e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a090909d1070c2873705f7374616b696e671c6f6666656e6365384f6666656e636544657461696c7308205265706f727465720100204f6666656e64657201e4000801206f6666656e646572e401204f6666656e6465720001247265706f7274657273610501345665633c5265706f727465723e0000d50700000408fc3000d9070c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454012c045300000400d90301185665633c543e0000dd070c4070616c6c65745f626167735f6c697374106c697374104e6f646508045400044900001401086964000130543a3a4163636f756e744964000110707265769401504f7074696f6e3c543a3a4163636f756e7449643e0001106e6578749401504f7074696f6e3c543a3a4163636f756e7449643e0001246261675f7570706572280120543a3a53636f726500011473636f7265280120543a3a53636f72650000e1070c4070616c6c65745f626167735f6c697374106c6973740c4261670804540004490000080110686561649401504f7074696f6e3c543a3a4163636f756e7449643e0001107461696c9401504f7074696f6e3c543a3a4163636f756e7449643e0000e5070c4070616c6c65745f626167735f6c6973741870616c6c6574144572726f72080454000449000104104c6973740400e90701244c6973744572726f72000004b441206572726f7220696e20746865206c69737420696e7465726661636520696d706c656d656e746174696f6e2e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a090909e9070c4070616c6c65745f626167735f6c697374106c697374244c6973744572726f72000110244475706c6963617465000000284e6f7448656176696572000100304e6f74496e53616d65426167000200304e6f64654e6f74466f756e6400030000ed070c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401e105045300000400f10701185665633c543e0000f107000002e10500f507083870616c6c65745f76657374696e672052656c656173657300010808563000000008563100010000f9070c3870616c6c65745f76657374696e671870616c6c6574144572726f72040454000114284e6f7456657374696e6700000484546865206163636f756e7420676976656e206973206e6f742076657374696e672e5441744d617856657374696e675363686564756c65730001082501546865206163636f756e7420616c72656164792068617320604d617856657374696e675363686564756c65736020636f756e74206f66207363686564756c657320616e642074687573510163616e6e6f742061646420616e6f74686572206f6e652e20436f6e7369646572206d657267696e67206578697374696e67207363686564756c657320696e206f7264657220746f2061646420616e6f746865722e24416d6f756e744c6f770002040501416d6f756e74206265696e67207472616e7366657272656420697320746f6f206c6f7720746f2063726561746520612076657374696e67207363686564756c652e605363686564756c65496e6465784f75744f66426f756e6473000304d0416e20696e64657820776173206f7574206f6620626f756e6473206f66207468652076657374696e67207363686564756c65732e54496e76616c69645363686564756c65506172616d730004040d014661696c656420746f206372656174652061206e6577207363686564756c65206265636175736520736f6d6520706172616d657465722077617320696e76616c69642e04744572726f7220666f72207468652076657374696e672070616c6c65742efd07000004080004000108083c70616c6c65745f6d756c7469736967204d756c7469736967102c426c6f636b4e756d62657201101c42616c616e63650118244163636f756e7449640100304d6178417070726f76616c7300001001107768656e0d01015854696d65706f696e743c426c6f636b4e756d6265723e00011c6465706f73697418011c42616c616e63650001246465706f7369746f720001244163636f756e744964000124617070726f76616c730508018c426f756e6465645665633c4163636f756e7449642c204d6178417070726f76616c733e000005080c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540100045300000400610501185665633c543e000009080c3c70616c6c65745f6d756c74697369671870616c6c6574144572726f72040454000138404d696e696d756d5468726573686f6c640000047c5468726573686f6c64206d7573742062652032206f7220677265617465722e3c416c7265616479417070726f766564000104ac43616c6c20697320616c726561647920617070726f7665642062792074686973207369676e61746f72792e444e6f417070726f76616c734e65656465640002049c43616c6c20646f65736e2774206e65656420616e7920286d6f72652920617070726f76616c732e44546f6f4665775369676e61746f72696573000304a854686572652061726520746f6f20666577207369676e61746f7269657320696e20746865206c6973742e48546f6f4d616e795369676e61746f72696573000404ac54686572652061726520746f6f206d616e79207369676e61746f7269657320696e20746865206c6973742e545369676e61746f726965734f75744f664f726465720005040d01546865207369676e61746f7269657320776572652070726f7669646564206f7574206f66206f726465723b20746865792073686f756c64206265206f7264657265642e4c53656e646572496e5369676e61746f726965730006040d015468652073656e6465722077617320636f6e7461696e656420696e20746865206f74686572207369676e61746f726965733b2069742073686f756c646e27742062652e204e6f74466f756e64000704dc4d756c7469736967206f7065726174696f6e206e6f7420666f756e64207768656e20617474656d7074696e6720746f2063616e63656c2e204e6f744f776e65720008042d014f6e6c7920746865206163636f756e742074686174206f726967696e616c6c79206372656174656420746865206d756c74697369672069732061626c6520746f2063616e63656c2069742e2c4e6f54696d65706f696e740009041d014e6f2074696d65706f696e742077617320676976656e2c2079657420746865206d756c7469736967206f7065726174696f6e20697320616c726561647920756e6465727761792e3857726f6e6754696d65706f696e74000a042d014120646966666572656e742074696d65706f696e742077617320676976656e20746f20746865206d756c7469736967206f7065726174696f6e207468617420697320756e6465727761792e4c556e657870656374656454696d65706f696e74000b04f4412074696d65706f696e742077617320676976656e2c20796574206e6f206d756c7469736967206f7065726174696f6e20697320756e6465727761792e3c4d6178576569676874546f6f4c6f77000c04d0546865206d6178696d756d2077656967687420696e666f726d6174696f6e2070726f76696465642077617320746f6f206c6f772e34416c726561647953746f726564000d04a0546865206461746120746f2062652073746f72656420697320616c72656164792073746f7265642e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a0909090d08083870616c6c65745f636f756e63696c48436f756e63696c5374616765557064617465042c426c6f636b4e756d626572011000080114737461676511080164436f756e63696c53746167653c426c6f636b4e756d6265723e0001286368616e6765645f617410012c426c6f636b4e756d62657200001108083870616c6c65745f636f756e63696c30436f756e63696c5374616765042c426c6f636b4e756d6265720110010c28416e6e6f756e63696e6704001508018c436f756e63696c5374616765416e6e6f756e63696e673c426c6f636b4e756d6265723e00000020456c656374696f6e040019080150436f756e63696c5374616765456c656374696f6e0001001049646c6504001d080174436f756e63696c537461676549646c653c426c6f636b4e756d6265723e000200001508083870616c6c65745f636f756e63696c58436f756e63696c5374616765416e6e6f756e63696e67042c426c6f636b4e756d62657201100008014063616e646964617465735f636f756e7410010c75333200011c656e64735f617410012c426c6f636b4e756d62657200001908083870616c6c65745f636f756e63696c50436f756e63696c5374616765456c656374696f6e000004014063616e646964617465735f636f756e7410010c75333200001d08083870616c6c65745f636f756e63696c40436f756e63696c537461676549646c65042c426c6f636b4e756d62657201100004011c656e64735f617410012c426c6f636b4e756d626572000021080c4c626f756e6465645f636f6c6c656374696f6e73407765616b5f626f756e6465645f766563385765616b426f756e646564566563080454012508045300000400290801185665633c543e00002508083870616c6c65745f636f756e63696c34436f756e63696c4d656d62657210244163636f756e7449640100204d656d626572496401281c42616c616e636501182c426c6f636b4e756d6265720110001801487374616b696e675f6163636f756e745f69640001244163636f756e7449640001447265776172645f6163636f756e745f69640001244163636f756e7449640001346d656d626572736869705f69642801204d656d62657249640001147374616b6518011c42616c616e63650001486c6173745f7061796d656e745f626c6f636b10012c426c6f636b4e756d626572000134756e706169645f72657761726418011c42616c616e6365000029080000022508002d08083870616c6c65745f636f756e63696c2443616e64696461746510244163636f756e74496401001c42616c616e636501181048617368012c24566f7465506f7765720118001801487374616b696e675f6163636f756e745f69640001244163636f756e7449640001447265776172645f6163636f756e745f69640001244163636f756e7449640001206379636c655f696428010c7536340001147374616b6518011c42616c616e6365000128766f74655f706f776572180124566f7465506f7765720001246e6f74655f68617368790201304f7074696f6e3c486173683e00003108083870616c6c65745f636f756e63696c144572726f720404540001603c41726974686d657469634572726f72000004c8556e65787065637465642061726974686d65746963206572726f7220286f766572666c6f77202f20756e646572666c6f7729244261644f726967696e000104484f726967696e20697320696e76616c69642e4043616e7443616e6469646174654e6f7700020439015573657220747269656420746f20616e6e6f756e63652063616e646964616379206f757473696465206f66207468652063616e64696461637920616e6e6f756e63656d656e7420706572696f642e4c43616e7452656c656173655374616b654e6f77000304f05573657220747269656420746f2072656c65617365207374616b65206f757473696465206f66207468652072657665616c696e6720706572696f642e5043616e6469646163795374616b65546f6f4c6f77000404b043616e64696461746520686176656e27742070726f76696465642073756666696369656e74207374616b652e4843616e7443616e6469646174655477696365000504f45573657220747269656420746f20616e6e6f756e63652063616e64696461637920747769636520696e207468652073616d6520656c656374696f6e732e40436f6e666c696374696e675374616b650006085d015573657220747269656420746f20616e6e6f756e63652063616e646964616379207769746820616e206163636f756e742074686174206861732074686520636f6e666c696374696e672074797065206f66207374616b653901776974682063616e646964616379207374616b6520616e6420686173206e6f7420656e6f7567682062616c616e636520666f72207374616b696e6720666f7220626f746820707572706f7365732e405374616b655374696c6c4e6565646564000704dc436f756e63696c206d656d62657220616e642063616e646964617465732063616e2774207769746864726177207374616b65207965742e1c4e6f5374616b65000804c45573657220747269656420746f2072656c65617365207374616b65207768656e206e6f207374616b65206578697374732e74496e73756666696369656e7442616c616e6365466f725374616b696e67000904ac496e73756666696369656e742062616c616e636520666f722063616e646964616379207374616b696e672e4c43616e74566f7465466f72596f757273656c66000a048443616e6469646174652063616e277420766f746520666f722068696d73656c662e5c4d656d62657249644e6f744d617463684163636f756e74000b044c496e76616c6964206d656d626572736869702e68496e76616c69644163636f756e74546f5374616b655265757365000c08510154686520636f6d62696e6174696f6e206f66206d656d6265727368697020696420616e64206163636f756e7420696420697320696e76616c696420666f7220756e7374616b696e6720616e206578697374696e674063616e646964616379207374616b652e444e6f7443616e6469646174696e674e6f77000d04d85573657220747269656420746f2077697468647261772063616e646964616379207768656e206e6f742063616e6469646174696e672e6043616e74576974686472617743616e6469646163794e6f77000e04190143616e27742077697468647261772063616e646964616379206f757473696465206f66207468652063616e64696461637920616e6e6f756e63656d656e7420706572696f642e304e6f74436f756e63696c6f72000f0478546865206d656d626572206973206e6f74206120636f756e63696c6f722e88496e73756666696369656e7446756e6473466f7246756e64696e6752657175657374001004f0496e737566666963656e742066756e647320696e20636f756e63696c20666f7220657865637574696e67202746756e64696e67205265717565737427585a65726f42616c616e636546756e64526571756573740011045c46756e642072657175657374206e6f2062616c616e636568526570656174656446756e64526571756573744163636f756e74001204fc5468652073616d65206163636f756e7420697320726563696576696e672066756e64732066726f6d207468652073616d65207265717565737420747769636550456d70747946756e64696e675265717565737473001304ac46756e64696e6720726571756573747320776974686f757420726563696576696e67206163636f756e747370496e73756666696369656e74546f6b656e73466f7246756e64696e67001404f8496e73756666696369656e7420746f6b656e7320666f722066756e64696e6720286f6e206d656d62657220636f6e74726f6c6c6572206163636f756e7429445a65726f546f6b656e7346756e64696e670015047c547279696e6720746f2066756e642077697468207a65726f20746f6b656e735443616e646964617465446f65734e6f7445786973740016045843616e646964617465206964206e6f7420666f756e6478496e73756666696369656e7442616c616e6365466f725472616e73666572001704b443616e6e6f742077697468647261773a20696e73756666696369656e74206275646765742062616c616e63652e0438436f756e63696c206572726f72733508084470616c6c65745f7265666572656e64756d3c5265666572656e64756d5374616765082c426c6f636b4e756d62657201104c496e7465726d65646961746557696e6e657273013908010c20496e61637469766500000018566f74696e6704003d0801885265666572656e64756d5374616765566f74696e673c426c6f636b4e756d6265723e0001002452657665616c696e670400410801e85265666572656e64756d537461676552657665616c696e673c426c6f636b4e756d6265722c20496e7465726d65646961746557696e6e6572733e0002000039080c4c626f756e6465645f636f6c6c656374696f6e73407765616b5f626f756e6465645f766563385765616b426f756e646564566563080454012501045300000400210101185665633c543e00003d08084470616c6c65745f7265666572656e64756d545265666572656e64756d5374616765566f74696e67042c426c6f636b4e756d62657201100010011c7374617274656410012c426c6f636b4e756d62657200015077696e6e696e675f7461726765745f636f756e7410010c75333200014063757272656e745f6379636c655f696428010c75363400011c656e64735f617410012c426c6f636b4e756d62657200004108084470616c6c65745f7265666572656e64756d605265666572656e64756d537461676552657665616c696e67082c426c6f636b4e756d62657201104c496e7465726d65646961746557696e6e6572730139080014011c7374617274656410012c426c6f636b4e756d62657200015077696e6e696e675f7461726765745f636f756e7410010c753332000150696e7465726d6564696174655f77696e6e6572733908014c496e7465726d65646961746557696e6e65727300014063757272656e745f6379636c655f696428010c75363400011c656e64735f617410012c426c6f636b4e756d62657200004508084470616c6c65745f7265666572656e64756d2043617374566f74650c1048617368012c2043757272656e63790118204d656d6265724964012800100128636f6d6d69746d656e742c0110486173680001206379636c655f696428010c7536340001147374616b6518012043757272656e6379000120766f74655f666f72350101404f7074696f6e3c4d656d62657249643e00004908084470616c6c65745f7265666572656e64756d144572726f72080454000449000138244261644f726967696e000004444f726967696e20697320696e76616c6964505265666572656e64756d4e6f7452756e6e696e67000104a85265666572656e64756d206973206e6f742072756e6e696e67207768656e20657870656374656420746f5852657665616c696e674e6f74496e50726f6772657373000204b052657665616c696e67207374616765206973206e6f7420696e2070726f6772657373207269676874206e6f775c436f6e666c6963745374616b65734f6e4163636f756e74000304b05374616b696e67206163636f756e7420636f6e7461696e7320636f6e666c696374696e67207374616b65732e68496e73756666696369656e7442616c616e6365546f5374616b650004049c4163636f756e7420496e73756666696369656e7420467265652042616c616e636520286e6f772944496e73756666696369656e745374616b65000504a8496e73756666696369656e74207374616b652070726f766964656420746f2063617374206120766f746534496e76616c696452657665616c000604190153616c7420616e64207265666572656e64756d206f7074696f6e2070726f766964656420646f6e277420636f72726573706f6e6420746f2074686520636f6d6d69746d656e742c496e76616c6964566f7465000704a4566f746520666f72206e6f74206578697374696e67206f7074696f6e207761732072657665616c65643c566f74654e6f744578697374696e670008049c547279696e6720746f2072657665616c20766f7465207468617420776173206e6f74206361737454416c7265616479566f746564546869734379636c65000904b8547279696e6720746f20766f7465206d756c7469706c652074696d6520696e207468652073616d65206379636c6560556e7374616b696e67566f7465496e53616d654379636c65000a04a0496e76616c69642074696d6520746f2072656c6561736520746865206c6f636b6564207374616b652c53616c74546f6f4c6f6e67000b044053616c7420697320746f6f206c6f6e6748556e7374616b696e67466f7262696464656e000c04f0556e7374616b696e6720686173206265656e20666f7262696464656e20666f7220746865207573657220286174206c6561737420666f72206e6f7729784163636f756e74416c72656164794f707465644f75744f66566f74696e67000d041d014120766f74652063616e6e6f7420626520636173742066726f6d20616e206163636f756e74207468617420616c7265616479206f70746564206f7574206f6620766f74696e672e04445265666572656e64756d206572726f72734d08084470616c6c65745f6d656d62657273686970404d656d626572736869704f626a65637408244163636f756e74496401001048617368012c0014012c68616e646c655f686173682c011048617368000130726f6f745f6163636f756e740001244163636f756e744964000148636f6e74726f6c6c65725f6163636f756e740001244163636f756e7449640001207665726966696564980110626f6f6c00011c696e766974657310010c75333200005108084470616c6c65745f6d656d626572736869706c5374616b696e674163636f756e744d656d62657242696e64696e6704204d656d62657249640128000801246d656d6265725f69642801204d656d6265724964000124636f6e6669726d6564980110626f6f6c00005508084470616c6c65745f6d656d62657273686970144572726f720404540001587c4e6f74456e6f75676842616c616e6365546f4275794d656d62657273686970000004944e6f7420656e6f7567682062616c616e636520746f20627579206d656d626572736869702e64436f6e74726f6c6c65724163636f756e74526571756972656400010470436f6e74726f6c6c6572206163636f756e742072657175697265642e4c526f6f744163636f756e74526571756972656400020458526f6f74206163636f756e742072657175697265642e38556e7369676e65644f726967696e00030440556e7369676e6564206f726967696e2e544d656d62657250726f66696c654e6f74466f756e64000404b44d656d6265722070726f66696c65206e6f7420666f756e642028696e76616c6964206d656d626572206964292e5c48616e646c65416c7265616479526567697374657265640005046848616e646c6520616c726561647920726567697374657265642e9848616e646c654d757374426550726f7669646564447572696e67526567697374726174696f6e000604b048616e646c65206d7573742062652070726f766964656420647572696e6720726567697374726174696f6e2e4c526566657272657249734e6f744d656d626572000704d043616e6e6f742066696e642061206d656d6265727368697020666f7220612070726f76696465642072656665727265722069642e8443616e6e6f745472616e73666572496e7669746573466f724e6f744d656d6265720008049853686f756c642062652061206d656d62657220746f207265636569766520696e76697465732e404e6f74456e6f756768496e7669746573000904ac4e6f7420656e6f75676820696e766974657320746f20706572666f726d20616e206f7065726174696f6e2e60576f726b696e6747726f75704c65616465724e6f74536574000a04ac4d656d6265727368697020776f726b696e672067726f7570206c6561646572206973206e6f74207365742e845374616b696e674163636f756e744973416c726561647952656769737465726564000b04b85374616b696e67206163636f756e74206973207265676973746572656420666f7220736f6d65206d656d6265722e645374616b696e674163636f756e74446f65736e744578697374000c04b45374616b696e67206163636f756e7420666f72206d656d6265727368697020646f65736e27742065786973742e785374616b696e674163636f756e74416c7265616479436f6e6669726d6564000d04ac5374616b696e67206163636f756e742068617320616c7265616479206265656e20636f6e6669726d65642eb0576f726b696e6747726f757042756467657449734e6f7453756666696369656e74466f72496e766974696e67000e08490143616e6e6f7420696e766974652061206d656d6265722e20576f726b696e672067726f75702062616c616e6365206973206e6f742073756666696369656e7420746f20736574207468652064656661756c742062616c616e63652e3c436f6e666c696374696e674c6f636b000f04410143616e6e6f7420696e766974652061206d656d6265722e2054686520636f6e74726f6c6c6572206163636f756e742068617320616e206578697374696e6720636f6e666c696374696e67206c6f636b2e8c43616e6e6f74457863656564526566657272616c43757450657263656e744c696d6974001004010143616e6e6f7420736574206120726566657272616c206375742070657263656e742076616c75652e20546865206c696d6974207761732065786365656465642e5c436f6e666c6963745374616b65734f6e4163636f756e74001104b05374616b696e67206163636f756e7420636f6e7461696e7320636f6e666c696374696e67207374616b65732e7c496e73756666696369656e7442616c616e6365546f436f7665725374616b6500120490496e73756666696369656e742062616c616e636520746f20636f766572207374616b652e504769664c6f636b45786365656473437265646974001304ac4c6f636b656420616d6f756e742069732067726561746572207468616e2063726564697420616d6f756e7464496e73756666696369656e7442616c616e6365546f47696674001404c047696674657220646f65736e277420686176652073756666696369656e742062616c616e636520746f2063726564697484496e73756666696369656e7442616c616e6365546f436f7665725061796d656e7400150498496e73756666696369656e742062616c616e636520746f20636f766572207061796d656e742e048c4d656d62657273686970206d6f64756c6520707265646566696e6564206572726f72735908083070616c6c65745f666f72756d2043617465676f72790c2843617465676f7279496401281048617368012c44537469636b696564546872656164496473015d08002001287469746c655f686173682c0110486173680001406465736372697074696f6e5f686173682c0110486173680001206172636869766564980110626f6f6c0001606e756d5f6469726563745f73756263617465676f7269657310010c7533320001486e756d5f6469726563745f7468726561647310010c7533320001546e756d5f6469726563745f6d6f64657261746f727310010c753332000148706172656e745f63617465676f72795f6964350101484f7074696f6e3c43617465676f727949643e000144737469636b795f7468726561645f6964735d080144537469636b69656454687265616449647300005d080c4c626f756e6465645f636f6c6c656374696f6e7344626f756e6465645f62747265655f7365743c426f756e646564425472656553657408045401280453000004006901012c42547265655365743c543e00006108083070616c6c65745f666f72756d185468726561640c2c466f72756d55736572496401282843617465676f72794964012848526570617961626c65426c6f6174426f6e6401e1010010012c63617465676f72795f696428012843617465676f72794964000124617574686f725f696428012c466f72756d55736572496400013c636c65616e75705f7061795f6f6666e1010148526570617961626c65426c6f6174426f6e640001606e756d6265725f6f665f6564697461626c655f706f7374732801344e756d6265724f66506f73747300006508083070616c6c65745f666f72756d10506f7374142c466f72756d557365724964012820546872656164496401281048617368012c2c426c6f636b4e756d626572011048526570617961626c65426c6f6174426f6e6401e101001401247468726561645f69642801205468726561644964000124746578745f686173682c011048617368000124617574686f725f696428012c466f72756d55736572496400013c636c65616e75705f7061795f6f6666e1010148526570617961626c65426c6f6174426f6e6400012c6c6173745f65646974656410012c426c6f636b4e756d62657200006908083070616c6c65745f666f72756d144572726f7204045400016c3c41726974686d657469634572726f72000004c8556e65787065637465642061726974686d65746963206572726f7220286f766572666c6f77202f20756e646572666c6f7729484f726967696e4e6f74466f72756d4c656164000104b44f726967696e20646f65736e277420636f72726573706f6e6420746f20616e79206c656164206163636f756e7468466f72756d5573657249644e6f744d617463684163636f756e7400020490466f72756d2075736572206964206e6f74206d6174636820697473206163636f756e742e684d6f64657261746f7249644e6f744d617463684163636f756e740003048c4d6f64657261746f72206964206e6f74206d6174636820697473206163636f756e742e7c4163636f756e74446f65734e6f744d61746368546872656164417574686f7200040498546872656164206e6f7420617574686f7265642062792074686520676976656e20757365722e48546872656164446f65734e6f7445786973740005045454687265616420646f6573206e6f742065786973747c4d6f64657261746f724d6f6465726174654f726967696e43617465676f7279000604d04d6f64657261746f722063616e2774206d6f6465726174652063617465676f727920636f6e7461696e696e67207468726561642e904d6f64657261746f724d6f64657261746544657374696e6174696f6e43617465676f7279000704b84d6f64657261746f722063616e2774206d6f6465726174652064657374696e6174696f6e2063617465676f72792e445468726561644d6f7665496e76616c6964000804984f726967696e206973207468652073616d65206173207468652064657374696e6174696f6e2e545468726561644e6f744265696e675570646174656400090464546872656164206e6f74206265696e6720757064617465642e90496e73756666696369656e7442616c616e6365466f725468726561644372656174696f6e000a048c4e6f7420656e6f7567682062616c616e636520746f20637265617465207468726561649843616e6e6f7444656c657465546872656164576974684f75747374616e64696e67506f737473000b04c441207468726561642077697468206f75747374616e64696e6720706f7374732063616e6e6f742062652072656d6f76656440506f7374446f65734e6f744578697374000c0450506f737420646f6573206e6f742065786973742e744163636f756e74446f65734e6f744d61746368506f7374417574686f72000d048c4163636f756e7420646f6573206e6f74206d6174636820706f737420617574686f722e68496e73756666696369656e7442616c616e6365466f72506f7374000e04684e6f7420656e6f7567682062616c616e636520746f20706f73745c43617465676f72794e6f744265696e6755706461746564000f046c43617465676f7279206e6f74206265696e6720757064617465642e64416e636573746f7243617465676f7279496d6d757461626c65001004d4416e636573746f722063617465676f727920696d6d757461626c652c20692e652e2064656c65746564206f72206172636869766564744d617856616c696443617465676f727944657074684578636565646564001104984d6178696d756d2076616c69642063617465676f72792064657074682065786365656465642e5043617465676f7279446f65734e6f7445786973740012046043617465676f727920646f6573206e6f742065786973742e7443617465676f72794d6f64657261746f72446f65734e6f744578697374001304c850726f7669646564206d6f64657261746f72206973206e6f7420676976656e2063617465676f7279206d6f64657261746f725c43617465676f72794e6f74456d707479546872656164730014049443617465676f7279207374696c6c20636f6e7461696e7320736f6d6520746872656164732e6843617465676f72794e6f74456d70747943617465676f72696573001504ac43617465676f7279207374696c6c20636f6e7461696e7320736f6d652073756263617465676f726965732e6c4d6f64657261746f7243616e7444656c65746543617465676f7279001604884e6f207065726d697373696f6e7320746f2064656c6574652063617465676f72792e6c4d6f64657261746f7243616e7455706461746543617465676f7279001704884e6f207065726d697373696f6e7320746f207570646174652063617465676f72792e304d617053697a654c696d6974001804904d6178696d756d2073697a65206f662073746f72616765206d617020657863656564656484506174684c656e67746853686f756c644265477265617465725468616e5a65726f001904b443617465676f72792070617468206c656e2073686f756c642062652067726561746572207468616e207a65726f884d61784e756d6265724f66537469636b696564546872656164734578636565646564001a04e04d6178696d756d206e756d626572206f6620737469636b6965642074687265616473207065722063617465676f7279206578636565646564045c466f72756d20707265646566696e6564206572726f72736d08084c70616c6c65745f636f6e737469747574696f6e40436f6e737469747574696f6e496e666f041048617368012c00040124746578745f686173682c01104861736800007108083470616c6c65745f626f756e747930426f756e74795265636f7264101c42616c616e636501182c426c6f636b4e756d6265720110204d656d626572496401285c436c6f736564436f6e747261637457686974656c6973740175080014013c6372656174696f6e5f706172616d737908012501426f756e7479506172616d65746572733c42616c616e63652c20426c6f636b4e756d6265722c204d656d62657249642c20436c6f736564436f6e747261637457686974656c6973743e000134746f74616c5f66756e64696e6718011c42616c616e63650001246d696c6573746f6e6581080170426f756e74794d696c6573746f6e653c426c6f636b4e756d6265723e00015c6163746976655f776f726b5f656e7472795f636f756e7410010c7533320001606861735f756e706169645f6f7261636c655f726577617264980110626f6f6c000075080c4c626f756e6465645f636f6c6c656374696f6e7344626f756e6465645f62747265655f7365743c426f756e646564425472656553657408045401280453000004006901012c42547265655365743c543e00007908083470616c6c65745f626f756e747940426f756e7479506172616d6574657273101c42616c616e636501182c426c6f636b4e756d6265720110204d656d626572496401285c436c6f736564436f6e747261637457686974656c697374017508001c01186f7261636c6579010154426f756e74794163746f723c4d656d62657249643e000134636f6e74726163745f747970657d0801b84173737572616e6365436f6e7472616374547970653c436c6f736564436f6e747261637457686974656c6973743e00011c63726561746f7279010154426f756e74794163746f723c4d656d62657249643e00011863686572727918011c42616c616e63650001346f7261636c655f72657761726418011c42616c616e6365000134656e7472616e745f7374616b6518011c42616c616e636500013066756e64696e675f747970658101018446756e64696e67547970653c426c6f636b4e756d6265722c2042616c616e63653e00007d08083470616c6c65745f626f756e7479544173737572616e6365436f6e747261637454797065045c436c6f736564436f6e747261637457686974656c6973740175080108104f70656e00000018436c6f73656404007508015c436c6f736564436f6e747261637457686974656c697374000100008108083470616c6c65745f626f756e74793c426f756e74794d696c6573746f6e65042c426c6f636b4e756d626572011001141c43726561746564080128637265617465645f617410012c426c6f636b4e756d6265720001446861735f636f6e747269627574696f6e73980110626f6f6c0000005c426f756e74794d617846756e64696e675265616368656400010034576f726b5375626d6974746564000200285465726d696e61746564000300444a7564676d656e745375626d69747465640401447375636365737366756c5f626f756e7479980110626f6f6c00040000850800000408287901008908083470616c6c65745f626f756e747930436f6e747269627574696f6e0404540000080118616d6f756e7418013042616c616e63654f663c543e00017866756e6465725f73746174655f626c6f61745f626f6e645f616d6f756e7418013042616c616e63654f663c543e00008d08083470616c6c65745f626f756e74792c456e7472795265636f72640c244163636f756e7449640100204d656d626572496401282c426c6f636b4e756d6265720110001001246d656d6265725f69642801204d656d62657249640001487374616b696e675f6163636f756e745f69640001244163636f756e7449640001307375626d69747465645f617410012c426c6f636b4e756d626572000138776f726b5f7375626d6974746564980110626f6f6c00009108083470616c6c65745f626f756e7479144572726f7204045400018c3c41726974686d657469634572726f72000004c8556e65787065637465642061726974686d65746963206572726f7220286f766572666c6f77202f20756e646572666c6f7729b04d696e46756e64696e67416d6f756e7443616e6e6f744265477265617465725468616e4d6178416d6f756e74000104d44d696e2066756e64696e6720616d6f756e742063616e6e6f742062652067726561746572207468616e206d617820616d6f756e742e44426f756e7479446f65736e74457869737400020450426f756e747920646f65736e742065786973742e605377697463684f7261636c654f726967696e4973526f6f7400030489014f726967696e20697320726f6f742c20736f20737769746368696e67206f7261636c65206973206e6f7420616c6c6f77656420696e20746869732065787472696e7369632e202863616c6c207377697463685f6f7261636c655f61735f726f6f742974496e76616c69645374616765556e657870656374656446756e64696e67000404c8556e657870656374656420626f756e747920737461676520666f7220616e206f7065726174696f6e3a2046756e64696e672ea8496e76616c69645374616765556e65787065637465644e6f46756e64696e67436f6e7472696275746564000504fc556e657870656374656420626f756e747920737461676520666f7220616e206f7065726174696f6e3a204e6f46756e64696e67436f6e74726962757465642e7c496e76616c69645374616765556e657870656374656443616e63656c6c6564000604d0556e657870656374656420626f756e747920737461676520666f7220616e206f7065726174696f6e3a2043616e63656c6c65642e90496e76616c69645374616765556e6578706563746564576f726b5375626d697373696f6e000704e4556e657870656374656420626f756e747920737461676520666f7220616e206f7065726174696f6e3a20576f726b5375626d697373696f6e2e78496e76616c69645374616765556e65787065637465644a7564676d656e74000804cc556e657870656374656420626f756e747920737461676520666f7220616e206f7065726174696f6e3a204a7564676d656e742ec0496e76616c69645374616765556e65787065637465645375636365737366756c426f756e74795769746864726177616c0009041501556e657870656374656420626f756e747920737461676520666f7220616e206f7065726174696f6e3a205375636365737366756c426f756e74795769746864726177616c2eb0496e76616c69645374616765556e65787065637465644661696c6564426f756e74795769746864726177616c000a040501556e657870656374656420626f756e747920737461676520666f7220616e206f7065726174696f6e3a204661696c6564426f756e74795769746864726177616c2e70496e73756666696369656e7442616c616e6365466f72426f756e7479000b04a4496e73756666696369656e742062616c616e636520666f72206120626f756e7479206368657272792e644e6f426f756e7479436f6e747269627574696f6e466f756e64000c048443616e6e6f7420666f756e6420626f756e747920636f6e747269627574696f6e2e6c496e73756666696369656e7442616c616e6365466f725374616b65000d04a05468657265206973206e6f7420656e6f7567682062616c616e636520666f722061207374616b652e44436f6e666c696374696e675374616b6573000e04bc54686520636f6e666c696374696e67207374616b6520646973636f76657265642e2043616e6e6f74207374616b652e50576f726b456e747279446f65736e744578697374000f0460576f726b20656e74727920646f65736e742065786973742e704368657272794c6573735468656e4d696e696d756d416c6c6f77656400100484436865727279206c657373207468616e206d696e696d756d20616c6c6f7765642e9843616e6e6f745375626d6974576f726b546f436c6f736564436f6e7472616374426f756e74790011085101496e636f6d70617469626c65206173737572616e636520636f6e7472616374207479706520666f722061206d656d6265723a2063616e6e6f74207375626d697420776f726b20746f207468652027636c6f7365646c6173737572616e63652720626f756e747920636f6e74726163742e7c436c6f736564436f6e74726163744d656d6265724c6973744973456d707479001204290143616e6e6f742063726561746520612027636c6f736564206173737572616e636520636f6e74726163742720626f756e7479207769746820656d707479206d656d626572206c6973742e88436c6f736564436f6e74726163744d656d6265724c6973744973546f6f4c61726765001308290143616e6e6f742063726561746520612027636c6f736564206173737572616e636520636f6e74726163742720626f756e74792077697468206d656d626572206c697374206c6172676572887468616e20616c6c6f776564206d617820776f726b20656e747279206c696d69742e70436c6f736564436f6e74726163744d656d6265724e6f74466f756e64001404410127636c6f736564206173737572616e636520636f6e74726163742720626f756e7479206d656d626572206c6973742063616e206f6e6c7920696e636c756465206578697374696e67206d656d6265727354496e76616c69644f7261636c654d656d6265724964001504fc50726f7669646564206f7261636c65206d656d62657220696420646f6573206e6f742062656c6f6e6720746f20616e206578697374696e67206d656d62657278496e76616c69645374616b696e674163636f756e74466f724d656d626572001604ac5374616b696e67206163636f756e7420646f65736e27742062656c6f6e6720746f2061206d656d6265722e405a65726f57696e6e65725265776172640017048c43616e6e6f7420736574207a65726f2072657761726420666f722077696e6e6572732e98546f74616c52657761726453686f756c644265457175616c546f546f74616c46756e64696e67001804150154686520746f74616c2072657761726420666f722077696e6e6572732073686f756c6420626520657175616c20746f20746f74616c20626f756e74792066756e64696e672e74456e7472616e745374616b6549734c6573735468616e4d696e696e756d0019042d0143616e6e6f7420637265617465206120626f756e7479207769746820616e20656e7472616e74207374616b65206973206c657373207468616e207265717569726564206d696e696d756d2e6446756e64696e67416d6f756e7443616e6e6f7442655a65726f001a04e843616e6e6f7420637265617465206120626f756e74792077697468207a65726f2066756e64696e6720616d6f756e7420706172616d657465722e6446756e64696e67506572696f6443616e6e6f7442655a65726f001b04e843616e6e6f7420637265617465206120626f756e74792077697468207a65726f2066756e64696e6720706572696f6420706172616d657465722e7457696e6e657253686f756c64486173576f726b5375626d697373696f6e001c04f0496e76616c6964206a7564676d656e74202d20616c6c2077696e6e6572732073686f756c64206861766520776f726b207375626d697373696f6e732e80496e76616c6964436f6e7472696275746f724163746f72537065636966696564001d0470426f756e747920636f6e7472696275746f72206e6f7420666f756e646c496e76616c69644f7261636c654163746f72537065636966696564001e045c426f756e7479206f7261636c65206e6f7420666f756e6474496e76616c6964456e7472616e74576f726b6572537065636966696564001f04a44d656d62657220737065636966696564206973206e6f7420616e20656e7472616e7420776f726b657270496e76616c696443726561746f724163746f72537065636966696564002004a8496e76616c69642043726561746f72204163746f7220666f7220426f756e74792073706563696669656474576f726b456e747279446f65736e7442656c6f6e67546f576f726b6572002104f8576f726b657220747269656420746f20616363657373206120776f726b20656e747279207468617420646f65736e27742062656c6f6e6720746f2068696d704f7261636c65526577617264416c726561647957697468647261776e002204884f7261636c65206861766520616c7265616479206265656e2077697468647261776e047c426f756e74792070616c6c657420707265646566696e6564206572726f72739508086070616c6c65745f6a6f7973747265616d5f7574696c697479144572726f7204045400010c80496e73756666696369656e7446756e6473466f724275646765745570646174650000041d01496e73756666696369656e742066756e647320666f72202755706461746520576f726b696e672047726f757020427564676574272070726f706f73616c20657865637574696f6e385a65726f546f6b656e734275726e00010468547279696e6720746f206275726e207a65726f20746f6b656e7360496e73756666696369656e7446756e6473466f724275726e00020478496e73756666696369656e742066756e647320666f72206275726e696e670478436f646578206d6f64756c6520707265646566696e6564206572726f727399080c3870616c6c65745f636f6e74656e741474797065732c566964656f5265636f726410244368616e6e656c49640128204f776e65644e6674019d0838566964656f41737365747353657401bd0848526570617961626c65426c6f6174426f6e6401e10100100128696e5f6368616e6e656c2801244368616e6e656c49640001286e66745f737461747573c10801404f7074696f6e3c4f776e65644e66743e000130646174615f6f626a65637473bd080138566964656f417373657473536574000158766964656f5f73746174655f626c6f61745f626f6e64e1010148526570617961626c65426c6f6174426f6e6400009d08103870616c6c65745f636f6e74656e740c6e6674147479706573204f776e65644e66740c4c5472616e73616374696f6e616c53746174757301a108204d656d626572496401282441756374696f6e49640128001001146f776e6572b90801484e66744f776e65723c4d656d62657249643e0001507472616e73616374696f6e616c5f737461747573a108014c5472616e73616374696f6e616c53746174757300013c63726561746f725f726f79616c74791102013c4f7074696f6e3c526f79616c74793e00014c6f70656e5f61756374696f6e735f6e6f6e636528012441756374696f6e49640000a108103870616c6c65745f636f6e74656e740c6e6674147479706573645472616e73616374696f6e616c5374617475735265636f726410204d656d626572496401281c42616c616e6365011848456e676c69736841756374696f6e5479706501a5083c4f70656e41756374696f6e5479706501b50801141049646c6500000058496e697469617465644f66666572546f4d656d62657208002801204d656d626572496400004501013c4f7074696f6e3c42616c616e63653e00010038456e676c69736841756374696f6e0400a5080148456e676c69736841756374696f6e547970650002002c4f70656e41756374696f6e0400b508013c4f70656e41756374696f6e54797065000300184275794e6f77040018011c42616c616e636500040000a508103870616c6c65745f636f6e74656e740c6e667414747970657350456e676c69736841756374696f6e5265636f7264102c426c6f636b4e756d62657201101c42616c616e63650118204d656d626572496401284c4e667441756374696f6e57686974656c69737401a908002001387374617274696e675f707269636518011c42616c616e63650001346275795f6e6f775f70726963654501013c4f7074696f6e3c42616c616e63653e00012477686974656c697374a908014c4e667441756374696f6e57686974656c69737400010c656e6410012c426c6f636b4e756d626572000114737461727410012c426c6f636b4e756d626572000140657874656e73696f6e5f706572696f6410012c426c6f636b4e756d6265720001306d696e5f6269645f7374657018011c42616c616e636500011c746f705f626964ad0801b04f7074696f6e3c456e676c69736841756374696f6e4269643c42616c616e63652c204d656d62657249643e3e0000a9080c4c626f756e6465645f636f6c6c656374696f6e7344626f756e6465645f62747265655f7365743c426f756e646564425472656553657408045401280453000004006901012c42547265655365743c543e0000ad0804184f7074696f6e04045401b1080108104e6f6e6500000010536f6d650400b1080000010000b108103870616c6c65745f636f6e74656e740c6e667414747970657344456e676c69736841756374696f6e426964081c42616c616e63650118204d656d6265724964012800080118616d6f756e7418011c42616c616e63650001246269646465725f69642801204d656d62657249640000b508103870616c6c65745f636f6e74656e740c6e6674147479706573444f70656e41756374696f6e5265636f7264102c426c6f636b4e756d62657201102441756374696f6e496401281c42616c616e636501184c4e667441756374696f6e57686974656c69737401a908001801387374617274696e675f707269636518011c42616c616e63650001346275795f6e6f775f70726963654501013c4f7074696f6e3c42616c616e63653e00012477686974656c697374a908014c4e667441756374696f6e57686974656c6973740001446269645f6c6f636b5f6475726174696f6e10012c426c6f636b4e756d62657200012861756374696f6e5f696428012441756374696f6e4964000114737461727410012c426c6f636b4e756d6265720000b908103870616c6c65745f636f6e74656e740c6e6674147479706573204e66744f776e657204204d656d626572496401280108304368616e6e656c4f776e6572000000184d656d62657204002801204d656d626572496400010000bd080c4c626f756e6465645f636f6c6c656374696f6e7344626f756e6465645f62747265655f7365743c426f756e646564425472656553657408045401280453000004006901012c42547265655365743c543e0000c10804184f7074696f6e040454019d080108104e6f6e6500000010536f6d6504009d080000010000c508103870616c6c65745f636f6e74656e742c7065726d697373696f6e733463757261746f725f67726f75704843757261746f7247726f75705265636f7264085c43757261746f7247726f757043757261746f72734d617001c908704d6f6465726174696f6e5065726d697373696f6e7342794c6576656c01cd08000c012063757261746f7273c908015c43757261746f7247726f757043757261746f72734d6170000118616374697665980110626f6f6c0001507065726d697373696f6e735f62795f6c6576656ccd0801704d6f6465726174696f6e5065726d697373696f6e7342794c6576656c0000c9080c4c626f756e6465645f636f6c6c656374696f6e7344626f756e6465645f62747265655f6d61703c426f756e64656442547265654d61700c044b0128045601b501045300000400c501013842547265654d61703c4b2c20563e0000cd080c4c626f756e6465645f636f6c6c656374696f6e7344626f756e6465645f62747265655f6d61703c426f756e64656442547265654d61700c044b0108045601d108045300000400d508013842547265654d61703c4b2c20563e0000d1080c4c626f756e6465645f636f6c6c656374696f6e7344626f756e6465645f62747265655f7365743c426f756e6465644254726565536574080454015d020453000004005902012c42547265655365743c543e0000d508042042547265654d617008044b0108045601d108000400d908000000d908000002dd0800dd080000040808d10800e108103870616c6c65745f636f6e74656e740c6e6674147479706573504f70656e41756374696f6e4269645265636f72640c1c42616c616e636501182c426c6f636b4e756d62657201102441756374696f6e49640128000c0118616d6f756e7418011c42616c616e63650001346d6164655f61745f626c6f636b10012c426c6f636b4e756d62657200012861756374696f6e5f696428012441756374696f6e49640000e5080c3870616c6c65745f636f6e74656e74186572726f7273144572726f7204045400010502704368616e6e656c5374617465426c6f6174426f6e644368616e676564000004e4496e76616c69642065787472696e7369632063616c6c3a204368616e6e656c20737461746520626c6f617420626f6e64206368616e6765642e68566964656f5374617465426c6f6174426f6e644368616e676564000104dc496e76616c69642065787472696e7369632063616c6c3a20766964656f20737461746520626c6f617420626f6e64206368616e6765642e544d696e436173686f757456616c7565546f6f4c6f77000204d8417474656d707420746f20736574206d696e696d756d20636173686f757420616c6c6f7765642062656c6f7720746865206c696d6974584d6178436173686f757456616c7565546f6f48696768000304d8417474656d707420746f20736574206d696e696d756d20636173686f757420616c6c6f7765642061626f766520746865206c696d69749c4d61784e756d6265724f664368616e6e656c436f6c6c61626f7261746f7273457863656564656400040429014e756d626572206f66206368616e6e656c20636f6c6c61626f7261746f72732065786365656473204d61784e756d6265724f66436f6c6c61626f7261746f72735065724368616e6e656c804d61784e756d6265724f664368616e6e656c4173736574734578636565646564000504f04e756d626572206f66206368616e6e656c206173736574732065786365656473204d61784e756d6265724f664173736574735065724368616e6e656c784d61784e756d6265724f66566964656f4173736574734578636565646564000604ec4e756d626572206f6620766964656f206173736574732065786365656473204d61784d61784e756d6265724f66417373657473506572566964656fa84d61784e756d6265724f664368616e6e656c4167656e745065726d697373696f6e73457863656564656400070419014d6178696d756d206e756d626572206f66206368616e6e656c206167656e74207065726d697373696f6e7320666f72206368616e6e656c206167656e74206578636565646564ac4d61784e756d6265724f6650617573656446656174757265735065724368616e6e656c4578636565646564000804d84d6178696d756d206e756d626572206f662070617573656420666561747572657320706572206368616e6e656c20657863656564656480496e76616c69644368616e6e656c4261675769746e65737350726f766964656400090411014368616e6e656c20626167207769746e65737320706172616d657465727320646f6e2774206d61746368207468652063757272656e742072756e74696d652073746174659c496e76616c696453746f726167654275636b6574734e756d5769746e65737350726f7669646564000a04450153746f72616765206275636b657473206e756d626572207769746e65737320706172616d6574657220646f6573206e6f74206d61746368207468652063757272656e742072756e74696d652073746174657c4d697373696e6753746f726167654275636b6574734e756d5769746e657373000b084d0153746f72616765206275636b657473206e756d626572207769746e65737320706172616d65746572206d7573742062652070726f7669646564207768656e206368616e6e656c2f766964656f2061737365747348617265206265696e6720757064617465642e784368616e6e656c4f776e65724d656d626572446f65734e6f744578697374000c04b850726f7669646564206368616e6e656c206f776e657220286d656d6265722920646f6573206e6f74206578697374904368616e6e656c4f776e657243757261746f7247726f7570446f65734e6f744578697374000d04d450726f7669646564206368616e6e656c206f776e6572202863757261746f722067726f75702920646f6573206e6f74206578697374b04368616e6e656c5374617465426c6f6174426f6e6442656c6f774578697374656e7469616c4465706f736974000e0809014368616e6e656c20737461746520626c6f617420626f6e642063616e6e6f74206265206c6f776572207468616e206578697374656e7469616c206465706f7369742c050162656361757365206974206d7573742073656375726520746865206368616e6e656c206d6f64756c65206163636f756e7420616761696e73742064757374696e67704e756d6265724f66417373657473546f52656d6f766549735a65726f000f04a90144656c657465206368616e6e656c20616e642061737365747320616e642064656c65746520766964656f20617373657473206d75737420686176652061206e756d626572206f662061737365747320746f2072656d6f76652067726561746572207468616e207a65726f9843757261746f7249734e6f74414d656d6265724f66476976656e43757261746f7247726f7570001004450143757261746f7220756e6465722070726f76696465642063757261746f72206964206973206e6f742061206d656d626572206f662063757261726f722067726f757020756e64657220676976656e206964a843757261746f724973416c7265616479414d656d6265724f66476976656e43757261746f7247726f7570001104550143757261746f7220756e6465722070726f76696465642063757261746f7220696420697320616c72656164792061206d656d626572206f662063757261726f722067726f757020756e64657220676976656e2069646043757261746f7247726f7570446f65734e6f74457869737400120488476976656e2063757261746f722067726f757020646f6573206e6f742065786973747043757261746f727350657247726f75704c696d697452656163686564001304b84d6178206e756d626572206f662063757261746f7273207065722067726f7570206c696d697420726561636865645c43757261746f7247726f757049734e6f744163746976650014046c43757261746f722067726f7570206973206e6f74206163746976654043757261746f724964496e76616c6964001504d843757261746f72206964206973206e6f74206120776f726b657220696420696e20636f6e74656e7420776f726b696e672067726f7570384c656164417574684661696c6564001604684c6561642061757468656e7469636174696f6e206661696c6564404d656d626572417574684661696c6564001704704d656d6265722061757468656e7469636174696f6e206661696c65644443757261746f72417574684661696c65640018047443757261746f722061757468656e7469636174696f6e206661696c6564244261644f726967696e00190478457870656374656420726f6f74206f72207369676e6564206f726967696e484163746f724e6f74417574686f72697a6564001a04b04f7065726174696f6e2063616e6e6f7420626520706572666f6d656420776974682074686973204163746f725043617465676f7279446f65734e6f744578697374001b04ac41204368616e6e656c206f7220566964656f2043617465676f727920646f6573206e6f742065786973742e4c4368616e6e656c446f65734e6f744578697374001c04584368616e6e656c20646f6573206e6f7420657869737444566964656f446f65734e6f744578697374001d0450566964656f20646f6573206e6f7420657869737434566964656f496e536561736f6e001e04f4566664656f20696e20736561736f6e2063616e60742062652072656d6f766564202862656361757365206f7264657220697320696d706f7274616e7429444163746f7243616e6e6f7442654c656164001f04c84163746f722063616e6e6f7420617574686f72697a65206173206c65616420666f7220676976656e2065787472696e736963544163746f7243616e6e6f744f776e4368616e6e656c002004604163746f722063616e6e6f74204f776e206368616e6e656c604e6674416c72656164794f776e656442794368616e6e656c002104a4417474656d707420746f20736c696e67206261636b2061206368616e6e656c206f776e6564206e6674404e6674416c7265616479457869737473002204944e667420666f7220676976656e20766964656f20696420616c7265616479206578697374733c4e6674446f65734e6f744578697374002304944e667420666f7220676976656e20766964656f20696420646f6573206e6f742065786973746c4f766572666c6f774f72556e646572666c6f7748617070656e6564002404904f766572666c6f77206f7220756e646572666c6f77206572726f722068617070656e656434446f65734e6f744f776e4e667400250474476976656e206f726967696e20646f6573206e6f74206f776e206e667464526f79616c74795570706572426f756e64457863656564656400260470526f79616c747920557070657220426f756e6420457863656564656464526f79616c74794c6f776572426f756e64457863656564656400270470526f79616c7479204c6f77657220426f756e642045786365656465648441756374696f6e4475726174696f6e5570706572426f756e6445786365656465640028049441756374696f6e206475726174696f6e20757070657220626f756e642065786365656465648441756374696f6e4475726174696f6e4c6f776572426f756e6445786365656465640029049441756374696f6e206475726174696f6e206c6f77657220626f756e6420657863656564656484457874656e73696f6e506572696f645570706572426f756e644578636565646564002a04b441756374696f6e20657874656e73696f6e20706572696f6420757070657220626f756e6420657863656564656484457874656e73696f6e506572696f644c6f776572426f756e644578636565646564002b04b441756374696f6e20657874656e73696f6e20706572696f64206c6f77657220626f756e64206578636565646564844269644c6f636b4475726174696f6e5570706572426f756e644578636565646564002c0498426964206c6f636b206475726174696f6e20757070657220626f756e64206578636565646564844269644c6f636b4475726174696f6e4c6f776572426f756e644578636565646564002d0498426964206c6f636b206475726174696f6e206c6f77657220626f756e642065786365656465647c5374617274696e6750726963655570706572426f756e644578636565646564002e048c5374617274696e6720707269636520757070657220626f756e642065786365656465647c5374617274696e6750726963654c6f776572426f756e644578636565646564002f048c5374617274696e67207072696365206c6f77657220626f756e642065786365656465648041756374696f6e426964537465705570706572426f756e6445786365656465640030049441756374696f6e20626964207374657020757070657220626f756e642065786365656465648041756374696f6e426964537465704c6f776572426f756e6445786365656465640031049441756374696f6e206269642073746570206c6f77657220626f756e642065786365656465644c496e73756666696369656e7442616c616e636500320450496e73756666696369656e742062616c616e63656442696453746570436f6e73747261696e7456696f6c61746564003304b44d696e696d616c2061756374696f6e20626964207374657020636f6e73747261696e742076696f6c617465642e64496e76616c6964426964416d6f756e7453706563696669656400340488436f6d6d697420766572696669636174696f6e20666f722062696420616d6f756e747c5374617274696e675072696365436f6e73747261696e7456696f6c61746564003504ac41756374696f6e207374617274696e6720707269636520636f6e73747261696e742076696f6c617465642e50416374696f6e48617342696473416c7265616479003604a8416c7265616479206163746976652061756374696f6e2063616e6e6f742062652063616e63656c6c6564304e667449734e6f7449646c65003704990143616e206e6f74206372656174652061756374696f6e20666f72204e66742c2069662061756374696f6e2068617665206265656e20616c72656164792073746172746564206f72206e6674206973206c6f636b656420666f7220746865207472616e736665726050656e64696e674f66666572446f65734e6f7445786973740038047c4e6f2070656e64696e67206f666665727320666f7220676976656e204e6674545265776172644163636f756e7449734e6f74536574003904c843726561746f7220726f79616c747920726571756972657320726577617264206163636f756e7420746f206265207365742e404163746f7249734e6f74426964646572003a04684163746f72206973206e6f742061206c617374206269646465726041756374696f6e43616e6e6f744265436f6d706c65746564003b046c41756374696f6e2063616e6e6f7420626520636f6d706c657465643c426964446f65734e6f744578697374003c046841756374696f6e20646f6573206e6f74206861766520626964734c4269644973466f725061737441756374696f6e003d049453656c65637465642042696420697320666f722070617374206f70656e2061756374696f6e6853746172747341744c6f776572426f756e644578636565646564003e049841756374696f6e20737461727473206174206c6f77657220626f756e642065786365656465646853746172747341745570706572426f756e644578636565646564003f049841756374696f6e2073746172747320617420757070657220626f756e642065786365656465644841756374696f6e4469644e6f7453746172740040045c41756374696f6e20646964206e6f742073746172746564444e6f74496e41756374696f6e53746174650041046c4e6674206973206e6f7420696e2061756374696f6e2073746174657c4d656d62657249734e6f74416c6c6f776564546f5061727469636970617465004204bc4d656d626572206973206e6f7420616c6c6f77656420746f20706172746963697061746520696e2061756374696f6e544d656d62657250726f66696c654e6f74466f756e64004304604d656d6265722070726f66696c65206e6f7420666f756e644c4e66744e6f74496e4275794e6f7753746174650044049c476976656e20766964656f206e6674206973206e6f7420696e20627579206e6f7720737461746584496e76616c69644275794e6f775769746e657373507269636550726f76696465640045045501607769746e6573735f7072696365602070726f766964656420746f20606275795f6e6f77602065787472696e73696320646f6573206e6f74206d61746368207468652063757272656e742073656c6c2070726963655049734e6f744f70656e41756374696f6e547970650046046841756374696f6e2074797065206973206e6f7420604f70656e605c49734e6f74456e676c69736841756374696f6e547970650047047441756374696f6e2074797065206973206e6f742060456e676c697368606c4269644c6f636b4475726174696f6e49734e6f744578706972656400480480426964206c6f636b206475726174696f6e206973206e6f742065787069726564684e667441756374696f6e4973416c726561647945787069726564004904784e66742061756374696f6e20697320616c72656164792065787069726564904275794e6f774d7573744265477265617465725468616e5374617274696e675072696365004a04ac41756374696f6e20627579206e6f77206973206c657373207468656e207374617274696e67207072696365605461726765744d656d626572446f65734e6f744578697374004b04984e6674206f6666657220746172676574206d656d62657220646f6573206e6f742065786973748c496e76616c69644e66744f666665725769746e657373507269636550726f7669646564004c040d0143757272656e74206e6674206f6666657220707269636520646f6573206e6f74206d61746368207468652070726f766964656420607769746e6573735f707269636560ac4d617841756374696f6e57686974654c6973744c656e6774685570706572426f756e644578636565646564004d04c44d61782061756374696f6e2077686974656c697374206c656e67746820757070657220626f756e642065786365656465646457686974656c6973744861734f6e6c794f6e654d656d626572004e049441756374696f6e2077686974656c69737420686173206f6e6c79206f6e65206d656d6265727457686974656c69737465644d656d626572446f65734e6f744578697374004f04d84174206c65617374206f6e65206f66207468652077686974656c6973746564206d656d6265727320646f6573206e6f74206578697374784e66744e6f6e4368616e6e656c4f776e6572446f65734e6f744578697374005004f84e6f6e2d6368616e6e656c206f776e65722073706563696669656420647572696e67206e66742069737375616e636520646f6573206e6f74206578697374ac457874656e73696f6e506572696f644973477265617465725468656e41756374696f6e4475726174696f6e005104c4457874656e73696f6e20706572696f642069732067726561746572207468656e2061756374696f6e206475726174696f6e444e6f417373657473537065636966696564005204ac4e6f2061737365747320746f2062652072656d6f7665642068617665206265656e2073706563696669656454496e76616c696441737365747350726f7669646564005304684368616e6e656c2061737365747320666561736962696c697479544368616e6e656c436f6e7461696e73566964656f73005404584368616e6e656c20436f6e7461696e7320566964656f544368616e6e656c436f6e7461696e734173736574730055045c4368616e6e656c20436f6e7461696e73204173736574735c496e76616c696442616753697a655370656369666965640056047c4261672053697a6520737065636966696564206973206e6f742076616c6964504d6967726174696f6e4e6f7446696e6973686564005704584d6967726174696f6e206e6f7420646f6e6520796574445265706c79446f65734e6f7445786973740058046c5061727465636970616e74206973206e6f742061206d656d6265724c556e73756666696369656e7442616c616e636500590450496e73756666696369656e742062616c616e63656c496e73756666696369656e74547265617375727942616c616e6365005a0474496e73756666696369656e742074726561737572792062616c616e636554496e76616c69644d656d62657250726f7669646564005b0470496e76616c6964206d656d62657220696420207370656369666965643c4163746f724e6f74414d656d626572005c04544163746f72206973206e6f742041204d656d626572785061796d656e7450726f6f66566572696669636174696f6e4661696c6564005d04845061796d656e742050726f6f6620766572696669636174696f6e206661696c656484436173686f7574416d6f756e74457863656564734d6178696d756d416d6f756e74005e04c04368616e6e656c20636173686f757420616d6f756e7420697320746f6f206869676820746f20626520636c61696d65647c436173686f7574416d6f756e7442656c6f774d696e696d756d416d6f756e74005f04bc4368616e6e656c20636173686f757420616d6f756e7420697320746f6f206c6f7720746f20626520636c61696d6564e05769746864726177616c416d6f756e74457863656564734368616e6e656c4163636f756e74576974686472617761626c6542616c616e63650060085901416e20617474656d707420746f2077697468647261772066756e64732066726f6d206368616e6e656c206163636f756e74206661696c65642c2062656361757365207468652073706563696669656420616d6f756e744901657863656564732074686520776974686472617761626c6520616d6f756e7420286368616e6e656c206163636f756e742062616c616e6365206d696e7573206368616e6e656c20626c6f617420626f6e64297c576974686472617746726f6d4368616e6e656c416d6f756e7449735a65726f0061085901416e20617474656d707420746f2077697468647261772066756e64732066726f6d206368616e6e656c206163636f756e74206661696c65642c2062656361757365207468652073706563696669656420616d6f756e741c6973207a65726f5c4368616e6e656c436173686f75747344697361626c65640062049c4368616e6e656c20636173686f757473206172652063757272656e746c792064697361626c6564a44d696e436173686f7574416c6c6f776564457863656564734d6178436173686f7574416c6c6f77656400630809014e65772076616c75657320666f72206d696e5f636173686f75745f616c6c6f7765642f6d61785f636173686f75745f616c6c6f7765642061726520696e76616c6964d46d696e5f636173686f75745f616c6c6f7765642063616e6e6f7420657863656564206d61785f636173686f75745f616c6c6f7765648443757261746f724d6f6465726174696f6e416374696f6e4e6f74416c6c6f776564006404110143757261746f7220646f6573206e6f742068617665207065726d697373696f6e7320746f20706572666f726d20676976656e206d6f6465726174696f6e20616374696f6e944d617843757261746f725065726d697373696f6e735065724c6576656c457863656564656400650441014d6178696d756d206e756d626572206f662063757261746f72207065726d697373696f6e732070657220676976656e206368616e6e656c2070726976696c656765206c6576656c206578636565646564c043757261746f7247726f75704d61785065726d697373696f6e7342794c6576656c4d617053697a654578636565646564006604290143757261746f722067726f75702773207065726d697373696f6e73206279206c6576656c206d617020657863656564656420746865206d6178696d756d20616c6c6f7765642073697a65504368616e6e656c466561747572655061757365640067045d014f7065726174696f6e2063616e6e6f742062652065786563757465642c20626563617573652074686973206368616e6e656c206665617475726520686173206265656e2070617573656420627920612063757261746f72444368616e6e656c4261674d697373696e670068042d01556e65787065637465642072756e74696d652073746174653a206d697373696e67206368616e6e656c2062616720647572696e672064656c6574655f6368616e6e656c20617474656d70748c417373657473546f52656d6f76654265796f6e64456e74697479417373657473536574006904f5014c697374206f662061737365747320746f2072656d6f76652070726f766964656420666f72207570646174655f6368616e6e656c202f207570646174655f766964656f20636f6e7461696e7320617373657473207468617420646f6e27742062656c6f6e6720746f207468652073706563696669656420656e7469747990496e76616c6964566964656f446174614f626a65637473436f756e7450726f7669646564006a04f4496e76616c6964206e756d626572206f66206f626a6563747320746f2064656c6574652070726f766964656420666f722064656c6574655f766964656f70496e76616c69644368616e6e656c5472616e73666572537461747573006b04bc496e76616c6964206368616e6e656c207472616e736665722073746174757320666f72206f7065726174696f6e732e78496e76616c69644368616e6e656c5472616e736665724163636570746f72006c04d4496e636f7272656374206163746f7220747269657320746f2061636365707420746865206368616e6e656c207472616e736665722e98496e76616c69644368616e6e656c5472616e73666572436f6d6d69746d656e74506172616d73006d08550143616e6e6f742061636365707420746865206368616e6e656c207472616e736665723a2070726f766964656420636f6d6d69746d656e7420706172616d657465727320646f65736e2774206d617463682077697468906368616e6e656c2070656e64696e67207472616e7366657220706172616d65746572732e8c4368616e6e656c4167656e74496e73756666696369656e745065726d697373696f6e73006e004c496e76616c69644368616e6e656c4f776e6572006f04a4496e636f7272656374206368616e6e656c206f776e657220666f7220616e206f7065726174696f6e2e285a65726f5265776172640070046443616e6e6f7420636c61696d207a65726f207265776172642e78496e73756666696369656e7442616c616e6365466f725472616e73666572007104510143616e6e6f74207472616e7366657220746865206368616e6e656c3a206368616e6e656c206f776e65722068617320696e73756666696369656e742062616c616e6365202862756467657420666f72205747732994496e73756666696369656e7442616c616e6365466f724368616e6e656c4372656174696f6e0072080d0143616e6e6f742063726561746520746865206368616e6e656c3a206368616e6e656c2063726561746f722068617320696e73756666696369656e742062616c616e6365e9012862756467657420666f72206368616e6e656c20737461746520626c6f617420626f6e64202b206368616e6e656c2064617461206f626a7320737461746520626c6f617420626f6e6473202b2064617461206f626a732073746f726167652066656573202b206578697374656e7469616c206465706f736974298c496e73756666696369656e7442616c616e6365466f72566964656f4372656174696f6e007308fc43616e6e6f74206372656174652074686520766964656f3a20766964656f2063726561746f722068617320696e73756666696369656e742062616c616e6365d9012862756467657420666f7220766964656f20737461746520626c6f617420626f6e64202b20766964656f2064617461206f626a7320737461746520626c6f617420626f6e6473202b2064617461206f626a732073746f726167652066656573202b206578697374656e7469616c206465706f7369742964496e73756666696369656e74436f756e63696c4275646765740074006c476c6f62616c4e66744461696c794c696d6974457863656564656400750070476c6f62616c4e66745765656b6c794c696d69744578636565646564007600704368616e6e656c4e66744461696c794c696d69744578636565646564007700744368616e6e656c4e66745765656b6c794c696d697445786365656465640078006443726561746f72546f6b656e416c7265616479497373756564007904c443726561746f7220746f6b656e2077617320616c72656164792069737375656420666f722074686973206368616e6e656c5443726561746f72546f6b656e4e6f74497373756564007a04b043726561746f7220746f6b656e207761736e27742069737375656420666f722074686973206368616e6e656c884d656d6265724964436f756c644e6f7442654465726976656446726f6d4163746f72007b0415014d656d62657220696420636f756c64206e6f7420626520646572697665642066726f6d207468652070726f766964656420436f6e74656e744163746f7220636f6e74657874bc43616e6e6f74576974686472617746726f6d4368616e6e656c5769746843726561746f72546f6b656e497373756564007c08290143616e6e6f74206469726563746c792077697468647261772066756e64732066726f6d2061206368616e6e656c206163636f756e74207768656e20746865206368616e6e656c2068617358612063726561746f7220746f6b656e20697373756564bc506174726f6e61676543616e4f6e6c794265436c61696d6564466f724d656d6265724f776e65644368616e6e656c73007d04f4506174726f6e6167652063616e206f6e6c7920626520636c61696d6564206966206368616e6e656c206973206f776e65642062792061206d656d626572a84368616e6e656c5472616e7366657273426c6f636b6564447572696e67526576656e756553706c697473007e04cc4368616e6e656c205472616e73666572732061726520626c6f636b656420647572696e6720726576656e75652073706c6974739c4368616e6e656c5472616e7366657273426c6f636b6564447572696e67546f6b656e53616c6573007f04c04368616e6e656c205472616e73666572732061726520626c6f636b656420647572696e6720746f6b656e2073616c6573984368616e6e656c5472616e7366657273426c6f636b6564447572696e67416374697665416d6d008004bc4368616e6e656c205472616e73666572732061726520626c6f636b656420647572696e672061637469766520414d4d0460436f6e74656e74206469726563746f7279206572726f7273e908083870616c6c65745f73746f72616765244261675265636f7264084c53746f726167654275636b657449647353657401ed0860446973747269627574696f6e4275636b657449647353657401f1080010012473746f7265645f6279ed08014c53746f726167654275636b657449647353657400013864697374726962757465645f6279f1080160446973747269627574696f6e4275636b65744964735365740001486f626a656374735f746f74616c5f73697a6528010c7536340001386f626a656374735f6e756d62657228010c7536340000ed080c4c626f756e6465645f636f6c6c656374696f6e7344626f756e6465645f62747265655f7365743c426f756e646564425472656553657408045401280453000004006901012c42547265655365743c543e0000f1080c4c626f756e6465645f636f6c6c656374696f6e7344626f756e6465645f62747265655f7365743c426f756e64656442547265655365740804540125020453000004003902012c42547265655365743c543e0000f508083870616c6c65745f73746f726167654c53746f726167654275636b65745265636f72640820576f726b657249640128244163636f756e74496401000010013c6f70657261746f725f737461747573f90801c053746f726167654275636b65744f70657261746f725374617475733c576f726b657249642c204163636f756e7449643e000148616363657074696e675f6e65775f62616773980110626f6f6c00011c766f7563686572ad02011c566f756368657200013461737369676e65645f6261677328010c7536340000f908083870616c6c65745f73746f726167656c53746f726167654275636b65744f70657261746f725374617475730820576f726b657249640128244163636f756e7449640100010c1c4d697373696e6700000050496e766974656453746f72616765576f726b65720400280120576f726b657249640001003453746f72616765576f726b65720800280120576f726b6572496400000001244163636f756e74496400020000fd080c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003001185665633c543e00000109083870616c6c65745f73746f726167656044796e616d69634261674372656174696f6e506f6c69637904b0446973747269627574696f6e4275636b657446616d696c79546f4e756d6265724f664275636b6574734d6170010509000801646e756d6265725f6f665f73746f726167655f6275636b65747310010c75333200012066616d696c696573050901b0446973747269627574696f6e4275636b657446616d696c79546f4e756d6265724f664275636b6574734d6170000005090c4c626f756e6465645f636f6c6c656374696f6e7344626f756e6465645f62747265655f6d61703c426f756e64656442547265654d61700c044b012804560110045300000400b502013842547265654d61703c4b2c20563e0000090900000408950228000d09083870616c6c65745f73746f7261676528446174614f626a6563740448526570617961626c65426c6f6174426f6e6401e101001001206163636570746564980110626f6f6c00014073746174655f626c6f61745f626f6e64e1010148526570617961626c65426c6f6174426f6e6400011073697a6528010c75363400013c697066735f636f6e74656e745f6964fd08013c4261736535384d756c74696861736800001109083870616c6c65745f73746f7261676578446973747269627574696f6e4275636b657446616d696c795265636f7264045c446973747269627574696f6e4275636b6574496e6465780128000401786e6578745f646973747269627574696f6e5f6275636b65745f696e64657828015c446973747269627574696f6e4275636b6574496e64657800001509083870616c6c65745f73746f7261676560446973747269627574696f6e4275636b65745265636f72640888446973747269627574696f6e4275636b6574496e76697465644f70657261746f72730119096c446973747269627574696f6e4275636b65744f70657261746f7273011d0900140148616363657074696e675f6e65775f62616773980110626f6f6c000130646973747269627574696e67980110626f6f6c00014c70656e64696e675f696e7669746174696f6e7319090188446973747269627574696f6e4275636b6574496e76697465644f70657261746f72730001246f70657261746f72731d09016c446973747269627574696f6e4275636b65744f70657261746f727300013461737369676e65645f6261677328010c753634000019090c4c626f756e6465645f636f6c6c656374696f6e7344626f756e6465645f62747265655f7365743c426f756e646564425472656553657408045401280453000004006901012c42547265655365743c543e00001d090c4c626f756e6465645f636f6c6c656374696f6e7344626f756e6465645f62747265655f7365743c426f756e646564425472656553657408045401280453000004006901012c42547265655365743c543e00002109083870616c6c65745f73746f72616765144572726f72040454000105013c41726974686d657469634572726f72000004f447656e657269632041726974686d65746963204572726f722064756520746f20696e7465726e616c206163636f756e74696e67206f7065726174696f6e40496e76616c69644369644c656e67746800010494496e76616c696420434944206c656e67746820286d75737420626520343620627974657329444e6f4f626a656374734f6e55706c6f6164000204a0456d707479202264617461206f626a656374206372656174696f6e2220636f6c6c656374696f6e2e6053746f726167654275636b6574446f65736e744578697374000304ac546865207265717565737465642073746f72616765206275636b657420646f65736e27742065786973742e7053746f726167654275636b657449734e6f74426f756e64546f426167000404cc546865207265717565737465642073746f72616765206275636b6574206973206e6f7420626f756e6420746f2061206261672e6453746f726167654275636b65744973426f756e64546f426167000504dc546865207265717565737465642073746f72616765206275636b657420697320616c726561647920626f756e6420746f2061206261672e644e6f53746f726167654275636b6574496e7669746174696f6e0006041901496e76616c6964206f7065726174696f6e207769746820696e76697465733a207468657265206973206e6f2073746f72616765206275636b657420696e7669746174696f6e2e6453746f7261676550726f7669646572416c72656164795365740007040501496e76616c6964206f7065726174696f6e207769746820696e76697465733a2073746f726167652070726f76696465722077617320616c7265616479207365742e6053746f7261676550726f76696465724d75737442655365740008047453746f726167652070726f7669646572206d757374206265207365742e7c446966666572656e7453746f7261676550726f7669646572496e76697465640009041501496e76616c6964206f7065726174696f6e207769746820696e76697465733a20616e6f746865722073746f726167652070726f76696465722077617320696e76697465642e58496e766974656453746f7261676550726f7669646572000a041501496e76616c6964206f7065726174696f6e207769746820696e76697465733a2073746f726167652070726f76696465722077617320616c726561647920696e76697465642e8853746f726167654275636b65744964436f6c6c656374696f6e73417265456d707479000b04a053746f72616765206275636b657420696420636f6c6c656374696f6e732061726520656d7074792ed053746f726167654275636b6574734e756d62657256696f6c6174657344796e616d69634261674372656174696f6e506f6c696379000c08290153746f72616765206275636b657420696420636f6c6c656374696f6e2070726f766964656420636f6e747261646963747320746865206578697374696e672064796e616d696320626167406372656174696f6e20706f6c6963792ecc446973747269627574696f6e4275636b65747356696f6c6174657344796e616d69634261674372656174696f6e506f6c696379000d083d01446973747269627574696f6e206275636b657420696420636f6c6c656374696f6e2070726f766964656420636f6e747261646963747320746865206578697374696e672064796e616d696320626167406372656174696f6e20706f6c6963792e38456d707479436f6e74656e744964000e04b455706c6f61642064617461206572726f723a20656d70747920636f6e74656e742049442070726f76696465642e385a65726f4f626a65637453697a65000f049055706c6f61642064617461206572726f723a207a65726f206f626a6563742073697a652e88496e76616c69645374617465426c6f6174426f6e64536f757263654163636f756e74001004ec55706c6f61642064617461206572726f723a20696e76616c696420737461746520626c6f617420626f6e6420736f75726365206163636f756e742e58496e76616c696453746f7261676550726f766964657200110490496e76616c69642073746f726167652070726f766964657220666f72206275636b65742e4c496e73756666696369656e7442616c616e636500120498496e73756666696369656e742062616c616e636520666f7220616e206f7065726174696f6e2e54446174614f626a656374446f65736e7445786973740013046844617461206f626a65637420646f65736e27742065786973742e4055706c6f6164696e67426c6f636b65640014049c55706c6f6164696e67206f6620746865206e6577206f626a65637420697320626c6f636b65642e74446174614f626a6563744964436f6c6c656374696f6e4973456d7074790015048c44617461206f626a65637420696420636f6c6c656374696f6e20697320656d7074792e80536f75726365416e6444657374696e6174696f6e42616773417265457175616c001604a043616e6e6f74206d6f7665206f626a656374732077697468696e207468652073616d65206261672e54446174614f626a656374426c61636b6c6973746564001704a844617461206f626a65637420686173682069732070617274206f662074686520626c61636b6c6973742e68426c61636b6c69737453697a654c696d6974457863656564656400180478426c61636b6c6973742073697a65206c696d69742065786365656465642e84566f75636865724d61784f626a65637453697a654c696d69744578636565646564001904ac4d6178206f626a6563742073697a65206c696d697420657863656564656420666f7220766f75636865722e8c566f75636865724d61784f626a6563744e756d6265724c696d69744578636565646564001a04b44d6178206f626a656374206e756d626572206c696d697420657863656564656420666f7220766f75636865722e9453746f726167654275636b65744f626a6563744e756d6265724c696d697452656163686564001b04cc4f626a656374206e756d626572206c696d697420666f72207468652073746f72616765206275636b657420726561636865642e8c53746f726167654275636b65744f626a65637453697a654c696d697452656163686564001c04e04f626a6563747320746f74616c2073697a65206c696d697420666f72207468652073746f72616765206275636b657420726561636865642e6c496e73756666696369656e74547265617375727942616c616e6365001d04d8496e73756666696369656e74206d6f64756c652074726561737572792062616c616e636520666f7220616e206f7065726174696f6e2e8443616e6e6f7444656c6574654e6f6e456d70747953746f726167654275636b6574001e04a443616e6e6f742064656c6574652061206e6f6e2d656d7074792073746f72616765206275636b65742e68446174614f626a6563744964506172616d73417265456d707479001f04f85468652060646174615f6f626a6563745f696473602065787472696e73696320706172616d6574657220636f6c6c656374696f6e20697320656d7074792e7c53746f726167654275636b6574735065724261674c696d6974546f6f4c6f77002004d8546865206e6577206053746f726167654275636b6574735065724261674c696d697460206e756d62657220697320746f6f206c6f772e8053746f726167654275636b6574735065724261674c696d6974546f6f48696768002104dc546865206e6577206053746f726167654275636b6574735065724261674c696d697460206e756d62657220697320746f6f20686967682e8053746f726167654275636b65745065724261674c696d69744578636565646564002204cc6053746f726167654275636b6574735065724261674c696d6974602077617320657863656564656420666f722061206261672e8053746f726167654275636b6574446f65736e744163636570744e657742616773002304ac5468652073746f72616765206275636b657420646f65736e277420616363657074206e657720626167732e4044796e616d6963426167457869737473002404c843616e6e6f7420637265617465207468652064796e616d6963206261673a2064796e616d696320626167206578697374732e5444796e616d6963426167446f65736e7445786973740025046844796e616d69632062616720646f65736e27742065786973742e8853746f7261676550726f76696465724f70657261746f72446f65736e744578697374002604a053746f726167652070726f7669646572206f70657261746f7220646f65736e27742065786973742e484461746153697a654665654368616e676564002704b8496e76616c69642065787472696e7369632063616c6c3a20646174612073697a6520666565206368616e6765642e7c446174614f626a6563745374617465426c6f6174426f6e644368616e676564002804f4496e76616c69642065787472696e7369632063616c6c3a2064617461206f626a65637420737461746520626c6f617420626f6e64206368616e6765642e7843616e6e6f7444656c6574654e6f6e456d70747944796e616d69634261670029049043616e6e6f742064656c657465206e6f6e20656d7074792064796e616d6963206261672eb84d6178446973747269627574696f6e4275636b657446616d696c794e756d6265724c696d69744578636565646564002a04d44d617820646973747269627574696f6e206275636b65742066616d696c79206e756d626572206c696d69742065786365656465642e8c446973747269627574696f6e4275636b657446616d696c79446f65736e744578697374002b04a4446973747269627574696f6e206275636b65742066616d696c7920646f65736e27742065786973742e74446973747269627574696f6e4275636b6574446f65736e744578697374002c0488446973747269627574696f6e206275636b657420646f65736e27742065786973742e9c446973747269627574696f6e4275636b65744964436f6c6c656374696f6e73417265456d707479002d04b4446973747269627574696f6e206275636b657420696420636f6c6c656374696f6e732061726520656d7074792e94446973747269627574696f6e4275636b6574446f65736e744163636570744e657742616773002e04b0446973747269627574696f6e206275636b657420646f65736e277420616363657074206e657720626167732eb84d6178446973747269627574696f6e4275636b65744e756d6265725065724261674c696d69744578636565646564002f04d84d617820646973747269627574696f6e206275636b6574206e756d6265722070657220626167206c696d69742065786365656465642e84446973747269627574696f6e4275636b657449734e6f74426f756e64546f426167003004a8446973747269627574696f6e206275636b6574206973206e6f7420626f756e6420746f2061206261672e78446973747269627574696f6e4275636b65744973426f756e64546f42616700310498446973747269627574696f6e206275636b657420697320626f756e6420746f2061206261672e90446973747269627574696f6e4275636b6574735065724261674c696d6974546f6f4c6f77003204ec546865206e65772060446973747269627574696f6e4275636b6574735065724261674c696d697460206e756d62657220697320746f6f206c6f772e94446973747269627574696f6e4275636b6574735065724261674c696d6974546f6f48696768003304f0546865206e65772060446973747269627574696f6e4275636b6574735065724261674c696d697460206e756d62657220697320746f6f20686967682e9c446973747269627574696f6e50726f76696465724f70657261746f72446f65736e744578697374003404b4446973747269627574696f6e2070726f7669646572206f70657261746f7220646f65736e27742065786973742ea8446973747269627574696f6e50726f76696465724f70657261746f72416c7265616479496e7669746564003504bc446973747269627574696f6e2070726f7669646572206f70657261746f7220616c726561647920696e76697465642e7c446973747269627574696f6e50726f76696465724f70657261746f72536574003604ac446973747269627574696f6e2070726f7669646572206f70657261746f7220616c7265616479207365742e784e6f446973747269627574696f6e4275636b6574496e7669746174696f6e003704884e6f20646973747269627574696f6e206275636b657420696e7669746174696f6e2eac4d7573744265446973747269627574696f6e50726f76696465724f70657261746f72466f724275636b65740038042901496e76616c6964206f7065726174696f6e733a206d757374206265206120646973747269627574696f6e2070726f7669646572206f70657261746f7220666f722061206275636b65742ef84d61784e756d6265724f6650656e64696e67496e7669746174696f6e734c696d6974466f72446973747269627574696f6e4275636b65745265616368656400390429014d6178206e756d626572206f662070656e64696e6720696e7669746174696f6e73206c696d697420666f72206120646973747269627574696f6e206275636b657420726561636865642ec04d61784e756d6265724f664f70657261746f7273506572446973747269627574696f6e4275636b657452656163686564003a04e84d6178206e756d626572206f66206f70657261746f727320666f72206120646973747269627574696f6e206275636b657420726561636865642ea8446973747269627574696f6e46616d696c79426f756e64546f4261674372656174696f6e506f6c696379003b04cc446973747269627574696f6e2066616d696c7920626f756e6420746f206120626167206372656174696f6e20706f6c6963792e644d6178446174614f626a65637453697a654578636565646564003c04784d61782064617461206f626a6563742073697a652065786365656465642e60496e76616c69645472616e736163746f724163636f756e74003d04b8496e76616c6964207472616e736163746f72206163636f756e7420494420666f722074686973206275636b65742ec04e756d6265724f6653746f726167654275636b6574734f7574736964654f66416c6c6f776564436f6e747261696e7473003e049c4e6f7420616c6c6f77656420276e756d626572206f662073746f72616765206275636b65747327d44e756d6265724f66446973747269627574696f6e4275636b6574734f7574736964654f66416c6c6f776564436f6e747261696e7473003f04b04e6f7420616c6c6f77656420276e756d626572206f6620646973747269627574696f6e206275636b657473273043616c6c44697361626c65640040043443616c6c2044697361626c6564048053746f72616765206d6f64756c6520707265646566696e6564206572726f727325090c5070616c6c65745f70726f6a6563745f746f6b656e1474797065732c4163636f756e7444617461101c42616c616e63650118345374616b696e6753746174757301290948526570617961626c65426c6f6174426f6e6401e1014056657374696e675363686564756c6573012d090018014476657374696e675f7363686564756c65732d09014056657374696e675363686564756c6573000118616d6f756e7418011c42616c616e636500015073706c69745f7374616b696e675f737461747573410901544f7074696f6e3c5374616b696e675374617475733e000128626c6f61745f626f6e64e1010148526570617961626c65426c6f6174426f6e640001606e6578745f76657374696e675f7472616e736665725f696428010c7536340001806c6173745f73616c655f746f74616c5f7075726368617365645f616d6f756e74450901784f7074696f6e3c28546f6b656e53616c6549642c2042616c616e6365293e000029090c5070616c6c65745f70726f6a6563745f746f6b656e147479706573345374616b696e67537461747573041c42616c616e636501180008012073706c69745f6964100138526576656e756553706c69744964000118616d6f756e7418011c42616c616e636500002d090c4c626f756e6465645f636f6c6c656374696f6e7344626f756e6465645f62747265655f6d61703c426f756e64656442547265654d61700c044b01110304560131090453000004003509013842547265654d61703c4b2c20563e000031090c5070616c6c65745f70726f6a6563745f746f6b656e1474797065733c56657374696e675363686564756c65082c426c6f636b4e756d62657201101c42616c616e63650118001401686c696e6561725f76657374696e675f73746172745f626c6f636b10012c426c6f636b4e756d62657200015c6c696e6561725f76657374696e675f6475726174696f6e10012c426c6f636b4e756d626572000130636c6966665f616d6f756e7418011c42616c616e636500015c706f73745f636c6966665f746f74616c5f616d6f756e7418011c42616c616e63650001346275726e65645f616d6f756e7418011c42616c616e636500003509042042547265654d617008044b0111030456013109000400390900000039090000023d09003d09000004081103310900410904184f7074696f6e0404540129090108104e6f6e6500000010536f6d65040029090000010000450904184f7074696f6e0404540149090108104e6f6e6500000010536f6d650400490900000100004909000004081018004d090c5070616c6c65745f70726f6a6563745f746f6b656e14747970657324546f6b656e44617461141c42616c616e636501181048617368012c2c426c6f636b4e756d626572011024546f6b656e53616c6501210344526576656e756553706c69745374617465015109002c0130746f74616c5f737570706c7918011c42616c616e6365000134746f6b656e735f69737375656418011c42616c616e63650001306e6578745f73616c655f696410012c546f6b656e53616c65496400011073616c655d0901444f7074696f6e3c546f6b656e53616c653e00013c7472616e736665725f706f6c696379c50201505472616e73666572506f6c6963793c486173683e000138706174726f6e6167655f696e666f6109018c506174726f6e616765446174613c42616c616e63652c20426c6f636b4e756d6265723e00013c6163636f756e74735f6e756d62657228010c753634000148726576656e75655f73706c69745f72617465d502011c5065726d696c6c000134726576656e75655f73706c697451090144526576656e756553706c697453746174650001546e6578745f726576656e75655f73706c69745f6964100138526576656e756553706c69744964000124616d6d5f6375727665650901644f7074696f6e3c416d6d43757276653c42616c616e63653e3e000051090c5070616c6c65745f70726f6a6563745f746f6b656e14747970657344526576656e756553706c6974537461746508284a6f7942616c616e636501182c426c6f636b4e756d6265720110010820496e616374697665000000184163746976650400550901a4526576656e756553706c6974496e666f3c4a6f7942616c616e63652c20426c6f636b4e756d6265723e0001000055090c5070616c6c65745f70726f6a6563745f746f6b656e14747970657340526576656e756553706c6974496e666f08284a6f7942616c616e636501182c426c6f636b4e756d6265720110000c0128616c6c6f636174696f6e1801284a6f7942616c616e636500012074696d656c696e655909015454696d656c696e653c426c6f636b4e756d6265723e0001446469766964656e64735f636c61696d65641801284a6f7942616c616e6365000059090c5070616c6c65745f70726f6a6563745f746f6b656e1474797065732054696d656c696e65042c426c6f636b4e756d626572011000080114737461727410012c426c6f636b4e756d6265720001206475726174696f6e10012c426c6f636b4e756d62657200005d0904184f7074696f6e0404540121030108104e6f6e6500000010536f6d6504002103000001000061090c5070616c6c65745f70726f6a6563745f746f6b656e14747970657334506174726f6e61676544617461081c42616c616e636501182c426c6f636b4e756d6265720110000c011072617465f9020128596561726c7952617465000180756e636c61696d65645f706174726f6e6167655f74616c6c795f616d6f756e7418011c42616c616e63650001906c6173745f756e636c61696d65645f706174726f6e6167655f74616c6c795f626c6f636b10012c426c6f636b4e756d6265720000650904184f7074696f6e0404540125030108104e6f6e6500000010536f6d6504002503000001000069090c5070616c6c65745f70726f6a6563745f746f6b656e186572726f7273144572726f720404540001f43c41726974686d657469634572726f72000004c8556e65787065637465642061726974686d65746963206572726f7220286f766572666c6f77202f20756e646572666c6f772980496e73756666696369656e745472616e736665727261626c6542616c616e636500010481014163636f756e742773207472616e736665727261626c652062616c616e636520697320696e73756666696369656e7420746f20706572666f726d20746865207472616e73666572206f7220696e697469616c697a6520746f6b656e2073616c6544546f6b656e446f65734e6f7445786973740002047852657175657374656420746f6b656e20646f6573206e6f74206578697374784163636f756e74496e666f726d6174696f6e446f65734e6f74457869737400030494526571756573746564206163636f756e74206461746120646f6573206e6f74206578697374945472616e7366657244657374696e6174696f6e4d656d626572446f65734e6f74457869737400040419014174206c65617374206f6e65206f6620746865207472616e736665722064657374696e6174696f6e73206973206e6f7420616e206578697374696e67206d656d626572206964784d65726b6c6550726f6f66566572696669636174696f6e4661696c757265000504804d65726b6c652070726f6f6620766572696669636174696f6e206661696c65645c546f6b656e53796d626f6c416c7265616479496e5573650006045453796d626f6c20616c726561647920696e2075736590496e697469616c416c6c6f636174696f6e546f4e6f6e4578697374696e674d656d62657200070441014174206c65617374206f6e65206f6620746865206d656d626572732070726f76696465642061732070617274206f6620496e697469616c416c6c6f636174696f6e20646f6573206e6f74206578697374504163636f756e74416c7265616479457869737473000804584163636f756e7420416c72656164792065786973747358546f6f4d616e795472616e736665724f757470757473000904985472616e736665722064657374696e6174696f6e206d656d62657220696420696e76616c69646c546f6b656e49737375616e63654e6f74496e49646c655374617465000a04a8546f6b656e27732063757272656e74206f66666572696e67207374617465206973206e6f742049646c6558496e73756666696369656e744a6f7942616c616e6365000b04dc496e73756666696369656e74204a4f592042616c616e636520746f20636f76657220746865207472616e73616374696f6e20636f7374736c4a6f795472616e736665725375626a656374546f44757374696e67000c045d0154686520616d6f756e74206f66204a4f5920746f206265207472616e73666572726564206973206e6f7420656e6f75676820746f206b656570207468652064657374696e6174696f6e206163636f756e7420616c697665cc417474656d7074546f52656d6f76654e6f6e4f776e65644163636f756e74556e6465725065726d697373696f6e65644d6f6465000d04ec417474656d707420746f2072656d6f7665206e6f6e206f776e6564206163636f756e7420756e646572207065726d697373696f6e6564206d6f646578417474656d7074546f52656d6f76654e6f6e456d7074794163636f756e74000e04e4417474656d707420746f2072656d6f766520616e206163636f756e74207769746820736f6d65206f75747374616e64696e6720746f6b656e739c43616e6e6f744a6f696e57686974656c697374496e5065726d697373696f6e6c6573734d6f6465000f04b043616e6e6f74206a6f696e2077686974656c69737420696e207065726d697373696f6e6c657373206d6f6465a443616e6e6f7444656973737565546f6b656e576974684f75747374616e64696e674163636f756e7473001004b843616e6e6f74204465697373756520546f6b656e2077697468206f75747374616e64696e67206163636f756e7473384e6f5570636f6d696e6753616c650011047854686520746f6b656e20686173206e6f207570636f6d696e672073616c65304e6f41637469766553616c65001204a854686520746f6b656e20686173206e6f206163746976652073616c6520617420746865206d6f6d656e748c496e73756666696369656e7442616c616e6365466f72546f6b656e507572636861736500130401014163636f756e742773204a4f592062616c616e636520697320696e73756666696369656e7420746f206d616b652074686520746f6b656e207075726368617365544e6f74456e6f756768546f6b656e734f6e53616c650014047d01416d6f756e74206f6620746f6b656e7320746f207075726368617365206f6e2073616c65206578636565647320746865207175616e74697479206f6620746f6b656e73207374696c6c20617661696c61626c65206f6e207468652073616c656853616c655374617274696e67426c6f636b496e54686550617374001504b05370656369666965642073616c65207374617274696e6720626c6f636b20697320696e2074686520706173745c53616c6541636365737350726f6f66526571756972656400160481014f6e6c792077686974656c6973746564207061727469636970616e74732061726520616c6c6f77656420746f20616363657373207468652073616c652c207468657265666f7265206163636573732070726f6f662069732072657175697265649453616c6541636365737350726f6f665061727469636970616e7449734e6f7453656e64657200170829015061727469636970616e7420696e2073616c65206163636573732070726f6f662070726f766964656420647572696e67206070757263686173655f746f6b656e735f6f6e5f73616c656084646f6573206e6f74206d61746368207468652073656e646572206163636f756e745c53616c6550757263686173654361704578636565646564001808610153616c65207061727469636970616e742773206361702028656974686572206361705f7065725f6d656d626572206f722077686974656c6973746564207061727469636970616e742773207370656369666963206361702978776173206578636565646564207769746820746865207075726368617365b04d617856657374696e675363686564756c65735065724163636f756e74506572546f6b656e52656163686564001908c843616e6e6f742061646420616e6f746865722076657374696e67207363686564756c6520746f20616e206163636f756e742e31014d6178696d756d206e756d626572206f662076657374696e67207363686564756c657320666f722074686973206163636f756e742d746f6b656e20706169722077617320726561636865642e6050726576696f757353616c654e6f7446696e616c697a6564001a04e450726576696f75732073616c6520776173207374696c6c206e6f742066696e616c697a65642c2066696e616c697a652069742066697273742e444e6f546f6b656e73546f5265636f766572001b041501546865726520617265206e6f2072656d61696e696e6720746f6b657320746f207265636f7665722066726f6d207468652070726576696f757320746f6b656e2073616c652e5053616c654475726174696f6e546f6f53686f7274001c04dc5370656369666965642073616c65206475726174696f6e2069732073686f72746572207468616e204d696e53616c654475726174696f6e4853616c654475726174696f6e49735a65726f001d047053616c65206475726174696f6e2063616e6e6f74206265207a65726f7053616c655570706572426f756e645175616e7469747949735a65726f001e048c557070657220626f756e64207175616e746974792063616e6e6f74206265207a65726f5853616c654361705065724d656d62657249735a65726f001f049850757263686173652063617020706572206d656d6265722063616e6e6f74206265207a65726f4c53616c65556e6974507269636549735a65726f00200484546f6b656e277320756e69742070726963652063616e6e6f74206265207a65726f6053616c655075726368617365416d6f756e7449735a65726f002104cc416d6f756e74206f6620746f6b656e7320746f207075726368617365206f6e2073616c652063616e6e6f74206265207a65726f6c43616e6e6f74496e697453616c654966416d6d4973416374697665002204604e6f2053616c6520696620416d6d206973206163746976657c526576656e756553706c697454696d65546f5374617274546f6f53686f7274002304d453706563696669656420726576656e75652073706c6974207374617274696e6720626c6f636b20697320696e20746865207061737470526576656e756553706c69744475726174696f6e546f6f53686f72740024048c526576656e75652053706c6974206475726174696f6e20697320746f6f2073686f727484526576656e756553706c6974416c7265616479416374697665466f72546f6b656e002504a8417474656d707420746f2061637469766174652073706c69742077697468206f6e65206f6e676f696e6774526576656e756553706c69744e6f74416374697665466f72546f6b656e0026043501417474656d707420746f206d616b6520726576656e75652073706c6974206f7065726174696f6e73207769746820746f6b656e206e6f7420696e206163746976652073706c697420737461746554526576656e756553706c69744469644e6f74456e640027047c526576656e75652053706c697420686173206e6f7420656e6465642079657458526576656e756553706c69744e6f744f6e676f696e67002804bc526576656e75652053706c697420666f7220746f6b656e206163746976652c20627574206e6f74206f6e676f696e676055736572416c726561647950617274696369706174696e67002904bc5573657220616c72656164792070617274696369706174696e6720696e2074686520726576656e75652073706c6974a0496e73756666696369656e7442616c616e6365466f7253706c697450617274696369706174696f6e002a041d015573657220646f6573206e6f7420706f7373657320656e6f7567682062616c616e636520746f20706172746963697061746520696e2074686520726576656e75652073706c69747c557365724e6f745061727469636970616e74696e67496e416e7953706c6974002b049855736572206973206e6f742070617274696369706174696e6720696e20616e792073706c69749843616e6e6f745061727469636970617465496e53706c6974576974685a65726f416d6f756e74002c04e8417474656d707420746f20706172746963697061746520696e20612073706c69742077697468207a65726f20746f6b656e20746f207374616b65a043616e6e6f74497373756553706c6974576974685a65726f416c6c6f636174696f6e416d6f756e74002d04dc417474656d707420746f20697373756520696e20612073706c69742077697468207a65726f20616c6c6f636174696f6e20616d6f756e74b043616e6e6f744d6f64696679537570706c795768656e526576656e756553706c697473417265416374697665002e04d4417474656d707420746f206d6f6469667920737570706c79207768656e20726576656e75652073706c69742069732061637469766558526576656e756553706c69745261746549735a65726f002f0478526576656e75652073706c697420726174652063616e6e6f742062652030404275726e416d6f756e7449735a65726f0030047c50726f766964656420616d6f756e7420746f206275726e206973203d3d2030a04275726e416d6f756e74477265617465725468616e4163636f756e74546f6b656e73416d6f756e740031043101416d6f756e74206f6620746f6b656e7320746f206275726e206578636565647320746f74616c20616d6f756e74206f6620746f6b656e73206f776e656420627920746865206163636f756e74344e6f74496e416d6d537461746500320811012d2d2d2d2d2d20414d4d202d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d406e6f7420696e20414d4d20737461746558496e76616c69644375727665506172616d6574657273003304b4496e76616c696420626f6e64696e6720637572766520636f6e737472756374696f6e20706172616d65746572733c446561646c696e654578706972656400340484446561646c696e6520636f6e73747261696e74206e6f742073617469736669656464536c697070616765546f6c6572616e63654578636565646564003504d4536c69707061676520746f6c6572616e636520636f6e73747261696e7420746f6c6572616e6365206e6f742073617469736669656460496e73756666696369656e74546f6b656e42616c616e63650036049443726561746f7220746f6b656e2062616c616e636520697320696e73756666696369656e74904f75747374616e64696e67416d6d50726f7669646564537570706c79546f6f4c617267650037046d014f757374616e64696e6720414d4d2d70726f766964656420737570706c7920636f6e737469747574657320746f6f206c617267652070657263656e74616765206f662074686520746f6b656e277320746f74616c20737570706c79684375727665536c6f7065506172616d6574657273546f6f4c6f77003804b0437572766520736c6f706520706172616d65746572732062656c6f77206d696e696d756d20616c6c6f776564904e6f74456e6f756768546f6b656e4d696e7465644279416d6d466f725468697353616c65003904c0417474656d7074696e6720746f2073656c6c206d6f7265207468616e20616d6d2070726f766964656420737570706c79a8546172676574506174726f6e6167655261746549734869676865725468616e43757272656e7452617465003a0815012d2d2d2d2d2d2d2d20506174726f6e616765202d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2dc4546172676574205261746520697320686967686572207468616e2063757272656e7420706174726f6e616765207261746580596561726c79506174726f6e616765526174654c696d69744578636565646564003b04dc50726f76696465642076616c756520666f7220706174726f6e61676520697320746f6f206269672028796561726c7920666f726d6174293050616c6c657446726f7a656e003c04c8417474656d707420746f20706572666f726d20616e20616374696f6e207768656e2070616c6c65742069732066726f7a656e006d090c5c70616c6c65745f70726f706f73616c735f656e67696e651474797065732050726f706f73616c102c426c6f636b4e756d62657201102850726f706f736572496401281c42616c616e63650118244163636f756e744964010000200128706172616d6574657273710901a050726f706f73616c506172616d65746572733c426c6f636b4e756d6265722c2042616c616e63653e00012c70726f706f7365725f696428012850726f706f73657249640001306163746976617465645f617410012c426c6f636b4e756d6265720001187374617475732d03016c50726f706f73616c5374617475733c426c6f636b4e756d6265723e000138766f74696e675f726573756c747375090134566f74696e67526573756c747300015465786163745f657865637574696f6e5f626c6f636b0102014c4f7074696f6e3c426c6f636b4e756d6265723e00016c6e725f6f665f636f756e63696c5f636f6e6669726d6174696f6e7310010c7533320001487374616b696e675f6163636f756e745f69649401444f7074696f6e3c4163636f756e7449643e000071090c5c70616c6c65745f70726f706f73616c735f656e67696e651474797065734850726f706f73616c506172616d6574657273082c426c6f636b4e756d62657201101c42616c616e6365011800200134766f74696e675f706572696f6410012c426c6f636b4e756d62657200013067726163655f706572696f6410012c426c6f636b4e756d626572000168617070726f76616c5f71756f72756d5f70657263656e7461676510010c753332000174617070726f76616c5f7468726573686f6c645f70657263656e7461676510010c753332000168736c617368696e675f71756f72756d5f70657263656e7461676510010c753332000174736c617368696e675f7468726573686f6c645f70657263656e7461676510010c75333200013872657175697265645f7374616b654501013c4f7074696f6e3c42616c616e63653e000144636f6e737469747574696f6e616c69747910010c753332000075090c5c70616c6c65745f70726f706f73616c735f656e67696e6514747970657334566f74696e67526573756c7473000010012c61627374656e74696f6e7310010c753332000124617070726f76616c7310010c75333200012872656a656374696f6e7310010c75333200011c736c617368657310010c753332000079090c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003001185665633c543e00007d09000004081028008109085c70616c6c65745f70726f706f73616c735f656e67696e65144572726f7204045400015c3c41726974686d657469634572726f72000004c8556e65787065637465642061726974686d65746963206572726f7220286f766572666c6f77202f20756e646572666c6f772948456d7074795469746c6550726f76696465640001049050726f706f73616c2063616e6e6f74206861766520616e20656d707479207469746c652260456d7074794465736372697074696f6e50726f76696465640002048850726f706f73616c2063616e6e6f74206861766520616e20656d70747920626f6479385469746c654973546f6f4c6f6e67000304445469746c6520697320746f6f206c6f6e67504465736372697074696f6e4973546f6f4c6f6e670004045c4465736372697074696f6e20697320746f6f206c6f6e674050726f706f73616c4e6f74466f756e640005046c5468652070726f706f73616c20646f6573206e6f742065786973744450726f706f73616c46696e616c697a65640006047450726f706f73616c2069732066696e616c697a656420616c726561647930416c7265616479566f7465640007049c5468652070726f706f73616c2068617665206265656e20616c726561647920766f746564206f6e244e6f74417574686f72000804344e6f7420616e20617574686f727c4d617841637469766550726f706f73616c4e756d6265724578636565646564000904904d6178206163746976652070726f706f73616c73206e756d62657220657863656564656428456d7074795374616b65000a04a05374616b652063616e6e6f7420626520656d707479207769746820746869732070726f706f73616c485374616b6553686f756c644265456d707479000b049c5374616b652073686f756c6420626520656d70747920666f7220746869732070726f706f73616c605374616b654469666665727346726f6d5265717569726564000c04b05374616b6520646966666572732066726f6d207468652070726f706f73616c20726571756972656d656e747384496e76616c6964506172616d65746572417070726f76616c5468726573686f6c64000d0484417070726f76616c207468726573686f6c642063616e6e6f74206265207a65726f84496e76616c6964506172616d65746572536c617368696e675468726573686f6c64000e0484536c617368696e67207468726573686f6c642063616e6e6f74206265207a65726f4452657175697265526f6f744f726967696e000f04845265717569726520726f6f74206f726967696e20696e2065787472696e736963734050726f706f73616c486173566f746573001004f4446973616c6c6f7720746f2063616e63656c207468652070726f706f73616c2069662074686572652061726520616e7920766f746573206f6e2069742e5c5a65726f4578616374457865637574696f6e426c6f636b00110494457861637420657865637574696f6e20626c6f636b2063616e6e6f74206265207a65726f2e68496e76616c69644578616374457865637574696f6e426c6f636b001204e0457861637420657865637574696f6e20626c6f636b2063616e6e6f74206265206c657373207468616e2063757272656e745f626c6f636b2e6c496e73756666696369656e7442616c616e6365466f725374616b65001304a05468657265206973206e6f7420656e6f7567682062616c616e636520666f722061207374616b652e44436f6e666c696374696e675374616b6573001404bc54686520636f6e666c696374696e67207374616b6520646973636f76657265642e2043616e6e6f74207374616b652e78496e76616c69645374616b696e674163636f756e74466f724d656d626572001504ac5374616b696e67206163636f756e7420646f65736e27742062656c6f6e6720746f2061206d656d6265722e8c4d6178446973706174636861626c6543616c6c436f646553697a6545786365656465640016043d015468652073697a65206f6620656e636f64656420646973706174636861626c652063616c6c20746f206265206578656375746564206279207468652070726f706f73616c20697320746f6f20626967047c456e67696e65206d6f64756c6520707265646566696e6564206572726f727385090c6c70616c6c65745f70726f706f73616c735f64697363757373696f6e1474797065734044697363757373696f6e5468726561640c204d656d626572496401282c426c6f636b4e756d62657201103c54687265616457686974656c697374018909000c01306163746976617465645f617410012c426c6f636b4e756d626572000124617574686f725f69642801204d656d62657249640001106d6f64658d09016c5468726561644d6f64653c54687265616457686974656c6973743e000089090c4c626f756e6465645f636f6c6c656374696f6e7344626f756e6465645f62747265655f7365743c426f756e646564425472656553657408045401280453000004006901012c42547265655365743c543e00008d090c6c70616c6c65745f70726f706f73616c735f64697363757373696f6e147479706573285468726561644d6f6465043c54687265616457686974656c6973740189090108104f70656e00000018436c6f73656404008909013c54687265616457686974656c6973740001000091090c6c70616c6c65745f70726f706f73616c735f64697363757373696f6e1474797065733844697363757373696f6e506f73740c204d656d626572496401282c426c6f636b4e756d626572011048526570617961626c65426c6f6174426f6e6401e101000c0124617574686f725f69642801204d656d626572496400013c636c65616e75705f7061795f6f6666e1010148526570617961626c65426c6f6174426f6e6400012c6c6173745f65646974656410012c426c6f636b4e756d62657200009509086c70616c6c65745f70726f706f73616c735f64697363757373696f6e144572726f720404540001283c41726974686d657469634572726f72000004c8556e65787065637465642061726974686d65746963206572726f7220286f766572666c6f77202f20756e646572666c6f772944546872656164446f65736e7445786973740001045054687265616420646f65736e27742065786973743c506f7374446f65736e74457869737400020448506f737420646f65736e27742065786973744452657175697265526f6f744f726967696e000304845265717569726520726f6f74206f726967696e20696e2065787472696e736963736043616e6e6f74506f73744f6e436c6f7365645468726561640004046501546865207468726561642068617320436c6f736564206d6f64652e20416e6420706f737420617574686f7220646f65736e27742062656c6f6e6720746f20636f756e63696c206f7220616c6c6f776564206d656d626572732e504e6f74417574686f724f72436f756e63696c6f720005049453686f756c642062652074687265616420617574686f72206f7220636f756e63696c6f722e604d617857686974654c69737453697a654578636565646564000604a04d617820616c6c6f77656420617574686f7273206c697374206c696d69742065786365656465642e7457686974656c69737465644d656d626572446f65734e6f74457869737400070849014174206c65617374206f6e65206f6620746865206d656d626572206964732070726f76696465642061732070617274206f6620636c6f736564207468726561642077686974656c6973742062656c6f6e677364746f2061206e6f6e2d6578697374696e67206d656d6265722e68496e73756666696369656e7442616c616e6365466f72506f7374000804c44163636f756e742068617320696e73756666696369656e742062616c616e636520746f20637265617465206120706f73744043616e6e6f7444656c657465506f73740009049c4163636f756e742063616e27742064656c65746520706f737420617420746865206d6f6d656e74048c44697363757373696f6e206d6f64756c6520707265646566696e6564206572726f72739909085870616c6c65745f70726f706f73616c735f636f646578144572726f72040454000168545369676e616c50726f706f73616c4973456d707479000004a050726f7669646564207465787420666f7220746578742070726f706f73616c20697320656d7074795852756e74696d6550726f706f73616c4973456d707479000104f050726f7669646564205741534d20636f646520666f72207468652072756e74696d6520757067726164652070726f706f73616c20697320656d70747990496e76616c696446756e64696e675265717565737450726f706f73616c42616c616e6365000204bc496e76616c69642062616c616e63652076616c756520666f7220746865207370656e64696e672070726f706f73616c54496e76616c696456616c696461746f72436f756e74000304f8496e76616c69642076616c696461746f7220636f756e7420666f722074686520277365742076616c696461746f7220636f756e74272070726f706f73616c4452657175697265526f6f744f726967696e000404845265717569726520726f6f74206f726967696e20696e2065787472696e73696373a8496e76616c6964436f756e63696c456c656374696f6e506172616d65746572436f756e63696c53697a65000504c4496e76616c696420636f756e63696c20656c656374696f6e20706172616d65746572202d20636f756e63696c5f73697a65b4496e76616c6964436f756e63696c456c656374696f6e506172616d6574657243616e6469646163794c696d6974000604d0496e76616c696420636f756e63696c20656c656374696f6e20706172616d65746572202d2063616e6469646163792d6c696d6974b4496e76616c6964436f756e63696c456c656374696f6e506172616d657465724d696e566f74696e675374616b65000704d4496e76616c696420636f756e63696c20656c656374696f6e20706172616d65746572202d206d696e2d766f74696e675f7374616b65b8496e76616c6964436f756e63696c456c656374696f6e506172616d657465724e65775465726d4475726174696f6e000804d8496e76616c696420636f756e63696c20656c656374696f6e20706172616d65746572202d206e65775f7465726d5f6475726174696f6eb8496e76616c6964436f756e63696c456c656374696f6e506172616d657465724d696e436f756e63696c5374616b65000904d8496e76616c696420636f756e63696c20656c656374696f6e20706172616d65746572202d206d696e5f636f756e63696c5f7374616b65b8496e76616c6964436f756e63696c456c656374696f6e506172616d6574657252657665616c696e67506572696f64000a04d4496e76616c696420636f756e63696c20656c656374696f6e20706172616d65746572202d2072657665616c696e675f706572696f64ac496e76616c6964436f756e63696c456c656374696f6e506172616d65746572566f74696e67506572696f64000b04c8496e76616c696420636f756e63696c20656c656374696f6e20706172616d65746572202d20766f74696e675f706572696f64bc496e76616c6964436f756e63696c456c656374696f6e506172616d65746572416e6e6f756e63696e67506572696f64000c04d8496e76616c696420636f756e63696c20656c656374696f6e20706172616d65746572202d20616e6e6f756e63696e675f706572696f6484496e76616c6964576f726b696e6747726f75704275646765744361706163697479000d04bc496e76616c696420776f726b696e672067726f75702062756467657420636170616369747920706172616d65746572a0496e76616c69645365744c656164506172616d6574657243616e6e6f744265436f756e63696c6f72000e042d01496e76616c69642027736574206c6561642070726f706f73616c2720706172616d65746572202d2070726f706f736564206c6561642063616e6e6f74206265206120636f756e63696c6f724c536c617368696e675374616b6549735a65726f000f042101496e76616c69642027736c617368207374616b652070726f706f73616c2720706172616d65746572202d2063616e6e6f7420736c617368206279207a65726f2062616c616e63652e5444656372656173696e675374616b6549735a65726f0010043901496e76616c696420276465637265617365207374616b652070726f706f73616c2720706172616d65746572202d2063616e6e6f74206465637265617365206279207a65726f2062616c616e63652e80496e73756666696369656e7446756e6473466f724275646765745570646174650011041d01496e73756666696369656e742066756e647320666f72202755706461746520576f726b696e672047726f757020427564676574272070726f706f73616c20657865637574696f6eb0496e76616c696446756e64696e675265717565737450726f706f73616c4e756d6265724f664163636f756e740012045101496e76616c6964206e756d626572206f66206163636f756e747320726563696576696e672066756e64696e67207265717565737420666f72202746756e64696e672052657175657374272070726f706f73616c2eb0496e76616c696446756e64696e675265717565737450726f706f73616c52657065617465644163636f756e74001304bc5265706561746564206163636f756e7420696e202746756e64696e672052657175657374272070726f706f73616c2ee0496e76616c69644368616e6e656c5061796f75747350726f706f73616c4d696e436173686f7574457863656564734d6178436173686f7574001404e50154686520737065636966696564206d696e206368616e6e656c20636173686f75742069732067726561746572207468616e2074686520737065636966696564206d6178206368616e6e656c20636173686f757420696e2060557064617465204368616e6e656c205061796f757473602070726f706f73616c2e4c496e76616c69644c656164576f726b657249640015049050726f7669646564206c65616420776f726b6572206964206973206e6f742076616c696450496e76616c69644c6561644f70656e696e6749640016049450726f7669646564206c656164206f70656e696e67206964206973206e6f742076616c696460496e76616c69644c6561644170706c69636174696f6e4964001704a450726f7669646564206c656164206170706c69636174696f6e206964206973206e6f742076616c696444496e76616c696450726f706f73616c49640018048450726f76696465642070726f706f73616c206964206973206e6f742076616c69643c41726974686d657469634572726f720019043c41726974686d656963204572726f720478436f646578206d6f64756c6520707265646566696e6564206572726f72739d090c5070616c6c65745f776f726b696e675f67726f75701474797065731c4f70656e696e670c2c426c6f636b4e756d62657201101c42616c616e636501181048617368012c001801306f70656e696e675f747970658103012c4f70656e696e675479706500011c6372656174656410012c426c6f636b4e756d6265720001406465736372697074696f6e5f686173682c0110486173680001307374616b655f706f6c696379610301845374616b65506f6c6963793c426c6f636b4e756d6265722c2042616c616e63653e0001407265776172645f7065725f626c6f636b4501013c4f7074696f6e3c42616c616e63653e0001386372656174696f6e5f7374616b6518011c42616c616e63650000a1090c5070616c6c65745f776f726b696e675f67726f7570147479706573384a6f624170706c69636174696f6e0c244163636f756e7449640100204d656d626572496401281048617368012c0018013c726f6c655f6163636f756e745f69640001244163636f756e7449640001447265776172645f6163636f756e745f69640001244163636f756e7449640001487374616b696e675f6163636f756e745f69640001244163636f756e7449640001246d656d6265725f69642801204d656d62657249640001406465736372697074696f6e5f686173682c0110486173680001286f70656e696e675f69642801244f70656e696e6749640000a5090c5070616c6c65745f776f726b696e675f67726f75701474797065732c47726f7570576f726b657210244163636f756e7449640100204d656d626572496401282c426c6f636b4e756d62657201101c42616c616e63650118002401246d656d6265725f69642801204d656d626572496400013c726f6c655f6163636f756e745f69640001244163636f756e7449640001487374616b696e675f6163636f756e745f69640001244163636f756e7449640001447265776172645f6163636f756e745f69640001244163636f756e744964000148737461727465645f6c656176696e675f61740102014c4f7074696f6e3c426c6f636b4e756d6265723e0001506a6f625f756e7374616b696e675f706572696f6410012c426c6f636b4e756d6265720001407265776172645f7065725f626c6f636b4501013c4f7074696f6e3c42616c616e63653e0001346d69737365645f7265776172644501013c4f7074696f6e3c42616c616e63653e000128637265617465645f617410012c426c6f636b4e756d6265720000a9090c5070616c6c65745f776f726b696e675f67726f7570186572726f7273144572726f720804540004490001803c41726974686d657469634572726f72000004c8556e65787065637465642061726974686d65746963206572726f7220286f766572666c6f77202f20756e646572666c6f7729605374616b6542616c616e636543616e6e6f7442655a65726f0001049850726f7669646564207374616b652062616c616e63652063616e6e6f74206265207a65726f2e4c4f70656e696e67446f65734e6f7445786973740002045c4f70656e696e6720646f6573206e6f742065786973742e6443616e6e6f74486972654d756c7469706c654c656164657273000304bc43616e6e6f742066696c6c206f70656e696e672077697468206d756c7469706c65206170706c69636174696f6e732e74576f726b65724170706c69636174696f6e446f65734e6f74457869737400040488576f726b6572206170706c69636174696f6e20646f6573206e6f742065786973742e744d6178416374697665576f726b65724e756d626572457863656564656400050488576f726b696e672067726f75702073697a65206c696d69742065786365656465642e9c5375636365737366756c576f726b65724170706c69636174696f6e446f65734e6f744578697374000604b45375636365737366756c20776f726b6572206170706c69636174696f6e20646f6573206e6f742065786973742e8043616e6e6f74486972654c65616465725768656e4c6561646572457869737473000704c45468657265206973206c656164657220616c72656164792c2063616e6e6f74206869726520616e6f74686572206f6e652e4049734e6f744c6561644163636f756e740008044c4e6f742061206c656164206163636f756e742e4443757272656e744c6561644e6f745365740009046043757272656e74206c656164206973206e6f74207365742e48576f726b6572446f65734e6f744578697374000a0458576f726b657220646f6573206e6f742065786973742e4c496e76616c69644d656d6265724f726967696e000b0470496e76616c6964206f726967696e20666f722061206d656d6265722e705369676e657249734e6f74576f726b6572526f6c654163636f756e74000c04885369676e6572206973206e6f7420776f726b657220726f6c65206163636f756e742e4842656c6f774d696e696d756d5374616b6573000d04885374616b696e67206c657373207468616e20746865206c6f77657220626f756e642e7c496e73756666696369656e7442616c616e6365546f436f7665725374616b65000e0490496e73756666696369656e742062616c616e636520746f20636f766572207374616b652e884170706c69636174696f6e5374616b65446f65736e744d617463684f70656e696e67000f04d84170706c69636174696f6e207374616b65206973206c657373207468616e207265717569726564206f70656e696e67207374616b652e504f726967696e49734e6f744170706c6963616e74001004604f726967696e206973206e6f74206170706c6963616e742e3c576f726b657249734c656176696e6700110498496e76616c6964206f7065726174696f6e202d20776f726b6572206973206c656176696e672e5043616e6e6f74526577617264576974685a65726f0012046452657761726420636f756c64206e6f74206265207a65726f2e78496e76616c69645374616b696e674163636f756e74466f724d656d626572001304ac5374616b696e67206163636f756e7420646f65736e27742062656c6f6e6720746f2061206d656d6265722e5c436f6e666c6963745374616b65734f6e4163636f756e74001404b05374616b696e67206163636f756e7420636f6e7461696e7320636f6e666c696374696e67207374616b65732e44576f726b65724861734e6f5265776172640015047c576f726b657220686173206e6f20726563757272696e67207265776172642e78556e7374616b696e67506572696f644c6573735468616e4d696e696d756d001604090153706563696669656420756e7374616b696e6720706572696f64206973206c657373207468656e206d696e696d756d2073657420666f72207468652067726f75702e3c43616e6e6f745370656e645a65726f00170460496e76616c6964207370656e64696e6720616d6f756e742e74496e73756666696369656e74427564676574466f725370656e64696e67001804a449742773206e6f7420656e6f7567682062756467657420666f722074686973207370656e64696e672e584e6f4170706c69636174696f6e7350726f7669646564001904bc43616e6e6f742066696c6c206f70656e696e67202d206e6f206170706c69636174696f6e732070726f76696465642ea043616e6e6f7444656372656173655374616b6544656c7461477265617465725468616e5374616b65001a04fc43616e6e6f74206465637265617365207374616b65202d207374616b652064656c74612067726561746572207468616e20696e697469616c207374616b652e644170706c69636174696f6e734e6f74466f724f70656e696e67001b04f0547279696e6720746f2066696c6c206f70656e696e67207769746820616e206170706c69636174696f6e20666f72206f74686572206f70656e696e6764576f726b657253746f7261676556616c7565546f6f4c6f6e67001c0480576f726b65722073746f72616765207465787420697320746f6f206c6f6e672e70496e73756666696369656e74546f6b656e73466f7246756e64696e67001d04f8496e73756666696369656e7420746f6b656e7320666f722066756e64696e6720286f6e206d656d62657220636f6e74726f6c6c6572206163636f756e7429445a65726f546f6b656e7346756e64696e67001e047c547279696e6720746f2066756e642077697468207a65726f20746f6b656e7378496e73756666696369656e7442616c616e6365466f725472616e73666572001f04b443616e6e6f742077697468647261773a20696e73756666696369656e74206275646765742062616c616e63652e048c44697363757373696f6e206d6f64756c6520707265646566696e6564206572726f7273ad090c5070616c6c65745f776f726b696e675f67726f7570186572726f7273144572726f720804540004490001803c41726974686d657469634572726f72000004c8556e65787065637465642061726974686d65746963206572726f7220286f766572666c6f77202f20756e646572666c6f7729605374616b6542616c616e636543616e6e6f7442655a65726f0001049850726f7669646564207374616b652062616c616e63652063616e6e6f74206265207a65726f2e4c4f70656e696e67446f65734e6f7445786973740002045c4f70656e696e6720646f6573206e6f742065786973742e6443616e6e6f74486972654d756c7469706c654c656164657273000304bc43616e6e6f742066696c6c206f70656e696e672077697468206d756c7469706c65206170706c69636174696f6e732e74576f726b65724170706c69636174696f6e446f65734e6f74457869737400040488576f726b6572206170706c69636174696f6e20646f6573206e6f742065786973742e744d6178416374697665576f726b65724e756d626572457863656564656400050488576f726b696e672067726f75702073697a65206c696d69742065786365656465642e9c5375636365737366756c576f726b65724170706c69636174696f6e446f65734e6f744578697374000604b45375636365737366756c20776f726b6572206170706c69636174696f6e20646f6573206e6f742065786973742e8043616e6e6f74486972654c65616465725768656e4c6561646572457869737473000704c45468657265206973206c656164657220616c72656164792c2063616e6e6f74206869726520616e6f74686572206f6e652e4049734e6f744c6561644163636f756e740008044c4e6f742061206c656164206163636f756e742e4443757272656e744c6561644e6f745365740009046043757272656e74206c656164206973206e6f74207365742e48576f726b6572446f65734e6f744578697374000a0458576f726b657220646f6573206e6f742065786973742e4c496e76616c69644d656d6265724f726967696e000b0470496e76616c6964206f726967696e20666f722061206d656d6265722e705369676e657249734e6f74576f726b6572526f6c654163636f756e74000c04885369676e6572206973206e6f7420776f726b657220726f6c65206163636f756e742e4842656c6f774d696e696d756d5374616b6573000d04885374616b696e67206c657373207468616e20746865206c6f77657220626f756e642e7c496e73756666696369656e7442616c616e6365546f436f7665725374616b65000e0490496e73756666696369656e742062616c616e636520746f20636f766572207374616b652e884170706c69636174696f6e5374616b65446f65736e744d617463684f70656e696e67000f04d84170706c69636174696f6e207374616b65206973206c657373207468616e207265717569726564206f70656e696e67207374616b652e504f726967696e49734e6f744170706c6963616e74001004604f726967696e206973206e6f74206170706c6963616e742e3c576f726b657249734c656176696e6700110498496e76616c6964206f7065726174696f6e202d20776f726b6572206973206c656176696e672e5043616e6e6f74526577617264576974685a65726f0012046452657761726420636f756c64206e6f74206265207a65726f2e78496e76616c69645374616b696e674163636f756e74466f724d656d626572001304ac5374616b696e67206163636f756e7420646f65736e27742062656c6f6e6720746f2061206d656d6265722e5c436f6e666c6963745374616b65734f6e4163636f756e74001404b05374616b696e67206163636f756e7420636f6e7461696e7320636f6e666c696374696e67207374616b65732e44576f726b65724861734e6f5265776172640015047c576f726b657220686173206e6f20726563757272696e67207265776172642e78556e7374616b696e67506572696f644c6573735468616e4d696e696d756d001604090153706563696669656420756e7374616b696e6720706572696f64206973206c657373207468656e206d696e696d756d2073657420666f72207468652067726f75702e3c43616e6e6f745370656e645a65726f00170460496e76616c6964207370656e64696e6720616d6f756e742e74496e73756666696369656e74427564676574466f725370656e64696e67001804a449742773206e6f7420656e6f7567682062756467657420666f722074686973207370656e64696e672e584e6f4170706c69636174696f6e7350726f7669646564001904bc43616e6e6f742066696c6c206f70656e696e67202d206e6f206170706c69636174696f6e732070726f76696465642ea043616e6e6f7444656372656173655374616b6544656c7461477265617465725468616e5374616b65001a04fc43616e6e6f74206465637265617365207374616b65202d207374616b652064656c74612067726561746572207468616e20696e697469616c207374616b652e644170706c69636174696f6e734e6f74466f724f70656e696e67001b04f0547279696e6720746f2066696c6c206f70656e696e67207769746820616e206170706c69636174696f6e20666f72206f74686572206f70656e696e6764576f726b657253746f7261676556616c7565546f6f4c6f6e67001c0480576f726b65722073746f72616765207465787420697320746f6f206c6f6e672e70496e73756666696369656e74546f6b656e73466f7246756e64696e67001d04f8496e73756666696369656e7420746f6b656e7320666f722066756e64696e6720286f6e206d656d62657220636f6e74726f6c6c6572206163636f756e7429445a65726f546f6b656e7346756e64696e67001e047c547279696e6720746f2066756e642077697468207a65726f20746f6b656e7378496e73756666696369656e7442616c616e6365466f725472616e73666572001f04b443616e6e6f742077697468647261773a20696e73756666696369656e74206275646765742062616c616e63652e048c44697363757373696f6e206d6f64756c6520707265646566696e6564206572726f7273b1090c5070616c6c65745f776f726b696e675f67726f7570186572726f7273144572726f720804540004490001803c41726974686d657469634572726f72000004c8556e65787065637465642061726974686d65746963206572726f7220286f766572666c6f77202f20756e646572666c6f7729605374616b6542616c616e636543616e6e6f7442655a65726f0001049850726f7669646564207374616b652062616c616e63652063616e6e6f74206265207a65726f2e4c4f70656e696e67446f65734e6f7445786973740002045c4f70656e696e6720646f6573206e6f742065786973742e6443616e6e6f74486972654d756c7469706c654c656164657273000304bc43616e6e6f742066696c6c206f70656e696e672077697468206d756c7469706c65206170706c69636174696f6e732e74576f726b65724170706c69636174696f6e446f65734e6f74457869737400040488576f726b6572206170706c69636174696f6e20646f6573206e6f742065786973742e744d6178416374697665576f726b65724e756d626572457863656564656400050488576f726b696e672067726f75702073697a65206c696d69742065786365656465642e9c5375636365737366756c576f726b65724170706c69636174696f6e446f65734e6f744578697374000604b45375636365737366756c20776f726b6572206170706c69636174696f6e20646f6573206e6f742065786973742e8043616e6e6f74486972654c65616465725768656e4c6561646572457869737473000704c45468657265206973206c656164657220616c72656164792c2063616e6e6f74206869726520616e6f74686572206f6e652e4049734e6f744c6561644163636f756e740008044c4e6f742061206c656164206163636f756e742e4443757272656e744c6561644e6f745365740009046043757272656e74206c656164206973206e6f74207365742e48576f726b6572446f65734e6f744578697374000a0458576f726b657220646f6573206e6f742065786973742e4c496e76616c69644d656d6265724f726967696e000b0470496e76616c6964206f726967696e20666f722061206d656d6265722e705369676e657249734e6f74576f726b6572526f6c654163636f756e74000c04885369676e6572206973206e6f7420776f726b657220726f6c65206163636f756e742e4842656c6f774d696e696d756d5374616b6573000d04885374616b696e67206c657373207468616e20746865206c6f77657220626f756e642e7c496e73756666696369656e7442616c616e6365546f436f7665725374616b65000e0490496e73756666696369656e742062616c616e636520746f20636f766572207374616b652e884170706c69636174696f6e5374616b65446f65736e744d617463684f70656e696e67000f04d84170706c69636174696f6e207374616b65206973206c657373207468616e207265717569726564206f70656e696e67207374616b652e504f726967696e49734e6f744170706c6963616e74001004604f726967696e206973206e6f74206170706c6963616e742e3c576f726b657249734c656176696e6700110498496e76616c6964206f7065726174696f6e202d20776f726b6572206973206c656176696e672e5043616e6e6f74526577617264576974685a65726f0012046452657761726420636f756c64206e6f74206265207a65726f2e78496e76616c69645374616b696e674163636f756e74466f724d656d626572001304ac5374616b696e67206163636f756e7420646f65736e27742062656c6f6e6720746f2061206d656d6265722e5c436f6e666c6963745374616b65734f6e4163636f756e74001404b05374616b696e67206163636f756e7420636f6e7461696e7320636f6e666c696374696e67207374616b65732e44576f726b65724861734e6f5265776172640015047c576f726b657220686173206e6f20726563757272696e67207265776172642e78556e7374616b696e67506572696f644c6573735468616e4d696e696d756d001604090153706563696669656420756e7374616b696e6720706572696f64206973206c657373207468656e206d696e696d756d2073657420666f72207468652067726f75702e3c43616e6e6f745370656e645a65726f00170460496e76616c6964207370656e64696e6720616d6f756e742e74496e73756666696369656e74427564676574466f725370656e64696e67001804a449742773206e6f7420656e6f7567682062756467657420666f722074686973207370656e64696e672e584e6f4170706c69636174696f6e7350726f7669646564001904bc43616e6e6f742066696c6c206f70656e696e67202d206e6f206170706c69636174696f6e732070726f76696465642ea043616e6e6f7444656372656173655374616b6544656c7461477265617465725468616e5374616b65001a04fc43616e6e6f74206465637265617365207374616b65202d207374616b652064656c74612067726561746572207468616e20696e697469616c207374616b652e644170706c69636174696f6e734e6f74466f724f70656e696e67001b04f0547279696e6720746f2066696c6c206f70656e696e67207769746820616e206170706c69636174696f6e20666f72206f74686572206f70656e696e6764576f726b657253746f7261676556616c7565546f6f4c6f6e67001c0480576f726b65722073746f72616765207465787420697320746f6f206c6f6e672e70496e73756666696369656e74546f6b656e73466f7246756e64696e67001d04f8496e73756666696369656e7420746f6b656e7320666f722066756e64696e6720286f6e206d656d62657220636f6e74726f6c6c6572206163636f756e7429445a65726f546f6b656e7346756e64696e67001e047c547279696e6720746f2066756e642077697468207a65726f20746f6b656e7378496e73756666696369656e7442616c616e6365466f725472616e73666572001f04b443616e6e6f742077697468647261773a20696e73756666696369656e74206275646765742062616c616e63652e048c44697363757373696f6e206d6f64756c6520707265646566696e6564206572726f7273b5090c5070616c6c65745f776f726b696e675f67726f7570186572726f7273144572726f720804540004490001803c41726974686d657469634572726f72000004c8556e65787065637465642061726974686d65746963206572726f7220286f766572666c6f77202f20756e646572666c6f7729605374616b6542616c616e636543616e6e6f7442655a65726f0001049850726f7669646564207374616b652062616c616e63652063616e6e6f74206265207a65726f2e4c4f70656e696e67446f65734e6f7445786973740002045c4f70656e696e6720646f6573206e6f742065786973742e6443616e6e6f74486972654d756c7469706c654c656164657273000304bc43616e6e6f742066696c6c206f70656e696e672077697468206d756c7469706c65206170706c69636174696f6e732e74576f726b65724170706c69636174696f6e446f65734e6f74457869737400040488576f726b6572206170706c69636174696f6e20646f6573206e6f742065786973742e744d6178416374697665576f726b65724e756d626572457863656564656400050488576f726b696e672067726f75702073697a65206c696d69742065786365656465642e9c5375636365737366756c576f726b65724170706c69636174696f6e446f65734e6f744578697374000604b45375636365737366756c20776f726b6572206170706c69636174696f6e20646f6573206e6f742065786973742e8043616e6e6f74486972654c65616465725768656e4c6561646572457869737473000704c45468657265206973206c656164657220616c72656164792c2063616e6e6f74206869726520616e6f74686572206f6e652e4049734e6f744c6561644163636f756e740008044c4e6f742061206c656164206163636f756e742e4443757272656e744c6561644e6f745365740009046043757272656e74206c656164206973206e6f74207365742e48576f726b6572446f65734e6f744578697374000a0458576f726b657220646f6573206e6f742065786973742e4c496e76616c69644d656d6265724f726967696e000b0470496e76616c6964206f726967696e20666f722061206d656d6265722e705369676e657249734e6f74576f726b6572526f6c654163636f756e74000c04885369676e6572206973206e6f7420776f726b657220726f6c65206163636f756e742e4842656c6f774d696e696d756d5374616b6573000d04885374616b696e67206c657373207468616e20746865206c6f77657220626f756e642e7c496e73756666696369656e7442616c616e6365546f436f7665725374616b65000e0490496e73756666696369656e742062616c616e636520746f20636f766572207374616b652e884170706c69636174696f6e5374616b65446f65736e744d617463684f70656e696e67000f04d84170706c69636174696f6e207374616b65206973206c657373207468616e207265717569726564206f70656e696e67207374616b652e504f726967696e49734e6f744170706c6963616e74001004604f726967696e206973206e6f74206170706c6963616e742e3c576f726b657249734c656176696e6700110498496e76616c6964206f7065726174696f6e202d20776f726b6572206973206c656176696e672e5043616e6e6f74526577617264576974685a65726f0012046452657761726420636f756c64206e6f74206265207a65726f2e78496e76616c69645374616b696e674163636f756e74466f724d656d626572001304ac5374616b696e67206163636f756e7420646f65736e27742062656c6f6e6720746f2061206d656d6265722e5c436f6e666c6963745374616b65734f6e4163636f756e74001404b05374616b696e67206163636f756e7420636f6e7461696e7320636f6e666c696374696e67207374616b65732e44576f726b65724861734e6f5265776172640015047c576f726b657220686173206e6f20726563757272696e67207265776172642e78556e7374616b696e67506572696f644c6573735468616e4d696e696d756d001604090153706563696669656420756e7374616b696e6720706572696f64206973206c657373207468656e206d696e696d756d2073657420666f72207468652067726f75702e3c43616e6e6f745370656e645a65726f00170460496e76616c6964207370656e64696e6720616d6f756e742e74496e73756666696369656e74427564676574466f725370656e64696e67001804a449742773206e6f7420656e6f7567682062756467657420666f722074686973207370656e64696e672e584e6f4170706c69636174696f6e7350726f7669646564001904bc43616e6e6f742066696c6c206f70656e696e67202d206e6f206170706c69636174696f6e732070726f76696465642ea043616e6e6f7444656372656173655374616b6544656c7461477265617465725468616e5374616b65001a04fc43616e6e6f74206465637265617365207374616b65202d207374616b652064656c74612067726561746572207468616e20696e697469616c207374616b652e644170706c69636174696f6e734e6f74466f724f70656e696e67001b04f0547279696e6720746f2066696c6c206f70656e696e67207769746820616e206170706c69636174696f6e20666f72206f74686572206f70656e696e6764576f726b657253746f7261676556616c7565546f6f4c6f6e67001c0480576f726b65722073746f72616765207465787420697320746f6f206c6f6e672e70496e73756666696369656e74546f6b656e73466f7246756e64696e67001d04f8496e73756666696369656e7420746f6b656e7320666f722066756e64696e6720286f6e206d656d62657220636f6e74726f6c6c6572206163636f756e7429445a65726f546f6b656e7346756e64696e67001e047c547279696e6720746f2066756e642077697468207a65726f20746f6b656e7378496e73756666696369656e7442616c616e6365466f725472616e73666572001f04b443616e6e6f742077697468647261773a20696e73756666696369656e74206275646765742062616c616e63652e048c44697363757373696f6e206d6f64756c6520707265646566696e6564206572726f7273b9090c5070616c6c65745f776f726b696e675f67726f7570186572726f7273144572726f720804540004490001803c41726974686d657469634572726f72000004c8556e65787065637465642061726974686d65746963206572726f7220286f766572666c6f77202f20756e646572666c6f7729605374616b6542616c616e636543616e6e6f7442655a65726f0001049850726f7669646564207374616b652062616c616e63652063616e6e6f74206265207a65726f2e4c4f70656e696e67446f65734e6f7445786973740002045c4f70656e696e6720646f6573206e6f742065786973742e6443616e6e6f74486972654d756c7469706c654c656164657273000304bc43616e6e6f742066696c6c206f70656e696e672077697468206d756c7469706c65206170706c69636174696f6e732e74576f726b65724170706c69636174696f6e446f65734e6f74457869737400040488576f726b6572206170706c69636174696f6e20646f6573206e6f742065786973742e744d6178416374697665576f726b65724e756d626572457863656564656400050488576f726b696e672067726f75702073697a65206c696d69742065786365656465642e9c5375636365737366756c576f726b65724170706c69636174696f6e446f65734e6f744578697374000604b45375636365737366756c20776f726b6572206170706c69636174696f6e20646f6573206e6f742065786973742e8043616e6e6f74486972654c65616465725768656e4c6561646572457869737473000704c45468657265206973206c656164657220616c72656164792c2063616e6e6f74206869726520616e6f74686572206f6e652e4049734e6f744c6561644163636f756e740008044c4e6f742061206c656164206163636f756e742e4443757272656e744c6561644e6f745365740009046043757272656e74206c656164206973206e6f74207365742e48576f726b6572446f65734e6f744578697374000a0458576f726b657220646f6573206e6f742065786973742e4c496e76616c69644d656d6265724f726967696e000b0470496e76616c6964206f726967696e20666f722061206d656d6265722e705369676e657249734e6f74576f726b6572526f6c654163636f756e74000c04885369676e6572206973206e6f7420776f726b657220726f6c65206163636f756e742e4842656c6f774d696e696d756d5374616b6573000d04885374616b696e67206c657373207468616e20746865206c6f77657220626f756e642e7c496e73756666696369656e7442616c616e6365546f436f7665725374616b65000e0490496e73756666696369656e742062616c616e636520746f20636f766572207374616b652e884170706c69636174696f6e5374616b65446f65736e744d617463684f70656e696e67000f04d84170706c69636174696f6e207374616b65206973206c657373207468616e207265717569726564206f70656e696e67207374616b652e504f726967696e49734e6f744170706c6963616e74001004604f726967696e206973206e6f74206170706c6963616e742e3c576f726b657249734c656176696e6700110498496e76616c6964206f7065726174696f6e202d20776f726b6572206973206c656176696e672e5043616e6e6f74526577617264576974685a65726f0012046452657761726420636f756c64206e6f74206265207a65726f2e78496e76616c69645374616b696e674163636f756e74466f724d656d626572001304ac5374616b696e67206163636f756e7420646f65736e27742062656c6f6e6720746f2061206d656d6265722e5c436f6e666c6963745374616b65734f6e4163636f756e74001404b05374616b696e67206163636f756e7420636f6e7461696e7320636f6e666c696374696e67207374616b65732e44576f726b65724861734e6f5265776172640015047c576f726b657220686173206e6f20726563757272696e67207265776172642e78556e7374616b696e67506572696f644c6573735468616e4d696e696d756d001604090153706563696669656420756e7374616b696e6720706572696f64206973206c657373207468656e206d696e696d756d2073657420666f72207468652067726f75702e3c43616e6e6f745370656e645a65726f00170460496e76616c6964207370656e64696e6720616d6f756e742e74496e73756666696369656e74427564676574466f725370656e64696e67001804a449742773206e6f7420656e6f7567682062756467657420666f722074686973207370656e64696e672e584e6f4170706c69636174696f6e7350726f7669646564001904bc43616e6e6f742066696c6c206f70656e696e67202d206e6f206170706c69636174696f6e732070726f76696465642ea043616e6e6f7444656372656173655374616b6544656c7461477265617465725468616e5374616b65001a04fc43616e6e6f74206465637265617365207374616b65202d207374616b652064656c74612067726561746572207468616e20696e697469616c207374616b652e644170706c69636174696f6e734e6f74466f724f70656e696e67001b04f0547279696e6720746f2066696c6c206f70656e696e67207769746820616e206170706c69636174696f6e20666f72206f74686572206f70656e696e6764576f726b657253746f7261676556616c7565546f6f4c6f6e67001c0480576f726b65722073746f72616765207465787420697320746f6f206c6f6e672e70496e73756666696369656e74546f6b656e73466f7246756e64696e67001d04f8496e73756666696369656e7420746f6b656e7320666f722066756e64696e6720286f6e206d656d62657220636f6e74726f6c6c6572206163636f756e7429445a65726f546f6b656e7346756e64696e67001e047c547279696e6720746f2066756e642077697468207a65726f20746f6b656e7378496e73756666696369656e7442616c616e6365466f725472616e73666572001f04b443616e6e6f742077697468647261773a20696e73756666696369656e74206275646765742062616c616e63652e048c44697363757373696f6e206d6f64756c6520707265646566696e6564206572726f7273bd090c5070616c6c65745f776f726b696e675f67726f7570186572726f7273144572726f720804540004490001803c41726974686d657469634572726f72000004c8556e65787065637465642061726974686d65746963206572726f7220286f766572666c6f77202f20756e646572666c6f7729605374616b6542616c616e636543616e6e6f7442655a65726f0001049850726f7669646564207374616b652062616c616e63652063616e6e6f74206265207a65726f2e4c4f70656e696e67446f65734e6f7445786973740002045c4f70656e696e6720646f6573206e6f742065786973742e6443616e6e6f74486972654d756c7469706c654c656164657273000304bc43616e6e6f742066696c6c206f70656e696e672077697468206d756c7469706c65206170706c69636174696f6e732e74576f726b65724170706c69636174696f6e446f65734e6f74457869737400040488576f726b6572206170706c69636174696f6e20646f6573206e6f742065786973742e744d6178416374697665576f726b65724e756d626572457863656564656400050488576f726b696e672067726f75702073697a65206c696d69742065786365656465642e9c5375636365737366756c576f726b65724170706c69636174696f6e446f65734e6f744578697374000604b45375636365737366756c20776f726b6572206170706c69636174696f6e20646f6573206e6f742065786973742e8043616e6e6f74486972654c65616465725768656e4c6561646572457869737473000704c45468657265206973206c656164657220616c72656164792c2063616e6e6f74206869726520616e6f74686572206f6e652e4049734e6f744c6561644163636f756e740008044c4e6f742061206c656164206163636f756e742e4443757272656e744c6561644e6f745365740009046043757272656e74206c656164206973206e6f74207365742e48576f726b6572446f65734e6f744578697374000a0458576f726b657220646f6573206e6f742065786973742e4c496e76616c69644d656d6265724f726967696e000b0470496e76616c6964206f726967696e20666f722061206d656d6265722e705369676e657249734e6f74576f726b6572526f6c654163636f756e74000c04885369676e6572206973206e6f7420776f726b657220726f6c65206163636f756e742e4842656c6f774d696e696d756d5374616b6573000d04885374616b696e67206c657373207468616e20746865206c6f77657220626f756e642e7c496e73756666696369656e7442616c616e6365546f436f7665725374616b65000e0490496e73756666696369656e742062616c616e636520746f20636f766572207374616b652e884170706c69636174696f6e5374616b65446f65736e744d617463684f70656e696e67000f04d84170706c69636174696f6e207374616b65206973206c657373207468616e207265717569726564206f70656e696e67207374616b652e504f726967696e49734e6f744170706c6963616e74001004604f726967696e206973206e6f74206170706c6963616e742e3c576f726b657249734c656176696e6700110498496e76616c6964206f7065726174696f6e202d20776f726b6572206973206c656176696e672e5043616e6e6f74526577617264576974685a65726f0012046452657761726420636f756c64206e6f74206265207a65726f2e78496e76616c69645374616b696e674163636f756e74466f724d656d626572001304ac5374616b696e67206163636f756e7420646f65736e27742062656c6f6e6720746f2061206d656d6265722e5c436f6e666c6963745374616b65734f6e4163636f756e74001404b05374616b696e67206163636f756e7420636f6e7461696e7320636f6e666c696374696e67207374616b65732e44576f726b65724861734e6f5265776172640015047c576f726b657220686173206e6f20726563757272696e67207265776172642e78556e7374616b696e67506572696f644c6573735468616e4d696e696d756d001604090153706563696669656420756e7374616b696e6720706572696f64206973206c657373207468656e206d696e696d756d2073657420666f72207468652067726f75702e3c43616e6e6f745370656e645a65726f00170460496e76616c6964207370656e64696e6720616d6f756e742e74496e73756666696369656e74427564676574466f725370656e64696e67001804a449742773206e6f7420656e6f7567682062756467657420666f722074686973207370656e64696e672e584e6f4170706c69636174696f6e7350726f7669646564001904bc43616e6e6f742066696c6c206f70656e696e67202d206e6f206170706c69636174696f6e732070726f76696465642ea043616e6e6f7444656372656173655374616b6544656c7461477265617465725468616e5374616b65001a04fc43616e6e6f74206465637265617365207374616b65202d207374616b652064656c74612067726561746572207468616e20696e697469616c207374616b652e644170706c69636174696f6e734e6f74466f724f70656e696e67001b04f0547279696e6720746f2066696c6c206f70656e696e67207769746820616e206170706c69636174696f6e20666f72206f74686572206f70656e696e6764576f726b657253746f7261676556616c7565546f6f4c6f6e67001c0480576f726b65722073746f72616765207465787420697320746f6f206c6f6e672e70496e73756666696369656e74546f6b656e73466f7246756e64696e67001d04f8496e73756666696369656e7420746f6b656e7320666f722066756e64696e6720286f6e206d656d62657220636f6e74726f6c6c6572206163636f756e7429445a65726f546f6b656e7346756e64696e67001e047c547279696e6720746f2066756e642077697468207a65726f20746f6b656e7378496e73756666696369656e7442616c616e6365466f725472616e73666572001f04b443616e6e6f742077697468647261773a20696e73756666696369656e74206275646765742062616c616e63652e048c44697363757373696f6e206d6f64756c6520707265646566696e6564206572726f7273c1090c5070616c6c65745f776f726b696e675f67726f7570186572726f7273144572726f720804540004490001803c41726974686d657469634572726f72000004c8556e65787065637465642061726974686d65746963206572726f7220286f766572666c6f77202f20756e646572666c6f7729605374616b6542616c616e636543616e6e6f7442655a65726f0001049850726f7669646564207374616b652062616c616e63652063616e6e6f74206265207a65726f2e4c4f70656e696e67446f65734e6f7445786973740002045c4f70656e696e6720646f6573206e6f742065786973742e6443616e6e6f74486972654d756c7469706c654c656164657273000304bc43616e6e6f742066696c6c206f70656e696e672077697468206d756c7469706c65206170706c69636174696f6e732e74576f726b65724170706c69636174696f6e446f65734e6f74457869737400040488576f726b6572206170706c69636174696f6e20646f6573206e6f742065786973742e744d6178416374697665576f726b65724e756d626572457863656564656400050488576f726b696e672067726f75702073697a65206c696d69742065786365656465642e9c5375636365737366756c576f726b65724170706c69636174696f6e446f65734e6f744578697374000604b45375636365737366756c20776f726b6572206170706c69636174696f6e20646f6573206e6f742065786973742e8043616e6e6f74486972654c65616465725768656e4c6561646572457869737473000704c45468657265206973206c656164657220616c72656164792c2063616e6e6f74206869726520616e6f74686572206f6e652e4049734e6f744c6561644163636f756e740008044c4e6f742061206c656164206163636f756e742e4443757272656e744c6561644e6f745365740009046043757272656e74206c656164206973206e6f74207365742e48576f726b6572446f65734e6f744578697374000a0458576f726b657220646f6573206e6f742065786973742e4c496e76616c69644d656d6265724f726967696e000b0470496e76616c6964206f726967696e20666f722061206d656d6265722e705369676e657249734e6f74576f726b6572526f6c654163636f756e74000c04885369676e6572206973206e6f7420776f726b657220726f6c65206163636f756e742e4842656c6f774d696e696d756d5374616b6573000d04885374616b696e67206c657373207468616e20746865206c6f77657220626f756e642e7c496e73756666696369656e7442616c616e6365546f436f7665725374616b65000e0490496e73756666696369656e742062616c616e636520746f20636f766572207374616b652e884170706c69636174696f6e5374616b65446f65736e744d617463684f70656e696e67000f04d84170706c69636174696f6e207374616b65206973206c657373207468616e207265717569726564206f70656e696e67207374616b652e504f726967696e49734e6f744170706c6963616e74001004604f726967696e206973206e6f74206170706c6963616e742e3c576f726b657249734c656176696e6700110498496e76616c6964206f7065726174696f6e202d20776f726b6572206973206c656176696e672e5043616e6e6f74526577617264576974685a65726f0012046452657761726420636f756c64206e6f74206265207a65726f2e78496e76616c69645374616b696e674163636f756e74466f724d656d626572001304ac5374616b696e67206163636f756e7420646f65736e27742062656c6f6e6720746f2061206d656d6265722e5c436f6e666c6963745374616b65734f6e4163636f756e74001404b05374616b696e67206163636f756e7420636f6e7461696e7320636f6e666c696374696e67207374616b65732e44576f726b65724861734e6f5265776172640015047c576f726b657220686173206e6f20726563757272696e67207265776172642e78556e7374616b696e67506572696f644c6573735468616e4d696e696d756d001604090153706563696669656420756e7374616b696e6720706572696f64206973206c657373207468656e206d696e696d756d2073657420666f72207468652067726f75702e3c43616e6e6f745370656e645a65726f00170460496e76616c6964207370656e64696e6720616d6f756e742e74496e73756666696369656e74427564676574466f725370656e64696e67001804a449742773206e6f7420656e6f7567682062756467657420666f722074686973207370656e64696e672e584e6f4170706c69636174696f6e7350726f7669646564001904bc43616e6e6f742066696c6c206f70656e696e67202d206e6f206170706c69636174696f6e732070726f76696465642ea043616e6e6f7444656372656173655374616b6544656c7461477265617465725468616e5374616b65001a04fc43616e6e6f74206465637265617365207374616b65202d207374616b652064656c74612067726561746572207468616e20696e697469616c207374616b652e644170706c69636174696f6e734e6f74466f724f70656e696e67001b04f0547279696e6720746f2066696c6c206f70656e696e67207769746820616e206170706c69636174696f6e20666f72206f74686572206f70656e696e6764576f726b657253746f7261676556616c7565546f6f4c6f6e67001c0480576f726b65722073746f72616765207465787420697320746f6f206c6f6e672e70496e73756666696369656e74546f6b656e73466f7246756e64696e67001d04f8496e73756666696369656e7420746f6b656e7320666f722066756e64696e6720286f6e206d656d62657220636f6e74726f6c6c6572206163636f756e7429445a65726f546f6b656e7346756e64696e67001e047c547279696e6720746f2066756e642077697468207a65726f20746f6b656e7378496e73756666696369656e7442616c616e6365466f725472616e73666572001f04b443616e6e6f742077697468647261773a20696e73756666696369656e74206275646765742062616c616e63652e048c44697363757373696f6e206d6f64756c6520707265646566696e6564206572726f7273c5090c5070616c6c65745f776f726b696e675f67726f7570186572726f7273144572726f720804540004490001803c41726974686d657469634572726f72000004c8556e65787065637465642061726974686d65746963206572726f7220286f766572666c6f77202f20756e646572666c6f7729605374616b6542616c616e636543616e6e6f7442655a65726f0001049850726f7669646564207374616b652062616c616e63652063616e6e6f74206265207a65726f2e4c4f70656e696e67446f65734e6f7445786973740002045c4f70656e696e6720646f6573206e6f742065786973742e6443616e6e6f74486972654d756c7469706c654c656164657273000304bc43616e6e6f742066696c6c206f70656e696e672077697468206d756c7469706c65206170706c69636174696f6e732e74576f726b65724170706c69636174696f6e446f65734e6f74457869737400040488576f726b6572206170706c69636174696f6e20646f6573206e6f742065786973742e744d6178416374697665576f726b65724e756d626572457863656564656400050488576f726b696e672067726f75702073697a65206c696d69742065786365656465642e9c5375636365737366756c576f726b65724170706c69636174696f6e446f65734e6f744578697374000604b45375636365737366756c20776f726b6572206170706c69636174696f6e20646f6573206e6f742065786973742e8043616e6e6f74486972654c65616465725768656e4c6561646572457869737473000704c45468657265206973206c656164657220616c72656164792c2063616e6e6f74206869726520616e6f74686572206f6e652e4049734e6f744c6561644163636f756e740008044c4e6f742061206c656164206163636f756e742e4443757272656e744c6561644e6f745365740009046043757272656e74206c656164206973206e6f74207365742e48576f726b6572446f65734e6f744578697374000a0458576f726b657220646f6573206e6f742065786973742e4c496e76616c69644d656d6265724f726967696e000b0470496e76616c6964206f726967696e20666f722061206d656d6265722e705369676e657249734e6f74576f726b6572526f6c654163636f756e74000c04885369676e6572206973206e6f7420776f726b657220726f6c65206163636f756e742e4842656c6f774d696e696d756d5374616b6573000d04885374616b696e67206c657373207468616e20746865206c6f77657220626f756e642e7c496e73756666696369656e7442616c616e6365546f436f7665725374616b65000e0490496e73756666696369656e742062616c616e636520746f20636f766572207374616b652e884170706c69636174696f6e5374616b65446f65736e744d617463684f70656e696e67000f04d84170706c69636174696f6e207374616b65206973206c657373207468616e207265717569726564206f70656e696e67207374616b652e504f726967696e49734e6f744170706c6963616e74001004604f726967696e206973206e6f74206170706c6963616e742e3c576f726b657249734c656176696e6700110498496e76616c6964206f7065726174696f6e202d20776f726b6572206973206c656176696e672e5043616e6e6f74526577617264576974685a65726f0012046452657761726420636f756c64206e6f74206265207a65726f2e78496e76616c69645374616b696e674163636f756e74466f724d656d626572001304ac5374616b696e67206163636f756e7420646f65736e27742062656c6f6e6720746f2061206d656d6265722e5c436f6e666c6963745374616b65734f6e4163636f756e74001404b05374616b696e67206163636f756e7420636f6e7461696e7320636f6e666c696374696e67207374616b65732e44576f726b65724861734e6f5265776172640015047c576f726b657220686173206e6f20726563757272696e67207265776172642e78556e7374616b696e67506572696f644c6573735468616e4d696e696d756d001604090153706563696669656420756e7374616b696e6720706572696f64206973206c657373207468656e206d696e696d756d2073657420666f72207468652067726f75702e3c43616e6e6f745370656e645a65726f00170460496e76616c6964207370656e64696e6720616d6f756e742e74496e73756666696369656e74427564676574466f725370656e64696e67001804a449742773206e6f7420656e6f7567682062756467657420666f722074686973207370656e64696e672e584e6f4170706c69636174696f6e7350726f7669646564001904bc43616e6e6f742066696c6c206f70656e696e67202d206e6f206170706c69636174696f6e732070726f76696465642ea043616e6e6f7444656372656173655374616b6544656c7461477265617465725468616e5374616b65001a04fc43616e6e6f74206465637265617365207374616b65202d207374616b652064656c74612067726561746572207468616e20696e697469616c207374616b652e644170706c69636174696f6e734e6f74466f724f70656e696e67001b04f0547279696e6720746f2066696c6c206f70656e696e67207769746820616e206170706c69636174696f6e20666f72206f74686572206f70656e696e6764576f726b657253746f7261676556616c7565546f6f4c6f6e67001c0480576f726b65722073746f72616765207465787420697320746f6f206c6f6e672e70496e73756666696369656e74546f6b656e73466f7246756e64696e67001d04f8496e73756666696369656e7420746f6b656e7320666f722066756e64696e6720286f6e206d656d62657220636f6e74726f6c6c6572206163636f756e7429445a65726f546f6b656e7346756e64696e67001e047c547279696e6720746f2066756e642077697468207a65726f20746f6b656e7378496e73756666696369656e7442616c616e6365466f725472616e73666572001f04b443616e6e6f742077697468647261773a20696e73756666696369656e74206275646765742062616c616e63652e048c44697363757373696f6e206d6f64756c6520707265646566696e6564206572726f7273c9090c5070616c6c65745f776f726b696e675f67726f7570186572726f7273144572726f720804540004490001803c41726974686d657469634572726f72000004c8556e65787065637465642061726974686d65746963206572726f7220286f766572666c6f77202f20756e646572666c6f7729605374616b6542616c616e636543616e6e6f7442655a65726f0001049850726f7669646564207374616b652062616c616e63652063616e6e6f74206265207a65726f2e4c4f70656e696e67446f65734e6f7445786973740002045c4f70656e696e6720646f6573206e6f742065786973742e6443616e6e6f74486972654d756c7469706c654c656164657273000304bc43616e6e6f742066696c6c206f70656e696e672077697468206d756c7469706c65206170706c69636174696f6e732e74576f726b65724170706c69636174696f6e446f65734e6f74457869737400040488576f726b6572206170706c69636174696f6e20646f6573206e6f742065786973742e744d6178416374697665576f726b65724e756d626572457863656564656400050488576f726b696e672067726f75702073697a65206c696d69742065786365656465642e9c5375636365737366756c576f726b65724170706c69636174696f6e446f65734e6f744578697374000604b45375636365737366756c20776f726b6572206170706c69636174696f6e20646f6573206e6f742065786973742e8043616e6e6f74486972654c65616465725768656e4c6561646572457869737473000704c45468657265206973206c656164657220616c72656164792c2063616e6e6f74206869726520616e6f74686572206f6e652e4049734e6f744c6561644163636f756e740008044c4e6f742061206c656164206163636f756e742e4443757272656e744c6561644e6f745365740009046043757272656e74206c656164206973206e6f74207365742e48576f726b6572446f65734e6f744578697374000a0458576f726b657220646f6573206e6f742065786973742e4c496e76616c69644d656d6265724f726967696e000b0470496e76616c6964206f726967696e20666f722061206d656d6265722e705369676e657249734e6f74576f726b6572526f6c654163636f756e74000c04885369676e6572206973206e6f7420776f726b657220726f6c65206163636f756e742e4842656c6f774d696e696d756d5374616b6573000d04885374616b696e67206c657373207468616e20746865206c6f77657220626f756e642e7c496e73756666696369656e7442616c616e6365546f436f7665725374616b65000e0490496e73756666696369656e742062616c616e636520746f20636f766572207374616b652e884170706c69636174696f6e5374616b65446f65736e744d617463684f70656e696e67000f04d84170706c69636174696f6e207374616b65206973206c657373207468616e207265717569726564206f70656e696e67207374616b652e504f726967696e49734e6f744170706c6963616e74001004604f726967696e206973206e6f74206170706c6963616e742e3c576f726b657249734c656176696e6700110498496e76616c6964206f7065726174696f6e202d20776f726b6572206973206c656176696e672e5043616e6e6f74526577617264576974685a65726f0012046452657761726420636f756c64206e6f74206265207a65726f2e78496e76616c69645374616b696e674163636f756e74466f724d656d626572001304ac5374616b696e67206163636f756e7420646f65736e27742062656c6f6e6720746f2061206d656d6265722e5c436f6e666c6963745374616b65734f6e4163636f756e74001404b05374616b696e67206163636f756e7420636f6e7461696e7320636f6e666c696374696e67207374616b65732e44576f726b65724861734e6f5265776172640015047c576f726b657220686173206e6f20726563757272696e67207265776172642e78556e7374616b696e67506572696f644c6573735468616e4d696e696d756d001604090153706563696669656420756e7374616b696e6720706572696f64206973206c657373207468656e206d696e696d756d2073657420666f72207468652067726f75702e3c43616e6e6f745370656e645a65726f00170460496e76616c6964207370656e64696e6720616d6f756e742e74496e73756666696369656e74427564676574466f725370656e64696e67001804a449742773206e6f7420656e6f7567682062756467657420666f722074686973207370656e64696e672e584e6f4170706c69636174696f6e7350726f7669646564001904bc43616e6e6f742066696c6c206f70656e696e67202d206e6f206170706c69636174696f6e732070726f76696465642ea043616e6e6f7444656372656173655374616b6544656c7461477265617465725468616e5374616b65001a04fc43616e6e6f74206465637265617365207374616b65202d207374616b652064656c74612067726561746572207468616e20696e697469616c207374616b652e644170706c69636174696f6e734e6f74466f724f70656e696e67001b04f0547279696e6720746f2066696c6c206f70656e696e67207769746820616e206170706c69636174696f6e20666f72206f74686572206f70656e696e6764576f726b657253746f7261676556616c7565546f6f4c6f6e67001c0480576f726b65722073746f72616765207465787420697320746f6f206c6f6e672e70496e73756666696369656e74546f6b656e73466f7246756e64696e67001d04f8496e73756666696369656e7420746f6b656e7320666f722066756e64696e6720286f6e206d656d62657220636f6e74726f6c6c6572206163636f756e7429445a65726f546f6b656e7346756e64696e67001e047c547279696e6720746f2066756e642077697468207a65726f20746f6b656e7378496e73756666696369656e7442616c616e6365466f725472616e73666572001f04b443616e6e6f742077697468647261773a20696e73756666696369656e74206275646765742062616c616e63652e048c44697363757373696f6e206d6f64756c6520707265646566696e6564206572726f7273cd09102873705f72756e74696d651c67656e657269634c756e636865636b65645f65787472696e73696348556e636865636b656445787472696e736963101c4164647265737301001043616c6c013d04245369676e617475726501d10914457874726101dd0900040030000000d109082873705f72756e74696d65384d756c74695369676e617475726500010c1c456432353531390400a1050148656432353531393a3a5369676e61747572650000001c537232353531390400d5050148737232353531393a3a5369676e61747572650001001445636473610400d509014065636473613a3a5369676e617475726500020000d5090c1c73705f636f7265146563647361245369676e617475726500000400d90901205b75383b2036355d0000d909000003410000000800dd0900000420e109e509e909ed09f109f909fd09010a00e10910306672616d655f73797374656d28657874656e73696f6e7354636865636b5f6e6f6e5f7a65726f5f73656e64657248436865636b4e6f6e5a65726f53656e64657204045400000000e50910306672616d655f73797374656d28657874656e73696f6e7348636865636b5f737065635f76657273696f6e40436865636b5370656356657273696f6e04045400000000e90910306672616d655f73797374656d28657874656e73696f6e7340636865636b5f74785f76657273696f6e38436865636b547856657273696f6e04045400000000ed0910306672616d655f73797374656d28657874656e73696f6e7334636865636b5f67656e6573697330436865636b47656e6573697304045400000000f10910306672616d655f73797374656d28657874656e73696f6e733c636865636b5f6d6f7274616c69747938436865636b4d6f7274616c69747904045400000400f509010c4572610000f509102873705f72756e74696d651c67656e657269630c6572610c4572610001010420496d6d6f7274616c0000001c4d6f7274616c31040008000001001c4d6f7274616c32040008000002001c4d6f7274616c33040008000003001c4d6f7274616c34040008000004001c4d6f7274616c35040008000005001c4d6f7274616c36040008000006001c4d6f7274616c37040008000007001c4d6f7274616c38040008000008001c4d6f7274616c3904000800000900204d6f7274616c313004000800000a00204d6f7274616c313104000800000b00204d6f7274616c313204000800000c00204d6f7274616c313304000800000d00204d6f7274616c313404000800000e00204d6f7274616c313504000800000f00204d6f7274616c313604000800001000204d6f7274616c313704000800001100204d6f7274616c313804000800001200204d6f7274616c313904000800001300204d6f7274616c323004000800001400204d6f7274616c323104000800001500204d6f7274616c323204000800001600204d6f7274616c323304000800001700204d6f7274616c323404000800001800204d6f7274616c323504000800001900204d6f7274616c323604000800001a00204d6f7274616c323704000800001b00204d6f7274616c323804000800001c00204d6f7274616c323904000800001d00204d6f7274616c333004000800001e00204d6f7274616c333104000800001f00204d6f7274616c333204000800002000204d6f7274616c333304000800002100204d6f7274616c333404000800002200204d6f7274616c333504000800002300204d6f7274616c333604000800002400204d6f7274616c333704000800002500204d6f7274616c333804000800002600204d6f7274616c333904000800002700204d6f7274616c343004000800002800204d6f7274616c343104000800002900204d6f7274616c343204000800002a00204d6f7274616c343304000800002b00204d6f7274616c343404000800002c00204d6f7274616c343504000800002d00204d6f7274616c343604000800002e00204d6f7274616c343704000800002f00204d6f7274616c343804000800003000204d6f7274616c343904000800003100204d6f7274616c353004000800003200204d6f7274616c353104000800003300204d6f7274616c353204000800003400204d6f7274616c353304000800003500204d6f7274616c353404000800003600204d6f7274616c353504000800003700204d6f7274616c353604000800003800204d6f7274616c353704000800003900204d6f7274616c353804000800003a00204d6f7274616c353904000800003b00204d6f7274616c363004000800003c00204d6f7274616c363104000800003d00204d6f7274616c363204000800003e00204d6f7274616c363304000800003f00204d6f7274616c363404000800004000204d6f7274616c363504000800004100204d6f7274616c363604000800004200204d6f7274616c363704000800004300204d6f7274616c363804000800004400204d6f7274616c363904000800004500204d6f7274616c373004000800004600204d6f7274616c373104000800004700204d6f7274616c373204000800004800204d6f7274616c373304000800004900204d6f7274616c373404000800004a00204d6f7274616c373504000800004b00204d6f7274616c373604000800004c00204d6f7274616c373704000800004d00204d6f7274616c373804000800004e00204d6f7274616c373904000800004f00204d6f7274616c383004000800005000204d6f7274616c383104000800005100204d6f7274616c383204000800005200204d6f7274616c383304000800005300204d6f7274616c383404000800005400204d6f7274616c383504000800005500204d6f7274616c383604000800005600204d6f7274616c383704000800005700204d6f7274616c383804000800005800204d6f7274616c383904000800005900204d6f7274616c393004000800005a00204d6f7274616c393104000800005b00204d6f7274616c393204000800005c00204d6f7274616c393304000800005d00204d6f7274616c393404000800005e00204d6f7274616c393504000800005f00204d6f7274616c393604000800006000204d6f7274616c393704000800006100204d6f7274616c393804000800006200204d6f7274616c393904000800006300244d6f7274616c31303004000800006400244d6f7274616c31303104000800006500244d6f7274616c31303204000800006600244d6f7274616c31303304000800006700244d6f7274616c31303404000800006800244d6f7274616c31303504000800006900244d6f7274616c31303604000800006a00244d6f7274616c31303704000800006b00244d6f7274616c31303804000800006c00244d6f7274616c31303904000800006d00244d6f7274616c31313004000800006e00244d6f7274616c31313104000800006f00244d6f7274616c31313204000800007000244d6f7274616c31313304000800007100244d6f7274616c31313404000800007200244d6f7274616c31313504000800007300244d6f7274616c31313604000800007400244d6f7274616c31313704000800007500244d6f7274616c31313804000800007600244d6f7274616c31313904000800007700244d6f7274616c31323004000800007800244d6f7274616c31323104000800007900244d6f7274616c31323204000800007a00244d6f7274616c31323304000800007b00244d6f7274616c31323404000800007c00244d6f7274616c31323504000800007d00244d6f7274616c31323604000800007e00244d6f7274616c31323704000800007f00244d6f7274616c31323804000800008000244d6f7274616c31323904000800008100244d6f7274616c31333004000800008200244d6f7274616c31333104000800008300244d6f7274616c31333204000800008400244d6f7274616c31333304000800008500244d6f7274616c31333404000800008600244d6f7274616c31333504000800008700244d6f7274616c31333604000800008800244d6f7274616c31333704000800008900244d6f7274616c31333804000800008a00244d6f7274616c31333904000800008b00244d6f7274616c31343004000800008c00244d6f7274616c31343104000800008d00244d6f7274616c31343204000800008e00244d6f7274616c31343304000800008f00244d6f7274616c31343404000800009000244d6f7274616c31343504000800009100244d6f7274616c31343604000800009200244d6f7274616c31343704000800009300244d6f7274616c31343804000800009400244d6f7274616c31343904000800009500244d6f7274616c31353004000800009600244d6f7274616c31353104000800009700244d6f7274616c31353204000800009800244d6f7274616c31353304000800009900244d6f7274616c31353404000800009a00244d6f7274616c31353504000800009b00244d6f7274616c31353604000800009c00244d6f7274616c31353704000800009d00244d6f7274616c31353804000800009e00244d6f7274616c31353904000800009f00244d6f7274616c3136300400080000a000244d6f7274616c3136310400080000a100244d6f7274616c3136320400080000a200244d6f7274616c3136330400080000a300244d6f7274616c3136340400080000a400244d6f7274616c3136350400080000a500244d6f7274616c3136360400080000a600244d6f7274616c3136370400080000a700244d6f7274616c3136380400080000a800244d6f7274616c3136390400080000a900244d6f7274616c3137300400080000aa00244d6f7274616c3137310400080000ab00244d6f7274616c3137320400080000ac00244d6f7274616c3137330400080000ad00244d6f7274616c3137340400080000ae00244d6f7274616c3137350400080000af00244d6f7274616c3137360400080000b000244d6f7274616c3137370400080000b100244d6f7274616c3137380400080000b200244d6f7274616c3137390400080000b300244d6f7274616c3138300400080000b400244d6f7274616c3138310400080000b500244d6f7274616c3138320400080000b600244d6f7274616c3138330400080000b700244d6f7274616c3138340400080000b800244d6f7274616c3138350400080000b900244d6f7274616c3138360400080000ba00244d6f7274616c3138370400080000bb00244d6f7274616c3138380400080000bc00244d6f7274616c3138390400080000bd00244d6f7274616c3139300400080000be00244d6f7274616c3139310400080000bf00244d6f7274616c3139320400080000c000244d6f7274616c3139330400080000c100244d6f7274616c3139340400080000c200244d6f7274616c3139350400080000c300244d6f7274616c3139360400080000c400244d6f7274616c3139370400080000c500244d6f7274616c3139380400080000c600244d6f7274616c3139390400080000c700244d6f7274616c3230300400080000c800244d6f7274616c3230310400080000c900244d6f7274616c3230320400080000ca00244d6f7274616c3230330400080000cb00244d6f7274616c3230340400080000cc00244d6f7274616c3230350400080000cd00244d6f7274616c3230360400080000ce00244d6f7274616c3230370400080000cf00244d6f7274616c3230380400080000d000244d6f7274616c3230390400080000d100244d6f7274616c3231300400080000d200244d6f7274616c3231310400080000d300244d6f7274616c3231320400080000d400244d6f7274616c3231330400080000d500244d6f7274616c3231340400080000d600244d6f7274616c3231350400080000d700244d6f7274616c3231360400080000d800244d6f7274616c3231370400080000d900244d6f7274616c3231380400080000da00244d6f7274616c3231390400080000db00244d6f7274616c3232300400080000dc00244d6f7274616c3232310400080000dd00244d6f7274616c3232320400080000de00244d6f7274616c3232330400080000df00244d6f7274616c3232340400080000e000244d6f7274616c3232350400080000e100244d6f7274616c3232360400080000e200244d6f7274616c3232370400080000e300244d6f7274616c3232380400080000e400244d6f7274616c3232390400080000e500244d6f7274616c3233300400080000e600244d6f7274616c3233310400080000e700244d6f7274616c3233320400080000e800244d6f7274616c3233330400080000e900244d6f7274616c3233340400080000ea00244d6f7274616c3233350400080000eb00244d6f7274616c3233360400080000ec00244d6f7274616c3233370400080000ed00244d6f7274616c3233380400080000ee00244d6f7274616c3233390400080000ef00244d6f7274616c3234300400080000f000244d6f7274616c3234310400080000f100244d6f7274616c3234320400080000f200244d6f7274616c3234330400080000f300244d6f7274616c3234340400080000f400244d6f7274616c3234350400080000f500244d6f7274616c3234360400080000f600244d6f7274616c3234370400080000f700244d6f7274616c3234380400080000f800244d6f7274616c3234390400080000f900244d6f7274616c3235300400080000fa00244d6f7274616c3235310400080000fb00244d6f7274616c3235320400080000fc00244d6f7274616c3235330400080000fd00244d6f7274616c3235340400080000fe00244d6f7274616c3235350400080000ff0000f90910306672616d655f73797374656d28657874656e73696f6e732c636865636b5f6e6f6e636528436865636b4e6f6e636504045400000400e9030120543a3a496e6465780000fd0910306672616d655f73797374656d28657874656e73696f6e7330636865636b5f7765696768742c436865636b57656967687404045400000000010a086870616c6c65745f7472616e73616374696f6e5f7061796d656e74604368617267655472616e73616374696f6e5061796d656e7404045400000400ec013042616c616e63654f663c543e0000050a08586a6f7973747265616d5f6e6f64655f72756e74696d651c52756e74696d6500000000a41853797374656d011853797374656d401c4163636f756e7401010402000c4101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004e8205468652066756c6c206163636f756e7420696e666f726d6174696f6e20666f72206120706172746963756c6172206163636f756e742049442e3845787472696e736963436f756e74000010040004b820546f74616c2065787472696e7369637320636f756e7420666f72207468652063757272656e7420626c6f636b2e2c426c6f636b57656967687401001c180000000000000488205468652063757272656e742077656967687420666f722074686520626c6f636b2e40416c6c45787472696e736963734c656e000010040004410120546f74616c206c656e6774682028696e2062797465732920666f7220616c6c2065787472696e736963732070757420746f6765746865722c20666f72207468652063757272656e7420626c6f636b2e24426c6f636b4861736801010405102c8000000000000000000000000000000000000000000000000000000000000000000498204d6170206f6620626c6f636b206e756d6265727320746f20626c6f636b206861736865732e3445787472696e736963446174610101040510300400043d012045787472696e73696373206461746120666f72207468652063757272656e7420626c6f636b20286d61707320616e2065787472696e736963277320696e64657820746f206974732064617461292e184e756d6265720100101000000000040901205468652063757272656e7420626c6f636b206e756d626572206265696e672070726f6365737365642e205365742062792060657865637574655f626c6f636b602e28506172656e744861736801002c80000000000000000000000000000000000000000000000000000000000000000004702048617368206f66207468652070726576696f757320626c6f636b2e18446967657374010034040004f020446967657374206f66207468652063757272656e7420626c6f636b2c20616c736f2070617274206f662074686520626c6f636b206865616465722e184576656e747301004404001ca0204576656e7473206465706f736974656420666f72207468652063757272656e7420626c6f636b2e001d01204e4f54453a20546865206974656d20697320756e626f756e6420616e642073686f756c64207468657265666f7265206e657665722062652072656164206f6e20636861696e2ed020497420636f756c64206f746865727769736520696e666c6174652074686520506f562073697a65206f66206120626c6f636b2e002d01204576656e747320686176652061206c6172676520696e2d6d656d6f72792073697a652e20426f7820746865206576656e747320746f206e6f7420676f206f75742d6f662d6d656d6f7279fc206a75737420696e206361736520736f6d656f6e65207374696c6c207265616473207468656d2066726f6d2077697468696e207468652072756e74696d652e284576656e74436f756e74010010100000000004b820546865206e756d626572206f66206576656e747320696e2074686520604576656e74733c543e60206c6973742e2c4576656e74546f70696373010104022cdd030400282501204d617070696e67206265747765656e206120746f7069632028726570726573656e74656420627920543a3a486173682920616e64206120766563746f72206f6620696e646578657394206f66206576656e747320696e2074686520603c4576656e74733c543e3e60206c6973742e00510120416c6c20746f70696320766563746f727320686176652064657465726d696e69737469632073746f72616765206c6f636174696f6e7320646570656e64696e67206f6e2074686520746f7069632e2054686973450120616c6c6f7773206c696768742d636c69656e747320746f206c6576657261676520746865206368616e67657320747269652073746f7261676520747261636b696e67206d656368616e69736d20616e64e420696e2063617365206f66206368616e67657320666574636820746865206c697374206f66206576656e7473206f6620696e7465726573742e004d01205468652076616c756520686173207468652074797065206028543a3a426c6f636b4e756d6265722c204576656e74496e646578296020626563617573652069662077652075736564206f6e6c79206a7573744d012074686520604576656e74496e64657860207468656e20696e20636173652069662074686520746f70696320686173207468652073616d6520636f6e74656e7473206f6e20746865206e65787420626c6f636b0101206e6f206e6f74696669636174696f6e2077696c6c20626520747269676765726564207468757320746865206576656e74206d69676874206265206c6f73742e484c61737452756e74696d65557067726164650000e50304000455012053746f726573207468652060737065635f76657273696f6e6020616e642060737065635f6e616d6560206f66207768656e20746865206c6173742072756e74696d6520757067726164652068617070656e65642e545570677261646564546f553332526566436f756e740100980400044d012054727565206966207765206861766520757067726164656420736f207468617420607479706520526566436f756e74602069732060753332602e2046616c7365202864656661756c7429206966206e6f742e605570677261646564546f547269706c65526566436f756e740100980400085d012054727565206966207765206861766520757067726164656420736f2074686174204163636f756e74496e666f20636f6e7461696e73207468726565207479706573206f662060526566436f756e74602e2046616c736548202864656661756c7429206966206e6f742e38457865637574696f6e50686173650000d503040004882054686520657865637574696f6e207068617365206f662074686520626c6f636b2e01f10301501830426c6f636b57656967687473fd03f901c25f4e69000b00204aa9d10113ffffffffffffffff42375a1a00010b303a73a72e011366666666666666a6010b0098f73e5d0113ffffffffffffffbf01000042375a1a00010b30c2c511a3011366666666666666e6010b00204aa9d10113ffffffffffffffff01070088526a7413000000000000004042375a1a0000000004d020426c6f636b20262065787472696e7369637320776569676874733a20626173652076616c75657320616e64206c696d6974732e2c426c6f636b4c656e6774680d043000003c00000050000000500004a820546865206d6178696d756d206c656e677468206f66206120626c6f636b2028696e206279746573292e38426c6f636b48617368436f756e74101060090000045501204d6178696d756d206e756d626572206f6620626c6f636b206e756d62657220746f20626c6f636b2068617368206d617070696e677320746f206b65657020286f6c64657374207072756e6564206669727374292e20446257656967687415044040ce4b00000000000841d603000000000409012054686520776569676874206f662072756e74696d65206461746162617365206f7065726174696f6e73207468652072756e74696d652063616e20696e766f6b652e1c56657273696f6e19040103386a6f7973747265616d2d6e6f6465386a6f7973747265616d2d6e6f64650c000000d20700000000000030df6acb689907609b0400000037e397fc7c91f5e40100000040fe3ad401f8959a0600000018ef58a3b67ba77001000000d2bc9897eed08f1503000000f78b278be53f454c02000000ed99c5acb25eedf503000000cbca25e39f14238702000000687ad44ad37f03c201000000bc9d89904f5b923f0100000037c8bb1350a9a2a803000000ab3c0572291feb8b0100000002000000010484204765742074686520636861696e27732063757272656e742076657273696f6e2e28535335385072656669782d04087e0014a8205468652064657369676e61746564205353353820707265666978206f66207468697320636861696e2e0039012054686973207265706c6163657320746865202273733538466f726d6174222070726f7065727479206465636c6172656420696e2074686520636861696e20737065632e20526561736f6e20697331012074686174207468652072756e74696d652073686f756c64206b6e6f772061626f7574207468652070726566697820696e206f7264657220746f206d616b6520757365206f662069742061737020616e206964656e746966696572206f662074686520636861696e2e013104001c5574696c697479000135040174044c626174636865645f63616c6c735f6c696d69741010aa2a000004a820546865206c696d6974206f6e20746865206e756d626572206f6620626174636865642063616c6c732e01a106011042616265011042616265442845706f6368496e64657801002820000000000000000004542043757272656e742065706f636820696e6465782e2c417574686f7269746965730100a5060400046c2043757272656e742065706f636820617574686f7269746965732e2c47656e65736973536c6f740100550420000000000000000008f82054686520736c6f74206174207768696368207468652066697273742065706f63682061637475616c6c7920737461727465642e205468697320697320309020756e74696c2074686520666972737420626c6f636b206f662074686520636861696e2e2c43757272656e74536c6f740100550420000000000000000004542043757272656e7420736c6f74206e756d6265722e2852616e646f6d6e65737301000480000000000000000000000000000000000000000000000000000000000000000028b8205468652065706f63682072616e646f6d6e65737320666f7220746865202a63757272656e742a2065706f63682e002c20232053656375726974790005012054686973204d555354204e4f54206265207573656420666f722067616d626c696e672c2061732069742063616e20626520696e666c75656e6365642062792061f8206d616c6963696f75732076616c696461746f7220696e207468652073686f7274207465726d2e204974204d4159206265207573656420696e206d616e7915012063727970746f677261706869632070726f746f636f6c732c20686f77657665722c20736f206c6f6e67206173206f6e652072656d656d6265727320746861742074686973150120286c696b652065766572797468696e6720656c7365206f6e2d636861696e29206974206973207075626c69632e20466f72206578616d706c652c2069742063616e206265050120757365642077686572652061206e756d626572206973206e656564656420746861742063616e6e6f742068617665206265656e2063686f73656e20627920616e0d01206164766572736172792c20666f7220707572706f7365732073756368206173207075626c69632d636f696e207a65726f2d6b6e6f776c656467652070726f6f66732e6050656e64696e6745706f6368436f6e6669674368616e676500005d0404000461012050656e64696e672065706f636820636f6e66696775726174696f6e206368616e676520746861742077696c6c206265206170706c696564207768656e20746865206e6578742065706f636820697320656e61637465642e384e65787452616e646f6d6e657373010004800000000000000000000000000000000000000000000000000000000000000000045c204e6578742065706f63682072616e646f6d6e6573732e3c4e657874417574686f7269746965730100a50604000460204e6578742065706f636820617574686f7269746965732e305365676d656e74496e6465780100101000000000247c2052616e646f6d6e65737320756e64657220636f6e737472756374696f6e2e00f8205765206d616b6520612074726164652d6f6666206265747765656e2073746f7261676520616363657373657320616e64206c697374206c656e6774682e01012057652073746f72652074686520756e6465722d636f6e737472756374696f6e2072616e646f6d6e65737320696e207365676d656e7473206f6620757020746f942060554e4445525f434f4e535452554354494f4e5f5345474d454e545f4c454e475448602e00ec204f6e63652061207365676d656e7420726561636865732074686973206c656e6774682c20776520626567696e20746865206e657874206f6e652e090120576520726573657420616c6c207365676d656e747320616e642072657475726e20746f206030602061742074686520626567696e6e696e67206f662065766572791c2065706f63682e44556e646572436f6e737472756374696f6e0101040510b10604000415012054574f582d4e4f54453a20605365676d656e74496e6465786020697320616e20696e6372656173696e6720696e74656765722c20736f2074686973206973206f6b61792e2c496e697469616c697a65640000b90604000801012054656d706f726172792076616c75652028636c656172656420617420626c6f636b2066696e616c697a6174696f6e292077686963682069732060536f6d65601d01206966207065722d626c6f636b20696e697469616c697a6174696f6e2068617320616c7265616479206265656e2063616c6c656420666f722063757272656e7420626c6f636b2e4c417574686f7256726652616e646f6d6e6573730100cd0604001015012054686973206669656c642073686f756c6420616c7761797320626520706f70756c6174656420647572696e6720626c6f636b2070726f63657373696e6720756e6c6573731901207365636f6e6461727920706c61696e20736c6f74732061726520656e61626c65642028776869636820646f6e277420636f6e7461696e206120565246206f7574707574292e0049012049742069732073657420696e20606f6e5f66696e616c697a65602c206265666f72652069742077696c6c20636f6e7461696e207468652076616c75652066726f6d20746865206c61737420626c6f636b2e2845706f636853746172740100e103200000000000000000145d012054686520626c6f636b206e756d62657273207768656e20746865206c61737420616e642063757272656e742065706f6368206861766520737461727465642c20726573706563746976656c7920604e2d316020616e641420604e602e4901204e4f54453a20576520747261636b207468697320697320696e206f7264657220746f20616e6e6f746174652074686520626c6f636b206e756d626572207768656e206120676976656e20706f6f6c206f66590120656e74726f7079207761732066697865642028692e652e20697420776173206b6e6f776e20746f20636861696e206f6273657276657273292e2053696e63652065706f6368732061726520646566696e656420696e590120736c6f74732c207768696368206d617920626520736b69707065642c2074686520626c6f636b206e756d62657273206d6179206e6f74206c696e6520757020776974682074686520736c6f74206e756d626572732e204c6174656e657373010010100000000014d820486f77206c617465207468652063757272656e7420626c6f636b20697320636f6d706172656420746f2069747320706172656e742e001501205468697320656e74727920697320706f70756c617465642061732070617274206f6620626c6f636b20657865637574696f6e20616e6420697320636c65616e65642075701101206f6e20626c6f636b2066696e616c697a6174696f6e2e205175657279696e6720746869732073746f7261676520656e747279206f757473696465206f6620626c6f636bb020657865637574696f6e20636f6e746578742073686f756c6420616c77617973207969656c64207a65726f2e2c45706f6368436f6e6669670000d10604000861012054686520636f6e66696775726174696f6e20666f72207468652063757272656e742065706f63682e2053686f756c64206e6576657220626520604e6f6e656020617320697420697320696e697469616c697a656420696e242067656e657369732e3c4e65787445706f6368436f6e6669670000d1060400082d012054686520636f6e66696775726174696f6e20666f7220746865206e6578742065706f63682c20604e6f6e65602069662074686520636f6e6669672077696c6c206e6f74206368616e6765e82028796f752063616e2066616c6c6261636b20746f206045706f6368436f6e6669676020696e737465616420696e20746861742063617365292e34536b697070656445706f6368730100d50604002029012041206c697374206f6620746865206c6173742031303020736b69707065642065706f63687320616e642074686520636f72726573706f6e64696e672073657373696f6e20696e64657870207768656e207468652065706f63682077617320736b69707065642e0031012054686973206973206f6e6c79207573656420666f722076616c69646174696e672065717569766f636174696f6e2070726f6f66732e20416e2065717569766f636174696f6e2070726f6f663501206d75737420636f6e7461696e732061206b65792d6f776e6572736869702070726f6f6620666f72206120676976656e2073657373696f6e2c207468657265666f7265207765206e656564206139012077617920746f2074696520746f6765746865722073657373696f6e7320616e642065706f636820696e64696365732c20692e652e207765206e65656420746f2076616c69646174652074686174290120612076616c696461746f722077617320746865206f776e6572206f66206120676976656e206b6579206f6e206120676976656e2073657373696f6e2c20616e64207768617420746865b0206163746976652065706f636820696e6465782077617320647572696e6720746861742073657373696f6e2e014104000c3445706f63684475726174696f6e282058020000000000000cec2054686520616d6f756e74206f662074696d652c20696e20736c6f74732c207468617420656163682065706f63682073686f756c64206c6173742e1901204e4f54453a2043757272656e746c79206974206973206e6f7420706f737369626c6520746f206368616e6765207468652065706f6368206475726174696f6e20616674657221012074686520636861696e2068617320737461727465642e20417474656d7074696e6720746f20646f20736f2077696c6c20627269636b20626c6f636b2070726f64756374696f6e2e444578706563746564426c6f636b54696d652820701700000000000014050120546865206578706563746564206176657261676520626c6f636b2074696d6520617420776869636820424142452073686f756c64206265206372656174696e67110120626c6f636b732e2053696e636520424142452069732070726f626162696c6973746963206974206973206e6f74207472697669616c20746f20666967757265206f75740501207768617420746865206578706563746564206176657261676520626c6f636b2074696d652073686f756c64206265206261736564206f6e2074686520736c6f740901206475726174696f6e20616e642074686520736563757269747920706172616d657465722060636020287768657265206031202d20636020726570726573656e7473a0207468652070726f626162696c697479206f66206120736c6f74206265696e6720656d707479292e384d6178417574686f7269746965731010a08601000488204d6178206e756d626572206f6620617574686f72697469657320616c6c6f77656401d906022454696d657374616d70012454696d657374616d70080c4e6f7701002820000000000000000004902043757272656e742074696d6520666f72207468652063757272656e7420626c6f636b2e24446964557064617465010098040004b420446964207468652074696d657374616d7020676574207570646174656420696e207468697320626c6f636b3f0165040004344d696e696d756d506572696f642820b80b000000000000104d0120546865206d696e696d756d20706572696f64206265747765656e20626c6f636b732e204265776172652074686174207468697320697320646966666572656e7420746f20746865202a65787065637465642a5d0120706572696f6420746861742074686520626c6f636b2070726f64756374696f6e206170706172617475732070726f76696465732e20596f75722063686f73656e20636f6e73656e7375732073797374656d2077696c6c5d012067656e6572616c6c7920776f726b2077697468207468697320746f2064657465726d696e6520612073656e7369626c6520626c6f636b2074696d652e20652e672e20466f7220417572612c2069742077696c6c206265a020646f75626c65207468697320706572696f64206f6e2064656661756c742073657474696e67732e000328417574686f72736869700128417574686f72736869700418417574686f720000000400046420417574686f72206f662063757272656e7420626c6f636b2e00000000042042616c616e636573012042616c616e6365731434546f74616c49737375616e6365010018400000000000000000000000000000000004982054686520746f74616c20756e6974732069737375656420696e207468652073797374656d2e40496e61637469766549737375616e636501001840000000000000000000000000000000000409012054686520746f74616c20756e697473206f66206f75747374616e64696e672064656163746976617465642062616c616e636520696e207468652073797374656d2e1c4163636f756e74010104020014010100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000600901205468652042616c616e6365732070616c6c6574206578616d706c65206f662073746f72696e67207468652062616c616e6365206f6620616e206163636f756e742e00282023204578616d706c650034206060606e6f636f6d70696c65b02020696d706c2070616c6c65745f62616c616e6365733a3a436f6e66696720666f722052756e74696d65207b19022020202074797065204163636f756e7453746f7265203d2053746f726167654d61705368696d3c53656c663a3a4163636f756e743c52756e74696d653e2c206672616d655f73797374656d3a3a50726f76696465723c52756e74696d653e2c204163636f756e7449642c2053656c663a3a4163636f756e74446174613c42616c616e63653e3e0c20207d102060606000150120596f752063616e20616c736f2073746f7265207468652062616c616e6365206f6620616e206163636f756e7420696e20746865206053797374656d602070616c6c65742e00282023204578616d706c650034206060606e6f636f6d70696c65b02020696d706c2070616c6c65745f62616c616e6365733a3a436f6e66696720666f722052756e74696d65207b7420202074797065204163636f756e7453746f7265203d2053797374656d0c20207d102060606000510120427574207468697320636f6d657320776974682074726164656f6666732c2073746f72696e67206163636f756e742062616c616e63657320696e207468652073797374656d2070616c6c65742073746f7265736d0120606672616d655f73797374656d60206461746120616c6f6e677369646520746865206163636f756e74206461746120636f6e747261727920746f2073746f72696e67206163636f756e742062616c616e63657320696e207468652901206042616c616e636573602070616c6c65742c20776869636820757365732061206053746f726167654d61706020746f2073746f72652062616c616e6365732064617461206f6e6c792e4101204e4f54453a2054686973206973206f6e6c79207573656420696e207468652063617365207468617420746869732070616c6c6574206973207573656420746f2073746f72652062616c616e6365732e144c6f636b730101040200dd06040008b820416e79206c6971756964697479206c6f636b73206f6e20736f6d65206163636f756e742062616c616e6365732e2501204e4f54453a2053686f756c64206f6e6c79206265206163636573736564207768656e2073657474696e672c206368616e67696e6720616e642066726565696e672061206c6f636b2e2052657365727665730101040200ed06040004a4204e616d6564207265736572766573206f6e20736f6d65206163636f756e742062616c616e6365732e01690401800c484578697374656e7469616c4465706f73697418404002e50f00000000000000000000000004d420546865206d696e696d756d20616d6f756e7420726571756972656420746f206b65657020616e206163636f756e74206f70656e2e204d61784c6f636b7310103200000008f420546865206d6178696d756d206e756d626572206f66206c6f636b7320746861742073686f756c64206578697374206f6e20616e206163636f756e742edc204e6f74207374726963746c7920656e666f726365642c20627574207573656420666f722077656967687420657374696d6174696f6e2e2c4d61785265736572766573101032000000040d0120546865206d6178696d756d206e756d626572206f66206e616d656420726573657276657320746861742063616e206578697374206f6e20616e206163636f756e742e01f90605485472616e73616374696f6e5061796d656e7401485472616e73616374696f6e5061796d656e7408444e6578744665654d756c7469706c6965720100fd0640000064a7b3b6e00d0000000000000000003853746f7261676556657273696f6e0100010704000000018804604f7065726174696f6e616c4665654d756c7469706c696572080405545901204120666565206d756c6974706c69657220666f7220604f7065726174696f6e616c602065787472696e7369637320746f20636f6d7075746520227669727475616c207469702220746f20626f6f73742074686569722c20607072696f7269747960004d0120546869732076616c7565206973206d756c7469706c656420627920746865206066696e616c5f6665656020746f206f627461696e206120227669727475616c20746970222074686174206973206c61746572f420616464656420746f20612074697020636f6d706f6e656e7420696e20726567756c617220607072696f72697479602063616c63756c6174696f6e732e4d01204974206d65616e732074686174206120604e6f726d616c60207472616e73616374696f6e2063616e2066726f6e742d72756e20612073696d696c61726c792d73697a656420604f7065726174696f6e616c6041012065787472696e736963202877697468206e6f20746970292c20627920696e636c7564696e672061207469702076616c75652067726561746572207468616e20746865207669727475616c207469702e003c20606060727573742c69676e6f726540202f2f20466f7220604e6f726d616c608c206c6574207072696f72697479203d207072696f726974795f63616c6328746970293b0054202f2f20466f7220604f7065726174696f6e616c601101206c6574207669727475616c5f746970203d2028696e636c7573696f6e5f666565202b2074697029202a204f7065726174696f6e616c4665654d756c7469706c6965723bc4206c6574207072696f72697479203d207072696f726974795f63616c6328746970202b207669727475616c5f746970293b1020606060005101204e6f746520746861742073696e636520776520757365206066696e616c5f6665656020746865206d756c7469706c696572206170706c69657320616c736f20746f2074686520726567756c61722060746970605d012073656e74207769746820746865207472616e73616374696f6e2e20536f2c206e6f74206f6e6c7920646f657320746865207472616e73616374696f6e206765742061207072696f726974792062756d702062617365646101206f6e207468652060696e636c7573696f6e5f666565602c2062757420776520616c736f20616d706c6966792074686520696d70616374206f662074697073206170706c69656420746f20604f7065726174696f6e616c6038207472616e73616374696f6e732e000668456c656374696f6e50726f76696465724d756c746950686173650168456c656374696f6e50726f76696465724d756c746950686173652814526f756e64010010100100000018ac20496e7465726e616c20636f756e74657220666f7220746865206e756d626572206f6620726f756e64732e00550120546869732069732075736566756c20666f722064652d6475706c69636174696f6e206f66207472616e73616374696f6e73207375626d697474656420746f2074686520706f6f6c2c20616e642067656e6572616c6c20646961676e6f7374696373206f66207468652070616c6c65742e004d012054686973206973206d6572656c7920696e6372656d656e746564206f6e6365207065722065766572792074696d65207468617420616e20757073747265616d2060656c656374602069732063616c6c65642e3043757272656e7450686173650100a00400043c2043757272656e742070686173652e38517565756564536f6c7574696f6e000005070400043d012043757272656e74206265737420736f6c7574696f6e2c207369676e6564206f7220756e7369676e65642c2071756575656420746f2062652072657475726e65642075706f6e2060656c656374602e20536e617073686f7400000d0704000c7020536e617073686f742064617461206f662074686520726f756e642e005d01205468697320697320637265617465642061742074686520626567696e6e696e67206f6620746865207369676e656420706861736520616e6420636c65617265642075706f6e2063616c6c696e672060656c656374602e38446573697265645461726765747300001004000ccc2044657369726564206e756d626572206f66207461726765747320746f20656c65637420666f72207468697320726f756e642e00a8204f6e6c7920657869737473207768656e205b60536e617073686f74605d2069732070726573656e742e40536e617073686f744d657461646174610000410504000c9820546865206d65746164617461206f6620746865205b60526f756e64536e617073686f74605d00a8204f6e6c7920657869737473207768656e205b60536e617073686f74605d2069732070726573656e742e645369676e65645375626d697373696f6e4e657874496e646578010010100000000024010120546865206e65787420696e64657820746f2062652061737369676e656420746f20616e20696e636f6d696e67207369676e6564207375626d697373696f6e2e007501204576657279206163636570746564207375626d697373696f6e2069732061737369676e6564206120756e6971756520696e6465783b207468617420696e64657820697320626f756e6420746f207468617420706172746963756c61726501207375626d697373696f6e20666f7220746865206475726174696f6e206f662074686520656c656374696f6e2e204f6e20656c656374696f6e2066696e616c697a6174696f6e2c20746865206e65787420696e6465782069733020726573657420746f20302e0069012057652063616e2774206a7573742075736520605369676e65645375626d697373696f6e496e64696365732e6c656e2829602c206265636175736520746861742773206120626f756e646564207365743b20706173742069747359012063617061636974792c2069742077696c6c2073696d706c792073617475726174652e2057652063616e2774206a7573742069746572617465206f76657220605369676e65645375626d697373696f6e734d6170602cf4206265636175736520697465726174696f6e20697320736c6f772e20496e73746561642c2077652073746f7265207468652076616c756520686572652e5c5369676e65645375626d697373696f6e496e646963657301001d070400186d01204120736f727465642c20626f756e64656420766563746f72206f6620602873636f72652c20626c6f636b5f6e756d6265722c20696e64657829602c20776865726520656163682060696e6465786020706f696e747320746f2061782076616c756520696e20605369676e65645375626d697373696f6e73602e007101205765206e65766572206e65656420746f2070726f63657373206d6f7265207468616e20612073696e676c65207369676e6564207375626d697373696f6e20617420612074696d652e205369676e6564207375626d697373696f6e7375012063616e206265207175697465206c617267652c20736f2077652772652077696c6c696e6720746f207061792074686520636f7374206f66206d756c7469706c6520646174616261736520616363657373657320746f206163636573732101207468656d206f6e6520617420612074696d6520696e7374656164206f662072656164696e6720616e64206465636f64696e6720616c6c206f66207468656d206174206f6e63652e505369676e65645375626d697373696f6e734d61700001040510290704001c7420556e636865636b65642c207369676e656420736f6c7574696f6e732e00690120546f676574686572207769746820605375626d697373696f6e496e6469636573602c20746869732073746f726573206120626f756e64656420736574206f6620605369676e65645375626d697373696f6e7360207768696c65ec20616c6c6f77696e6720757320746f206b656570206f6e6c7920612073696e676c65206f6e6520696e206d656d6f727920617420612074696d652e0069012054776f78206e6f74653a20746865206b6579206f6620746865206d617020697320616e206175746f2d696e6372656d656e74696e6720696e6465782077686963682075736572732063616e6e6f7420696e7370656374206f72f4206166666563743b2077652073686f756c646e2774206e65656420612063727970746f67726170686963616c6c7920736563757265206861736865722e544d696e696d756d556e7472757374656453636f726500009c0400105d0120546865206d696e696d756d2073636f7265207468617420656163682027756e747275737465642720736f6c7574696f6e206d7573742061747461696e20696e206f7264657220746f20626520636f6e7369646572656428206665617369626c652e00b82043616e206265207365742076696120607365745f6d696e696d756d5f756e747275737465645f73636f7265602e016d04018c5034556e7369676e656450686173651010960000000480204475726174696f6e206f662074686520756e7369676e65642070686173652e2c5369676e656450686173651010960000000478204475726174696f6e206f6620746865207369676e65642070686173652e544265747465725369676e65645468726573686f6c64ac1000000000084d0120546865206d696e696d756d20616d6f756e74206f6620696d70726f76656d656e7420746f2074686520736f6c7574696f6e2073636f7265207468617420646566696e6573206120736f6c7574696f6e2061737820226265747465722220696e20746865205369676e65642070686173652e5c426574746572556e7369676e65645468726573686f6c64ac1020a10700084d0120546865206d696e696d756d20616d6f756e74206f6620696d70726f76656d656e7420746f2074686520736f6c7574696f6e2073636f7265207468617420646566696e6573206120736f6c7574696f6e2061738020226265747465722220696e2074686520556e7369676e65642070686173652e384f6666636861696e52657065617410101200000010b42054686520726570656174207468726573686f6c64206f6620746865206f6666636861696e20776f726b65722e00610120466f72206578616d706c652c20696620697420697320352c2074686174206d65616e732074686174206174206c65617374203520626c6f636b732077696c6c20656c61707365206265747765656e20617474656d7074738420746f207375626d69742074686520776f726b6572277320736f6c7574696f6e2e3c4d696e657254785072696f726974792820feffffffffffff7f04250120546865207072696f72697479206f662074686520756e7369676e6564207472616e73616374696f6e207375626d697474656420696e2074686520756e7369676e65642d7068617365505369676e65644d61785375626d697373696f6e731010100000001ce4204d6178696d756d206e756d626572206f66207369676e6564207375626d697373696f6e7320746861742063616e206265207175657565642e005501204974206973206265737420746f2061766f69642061646a757374696e67207468697320647572696e6720616e20656c656374696f6e2c20617320697420696d706163747320646f776e73747265616d2064617461650120737472756374757265732e20496e20706172746963756c61722c20605369676e65645375626d697373696f6e496e64696365733c543e6020697320626f756e646564206f6e20746869732076616c75652e20496620796f75f42075706461746520746869732076616c756520647572696e6720616e20656c656374696f6e2c20796f75205f6d7573745f20656e7375726520746861744d0120605369676e65645375626d697373696f6e496e64696365732e6c656e282960206973206c657373207468616e206f7220657175616c20746f20746865206e65772076616c75652e204f74686572776973652cf020617474656d70747320746f207375626d6974206e657720736f6c7574696f6e73206d617920636175736520612072756e74696d652070616e69632e3c5369676e65644d617857656967687420400b40a21f8d2e011366666666666666a61494204d6178696d756d20776569676874206f662061207369676e656420736f6c7574696f6e2e005d01204966205b60436f6e6669673a3a4d696e6572436f6e666967605d206973206265696e6720696d706c656d656e74656420746f207375626d6974207369676e656420736f6c7574696f6e7320286f757473696465206f663d0120746869732070616c6c6574292c207468656e205b604d696e6572436f6e6669673a3a736f6c7574696f6e5f776569676874605d206973207573656420746f20636f6d7061726520616761696e73743020746869732076616c75652e405369676e65644d6178526566756e647310100400000004190120546865206d6178696d756d20616d6f756e74206f6620756e636865636b656420736f6c7574696f6e7320746f20726566756e64207468652063616c6c2066656520666f722e405369676e6564526577617264426173651840aa821bce260000000000000000000000048820426173652072657761726420666f722061207369676e656420736f6c7574696f6e445369676e65644465706f736974426173651840a41a130d84010000000000000000000004902042617365206465706f73697420666f722061207369676e656420736f6c7574696f6e2e445369676e65644465706f7369744279746518406a6e190000000000000000000000000004a0205065722d62797465206465706f73697420666f722061207369676e656420736f6c7574696f6e2e4c5369676e65644465706f73697457656967687418400000000000000000000000000000000004a8205065722d776569676874206465706f73697420666f722061207369676e656420736f6c7574696f6e2e444d6178456c656374696e67566f746572731010d43000000c5d0120546865206d6178696d756d206e756d626572206f6620656c656374696e6720766f7465727320746f2070757420696e2074686520736e617073686f742e20417420746865206d6f6d656e742c20736e617073686f7473590120617265206f6e6c79206f76657220612073696e676c6520626c6f636b2c20627574206f6e6365206d756c74692d626c6f636b20656c656374696f6e732061726520696e74726f647563656420746865792077696c6c842074616b6520706c616365206f766572206d756c7469706c6520626c6f636b732e4c4d6178456c65637461626c65546172676574732d0408ffff04010120546865206d6178696d756d206e756d626572206f6620656c65637461626c65207461726765747320746f2070757420696e2074686520736e617073686f742e284d617857696e6e65727310109001000010350120546865206d6178696d756d206e756d626572206f662077696e6e65727320746861742063616e20626520656c656374656420627920746869732060456c656374696f6e50726f7669646572604020696d706c656d656e746174696f6e2e005101204e6f74653a2054686973206d75737420616c776179732062652067726561746572206f7220657175616c20746f2060543a3a4461746150726f76696465723a3a646573697265645f746172676574732829602e384d696e65724d61784c656e67746810100000360000384d696e65724d617857656967687420400b40a21f8d2e011366666666666666a600544d696e65724d6178566f746573506572566f746572101010000000003c4d696e65724d617857696e6e65727310109001000000012d07071c5374616b696e67011c5374616b696e67943856616c696461746f72436f756e740100101000000000049c2054686520696465616c206e756d626572206f66206163746976652076616c696461746f72732e544d696e696d756d56616c696461746f72436f756e740100101000000000044101204d696e696d756d206e756d626572206f66207374616b696e67207061727469636970616e7473206265666f726520656d657267656e637920636f6e646974696f6e732061726520696d706f7365642e34496e76756c6e657261626c65730100610504000c590120416e792076616c696461746f72732074686174206d6179206e6576657220626520736c6173686564206f7220666f726369626c79206b69636b65642e20497427732061205665632073696e636520746865792772654d01206561737920746f20696e697469616c697a6520616e642074686520706572666f726d616e636520686974206973206d696e696d616c2028776520657870656374206e6f206d6f7265207468616e20666f7572ac20696e76756c6e657261626c65732920616e64207265737472696374656420746f20746573746e6574732e18426f6e64656400010405000004000c0101204d61702066726f6d20616c6c206c6f636b65642022737461736822206163636f756e747320746f2074686520636f6e74726f6c6c6572206163636f756e742e00d02054574f582d4e4f54453a20534146452073696e636520604163636f756e7449646020697320612073656375726520686173682e404d696e4e6f6d696e61746f72426f6e64010018400000000000000000000000000000000004210120546865206d696e696d756d2061637469766520626f6e6420746f206265636f6d6520616e64206d61696e7461696e2074686520726f6c65206f662061206e6f6d696e61746f722e404d696e56616c696461746f72426f6e64010018400000000000000000000000000000000004210120546865206d696e696d756d2061637469766520626f6e6420746f206265636f6d6520616e64206d61696e7461696e2074686520726f6c65206f6620612076616c696461746f722e484d696e696d756d4163746976655374616b65010018400000000000000000000000000000000004110120546865206d696e696d756d20616374697665206e6f6d696e61746f72207374616b65206f6620746865206c617374207375636365737366756c20656c656374696f6e2e344d696e436f6d6d697373696f6e0100ac10000000000ce820546865206d696e696d756d20616d6f756e74206f6620636f6d6d697373696f6e20746861742076616c696461746f72732063616e207365742e00802049662073657420746f206030602c206e6f206c696d6974206578697374732e184c6564676572000104020031070400044501204d61702066726f6d20616c6c2028756e6c6f636b6564292022636f6e74726f6c6c657222206163636f756e747320746f2074686520696e666f20726567617264696e6720746865207374616b696e672e14506179656501010405005d0504000ce42057686572652074686520726577617264207061796d656e742073686f756c64206265206d6164652e204b657965642062792073746173682e00d02054574f582d4e4f54453a20534146452073696e636520604163636f756e7449646020697320612073656375726520686173682e2856616c696461746f72730101040500b00800000c450120546865206d61702066726f6d202877616e6e616265292076616c696461746f72207374617368206b657920746f2074686520707265666572656e636573206f6620746861742076616c696461746f722e00d02054574f582d4e4f54453a20534146452073696e636520604163636f756e7449646020697320612073656375726520686173682e50436f756e746572466f7256616c696461746f7273010010100000000004ac436f756e74657220666f72207468652072656c6174656420636f756e7465642073746f72616765206d6170484d617856616c696461746f7273436f756e7400001004000c310120546865206d6178696d756d2076616c696461746f7220636f756e74206265666f72652077652073746f7020616c6c6f77696e67206e65772076616c696461746f727320746f206a6f696e2e00d0205768656e20746869732076616c7565206973206e6f74207365742c206e6f206c696d6974732061726520656e666f726365642e284e6f6d696e61746f727300010405004507040048750120546865206d61702066726f6d206e6f6d696e61746f72207374617368206b657920746f207468656972206e6f6d696e6174696f6e20707265666572656e6365732c206e616d656c79207468652076616c696461746f72732074686174582074686579207769736820746f20737570706f72742e003901204e6f7465207468617420746865206b657973206f6620746869732073746f72616765206d6170206d69676874206265636f6d65206e6f6e2d6465636f6461626c6520696e2063617365207468656d01205b60436f6e6669673a3a4d61784e6f6d696e6174696f6e73605d20636f6e66696775726174696f6e206973206465637265617365642e20496e2074686973207261726520636173652c207468657365206e6f6d696e61746f7273650120617265207374696c6c206578697374656e7420696e2073746f726167652c207468656972206b657920697320636f727265637420616e64207265747269657661626c652028692e652e2060636f6e7461696e735f6b657960710120696e6469636174657320746861742074686579206578697374292c206275742074686569722076616c75652063616e6e6f74206265206465636f6465642e205468657265666f72652c20746865206e6f6e2d6465636f6461626c656d01206e6f6d696e61746f72732077696c6c206566666563746976656c79206e6f742d65786973742c20756e74696c20746865792072652d7375626d697420746865697220707265666572656e6365732073756368207468617420697401012069732077697468696e2074686520626f756e6473206f6620746865206e65776c79207365742060436f6e6669673a3a4d61784e6f6d696e6174696f6e73602e006101205468697320696d706c696573207468617420603a3a697465725f6b65797328292e636f756e7428296020616e6420603a3a6974657228292e636f756e74282960206d696768742072657475726e20646966666572656e746d012076616c75657320666f722074686973206d61702e204d6f72656f7665722c20746865206d61696e20603a3a636f756e7428296020697320616c69676e656420776974682074686520666f726d65722c206e616d656c79207468656c206e756d626572206f66206b65797320746861742065786973742e006d01204c6173746c792c20696620616e79206f6620746865206e6f6d696e61746f7273206265636f6d65206e6f6e2d6465636f6461626c652c20746865792063616e206265206368696c6c656420696d6d6564696174656c7920766961b8205b6043616c6c3a3a6368696c6c5f6f74686572605d20646973706174636861626c6520627920616e796f6e652e00d02054574f582d4e4f54453a20534146452073696e636520604163636f756e7449646020697320612073656375726520686173682e50436f756e746572466f724e6f6d696e61746f7273010010100000000004ac436f756e74657220666f72207468652072656c6174656420636f756e7465642073746f72616765206d6170484d61784e6f6d696e61746f7273436f756e7400001004000c310120546865206d6178696d756d206e6f6d696e61746f7220636f756e74206265666f72652077652073746f7020616c6c6f77696e67206e65772076616c696461746f727320746f206a6f696e2e00d0205768656e20746869732076616c7565206973206e6f74207365742c206e6f206c696d6974732061726520656e666f726365642e2843757272656e744572610000100400105c205468652063757272656e742065726120696e6465782e006501205468697320697320746865206c617465737420706c616e6e6564206572612c20646570656e64696e67206f6e20686f77207468652053657373696f6e2070616c6c657420717565756573207468652076616c696461746f7280207365742c206974206d6967687420626520616374697665206f72206e6f742e2441637469766545726100004907040010d820546865206163746976652065726120696e666f726d6174696f6e2c20697420686f6c647320696e64657820616e642073746172742e0059012054686520616374697665206572612069732074686520657261206265696e672063757272656e746c792072657761726465642e2056616c696461746f7220736574206f66207468697320657261206d757374206265ac20657175616c20746f205b6053657373696f6e496e746572666163653a3a76616c696461746f7273605d2e5445726173537461727453657373696f6e496e6465780001040510100400103101205468652073657373696f6e20696e646578206174207768696368207468652065726120737461727420666f7220746865206c6173742060484953544f52595f44455054486020657261732e006101204e6f74653a205468697320747261636b7320746865207374617274696e672073657373696f6e2028692e652e2073657373696f6e20696e646578207768656e20657261207374617274206265696e672061637469766529f020666f7220746865206572617320696e20605b43757272656e74457261202d20484953544f52595f44455054482c2043757272656e744572615d602e2c457261735374616b65727301010805054d07e80c0000001878204578706f73757265206f662076616c696461746f72206174206572612e0061012054686973206973206b65796564206669727374206279207468652065726120696e64657820746f20616c6c6f772062756c6b2064656c6574696f6e20616e64207468656e20746865207374617368206163636f756e742e00a82049732069742072656d6f7665642061667465722060484953544f52595f44455054486020657261732e4101204966207374616b657273206861736e2774206265656e20736574206f7220686173206265656e2072656d6f766564207468656e20656d707479206578706f737572652069732072657475726e65642e48457261735374616b657273436c697070656401010805054d07e80c0000002c9820436c6970706564204578706f73757265206f662076616c696461746f72206174206572612e00590120546869732069732073696d696c617220746f205b60457261735374616b657273605d20627574206e756d626572206f66206e6f6d696e61746f7273206578706f736564206973207265647563656420746f20746865dc2060543a3a4d61784e6f6d696e61746f72526577617264656450657256616c696461746f72602062696767657374207374616b6572732e1d0120284e6f74653a20746865206669656c642060746f74616c6020616e6420606f776e60206f6620746865206578706f737572652072656d61696e7320756e6368616e676564292ef42054686973206973207573656420746f206c696d69742074686520692f6f20636f737420666f7220746865206e6f6d696e61746f72207061796f75742e005d012054686973206973206b657965642066697374206279207468652065726120696e64657820746f20616c6c6f772062756c6b2064656c6574696f6e20616e64207468656e20746865207374617368206163636f756e742e00a82049732069742072656d6f7665642061667465722060484953544f52595f44455054486020657261732e4101204966207374616b657273206861736e2774206265656e20736574206f7220686173206265656e2072656d6f766564207468656e20656d707479206578706f737572652069732072657475726e65642e484572617356616c696461746f72507265667301010805054d07b00800001411012053696d696c617220746f2060457261735374616b657273602c207468697320686f6c64732074686520707265666572656e636573206f662076616c696461746f72732e0061012054686973206973206b65796564206669727374206279207468652065726120696e64657820746f20616c6c6f772062756c6b2064656c6574696f6e20616e64207468656e20746865207374617368206163636f756e742e00a82049732069742072656d6f7665642061667465722060484953544f52595f44455054486020657261732e4c4572617356616c696461746f7252657761726400010405101804000c09012054686520746f74616c2076616c696461746f7220657261207061796f757420666f7220746865206c6173742060484953544f52595f44455054486020657261732e0021012045726173207468617420686176656e27742066696e697368656420796574206f7220686173206265656e2072656d6f76656420646f65736e27742068617665207265776172642e4045726173526577617264506f696e74730101040510510714000000000008ac205265776172647320666f7220746865206c6173742060484953544f52595f44455054486020657261732e250120496620726577617264206861736e2774206265656e20736574206f7220686173206265656e2072656d6f766564207468656e2030207265776172642069732072657475726e65642e3845726173546f74616c5374616b65010104051018400000000000000000000000000000000008ec2054686520746f74616c20616d6f756e74207374616b656420666f7220746865206c6173742060484953544f52595f44455054486020657261732e1d0120496620746f74616c206861736e2774206265656e20736574206f7220686173206265656e2072656d6f766564207468656e2030207374616b652069732072657475726e65642e20466f7263654572610100b804000454204d6f6465206f662065726120666f7263696e672e4c536c6173685265776172644672616374696f6e0100ac10000000000cf8205468652070657263656e74616765206f662074686520736c617368207468617420697320646973747269627574656420746f207265706f72746572732e00e4205468652072657374206f662074686520736c61736865642076616c75652069732068616e646c6564206279207468652060536c617368602e4c43616e63656c6564536c6173685061796f757401001840000000000000000000000000000000000815012054686520616d6f756e74206f662063757272656e637920676976656e20746f207265706f7274657273206f66206120736c617368206576656e7420776869636820776173ec2063616e63656c65642062792065787472616f7264696e6172792063697263756d7374616e6365732028652e672e20676f7665726e616e6365292e40556e6170706c696564536c617368657301010405106107040004c420416c6c20756e6170706c69656420736c61736865732074686174206172652071756575656420666f72206c617465722e28426f6e646564457261730100dd0304001025012041206d617070696e672066726f6d207374696c6c2d626f6e646564206572617320746f207468652066697273742073657373696f6e20696e646578206f662074686174206572612e00c8204d75737420636f6e7461696e7320696e666f726d6174696f6e20666f72206572617320666f72207468652072616e67653abc20605b6163746976655f657261202d20626f756e64696e675f6475726174696f6e3b206163746976655f6572615d604c56616c696461746f72536c617368496e45726100010805054d076907040008450120416c6c20736c617368696e67206576656e7473206f6e2076616c696461746f72732c206d61707065642062792065726120746f20746865206869676865737420736c6173682070726f706f7274696f6e7020616e6420736c6173682076616c7565206f6620746865206572612e4c4e6f6d696e61746f72536c617368496e45726100010805054d0718040004610120416c6c20736c617368696e67206576656e7473206f6e206e6f6d696e61746f72732c206d61707065642062792065726120746f20746865206869676865737420736c6173682076616c7565206f6620746865206572612e34536c617368696e675370616e7300010405006d070400048c20536c617368696e67207370616e7320666f72207374617368206163636f756e74732e245370616e536c617368010104055d077107800000000000000000000000000000000000000000000000000000000000000000083d01205265636f72647320696e666f726d6174696f6e2061626f757420746865206d6178696d756d20736c617368206f6620612073746173682077697468696e206120736c617368696e67207370616e2cb82061732077656c6c20617320686f77206d7563682072657761726420686173206265656e2070616964206f75742e5443757272656e74506c616e6e656453657373696f6e01001010000000000ce820546865206c61737420706c616e6e65642073657373696f6e207363686564756c6564206279207468652073657373696f6e2070616c6c65742e0071012054686973206973206261736963616c6c7920696e2073796e632077697468207468652063616c6c20746f205b6070616c6c65745f73657373696f6e3a3a53657373696f6e4d616e616765723a3a6e65775f73657373696f6e605d2e4c4f6666656e64696e6756616c696461746f727301007507040024690120496e6469636573206f662076616c696461746f727320746861742068617665206f6666656e64656420696e20746865206163746976652065726120616e6420776865746865722074686579206172652063757272656e746c79282064697361626c65642e00690120546869732076616c75652073686f756c642062652061207375706572736574206f662064697361626c65642076616c696461746f72732073696e6365206e6f7420616c6c206f6666656e636573206c65616420746f2074686571012076616c696461746f72206265696e672064697361626c65642028696620746865726520776173206e6f20736c617368292e2054686973206973206e656564656420746f20747261636b207468652070657263656e74616765206f6649012076616c696461746f727320746861742068617665206f6666656e64656420696e207468652063757272656e74206572612c20656e737572696e672061206e65772065726120697320666f72636564206966750120604f6666656e64696e6756616c696461746f72735468726573686f6c646020697320726561636865642e205468652076656320697320616c77617973206b65707420736f7274656420736f20746861742077652063616e2066696e6471012077686574686572206120676976656e2076616c696461746f72206861732070726576696f75736c79206f6666656e646564207573696e672062696e617279207365617263682e204974206765747320636c6561726564207768656e38207468652065726120656e64732e384368696c6c5468726573686f6c640000650504000c510120546865207468726573686f6c6420666f72207768656e2075736572732063616e2073746172742063616c6c696e6720606368696c6c5f6f746865726020666f72206f746865722076616c696461746f7273202f5901206e6f6d696e61746f72732e20546865207468726573686f6c6420697320636f6d706172656420746f207468652061637475616c206e756d626572206f662076616c696461746f7273202f206e6f6d696e61746f72732901202860436f756e74466f722a602920696e207468652073797374656d20636f6d706172656420746f2074686520636f6e66696775726564206d61782028604d61782a436f756e7460292e01590501a81c384d61784e6f6d696e6174696f6e7310101000000004b4204d6178696d756d206e756d626572206f66206e6f6d696e6174696f6e7320706572206e6f6d696e61746f722e30486973746f72794465707468101078000000508c204e756d626572206f66206572617320746f206b65657020696e20686973746f72792e00e820466f6c6c6f77696e6720696e666f726d6174696f6e206973206b65707420666f72206572617320696e20605b63757272656e745f657261202d090120486973746f727944657074682c2063757272656e745f6572615d603a2060457261735374616b657273602c2060457261735374616b657273436c6970706564602c050120604572617356616c696461746f725072656673602c20604572617356616c696461746f72526577617264602c206045726173526577617264506f696e7473602cac206045726173546f74616c5374616b65602c206045726173537461727453657373696f6e496e646578602c8420605374616b696e674c65646765722e636c61696d65645f72657761726473602e00e4204d757374206265206d6f7265207468616e20746865206e756d626572206f6620657261732064656c617965642062792073657373696f6e2ef820492e652e2061637469766520657261206d75737420616c7761797320626520696e20686973746f72792e20492e652e20606163746976655f657261203ec42063757272656e745f657261202d20686973746f72795f646570746860206d7573742062652067756172616e746565642e001101204966206d6967726174696e6720616e206578697374696e672070616c6c65742066726f6d2073746f726167652076616c756520746f20636f6e6669672076616c75652cec20746869732073686f756c642062652073657420746f2073616d652076616c7565206f72206772656174657220617320696e2073746f726167652e001501204e6f74653a2060486973746f727944657074686020697320757365642061732074686520757070657220626f756e6420666f72207468652060426f756e646564566563601101206974656d20605374616b696e674c65646765722e636c61696d65645f72657761726473602e2053657474696e6720746869732076616c7565206c6f776572207468616ed820746865206578697374696e672076616c75652063616e206c65616420746f20696e636f6e73697374656e6369657320696e20746865150120605374616b696e674c65646765726020616e642077696c6c206e65656420746f2062652068616e646c65642070726f7065726c7920696e2061206d6967726174696f6e2ef020546865207465737420607265647563696e675f686973746f72795f64657074685f616272757074602073686f77732074686973206566666563742e3853657373696f6e735065724572611010060000000470204e756d626572206f662073657373696f6e7320706572206572612e3c426f6e64696e674475726174696f6e10107000000004e4204e756d626572206f6620657261732074686174207374616b65642066756e6473206d7573742072656d61696e20626f6e64656420666f722e48536c61736844656665724475726174696f6e10106f000000100101204e756d626572206f662065726173207468617420736c6173686573206172652064656665727265642062792c20616674657220636f6d7075746174696f6e2e000d0120546869732073686f756c64206265206c657373207468616e2074686520626f6e64696e67206475726174696f6e2e2053657420746f203020696620736c617368657315012073686f756c64206265206170706c69656420696d6d6564696174656c792c20776974686f7574206f70706f7274756e69747920666f7220696e74657276656e74696f6e2e804d61784e6f6d696e61746f72526577617264656450657256616c696461746f7210100001000010f820546865206d6178696d756d206e756d626572206f66206e6f6d696e61746f727320726577617264656420666f7220656163682076616c696461746f722e00510120466f7220656163682076616c696461746f72206f6e6c79207468652060244d61784e6f6d696e61746f72526577617264656450657256616c696461746f72602062696767657374207374616b6572732063616e390120636c61696d207468656972207265776172642e2054686973207573656420746f206c696d69742074686520692f6f20636f737420666f7220746865206e6f6d696e61746f72207061796f75742e484d6178556e6c6f636b696e674368756e6b7310102000000028050120546865206d6178696d756d206e756d626572206f662060756e6c6f636b696e6760206368756e6b732061205b605374616b696e674c6564676572605d2063616e090120686176652e204566666563746976656c792064657465726d696e657320686f77206d616e7920756e6971756520657261732061207374616b6572206d61792062653820756e626f6e64696e6720696e2e00f8204e6f74653a20604d6178556e6c6f636b696e674368756e6b736020697320757365642061732074686520757070657220626f756e6420666f722074686501012060426f756e64656456656360206974656d20605374616b696e674c65646765722e756e6c6f636b696e67602e2053657474696e6720746869732076616c75650501206c6f776572207468616e20746865206578697374696e672076616c75652063616e206c65616420746f20696e636f6e73697374656e6369657320696e20746865090120605374616b696e674c65646765726020616e642077696c6c206e65656420746f2062652068616e646c65642070726f7065726c7920696e20612072756e74696d650501206d6967726174696f6e2e20546865207465737420607265647563696e675f6d61785f756e6c6f636b696e675f6368756e6b735f616272757074602073686f7773342074686973206566666563742e017d07081c53657373696f6e011c53657373696f6e1c2856616c696461746f7273010061050400047c205468652063757272656e7420736574206f662076616c696461746f72732e3043757272656e74496e646578010010100000000004782043757272656e7420696e646578206f66207468652073657373696f6e2e345175657565644368616e676564010098040008390120547275652069662074686520756e6465726c79696e672065636f6e6f6d6963206964656e746974696573206f7220776569676874696e6720626568696e64207468652076616c696461746f7273a420686173206368616e67656420696e20746865207175657565642076616c696461746f72207365742e285175657565644b657973010081070400083d012054686520717565756564206b65797320666f7220746865206e6578742073657373696f6e2e205768656e20746865206e6578742073657373696f6e20626567696e732c207468657365206b657973e02077696c6c206265207573656420746f2064657465726d696e65207468652076616c696461746f7227732073657373696f6e206b6579732e4844697361626c656456616c696461746f7273010069050400148020496e6469636573206f662064697361626c65642076616c696461746f72732e003d01205468652076656320697320616c77617973206b65707420736f7274656420736f20746861742077652063616e2066696e642077686574686572206120676976656e2076616c696461746f722069733d012064697361626c6564207573696e672062696e617279207365617263682e204974206765747320636c6561726564207768656e20606f6e5f73657373696f6e5f656e64696e67602072657475726e73642061206e657720736574206f66206964656e7469746965732e204e6578744b657973000104050081050400049c20546865206e6578742073657373696f6e206b65797320666f7220612076616c696461746f722e204b65794f776e657200010405890700040004090120546865206f776e6572206f662061206b65792e20546865206b65792069732074686520604b657954797065496460202b2074686520656e636f646564206b65792e017d0501bc000191070928486973746f726963616c0128486973746f726963616c0848486973746f726963616c53657373696f6e73000104051095070400045d01204d617070696e672066726f6d20686973746f726963616c2073657373696f6e20696e646963657320746f2073657373696f6e2d6461746120726f6f74206861736820616e642076616c696461746f7220636f756e742e2c53746f72656452616e67650000e103040004e4205468652072616e6765206f6620686973746f726963616c2073657373696f6e732077652073746f72652e205b66697273742c206c61737429000000000a1c4772616e647061011c4772616e647061181453746174650100990704000490205374617465206f66207468652063757272656e7420617574686f72697479207365742e3450656e64696e674368616e676500009d07040004c42050656e64696e67206368616e67653a20287369676e616c65642061742c207363686564756c6564206368616e6765292e284e657874466f72636564000010040004bc206e65787420626c6f636b206e756d6265722077686572652077652063616e20666f7263652061206368616e67652e1c5374616c6c65640000e1030400049020607472756560206966207765206172652063757272656e746c79207374616c6c65642e3043757272656e745365744964010028200000000000000000085d0120546865206e756d626572206f66206368616e6765732028626f746820696e207465726d73206f66206b65797320616e6420756e6465726c79696e672065636f6e6f6d696320726573706f6e736962696c697469657329c420696e20746865202273657422206f66204772616e6470612076616c696461746f72732066726f6d2067656e657369732e30536574496453657373696f6e00010405281004002859012041206d617070696e672066726f6d206772616e6470612073657420494420746f2074686520696e646578206f6620746865202a6d6f737420726563656e742a2073657373696f6e20666f722077686963682069747368206d656d62657273207765726520726573706f6e7369626c652e0045012054686973206973206f6e6c79207573656420666f722076616c69646174696e672065717569766f636174696f6e2070726f6f66732e20416e2065717569766f636174696f6e2070726f6f66206d7573744d0120636f6e7461696e732061206b65792d6f776e6572736869702070726f6f6620666f72206120676976656e2073657373696f6e2c207468657265666f7265207765206e65656420612077617920746f20746965450120746f6765746865722073657373696f6e7320616e64204752414e44504120736574206964732c20692e652e207765206e65656420746f2076616c6964617465207468617420612076616c696461746f7241012077617320746865206f776e6572206f66206120676976656e206b6579206f6e206120676976656e2073657373696f6e2c20616e642077686174207468652061637469766520736574204944207761735420647572696e6720746861742073657373696f6e2e00b82054574f582d4e4f54453a2060536574496460206973206e6f7420756e646572207573657220636f6e74726f6c2e01890501c008384d6178417574686f7269746965731010a0860100045c204d617820417574686f72697469657320696e20757365584d6178536574496453657373696f6e456e74726965732820a00200000000000018390120546865206d6178696d756d206e756d626572206f6620656e747269657320746f206b65657020696e207468652073657420696420746f2073657373696f6e20696e646578206d617070696e672e0031012053696e6365207468652060536574496453657373696f6e60206d6170206973206f6e6c79207573656420666f722076616c69646174696e672065717569766f636174696f6e73207468697329012076616c75652073686f756c642072656c61746520746f2074686520626f6e64696e67206475726174696f6e206f66207768617465766572207374616b696e672073797374656d2069733501206265696e6720757365642028696620616e79292e2049662065717569766f636174696f6e2068616e646c696e67206973206e6f7420656e61626c6564207468656e20746869732076616c7565342063616e206265207a65726f2e01a5070b48417574686f72697479446973636f766572790148417574686f72697479446973636f7665727908104b6579730100a9070400048c204b657973206f66207468652063757272656e7420617574686f72697479207365742e204e6578744b6579730100a90704000480204b657973206f6620746865206e65787420617574686f72697479207365742e000000000c20496d4f6e6c696e650120496d4f6e6c696e651038486561727462656174416674657201001010000000002c1d012054686520626c6f636b206e756d6265722061667465722077686963682069742773206f6b20746f2073656e64206865617274626561747320696e207468652063757272656e74242073657373696f6e2e0025012041742074686520626567696e6e696e67206f6620656163682073657373696f6e20776520736574207468697320746f20612076616c756520746861742073686f756c642066616c6c350120726f7567686c7920696e20746865206d6964646c65206f66207468652073657373696f6e206475726174696f6e2e20546865206964656120697320746f206669727374207761697420666f721901207468652076616c696461746f727320746f2070726f64756365206120626c6f636b20696e207468652063757272656e742073657373696f6e2c20736f207468617420746865a820686561727462656174206c61746572206f6e2077696c6c206e6f74206265206e65636573736172792e00390120546869732076616c75652077696c6c206f6e6c79206265207573656420617320612066616c6c6261636b206966207765206661696c20746f2067657420612070726f7065722073657373696f6e2d012070726f677265737320657374696d6174652066726f6d20604e65787453657373696f6e526f746174696f6e602c2061732074686f736520657374696d617465732073686f756c642062650101206d6f7265206163637572617465207468656e207468652076616c75652077652063616c63756c61746520666f7220604865617274626561744166746572602e104b6579730100b107040004d0205468652063757272656e7420736574206f66206b6579732074686174206d61792069737375652061206865617274626561742e485265636569766564486561727462656174730001080505e103b9070400083d0120466f7220656163682073657373696f6e20696e6465782c207765206b6565702061206d617070696e67206f66206053657373696f6e496e6465786020616e64206041757468496e6465786020746fb02060577261707065724f70617175653c426f756e6465644f70617175654e6574776f726b53746174653e602e38417574686f726564426c6f636b7301010805054d0710100000000008150120466f7220656163682073657373696f6e20696e6465782c207765206b6565702061206d617070696e67206f66206056616c696461746f7249643c543e6020746f20746865c8206e756d626572206f6620626c6f636b7320617574686f7265642062792074686520676976656e20617574686f726974792e01b90501d40440556e7369676e65645072696f726974792820ffffffffffffffff10f0204120636f6e66696775726174696f6e20666f722062617365207072696f72697479206f6620756e7369676e6564207472616e73616374696f6e732e0015012054686973206973206578706f73656420736f20746861742069742063616e2062652074756e656420666f7220706172746963756c61722072756e74696d652c207768656eb4206d756c7469706c652070616c6c6574732073656e6420756e7369676e6564207472616e73616374696f6e732e01cd070d204f6666656e63657301204f6666656e6365730c1c5265706f727473000104052cd107040004490120546865207072696d61727920737472756374757265207468617420686f6c647320616c6c206f6666656e6365207265636f726473206b65796564206279207265706f7274206964656e746966696572732e58436f6e63757272656e745265706f727473496e6465780101080505d507d9030400042901204120766563746f72206f66207265706f727473206f66207468652073616d65206b696e6420746861742068617070656e6564206174207468652073616d652074696d6520736c6f742e485265706f72747342794b696e64496e64657801010405fc30040018110120456e756d65726174657320616c6c207265706f727473206f662061206b696e6420616c6f6e672077697468207468652074696d6520746865792068617070656e65642e00bc20416c6c207265706f7274732061726520736f72746564206279207468652074696d65206f66206f6666656e63652e004901204e6f74652074686174207468652061637475616c2074797065206f662074686973206d617070696e6720697320605665633c75383e602c207468697320697320626563617573652076616c756573206f66690120646966666572656e7420747970657320617265206e6f7420737570706f7274656420617420746865206d6f6d656e7420736f2077652061726520646f696e6720746865206d616e75616c2073657269616c697a6174696f6e2e0001f800000e6052616e646f6d6e657373436f6c6c656374697665466c6970016052616e646f6d6e657373436f6c6c656374697665466c6970043852616e646f6d4d6174657269616c0100d90704000c610120536572696573206f6620626c6f636b20686561646572732066726f6d20746865206c61737420383120626c6f636b73207468617420616374732061732072616e646f6d2073656564206d6174657269616c2e2054686973610120697320617272616e67656420617320612072696e672062756666657220776974682060626c6f636b5f6e756d626572202520383160206265696e672074686520696e64657820696e746f20746865206056656360206f664420746865206f6c6465737420686173682e000000000f24566f7465724c6973740124566f7465724c6973740c244c6973744e6f6465730001040500dd0704000c8020412073696e676c65206e6f64652c2077697468696e20736f6d65206261672e000501204e6f6465732073746f7265206c696e6b7320666f727761726420616e64206261636b2077697468696e207468656972207265737065637469766520626167732e4c436f756e746572466f724c6973744e6f646573010010100000000004ac436f756e74657220666f72207468652072656c6174656420636f756e7465642073746f72616765206d6170204c697374426167730001040528e10704000c642041206261672073746f72656420696e2073746f726167652e0019012053746f7265732061206042616760207374727563742c2077686963682073746f726573206865616420616e64207461696c20706f696e7465727320746f20697473656c662e01d90501010104344261675468726573686f6c647315010919210300407a10f35a00006a70ccd4a96000009ef3397fbc660000a907ccd5306d00003d9a67fb0c740000a9bfa275577b0000a6fdf73217830000034f5d91538b0000132445651494000078081001629d00000302f63c45a70000392e6f7fc7b10000f59c23c6f2bc00004ae76aafd1c80000598a64846fd50000129fb243d8e200003f22e1ac18f1000033a4844c3e000100e2e51b895710010076a2c0b0732101006789b407a3330100793ed8d7f646010078131b81815b01000c1cf38a567101004437eeb68a8801009eb56d1434a10100335e9f156abb010067c3c7a545d701003218f340e1f40100de0b230d59140200699c11f5ca350200ad50a2c4565902009ae41c471e7f0200d0244e6745a70200f984ad51f2d10200ace7a7984dff0200a118325b822f0300ffa4c76dbe620300580bfd8532990300a9afce6812d30300109ad81b95100400d9caa519f551040038df488970970400bee1727949e10400cc73401fc62f0500b304f91831830500828bffb4d9db05001235383d143a0600a5b42a473a9e060036662d09ab080700f73aeab4cb790700b87e93d707f20700ffec23c0d1710800b84b0beca2f90800c9dcae7afc89090091752ba867230a0064f1cd4f76c60a003609be76c3730b0078655fdff32b0c00a407f5a5b6ef0c0052f61be7c5bf0d00da71bb70e79c0e000de9127eed870f001477987fb7811000ebee65ef328b11001269fe325ca5120033f8428b3fd113008ba57a13fa0f15001b2b60d0ba6216000d1d37d0c3ca17006c64fa5c6b4919002622c7411de01a00045bb9245c901c00233d83f6c25b1e00c8771c79064420003013fddef64a2200aa8b6e848172240082c096c4b2bc260016a3faebb72b29008296524ae1c12b00a636a865a4812e00d0e2d4509e6d31009c0a9a2796883400e4faafb27fd53700e6e64d367e573b000e4bd66de7113f0088b17db746084300b07def72603e470034de249635b84b00d48bd57b077a5000d0bd20ef5b885500b8f0467801e85a0010f88aee139e60003892925301b066009c95e4fc8e236d00b4126d10dffe730028b43e5976487b00a08a1c7a42078300b09ab083a0428b002846b2f463029400c861a42ade4e9d0050d23d4ae630a700805101a7e1b1b10038e501b2ccdbbc002016527844b9c800388924ba9055d50070ca35a4aebce200805fb1355cfbf0008035685d241f0001a0c3dcd96b361001d07862e87e50210160e852d09f7d330190662c5816cf460110274c3340575b01804be277a22971013082b92dfc5a880180d276075a01a101b0f511592b34bb014031745f580cd701802f6cee59a4f40140ff799b521814026075607d2986350260fde999a60d590200e5e71c91d07e02c0df2575cff2a602a07fd975899ad102a067009d4cf0fe0220dc29a1321f2f0320ff526b0a5562038088caa383c29803e05683fb5c9bd203401dd75d9516100400317e39a06e5104c0b071129de1960480b48c9192b1e00480e8124aad242f05c007ca7082858205007c13c45623db0540836fe869523906c0700f81466c9d0640f09c5017d00707c0e624b301e37807c0332ac78510f10780074ca1e4ca700800d5a9eb8c8bf80800a849588ed3880900804254142c220a80a25170e826c50a00e8d5fafc5e720b801df64e00792a0c80d4fe64f923ee0c006dd038ee19be0d001e90a494209b0e0010bf570e0a860f00da6a9db0b57f1000bf64afd810891100bb5b60cd17a31200f963f3aed6ce1300d5f004766a0d1500e099770202601600103d663bdfc71700de3e2d4158461900ecdbadb2d8dc1a0045c70007e38c1c00b8bde0fc11581e00ba5c2a211a402000407de46dcb462200dea55b03136e2400aaf1f3fcfcb7260014226f63b62629006492803e8fbc2b008486a6c7fc7b2e002cf05fc09b673100da63f7ed32823400f0b13fbdb5ce3700f291c41047503b00422a1a3c3c0a3f002c24212f20004300ac9342d4b6354700cc6ed7a400af4b00c4d022773e70500020017d89f57d5500f86387cef3dc5a008c4c7f7e54926000206207f284a36600cc1e05cb49166d00b42a7a70c4f07300d43a90e278397b0038f461ec53f78200a07264b9b1318b0048c9b3d464f09300007fe998bd3b9d0010058f17921ca70000dfaf7f469cb100e80c880bd6c4bc0058bdcb7ddca0c80038d18d37a03bd50030d55bf01ca1e200704ac01a0fdef0ffffffffffffffffacd020546865206c697374206f66207468726573686f6c64732073657061726174696e672074686520766172696f757320626167732e00490120496473206172652073657061726174656420696e746f20756e736f727465642062616773206163636f7264696e6720746f2074686569722073636f72652e205468697320737065636966696573207468656101207468726573686f6c64732073657061726174696e672074686520626167732e20416e20696427732062616720697320746865206c6172676573742062616720666f722077686963682074686520696427732073636f7265b8206973206c657373207468616e206f7220657175616c20746f20697473207570706572207468726573686f6c642e006501205768656e20696473206172652069746572617465642c2068696768657220626167732061726520697465726174656420636f6d706c6574656c79206265666f7265206c6f77657220626167732e2054686973206d65616e735901207468617420697465726174696f6e206973205f73656d692d736f727465645f3a20696473206f66206869676865722073636f72652074656e6420746f20636f6d65206265666f726520696473206f66206c6f7765722d012073636f72652c206275742070656572206964732077697468696e206120706172746963756c6172206261672061726520736f7274656420696e20696e73657274696f6e206f726465722e006820232045787072657373696e672074686520636f6e7374616e74004d01205468697320636f6e7374616e74206d75737420626520736f7274656420696e207374726963746c7920696e6372656173696e67206f726465722e204475706c6963617465206974656d7320617265206e6f742c207065726d69747465642e00410120546865726520697320616e20696d706c696564207570706572206c696d6974206f66206053636f72653a3a4d4158603b20746861742076616c756520646f6573206e6f74206e65656420746f2062652101207370656369666965642077697468696e20746865206261672e20466f7220616e792074776f207468726573686f6c64206c697374732c206966206f6e6520656e647320776974683101206053636f72653a3a4d4158602c20746865206f74686572206f6e6520646f6573206e6f742c20616e64207468657920617265206f746865727769736520657175616c2c207468652074776f7c206c697374732077696c6c20626568617665206964656e746963616c6c792e003820232043616c63756c6174696f6e005501204974206973207265636f6d6d656e64656420746f2067656e65726174652074686520736574206f66207468726573686f6c647320696e20612067656f6d6574726963207365726965732c2073756368207468617441012074686572652065786973747320736f6d6520636f6e7374616e7420726174696f2073756368207468617420607468726573686f6c645b6b202b20315d203d3d20287468726573686f6c645b6b5d202ad020636f6e7374616e745f726174696f292e6d6178287468726573686f6c645b6b5d202b2031296020666f7220616c6c20606b602e005901205468652068656c7065727320696e2074686520602f7574696c732f6672616d652f67656e65726174652d6261677360206d6f64756c652063616e2073696d706c69667920746869732063616c63756c6174696f6e2e002c2023204578616d706c6573005101202d20496620604261675468726573686f6c64733a3a67657428292e69735f656d7074792829602c207468656e20616c6c20696473206172652070757420696e746f207468652073616d65206261672c20616e64b0202020697465726174696f6e206973207374726963746c7920696e20696e73657274696f6e206f726465722e6101202d20496620604261675468726573686f6c64733a3a67657428292e6c656e2829203d3d203634602c20616e6420746865207468726573686f6c6473206172652064657465726d696e6564206163636f7264696e6720746f11012020207468652070726f63656475726520676976656e2061626f76652c207468656e2074686520636f6e7374616e7420726174696f20697320657175616c20746f20322e6501202d20496620604261675468726573686f6c64733a3a67657428292e6c656e2829203d3d20323030602c20616e6420746865207468726573686f6c6473206172652064657465726d696e6564206163636f7264696e6720746f59012020207468652070726f63656475726520676976656e2061626f76652c207468656e2074686520636f6e7374616e7420726174696f20697320617070726f78696d6174656c7920657175616c20746f20312e3234382e6101202d20496620746865207468726573686f6c64206c69737420626567696e7320605b312c20322c20332c202e2e2e5d602c207468656e20616e20696420776974682073636f72652030206f7220312077696c6c2066616c6cf0202020696e746f2062616720302c20616e20696420776974682073636f726520322077696c6c2066616c6c20696e746f2062616720312c206574632e00302023204d6967726174696f6e00610120496e20746865206576656e7420746861742074686973206c6973742065766572206368616e6765732c206120636f7079206f6620746865206f6c642062616773206c697374206d7573742062652072657461696e65642e5d012057697468207468617420604c6973743a3a6d696772617465602063616e2062652063616c6c65642c2077686963682077696c6c20706572666f726d2074686520617070726f707269617465206d6967726174696f6e2e01e507101c56657374696e67011c56657374696e67081c56657374696e670001040200ed07040004d820496e666f726d6174696f6e20726567617264696e67207468652076657374696e67206f66206120676976656e206163636f756e742e3853746f7261676556657273696f6e0100f50704000c7c2053746f726167652076657273696f6e206f66207468652070616c6c65742e003101204e6577206e6574776f726b732073746172742077697468206c61746573742076657273696f6e2c2061732064657465726d696e6564206279207468652067656e65736973206275696c642e01dd0501050108444d696e5665737465645472616e736665721840aa821bce26000000000000000000000004e820546865206d696e696d756d20616d6f756e74207472616e7366657272656420746f2063616c6c20607665737465645f7472616e73666572602e4c4d617856657374696e675363686564756c657310101c0000000001f90711204d756c746973696701204d756c746973696704244d756c7469736967730001080502fd070108040004942054686520736574206f66206f70656e206d756c7469736967206f7065726174696f6e732e01e5050109010c2c4465706f736974426173651840d042de1300000000000000000000000018590120546865206261736520616d6f756e74206f662063757272656e6379206e656564656420746f207265736572766520666f72206372656174696e672061206d756c746973696720657865637574696f6e206f7220746f842073746f726520612064697370617463682063616c6c20666f72206c617465722e00010120546869732069732068656c6420666f7220616e206164646974696f6e616c2073746f72616765206974656d2077686f73652076616c75652073697a652069733101206034202b2073697a656f662828426c6f636b4e756d6265722c2042616c616e63652c204163636f756e74496429296020627974657320616e642077686f7365206b65792073697a652069738020603332202b2073697a656f66284163636f756e74496429602062797465732e344465706f736974466163746f72184040cd2d030000000000000000000000000c55012054686520616d6f756e74206f662063757272656e6379206e65656465642070657220756e6974207468726573686f6c64207768656e206372656174696e672061206d756c746973696720657865637574696f6e2e00250120546869732069732068656c6420666f7220616464696e67203332206279746573206d6f726520696e746f2061207072652d6578697374696e672073746f726167652076616c75652e384d61785369676e61746f7269657310106400000004ec20546865206d6178696d756d20616d6f756e74206f66207369676e61746f7269657320616c6c6f77656420696e20746865206d756c74697369672e010908121c436f756e63696c011c436f756e63696c2414537461676501000d082402010000000000000004742043757272656e7420636f756e63696c20766f74696e6720737461676538436f756e63696c4d656d6265727301002108040004602043757272656e7420636f756e63696c206d656d626572732843616e6469646174657300010402282d080400041101204d6170206f6620616c6c2063616e64696461746573207468617420657665722063616e6469646174656420616e6420686176656e277420756e7374616b65207965742e50416e6e6f756e63656d656e74506572696f644e72010028200000000000000000085d0120496e646578206f66207468652063757272656e742063616e64696461637920706572696f642e20497420697320696e6372656d656e74656420657665727974696d6520616e6e6f756e63656d656e7420706572696f6420207374617274732e18427564676574010018400000000000000000000000000000000004c82042756467657420666f722074686520636f756e63696c277320656c6563746564206d656d6265727320726577617264732e484e6578745265776172645061796d656e7473010010100000000004290120546865206e65787420626c6f636b20696e2077686963682074686520656c656374656420636f756e63696c206d656d62657220726577617264732077696c6c2062652070617965642e404e657874427564676574526566696c6c010010100000000004d820546865206e65787420626c6f636b20696e20776869636820746865206275646765742077696c6c20626520696e637265617365642e3c427564676574496e6372656d656e74010018400000000000000000000000000000000004d420416d6f756e74206f662062616c616e636520746f20626520726566696c6c65642065766572792062756467657420706572696f643c436f756e63696c6f725265776172640100184000000000000000000000000000000000046c20436f756e63696c6f72207265776172642070657220626c6f636b01ed0501110124684d696e4e756d6265724f66457874726143616e64696461746573101000000000080901204d696e696d756d206e756d626572206f662065787472612063616e64696461746573206e656564656420666f72207468652076616c696420656c656374696f6e2e2d01204e756d626572206f6620746f74616c2063616e6469646174657320697320657175616c20746f20636f756e63696c2073697a6520706c75732065787472612063616e646964617465732e2c436f756e63696c53697a65101003000000045420436f756e63696c206d656d62657220636f756e74444d696e43616e6469646174655374616b651840a010a012d3eb050000000000000000000490204d696e696d756d207374616b652063616e6469646174652068617320746f206c6f636b60416e6e6f756e63696e67506572696f644475726174696f6e1010805101000474204475726174696f6e206f6620616e6e6f6e63696e6720706572696f644849646c65506572696f644475726174696f6e1010801303000460204475726174696f6e206f662069646c6520706572696f6464456c65637465644d656d626572526577617264506572696f6410104038000004a020496e74657276616c20666f72206175746f6d6174696320726577617264207061796d656e74732e48427564676574526566696c6c506572696f6410104038000004ac20496e74657276616c206265747765656e206175746f6d617469632062756467657420726566696c6c732e3c43616e6469646163794c6f636b496429042063616e6469646163048c204578706f72747320636f6e7374202d2063616e646964616379206c6f636b2069642e3c436f756e63696c6f724c6f636b4964290420636f756e63696c6f048c204578706f72747320636f6e7374202d20636f756e63696c6f72206c6f636b2069642e01310813285265666572656e64756d014c496e7374616e6365315265666572656e64756d0c14537461676501003508040004682043757272656e74207265666572656e64756d2073746167652e14566f74657301010402004508e400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018510120566f746573206361737420696e20746865207265666572656e64756d2e2041206e6577207265636f726420697320616464656420746f2074686973206d6170207768656e20612075736572206361737473206134207365616c656420766f74652e0101204974206973206d6f646966696564207768656e206120757365722072657665616c732074686520766f7465277320636f6d6d69746d656e742070726f6f662e55012041207265636f72642069732066696e616c6c792072656d6f766564207768656e20746865207573657220756e7374616b65732c2077686963682063616e2068617070656e20647572696e67206120766f74696e679c207374616765206f72206166746572207468652063757272656e74206379636c6520656e64732ef82041207374616b6520666f72206120766f74652063616e2062652072657573656420696e20667574757265207265666572656e64756d206379636c65732e404163636f756e74734f707465644f757401010402007c0004f4204163636f756e74732074686174207065726d616e656e746c79206f70746564206f7574206f6620766f74696e6720696e207265666572656e64756d2e01f10501190114344d617853616c744c656e67746828202000000000000000085d01204d6178696d756d206c656e677468206f6620766f746520636f6d6d69746d656e742073616c742e20557365206c656e677468207468617420656e737572657320756e697175656e65737320666f722068617368696e675020652e672e207374643a3a7536343a3a4d41582e44566f746553746167654475726174696f6e101000e1000004b0204475726174696f6e206f6620766f74696e6720737461676520286e756d626572206f6620626c6f636b73294c52657665616c53746167654475726174696f6e101000e1000004bc204475726174696f6e206f662072657665616c696e6720737461676520286e756d626572206f6620626c6f636b7329304d696e696d756d5374616b651840a41a130d8401000000000000000000000480204d696e696d756d207374616b65206e656564656420666f7220766f74696e67505374616b696e6748616e646c65724c6f636b4964290420766f74696e67202004a4204578706f72747320636f6e7374202d207374616b696e672068616e646c6572206c6f636b2069642e014908141c4d656d6265727301284d656d6265727368697020304e6578744d656d6265724964010028200000000000000000084501204d656d626572496420746f2061737369676e20746f206e657874206d656d626572207468617420697320616464656420746f207468652072656769737472792c20616e6420697320616c736f20746865e820746f74616c206e756d626572206f66206d656d6265727320637265617465642e204d656d626572496473207374617274206174205a65726f2e384d656d626572736869704279496400010402284d08040004d0204d617070696e67206f66206d656d626572277320696420746f207468656972206d656d626572736869702070726f66696c652e504d656d6265724964427948616e646c6548617368010104022c28200000000000000000040501205265676973746572656420756e697175652068616e646c6573206861736820616e64207468656972206d617070696e6720746f207468656972206f776e65722e2c526566657272616c437574010008040004410120526566657272616c206375742070657263656e74206f6620746865206d656d626572736869702066656520746f2072656365697665206f6e20627579696e6720746865206d656d626572736869702e3c4d656d62657273686970507269636501001840aa821bce26000000000000000000000004682043757272656e74206d656d626572736869702070726963652e58496e697469616c496e7669746174696f6e436f756e74010010100000000004e820496e697469616c20696e7669746174696f6e20636f756e7420666f7220746865206e65776c7920626f75676874206d656d626572736869702e60496e697469616c496e7669746174696f6e42616c616e63650100184034c10d6713000000000000000000000004cc20496e697469616c20696e7669746174696f6e2062616c616e636520666f722074686520696e7669746564206d656d6265722e705374616b696e674163636f756e7449644d656d626572537461747573010104020051082400000000000000000004250120446f75626c65206f662061207374616b696e67206163636f756e7420696420616e64206d656d62657220696420746f2074686520636f6e6669726d6174696f6e207374617475732e01f505012901185844656661756c744d656d6265727368697050726963651840aa821bce26000000000000000000000004a0204578706f72747320636f6e7374202d2064656661756c74206d656d62657273686970206665652e64526566657272616c4375744d6178696d756d50657263656e74080432044901204578706f72747320636f6e7374202d206d6178696d756d2070657263656e742076616c7565206f6620746865206d656d626572736869702066656520666f722074686520726566657272616c206375742e7c44656661756c74496e697469616c496e7669746174696f6e42616c616e6365184034c10d6713000000000000000000000004e0204578706f72747320636f6e7374202d2064656661756c742062616c616e636520666f722074686520696e7669746564206d656d6265722e3843616e6469646174655374616b651840a41a130d84010000000000000000000004f8204578706f72747320636f6e7374202d205374616b65206e656564656420746f2063616e646964617465206173207374616b696e67206163636f756e742e4c496e76697465644d656d6265724c6f636b4964290420696e766974656d6204a0204578706f72747320636f6e7374202d20696e7669746564206d656d626572206c6f636b2069642e585374616b696e6743616e6469646174654c6f636b4964290420626f756e6473746104ac204578706f72747320636f6e7374202d207374616b696e672063616e646964617465206c6f636b2069642e0155081514466f72756d0124466f72756d5f315f31203043617465676f727942794964010104022859083d010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004cc204d61702063617465676f7279206964656e74696669657220746f20636f72726573706f6e64696e672063617465676f72792e384e65787443617465676f727949640100282000000000000000000411012043617465676f7279206964656e7469666965722076616c756520746f206265207573656420666f7220746865206e6578742043617465676f727920637265617465642e3c43617465676f7279436f756e746572010028200000000000000000049420436f756e74657220666f7220616c6c206578697374696e672063617465676f726965732e285468726561644279496401010802027d036108a4000000000000000000000000000000000000000000000000000000000000000000000000000000000004bc204d617020746872656164206964656e74696669657220746f20636f72726573706f6e64696e67207468726561642e304e657874546872656164496401002820000000000000000004090120546872656164206964656e7469666965722076616c756520746f206265207573656420666f72206e6578742054687265616420696e20746872656164427949642e284e657874506f7374496401002820000000000000000004f020506f7374206964656e7469666965722076616c756520746f206265207573656420666f7220666f72206e65787420706f737420637265617465642e4c43617465676f727942794d6f64657261746f7201010802027d037c000480204d6f64657261746f722073657420666f7220656163682043617465676f727920506f73744279496401010802027d036508150100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004ac204d617020706f7374206964656e74696669657220746f20636f72726573706f6e64696e6720706f73742e01f905015101102c506f73744465706f73697418400f7bf8720000000000000000000000000838204578706f72747320636f6e737480204465706f736974206e656564656420746f20637265617465206120706f7374345468726561644465706f73697418409e3c1c6f0000000000000000000000000488204465706f736974206e656564656420746f20637265617465206120746872656164804d617844697265637453756263617465676f72696573496e43617465676f727928200a000000000000000484204d617844697265637453756263617465676f72696573496e43617465676f7279484d6178546f74616c43617465676f7269657328202800000000000000044c204d6178546f74616c43617465676f726965730169081630436f6e737469747574696f6e0130436f6e737469747574696f6e0430436f6e737469747574696f6e01006d088000000000000000000000000000000000000000000000000000000000000000000001fd05016d0100001718426f756e74790118426f756e74791420426f756e74696573010104022871087d010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044020426f756e74792073746f726167652e4c426f756e7479436f6e747269627574696f6e7301010802028508890880000000000000000000000000000000005bf4b26c000000000000000000000000044d0120446f75626c65206d617020666f7220626f756e74792066756e64696e672e2049742073746f7265732061206d656d626572206f7220636f756e63696c2066756e64696e6720666f7220626f756e746965732e2c426f756e7479436f756e74010010100000000004b820436f756e74206f6620616c6c20626f756e7469657320746861742068617665206265656e20637265617465642e1c456e747269657300010802027d038d080400046020576f726b20656e7472792073746f72616765206d61702e28456e747279436f756e74010010100000000004c820436f756e74206f6620616c6c20776f726b20656e747269657320746861742068617665206265656e20637265617465642e010106017101105c436c6f736564436f6e747261637453697a654c696d6974101032000000044d01204578706f72747320636f6e7374202d206d617820776f726b20656e747279206e756d62657220666f72206120636c6f736564206173737572616e6365207479706520636f6e747261637420626f756e74792e4c4d696e576f726b456e7472616e745374616b651840cba9f36d00000000000000000000000004d4204578706f72747320636f6e7374202d206d696e20776f726b20656e7472616e74207374616b6520666f72206120626f756e74792e6846756e6465725374617465426c6f6174426f6e64416d6f756e7418405bf4b26c00000000000000000000000004f4204578706f72747320636f6e7374202d2066756e64657220737461746520626c6f617420626f6e6420616d6f756e7420666f72206120626f756e74792e6c43726561746f725374617465426c6f6174426f6e64416d6f756e741840b8c3df6c00000000000000000000000004f8204578706f72747320636f6e7374202d2063726561746f7220737461746520626c6f617420626f6e6420616d6f756e7420666f72206120626f756e74792e01910818404a6f7973747265616d5574696c69747901404a6f7973747265616d5574696c6974790001050601950100019508191c436f6e74656e74011c436f6e74656e74842c4368616e6e656c427949640101040228a901a10100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024566964656f42794964010104022899086c00000000000000000000000000000000000000000000000000000000344e6578744368616e6e656c4964010028200000000000000000002c4e657874566964656f496401002820000000000000000000384e6578745472616e73666572496401002820000000000000000000484e65787443757261746f7247726f75704964010028200000000000000000004043757261746f7247726f7570427949640101040228c5080c0000000028436f6d6d69746d656e7401002c80000000000000000000000000000000000000000000000000000000000000000000684368616e6e656c5374617465426c6f6174426f6e6456616c756501001840000000000000000000000000000000000425012054686520737461746520626c6f617420626f6e6420666f7220746865206368616e6e656c202868656c70732070726576656e74696e672074686520737461746520626c6f6174292e60566964656f5374617465426c6f6174426f6e6456616c7565010018400000000000000000000000000000000004190154686520737461746520626c6f617420626f6e6420666f722074686520766964656f202868656c70732070726576656e74696e672074686520737461746520626c6f6174292e444d6178436173686f7574416c6c6f776564010018400000000000000000000000000000000000444d696e436173686f7574416c6c6f776564010018400000000000000000000000000000000000584368616e6e656c436173686f757473456e61626c6564010098040000484d696e41756374696f6e4475726174696f6e01001010000000000454204d696e2061756374696f6e206475726174696f6e484d617841756374696f6e4475726174696f6e01001010000000000454204d61782061756374696f6e206475726174696f6e644d696e41756374696f6e457874656e73696f6e506572696f6401001010000000000474204d696e2061756374696f6e20657874656e73696f6e20706572696f64644d617841756374696f6e457874656e73696f6e506572696f6401001010000000000474204d61782061756374696f6e20657874656e73696f6e20706572696f64484d696e4269644c6f636b4475726174696f6e01001010000000000458204d696e20626964206c6f636b206475726174696f6e484d61784269644c6f636b4475726174696f6e01001010000000000458204d617820626964206c6f636b206475726174696f6e404d696e5374617274696e67507269636501001840000000000000000000000000000000000468204d696e2061756374696f6e2073746172696e67207072696365404d61785374617274696e67507269636501001840000000000000000000000000000000000468204d61782061756374696f6e2073746172696e67207072696365444d696e43726561746f72526f79616c74790100ac1000000000047c204d696e2063726561746f7220726f79616c74792070657263656e74616765444d617843726561746f72526f79616c74790100ac1000000000047c204d61782063726561746f7220726f79616c74792070657263656e74616765284d696e4269645374657001001840000000000000000000000000000000000454204d696e2061756374696f6e206269642073746570284d61784269645374657001001840000000000000000000000000000000000454204d61782061756374696f6e20626964207374657054506c617466726f6d46656550657263656e746167650100ac1000000000046020506c6174666f726d206665652070657263656e746167655c41756374696f6e53746172747341744d617844656c7461010010100000000004b8204d61782064656c7461206265747765656e2063757272656e7420626c6f636b20616e6420737461727473206174784f70656e41756374696f6e4269644279566964656f416e644d656d62657201010802027d03e1087000000000000000000000000000000000000000000000000000000000045c204269647320666f72206f70656e2061756374696f6e7354476c6f62616c4461696c794e6674436f756e7465720100f90130000000000000000000000000046820476c6f62616c206461696c79204e465420636f756e7465722e58476c6f62616c5765656b6c794e6674436f756e7465720100f90130000000000000000000000000046c20476c6f62616c207765656b6c79204e465420636f756e7465722e4c476c6f62616c4461696c794e66744c696d69740100f50130000000000000000000000000046020476c6f62616c206461696c79204e4654206c696d69742e50476c6f62616c5765656b6c794e66744c696d69740100f50130000000000000000000000000046420476c6f62616c207765656b6c79204e4654206c696d69742e404e66744c696d697473456e61626c656401009804000868204e4654206c696d69747320656e61626c6564206f72206e6f74a02043616e206265207570646174656420696e20666c696768742062792074686520436f756e63696c01090601a101246c4d61784e756d6265724f6643757261746f727350657247726f757010100a00000004c4204578706f72747320636f6e7374202d206d6178206e756d626572206f662063757261746f7273207065722067726f7570ac4d61784b65797350657243757261746f7247726f75705065726d697373696f6e7342794c6576656c4d6170101019000000045d01204578706f72747320636f6e7374202d206d6178206e756d626572206f66206b657973207065722063757261746f725f67726f75702e7065726d697373696f6e735f62795f6c6576656c206d617020696e7374616e6365704d61784e667441756374696f6e57686974656c6973744c656e67746810101400000004c4204578706f72747320636f6e7374202d206d6178206e66742061756374696f6e2077686974656c697374206c656e6774686844656661756c74476c6f62616c4461696c794e66744c696d6974f5013064000000000000004038000004c0204578706f72747320636f6e7374202d2064656661756c7420676c6f62616c206461696c79204e4654206c696d69742e6c44656661756c74476c6f62616c5765656b6c794e66744c696d6974f501309001000000000000c089010004c4204578706f72747320636f6e7374202d2064656661756c7420676c6f62616c207765656b6c79204e4654206c696d69742e6c44656661756c744368616e6e656c4461696c794e66744c696d6974f501300a000000000000004038000004c4204578706f72747320636f6e7374202d2064656661756c74206368616e6e656c206461696c79204e4654206c696d69742e7044656661756c744368616e6e656c5765656b6c794e66744c696d6974f501302800000000000000c089010004c8204578706f72747320636f6e7374202d2064656661756c74206368616e6e656c207765656b6c79204e4654206c696d69742e684d696e696d756d436173686f7574416c6c6f7765644c696d69741840a41a130d84010000000000000000000004a8204578706f727420636f6e7374202d206d696e20636173686f757420616c6c6f776564206c696d697473684d6178696d756d436173686f7574416c6c6f7765644c696d6974184040a640ba3e363b00000000000000000004a8204578706f727420636f6e7374202d206d617820636173686f757420616c6c6f776564206c696d69747301e5081a1c53746f72616765011c53746f726167654c4055706c6f6164696e67426c6f636b6564010098040004a020446566696e6573207768657468657220616c6c206e65772075706c6f61647320626c6f636b65641042616773010104029502e90848000000000000000000000000000000000000044820426167732073746f72616765206d61702e4c4e65787453746f726167654275636b6574496401002820000000000000000004ac2053746f72616765206275636b657420696420636f756e7465722e20537461727473206174207a65726f2e404e657874446174614f626a656374496401002820000000000000000004a02044617461206f626a65637420696420636f756e7465722e20537461727473206174207a65726f2e4453746f726167654275636b6574427949640001040228f508040004442053746f72616765206275636b6574732e24426c61636b6c69737401010402fd087c00048020426c61636b6c69737465642064617461206f626a656374206861736865732e5043757272656e74426c61636b6c69737453697a65010028200000000000000000047820426c61636b6c69737420636f6c6c656374696f6e20636f756e7465722e60446174614f626a6563745065724d65676162797465466565010018400000000000000000000000000000000004b02053697a652062617365642070726963696e67206f66206e6577206f626a656374732075706c6f616465642e6453746f726167654275636b6574735065724261674c696d6974010010100000000004a0202253746f72616765206275636b657473207065722062616722206e756d626572206c696d69742e68566f75636865724d61784f626a6563747353697a654c696d697401002820000000000000000004f820224d6178206f626a656374732073697a6520666f7220612073746f72616765206275636b657420766f756368657222206e756d626572206c696d69742e70566f75636865724d61784f626a656374734e756d6265724c696d697401002820000000000000000004050120224d6178206f626a65637473206e756d62657220666f7220612073746f7261676520206275636b657420766f756368657222206e756d626572206c696d69742e74446174614f626a6563745374617465426c6f6174426f6e6456616c756501001840000000000000000000000000000000000439012054686520737461746520626c6f617420626f6e6420666f72207468652064617461206f626a65637473202868656c70732070726576656e74696e672074686520737461746520626c6f6174292e6844796e616d69634261674372656174696f6e506f6c696369657301010402b102010914000000000004c82044796e616d69634261674372656174696f6e506f6c6963792062792062616720747970652073746f72616765206d61702e3c446174614f626a6563747342794964010108020209090d096c00000000000000000000000000000000000000000000000000000004b0202744617461206f626a6563747320666f722062616773272073746f7261676520646f75626c65206d61702e784e657874446973747269627574696f6e4275636b657446616d696c79496401002820000000000000000004dc20446973747269627574696f6e206275636b65742066616d696c7920696420636f756e7465722e20537461727473206174207a65726f2e70446973747269627574696f6e4275636b657446616d696c794279496401010402281109200000000000000000047820446973747269627574696f6e206275636b65742066616d696c6965732e80446973747269627574696f6e4275636b6574427946616d696c7949644279496401010802027d0315093000000000000000000000000004a82027446973747269627574696f6e206275636b6574272073746f7261676520646f75626c65206d61702e78446973747269627574696f6e4275636b657446616d696c794e756d62657201002820000000000000000004f020546f74616c206e756d626572206f6620646973747269627574696f6e206275636b65742066616d696c69657320696e207468652073797374656d2e78446973747269627574696f6e4275636b6574735065724261674c696d6974010010100000000004b42022446973747269627574696f6e206275636b657473207065722062616722206e756d626572206c696d69742e013906018d022c48426c61636b6c69737453697a654c696d69742820e803000000000000040501204578706f72747320636f6e7374202d206d6178696d756d2073697a65206f662074686520226861736820626c61636b6c6973742220636f6c6c656374696f6e2e5c4d696e53746f726167654275636b65747350657242616710100300000004ec204578706f72747320636f6e7374202d206d696e696d756d206e756d626572206f662073746f72616765206275636b65747320706572206261672e5c4d617853746f726167654275636b65747350657242616710100d00000004ec204578706f72747320636f6e7374202d206d6178696d756d206e756d626572206f662073746f72616765206275636b65747320706572206261672e704d696e446973747269627574696f6e4275636b657473506572426167101001000000040101204578706f72747320636f6e7374202d206d696e696d756d206e756d626572206f6620646973747269627574696f6e206275636b65747320706572206261672e704d6178446973747269627574696f6e4275636b657473506572426167101033000000040101204578706f72747320636f6e7374202d206d6178696d756d206e756d626572206f6620646973747269627574696f6e206275636b65747320706572206261672eb444656661756c744d656d62657244796e616d69634261674e756d6265724f6653746f726167654275636b657473101005000000085101204578706f72747320636f6e7374202d207468652064656661756c742064796e616d696320626167206372656174696f6e20706f6c69637920666f72206d656d62657273202873746f72616765206275636b657424206e756d626572292eb844656661756c744368616e6e656c44796e616d69634261674e756d6265724f6653746f726167654275636b657473101005000000085501204578706f72747320636f6e7374202d207468652064656661756c742064796e616d696320626167206372656174696f6e20706f6c69637920666f72206368616e6e656c73202873746f72616765206275636b657424206e756d626572292e844d6178446973747269627574696f6e4275636b657446616d696c794e756d6265722820c80000000000000004fc204578706f72747320636f6e7374202d206d617820616c6c6f77656420646973747269627574696f6e206275636b65742066616d696c79206e756d6265722ec84d61784e756d6265724f6650656e64696e67496e7669746174696f6e73506572446973747269627574696f6e4275636b6574101014000000042d01204578706f72747320636f6e7374202d206d6178206e756d626572206f662070656e64696e6720696e7669746174696f6e732070657220646973747269627574696f6e206275636b65742ea44d61784e756d6265724f664f70657261746f7273506572446973747269627574696f6e4275636b6574101014000000040501204578706f72747320636f6e7374202d206d6178206e756d626572206f66206f70657261746f72732070657220646973747269627574696f6e206275636b65742e444d6178446174614f626a65637453697a652820000000000f00000004bc204578706f72747320636f6e7374202d206d61782064617461206f626a6563742073697a6520696e2062797465732e0121091b3050726f6a656374546f6b656e0114546f6b656e386c4163636f756e74496e666f4279546f6b656e416e644d656d62657201010802027d032509b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000041d0120446f75626c65206d617020546f6b656e49642078204d656d6265724964203d3e204163636f756e744461746120666f72206d616e6167696e67206163636f756e74206461746134546f6b656e496e666f4279496401010402284d094101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004dc206d617020546f6b656e4964203d3e20546f6b656e4461746120746f20726574726965766520746f6b656e20696e666f726d6174696f6e2c4e657874546f6b656e4964010028200000000000000000043c20546f6b656e204964206e6f6e636524426c6f6174426f6e64010018400000000000000000000000000000000004b820426c6f617420426f6e642076616c7565207573656420647572696e67206163636f756e74206372656174696f6e3c4d696e53616c654475726174696f6e01001010000000000484204d696e696d756d206475726174696f6e206f66206120746f6b656e2073616c655c4d696e526576656e756553706c69744475726174696f6e010010100000000004a8204d696e696d756d20726576656e75652073706c6974206475726174696f6e20636f6e73747261696e74684d696e526576656e756553706c697454696d65546f5374617274010010100000000004bc204d696e696d756d20726576656e75652073706c69742074696d6520746f20737461727420636f6e73747261696e743c53616c65506c6174666f726d4665650100d5021000000000044d0120506c6174666f726d20666565202870657263656e74616765292063686172676564206f6e20746f70206f6620656163682073616c652070757263686173652028696e204a4f592920616e64206275726e656460416d6d446561637469766174696f6e5468726573686f6c640100d502100000000004f02050657263656e74616765207468726573686f6c6420666f7220646561637469766174696e672074686520616d6d2066756e6374696f6e616c69747930416d6d4275795478466565730100d50210b80b0000048c20414d4d20627579207472616e73616374696f6e206665652070657263656e7461676534416d6d53656c6c5478466565730100d50210b80b0000049020414d4d2073656c6c207472616e73616374696f6e206665652070657263656e74616765584d6178596561726c79506174726f6e616765526174650100f90210f0490200046c204d617820706174726f6e616765207261746520616c6c6f776564504d696e416d6d536c6f7065506172616d657465720100184040420f0000000000000000000000000004bc204d696e696d756d20736c6f706520706172616d657465727320616c6c6f77656420666f7220414d4d2063757276653050616c6c657446726f7a656e010098040004582043757272656e742066726f7a656e2073746174652e013d0601c102000169091c3c50726f706f73616c73456e67696e65013850726f706f73616c456e67696e65142450726f706f73616c7301010402106d090101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000460204d61702070726f706f73616c206279206974732069642e3450726f706f73616c436f756e74010010100000000004bc20436f756e74206f6620616c6c2070726f706f73616c7320746861742068617665206265656e20637265617465642e50446973706174636861626c6543616c6c436f646501010402107909040004b4204d61702070726f706f73616c2065786563757461626c6520636f64652062792070726f706f73616c2069642e4c41637469766550726f706f73616c436f756e740100101000000000046c20436f756e74206f66206163746976652070726f706f73616c732e6c566f7465457869737473427950726f706f73616c4279566f74657201010802027d093d03040104290120446f75626c65206d617020666f722070726576656e74696e67206475706c696361746520766f7465732e2053686f756c6420626520636c65616e65642061667465722075736167652e016506012903183c43616e63656c6c6174696f6e4665651840aa821bce260000000000000000000000047901204578706f72747320636f6e7374202d2074686520666565206973206170706c696564207768656e2063616e63656c207468652070726f706f73616c2e20412066656520776f756c6420626520736c617368656420286275726e6564292e3052656a656374696f6e4665651840528d8906c20000000000000000000000084501204578706f72747320636f6e7374202d202074686520666565206973206170706c696564207768656e207468652070726f706f73616c20676574732072656a65637465642e20412066656520776f756c645420626520736c617368656420286275726e6564292e385469746c654d61784c656e67746810102800000004d0204578706f72747320636f6e7374202d20206d617820616c6c6f7765642070726f706f73616c207469746c65206c656e6774682e504465736372697074696f6e4d61784c656e6774681010b80b000004e8204578706f72747320636f6e7374202d20206d617820616c6c6f7765642070726f706f73616c206465736372697074696f6e206c656e6774682e584d617841637469766550726f706f73616c4c696d697410101400000004ec204578706f72747320636f6e7374202d20206d61782073696d756c74616e656f7573206163746976652070726f706f73616c73206e756d6265722e505374616b696e6748616e646c65724c6f636b496429042070726f706f73616c04a4204578706f72747320636f6e7374202d207374616b696e672068616e646c6572206c6f636b2069642e0181091d4c50726f706f73616c7344697363757373696f6e014850726f706f73616c44697363757373696f6e10285468726561644279496401010402288509340000000000000000000000000004bc204d617020746872656164206964656e74696669657220746f20636f72726573706f6e64696e67207468726561642e2c546872656164436f756e7401002820000000000000000004b420436f756e74206f6620616c6c207468726561647320746861742068617665206265656e20637265617465642e50506f737454687265616449644279506f7374496401010802027d03910974000000000000000000000000000000000000000000000000000000000004c4204d61702074687265616420696420616e6420706f737420696420746f20636f72726573706f6e64696e6720706f73742e24506f7374436f756e7401002820000000000000000004ac20436f756e74206f6620616c6c20706f73747320746861742068617665206265656e20637265617465642e0169060141030c404d617857686974654c69737453697a65101014000000040901204578706f72747320636f6e7374202d20617574686f72206c6973742073697a65206c696d697420666f722074686520436c6f7365642064697363757373696f6e2e2c506f73744465706f7369741840d03bda6c00000000000000000000000004a0204578706f72747320636f6e7374202d2066656520666f72206372656174696e67206120706f737430506f73744c69666554696d65101058020000043d01204578706f72747320636f6e7374202d206d6178696d756d206e756d626572206f6620626c6f636b73206265666f7265206120706f73742063616e2062652065726173656420627920616e796f6e650195091e3850726f706f73616c73436f646578013850726f706f73616c73436f64657804505468726561644964427950726f706f73616c496401010402102820000000000000000004b0204d61702070726f706f73616c20696420746f206974732064697363757373696f6e20746872656164206964016d060149036c985365744d617856616c696461746f72436f756e7450726f706f73616c506172616d65746572737109b4c0890100401901006400000064000000640000006400000001a010a012d3eb050000000000000000000200000004dc204578706f7274732027536574204d61782056616c696461746f7220436f756e74272070726f706f73616c20706172616d65746572732e8052756e74696d655570677261646550726f706f73616c506172616d65746572737109b4c0890100401901006400000064000000640000006400000001a010a012d3eb050000000000000000000200000004bc204578706f727473202752756e74696d652055706772616465272070726f706f73616c20706172616d65746572732e605369676e616c50726f706f73616c506172616d65746572737109b4c0a80000b004000064000000640000006400000064000000011068761b959700000000000000000000010000000498204578706f72747320275369676e616c272070726f706f73616c20706172616d65746572732e8046756e64696e675265717565737450726f706f73616c506172616d65746572737109b4c0a80000b00400004200000042000000640000006400000001a41a130d8401000000000000000000000100000004bc204578706f727473202746756e64696e672052657175657374272070726f706f73616c20706172616d65746572732ebc437265617465576f726b696e6747726f75704c6561644f70656e696e6750726f706f73616c506172616d65746572737109b4c0a80000b00400004200000042000000640000006400000001680abf82280f0000000000000000000001000000040501204578706f727473202743726561746520576f726b696e672047726f7570204c656164204f70656e696e67272070726f706f73616c20706172616d65746572732ea446696c6c576f726b696e6747726f75704f70656e696e6750726f706f73616c506172616d65746572737109b4c0a80000b0040000420000004200000064000000640000000134855f419407000000000000000000000100000004fc204578706f727473202746696c6c20576f726b696e672047726f7570204c656164204f70656e696e67272070726f706f73616c20706172616d65746572732ea8557064617465576f726b696e6747726f757042756467657450726f706f73616c506172616d65746572737109b4c0a80000b0040000420000004200000064000000640000000134855f419407000000000000000000000100000004ec204578706f727473202755706461746520576f726b696e672047726f757020427564676574272070726f706f73616c20706172616d65746572732ebc4465637265617365576f726b696e6747726f75704c6561645374616b6550726f706f73616c506172616d65746572737109b4c0a80000b0040000640000006400000064000000640000000134855f4194070000000000000000000001000000040501204578706f7274732027446563726561736520576f726b696e672047726f7570204c656164205374616b65272070726f706f73616c20706172616d65746572732e9c536c617368576f726b696e6747726f75704c65616450726f706f73616c506172616d65746572737109b4c0a80000b0040000420000004200000064000000640000000134855f419407000000000000000000000100000004e0204578706f7274732027536c61736820576f726b696e672047726f7570204c656164272070726f706f73616c20706172616d65746572732eac536574576f726b696e6747726f75704c65616452657761726450726f706f73616c506172616d65746572737109b4c0a80000b0040000420000004200000064000000640000000134855f419407000000000000000000000100000004f4204578706f727473202753657420576f726b696e672047726f7570204c65616420526577617264272070726f706f73616c20706172616d65746572732eac5465726d696e617465576f726b696e6747726f75704c65616450726f706f73616c506172616d65746572737109b4c0a80000b0040000420000004200000064000000640000000134855f419407000000000000000000000100000004f0204578706f72747320275465726d696e61746520576f726b696e672047726f7570204c656164272070726f706f73616c20706172616d65746572732e8c416d656e64436f6e737469747574696f6e50726f706f73616c506172616d65746572737109b4081a01004038000050000000640000003c0000005000000001680abf82280f000000000000000000000200000004c8204578706f7274732027416d656e6420436f6e737469747574696f6e272070726f706f73616c20706172616d65746572732ebc43616e63656c576f726b696e6747726f75704c6561644f70656e696e6750726f706f73616c506172616d65746572737109b4c0a80000b0040000420000004200000064000000640000000134855f4194070000000000000000000001000000040501204578706f727473202743616e63656c20576f726b696e672047726f7570204c656164204f70656e696e67272070726f706f73616c20706172616d65746572732e905365744d656d62657273686970507269636550726f706f73616c506172616d65746572737109b4c0a80000b0040000420000004200000064000000640000000134855f419407000000000000000000000100000004d0204578706f7274732027536574204d656d62657273686970205072696365272070726f706f73616c20706172616d65746572732eac536574436f756e63696c427564676574496e6372656d656e7450726f706f73616c506172616d65746572737109b44019010040190100640000006400000064000000640000000120d0ec362a2f010000000000000000000200000004f0204578706f727473206053657420436f756e63696c2042756467657420496e6372656d656e74602070726f706f73616c20706172616d65746572732e90536574436f756e63696c6f7252657761726450726f706f73616c506172616d65746572737109b480700000c0a80000640000006400000064000000640000000120d0ec362a2f0100000000000000000002000000042101204578706f727473206053657420436f756e63696c6f72205265776172642050726f706f73616c20506172616d6574657273602070726f706f73616c20706172616d65746572732eb4536574496e697469616c496e7669746174696f6e42616c616e636550726f706f73616c506172616d65746572737109b480700000b00400004200000042000000640000006400000001d0147e05511e000000000000000000000100000004f8204578706f727473206053657420496e697469616c20496e7669746174696f6e2042616c616e6365602070726f706f73616c20706172616d65746572732e90536574496e7669746174696f6e436f756e7450726f706f73616c506172616d65746572737109b4c0a80000b0040000420000004200000064000000640000000134855f419407000000000000000000000100000000c85365744d656d626572736869704c656164496e7669746174696f6e51756f746150726f706f73616c506172616d65746572737109b4c0a80000b0040000420000004200000064000000640000000134855f41940700000000000000000000010000000080536574526566657272616c43757450726f706f73616c506172616d65746572737109b4c0a80000b0040000420000004200000064000000640000000134855f419407000000000000000000000100000000785665746f50726f706f73616c50726f706f73616c506172616d65746572737109b4403800000000000064000000640000006400000064000000011068761b959700000000000000000000010000000098557064617465476c6f62616c4e66744c696d697450726f706f73616c506172616d65746572737109b480700000b00400004200000042000000640000006400000001680abf82280f000000000000000000000100000000985570646174654368616e6e656c5061796f75747350726f706f73616c506172616d65746572737109b4c0890100403800004200000064000000640000006400000001680abf82280f0000000000000000000001000000009046756e64696e675265717565737450726f706f73616c4d6178546f74616c416d6f756e741840a010a012d3eb0500000000000000000004c4204d6178696d756d20746f74616c20616d6f756e7420696e2066756e64696e6720726571756573742070726f706f73616c8446756e64696e675265717565737450726f706f73616c4d61784163636f756e747310101400000004d0204d6178206e756d626572206f66206163636f756e7473207065722066756e64696e6720726571756573742070726f706f73616ca45365744d617856616c696461746f72436f756e7450726f706f73616c4d617856616c696461746f7273101064000000041501204d617820616c6c6f776564206e756d626572206f662076616c696461746f727320696e20736574206d61782076616c696461746f7220636f756e742070726f706f73616c9853657450616c6c6574466f7a656e53746174757350726f706f73616c506172616d65746572737109b4c0a8000000000000420000004200000064000000640000000134855f4194070000000000000000000001000000000199091f44466f72756d576f726b696e6747726f75700154496e7374616e636531576f726b696e6747726f757028344e6578744f70656e696e67496401002820000000000000000004ac204e657874206964656e7469666965722076616c756520666f72206e6577206a6f62206f70656e696e672e2c4f70656e696e674279496401010402289d09290101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000480204d617073206964656e74696669657220746f206a6f62206f70656e696e672e44416374697665576f726b6572436f756e740100101000000000046420436f756e74206f662061637469766520776f726b6572732e3c4170706c69636174696f6e427949640001040228a109040004c8204d617073206964656e74696669657220746f20776f726b6572206170706c69636174696f6e206f6e206f70656e696e672e444e6578744170706c69636174696f6e496401002820000000000000000004c8204e657874206964656e7469666965722076616c756520666f72206e657720776f726b6572206170706c69636174696f6e2e304e657874576f726b657249640100282000000000000000000488204e657874206964656e74696669657220666f722061206e657720776f726b65722e28576f726b6572427949640001040228a509040004a4204d617073206964656e74696669657220746f20636f72726573706f6e64696e6720776f726b65722e2c43757272656e744c656164000028040004502043757272656e742067726f7570206c6561642e18427564676574010018400000000000000000000000000000000004782042756467657420666f722074686520776f726b696e672067726f75702e38537461747573546578744861736801002c800000000000000000000000000000000000000000000000000000000000000000044820537461747573207465787420686173682e01710601710318504d6178576f726b65724e756d6265724c696d697410101e0000000838204578706f72747320636f6e73749c204d61782073696d756c74616e656f75732061637469766520776f726b6572206e756d6265722e5c4d696e556e7374616b696e67506572696f644c696d697410100065040004ac20446566696e6573206d696e20756e7374616b696e6720706572696f6420696e207468652067726f75702e5c4d696e696d756d4170706c69636174696f6e5374616b6518404835261a08030000000000000000000004d4204d696e696d756d207374616b6520726571756972656420666f72206170706c79696e6720696e746f20616e206f70656e696e672e484c65616465724f70656e696e675374616b651840680abf82280f00000000000000000000048c205374616b65206e656564656420746f2063726561746520616e206f70656e696e672e30526577617264506572696f6410104a38000004d420446566696e65732074686520706572696f6420657665727920776f726b65722067657473207061696420696e20626c6f636b732e505374616b696e6748616e646c65724c6f636b496429042077672d666f72756d0464205374616b696e672068616e646c6572206c6f636b2069642e01a909204c53746f72616765576f726b696e6747726f75700154496e7374616e636532576f726b696e6747726f757028344e6578744f70656e696e67496401002820000000000000000004ac204e657874206964656e7469666965722076616c756520666f72206e6577206a6f62206f70656e696e672e2c4f70656e696e674279496401010402289d09290101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000480204d617073206964656e74696669657220746f206a6f62206f70656e696e672e44416374697665576f726b6572436f756e740100101000000000046420436f756e74206f662061637469766520776f726b6572732e3c4170706c69636174696f6e427949640001040228a109040004c8204d617073206964656e74696669657220746f20776f726b6572206170706c69636174696f6e206f6e206f70656e696e672e444e6578744170706c69636174696f6e496401002820000000000000000004c8204e657874206964656e7469666965722076616c756520666f72206e657720776f726b6572206170706c69636174696f6e2e304e657874576f726b657249640100282000000000000000000488204e657874206964656e74696669657220666f722061206e657720776f726b65722e28576f726b6572427949640001040228a509040004a4204d617073206964656e74696669657220746f20636f72726573706f6e64696e6720776f726b65722e2c43757272656e744c656164000028040004502043757272656e742067726f7570206c6561642e18427564676574010018400000000000000000000000000000000004782042756467657420666f722074686520776f726b696e672067726f75702e38537461747573546578744861736801002c800000000000000000000000000000000000000000000000000000000000000000044820537461747573207465787420686173682e01750601950318504d6178576f726b65724e756d6265724c696d69741010320000000838204578706f72747320636f6e73749c204d61782073696d756c74616e656f75732061637469766520776f726b6572206e756d6265722e5c4d696e556e7374616b696e67506572696f644c696d697410100065040004ac20446566696e6573206d696e20756e7374616b696e6720706572696f6420696e207468652067726f75702e5c4d696e696d756d4170706c69636174696f6e5374616b6518404835261a08030000000000000000000004d4204d696e696d756d207374616b6520726571756972656420666f72206170706c79696e6720696e746f20616e206f70656e696e672e484c65616465724f70656e696e675374616b651840680abf82280f00000000000000000000048c205374616b65206e656564656420746f2063726561746520616e206f70656e696e672e30526577617264506572696f6410105438000004d420446566696e65732074686520706572696f6420657665727920776f726b65722067657473207061696420696e20626c6f636b732e505374616b696e6748616e646c65724c6f636b496429042077672d73746f72670464205374616b696e672068616e646c6572206c6f636b2069642e01ad09214c436f6e74656e74576f726b696e6747726f75700154496e7374616e636533576f726b696e6747726f757028344e6578744f70656e696e67496401002820000000000000000004ac204e657874206964656e7469666965722076616c756520666f72206e6577206a6f62206f70656e696e672e2c4f70656e696e674279496401010402289d09290101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000480204d617073206964656e74696669657220746f206a6f62206f70656e696e672e44416374697665576f726b6572436f756e740100101000000000046420436f756e74206f662061637469766520776f726b6572732e3c4170706c69636174696f6e427949640001040228a109040004c8204d617073206964656e74696669657220746f20776f726b6572206170706c69636174696f6e206f6e206f70656e696e672e444e6578744170706c69636174696f6e496401002820000000000000000004c8204e657874206964656e7469666965722076616c756520666f72206e657720776f726b6572206170706c69636174696f6e2e304e657874576f726b657249640100282000000000000000000488204e657874206964656e74696669657220666f722061206e657720776f726b65722e28576f726b6572427949640001040228a509040004a4204d617073206964656e74696669657220746f20636f72726573706f6e64696e6720776f726b65722e2c43757272656e744c656164000028040004502043757272656e742067726f7570206c6561642e18427564676574010018400000000000000000000000000000000004782042756467657420666f722074686520776f726b696e672067726f75702e38537461747573546578744861736801002c800000000000000000000000000000000000000000000000000000000000000000044820537461747573207465787420686173682e017906019d0318504d6178576f726b65724e756d6265724c696d697410101e0000000838204578706f72747320636f6e73749c204d61782073696d756c74616e656f75732061637469766520776f726b6572206e756d6265722e5c4d696e556e7374616b696e67506572696f644c696d697410100065040004ac20446566696e6573206d696e20756e7374616b696e6720706572696f6420696e207468652067726f75702e5c4d696e696d756d4170706c69636174696f6e5374616b6518404835261a08030000000000000000000004d4204d696e696d756d207374616b6520726571756972656420666f72206170706c79696e6720696e746f20616e206f70656e696e672e484c65616465724f70656e696e675374616b651840680abf82280f00000000000000000000048c205374616b65206e656564656420746f2063726561746520616e206f70656e696e672e30526577617264506572696f6410105e38000004d420446566696e65732074686520706572696f6420657665727920776f726b65722067657473207061696420696e20626c6f636b732e505374616b696e6748616e646c65724c6f636b496429042077672d636f6e74740464205374616b696e672068616e646c6572206c6f636b2069642e01b109226c4f7065726174696f6e73576f726b696e6747726f7570416c7068610154496e7374616e636534576f726b696e6747726f757028344e6578744f70656e696e67496401002820000000000000000004ac204e657874206964656e7469666965722076616c756520666f72206e6577206a6f62206f70656e696e672e2c4f70656e696e674279496401010402289d09290101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000480204d617073206964656e74696669657220746f206a6f62206f70656e696e672e44416374697665576f726b6572436f756e740100101000000000046420436f756e74206f662061637469766520776f726b6572732e3c4170706c69636174696f6e427949640001040228a109040004c8204d617073206964656e74696669657220746f20776f726b6572206170706c69636174696f6e206f6e206f70656e696e672e444e6578744170706c69636174696f6e496401002820000000000000000004c8204e657874206964656e7469666965722076616c756520666f72206e657720776f726b6572206170706c69636174696f6e2e304e657874576f726b657249640100282000000000000000000488204e657874206964656e74696669657220666f722061206e657720776f726b65722e28576f726b6572427949640001040228a509040004a4204d617073206964656e74696669657220746f20636f72726573706f6e64696e6720776f726b65722e2c43757272656e744c656164000028040004502043757272656e742067726f7570206c6561642e18427564676574010018400000000000000000000000000000000004782042756467657420666f722074686520776f726b696e672067726f75702e38537461747573546578744861736801002c800000000000000000000000000000000000000000000000000000000000000000044820537461747573207465787420686173682e017d0601a50318504d6178576f726b65724e756d6265724c696d697410101e0000000838204578706f72747320636f6e73749c204d61782073696d756c74616e656f75732061637469766520776f726b6572206e756d6265722e5c4d696e556e7374616b696e67506572696f644c696d697410100065040004ac20446566696e6573206d696e20756e7374616b696e6720706572696f6420696e207468652067726f75702e5c4d696e696d756d4170706c69636174696f6e5374616b6518404835261a08030000000000000000000004d4204d696e696d756d207374616b6520726571756972656420666f72206170706c79696e6720696e746f20616e206f70656e696e672e484c65616465724f70656e696e675374616b651840680abf82280f00000000000000000000048c205374616b65206e656564656420746f2063726561746520616e206f70656e696e672e30526577617264506572696f6410107c38000004d420446566696e65732074686520706572696f6420657665727920776f726b65722067657473207061696420696e20626c6f636b732e505374616b696e6748616e646c65724c6f636b496429042077672d6f706572610464205374616b696e672068616e646c6572206c6f636b2069642e01b509233c417070576f726b696e6747726f75700154496e7374616e636535576f726b696e6747726f757028344e6578744f70656e696e67496401002820000000000000000004ac204e657874206964656e7469666965722076616c756520666f72206e6577206a6f62206f70656e696e672e2c4f70656e696e674279496401010402289d09290101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000480204d617073206964656e74696669657220746f206a6f62206f70656e696e672e44416374697665576f726b6572436f756e740100101000000000046420436f756e74206f662061637469766520776f726b6572732e3c4170706c69636174696f6e427949640001040228a109040004c8204d617073206964656e74696669657220746f20776f726b6572206170706c69636174696f6e206f6e206f70656e696e672e444e6578744170706c69636174696f6e496401002820000000000000000004c8204e657874206964656e7469666965722076616c756520666f72206e657720776f726b6572206170706c69636174696f6e2e304e657874576f726b657249640100282000000000000000000488204e657874206964656e74696669657220666f722061206e657720776f726b65722e28576f726b6572427949640001040228a509040004a4204d617073206964656e74696669657220746f20636f72726573706f6e64696e6720776f726b65722e2c43757272656e744c656164000028040004502043757272656e742067726f7570206c6561642e18427564676574010018400000000000000000000000000000000004782042756467657420666f722074686520776f726b696e672067726f75702e38537461747573546578744861736801002c800000000000000000000000000000000000000000000000000000000000000000044820537461747573207465787420686173682e01810601ad0318504d6178576f726b65724e756d6265724c696d697410101e0000000838204578706f72747320636f6e73749c204d61782073696d756c74616e656f75732061637469766520776f726b6572206e756d6265722e5c4d696e556e7374616b696e67506572696f644c696d697410100065040004ac20446566696e6573206d696e20756e7374616b696e6720706572696f6420696e207468652067726f75702e5c4d696e696d756d4170706c69636174696f6e5374616b6518404835261a08030000000000000000000004d4204d696e696d756d207374616b6520726571756972656420666f72206170706c79696e6720696e746f20616e206f70656e696e672e484c65616465724f70656e696e675374616b651840680abf82280f00000000000000000000048c205374616b65206e656564656420746f2063726561746520616e206f70656e696e672e30526577617264506572696f6410107238000004d420446566696e65732074686520706572696f6420657665727920776f726b65722067657473207061696420696e20626c6f636b732e505374616b696e6748616e646c65724c6f636b496429042077672d6170706c690464205374616b696e672068616e646c6572206c6f636b2069642e01b90924584d656d62657273686970576f726b696e6747726f75700154496e7374616e636536576f726b696e6747726f757028344e6578744f70656e696e67496401002820000000000000000004ac204e657874206964656e7469666965722076616c756520666f72206e6577206a6f62206f70656e696e672e2c4f70656e696e674279496401010402289d09290101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000480204d617073206964656e74696669657220746f206a6f62206f70656e696e672e44416374697665576f726b6572436f756e740100101000000000046420436f756e74206f662061637469766520776f726b6572732e3c4170706c69636174696f6e427949640001040228a109040004c8204d617073206964656e74696669657220746f20776f726b6572206170706c69636174696f6e206f6e206f70656e696e672e444e6578744170706c69636174696f6e496401002820000000000000000004c8204e657874206964656e7469666965722076616c756520666f72206e657720776f726b6572206170706c69636174696f6e2e304e657874576f726b657249640100282000000000000000000488204e657874206964656e74696669657220666f722061206e657720776f726b65722e28576f726b6572427949640001040228a509040004a4204d617073206964656e74696669657220746f20636f72726573706f6e64696e6720776f726b65722e2c43757272656e744c656164000028040004502043757272656e742067726f7570206c6561642e18427564676574010018400000000000000000000000000000000004782042756467657420666f722074686520776f726b696e672067726f75702e38537461747573546578744861736801002c800000000000000000000000000000000000000000000000000000000000000000044820537461747573207465787420686173682e01850601b50318504d6178576f726b65724e756d6265724c696d697410101e0000000838204578706f72747320636f6e73749c204d61782073696d756c74616e656f75732061637469766520776f726b6572206e756d6265722e5c4d696e556e7374616b696e67506572696f644c696d697410100065040004ac20446566696e6573206d696e20756e7374616b696e6720706572696f6420696e207468652067726f75702e5c4d696e696d756d4170706c69636174696f6e5374616b6518404835261a08030000000000000000000004d4204d696e696d756d207374616b6520726571756972656420666f72206170706c79696e6720696e746f20616e206f70656e696e672e484c65616465724f70656e696e675374616b651840680abf82280f00000000000000000000048c205374616b65206e656564656420746f2063726561746520616e206f70656e696e672e30526577617264506572696f6410106838000004d420446566696e65732074686520706572696f6420657665727920776f726b65722067657473207061696420696e20626c6f636b732e505374616b696e6748616e646c65724c6f636b496429042077672d6d656d62720464205374616b696e672068616e646c6572206c6f636b2069642e01bd0925684f7065726174696f6e73576f726b696e6747726f7570426574610154496e7374616e636537576f726b696e6747726f757028344e6578744f70656e696e67496401002820000000000000000004ac204e657874206964656e7469666965722076616c756520666f72206e6577206a6f62206f70656e696e672e2c4f70656e696e674279496401010402289d09290101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000480204d617073206964656e74696669657220746f206a6f62206f70656e696e672e44416374697665576f726b6572436f756e740100101000000000046420436f756e74206f662061637469766520776f726b6572732e3c4170706c69636174696f6e427949640001040228a109040004c8204d617073206964656e74696669657220746f20776f726b6572206170706c69636174696f6e206f6e206f70656e696e672e444e6578744170706c69636174696f6e496401002820000000000000000004c8204e657874206964656e7469666965722076616c756520666f72206e657720776f726b6572206170706c69636174696f6e2e304e657874576f726b657249640100282000000000000000000488204e657874206964656e74696669657220666f722061206e657720776f726b65722e28576f726b6572427949640001040228a509040004a4204d617073206964656e74696669657220746f20636f72726573706f6e64696e6720776f726b65722e2c43757272656e744c656164000028040004502043757272656e742067726f7570206c6561642e18427564676574010018400000000000000000000000000000000004782042756467657420666f722074686520776f726b696e672067726f75702e38537461747573546578744861736801002c800000000000000000000000000000000000000000000000000000000000000000044820537461747573207465787420686173682e01890601bd0318504d6178576f726b65724e756d6265724c696d697410101e0000000838204578706f72747320636f6e73749c204d61782073696d756c74616e656f75732061637469766520776f726b6572206e756d6265722e5c4d696e556e7374616b696e67506572696f644c696d697410100065040004ac20446566696e6573206d696e20756e7374616b696e6720706572696f6420696e207468652067726f75702e5c4d696e696d756d4170706c69636174696f6e5374616b6518404835261a08030000000000000000000004d4204d696e696d756d207374616b6520726571756972656420666f72206170706c79696e6720696e746f20616e206f70656e696e672e484c65616465724f70656e696e675374616b651840680abf82280f00000000000000000000048c205374616b65206e656564656420746f2063726561746520616e206f70656e696e672e30526577617264506572696f6410108638000004d420446566696e65732074686520706572696f6420657665727920776f726b65722067657473207061696420696e20626c6f636b732e505374616b696e6748616e646c65724c6f636b496429042077672d6f706572620464205374616b696e672068616e646c6572206c6f636b2069642e01c109266c4f7065726174696f6e73576f726b696e6747726f757047616d6d610154496e7374616e636538576f726b696e6747726f757028344e6578744f70656e696e67496401002820000000000000000004ac204e657874206964656e7469666965722076616c756520666f72206e6577206a6f62206f70656e696e672e2c4f70656e696e674279496401010402289d09290101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000480204d617073206964656e74696669657220746f206a6f62206f70656e696e672e44416374697665576f726b6572436f756e740100101000000000046420436f756e74206f662061637469766520776f726b6572732e3c4170706c69636174696f6e427949640001040228a109040004c8204d617073206964656e74696669657220746f20776f726b6572206170706c69636174696f6e206f6e206f70656e696e672e444e6578744170706c69636174696f6e496401002820000000000000000004c8204e657874206964656e7469666965722076616c756520666f72206e657720776f726b6572206170706c69636174696f6e2e304e657874576f726b657249640100282000000000000000000488204e657874206964656e74696669657220666f722061206e657720776f726b65722e28576f726b6572427949640001040228a509040004a4204d617073206964656e74696669657220746f20636f72726573706f6e64696e6720776f726b65722e2c43757272656e744c656164000028040004502043757272656e742067726f7570206c6561642e18427564676574010018400000000000000000000000000000000004782042756467657420666f722074686520776f726b696e672067726f75702e38537461747573546578744861736801002c800000000000000000000000000000000000000000000000000000000000000000044820537461747573207465787420686173682e018d0601c50318504d6178576f726b65724e756d6265724c696d697410101e0000000838204578706f72747320636f6e73749c204d61782073696d756c74616e656f75732061637469766520776f726b6572206e756d6265722e5c4d696e556e7374616b696e67506572696f644c696d697410100065040004ac20446566696e6573206d696e20756e7374616b696e6720706572696f6420696e207468652067726f75702e5c4d696e696d756d4170706c69636174696f6e5374616b6518404835261a08030000000000000000000004d4204d696e696d756d207374616b6520726571756972656420666f72206170706c79696e6720696e746f20616e206f70656e696e672e484c65616465724f70656e696e675374616b651840680abf82280f00000000000000000000048c205374616b65206e656564656420746f2063726561746520616e206f70656e696e672e30526577617264506572696f6410109038000004d420446566696e65732074686520706572696f6420657665727920776f726b65722067657473207061696420696e20626c6f636b732e505374616b696e6748616e646c65724c6f636b496429042077672d6f706572670464205374616b696e672068616e646c6572206c6f636b2069642e01c5092760446973747269627574696f6e576f726b696e6747726f75700154496e7374616e636539576f726b696e6747726f757028344e6578744f70656e696e67496401002820000000000000000004ac204e657874206964656e7469666965722076616c756520666f72206e6577206a6f62206f70656e696e672e2c4f70656e696e674279496401010402289d09290101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000480204d617073206964656e74696669657220746f206a6f62206f70656e696e672e44416374697665576f726b6572436f756e740100101000000000046420436f756e74206f662061637469766520776f726b6572732e3c4170706c69636174696f6e427949640001040228a109040004c8204d617073206964656e74696669657220746f20776f726b6572206170706c69636174696f6e206f6e206f70656e696e672e444e6578744170706c69636174696f6e496401002820000000000000000004c8204e657874206964656e7469666965722076616c756520666f72206e657720776f726b6572206170706c69636174696f6e2e304e657874576f726b657249640100282000000000000000000488204e657874206964656e74696669657220666f722061206e657720776f726b65722e28576f726b6572427949640001040228a509040004a4204d617073206964656e74696669657220746f20636f72726573706f6e64696e6720776f726b65722e2c43757272656e744c656164000028040004502043757272656e742067726f7570206c6561642e18427564676574010018400000000000000000000000000000000004782042756467657420666f722074686520776f726b696e672067726f75702e38537461747573546578744861736801002c800000000000000000000000000000000000000000000000000000000000000000044820537461747573207465787420686173682e01910601cd0318504d6178576f726b65724e756d6265724c696d69741010320000000838204578706f72747320636f6e73749c204d61782073696d756c74616e656f75732061637469766520776f726b6572206e756d6265722e5c4d696e556e7374616b696e67506572696f644c696d697410100065040004ac20446566696e6573206d696e20756e7374616b696e6720706572696f6420696e207468652067726f75702e5c4d696e696d756d4170706c69636174696f6e5374616b6518404835261a08030000000000000000000004d4204d696e696d756d207374616b6520726571756972656420666f72206170706c79696e6720696e746f20616e206f70656e696e672e484c65616465724f70656e696e675374616b651840680abf82280f00000000000000000000048c205374616b65206e656564656420746f2063726561746520616e206f70656e696e672e30526577617264506572696f6410109a38000004d420446566696e65732074686520706572696f6420657665727920776f726b65722067657473207061696420696e20626c6f636b732e505374616b696e6748616e646c65724c6f636b496429042077672d64697374720464205374616b696e672068616e646c6572206c6f636b2069642e01c90928cd09042048436865636b4e6f6e5a65726f53656e646572e1097c40436865636b5370656356657273696f6ee5091038436865636b547856657273696f6ee9091030436865636b47656e65736973ed092c38436865636b4d6f7274616c697479f1092c28436865636b4e6f6e6365f9097c2c436865636b576569676874fd097c604368617267655472616e73616374696f6e5061796d656e74010a7c050a","id":"1"} \ No newline at end of file diff --git a/cli/package.json b/cli/package.json index bfcd6c4ebd..4b4ac39372 100644 --- a/cli/package.json +++ b/cli/package.json @@ -1,7 +1,7 @@ { "name": "@joystream/cli", "description": "Command Line Interface for Joystream community and governance activities", - "version": "1.4.0", + "version": "1.5.0", "author": "Leszek Wiesner", "bin": { "joystream-cli": "./bin/run" @@ -17,13 +17,13 @@ "@oclif/plugin-help": "^3.2.2", "@oclif/plugin-not-found": "^1.2.4", "@oclif/plugin-warn-if-update-available": "^1.7.0", - "@polkadot/api": "8.9.1", - "@polkadot/keyring": "9.5.1", - "@polkadot/util": "9.5.1", - "@polkadot/util-crypto": "9.5.1", - "@substrate/txwrapper-core": "3.1.3", - "@substrate/txwrapper-substrate": "3.1.3", - "@substrate/txwrapper-polkadot": "3.1.3", + "@polkadot/api": "10.1.4", + "@polkadot/keyring": "11.1.1", + "@polkadot/util": "11.1.1", + "@polkadot/util-crypto": "11.1.1", + "@substrate/txwrapper-core": "6.0.1", + "@substrate/txwrapper-substrate": "6.0.1", + "@substrate/txwrapper-polkadot": "6.0.1", "@types/cli-progress": "^3.9.1", "@types/fluent-ffmpeg": "^2.1.16", "@types/inquirer": "^6.5.0", @@ -56,7 +56,7 @@ "proper-lockfile": "^4.1.1", "slug": "^2.1.1", "tslib": "^1.11.1", - "@joystream/js": "^1.8.0" + "@joystream/js": "^1.10.0" }, "devDependencies": { "@graphql-codegen/cli": "^1.21.4", @@ -78,7 +78,7 @@ "mocha": "^5.2.0", "nyc": "^14.1.1", "ts-node": "^10.2.1", - "typescript": "^4.4.3" + "typescript": "^5.0.2" }, "engines": { "node": ">=14.18.0", diff --git a/cli/src/base/AdvancedTransactionsCommandBase.ts b/cli/src/base/AdvancedTransactionsCommandBase.ts index da5f3388f5..0a08dd9082 100644 --- a/cli/src/base/AdvancedTransactionsCommandBase.ts +++ b/cli/src/base/AdvancedTransactionsCommandBase.ts @@ -19,6 +19,11 @@ import { createKeyMulti, encodeAddress, sortAddresses } from '@polkadot/util-cry import ExitCodes from '../ExitCodes' import fs from 'fs' +export type Weight = { + refTime: number | string + proofSize: number | string +} + export default abstract class AdvancedTransactionsCommandBase extends AccountsCommandBase { async getApproveAsMultiInputFromFile(filePath: string): Promise { return getInputJson(filePath) @@ -58,7 +63,7 @@ export default abstract class AdvancedTransactionsCommandBase extends AccountsCo threshold: number | undefined, others: string | undefined, callHash: string, - maxWeight: number + maxWeight: Weight ): Promise { let argsInput: MultiSigApproveAsMulti let otherSignatories: string[] = [] @@ -104,7 +109,7 @@ export default abstract class AdvancedTransactionsCommandBase extends AccountsCo timepointIndex: number | undefined, others: string | undefined, callHash: string, - maxWeight: number + maxWeight: Weight ): Promise { let argsInput: MultiSigApproveAsMulti let otherSignatories: string[] = [] @@ -154,14 +159,14 @@ export default abstract class AdvancedTransactionsCommandBase extends AccountsCo timepointIndex: number | undefined, others: string | undefined, call: string, - maxWeight: number + maxWeight: Weight ): Promise { if (input) { const args = await this.getAsMultiInputFromFile(input) const otherSignatories = args.otherSignatories as string[] const otherSignatoriesSorted = sortAddresses(otherSignatories, JOYSTREAM_ADDRESS_PREFIX) args.otherSignatories = otherSignatoriesSorted - const maxWeightChanged = maxWeight !== (args.maxWeight as number) + const maxWeightChanged = maxWeight !== args.maxWeight if (maxWeightChanged) { this.warn(`"maxWeight" changed from ${args.maxWeight} to ${maxWeight}.`) } @@ -266,10 +271,16 @@ export default abstract class AdvancedTransactionsCommandBase extends AccountsCo return unsigned } - async getWeight(call: Call): Promise { + async getWeight(call: Call): Promise { const callData = this.getOriginalApi().tx(call) - const paymentWeight = await this.getOriginalApi().rpc.payment.queryInfo(callData.toHex()) - return paymentWeight.weight.toNumber() + const dispatchInfo = await this.getOriginalApi().call.transactionPaymentApi.queryInfo( + callData.toHex(), + callData.length + ) + return { + refTime: dispatchInfo.weight.refTime.toNumber(), + proofSize: dispatchInfo.weight.proofSize.toNumber(), + } } createTransactionReadyForSigning( diff --git a/cli/src/base/FeeProfileCommandBase.ts b/cli/src/base/FeeProfileCommandBase.ts index 34f34308c7..47e3a6fe0a 100644 --- a/cli/src/base/FeeProfileCommandBase.ts +++ b/cli/src/base/FeeProfileCommandBase.ts @@ -120,9 +120,9 @@ export default abstract class FeeProfileCommandBase extends ApiCommandBase { txClass: txClass.type, txLength, txWeight: { - base: this.formatBN(baseExtrinsicWeight), - extra: this.formatBN(weight), - total: this.formatBN(baseExtrinsicWeight.add(weight)), + base: this.formatBN(baseExtrinsicWeight.refTime.toBn()), + extra: this.formatBN(weight.refTime.toBn()), + total: this.formatBN(baseExtrinsicWeight.refTime.toBn().add(weight.refTime.toBn())), }, costs: costsProfile, returns: returnsProfile, diff --git a/cli/src/commands/content/deleteChannelAsModerator.ts b/cli/src/commands/content/deleteChannelAsModerator.ts deleted file mode 100644 index 700f4b25dc..0000000000 --- a/cli/src/commands/content/deleteChannelAsModerator.ts +++ /dev/null @@ -1,88 +0,0 @@ -import ContentDirectoryCommandBase from '../../base/ContentDirectoryCommandBase' -import { flags } from '@oclif/command' -import chalk from 'chalk' -import ExitCodes from '../../ExitCodes' -import { formatBalance } from '@polkadot/util' -import BN from 'bn.js' - -export default class DeleteChannelAsModeratorCommand extends ContentDirectoryCommandBase { - static description = 'Delete the channel and optionally all associated data objects.' - - static flags = { - channelId: flags.integer({ - char: 'c', - required: true, - description: 'ID of the Channel', - }), - force: flags.boolean({ - char: 'f', - default: false, - description: 'Force-remove all associated channel data objects', - }), - rationale: flags.string({ - char: 'r', - required: true, - description: 'Reason of deleting the channel by moderator', - }), - context: ContentDirectoryCommandBase.moderationActionContextFlag, - ...ContentDirectoryCommandBase.flags, - } - - async run(): Promise { - const { channelId, force, rationale, context } = this.parse(DeleteChannelAsModeratorCommand).flags - // Context - const channel = await this.getApi().channelById(channelId) - const [actor, address] = await this.getModerationActionActor(context) - - // Ensure moderator has required permission - if (!(await this.isModeratorWithRequiredPermission(actor, channel.privilegeLevel, 'DeleteChannel'))) { - this.error(`Only content lead or curator with "DeleteChannel" permission can delete channel ${channelId}!`, { - exit: ExitCodes.AccessDenied, - }) - } - - if (channel.numVideos.toNumber()) { - this.error( - `This channel still has ${channel.numVideos.toNumber()} associated video(s)!\n` + - `Delete the videos first using ${chalk.magentaBright('content:deleteVideo')} command` - ) - } - - const dataObjectsInfo = this.isQueryNodeUriSet() - ? await this.getDataObjectsInfoFromQueryNode(channelId) - : await this.getDataObjectsInfoFromChain(channelId) - - if (dataObjectsInfo.length) { - if (!force) { - this.error(`Cannot remove associated data objects unless ${chalk.magentaBright('--force')} flag is used`, { - exit: ExitCodes.InvalidInput, - }) - } - const stateBloatBond = dataObjectsInfo.reduce((sum, [, bloatBond]) => sum.add(bloatBond), new BN(0)) - this.log( - `Channel state bloat bond of ${chalk.cyanBright( - formatBalance(channel.channelStateBloatBond.amount) - )} will be transferred to ${chalk.magentaBright( - channel.channelStateBloatBond.repaymentRestrictedTo.unwrapOr(address).toString() - )}\n` + - `Data objects state bloat bond of ${chalk.cyanBright( - formatBalance(stateBloatBond) - )} will be repaid with accordance to the bloat bond policy.` - ) - } - - await this.requireConfirmation( - `Are you sure you want to remove channel ${chalk.magentaBright(channelId.toString())}${ - force ? ' and all associated data objects' : '' - }?` - ) - - await this.sendAndFollowNamedTx(await this.getDecodedPair(address), 'content', 'deleteChannelAsModerator', [ - actor, - channelId, - await this.getChannelBagWitness(channelId), - force ? dataObjectsInfo.length : 0, - rationale, - ]) - } -} diff --git a/cli/src/commands/content/deleteVideoAsModerator.ts b/cli/src/commands/content/deleteVideoAsModerator.ts deleted file mode 100644 index c2230e46e4..0000000000 --- a/cli/src/commands/content/deleteVideoAsModerator.ts +++ /dev/null @@ -1,98 +0,0 @@ -import ContentDirectoryCommandBase from '../../base/ContentDirectoryCommandBase' -import { flags } from '@oclif/command' -import BN from 'bn.js' -import chalk from 'chalk' -import { formatBalance } from '@polkadot/util' -import { createType } from '@joystream/types' -import ExitCodes from '../../ExitCodes' - -export default class DeleteVideoAsModeratorCommand extends ContentDirectoryCommandBase { - static description = 'Delete the video and optionally all associated data objects.' - - protected requiresQueryNode = true - - static flags = { - videoId: flags.integer({ - char: 'v', - required: true, - description: 'ID of the Video', - }), - force: flags.boolean({ - char: 'f', - default: false, - description: 'Force-remove all associated video data objects', - }), - rationale: flags.string({ - char: 'r', - required: true, - description: 'reason of deleting the video by moderator', - }), - context: ContentDirectoryCommandBase.moderationActionContextFlag, - ...ContentDirectoryCommandBase.flags, - } - - async getDataObjectsInfo(videoId: number): Promise<[string, BN][]> { - const dataObjects = await this.getQNApi().dataObjectsByVideoId(videoId.toString()) - - if (dataObjects.length) { - this.log('Following data objects are still associated with the video:') - dataObjects.forEach((o) => { - this.log(`${o.id} - ${o.type.__typename}`) - }) - } - - return dataObjects.map((o) => [o.id, new BN(o.stateBloatBond)]) - } - - async run(): Promise { - const { - flags: { videoId, force, rationale, context }, - } = this.parse(DeleteVideoAsModeratorCommand) - // Context - const [actor, address] = await this.getModerationActionActor(context) - // ensure video exists - const { inChannel, videoStateBloatBond } = await this.getApi().videoById(videoId) - const { privilegeLevel } = await this.getApi().channelById(inChannel) - - // Ensure moderator has required permission - if (!(await this.isModeratorWithRequiredPermission(actor, privilegeLevel, 'DeleteVideo'))) { - this.error(`Only content lead or curator with "DeleteVideo" permission can delete video ${videoId}!`, { - exit: ExitCodes.AccessDenied, - }) - } - - const dataObjectsInfo = await this.getDataObjectsInfo(videoId) - if (dataObjectsInfo.length) { - if (!force) { - this.error(`Cannot remove associated data objects unless ${chalk.magentaBright('--force')} flag is used`, { - exit: ExitCodes.InvalidInput, - }) - } - const stateBloatBond = dataObjectsInfo.reduce((sum, [, bloatBond]) => sum.add(bloatBond), new BN(0)) - this.log( - `Video state bloat bond of ${chalk.cyanBright( - formatBalance(videoStateBloatBond.amount) - )} will be transferred to ${chalk.magentaBright( - videoStateBloatBond.repaymentRestrictedTo.unwrapOr(address).toString() - )}\n` + - `Data objects state bloat bond of ${chalk.cyanBright( - formatBalance(stateBloatBond) - )} will be repaid with accordance to the bloat bond policy.` - ) - } - - await this.requireConfirmation( - `Are you sure you want to remove video ${chalk.magentaBright(videoId)}${ - force ? ' and all associated data objects' : '' - }?` - ) - - await this.sendAndFollowNamedTx(await this.getDecodedPair(address), 'content', 'deleteVideoAsModerator', [ - actor, - videoId, - createType('Option', await this.getStorageBucketsNumWitness(inChannel)), - dataObjectsInfo.length, - rationale, - ]) - } -} diff --git a/cli/src/commands/working-groups/createOpening.ts b/cli/src/commands/working-groups/createOpening.ts index bfbf448952..f21ef3b7c3 100644 --- a/cli/src/commands/working-groups/createOpening.ts +++ b/cli/src/commands/working-groups/createOpening.ts @@ -22,6 +22,7 @@ import Long from 'long' import moment from 'moment' import { UpcomingWorkingGroupOpeningDetailsFragment } from '../../graphql/generated/queries' import { DEFAULT_DATE_FORMAT } from '../../Consts' +import { JSONSchema4 } from 'json-schema' export default class WorkingGroupsCreateOpening extends WorkingGroupsCommandBase { static description = 'Create working group opening / upcoming opening (requires lead access)' @@ -93,7 +94,7 @@ export default class WorkingGroupsCreateOpening extends WorkingGroupsCommandBase const api = this.getOriginalApi() const openingDefaults = rememberedInput const openingPrompt = new JsonSchemaPrompter( - WorkingGroupOpeningInputSchema(api), + WorkingGroupOpeningInputSchema(api) as JSONSchema4, // Update the type of the argument openingDefaults ) const openingParamsJson = await openingPrompt.promptAll() diff --git a/devops/ansible/roles/common/tasks/build-binaries.yml b/devops/ansible/roles/common/tasks/build-binaries.yml index dc5a3af2bb..a6258446d4 100644 --- a/devops/ansible/roles/common/tasks/build-binaries.yml +++ b/devops/ansible/roles/common/tasks/build-binaries.yml @@ -5,9 +5,9 @@ shell: cmd: | bash -ic " - rustup install nightly-2022-05-11 - rustup target add wasm32-unknown-unknown --toolchain nightly-2022-05-11 - rustup component add --toolchain nightly-2022-05-11 clippy + rustup install nightly-2022-11-15 + rustup target add wasm32-unknown-unknown --toolchain nightly-2022-11-15 + rustup component add --toolchain nightly-2022-11-15 clippy rustup component add rustfmt " args: diff --git a/devops/ansible/roles/common/tasks/install-tools.yml b/devops/ansible/roles/common/tasks/install-tools.yml index c151792acb..db13cfff5b 100644 --- a/devops/ansible/roles/common/tasks/install-tools.yml +++ b/devops/ansible/roles/common/tasks/install-tools.yml @@ -31,6 +31,8 @@ - cmake - dpkg - lsb-release + - protobuf-compiler + - libprotobuf-dev state: latest # ref: https://docs.docker.com/engine/install/ubuntu/#uninstall-old-versions diff --git a/devops/frame-weight-template.hbs b/devops/frame-weight-template.hbs index 207ff21fb1..6591ddd6b3 100644 --- a/devops/frame-weight-template.hbs +++ b/devops/frame-weight-template.hbs @@ -43,27 +43,38 @@ impl WeightInfo for SubstrateWeight { {{#each benchmark.comments as |comment|}} // {{comment}} {{/each}} + {{#each benchmark.component_ranges as |range|}} + /// The range of component `{{range.name}}` is `[{{range.min}}, {{range.max}}]`. + {{/each}} fn {{benchmark.name~}} ( {{~#each benchmark.components as |c| ~}} {{~#if (not c.is_used)}}_{{/if}}{{c.name}}: u32, {{/each~}} ) -> Weight { - ({{underscore benchmark.base_weight}} as Weight) + // Proof Size summary in bytes: + // Measured: `{{benchmark.base_recorded_proof_size}}{{#each benchmark.component_recorded_proof_size as |cp|}} + {{cp.name}} * ({{cp.slope}} ±{{underscore cp.error}}){{/each}}` + // Estimated: `{{benchmark.base_calculated_proof_size}}{{#each benchmark.component_calculated_proof_size as |cp|}} + {{cp.name}} * ({{cp.slope}} ±{{underscore cp.error}}){{/each}}` + // Minimum execution time: {{underscore benchmark.min_execution_time}} nanoseconds. + Weight::from_parts({{underscore benchmark.base_weight}}, 0u64) + .saturating_add(Weight::from_parts(0, {{benchmark.base_calculated_proof_size}})) {{#each benchmark.component_weight as |cw|}} // Standard Error: {{underscore cw.error}} - .saturating_add(({{underscore cw.slope}} as Weight).saturating_mul({{cw.name}} as Weight)) + .saturating_add(Weight::from_parts({{underscore cw.slope}}, 0u64).saturating_mul({{cw.name}}.into())) {{/each}} {{#if (ne benchmark.base_reads "0")}} - .saturating_add(T::DbWeight::get().reads({{benchmark.base_reads}} as Weight)) + .saturating_add(T::DbWeight::get().reads({{benchmark.base_reads}}_u64)) {{/if}} {{#each benchmark.component_reads as |cr|}} - .saturating_add(T::DbWeight::get().reads(({{cr.slope}} as Weight).saturating_mul({{cr.name}} as Weight))) + .saturating_add(T::DbWeight::get().reads(({{cr.slope}}_u64).saturating_mul({{cr.name}}.into()))) {{/each}} {{#if (ne benchmark.base_writes "0")}} - .saturating_add(T::DbWeight::get().writes({{benchmark.base_writes}} as Weight)) + .saturating_add(T::DbWeight::get().writes({{benchmark.base_writes}}_u64)) {{/if}} {{#each benchmark.component_writes as |cw|}} - .saturating_add(T::DbWeight::get().writes(({{cw.slope}} as Weight).saturating_mul({{cw.name}} as Weight))) + .saturating_add(T::DbWeight::get().writes(({{cw.slope}}_u64).saturating_mul({{cw.name}}.into()))) + {{/each}} + {{#each benchmark.component_calculated_proof_size as |cp|}} + .saturating_add(Weight::from_parts(0, {{cp.slope}}).saturating_mul({{cp.name}}.into())) {{/each}} } {{/each}} diff --git a/devops/joystream-pallet-weight-template.hbs b/devops/joystream-pallet-weight-template.hbs index 1fdd5ac53b..9d77f50170 100644 --- a/devops/joystream-pallet-weight-template.hbs +++ b/devops/joystream-pallet-weight-template.hbs @@ -52,27 +52,38 @@ impl WeightInfo for SubstrateWeight { {{#each benchmark.comments as |comment|}} // {{comment}} {{/each}} + {{#each benchmark.component_ranges as |range|}} + /// The range of component `{{range.name}}` is `[{{range.min}}, {{range.max}}]`. + {{/each}} fn {{benchmark.name~}} ( {{~#each benchmark.components as |c| ~}} {{~#if (not c.is_used)}}_{{/if}}{{c.name}}: u32, {{/each~}} ) -> Weight { - ({{underscore benchmark.base_weight}} as Weight) + // Proof Size summary in bytes: + // Measured: `{{benchmark.base_recorded_proof_size}}{{#each benchmark.component_recorded_proof_size as |cp|}} + {{cp.name}} * ({{cp.slope}} ±{{underscore cp.error}}){{/each}}` + // Estimated: `{{benchmark.base_calculated_proof_size}}{{#each benchmark.component_calculated_proof_size as |cp|}} + {{cp.name}} * ({{cp.slope}} ±{{underscore cp.error}}){{/each}}` + // Minimum execution time: {{underscore benchmark.min_execution_time}} nanoseconds. + Weight::from_parts({{underscore benchmark.base_weight}}, 0u64) + .saturating_add(Weight::from_parts(0, {{benchmark.base_calculated_proof_size}})) {{#each benchmark.component_weight as |cw|}} // Standard Error: {{underscore cw.error}} - .saturating_add(({{underscore cw.slope}} as Weight).saturating_mul({{cw.name}} as Weight)) + .saturating_add(Weight::from_parts({{underscore cw.slope}}, 0u64).saturating_mul({{cw.name}}.into())) {{/each}} {{#if (ne benchmark.base_reads "0")}} - .saturating_add(T::DbWeight::get().reads({{benchmark.base_reads}} as Weight)) + .saturating_add(T::DbWeight::get().reads({{benchmark.base_reads}}_u64)) {{/if}} {{#each benchmark.component_reads as |cr|}} - .saturating_add(T::DbWeight::get().reads(({{cr.slope}} as Weight).saturating_mul({{cr.name}} as Weight))) + .saturating_add(T::DbWeight::get().reads(({{cr.slope}}_u64).saturating_mul({{cr.name}}.into()))) {{/each}} {{#if (ne benchmark.base_writes "0")}} - .saturating_add(T::DbWeight::get().writes({{benchmark.base_writes}} as Weight)) + .saturating_add(T::DbWeight::get().writes({{benchmark.base_writes}}_u64)) {{/if}} {{#each benchmark.component_writes as |cw|}} - .saturating_add(T::DbWeight::get().writes(({{cw.slope}} as Weight).saturating_mul({{cw.name}} as Weight))) + .saturating_add(T::DbWeight::get().writes(({{cw.slope}}_u64).saturating_mul({{cw.name}}.into()))) + {{/each}} + {{#each benchmark.component_calculated_proof_size as |cp|}} + .saturating_add(Weight::from_parts(0, {{cp.slope}}).saturating_mul({{cp.name}}.into())) {{/each}} } {{/each}} @@ -86,7 +97,7 @@ impl WeightInfo for () { {{~#each benchmark.components as |c| ~}} {{~#if (not c.is_used)}}_{{/if}}{{c.name}}: u32, {{/each~}} ) -> Weight { - 0 + Weight::from_parts(0, 0) } {{/each}} } diff --git a/distributor-node/CHANGELOG.md b/distributor-node/CHANGELOG.md index 905ade51ad..7ad063384b 100644 --- a/distributor-node/CHANGELOG.md +++ b/distributor-node/CHANGELOG.md @@ -1,3 +1,7 @@ +### 2.1.0 + +- Nara release. + ### 2.0.0 - Replaced `Query-Node` API with `Storage-Squid` Graphql API. This is a breaking change and requires the `endpoints.queryNode` configuration option to be replaced with `endpoints.storageSquid`. diff --git a/distributor-node/client/package.json b/distributor-node/client/package.json index f4e328ea16..161215fe2d 100644 --- a/distributor-node/client/package.json +++ b/distributor-node/client/package.json @@ -8,7 +8,7 @@ "axios": "^0.21.1" }, "devDependencies": { - "typescript": "^4.4.3" + "typescript": "^5.0.2" }, "engines": { "node": ">=14.18.0" diff --git a/distributor-node/package.json b/distributor-node/package.json index 7acb87b4b0..57cd643e03 100644 --- a/distributor-node/package.json +++ b/distributor-node/package.json @@ -1,7 +1,7 @@ { "name": "@joystream/distributor-cli", "description": "Joystream distributor node CLI", - "version": "2.0.0", + "version": "2.1.0", "author": "Joystream contributors", "bin": { "joystream-distributor": "./bin/run" @@ -10,10 +10,10 @@ "dependencies": { "@apollo/client": "^3.2.5", "@elastic/ecs-winston-format": "^1.1.0", - "@joystream/metadata-protobuf": "^2.8.0", + "@joystream/metadata-protobuf": "^2.15.0", "@joystream/opentelemetry": "1.0.0", "@joystream/storage-node-client": "^4.0.0", - "@joystream/types": "^2.0.0", + "@joystream/types": "^4.0.0", "@nerdwallet/apollo-cache-policies": "2.10.0", "@oclif/command": "^1", "@oclif/config": "^1", @@ -82,7 +82,7 @@ "nyc": "^14", "openapi-typescript": "^4.0.2", "ts-node": "^10.9.1", - "typescript": "^3.3", + "typescript": "^5.0.2", "widdershins": "^4.0.1" }, "engines": { diff --git a/docker-compose-no-bind-volumes.yml b/docker-compose-no-bind-volumes.yml index 559f5b7bb6..4aab4d0180 100644 --- a/docker-compose-no-bind-volumes.yml +++ b/docker-compose-no-bind-volumes.yml @@ -7,7 +7,10 @@ services: container_name: joystream-node volumes: - chain-data:/data - command: --dev --alice --validator --pruning=archive --unsafe-ws-external --unsafe-rpc-external --rpc-methods Safe --rpc-cors=all --log runtime --base-path /data + environment: + - CHAIN=${CHAIN} + command: "--chain ${CHAIN:-dev} --alice --validator --pruning=archive --unsafe-ws-external --unsafe-rpc-external + --rpc-methods Safe --rpc-cors=all --log runtime --base-path /data --no-hardware-benchmarks" ports: - 9944:9944 - 9933:9933 @@ -226,7 +229,7 @@ services: " indexer: - image: joystream/hydra-indexer:v5.0.0-alpha.1 + image: joystream/hydra-indexer:v5.0.0-alpha.7 container_name: indexer restart: unless-stopped env_file: @@ -234,10 +237,11 @@ services: - .env environment: - DB_NAME=${INDEXER_DB_NAME} - - INDEXER_WORKERS=5 + - WORKERS_NUMBER=5 - REDIS_URI=redis://redis:6379/0 - WS_PROVIDER_ENDPOINT_URI=${JOYSTREAM_NODE_WS} - DB_HOST=db + - PGSSLMODE=disable depends_on: - db - redis @@ -247,7 +251,7 @@ services: sh -c "yarn db:bootstrap && yarn start:prod" hydra-indexer-gateway: - image: joystream/hydra-indexer-gateway:5.0.0-alpha.1 + image: joystream/hydra-indexer-gateway:5.0.0-alpha.7 container_name: hydra-indexer-gateway restart: unless-stopped env_file: @@ -262,6 +266,7 @@ services: - WARTHOG_STARTER_REDIS_URI=redis://redis:6379/0 - WARTHOG_APP_PORT=${HYDRA_INDEXER_GATEWAY_PORT} - PORT=${HYDRA_INDEXER_GATEWAY_PORT} + - PGSSLMODE=disable ports: - "${HYDRA_INDEXER_GATEWAY_PORT}:${HYDRA_INDEXER_GATEWAY_PORT}" depends_on: diff --git a/docker-compose.yml b/docker-compose.yml index 79feaa0fb7..39d57d5ed5 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -7,7 +7,10 @@ services: container_name: joystream-node volumes: - chain-data:/data - command: --dev --alice --validator --pruning=archive --unsafe-ws-external --unsafe-rpc-external --rpc-methods Safe --rpc-cors=all --log runtime --base-path /data + environment: + - CHAIN=${CHAIN} + command: "--chain ${CHAIN:-dev} --alice --validator --pruning=archive --unsafe-ws-external --unsafe-rpc-external + --rpc-methods Safe --rpc-cors=all --log runtime --base-path /data --no-hardware-benchmarks" ports: - 9944:9944 - 9933:9933 @@ -237,7 +240,7 @@ services: " indexer: - image: joystream/hydra-indexer:v5.0.0-alpha.1 + image: joystream/hydra-indexer:v5.0.0-alpha.8 container_name: indexer restart: unless-stopped env_file: @@ -245,10 +248,11 @@ services: - .env environment: - DB_NAME=${INDEXER_DB_NAME} - - INDEXER_WORKERS=5 + - WORKERS_NUMBER=5 - REDIS_URI=redis://redis:6379/0 - WS_PROVIDER_ENDPOINT_URI=${JOYSTREAM_NODE_WS} - DB_HOST=db + - PGSSLMODE=disable depends_on: - db - redis @@ -258,7 +262,7 @@ services: sh -c "yarn db:bootstrap && yarn start:prod" hydra-indexer-gateway: - image: joystream/hydra-indexer-gateway:5.0.0-alpha.1 + image: joystream/hydra-indexer-gateway:5.0.0-alpha.8 container_name: hydra-indexer-gateway restart: unless-stopped env_file: @@ -273,6 +277,7 @@ services: - WARTHOG_STARTER_REDIS_URI=redis://redis:6379/0 - WARTHOG_APP_PORT=${HYDRA_INDEXER_GATEWAY_PORT} - PORT=${HYDRA_INDEXER_GATEWAY_PORT} + - PGSSLMODE=disable ports: - "${HYDRA_INDEXER_GATEWAY_PORT}:${HYDRA_INDEXER_GATEWAY_PORT}" depends_on: diff --git a/joystream-node.Dockerfile b/joystream-node.Dockerfile index ede5d8976a..91c46a533f 100644 --- a/joystream-node.Dockerfile +++ b/joystream-node.Dockerfile @@ -1,16 +1,17 @@ -FROM rust:1.61.0-buster AS rust +FROM rust:1.67.0-buster AS rust WORKDIR /joystream RUN apt-get update && \ apt-get install -y curl git gcc xz-utils sudo pkg-config unzip clang llvm libc6-dev cmake +RUN apt install -y protobuf-compiler libprotobuf-dev +ARG CARGO_UNSTABLE_SPARSE_REGISTRY=true +ARG CARGO_NET_GIT_FETCH_WITH_CLI=true RUN rustup self update -RUN rustup install nightly-2022-05-11 --force -RUN rustup default nightly-2022-05-11 -RUN rustup target add wasm32-unknown-unknown --toolchain nightly-2022-05-11 -RUN rustup component add --toolchain nightly-2022-05-11 clippy +RUN rustup install nightly-2022-11-15 +RUN rustup default nightly-2022-11-15 +RUN rustup target add wasm32-unknown-unknown --toolchain nightly-2022-11-15 +RUN rustup component add --toolchain nightly-2022-11-15 clippy RUN rustup install nightly -# Temporary build fix by using older version of cargo-chef -# https://github.com/Joystream/joystream/issues/4745 -RUN cargo +nightly install cargo-chef@0.1.57 +RUN cargo +nightly install cargo-chef@0.1.62 FROM rust AS planner LABEL description="Cargo chef prepare" @@ -21,13 +22,17 @@ COPY bin ./bin COPY runtime ./runtime COPY runtime-modules ./runtime-modules COPY joy-mainnet.json . -RUN cargo chef prepare --recipe-path /joystream/recipe.json +ARG CARGO_UNSTABLE_SPARSE_REGISTRY=true +ARG CARGO_NET_GIT_FETCH_WITH_CLI=true +RUN cargo +nightly chef prepare --recipe-path /joystream/recipe.json FROM rust AS cacher LABEL description="Cargo chef cook dependencies" WORKDIR /joystream COPY --from=planner /joystream/recipe.json /joystream/recipe.json -ARG WASM_BUILD_TOOLCHAIN=nightly-2022-05-11 +ARG WASM_BUILD_TOOLCHAIN=nightly-2022-11-15 +ARG CARGO_UNSTABLE_SPARSE_REGISTRY=true +ARG CARGO_NET_GIT_FETCH_WITH_CLI=true # Build dependencies - this is the caching Docker layer! RUN cargo chef cook --release --recipe-path /joystream/recipe.json @@ -48,11 +53,13 @@ COPY --from=cacher $CARGO_HOME $CARGO_HOME # Ensure our tests and linter pass before actual build ARG CARGO_FEATURES RUN echo "CARGO_FEATURES=$CARGO_FEATURES" -ARG WASM_BUILD_TOOLCHAIN=nightly-2022-05-11 +ARG WASM_BUILD_TOOLCHAIN=nightly-2022-11-15 ARG GIT_COMMIT_HASH="unknown" ARG CODE_SHASUM +ARG CARGO_UNSTABLE_SPARSE_REGISTRY=true +ARG CARGO_NET_GIT_FETCH_WITH_CLI=true RUN SUBSTRATE_CLI_GIT_COMMIT_HASH="${GIT_COMMIT_HASH}-docker-build-${CODE_SHASUM}" \ - cargo build --release --features "${CARGO_FEATURES}" + cargo build --release --locked --features "${CARGO_FEATURES}" FROM ubuntu:22.04 LABEL description="Joystream node" @@ -72,9 +79,9 @@ RUN /joystream/node --version # https://manpages.debian.org/stretch/coreutils/b2sum.1.en.html # RUN apt-get install coreutils # print the blake2 256 hash of the wasm blob -RUN b2sum -l 256 /joystream/runtime.compact.wasm +RUN b2sum -l 256 /joystream/runtime.compact.compressed.wasm # print the blake2 512 hash of the wasm blob -RUN b2sum -l 512 /joystream/runtime.compact.wasm +RUN b2sum -l 512 /joystream/runtime.compact.compressed.wasm EXPOSE 30333 9933 9944 diff --git a/joystreamjs/package.json b/joystreamjs/package.json index 7af3104514..27fa9176a5 100644 --- a/joystreamjs/package.json +++ b/joystreamjs/package.json @@ -1,6 +1,6 @@ { "name": "@joystream/js", - "version": "1.8.0", + "version": "1.10.0", "license": "GPL-3.0-only", "description": "Joystream JS package provides utilities required to work with Joystream network.", "main": "lib/index.js", @@ -41,9 +41,9 @@ "generate:all": "yarn generate:schema-typings" }, "dependencies": { - "@joystream/metadata-protobuf": "^2.13.0", - "@joystream/types": "^2.0.0", - "@polkadot/util-crypto": "9.5.1", + "@joystream/metadata-protobuf": "^2.15.0", + "@joystream/types": "^4.0.0", + "@polkadot/util-crypto": "11.1.1", "axios": "^1.2.1", "buffer": "^6.0.3", "lodash": "^4.17.21", @@ -57,7 +57,7 @@ "eslint": "^7.25.0", "json-schema-to-typescript": "^10.1.4", "prettier": "^2.2.1", - "typescript": "^4.4.3" + "typescript": "^5.0.2" }, "husky": { "hooks": { diff --git a/joystreamjs/yarn.lock b/joystreamjs/yarn.lock deleted file mode 100644 index 5af1669d8a..0000000000 --- a/joystreamjs/yarn.lock +++ /dev/null @@ -1,3440 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@apidevtools/json-schema-ref-parser@9.0.9": - version "9.0.9" - resolved "https://registry.yarnpkg.com/@apidevtools/json-schema-ref-parser/-/json-schema-ref-parser-9.0.9.tgz#d720f9256e3609621280584f2b47ae165359268b" - integrity sha512-GBD2Le9w2+lVFoc4vswGI/TjkNIZSVp7+9xPf+X3uidBfWnAeUWmquteSyt0+VCrhNMWj/FTABISQrD3Z/YA+w== - dependencies: - "@jsdevtools/ono" "^7.1.3" - "@types/json-schema" "^7.0.6" - call-me-maybe "^1.0.1" - js-yaml "^4.1.0" - -"@babel/code-frame@7.12.11": - version "7.12.11" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.11.tgz#f4ad435aa263db935b8f10f2c552d23fb716a63f" - integrity sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw== - dependencies: - "@babel/highlight" "^7.10.4" - -"@babel/helper-validator-identifier@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz#e8c602438c4a8195751243da9031d1607d247cad" - integrity sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw== - -"@babel/highlight@^7.10.4": - version "7.17.12" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.17.12.tgz#257de56ee5afbd20451ac0a75686b6b404257351" - integrity sha512-7yykMVF3hfZY2jsHZEEgLc+3x4o1O+fYyULu11GynEUQNwB6lua+IIQn1FiJxNucd5UlyJryrwsOh8PL9Sn8Qg== - dependencies: - "@babel/helper-validator-identifier" "^7.16.7" - chalk "^2.0.0" - js-tokens "^4.0.0" - -"@babel/runtime@^7.15.3", "@babel/runtime@^7.15.4", "@babel/runtime@^7.16.3", "@babel/runtime@^7.17.2": - version "7.18.3" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.18.3.tgz#c7b654b57f6f63cf7f8b418ac9ca04408c4579f4" - integrity sha512-38Y8f7YUhce/K7RMwTp7m0uCumpv9hZkitCbBClqQIow1qSbCvGkcegKOXpEWCQLfWmevgRiWokZ1GkpfhbZug== - dependencies: - regenerator-runtime "^0.13.4" - -"@babel/runtime@^7.18.3", "@babel/runtime@^7.18.6", "@babel/runtime@^7.18.9": - version "7.19.0" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.19.0.tgz#22b11c037b094d27a8a2504ea4dcff00f50e2259" - integrity sha512-eR8Lo9hnDS7tqkO7NsV+mKvCmv5boaXFSZ70DnfhcgiEne8hv9oCEd36Klw74EtizEqLsy4YnW8UWwpBVolHZA== - dependencies: - regenerator-runtime "^0.13.4" - -"@eslint/eslintrc@^0.4.3": - version "0.4.3" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.4.3.tgz#9e42981ef035beb3dd49add17acb96e8ff6f394c" - integrity sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw== - dependencies: - ajv "^6.12.4" - debug "^4.1.1" - espree "^7.3.0" - globals "^13.9.0" - ignore "^4.0.6" - import-fresh "^3.2.1" - js-yaml "^3.13.1" - minimatch "^3.0.4" - strip-json-comments "^3.1.1" - -"@humanwhocodes/config-array@^0.5.0": - version "0.5.0" - resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.5.0.tgz#1407967d4c6eecd7388f83acf1eaf4d0c6e58ef9" - integrity sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg== - dependencies: - "@humanwhocodes/object-schema" "^1.2.0" - debug "^4.1.1" - minimatch "^3.0.4" - -"@humanwhocodes/object-schema@^1.2.0": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" - integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== - -"@joystream/eslint-config@^1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@joystream/eslint-config/-/eslint-config-1.0.0.tgz#26a96d255698ed0ab0b10d54146b19315c3093bc" - integrity sha512-E5EW5KKi43hQ0chtmeSx2faxAw/Q04GUxcxWgamey54/9edr7CLE6l/wCwJtGDTQ2K6xxgLNJiyGtlnL5WHg6Q== - dependencies: - "@typescript-eslint/eslint-plugin" "3.8.0" - "@typescript-eslint/parser" "3.8.0" - eslint-config-prettier "^6.11.0" - eslint-config-standard "^14.1.1" - eslint-plugin-import "^2.22.0" - eslint-plugin-node "^11.1.0" - eslint-plugin-prettier "^3.1.3" - eslint-plugin-promise "^4.2.1" - eslint-plugin-react "^7.20.5" - eslint-plugin-react-hooks "^4.0.8" - eslint-plugin-standard "^4.0.1" - -"@joystream/metadata-protobuf@^2.0.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@joystream/metadata-protobuf/-/metadata-protobuf-2.2.0.tgz#d840eb30743068ac982372a577aa998eecd5a2c1" - integrity sha512-jx8nd8+bSEYp6mI2m/L2fYZBm3TrToqAXip3F3yf1ijml2yQssEqj0OTHuCm3nEtBttWSFcW6cZJiGf6Nk57Kg== - dependencies: - "@types/iso-3166-2" "^1.0.0" - "@types/long" "^4.0.1" - google-protobuf "^3.14.0" - i18n-iso-countries "^6.8.0" - iso-3166-2 "^1.0.0" - iso-639-1 "^2.1.9" - long "^4.0.0" - protobufjs "^6.11.2" - -"@joystream/types@^0.19.3": - version "0.19.3" - resolved "https://registry.yarnpkg.com/@joystream/types/-/types-0.19.3.tgz#2edae0e2a8fc5ab1e596cf7768adcc280bbf0bf5" - integrity sha512-RBxpMoJp09F8SWKI8e969nzKzkrhOInXpeCL7R8Av1OU0IPyHDxw8dI/9qunQy13m/eJndfGMIEjT/TkX/UTEA== - dependencies: - "@polkadot/api" "5.9.1" - "@polkadot/keyring" "7.3.1" - "@polkadot/types" "5.9.1" - "@types/lodash" "^4.14.157" - "@types/vfile" "^4.0.0" - ajv "^6.11.0" - lodash "^4.17.15" - moment "^2.24.0" - -"@joystream/types@^0.20.2": - version "0.20.2" - resolved "https://registry.yarnpkg.com/@joystream/types/-/types-0.20.2.tgz#e6c570bed9aeb2917e061994b9a1d0d71e67d1d5" - integrity sha512-IS6T97FaR111QTm/mlrvC3JPE7z215PLq+LmRx56EfjTYnrDJ204f/cW0sP4EqfpzlsD3BHUGl2u2Hg1y40MWw== - dependencies: - "@polkadot/api" "8.9.1" - "@polkadot/keyring" "9.5.1" - "@polkadot/types" "8.9.1" - "@types/lodash" "^4.14.157" - "@types/vfile" "^4.0.0" - ajv "^6.11.0" - lodash "^4.17.15" - moment "^2.24.0" - -"@jsdevtools/ono@^7.1.3": - version "7.1.3" - resolved "https://registry.yarnpkg.com/@jsdevtools/ono/-/ono-7.1.3.tgz#9df03bbd7c696a5c58885c34aa06da41c8543796" - integrity sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg== - -"@noble/hashes@1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.1.1.tgz#c056d9b7166c1e7387a7453c2aff199bf7d88e5f" - integrity sha512-Lkp9+NijmV7eSVZqiUvt3UCuuHeJpUVmRrvh430gyJjJiuJMqkeHf6/A9lQ/smmbWV/0spDeJscscPzyB4waZg== - -"@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/secp256k1@1.6.0": - version "1.6.0" - resolved "https://registry.yarnpkg.com/@noble/secp256k1/-/secp256k1-1.6.0.tgz#602afbbfcfb7e169210469b697365ef740d7e930" - integrity sha512-DWSsg8zMHOYMYBqIQi96BQuthZrp98LCeMNcUOaffCIVYQ5yxDbNikLF+H7jEnmNNmXbtVic46iCuVWzar+MgA== - -"@polkadot/api-augment@8.9.1": - version "8.9.1" - resolved "https://registry.yarnpkg.com/@polkadot/api-augment/-/api-augment-8.9.1.tgz#25b0997ccf3d1df4641123e0d9ec29e8fb03ef62" - integrity sha512-yobYURNgoZcZD3QJmE34n3ZcEEUtsiivquckxjJMXnHJv3zahMyJh75tCNAXjzWn+e+SqKTVlgCpLXYlC1HJPQ== - dependencies: - "@babel/runtime" "^7.18.3" - "@polkadot/api-base" "8.9.1" - "@polkadot/rpc-augment" "8.9.1" - "@polkadot/types" "8.9.1" - "@polkadot/types-augment" "8.9.1" - "@polkadot/types-codec" "8.9.1" - "@polkadot/util" "^9.5.1" - -"@polkadot/api-base@8.9.1": - version "8.9.1" - resolved "https://registry.yarnpkg.com/@polkadot/api-base/-/api-base-8.9.1.tgz#e0013bbb8e72678a4eecdfb880854b2e30c840d5" - integrity sha512-2OpS9ArZSuUu9vg2Y5DdK7r1iB1Bjx9e+6qerPGry8um+jI+EsHJESylw5OUrR2DxvtW3Ilrk4YvYpQPa9OB4w== - dependencies: - "@babel/runtime" "^7.18.3" - "@polkadot/rpc-core" "8.9.1" - "@polkadot/types" "8.9.1" - "@polkadot/util" "^9.5.1" - rxjs "^7.5.5" - -"@polkadot/api-derive@5.9.1": - version "5.9.1" - resolved "https://registry.yarnpkg.com/@polkadot/api-derive/-/api-derive-5.9.1.tgz#5937069920ded1439e6672b9d6be1072421b256b" - integrity sha512-iMrVKnYIS3UQciDlFqww6AFyXgG+iN8UqWu8QbTuZecri3qrSmM3Nn8Jkvju3meZIacwWIMSmBcnj8+zef3rkQ== - dependencies: - "@babel/runtime" "^7.15.4" - "@polkadot/api" "5.9.1" - "@polkadot/rpc-core" "5.9.1" - "@polkadot/types" "5.9.1" - "@polkadot/util" "^7.3.1" - "@polkadot/util-crypto" "^7.3.1" - rxjs "^7.3.0" - -"@polkadot/api-derive@8.9.1": - version "8.9.1" - resolved "https://registry.yarnpkg.com/@polkadot/api-derive/-/api-derive-8.9.1.tgz#d701c98db27b86dceac6d3e737f0cab4f9731045" - integrity sha512-zOuNK1tApg3iEC5N4yiOTaMKUykk4tkNU1htcnotOxflgdhYUi22l0JuCrEtrnG6TE2ZH8z1VQA/jK0MbLfC3A== - dependencies: - "@babel/runtime" "^7.18.3" - "@polkadot/api" "8.9.1" - "@polkadot/api-augment" "8.9.1" - "@polkadot/api-base" "8.9.1" - "@polkadot/rpc-core" "8.9.1" - "@polkadot/types" "8.9.1" - "@polkadot/types-codec" "8.9.1" - "@polkadot/util" "^9.5.1" - "@polkadot/util-crypto" "^9.5.1" - rxjs "^7.5.5" - -"@polkadot/api@5.9.1": - version "5.9.1" - resolved "https://registry.yarnpkg.com/@polkadot/api/-/api-5.9.1.tgz#ce314cc34f0a47098d039db7b9036bb491c2898c" - integrity sha512-POpIXn/Ao+NLB0uMldXdXU44dVbRr6+6Ax77Z0R285M8Z2EiF5jl2K3SPvlowLo4SntxiCSaHQxCekYhUcJKlw== - dependencies: - "@babel/runtime" "^7.15.4" - "@polkadot/api-derive" "5.9.1" - "@polkadot/keyring" "^7.3.1" - "@polkadot/rpc-core" "5.9.1" - "@polkadot/rpc-provider" "5.9.1" - "@polkadot/types" "5.9.1" - "@polkadot/types-known" "5.9.1" - "@polkadot/util" "^7.3.1" - "@polkadot/util-crypto" "^7.3.1" - eventemitter3 "^4.0.7" - rxjs "^7.3.0" - -"@polkadot/api@8.9.1": - version "8.9.1" - resolved "https://registry.yarnpkg.com/@polkadot/api/-/api-8.9.1.tgz#c35c5d583845a5d67edfa8c3579bad143f65bcd6" - integrity sha512-UwQ5hWPHruqnBO2hriaPhGaOwaWZx9MVECWFJzVs0ZuhKDge9jyBp+JXud/Ly/+8VbeokYUB0DSZG/gTAO5+vg== - dependencies: - "@babel/runtime" "^7.18.3" - "@polkadot/api-augment" "8.9.1" - "@polkadot/api-base" "8.9.1" - "@polkadot/api-derive" "8.9.1" - "@polkadot/keyring" "^9.5.1" - "@polkadot/rpc-augment" "8.9.1" - "@polkadot/rpc-core" "8.9.1" - "@polkadot/rpc-provider" "8.9.1" - "@polkadot/types" "8.9.1" - "@polkadot/types-augment" "8.9.1" - "@polkadot/types-codec" "8.9.1" - "@polkadot/types-create" "8.9.1" - "@polkadot/types-known" "8.9.1" - "@polkadot/util" "^9.5.1" - "@polkadot/util-crypto" "^9.5.1" - eventemitter3 "^4.0.7" - rxjs "^7.5.5" - -"@polkadot/keyring@7.3.1": - version "7.3.1" - resolved "https://registry.yarnpkg.com/@polkadot/keyring/-/keyring-7.3.1.tgz#bf36115cfb395567bec9cf13c8e3fc0fb39c802a" - integrity sha512-3lbwIjUql8yjs6AR2fMdCgmTc5D9ne7+y2jqHmGjyzVQFz1w1jiHb+N38L0pwl9/23UxmzC3aVvHLfl3gEGSIQ== - dependencies: - "@babel/runtime" "^7.15.3" - "@polkadot/util" "7.3.1" - "@polkadot/util-crypto" "7.3.1" - -"@polkadot/keyring@9.5.1": - version "9.5.1" - resolved "https://registry.yarnpkg.com/@polkadot/keyring/-/keyring-9.5.1.tgz#3b0851f8fffe489f1b6020e69dc9a3a8e5696172" - integrity sha512-ixv2lq1zNzYa+GqZQTzcraNw5ZrTTK+2/sqfeMOIr7gBGk0UCALuK0NCvTRAUtQK1RT2psBkkm2lr/rrNCeK+A== - dependencies: - "@babel/runtime" "^7.18.3" - "@polkadot/util" "9.5.1" - "@polkadot/util-crypto" "9.5.1" - -"@polkadot/keyring@^7.3.1": - version "7.9.2" - resolved "https://registry.yarnpkg.com/@polkadot/keyring/-/keyring-7.9.2.tgz#1f5bf6b7bdb5942d275aebf72d4ed98abe874fa8" - integrity sha512-6UGoIxhiTyISkYEZhUbCPpgVxaneIfb/DBVlHtbvaABc8Mqh1KuqcTIq19Mh9wXlBuijl25rw4lUASrE/9sBqg== - dependencies: - "@babel/runtime" "^7.16.3" - "@polkadot/util" "7.9.2" - "@polkadot/util-crypto" "7.9.2" - -"@polkadot/keyring@^9.5.1": - version "9.7.2" - resolved "https://registry.yarnpkg.com/@polkadot/keyring/-/keyring-9.7.2.tgz#3e252bdcabce4f4e74b8fbcd98d77bb0205af21e" - integrity sha512-qY5baU1qduwTE04Cyrqtf2pCpsIk7Z5vi45CD9U3cbkKXaJoNUqIpfKoL8Vh/yVJBwhclMdxV9E2rEJs8Iv4bg== - dependencies: - "@babel/runtime" "^7.18.6" - "@polkadot/util" "9.7.2" - "@polkadot/util-crypto" "9.7.2" - -"@polkadot/networks@7.3.1": - version "7.3.1" - resolved "https://registry.yarnpkg.com/@polkadot/networks/-/networks-7.3.1.tgz#4d4f7269ff9c285363946175ca95d6aaa08bdacc" - integrity sha512-sK9TyVf1aAWy84usKjNqb6rNiy4UB6cK3iM+bfltzrLHdchjAMPdxMqULNBL8MXjrnuzPpTtsdkGFqp5P69oIQ== - dependencies: - "@babel/runtime" "^7.15.3" - -"@polkadot/networks@7.9.2", "@polkadot/networks@^7.3.1": - version "7.9.2" - resolved "https://registry.yarnpkg.com/@polkadot/networks/-/networks-7.9.2.tgz#03e3f3ac6bdea177517436537826055df60bcb9a" - integrity sha512-4obI1RdW5/7TFwbwKA9oqw8aggVZ65JAUvIFMd2YmMC2T4+NiZLnok0WhRkhZkUnqjLIHXYNwq7Ho1i39dte0g== - dependencies: - "@babel/runtime" "^7.16.3" - -"@polkadot/networks@9.5.1": - version "9.5.1" - resolved "https://registry.yarnpkg.com/@polkadot/networks/-/networks-9.5.1.tgz#876c6cf8915a47e6ace81139197f8b0d36adb362" - integrity sha512-1q9jm7NLk1ZMqFJL+kYkpn1phEO+N0d5LU81ropjYf0hC9boBAya4Zqvv3DwasPuLp6qaj4r0nrfzmkP5xHKZQ== - dependencies: - "@babel/runtime" "^7.18.3" - "@polkadot/util" "9.5.1" - "@substrate/ss58-registry" "^1.22.0" - -"@polkadot/networks@9.7.2", "@polkadot/networks@^9.5.1": - version "9.7.2" - resolved "https://registry.yarnpkg.com/@polkadot/networks/-/networks-9.7.2.tgz#9064f0578b293245bee263367d6f1674eb06e506" - integrity sha512-oMAdF8Y9CLBI0EUZBcycHcvbQQdbkJHevPJ/lwnZXJTaueXuav/Xm2yiFj5J3V8meIjLocURlMawgsAVItXOBQ== - dependencies: - "@babel/runtime" "^7.18.6" - "@polkadot/util" "9.7.2" - "@substrate/ss58-registry" "^1.23.0" - -"@polkadot/rpc-augment@8.9.1": - version "8.9.1" - resolved "https://registry.yarnpkg.com/@polkadot/rpc-augment/-/rpc-augment-8.9.1.tgz#644061c68a9a2abe7f3574ab74b10652acae5707" - integrity sha512-6TtZPVjvjcPy3w4lmcNu3MTU1h2YLkZBVNwUZFnZPhALc9qBy9ZcvkMODLPfD+mj+i8Fcfn4b7Ypj+sNqXFxUQ== - dependencies: - "@babel/runtime" "^7.18.3" - "@polkadot/rpc-core" "8.9.1" - "@polkadot/types" "8.9.1" - "@polkadot/types-codec" "8.9.1" - "@polkadot/util" "^9.5.1" - -"@polkadot/rpc-core@5.9.1": - version "5.9.1" - resolved "https://registry.yarnpkg.com/@polkadot/rpc-core/-/rpc-core-5.9.1.tgz#68e2a2ea18c15aa15743e7487a407fdd65d1d900" - integrity sha512-5fXiICAcjp7ow81DnIl2Dq/xuCtJUqyjJkxe9jNHJWBluBxOouqYDb8bYPPGSdckiaVyYe0l8lA9fBUFMdEt6w== - dependencies: - "@babel/runtime" "^7.15.4" - "@polkadot/rpc-provider" "5.9.1" - "@polkadot/types" "5.9.1" - "@polkadot/util" "^7.3.1" - rxjs "^7.3.0" - -"@polkadot/rpc-core@8.9.1": - version "8.9.1" - resolved "https://registry.yarnpkg.com/@polkadot/rpc-core/-/rpc-core-8.9.1.tgz#79392d2a1d1d5e93549cd0f7fae7f0d71a6fb79d" - integrity sha512-+mAkpxIX2kIovnIIf8uxqjXqPA/7LaeysfIPi8VGrVB3IqvLEaT2rWtCMRSFkBEZwYI7vP7PrAw9co6MMkXlUw== - dependencies: - "@babel/runtime" "^7.18.3" - "@polkadot/rpc-augment" "8.9.1" - "@polkadot/rpc-provider" "8.9.1" - "@polkadot/types" "8.9.1" - "@polkadot/util" "^9.5.1" - rxjs "^7.5.5" - -"@polkadot/rpc-provider@5.9.1": - version "5.9.1" - resolved "https://registry.yarnpkg.com/@polkadot/rpc-provider/-/rpc-provider-5.9.1.tgz#8e67769c05ba71ecf4f5bc0c5a60eb9afc699167" - integrity sha512-9zamxfnsY7iCswXIK22W0Ji1XHLprm97js3WLw3lP2hr/uSim4Cv4y07zY/z4dDQyF0gJtjKwR27Wo9CZqdr6A== - dependencies: - "@babel/runtime" "^7.15.4" - "@polkadot/types" "5.9.1" - "@polkadot/util" "^7.3.1" - "@polkadot/util-crypto" "^7.3.1" - "@polkadot/x-fetch" "^7.3.1" - "@polkadot/x-global" "^7.3.1" - "@polkadot/x-ws" "^7.3.1" - eventemitter3 "^4.0.7" - -"@polkadot/rpc-provider@8.9.1": - version "8.9.1" - resolved "https://registry.yarnpkg.com/@polkadot/rpc-provider/-/rpc-provider-8.9.1.tgz#1e6e8e6218bb0fe59dd673acb9198bf12acf6625" - integrity sha512-XunL29pi464VB6AJGuvVzTnCtk4y5KBwgBIC/S4YMdqi+l2ujXZOFM2WBnbiV+YhB7FEXmbYR8NsKAe/DSb85A== - dependencies: - "@babel/runtime" "^7.18.3" - "@polkadot/keyring" "^9.5.1" - "@polkadot/types" "8.9.1" - "@polkadot/types-support" "8.9.1" - "@polkadot/util" "^9.5.1" - "@polkadot/util-crypto" "^9.5.1" - "@polkadot/x-fetch" "^9.5.1" - "@polkadot/x-global" "^9.5.1" - "@polkadot/x-ws" "^9.5.1" - "@substrate/connect" "0.7.6" - eventemitter3 "^4.0.7" - mock-socket "^9.1.5" - nock "^13.2.6" - -"@polkadot/types-augment@8.9.1": - version "8.9.1" - resolved "https://registry.yarnpkg.com/@polkadot/types-augment/-/types-augment-8.9.1.tgz#ff4880471eba038f8b28e412b7d8d1f500d46cf9" - integrity sha512-kfSioIpB8krtNgIANN8QCik+uBFmxGACEq84oxiqbKc2BfTXzcqQ7jkmslXeEqb9IsQ9rpaa3fkvyoLQNLqXgA== - dependencies: - "@babel/runtime" "^7.18.3" - "@polkadot/types" "8.9.1" - "@polkadot/types-codec" "8.9.1" - "@polkadot/util" "^9.5.1" - -"@polkadot/types-codec@8.9.1": - version "8.9.1" - resolved "https://registry.yarnpkg.com/@polkadot/types-codec/-/types-codec-8.9.1.tgz#8fbf3ade7a87b716937b7f37fd43b8a46ba12c4d" - integrity sha512-bboHpTwvHooTdITsmJ5IqAyZDuONZaVs6xC3iRbE9SIHD4kUpivlTc+Rvk91EcQclFo5IUKvNrX4BrOx8Y/YnQ== - dependencies: - "@babel/runtime" "^7.18.3" - "@polkadot/util" "^9.5.1" - -"@polkadot/types-create@8.9.1": - version "8.9.1" - resolved "https://registry.yarnpkg.com/@polkadot/types-create/-/types-create-8.9.1.tgz#ed365812b522fcc7984aa24cf7cbeeb0cdf20e34" - integrity sha512-q7er671QXYcmG4gkZvtKpES7QV013w36s8VT947aT3GDzlGZDQQKNKpELyi7K1sgWjQyrL3/0cTKhP8taAjWPQ== - dependencies: - "@babel/runtime" "^7.18.3" - "@polkadot/types-codec" "8.9.1" - "@polkadot/util" "^9.5.1" - -"@polkadot/types-known@5.9.1": - version "5.9.1" - resolved "https://registry.yarnpkg.com/@polkadot/types-known/-/types-known-5.9.1.tgz#e52fc7b803bc7cb3f41028f88963deb4ccee40af" - integrity sha512-7lpLuIVGaKziQRzPMnTxyjlYy3spL6WqUg3CcEzmJUKQeUonHglOliQh8JSSz1bcP+YuNHGXK1cKsTjHb+GYxA== - dependencies: - "@babel/runtime" "^7.15.4" - "@polkadot/networks" "^7.3.1" - "@polkadot/types" "5.9.1" - "@polkadot/util" "^7.3.1" - -"@polkadot/types-known@8.9.1": - version "8.9.1" - resolved "https://registry.yarnpkg.com/@polkadot/types-known/-/types-known-8.9.1.tgz#019ab25b048f157659cf6141c3d8483c28af0123" - integrity sha512-y5Fvo7TM9DjM/CNQbQsR78O5LP3CuBbQY90yA2APwqZNn/dilTxWIGrxtPzTG9QCZJyhMN+EZdKUo51brKRI/g== - dependencies: - "@babel/runtime" "^7.18.3" - "@polkadot/networks" "^9.5.1" - "@polkadot/types" "8.9.1" - "@polkadot/types-codec" "8.9.1" - "@polkadot/types-create" "8.9.1" - "@polkadot/util" "^9.5.1" - -"@polkadot/types-support@8.9.1": - version "8.9.1" - resolved "https://registry.yarnpkg.com/@polkadot/types-support/-/types-support-8.9.1.tgz#84d023945feddc15f60b8cb1a36abe2edfed4a23" - integrity sha512-t3HJc8o68LWvhEy63PRZQxCL4T7sSsrLm7+rpkfeJAEC1DXeFF85FwE2U+YKa3+Z3NuMv2e4DV2jnIZe9XRtHQ== - dependencies: - "@babel/runtime" "^7.18.3" - "@polkadot/util" "^9.5.1" - -"@polkadot/types@5.9.1": - version "5.9.1" - resolved "https://registry.yarnpkg.com/@polkadot/types/-/types-5.9.1.tgz#74cf4695795f2aa365ff85d3873e22c430100bc9" - integrity sha512-30vcSlNBxPyWYZaxKDr/BoMhfLCRKB265XxpnnNJmbdZZsL+N4Zp2mJR9/UbA6ypmJBkUjD7b1s9AYsLwUs+8w== - dependencies: - "@babel/runtime" "^7.15.4" - "@polkadot/util" "^7.3.1" - "@polkadot/util-crypto" "^7.3.1" - rxjs "^7.3.0" - -"@polkadot/types@8.9.1": - version "8.9.1" - resolved "https://registry.yarnpkg.com/@polkadot/types/-/types-8.9.1.tgz#e5bf1cef79d8c305faa8691c62dd3d4be9baed53" - integrity sha512-h43/aPzk+ta0MzzGQz3DiGtearttHxZr08xOdtU5GctI6u9MXm0n0w74clciLpIGu5CI+QxYN3oQ8/5WXTukMw== - dependencies: - "@babel/runtime" "^7.18.3" - "@polkadot/keyring" "^9.5.1" - "@polkadot/types-augment" "8.9.1" - "@polkadot/types-codec" "8.9.1" - "@polkadot/types-create" "8.9.1" - "@polkadot/util" "^9.5.1" - "@polkadot/util-crypto" "^9.5.1" - rxjs "^7.5.5" - -"@polkadot/util-crypto@7.3.1": - version "7.3.1" - resolved "https://registry.yarnpkg.com/@polkadot/util-crypto/-/util-crypto-7.3.1.tgz#a597145b061eddaafd69adc6c1ce19224542307f" - integrity sha512-sR+BxlV2Da0xfQcCXQTz+ohTaagixM+qYHytaQzilytbKHgYIyvnOyk5wFrHDNFzcLuXo15AbULa3TCoNDvh5Q== - dependencies: - "@babel/runtime" "^7.15.3" - "@polkadot/networks" "7.3.1" - "@polkadot/util" "7.3.1" - "@polkadot/wasm-crypto" "^4.2.1" - "@polkadot/x-randomvalues" "7.3.1" - base-x "^3.0.8" - base64-js "^1.5.1" - blakejs "^1.1.1" - bn.js "^4.12.0" - create-hash "^1.2.0" - ed2curve "^0.3.0" - elliptic "^6.5.4" - hash.js "^1.1.7" - js-sha3 "^0.8.0" - scryptsy "^2.1.0" - tweetnacl "^1.0.3" - xxhashjs "^0.2.2" - -"@polkadot/util-crypto@7.9.2", "@polkadot/util-crypto@^7.3.1": - version "7.9.2" - resolved "https://registry.yarnpkg.com/@polkadot/util-crypto/-/util-crypto-7.9.2.tgz#cdc336f92a6bc3d40c5a23734e1974fb777817f0" - integrity sha512-nNwqUwP44eCH9jKKcPie+IHLKkg9LMe6H7hXo91hy3AtoslnNrT51tP3uAm5yllhLvswJfnAgnlHq7ybCgqeFw== - dependencies: - "@babel/runtime" "^7.16.3" - "@polkadot/networks" "7.9.2" - "@polkadot/util" "7.9.2" - "@polkadot/wasm-crypto" "^4.4.1" - "@polkadot/x-randomvalues" "7.9.2" - blakejs "^1.1.1" - bn.js "^4.12.0" - create-hash "^1.2.0" - ed2curve "^0.3.0" - elliptic "^6.5.4" - hash.js "^1.1.7" - js-sha3 "^0.8.0" - micro-base "^0.9.0" - scryptsy "^2.1.0" - tweetnacl "^1.0.3" - xxhashjs "^0.2.2" - -"@polkadot/util-crypto@9.5.1": - version "9.5.1" - resolved "https://registry.yarnpkg.com/@polkadot/util-crypto/-/util-crypto-9.5.1.tgz#f69bdccd7043620c9bd905b169ec50bf97bf6ffb" - integrity sha512-4YwJJ2/mXx3PXTy4WLekQOo1MlDtQzYgTZsjOagi3Uz3Q/ITvS+/iu6eF/H6Tz0uEQjwX6t9tsMkM5FWk/XoGg== - dependencies: - "@babel/runtime" "^7.18.3" - "@noble/hashes" "1.1.1" - "@noble/secp256k1" "1.6.0" - "@polkadot/networks" "9.5.1" - "@polkadot/util" "9.5.1" - "@polkadot/wasm-crypto" "^6.1.1" - "@polkadot/x-bigint" "9.5.1" - "@polkadot/x-randomvalues" "9.5.1" - "@scure/base" "1.1.1" - ed2curve "^0.3.0" - tweetnacl "^1.0.3" - -"@polkadot/util-crypto@9.7.2", "@polkadot/util-crypto@^9.5.1": - version "9.7.2" - resolved "https://registry.yarnpkg.com/@polkadot/util-crypto/-/util-crypto-9.7.2.tgz#0a097f4e197cd344d101ab748a740c2d99a4c5b9" - integrity sha512-tfz6mJtPwoNteivKCmR+QklC4mr1/hGZRsDJLWKaFhanDinYZ3V2pJM1EbCI6WONLuuzlTxsDXjAffWzzRqlPA== - dependencies: - "@babel/runtime" "^7.18.6" - "@noble/hashes" "1.1.2" - "@noble/secp256k1" "1.6.0" - "@polkadot/networks" "9.7.2" - "@polkadot/util" "9.7.2" - "@polkadot/wasm-crypto" "^6.2.2" - "@polkadot/x-bigint" "9.7.2" - "@polkadot/x-randomvalues" "9.7.2" - "@scure/base" "1.1.1" - ed2curve "^0.3.0" - tweetnacl "^1.0.3" - -"@polkadot/util@7.3.1": - version "7.3.1" - resolved "https://registry.yarnpkg.com/@polkadot/util/-/util-7.3.1.tgz#1a33a8d4ef2dcbc3e14a9a919f30bb16360a6fae" - integrity sha512-fjz5yjgZgfgRXZw9zMufmPBHhjAVtk/M2+lgl1a6Fck43Q4TG2Ux1haXMlaoe37cFeh8XgDAzDEQVIYBIPy6sg== - dependencies: - "@babel/runtime" "^7.15.3" - "@polkadot/x-textdecoder" "7.3.1" - "@polkadot/x-textencoder" "7.3.1" - "@types/bn.js" "^4.11.6" - bn.js "^4.12.0" - camelcase "^6.2.0" - ip-regex "^4.3.0" - -"@polkadot/util@7.9.2", "@polkadot/util@^7.3.1": - version "7.9.2" - resolved "https://registry.yarnpkg.com/@polkadot/util/-/util-7.9.2.tgz#567ac659516d6b685ed7e796919901d92e5cbe6b" - integrity sha512-6ABY6ErgkCsM4C6+X+AJSY4pBGwbKlHZmUtHftaiTvbaj4XuA4nTo3GU28jw8wY0Jh2cJZJvt6/BJ5GVkm5tBA== - dependencies: - "@babel/runtime" "^7.16.3" - "@polkadot/x-textdecoder" "7.9.2" - "@polkadot/x-textencoder" "7.9.2" - "@types/bn.js" "^4.11.6" - bn.js "^4.12.0" - camelcase "^6.2.1" - ip-regex "^4.3.0" - -"@polkadot/util@9.5.1": - version "9.5.1" - resolved "https://registry.yarnpkg.com/@polkadot/util/-/util-9.5.1.tgz#b9e0b8cb0d6f1fd86e1a39a843ac8defeb6d5c9f" - integrity sha512-cI2ar15vkoXjs//YNn1yT5eUdK7jF32XNw3Oc6YJ2qEpenwy30c3BUQJOiqW7J6UBYLYll5O5y0ejv6LQoSFBQ== - dependencies: - "@babel/runtime" "^7.18.3" - "@polkadot/x-bigint" "9.5.1" - "@polkadot/x-global" "9.5.1" - "@polkadot/x-textdecoder" "9.5.1" - "@polkadot/x-textencoder" "9.5.1" - "@types/bn.js" "^5.1.0" - bn.js "^5.2.1" - ip-regex "^4.3.0" - -"@polkadot/util@9.7.2", "@polkadot/util@^9.5.1": - version "9.7.2" - resolved "https://registry.yarnpkg.com/@polkadot/util/-/util-9.7.2.tgz#0f97fa92b273e6ce4b53fe869a957ac99342007d" - integrity sha512-ivTmA+KkPCq5i3O0Gk+dTds/hwdwlYCh89aKfeaG9ni3XHUbbuBgTqHneo648HqxwAwSAyiDiwE9EdXrzAdO4Q== - dependencies: - "@babel/runtime" "^7.18.6" - "@polkadot/x-bigint" "9.7.2" - "@polkadot/x-global" "9.7.2" - "@polkadot/x-textdecoder" "9.7.2" - "@polkadot/x-textencoder" "9.7.2" - "@types/bn.js" "^5.1.0" - bn.js "^5.2.1" - ip-regex "^4.3.0" - -"@polkadot/wasm-bridge@6.3.1": - version "6.3.1" - resolved "https://registry.yarnpkg.com/@polkadot/wasm-bridge/-/wasm-bridge-6.3.1.tgz#439fa78e80947a7cb695443e1f64b25c30bb1487" - integrity sha512-1TYkHsb9AEFhU9uZj3biEnN2yKQNzdrwSjiTvfCYnt97pnEkKsZI6cku+YPZQv5w/x9CQa5Yua9e2DVVZSivGA== - dependencies: - "@babel/runtime" "^7.18.9" - -"@polkadot/wasm-crypto-asmjs@6.3.1": - version "6.3.1" - resolved "https://registry.yarnpkg.com/@polkadot/wasm-crypto-asmjs/-/wasm-crypto-asmjs-6.3.1.tgz#e8f469c9cf4a7709c8131a96f857291953f3e30a" - integrity sha512-zbombRfA5v/mUWQQhgg2YwaxhRmxRIrvskw65x+lruax3b6xPBFDs7yplopiJU3r8h2pTgQvX/DUksvqz2TCRQ== - dependencies: - "@babel/runtime" "^7.18.9" - -"@polkadot/wasm-crypto-asmjs@^4.6.1": - version "4.6.1" - resolved "https://registry.yarnpkg.com/@polkadot/wasm-crypto-asmjs/-/wasm-crypto-asmjs-4.6.1.tgz#4f4a5adcf8dce65666eaa0fb16b6ff7b0243aead" - integrity sha512-1oHQjz2oEO1kCIcQniOP+dZ9N2YXf2yCLHLsKaKSvfXiWaetVCaBNB8oIHIVYvuLnVc8qlMi66O6xc1UublHsw== - dependencies: - "@babel/runtime" "^7.17.2" - -"@polkadot/wasm-crypto-init@6.3.1": - version "6.3.1" - resolved "https://registry.yarnpkg.com/@polkadot/wasm-crypto-init/-/wasm-crypto-init-6.3.1.tgz#b590220c53c94b9a54d5dc236d0cbe943db76706" - integrity sha512-9yaUBcu+snwjJLmPPGl3cyGRQ1afyFGm16qzTM0sgG/ZCfUlK4uk8KWZe+sBUKgoxb2oXY7Y4WklKgQI1YBdfw== - dependencies: - "@babel/runtime" "^7.18.9" - "@polkadot/wasm-bridge" "6.3.1" - "@polkadot/wasm-crypto-asmjs" "6.3.1" - "@polkadot/wasm-crypto-wasm" "6.3.1" - -"@polkadot/wasm-crypto-wasm@6.3.1": - version "6.3.1" - resolved "https://registry.yarnpkg.com/@polkadot/wasm-crypto-wasm/-/wasm-crypto-wasm-6.3.1.tgz#67f720e7f9694fef096abe9d60abbac02e032383" - integrity sha512-idSlzKGVzCfeCMRHsacRvqwojSaTadFxL/Dbls4z1thvfa3U9Ku0d2qVtlwg7Hj+tYWDiuP8Kygs+6bQwfs0XA== - dependencies: - "@babel/runtime" "^7.18.9" - "@polkadot/wasm-util" "6.3.1" - -"@polkadot/wasm-crypto-wasm@^4.6.1": - version "4.6.1" - resolved "https://registry.yarnpkg.com/@polkadot/wasm-crypto-wasm/-/wasm-crypto-wasm-4.6.1.tgz#882d8199e216966c612f56a18e31f6aaae77e7eb" - integrity sha512-NI3JVwmLjrSYpSVuhu0yeQYSlsZrdpK41UC48sY3kyxXC71pi6OVePbtHS1K3xh3FFmDd9srSchExi3IwzKzMw== - dependencies: - "@babel/runtime" "^7.17.2" - -"@polkadot/wasm-crypto@^4.2.1", "@polkadot/wasm-crypto@^4.4.1": - version "4.6.1" - resolved "https://registry.yarnpkg.com/@polkadot/wasm-crypto/-/wasm-crypto-4.6.1.tgz#12f8481e6f9021928435168beb0697d57ff573e9" - integrity sha512-2wEftBDxDG+TN8Ah6ogtvzjdZdcF0mAjU4UNNOfpmkBCxQYZOrAHB8HXhzo3noSsKkLX7PDX57NxvJ9OhoTAjw== - dependencies: - "@babel/runtime" "^7.17.2" - "@polkadot/wasm-crypto-asmjs" "^4.6.1" - "@polkadot/wasm-crypto-wasm" "^4.6.1" - -"@polkadot/wasm-crypto@^6.1.1", "@polkadot/wasm-crypto@^6.2.2": - version "6.3.1" - resolved "https://registry.yarnpkg.com/@polkadot/wasm-crypto/-/wasm-crypto-6.3.1.tgz#63f5798aca2b2ff0696f190e6862d9781d8f280c" - integrity sha512-OO8h0qeVkqp4xYZaRVl4iuWOEtq282pNBHDKb6SOJuI2g59eWGcKh4EQU9Me2VP6qzojIqptrkrVt7KQXC68gA== - dependencies: - "@babel/runtime" "^7.18.9" - "@polkadot/wasm-bridge" "6.3.1" - "@polkadot/wasm-crypto-asmjs" "6.3.1" - "@polkadot/wasm-crypto-init" "6.3.1" - "@polkadot/wasm-crypto-wasm" "6.3.1" - "@polkadot/wasm-util" "6.3.1" - -"@polkadot/wasm-util@6.3.1": - version "6.3.1" - resolved "https://registry.yarnpkg.com/@polkadot/wasm-util/-/wasm-util-6.3.1.tgz#439ebb68a436317af388ed6438b8f879df3afcda" - integrity sha512-12oAv5J7Yoc9m6jixrSaQCxpOkWOyzHx3DMC8qmLjRiwdBWxqLmImOVRVnFsbaxqSbhBIHRuJphVxWE+GZETDg== - dependencies: - "@babel/runtime" "^7.18.9" - -"@polkadot/x-bigint@9.5.1": - version "9.5.1" - resolved "https://registry.yarnpkg.com/@polkadot/x-bigint/-/x-bigint-9.5.1.tgz#d5d98aaa6b3de560eea23df9f696903f2e2dcf7c" - integrity sha512-rTp7j3KvCy8vANRoaW6j0pCQdLc/eed6uSRXoxh3z1buJhw460/Q/hJ0Bey6fyeNSDzIwFk4SGwf/Gzf+kS1vQ== - dependencies: - "@babel/runtime" "^7.18.3" - "@polkadot/x-global" "9.5.1" - -"@polkadot/x-bigint@9.7.2": - version "9.7.2" - resolved "https://registry.yarnpkg.com/@polkadot/x-bigint/-/x-bigint-9.7.2.tgz#ec79977335dce173a81e45247bdfd46f3b301702" - integrity sha512-qi8/DTGypFSt5vvNOsYcEaqH72lymfyidGlsHlZ6e7nNASnEhk/NaOcINiTr1ds+fpu4dtKXWAIPZufujf2JeQ== - dependencies: - "@babel/runtime" "^7.18.6" - "@polkadot/x-global" "9.7.2" - -"@polkadot/x-fetch@^7.3.1": - version "7.9.2" - resolved "https://registry.yarnpkg.com/@polkadot/x-fetch/-/x-fetch-7.9.2.tgz#fe943be5854f7355630388b1b5d2bb52f1a3afb2" - integrity sha512-zutLkFJVaLVpY3cIGYJD0AReLfAnPr2J82Ca4pvy/BxqwwGYuGLcn36A4m6nliGBP2lcH4oYY+mcCqIwoPWQUQ== - dependencies: - "@babel/runtime" "^7.16.3" - "@polkadot/x-global" "7.9.2" - "@types/node-fetch" "^2.5.12" - node-fetch "^2.6.6" - -"@polkadot/x-fetch@^9.5.1": - version "9.7.2" - resolved "https://registry.yarnpkg.com/@polkadot/x-fetch/-/x-fetch-9.7.2.tgz#bc4091603114a4182ab06b8d7d127a3dd730cf48" - integrity sha512-ysXpPNq2S+L98hKow3d59prU4QFRg5N86pMkJdONc4VxtKITVY2MfdLVCqfEOOFuuwCzE7Sfmx53I4XpDgbP7A== - dependencies: - "@babel/runtime" "^7.18.6" - "@polkadot/x-global" "9.7.2" - "@types/node-fetch" "^2.6.2" - node-fetch "^2.6.7" - -"@polkadot/x-global@7.3.1": - version "7.3.1" - resolved "https://registry.yarnpkg.com/@polkadot/x-global/-/x-global-7.3.1.tgz#6e6f9d3347748bd885754c7367f08441a6b7dc6d" - integrity sha512-Tx2xGyrNLsV+hjfKsAWA03VUnkQGyCeaff6vE7Fi9iZo/4L4BdrQKhJgQrX8PQuOhrcv1B1GDuaYiXr7dwBR1g== - dependencies: - "@babel/runtime" "^7.15.3" - -"@polkadot/x-global@7.9.2", "@polkadot/x-global@^7.3.1": - version "7.9.2" - resolved "https://registry.yarnpkg.com/@polkadot/x-global/-/x-global-7.9.2.tgz#b272b0a3bedaad3bcbf075ec4682abe68cf2a850" - integrity sha512-JX5CrGWckHf1P9xKXq4vQCAuMUbL81l2hOWX7xeP8nv4caHEpmf5T1wD1iMdQBL5PFifo6Pg0V6/oZBB+bts7A== - dependencies: - "@babel/runtime" "^7.16.3" - -"@polkadot/x-global@9.5.1": - version "9.5.1" - resolved "https://registry.yarnpkg.com/@polkadot/x-global/-/x-global-9.5.1.tgz#a78e109ca95f5ba5e9c501a2106a9b3acfe3a682" - integrity sha512-asG5YlW1K3f4YjyuZ+HrbF9H5d78i5v9+7Bh+9gD+sVfB3KhqwVYZB+wzOaJkPp6lwUbBA9OBHFCVBqpR3wBJw== - dependencies: - "@babel/runtime" "^7.18.3" - -"@polkadot/x-global@9.7.2", "@polkadot/x-global@^9.5.1": - version "9.7.2" - resolved "https://registry.yarnpkg.com/@polkadot/x-global/-/x-global-9.7.2.tgz#9847fd1da13989f321ca621e85477ba70fd8d55a" - integrity sha512-3NN5JhjosaelaFWBJSlv9mb/gDAlt7RuZ8NKlOjB+LQHd9g6ZbnYi5wwjW+i/x/3E4IVbBx66uvWgNaw7IBrkg== - dependencies: - "@babel/runtime" "^7.18.6" - -"@polkadot/x-randomvalues@7.3.1": - version "7.3.1" - resolved "https://registry.yarnpkg.com/@polkadot/x-randomvalues/-/x-randomvalues-7.3.1.tgz#120c64147ce9bebee9e18e6c72cb91cc4d91d7e1" - integrity sha512-WtOTsjpp0+VIV+GY7IrELVznv78+IQ96UW5rf2i3AUIoouB1z9VrzJu/MCN7zoRQ9OAWpNoGxdAwzRDm9UL3+g== - dependencies: - "@babel/runtime" "^7.15.3" - "@polkadot/x-global" "7.3.1" - -"@polkadot/x-randomvalues@7.9.2": - version "7.9.2" - resolved "https://registry.yarnpkg.com/@polkadot/x-randomvalues/-/x-randomvalues-7.9.2.tgz#0c9bb7b48a0791c2a32e9605a31a5ce56fee621d" - integrity sha512-svQfG31yCXf6yVyIgP0NgCzEy7oc3Lw054ZspkaqjOivxYdrXaf5w3JSSUyM/MRjI2+nk+B/EyJoMYcfSwTfsQ== - dependencies: - "@babel/runtime" "^7.16.3" - "@polkadot/x-global" "7.9.2" - -"@polkadot/x-randomvalues@9.5.1": - version "9.5.1" - resolved "https://registry.yarnpkg.com/@polkadot/x-randomvalues/-/x-randomvalues-9.5.1.tgz#e647554f7b34d4073e1bc60d8b81163d5f75f523" - integrity sha512-NFvG//NsBjFP01dEtQATNPn5lSAZwh6jkkUXG2rHlgvW6k8nVJ0aJPvO5MlgItgS5Ry2F88AIiSsO3cfoTpszg== - dependencies: - "@babel/runtime" "^7.18.3" - "@polkadot/x-global" "9.5.1" - -"@polkadot/x-randomvalues@9.7.2": - version "9.7.2" - resolved "https://registry.yarnpkg.com/@polkadot/x-randomvalues/-/x-randomvalues-9.7.2.tgz#d580b0e9149ea22b2afebba5d7b1368371f7086d" - integrity sha512-819slnXNpoVtqdhjI19ao7w5m+Zwx11VfwCZkFQypVv3b/1UEoKG/baJA9dVI6yMvhnBN//i8mLgNy3IXWbVVw== - dependencies: - "@babel/runtime" "^7.18.6" - "@polkadot/x-global" "9.7.2" - -"@polkadot/x-textdecoder@7.3.1": - version "7.3.1" - resolved "https://registry.yarnpkg.com/@polkadot/x-textdecoder/-/x-textdecoder-7.3.1.tgz#e7ffc566483dce42b72c340bbaa1e76bbc5b2d3d" - integrity sha512-AkGrJ8C8kLvs7uxKMMqkBZmUbm8k3CBvq7FLnfUaQQXha4/3G3u+g3UqSTJ8+nETwRrfpjAVS77fmFx+6Nkxng== - dependencies: - "@babel/runtime" "^7.15.3" - "@polkadot/x-global" "7.3.1" - -"@polkadot/x-textdecoder@7.9.2": - version "7.9.2" - resolved "https://registry.yarnpkg.com/@polkadot/x-textdecoder/-/x-textdecoder-7.9.2.tgz#a78548e33efeb3a25f761fec9787b2bcae7f0608" - integrity sha512-wfwbSHXPhrOAl12QvlIOGNkMH/N/h8PId2ytIjvM/8zPPFB5Il6DWSFLtVapOGEpIFjEWbd5t8Td4pHBVXIEbg== - dependencies: - "@babel/runtime" "^7.16.3" - "@polkadot/x-global" "7.9.2" - -"@polkadot/x-textdecoder@9.5.1": - version "9.5.1" - resolved "https://registry.yarnpkg.com/@polkadot/x-textdecoder/-/x-textdecoder-9.5.1.tgz#13c1b48b12d350b635de385c8a0e2be14210b620" - integrity sha512-bY0J3Tov5y4oZi8qB/UtoEYCSgo5sDiiOa3Wmgen09LfB4gXJhWFGJSmcZqHERXCdEcmZojdbHTvOGSeYM9U1w== - dependencies: - "@babel/runtime" "^7.18.3" - "@polkadot/x-global" "9.5.1" - -"@polkadot/x-textdecoder@9.7.2": - version "9.7.2" - resolved "https://registry.yarnpkg.com/@polkadot/x-textdecoder/-/x-textdecoder-9.7.2.tgz#c94ea6c8f510fdf579659248ede9421854e32b42" - integrity sha512-hhrMNZwJBmusdpqjDRpOHZoMB4hpyJt9Gu9Bi9is7/D/vq/hpxq8z7s6NxrbRyXJf1SIk6NMK0jf5XjRLdKdbw== - dependencies: - "@babel/runtime" "^7.18.6" - "@polkadot/x-global" "9.7.2" - -"@polkadot/x-textencoder@7.3.1": - version "7.3.1" - resolved "https://registry.yarnpkg.com/@polkadot/x-textencoder/-/x-textencoder-7.3.1.tgz#8c08dacdac677d7a8e021437ce2b31d90a041519" - integrity sha512-1yePbvbQ9U9ScRilQ/aH6CwgoSG8njH27XVzRR7WnulAMKbF3IvHgU56IlBZneHIojAy252yp2ldBG09PDIXeg== - dependencies: - "@babel/runtime" "^7.15.3" - "@polkadot/x-global" "7.3.1" - -"@polkadot/x-textencoder@7.9.2": - version "7.9.2" - resolved "https://registry.yarnpkg.com/@polkadot/x-textencoder/-/x-textencoder-7.9.2.tgz#b32bfd6fbff8587c56452f58252a52d62bbcd5b9" - integrity sha512-A19wwYINuZwU2dUyQ/mMzB0ISjyfc4cISfL4zCMUAVgj7xVoXMYV2GfjNdMpA8Wsjch3su6pxLbtJ2wU03sRTQ== - dependencies: - "@babel/runtime" "^7.16.3" - "@polkadot/x-global" "7.9.2" - -"@polkadot/x-textencoder@9.5.1": - version "9.5.1" - resolved "https://registry.yarnpkg.com/@polkadot/x-textencoder/-/x-textencoder-9.5.1.tgz#76d79d07bb81e9cc7eff97043eae82c39189d8d9" - integrity sha512-zt121nqxiudMeZnanpnfWhCE0SOTcVRqn/atqO59us/yf6LMTf23mgd7P4795TgJwXOUcui4fhm/g/VcpsLq9Q== - dependencies: - "@babel/runtime" "^7.18.3" - "@polkadot/x-global" "9.5.1" - -"@polkadot/x-textencoder@9.7.2": - version "9.7.2" - resolved "https://registry.yarnpkg.com/@polkadot/x-textencoder/-/x-textencoder-9.7.2.tgz#2ae29fa5ca2c0353e7a1913eef710b2d45bdf0b2" - integrity sha512-GHbSdbMPixDAOnJ9cvL/x9sPNeHegPoDSqCAzY5H6/zHc/fNn0vUu0To9VpPgPhp/Jb9dbc0h8YqEyvOcOlphw== - dependencies: - "@babel/runtime" "^7.18.6" - "@polkadot/x-global" "9.7.2" - -"@polkadot/x-ws@^7.3.1": - version "7.9.2" - resolved "https://registry.yarnpkg.com/@polkadot/x-ws/-/x-ws-7.9.2.tgz#016df26fa829b74f8b1e31a1dcd6e34256c1231f" - integrity sha512-+yppMsZtvDztVOSmkqAQuhR6TfV1Axa6ergAsWb52DrfXvFP5geqtARsI6ZdDgMsE3qHSVQTcJz8vgNOr5+ztQ== - dependencies: - "@babel/runtime" "^7.16.3" - "@polkadot/x-global" "7.9.2" - "@types/websocket" "^1.0.4" - websocket "^1.0.34" - -"@polkadot/x-ws@^9.5.1": - version "9.7.2" - resolved "https://registry.yarnpkg.com/@polkadot/x-ws/-/x-ws-9.7.2.tgz#b35470b487d19be48c1fe39e1c73c623bf548b7e" - integrity sha512-yF2qKL00SGivbima22jxoBNYCZFI8Ph7dmnVm7fDztVtO8Fc2x30Lj3a8+qsSOrynLyJHAh2bjjQxpPmDCB9tw== - dependencies: - "@babel/runtime" "^7.18.6" - "@polkadot/x-global" "9.7.2" - "@types/websocket" "^1.0.5" - websocket "^1.0.34" - -"@protobufjs/aspromise@^1.1.1", "@protobufjs/aspromise@^1.1.2": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@protobufjs/aspromise/-/aspromise-1.1.2.tgz#9b8b0cc663d669a7d8f6f5d0893a14d348f30fbf" - integrity sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ== - -"@protobufjs/base64@^1.1.2": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@protobufjs/base64/-/base64-1.1.2.tgz#4c85730e59b9a1f1f349047dbf24296034bb2735" - integrity sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg== - -"@protobufjs/codegen@^2.0.4": - version "2.0.4" - resolved "https://registry.yarnpkg.com/@protobufjs/codegen/-/codegen-2.0.4.tgz#7ef37f0d010fb028ad1ad59722e506d9262815cb" - integrity sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg== - -"@protobufjs/eventemitter@^1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz#355cbc98bafad5978f9ed095f397621f1d066b70" - integrity sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q== - -"@protobufjs/fetch@^1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@protobufjs/fetch/-/fetch-1.1.0.tgz#ba99fb598614af65700c1619ff06d454b0d84c45" - integrity sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ== - dependencies: - "@protobufjs/aspromise" "^1.1.1" - "@protobufjs/inquire" "^1.1.0" - -"@protobufjs/float@^1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@protobufjs/float/-/float-1.0.2.tgz#5e9e1abdcb73fc0a7cb8b291df78c8cbd97b87d1" - integrity sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ== - -"@protobufjs/inquire@^1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@protobufjs/inquire/-/inquire-1.1.0.tgz#ff200e3e7cf2429e2dcafc1140828e8cc638f089" - integrity sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q== - -"@protobufjs/path@^1.1.2": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@protobufjs/path/-/path-1.1.2.tgz#6cc2b20c5c9ad6ad0dccfd21ca7673d8d7fbf68d" - integrity sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA== - -"@protobufjs/pool@^1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@protobufjs/pool/-/pool-1.1.0.tgz#09fd15f2d6d3abfa9b65bc366506d6ad7846ff54" - integrity sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw== - -"@protobufjs/utf8@^1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@protobufjs/utf8/-/utf8-1.1.0.tgz#a777360b5b39a1a2e5106f8e858f2fd2d060c570" - integrity sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw== - -"@scure/base@1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@scure/base/-/base-1.1.1.tgz#ebb651ee52ff84f420097055f4bf46cfba403938" - integrity sha512-ZxOhsSyxYwLJj3pLZCefNitxsj093tb2vq90mp2txoYeBqbcjDjqFhyM8eUjq/uFm6zJ+mUuqxlS2FkuSY1MTA== - -"@substrate/connect-extension-protocol@^1.0.0": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@substrate/connect-extension-protocol/-/connect-extension-protocol-1.0.1.tgz#fa5738039586c648013caa6a0c95c43265dbe77d" - integrity sha512-161JhCC1csjH3GE5mPLEd7HbWtwNSPJBg3p1Ksz9SFlTzj/bgEwudiRN2y5i0MoLGCIJRYKyKGMxVnd29PzNjg== - -"@substrate/connect@0.7.6": - version "0.7.6" - resolved "https://registry.yarnpkg.com/@substrate/connect/-/connect-0.7.6.tgz#4b1cca6bf9c0e8be93f6f6a4eeb6684993f5dc18" - integrity sha512-PHizR91CbjC5bzUwgYUZJrbOyoraCS1QqoxkFHteZ/0vkXDKyuzoixobDaITJqq6wSTeM8ZSjuOn9u/3q7F5+A== - dependencies: - "@substrate/connect-extension-protocol" "^1.0.0" - "@substrate/smoldot-light" "0.6.19" - eventemitter3 "^4.0.7" - -"@substrate/smoldot-light@0.6.19": - version "0.6.19" - resolved "https://registry.yarnpkg.com/@substrate/smoldot-light/-/smoldot-light-0.6.19.tgz#13e897ca9839aecb0dac4ce079ff1cca1dc54cc0" - integrity sha512-Xi+v1cdURhTwx7NH+9fa1U9m7VGP61GvB6qwev9HrZXlGbQiUIvySxPlH/LMsq3mwgiRYkokPhcaZEHufY7Urg== - dependencies: - buffer "^6.0.1" - pako "^2.0.4" - websocket "^1.0.32" - -"@substrate/ss58-registry@^1.22.0", "@substrate/ss58-registry@^1.23.0": - version "1.29.1" - resolved "https://registry.yarnpkg.com/@substrate/ss58-registry/-/ss58-registry-1.29.1.tgz#6070fc3cdf24ad8b3eba1eb7bdf4d96804615775" - integrity sha512-7+DeSVpUS2m+7HAeYvvypbnrYVat1b7ze2V9SV3d+pTbUHkovZACaHYm33FBHc9F+RpXgYgf+pikJXK5ux4o1g== - -"@types/bn.js@^4.11.6": - version "4.11.6" - resolved "https://registry.yarnpkg.com/@types/bn.js/-/bn.js-4.11.6.tgz#c306c70d9358aaea33cd4eda092a742b9505967c" - integrity sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg== - dependencies: - "@types/node" "*" - -"@types/bn.js@^5.1.0": - version "5.1.0" - resolved "https://registry.yarnpkg.com/@types/bn.js/-/bn.js-5.1.0.tgz#32c5d271503a12653c62cf4d2b45e6eab8cebc68" - integrity sha512-QSSVYj7pYFN49kW77o2s9xTCwZ8F2xLbjLLSEVh8D2F4JUhZtPAGOFLTD+ffqksBx/u4cE/KImFjyhqCjn/LIA== - dependencies: - "@types/node" "*" - -"@types/eslint-visitor-keys@^1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@types/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#1ee30d79544ca84d68d4b3cdb0af4f205663dd2d" - integrity sha512-OCutwjDZ4aFS6PB1UZ988C4YgwlBHJd6wCeQqaLdmadZ/7e+w79+hbMUFC1QXDNCmdyoRfAFdm0RypzwR+Qpag== - -"@types/glob@*": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.2.0.tgz#bc1b5bf3aa92f25bd5dd39f35c57361bdce5b2eb" - integrity sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA== - dependencies: - "@types/minimatch" "*" - "@types/node" "*" - -"@types/iso-3166-2@^1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@types/iso-3166-2/-/iso-3166-2-1.0.0.tgz#98a7b6e505c031e83c5aac13c9c49f9d9f6ca234" - integrity sha512-DYDyoRyPyxBeI9bYoTXLfsOZH12m1anrWEj9LU5Sl9rgsJ4soJMYf/7byozM+64Smn6/a1i079eQLGuPykwaHQ== - -"@types/json-schema@^7.0.3", "@types/json-schema@^7.0.6": - version "7.0.11" - resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.11.tgz#d421b6c527a3037f7c84433fd2c4229e016863d3" - integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ== - -"@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.157", "@types/lodash@^4.14.168": - version "4.14.182" - resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.182.tgz#05301a4d5e62963227eaafe0ce04dd77c54ea5c2" - integrity sha512-/THyiqyQAP9AfARo4pF+aCGcyiQ94tX/Is2I7HofNRqoYLgN1PBoOWu2/zTA5zMxzP5EFutMtWtGAFRKUe961Q== - -"@types/long@^4.0.1": - version "4.0.2" - resolved "https://registry.yarnpkg.com/@types/long/-/long-4.0.2.tgz#b74129719fc8d11c01868010082d483b7545591a" - integrity sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA== - -"@types/minimatch@*": - version "3.0.5" - resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.5.tgz#1001cc5e6a3704b83c236027e77f2f58ea010f40" - integrity sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ== - -"@types/node-fetch@^2.5.12": - version "2.6.1" - resolved "https://registry.yarnpkg.com/@types/node-fetch/-/node-fetch-2.6.1.tgz#8f127c50481db65886800ef496f20bbf15518975" - integrity sha512-oMqjURCaxoSIsHSr1E47QHzbmzNR5rK8McHuNb11BOM9cHcIK3Avy0s/b2JlXHoQGTYS3NsvWzV1M0iK7l0wbA== - dependencies: - "@types/node" "*" - form-data "^3.0.0" - -"@types/node-fetch@^2.6.2": - version "2.6.2" - resolved "https://registry.yarnpkg.com/@types/node-fetch/-/node-fetch-2.6.2.tgz#d1a9c5fd049d9415dce61571557104dec3ec81da" - integrity sha512-DHqhlq5jeESLy19TYhLakJ07kNumXWjcDdxXsLUMJZ6ue8VZJj4kLPQVE/2mdHh3xZziNF1xppu5lwmS53HR+A== - dependencies: - "@types/node" "*" - form-data "^3.0.0" - -"@types/node@*", "@types/node@>=13.7.0": - version "17.0.40" - resolved "https://registry.yarnpkg.com/@types/node/-/node-17.0.40.tgz#76ee88ae03650de8064a6cf75b8d95f9f4a16090" - integrity sha512-UXdBxNGqTMtm7hCwh9HtncFVLrXoqA3oJW30j6XWp5BH/wu3mVeaxo7cq5benFdBw34HB3XDT2TRPI7rXZ+mDg== - -"@types/pbkdf2@^3.0.0": - version "3.1.0" - resolved "https://registry.yarnpkg.com/@types/pbkdf2/-/pbkdf2-3.1.0.tgz#039a0e9b67da0cdc4ee5dab865caa6b267bb66b1" - integrity sha512-Cf63Rv7jCQ0LaL8tNXmEyqTHuIJxRdlS5vMh1mj5voN4+QFhVZnlZruezqpWYDiJ8UTzhP0VmeLXCmBk66YrMQ== - dependencies: - "@types/node" "*" - -"@types/prettier@^2.1.5": - version "2.6.3" - resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.6.3.tgz#68ada76827b0010d0db071f739314fa429943d0a" - integrity sha512-ymZk3LEC/fsut+/Q5qejp6R9O1rMxz3XaRHDV6kX8MrGAhOSPqVARbDi+EZvInBpw+BnCX3TD240byVkOfQsHg== - -"@types/secp256k1@^4.0.1": - version "4.0.3" - resolved "https://registry.yarnpkg.com/@types/secp256k1/-/secp256k1-4.0.3.tgz#1b8e55d8e00f08ee7220b4d59a6abe89c37a901c" - integrity sha512-Da66lEIFeIz9ltsdMZcpQvmrmmoqrfju8pm1BH8WbYjZSwUgCwXLb9C+9XYogwBITnbsSaMdVPb2ekf7TV+03w== - dependencies: - "@types/node" "*" - -"@types/unist@^2.0.0": - version "2.0.6" - resolved "https://registry.yarnpkg.com/@types/unist/-/unist-2.0.6.tgz#250a7b16c3b91f672a24552ec64678eeb1d3a08d" - integrity sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ== - -"@types/vfile@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@types/vfile/-/vfile-4.0.0.tgz#c32d13cbda319bc9f4ab3cacc0263b4ba1dd1ea3" - integrity sha512-eleP0/Cz8uVWxARDLi3Axq2+fDdN4ibAXoC6Pv8p6s7znXaUL7XvhgeIhjCiNMnvlLNP+tmCLd+RuCryGgmtEg== - dependencies: - vfile "*" - -"@types/websocket@^1.0.4", "@types/websocket@^1.0.5": - version "1.0.5" - resolved "https://registry.yarnpkg.com/@types/websocket/-/websocket-1.0.5.tgz#3fb80ed8e07f88e51961211cd3682a3a4a81569c" - integrity sha512-NbsqiNX9CnEfC1Z0Vf4mE1SgAJ07JnRYcNex7AJ9zAVzmiGHmjKFEk7O4TJIsgv2B1sLEb6owKFZrACwdYngsQ== - dependencies: - "@types/node" "*" - -"@typescript-eslint/eslint-plugin@3.8.0": - version "3.8.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-3.8.0.tgz#f82947bcdd9a4e42be7ad80dfd61f1dc411dd1df" - integrity sha512-lFb4VCDleFSR+eo4Ew+HvrJ37ZH1Y9ZyE+qyP7EiwBpcCVxwmUc5PAqhShCQ8N8U5vqYydm74nss+a0wrrCErw== - dependencies: - "@typescript-eslint/experimental-utils" "3.8.0" - debug "^4.1.1" - functional-red-black-tree "^1.0.1" - regexpp "^3.0.0" - semver "^7.3.2" - tsutils "^3.17.1" - -"@typescript-eslint/experimental-utils@3.8.0": - version "3.8.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-3.8.0.tgz#ac1f7c88322dcfb7635ece6f0441516dd951099a" - integrity sha512-o8T1blo1lAJE0QDsW7nSyvZHbiDzQDjINJKyB44Z3sSL39qBy5L10ScI/XwDtaiunoyKGLiY9bzRk4YjsUZl8w== - dependencies: - "@types/json-schema" "^7.0.3" - "@typescript-eslint/types" "3.8.0" - "@typescript-eslint/typescript-estree" "3.8.0" - eslint-scope "^5.0.0" - eslint-utils "^2.0.0" - -"@typescript-eslint/parser@3.8.0": - version "3.8.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-3.8.0.tgz#8e1dcd404299bf79492409c81c415fa95a7c622b" - integrity sha512-u5vjOBaCsnMVQOvkKCXAmmOhyyMmFFf5dbkM3TIbg3MZ2pyv5peE4gj81UAbTHwTOXEwf7eCQTUMKrDl/+qGnA== - dependencies: - "@types/eslint-visitor-keys" "^1.0.0" - "@typescript-eslint/experimental-utils" "3.8.0" - "@typescript-eslint/types" "3.8.0" - "@typescript-eslint/typescript-estree" "3.8.0" - eslint-visitor-keys "^1.1.0" - -"@typescript-eslint/types@3.8.0": - version "3.8.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-3.8.0.tgz#58581dd863f86e0cd23353d94362bb90b4bea796" - integrity sha512-8kROmEQkv6ss9kdQ44vCN1dTrgu4Qxrd2kXr10kz2NP5T8/7JnEfYNxCpPkArbLIhhkGLZV3aVMplH1RXQRF7Q== - -"@typescript-eslint/typescript-estree@3.8.0": - version "3.8.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-3.8.0.tgz#0606d19f629f813dbdd5a34c7a1e895d6191cac6" - integrity sha512-MTv9nPDhlKfclwnplRNDL44mP2SY96YmPGxmMbMy6x12I+pERcxpIUht7DXZaj4mOKKtet53wYYXU0ABaiXrLw== - dependencies: - "@typescript-eslint/types" "3.8.0" - "@typescript-eslint/visitor-keys" "3.8.0" - debug "^4.1.1" - glob "^7.1.6" - is-glob "^4.0.1" - lodash "^4.17.15" - semver "^7.3.2" - tsutils "^3.17.1" - -"@typescript-eslint/visitor-keys@3.8.0": - version "3.8.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-3.8.0.tgz#ad35110249fb3fc30a36bfcbfeea93e710cfaab1" - integrity sha512-gfqQWyVPpT9NpLREXNR820AYwgz+Kr1GuF3nf1wxpHD6hdxI62tq03ToomFnDxY0m3pUB39IF7sil7D5TQexLA== - dependencies: - eslint-visitor-keys "^1.1.0" - -acorn-jsx@^5.3.1: - version "5.3.2" - resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" - integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== - -acorn@^7.4.0: - version "7.4.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" - integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== - -ajv@^6.10.0, ajv@^6.11.0, ajv@^6.12.4: - 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.11.0" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.11.0.tgz#977e91dd96ca669f54a11e23e378e33b884a565f" - integrity sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg== - 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.3" - resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.3.tgz#37611340eb2243e70cc604cad35d63270d48781b" - integrity sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw== - -ansi-regex@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" - integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== - -ansi-styles@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" - integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== - dependencies: - color-convert "^1.9.0" - -ansi-styles@^4.0.0, ansi-styles@^4.1.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" - integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== - dependencies: - color-convert "^2.0.1" - -any-promise@^1.0.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f" - integrity sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A== - -argparse@^1.0.7: - version "1.0.10" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" - integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== - dependencies: - sprintf-js "~1.0.2" - -argparse@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" - integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== - -array-includes@^3.1.4, array-includes@^3.1.5: - version "3.1.5" - resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.5.tgz#2c320010db8d31031fd2a5f6b3bbd4b1aad31bdb" - integrity sha512-iSDYZMMyTPkiFasVqfuAQnWAYcvO/SeBSCGKePoEthjp4LEMTe4uLc7b025o4jAZpHhihh8xPo99TNWUWWkGDQ== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.19.5" - get-intrinsic "^1.1.1" - is-string "^1.0.7" - -array.prototype.flat@^1.2.5: - version "1.3.0" - resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.0.tgz#0b0c1567bf57b38b56b4c97b8aa72ab45e4adc7b" - integrity sha512-12IUEkHsAhA4DY5s0FPgNXIdc8VRSqD9Zp78a5au9abH/SOBrsp082JOWFNTjkMozh8mqcdiKuaLGhPeYztxSw== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.19.2" - es-shim-unscopables "^1.0.0" - -array.prototype.flatmap@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.0.tgz#a7e8ed4225f4788a70cd910abcf0791e76a5534f" - integrity sha512-PZC9/8TKAIxcWKdyeb77EzULHPrIX/tIZebLJUQOMR1OwYosT8yggdfWScfTBCDj5utONvOuPQQumYsU2ULbkg== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.19.2" - es-shim-unscopables "^1.0.0" - -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== - -asynckit@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" - integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== - -axios@^0.21.1: - version "0.21.4" - resolved "https://registry.yarnpkg.com/axios/-/axios-0.21.4.tgz#c67b90dc0568e5c1cf2b0b858c43ba28e2eda575" - integrity sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg== - dependencies: - follow-redirects "^1.14.0" - -balanced-match@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" - integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== - -base-x@^3.0.2, base-x@^3.0.8: - version "3.0.9" - resolved "https://registry.yarnpkg.com/base-x/-/base-x-3.0.9.tgz#6349aaabb58526332de9f60995e548a53fe21320" - integrity sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ== - dependencies: - safe-buffer "^5.0.1" - -base64-js@^1.3.1, base64-js@^1.5.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" - integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== - -bignumber.js@^9.0.1: - version "9.0.2" - resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-9.0.2.tgz#71c6c6bed38de64e24a65ebe16cfcf23ae693673" - integrity sha512-GAcQvbpsM0pUb0zw1EI0KhQEZ+lRwR5fYaAp3vPOYuP7aDvGy6cVN6XHLauvF8SOga2y0dcLcjt3iQDTSEliyw== - -blakejs@^1.1.0, blakejs@^1.1.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/blakejs/-/blakejs-1.2.1.tgz#5057e4206eadb4a97f7c0b6e197a505042fc3814" - integrity sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ== - -bn.js@4.11.6: - version "4.11.6" - resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.6.tgz#53344adb14617a13f6e8dd2ce28905d1c0ba3215" - integrity sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA== - -bn.js@^4.11.9, bn.js@^4.12.0: - version "4.12.0" - resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.0.tgz#775b3f278efbb9718eec7361f483fb36fbbfea88" - integrity sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA== - -bn.js@^5.1.2, bn.js@^5.2.0, bn.js@^5.2.1: - version "5.2.1" - resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.1.tgz#0bc527a6a0d18d0aa8d5b0538ce4a77dccfa7b70" - integrity sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ== - -brace-expansion@^1.1.7: - version "1.1.11" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" - integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== - dependencies: - balanced-match "^1.0.0" - concat-map "0.0.1" - -brorand@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" - integrity sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w== - -browserify-aes@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48" - integrity sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA== - dependencies: - buffer-xor "^1.0.3" - cipher-base "^1.0.0" - create-hash "^1.1.0" - evp_bytestokey "^1.0.3" - inherits "^2.0.1" - safe-buffer "^5.0.1" - -bs58@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/bs58/-/bs58-4.0.1.tgz#be161e76c354f6f788ae4071f63f34e8c4f0a42a" - integrity sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw== - dependencies: - base-x "^3.0.2" - -bs58check@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/bs58check/-/bs58check-2.1.2.tgz#53b018291228d82a5aa08e7d796fdafda54aebfc" - integrity sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA== - dependencies: - bs58 "^4.0.0" - create-hash "^1.1.0" - safe-buffer "^5.1.2" - -buffer-reverse@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/buffer-reverse/-/buffer-reverse-1.0.1.tgz#49283c8efa6f901bc01fa3304d06027971ae2f60" - integrity sha512-M87YIUBsZ6N924W57vDwT/aOu8hw7ZgdByz6ijksLjmHJELBASmYTTlNHRgjE+pTsT9oJXGaDSgqqwfdHotDUg== - -buffer-xor@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" - integrity sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ== - -buffer@^6.0.1: - version "6.0.3" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6" - integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA== - dependencies: - base64-js "^1.3.1" - ieee754 "^1.2.1" - -bufferutil@^4.0.1: - version "4.0.6" - resolved "https://registry.yarnpkg.com/bufferutil/-/bufferutil-4.0.6.tgz#ebd6c67c7922a0e902f053e5d8be5ec850e48433" - integrity sha512-jduaYOYtnio4aIAyc6UbvPCVcgq7nYpVnucyxr6eCYg/Woad9Hf/oxxBRDnGGjPfjUm6j5O/uBWhIu4iLebFaw== - dependencies: - node-gyp-build "^4.3.0" - -call-bind@^1.0.0, call-bind@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" - integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== - dependencies: - function-bind "^1.1.1" - get-intrinsic "^1.0.2" - -call-me-maybe@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/call-me-maybe/-/call-me-maybe-1.0.1.tgz#26d208ea89e37b5cbde60250a15f031c16a4d66b" - integrity sha512-wCyFsDQkKPwwF8BDwOiWNx/9K45L/hvggQiDbve+viMNMQnWhrlYIuBk09offfwCRtCO9P6XwUttufzU11WCVw== - -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.2.0, camelcase@^6.2.1: - version "6.3.0" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" - integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== - -chalk@^2.0.0: - version "2.4.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" - integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== - dependencies: - ansi-styles "^3.2.1" - escape-string-regexp "^1.0.5" - supports-color "^5.3.0" - -chalk@^4.0.0: - version "4.1.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" - integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - -cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" - integrity sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q== - dependencies: - inherits "^2.0.1" - safe-buffer "^5.0.1" - -cli-color@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/cli-color/-/cli-color-2.0.2.tgz#e295addbae470800def0254183c648531cdf4e3f" - integrity sha512-g4JYjrTW9MGtCziFNjkqp3IMpGhnJyeB0lOtRPjQkYhXzKYr6tYnXKyEVnMzITxhpbahsEW9KsxOYIDKwcsIBw== - dependencies: - d "^1.0.1" - es5-ext "^0.10.59" - es6-iterator "^2.0.3" - memoizee "^0.4.15" - timers-ext "^0.1.7" - -color-convert@^1.9.0: - version "1.9.3" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" - integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== - dependencies: - color-name "1.1.3" - -color-convert@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" - integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== - dependencies: - color-name "~1.1.4" - -color-name@1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" - integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== - -color-name@~1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" - integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== - -combined-stream@^1.0.8: - version "1.0.8" - resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" - integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== - dependencies: - delayed-stream "~1.0.0" - -concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== - -create-hash@^1.1.0, create-hash@^1.1.2, create-hash@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" - integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg== - dependencies: - cipher-base "^1.0.1" - inherits "^2.0.1" - md5.js "^1.3.4" - ripemd160 "^2.0.1" - sha.js "^2.4.0" - -create-hmac@^1.1.4, create-hmac@^1.1.7: - version "1.1.7" - resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff" - integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg== - dependencies: - cipher-base "^1.0.3" - create-hash "^1.1.0" - inherits "^2.0.1" - ripemd160 "^2.0.0" - safe-buffer "^5.0.1" - sha.js "^2.4.8" - -cross-spawn@^7.0.2: - 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" - -crypto-js@^3.1.9-1: - version "3.3.0" - resolved "https://registry.yarnpkg.com/crypto-js/-/crypto-js-3.3.0.tgz#846dd1cce2f68aacfa156c8578f926a609b7976b" - integrity sha512-DIT51nX0dCfKltpRiXV+/TVZq+Qq2NgF4644+K7Ttnla7zEzqc+kjJyiB96BHNyUTBxyjzRcZYpUdZa+QAqi6Q== - -cuint@^0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/cuint/-/cuint-0.2.2.tgz#408086d409550c2631155619e9fa7bcadc3b991b" - integrity sha512-d4ZVpCW31eWwCMe1YT3ur7mUDnTXbgwyzaL320DrcRT45rfjYxkt5QWLrmOJ+/UEAI2+fQgKe/fCjR8l4TpRgw== - -d@1, d@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/d/-/d-1.0.1.tgz#8698095372d58dbee346ffd0c7093f99f8f9eb5a" - integrity sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA== - dependencies: - es5-ext "^0.10.50" - type "^1.0.1" - -debug@^2.2.0, debug@^2.6.9: - version "2.6.9" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" - integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== - dependencies: - ms "2.0.0" - -debug@^3.2.7: - version "3.2.7" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" - integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== - dependencies: - ms "^2.1.1" - -debug@^4.0.1, debug@^4.1.0, debug@^4.1.1: - 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" - -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== - -define-properties@^1.1.3, define-properties@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.4.tgz#0b14d7bd7fbeb2f3572c3a7eda80ea5d57fb05b1" - integrity sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA== - dependencies: - has-property-descriptors "^1.0.0" - object-keys "^1.1.1" - -delayed-stream@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" - integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== - -diacritics@1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/diacritics/-/diacritics-1.3.0.tgz#3efa87323ebb863e6696cebb0082d48ff3d6f7a1" - integrity sha512-wlwEkqcsaxvPJML+rDh/2iS824jbREk6DUMUKkEaSlxdYHeS43cClJtsWglvw2RfeXGm6ohKDqsXteJ5sP5enA== - -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" - -ed2curve@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/ed2curve/-/ed2curve-0.3.0.tgz#322b575152a45305429d546b071823a93129a05d" - integrity sha512-8w2fmmq3hv9rCrcI7g9hms2pMunQr1JINfcjwR9tAyZqhtyaMN991lF/ZfHfr5tzZQ8c7y7aBgZbjfbd0fjFwQ== - dependencies: - tweetnacl "1.x.x" - -elliptic@^6.5.4: - version "6.5.4" - resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb" - integrity sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ== - dependencies: - bn.js "^4.11.9" - brorand "^1.1.0" - hash.js "^1.0.0" - hmac-drbg "^1.0.1" - inherits "^2.0.4" - minimalistic-assert "^1.0.1" - minimalistic-crypto-utils "^1.0.1" - -emoji-regex@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" - integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== - -enquirer@^2.3.5: - version "2.3.6" - resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" - integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== - dependencies: - ansi-colors "^4.1.1" - -es-abstract@^1.19.0, es-abstract@^1.19.1, es-abstract@^1.19.2, es-abstract@^1.19.5: - version "1.20.1" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.20.1.tgz#027292cd6ef44bd12b1913b828116f54787d1814" - integrity sha512-WEm2oBhfoI2sImeM4OF2zE2V3BYdSF+KnSi9Sidz51fQHd7+JuF8Xgcj9/0o+OWeIeIS/MiuNnlruQrJf16GQA== - dependencies: - call-bind "^1.0.2" - es-to-primitive "^1.2.1" - function-bind "^1.1.1" - function.prototype.name "^1.1.5" - get-intrinsic "^1.1.1" - get-symbol-description "^1.0.0" - has "^1.0.3" - has-property-descriptors "^1.0.0" - has-symbols "^1.0.3" - internal-slot "^1.0.3" - is-callable "^1.2.4" - is-negative-zero "^2.0.2" - is-regex "^1.1.4" - is-shared-array-buffer "^1.0.2" - is-string "^1.0.7" - is-weakref "^1.0.2" - object-inspect "^1.12.0" - object-keys "^1.1.1" - object.assign "^4.1.2" - regexp.prototype.flags "^1.4.3" - string.prototype.trimend "^1.0.5" - string.prototype.trimstart "^1.0.5" - unbox-primitive "^1.0.2" - -es-shim-unscopables@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz#702e632193201e3edf8713635d083d378e510241" - integrity sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w== - dependencies: - has "^1.0.3" - -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" - -es5-ext@^0.10.35, es5-ext@^0.10.46, es5-ext@^0.10.50, es5-ext@^0.10.53, es5-ext@^0.10.59, es5-ext@~0.10.14, es5-ext@~0.10.2, es5-ext@~0.10.46: - version "0.10.61" - resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.61.tgz#311de37949ef86b6b0dcea894d1ffedb909d3269" - integrity sha512-yFhIqQAzu2Ca2I4SE2Au3rxVfmohU9Y7wqGR+s7+H7krk26NXhIRAZDgqd6xqjCEFUomDEA3/Bo/7fKmIkW1kA== - dependencies: - es6-iterator "^2.0.3" - es6-symbol "^3.1.3" - next-tick "^1.1.0" - -es6-iterator@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7" - integrity sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g== - dependencies: - d "1" - es5-ext "^0.10.35" - es6-symbol "^3.1.1" - -es6-symbol@^3.1.1, es6-symbol@^3.1.3: - version "3.1.3" - resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.3.tgz#bad5d3c1bcdac28269f4cb331e431c78ac705d18" - integrity sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA== - dependencies: - d "^1.0.1" - ext "^1.1.2" - -es6-weak-map@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/es6-weak-map/-/es6-weak-map-2.0.3.tgz#b6da1f16cc2cc0d9be43e6bdbfc5e7dfcdf31d53" - integrity sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA== - dependencies: - d "1" - es5-ext "^0.10.46" - es6-iterator "^2.0.3" - es6-symbol "^3.1.1" - -escape-string-regexp@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" - integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== - -escape-string-regexp@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" - integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== - -eslint-config-prettier@^6.11.0: - version "6.15.0" - resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-6.15.0.tgz#7f93f6cb7d45a92f1537a70ecc06366e1ac6fed9" - integrity sha512-a1+kOYLR8wMGustcgAjdydMsQ2A/2ipRPwRKUmfYaSxc9ZPcrku080Ctl6zrZzZNs/U82MjSv+qKREkoq3bJaw== - dependencies: - get-stdin "^6.0.0" - -eslint-config-standard@^14.1.1: - version "14.1.1" - resolved "https://registry.yarnpkg.com/eslint-config-standard/-/eslint-config-standard-14.1.1.tgz#830a8e44e7aef7de67464979ad06b406026c56ea" - integrity sha512-Z9B+VR+JIXRxz21udPTL9HpFMyoMUEeX1G251EQ6e05WD9aPVtVBn09XUmZ259wCMlCDmYDSZG62Hhm+ZTJcUg== - -eslint-import-resolver-node@^0.3.6: - version "0.3.6" - resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz#4048b958395da89668252001dbd9eca6b83bacbd" - integrity sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw== - dependencies: - debug "^3.2.7" - resolve "^1.20.0" - -eslint-module-utils@^2.7.3: - version "2.7.3" - resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.7.3.tgz#ad7e3a10552fdd0642e1e55292781bd6e34876ee" - integrity sha512-088JEC7O3lDZM9xGe0RerkOMd0EjFl+Yvd1jPWIkMT5u3H9+HC34mWWPnqPrN13gieT9pBOO+Qt07Nb/6TresQ== - dependencies: - debug "^3.2.7" - find-up "^2.1.0" - -eslint-plugin-es@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-es/-/eslint-plugin-es-3.0.1.tgz#75a7cdfdccddc0589934aeeb384175f221c57893" - integrity sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ== - dependencies: - eslint-utils "^2.0.0" - regexpp "^3.0.0" - -eslint-plugin-import@^2.22.0: - version "2.26.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.26.0.tgz#f812dc47be4f2b72b478a021605a59fc6fe8b88b" - integrity sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA== - dependencies: - array-includes "^3.1.4" - array.prototype.flat "^1.2.5" - debug "^2.6.9" - doctrine "^2.1.0" - eslint-import-resolver-node "^0.3.6" - eslint-module-utils "^2.7.3" - has "^1.0.3" - is-core-module "^2.8.1" - is-glob "^4.0.3" - minimatch "^3.1.2" - object.values "^1.1.5" - resolve "^1.22.0" - tsconfig-paths "^3.14.1" - -eslint-plugin-node@^11.1.0: - version "11.1.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-node/-/eslint-plugin-node-11.1.0.tgz#c95544416ee4ada26740a30474eefc5402dc671d" - integrity sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g== - dependencies: - eslint-plugin-es "^3.0.0" - eslint-utils "^2.0.0" - ignore "^5.1.1" - minimatch "^3.0.4" - resolve "^1.10.1" - semver "^6.1.0" - -eslint-plugin-prettier@^3.1.3: - version "3.4.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-3.4.1.tgz#e9ddb200efb6f3d05ffe83b1665a716af4a387e5" - integrity sha512-htg25EUYUeIhKHXjOinK4BgCcDwtLHjqaxCDsMy5nbnUMkKFvIhMVCp+5GFUXQ4Nr8lBsPqtGAqBenbpFqAA2g== - dependencies: - prettier-linter-helpers "^1.0.0" - -eslint-plugin-promise@^4.2.1: - version "4.3.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-promise/-/eslint-plugin-promise-4.3.1.tgz#61485df2a359e03149fdafc0a68b0e030ad2ac45" - integrity sha512-bY2sGqyptzFBDLh/GMbAxfdJC+b0f23ME63FOE4+Jao0oZ3E1LEwFtWJX/1pGMJLiTtrSSern2CRM/g+dfc0eQ== - -eslint-plugin-react-hooks@^4.0.8: - version "4.5.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.5.0.tgz#5f762dfedf8b2cf431c689f533c9d3fa5dcf25ad" - integrity sha512-8k1gRt7D7h03kd+SAAlzXkQwWK22BnK6GKZG+FJA6BAGy22CFvl8kCIXKpVux0cCxMWDQUPqSok0LKaZ0aOcCw== - -eslint-plugin-react@^7.20.5: - version "7.30.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.30.0.tgz#8e7b1b2934b8426ac067a0febade1b13bd7064e3" - integrity sha512-RgwH7hjW48BleKsYyHK5vUAvxtE9SMPDKmcPRQgtRCYaZA0XQPt5FSkrU3nhz5ifzMZcA8opwmRJ2cmOO8tr5A== - dependencies: - array-includes "^3.1.5" - array.prototype.flatmap "^1.3.0" - doctrine "^2.1.0" - estraverse "^5.3.0" - jsx-ast-utils "^2.4.1 || ^3.0.0" - minimatch "^3.1.2" - object.entries "^1.1.5" - object.fromentries "^2.0.5" - object.hasown "^1.1.1" - object.values "^1.1.5" - prop-types "^15.8.1" - resolve "^2.0.0-next.3" - semver "^6.3.0" - string.prototype.matchall "^4.0.7" - -eslint-plugin-standard@^4.0.1: - version "4.1.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-standard/-/eslint-plugin-standard-4.1.0.tgz#0c3bf3a67e853f8bbbc580fb4945fbf16f41b7c5" - integrity sha512-ZL7+QRixjTR6/528YNGyDotyffm5OQst/sGxKDwGb9Uqs4In5Egi4+jbobhqJoyoCM6/7v/1A5fhQ7ScMtDjaQ== - -eslint-scope@^5.0.0, eslint-scope@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" - integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== - dependencies: - esrecurse "^4.3.0" - estraverse "^4.1.1" - -eslint-utils@^2.0.0, eslint-utils@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27" - integrity sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg== - dependencies: - eslint-visitor-keys "^1.1.0" - -eslint-visitor-keys@^1.1.0, eslint-visitor-keys@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" - integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== - -eslint-visitor-keys@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303" - integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== - -eslint@^7.25.0: - version "7.32.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.32.0.tgz#c6d328a14be3fb08c8d1d21e12c02fdb7a2a812d" - integrity sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA== - dependencies: - "@babel/code-frame" "7.12.11" - "@eslint/eslintrc" "^0.4.3" - "@humanwhocodes/config-array" "^0.5.0" - ajv "^6.10.0" - chalk "^4.0.0" - cross-spawn "^7.0.2" - debug "^4.0.1" - doctrine "^3.0.0" - enquirer "^2.3.5" - escape-string-regexp "^4.0.0" - eslint-scope "^5.1.1" - eslint-utils "^2.1.0" - eslint-visitor-keys "^2.0.0" - espree "^7.3.1" - esquery "^1.4.0" - esutils "^2.0.2" - fast-deep-equal "^3.1.3" - file-entry-cache "^6.0.1" - functional-red-black-tree "^1.0.1" - glob-parent "^5.1.2" - globals "^13.6.0" - ignore "^4.0.6" - import-fresh "^3.0.0" - imurmurhash "^0.1.4" - is-glob "^4.0.0" - js-yaml "^3.13.1" - json-stable-stringify-without-jsonify "^1.0.1" - levn "^0.4.1" - lodash.merge "^4.6.2" - minimatch "^3.0.4" - natural-compare "^1.4.0" - optionator "^0.9.1" - progress "^2.0.0" - regexpp "^3.1.0" - semver "^7.2.1" - strip-ansi "^6.0.0" - strip-json-comments "^3.1.0" - table "^6.0.9" - text-table "^0.2.0" - v8-compile-cache "^2.0.3" - -espree@^7.3.0, espree@^7.3.1: - version "7.3.1" - resolved "https://registry.yarnpkg.com/espree/-/espree-7.3.1.tgz#f2df330b752c6f55019f8bd89b7660039c1bbbb6" - integrity sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g== - dependencies: - acorn "^7.4.0" - acorn-jsx "^5.3.1" - eslint-visitor-keys "^1.3.0" - -esprima@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" - integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== - -esquery@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.4.0.tgz#2148ffc38b82e8c7057dfed48425b3e61f0f24a5" - integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w== - 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@^4.1.1: - version "4.3.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" - integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== - -estraverse@^5.1.0, estraverse@^5.2.0, estraverse@^5.3.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-bloom-filters@^1.0.6: - version "1.0.10" - resolved "https://registry.yarnpkg.com/ethereum-bloom-filters/-/ethereum-bloom-filters-1.0.10.tgz#3ca07f4aed698e75bd134584850260246a5fed8a" - integrity sha512-rxJ5OFN3RwjQxDcFP2Z5+Q9ho4eIdEmSc2ht0fCu8Se9nbXjZ7/031uXoUYJ87KHCOdVeiUuwSnoS7hmYAGVHA== - dependencies: - js-sha3 "^0.8.0" - -ethereum-cryptography@^0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz#8d6143cfc3d74bf79bbd8edecdf29e4ae20dd191" - integrity sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ== - dependencies: - "@types/pbkdf2" "^3.0.0" - "@types/secp256k1" "^4.0.1" - blakejs "^1.1.0" - browserify-aes "^1.2.0" - bs58check "^2.1.2" - create-hash "^1.2.0" - create-hmac "^1.1.7" - hash.js "^1.1.7" - keccak "^3.0.0" - pbkdf2 "^3.0.17" - randombytes "^2.1.0" - safe-buffer "^5.1.2" - scrypt-js "^3.0.0" - secp256k1 "^4.0.1" - setimmediate "^1.0.5" - -ethereumjs-util@^7.1.0: - version "7.1.5" - resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz#9ecf04861e4fbbeed7465ece5f23317ad1129181" - integrity sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg== - dependencies: - "@types/bn.js" "^5.1.0" - bn.js "^5.1.2" - create-hash "^1.1.2" - ethereum-cryptography "^0.1.3" - rlp "^2.2.4" - -ethjs-unit@0.1.6: - version "0.1.6" - resolved "https://registry.yarnpkg.com/ethjs-unit/-/ethjs-unit-0.1.6.tgz#c665921e476e87bce2a9d588a6fe0405b2c41699" - integrity sha512-/Sn9Y0oKl0uqQuvgFk/zQgR7aw1g36qX/jzSQ5lSwlO0GigPymk4eGQfeNTD03w1dPOqfz8V77Cy43jH56pagw== - dependencies: - bn.js "4.11.6" - number-to-bn "1.7.0" - -event-emitter@^0.3.5: - version "0.3.5" - resolved "https://registry.yarnpkg.com/event-emitter/-/event-emitter-0.3.5.tgz#df8c69eef1647923c7157b9ce83840610b02cc39" - integrity sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA== - dependencies: - d "1" - es5-ext "~0.10.14" - -eventemitter3@^4.0.7: - version "4.0.7" - resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" - integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== - -evp_bytestokey@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02" - integrity sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA== - dependencies: - md5.js "^1.3.4" - safe-buffer "^5.1.1" - -ext@^1.1.2: - version "1.6.0" - resolved "https://registry.yarnpkg.com/ext/-/ext-1.6.0.tgz#3871d50641e874cc172e2b53f919842d19db4c52" - integrity sha512-sdBImtzkq2HpkdRLtlLWDa6w4DX22ijZLKx8BMPUuKe1c5lbN6xwQDQCxSfxBQnHZ13ls/FH0MQZx/q/gr6FQg== - dependencies: - type "^2.5.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: - version "1.2.0" - resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.2.0.tgz#73ee11982d86caaf7959828d519cfe927fac5f03" - integrity sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w== - -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== - -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" - -find-up@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" - integrity sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ== - dependencies: - locate-path "^2.0.0" - -flat-cache@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" - integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== - dependencies: - flatted "^3.1.0" - rimraf "^3.0.2" - -flatted@^3.1.0: - version "3.2.5" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.5.tgz#76c8584f4fc843db64702a6bd04ab7a8bd666da3" - integrity sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg== - -follow-redirects@^1.14.0: - version "1.15.1" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.1.tgz#0ca6a452306c9b276e4d3127483e29575e207ad5" - integrity sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA== - -form-data@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-3.0.1.tgz#ebd53791b78356a99af9a300d4282c4d5eb9755f" - integrity sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg== - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.8" - mime-types "^2.1.12" - -fs.realpath@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" - integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== - -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.prototype.name@^1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.5.tgz#cce0505fe1ffb80503e6f9e46cc64e46a12a9621" - integrity sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.19.0" - functions-have-names "^1.2.2" - -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.2: - 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-intrinsic@^1.0.2, get-intrinsic@^1.1.0, get-intrinsic@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.1.tgz#15f59f376f855c446963948f0d24cd3637b4abc6" - integrity sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q== - dependencies: - function-bind "^1.1.1" - has "^1.0.3" - has-symbols "^1.0.1" - -get-stdin@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-6.0.0.tgz#9e09bf712b360ab9225e812048f71fde9c89657b" - integrity sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g== - -get-stdin@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-8.0.0.tgz#cbad6a73feb75f6eeb22ba9e01f89aa28aa97a53" - integrity sha512-sY22aA6xchAzprjyqmSEQv4UbAAzRN0L2dQB0NlN5acTTK9Don6nhoc3eAbUnpZiCANAMfd/+40kVdKfFygohg== - -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" - -glob-parent@^5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" - integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== - dependencies: - is-glob "^4.0.1" - -glob-promise@^3.4.0: - version "3.4.0" - resolved "https://registry.yarnpkg.com/glob-promise/-/glob-promise-3.4.0.tgz#b6b8f084504216f702dc2ce8c9bc9ac8866fdb20" - integrity sha512-q08RJ6O+eJn+dVanerAndJwIcumgbDdYiUT7zFQl3Wm1xD6fBKtah7H8ZJChj4wP+8C+QfeVy8xautR7rdmKEw== - dependencies: - "@types/glob" "*" - -glob@^7.1.3, glob@^7.1.6: - version "7.2.3" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" - integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.1.1" - once "^1.3.0" - path-is-absolute "^1.0.0" - -globals@^13.6.0, globals@^13.9.0: - version "13.15.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-13.15.0.tgz#38113218c907d2f7e98658af246cef8b77e90bac" - integrity sha512-bpzcOlgDhMG070Av0Vy5Owklpv1I6+j96GhUI7Rh7IzDCKLzboflLrrfqMu8NquDbiR4EOQk7XzJwqVJxicxog== - dependencies: - type-fest "^0.20.2" - -google-protobuf@^3.14.0: - version "3.20.1" - resolved "https://registry.yarnpkg.com/google-protobuf/-/google-protobuf-3.20.1.tgz#1b255c2b59bcda7c399df46c65206aa3c7a0ce8b" - integrity sha512-XMf1+O32FjYIV3CYu6Tuh5PNbfNEU5Xu22X+Xkdb/DUexFlCzhvv7d5Iirm4AOwn8lv4al1YvIhzGrg2j9Zfzw== - -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" - integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== - -has-flag@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" - integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== - -has-property-descriptors@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz#610708600606d36961ed04c196193b6a607fa861" - integrity sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ== - dependencies: - get-intrinsic "^1.1.1" - -has-symbols@^1.0.1, 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" - integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== - dependencies: - function-bind "^1.1.1" - -hash-base@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.1.0.tgz#55c381d9e06e1d2997a883b4a3fddfe7f0d3af33" - integrity sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA== - dependencies: - inherits "^2.0.4" - readable-stream "^3.6.0" - safe-buffer "^5.2.0" - -hash.js@^1.0.0, hash.js@^1.0.3, hash.js@^1.1.7: - version "1.1.7" - resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42" - integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA== - dependencies: - inherits "^2.0.3" - minimalistic-assert "^1.0.1" - -hmac-drbg@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" - integrity sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg== - dependencies: - hash.js "^1.0.3" - minimalistic-assert "^1.0.0" - minimalistic-crypto-utils "^1.0.1" - -i18n-iso-countries@^6.8.0: - version "6.8.0" - resolved "https://registry.yarnpkg.com/i18n-iso-countries/-/i18n-iso-countries-6.8.0.tgz#eebbc75594c6832aff86176c1bb38daa133d6dfd" - integrity sha512-jJs/+CA6+VUICFxqGcB0vFMERGfhfvyNk+8Vb9EagSZkl7kSpm/kT0VyhvzM/zixDWEV/+oN9L7v/GT9BwzoGg== - dependencies: - diacritics "1.3.0" - -ieee754@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" - integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== - -ignore@^4.0.6: - version "4.0.6" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" - integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== - -ignore@^5.1.1: - version "5.2.0" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.0.tgz#6d3bac8fa7fe0d45d9f9be7bac2fc279577e345a" - integrity sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ== - -import-fresh@^3.0.0, import-fresh@^3.2.1: - 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== - -inflight@^1.0.4: - version "1.0.6" - resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" - integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== - dependencies: - once "^1.3.0" - wrappy "1" - -inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" - integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== - -internal-slot@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.3.tgz#7347e307deeea2faac2ac6205d4bc7d34967f59c" - integrity sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA== - dependencies: - get-intrinsic "^1.1.0" - has "^1.0.3" - side-channel "^1.0.4" - -ip-regex@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-4.3.0.tgz#687275ab0f57fa76978ff8f4dddc8a23d5990db5" - integrity sha512-B9ZWJxHHOHUhUjCPrMpLD4xEq35bUTClHM1S6CBU5ixQnkZmwipwgc96vAd7AAGM9TGHvJR+Uss+/Ak6UphK+Q== - -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-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.0: - version "2.0.5" - resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.5.tgz#ebc252e400d22ff8d77fa09888821a24a658c191" - integrity sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ== - -is-callable@^1.1.4, is-callable@^1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.4.tgz#47301d58dd0259407865547853df6d61fe471945" - integrity sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w== - -is-core-module@^2.2.0, is-core-module@^2.8.1: - version "2.9.0" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.9.0.tgz#e1c34429cd51c6dd9e09e0799e396e27b19a9c69" - integrity sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A== - 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-extglob@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" - integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== - -is-fullwidth-code-point@^3.0.0: - version "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.0, is-glob@^4.0.1, is-glob@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" - integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== - dependencies: - is-extglob "^2.1.1" - -is-hex-prefixed@1.0.0: - version "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-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-promise@^2.2.2: - version "2.2.2" - resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.2.2.tgz#39ab959ccbf9a774cf079f7b40c7a26f763135f1" - integrity sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ== - -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-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-typedarray@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" - integrity sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA== - -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" - -isexe@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" - integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== - -iso-3166-2@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/iso-3166-2/-/iso-3166-2-1.0.0.tgz#20c5cda527b56bfc7409c6802d9bff0119086131" - integrity sha512-xLAazfKZzwlsg/Zz/GQGQk3jJez5/2ORrjD3TjSuqz/arMht/xTK49c0GOE3afO/gEd9tHtBVVlfBla01unUng== - -iso-639-1@^2.1.9: - version "2.1.14" - resolved "https://registry.yarnpkg.com/iso-639-1/-/iso-639-1-2.1.14.tgz#37042694977900d55e69cf6960fdb3580ef48e03" - integrity sha512-nekI+mmtSpYySPXIXJtWhv/s+06nAU9wQzq4QPu3YSEMmjnkOoippPY+MEdqDP0Pie8/LsOFEuPbUHslLanDag== - -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-tokens@^3.0.0 || ^4.0.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@^3.13.1: - version "3.14.1" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" - integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== - dependencies: - argparse "^1.0.7" - esprima "^4.0.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-schema-ref-parser@^9.0.6: - version "9.0.9" - resolved "https://registry.yarnpkg.com/json-schema-ref-parser/-/json-schema-ref-parser-9.0.9.tgz#66ea538e7450b12af342fa3d5b8458bc1e1e013f" - integrity sha512-qcP2lmGy+JUoQJ4DOQeLaZDqH9qSkeGCK3suKWxJXS82dg728Mn3j97azDMaOUmJAN4uCq91LdPx4K7E8F1a7Q== - dependencies: - "@apidevtools/json-schema-ref-parser" "9.0.9" - -json-schema-to-typescript@^10.1.4: - version "10.1.5" - resolved "https://registry.yarnpkg.com/json-schema-to-typescript/-/json-schema-to-typescript-10.1.5.tgz#9ac32808eb4d7c158684e270438ad07256c0cb1c" - integrity sha512-X8bNNksfCQo6LhEuqNxmZr4eZpPjXZajmimciuk8eWXzZlif9Brq7WuMGD/SOhBKcRKP2SGVDNZbC28WQqx9Rg== - dependencies: - "@types/json-schema" "^7.0.6" - "@types/lodash" "^4.14.168" - "@types/prettier" "^2.1.5" - cli-color "^2.0.0" - get-stdin "^8.0.0" - glob "^7.1.6" - glob-promise "^3.4.0" - is-glob "^4.0.1" - json-schema-ref-parser "^9.0.6" - json-stringify-safe "^5.0.1" - lodash "^4.17.20" - minimist "^1.2.5" - mkdirp "^1.0.4" - mz "^2.7.0" - prettier "^2.2.0" - -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== - -json-stringify-safe@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" - integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA== - -json5@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe" - integrity sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow== - dependencies: - minimist "^1.2.0" - -"jsx-ast-utils@^2.4.1 || ^3.0.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.3.0.tgz#e624f259143b9062c92b6413ff92a164c80d3ccb" - integrity sha512-XzO9luP6L0xkxwhIJMTJQpZo/eeN60K08jHdexfD569AGxeNug6UketeHXEhROoM8aR7EcUoOQmIhcJQjcuq8Q== - dependencies: - array-includes "^3.1.4" - object.assign "^4.1.2" - -keccak@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/keccak/-/keccak-3.0.2.tgz#4c2c6e8c54e04f2670ee49fa734eb9da152206e0" - integrity sha512-PyKKjkH53wDMLGrvmRGSNWgmSxZOUqbnXwKL9tmgbFYA1iAYqW21kfR7mZXV0MlESiefxQQE9X9fTa3X+2MPDQ== - dependencies: - node-addon-api "^2.0.0" - node-gyp-build "^4.2.0" - readable-stream "^3.6.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" - -locate-path@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" - integrity sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA== - dependencies: - p-locate "^2.0.0" - path-exists "^3.0.0" - -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.15: - version "4.17.15" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548" - integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A== - -lodash@^4.17.15, lodash@^4.17.20, lodash@^4.17.21: - version "4.17.21" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" - integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== - -long@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/long/-/long-4.0.0.tgz#9a7b71cfb7d361a194ea555241c92f7468d5bf28" - integrity sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA== - -loose-envify@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" - integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== - dependencies: - js-tokens "^3.0.0 || ^4.0.0" - -lru-cache@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" - integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== - dependencies: - yallist "^4.0.0" - -lru-queue@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/lru-queue/-/lru-queue-0.1.0.tgz#2738bd9f0d3cf4f84490c5736c48699ac632cda3" - integrity sha512-BpdYkt9EvGl8OfWHDQPISVpcl5xZthb+XPsbELj5AQXxIC8IriDZIQYjBJPEm5rS420sjZ0TLEzRcq5KdBhYrQ== - dependencies: - es5-ext "~0.10.2" - -md5.js@^1.3.4: - version "1.3.5" - resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" - integrity sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg== - dependencies: - hash-base "^3.0.0" - inherits "^2.0.1" - safe-buffer "^5.1.2" - -memoizee@^0.4.15: - version "0.4.15" - resolved "https://registry.yarnpkg.com/memoizee/-/memoizee-0.4.15.tgz#e6f3d2da863f318d02225391829a6c5956555b72" - integrity sha512-UBWmJpLZd5STPm7PMUlOw/TSy972M+z8gcyQ5veOnSDRREz/0bmpyTfKt3/51DhEBqCZQn1udM/5flcSPYhkdQ== - dependencies: - d "^1.0.1" - es5-ext "^0.10.53" - es6-weak-map "^2.0.3" - event-emitter "^0.3.5" - is-promise "^2.2.2" - lru-queue "^0.1.0" - next-tick "^1.1.0" - timers-ext "^0.1.7" - -merkletreejs@^0.2.31: - version "0.2.31" - resolved "https://registry.yarnpkg.com/merkletreejs/-/merkletreejs-0.2.31.tgz#c8ae7bebf1678c0f92d6d8266aeddd3d97cc0c37" - integrity sha512-dnK2sE43OebmMe5Qnq1wXvvMIjZjm1u6CcB2KeW6cghlN4p21OpCUr2p56KTVf20KJItNChVsGnimcscp9f+yw== - dependencies: - bignumber.js "^9.0.1" - buffer-reverse "^1.0.1" - crypto-js "^3.1.9-1" - treeify "^1.1.0" - web3-utils "^1.3.4" - -micro-base@^0.9.0: - version "0.9.0" - resolved "https://registry.yarnpkg.com/micro-base/-/micro-base-0.9.0.tgz#09cfe20285bec0ea97f41dc3d10e3fba3d0266ee" - integrity sha512-4+tOMKidYT5nQ6/UNmYrGVO5PMcnJdfuR4NC8HK8s2H61B4itOhA9yrsjBdqGV7ecdtej36x3YSIfPLRmPrspg== - -mime-db@1.52.0: - version "1.52.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" - integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== - -mime-types@^2.1.12: - version "2.1.35" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" - integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== - dependencies: - mime-db "1.52.0" - -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" - integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== - -minimalistic-crypto-utils@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" - integrity sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg== - -minimatch@^3.0.4, 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" - -minimist@^1.2.0, minimist@^1.2.5, 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== - -mkdirp@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" - integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== - -mock-socket@^9.1.5: - version "9.1.5" - resolved "https://registry.yarnpkg.com/mock-socket/-/mock-socket-9.1.5.tgz#2c4e44922ad556843b6dfe09d14ed8041fa2cdeb" - integrity sha512-3DeNIcsQixWHHKk6NdoBhWI4t1VMj5/HzfnI1rE/pLl5qKx7+gd4DNA07ehTaZ6MoUU053si6Hd+YtiM/tQZfg== - -moment@^2.24.0: - version "2.29.3" - resolved "https://registry.yarnpkg.com/moment/-/moment-2.29.3.tgz#edd47411c322413999f7a5940d526de183c031f3" - integrity sha512-c6YRvhEo//6T2Jz/vVtYzqBzwvPT95JBQ+smCytzf7c50oMZRsR/a4w88aD34I+/QVSfnoAnSBFPJHItlOMJVw== - -ms@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" - integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== - -ms@2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" - integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== - -ms@^2.1.1: - version "2.1.3" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" - integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== - -mz@^2.7.0: - version "2.7.0" - resolved "https://registry.yarnpkg.com/mz/-/mz-2.7.0.tgz#95008057a56cafadc2bc63dde7f9ff6955948e32" - integrity sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q== - dependencies: - any-promise "^1.0.0" - object-assign "^4.0.1" - thenify-all "^1.0.0" - -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== - -next-tick@1, next-tick@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.1.0.tgz#1836ee30ad56d67ef281b22bd199f709449b35eb" - integrity sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ== - -nock@^13.2.6: - version "13.2.9" - resolved "https://registry.yarnpkg.com/nock/-/nock-13.2.9.tgz#4faf6c28175d36044da4cfa68e33e5a15086ad4c" - integrity sha512-1+XfJNYF1cjGB+TKMWi29eZ0b82QOvQs2YoLNzbpWGqFMtRQHTa57osqdGj4FrFPgkO4D4AZinzUJR9VvW3QUA== - dependencies: - debug "^4.1.0" - json-stringify-safe "^5.0.1" - lodash "^4.17.21" - propagate "^2.0.0" - -node-addon-api@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-2.0.2.tgz#432cfa82962ce494b132e9d72a15b29f71ff5d32" - integrity sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA== - -node-fetch@^2.6.6, node-fetch@^2.6.7: - version "2.6.7" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad" - integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ== - dependencies: - whatwg-url "^5.0.0" - -node-gyp-build@^4.2.0, node-gyp-build@^4.3.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.4.0.tgz#42e99687ce87ddeaf3a10b99dc06abc11021f3f4" - integrity sha512-amJnQCcgtRVw9SvoebO3BKGESClrfXGCUTX9hSn1OuGQTQBOZmVd0Z0OlecpuRksKvbsUqALE8jls/ErClAPuQ== - -number-to-bn@1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/number-to-bn/-/number-to-bn-1.7.0.tgz#bb3623592f7e5f9e0030b1977bd41a0c53fe1ea0" - integrity sha512-wsJ9gfSz1/s4ZsJN01lyonwuxA1tml6X1yBDnfpMglypcBRFZZkus26EdPSlqS5GJfYddVZa22p3VNb3z5m5Ig== - dependencies: - bn.js "4.11.6" - strip-hex-prefix "1.0.0" - -object-assign@^4.0.1, object-assign@^4.1.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.12.0, 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-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.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.2.tgz#0ed54a342eceb37b38ff76eb831a0e788cb63940" - integrity sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ== - dependencies: - call-bind "^1.0.0" - define-properties "^1.1.3" - has-symbols "^1.0.1" - object-keys "^1.1.1" - -object.entries@^1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.5.tgz#e1acdd17c4de2cd96d5a08487cfb9db84d881861" - integrity sha512-TyxmjUoZggd4OrrU1W66FMDG6CuqJxsFvymeyXI51+vQLN67zYfZseptRge703kKQdo4uccgAKebXFcRCzk4+g== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.19.1" - -object.fromentries@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.5.tgz#7b37b205109c21e741e605727fe8b0ad5fa08251" - integrity sha512-CAyG5mWQRRiBU57Re4FKoTBjXfDoNwdFVH2Y1tS9PqCsfUTymAohOkEMSG3aRNKmv4lV3O7p1et7c187q6bynw== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.19.1" - -object.hasown@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/object.hasown/-/object.hasown-1.1.1.tgz#ad1eecc60d03f49460600430d97f23882cf592a3" - integrity sha512-LYLe4tivNQzq4JdaWW6WO3HMZZJWzkkH8fnI6EebWl0VZth2wL2Lovm74ep2/gZzlaTdV62JZHEqHQ2yVn8Q/A== - dependencies: - define-properties "^1.1.4" - es-abstract "^1.19.5" - -object.values@^1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.5.tgz#959f63e3ce9ef108720333082131e4a459b716ac" - integrity sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.19.1" - -once@^1.3.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" - integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== - dependencies: - wrappy "1" - -optionator@^0.9.1: - version "0.9.1" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" - integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== - dependencies: - deep-is "^0.1.3" - fast-levenshtein "^2.0.6" - levn "^0.4.1" - prelude-ls "^1.2.1" - type-check "^0.4.0" - word-wrap "^1.2.3" - -p-limit@^1.1.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" - integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q== - dependencies: - p-try "^1.0.0" - -p-locate@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" - integrity sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg== - dependencies: - p-limit "^1.1.0" - -p-try@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" - integrity sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww== - -pako@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/pako/-/pako-2.0.4.tgz#6cebc4bbb0b6c73b0d5b8d7e8476e2b2fbea576d" - integrity sha512-v8tweI900AUkZN6heMU/4Uy4cXRc2AYNRggVmTR+dEncawDJgCdLMximOVA2p4qO57WMynangsfGRb5WD6L1Bg== - -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" - -path-exists@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" - integrity sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ== - -path-is-absolute@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" - integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== - -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-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== - -pbkdf2@^3.0.17: - version "3.1.2" - resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.1.2.tgz#dd822aa0887580e52f1a039dc3eda108efae3075" - integrity sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA== - dependencies: - create-hash "^1.1.2" - create-hmac "^1.1.4" - ripemd160 "^2.0.1" - safe-buffer "^5.0.1" - sha.js "^2.4.8" - -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== - -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: - fast-diff "^1.1.2" - -prettier@^2.2.0, prettier@^2.2.1: - version "2.6.2" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.6.2.tgz#e26d71a18a74c3d0f0597f55f01fb6c06c206032" - integrity sha512-PkUpF+qoXTqhOeWL9fu7As8LXsIUZ1WYaJiY/a7McAQzxjk82OF0tibkFXVCDImZtWxbvojFjerkiLb0/q8mew== - -progress@^2.0.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" - integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== - -prop-types@^15.8.1: - version "15.8.1" - resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5" - integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg== - dependencies: - loose-envify "^1.4.0" - object-assign "^4.1.1" - react-is "^16.13.1" - -propagate@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/propagate/-/propagate-2.0.1.tgz#40cdedab18085c792334e64f0ac17256d38f9a45" - integrity sha512-vGrhOavPSTz4QVNuBNdcNXePNdNMaO1xj9yBeH1ScQPjk/rhg9sSlCXPhMkFuaNNW/syTvYqsnbIJxMBfRbbag== - -protobufjs@^6.11.2: - version "6.11.3" - resolved "https://registry.yarnpkg.com/protobufjs/-/protobufjs-6.11.3.tgz#637a527205a35caa4f3e2a9a4a13ddffe0e7af74" - integrity sha512-xL96WDdCZYdU7Slin569tFX712BxsxslWwAfAhCYjQKGTq7dAU91Lomy6nLLhh/dyGhk/YH4TwTSRxTzhuHyZg== - dependencies: - "@protobufjs/aspromise" "^1.1.2" - "@protobufjs/base64" "^1.1.2" - "@protobufjs/codegen" "^2.0.4" - "@protobufjs/eventemitter" "^1.1.0" - "@protobufjs/fetch" "^1.1.0" - "@protobufjs/float" "^1.0.2" - "@protobufjs/inquire" "^1.1.0" - "@protobufjs/path" "^1.1.2" - "@protobufjs/pool" "^1.1.0" - "@protobufjs/utf8" "^1.1.0" - "@types/long" "^4.0.1" - "@types/node" ">=13.7.0" - long "^4.0.0" - -punycode@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" - integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== - -randombytes@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" - integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== - dependencies: - safe-buffer "^5.1.0" - -react-is@^16.13.1: - version "16.13.1" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" - integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== - -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== - dependencies: - inherits "^2.0.3" - string_decoder "^1.1.1" - util-deprecate "^1.0.1" - -regenerator-runtime@^0.13.4: - version "0.13.9" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz#8925742a98ffd90814988d7566ad30ca3b263b52" - integrity sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA== - -regexp.prototype.flags@^1.4.1, regexp.prototype.flags@^1.4.3: - version "1.4.3" - resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz#87cab30f80f66660181a3bb7bf5981a872b367ac" - integrity sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - functions-have-names "^1.2.2" - -regexpp@^3.0.0, regexpp@^3.1.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" - integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== - -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@^1.10.1, resolve@^1.20.0, resolve@^1.22.0: - version "1.22.0" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.0.tgz#5e0b8c67c15df57a89bdbabe603a002f21731198" - integrity sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw== - dependencies: - is-core-module "^2.8.1" - path-parse "^1.0.7" - supports-preserve-symlinks-flag "^1.0.0" - -resolve@^2.0.0-next.3: - version "2.0.0-next.3" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-2.0.0-next.3.tgz#d41016293d4a8586a39ca5d9b5f15cbea1f55e46" - integrity sha512-W8LucSynKUIDu9ylraa7ueVZ7hc0uAgJBxVsQSKOXOyle8a93qXhcz+XAXZ8bIq2d6i4Ehddn6Evt+0/UwKk6Q== - dependencies: - is-core-module "^2.2.0" - path-parse "^1.0.6" - -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" - integrity sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA== - dependencies: - hash-base "^3.0.0" - inherits "^2.0.1" - -rlp@^2.2.4: - version "2.2.7" - resolved "https://registry.yarnpkg.com/rlp/-/rlp-2.2.7.tgz#33f31c4afac81124ac4b283e2bd4d9720b30beaf" - integrity sha512-d5gdPmgQ0Z+AklL2NVXr/IoSjNZFfTVvQWzL/AM2AOcSzYP2xjlb0AC8YyCLc41MSNf6P6QVtjgPdmVtzb+4lQ== - dependencies: - bn.js "^5.2.0" - -rxjs@^7.3.0: - version "7.5.5" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.5.5.tgz#2ebad89af0f560f460ad5cc4213219e1f7dd4e9f" - integrity sha512-sy+H0pQofO95VDmFLzyaw9xNJU4KTRSwQIGM6+iG3SypAtCiLDzpeG8sJrNCWn2Up9km+KhkvTdbkrdy+yzZdw== - dependencies: - tslib "^2.1.0" - -rxjs@^7.5.5: - version "7.5.6" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.5.6.tgz#0446577557862afd6903517ce7cae79ecb9662bc" - integrity sha512-dnyv2/YsXhnm461G+R/Pe5bWP41Nm6LBXEYWI6eiFP4fiwx6WRI/CD0zbdVAudd9xwLEF2IDcKXLHit0FYjUzw== - dependencies: - tslib "^2.1.0" - -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" - integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== - -scrypt-js@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/scrypt-js/-/scrypt-js-3.0.1.tgz#d314a57c2aef69d1ad98a138a21fe9eafa9ee312" - integrity sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA== - -scryptsy@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/scryptsy/-/scryptsy-2.1.0.tgz#8d1e8d0c025b58fdd25b6fa9a0dc905ee8faa790" - integrity sha512-1CdSqHQowJBnMAFyPEBRfqag/YP9OF394FV+4YREIJX4ljD7OxvQRDayyoyyCk+senRjSkP6VnUNQmVQqB6g7w== - -secp256k1@^4.0.1: - version "4.0.3" - resolved "https://registry.yarnpkg.com/secp256k1/-/secp256k1-4.0.3.tgz#c4559ecd1b8d3c1827ed2d1b94190d69ce267303" - integrity sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA== - dependencies: - elliptic "^6.5.4" - node-addon-api "^2.0.0" - node-gyp-build "^4.2.0" - -semver@^6.1.0, 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== - -semver@^7.2.1, semver@^7.3.2: - version "7.3.7" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.7.tgz#12c5b649afdbf9049707796e22a4028814ce523f" - integrity sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g== - dependencies: - lru-cache "^6.0.0" - -setimmediate@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" - integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU= - -sha.js@^2.4.0, sha.js@^2.4.8: - version "2.4.11" - resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" - integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ== - dependencies: - 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" - integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== - dependencies: - call-bind "^1.0.0" - get-intrinsic "^1.0.2" - object-inspect "^1.9.0" - -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" - -sprintf-js@~1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" - integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= - -string-width@^4.2.3: - version "4.2.3" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" - integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.1" - -string.prototype.matchall@^4.0.7: - version "4.0.7" - resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.7.tgz#8e6ecb0d8a1fb1fda470d81acecb2dba057a481d" - integrity sha512-f48okCX7JiwVi1NXCVWcFnZgADDC/n2vePlQ/KUCNqCikLLilQvwjMO8+BHVKvgzH0JB0J9LEPgxOGT02RoETg== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.19.1" - get-intrinsic "^1.1.1" - has-symbols "^1.0.3" - internal-slot "^1.0.3" - regexp.prototype.flags "^1.4.1" - side-channel "^1.0.4" - -string.prototype.trimend@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz#914a65baaab25fbdd4ee291ca7dde57e869cb8d0" - integrity sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.19.5" - -string.prototype.trimstart@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz#5466d93ba58cfa2134839f81d7f42437e8c01fef" - integrity sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.19.5" - -string_decoder@^1.1.1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" - integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== - dependencies: - safe-buffer "~5.2.0" - -strip-ansi@^6.0.0, strip-ansi@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" - integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== - 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 sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM= - -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" - integrity sha1-DF8VX+8RUTczd96du1iNoFUA428= - dependencies: - is-hex-prefixed "1.0.0" - -strip-json-comments@^3.1.0, 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== - -supports-color@^5.3.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" - integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== - dependencies: - has-flag "^3.0.0" - -supports-color@^7.1.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" - integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== - dependencies: - has-flag "^4.0.0" - -supports-preserve-symlinks-flag@^1.0.0: - version "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== - -table@^6.0.9: - version "6.8.0" - resolved "https://registry.yarnpkg.com/table/-/table-6.8.0.tgz#87e28f14fa4321c3377ba286f07b79b281a3b3ca" - integrity sha512-s/fitrbVeEyHKFa7mFdkuQMWlH1Wgw/yEXMt5xACT4ZpzWFluehAxRtUUQKPuWhaLAWhFcVx6w3oC8VKaUfPGA== - 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" - -text-table@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" - integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= - -thenify-all@^1.0.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/thenify-all/-/thenify-all-1.6.0.tgz#1a1918d402d8fc3f98fbf234db0bcc8cc10e9726" - integrity sha1-GhkY1ALY/D+Y+/I02wvMjMEOlyY= - dependencies: - thenify ">= 3.1.0 < 4" - -"thenify@>= 3.1.0 < 4": - version "3.3.1" - resolved "https://registry.yarnpkg.com/thenify/-/thenify-3.3.1.tgz#8932e686a4066038a016dd9e2ca46add9838a95f" - integrity sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw== - dependencies: - any-promise "^1.0.0" - -timers-ext@^0.1.7: - version "0.1.7" - resolved "https://registry.yarnpkg.com/timers-ext/-/timers-ext-0.1.7.tgz#6f57ad8578e07a3fb9f91d9387d65647555e25c6" - integrity sha512-b85NUNzTSdodShTIbky6ZF02e8STtVVfD+fu4aXXShEELpozH+bCpJLYMPZbsABN2wDH7fJpqIoXxJpzbf0NqQ== - dependencies: - es5-ext "~0.10.46" - next-tick "1" - -tr46@~0.0.3: - version "0.0.3" - resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" - integrity sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o= - -treeify@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/treeify/-/treeify-1.1.0.tgz#4e31c6a463accd0943879f30667c4fdaff411bb8" - integrity sha512-1m4RA7xVAJrSGrrXGs0L3YTwyvBs2S8PbRHaLZAkFw7JR8oIFwYtysxlBZhYIa7xSyiYJKZ3iGrrk55cGA3i9A== - -tsconfig-paths@^3.14.1: - version "3.14.1" - resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz#ba0734599e8ea36c862798e920bcf163277b137a" - integrity sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ== - dependencies: - "@types/json5" "^0.0.29" - json5 "^1.0.1" - minimist "^1.2.6" - strip-bom "^3.0.0" - -tslib@^1.8.1: - version "1.14.1" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" - integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== - -tslib@^2.1.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.0.tgz#7cecaa7f073ce680a05847aa77be941098f36dc3" - integrity sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ== - -tsutils@^3.17.1: - version "3.21.0" - resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" - integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== - dependencies: - tslib "^1.8.1" - -tweetnacl@1.x.x, tweetnacl@^1.0.3: - version "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-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@^1.0.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/type/-/type-1.2.0.tgz#848dd7698dafa3e54a6c479e759c4bc3f18847a0" - integrity sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg== - -type@^2.5.0: - version "2.6.0" - resolved "https://registry.yarnpkg.com/type/-/type-2.6.0.tgz#3ca6099af5981d36ca86b78442973694278a219f" - integrity sha512-eiDBDOmkih5pMbo9OqsqPRGMljLodLcwd5XD5JbtNB0o89xZAwynY9EdCDsJU7LtcVCClu9DvM7/0Ep1hYX3EQ== - -typedarray-to-buffer@^3.1.5: - version "3.1.5" - resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" - integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== - dependencies: - is-typedarray "^1.0.0" - -typescript@^4.4.3: - version "4.7.3" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.7.3.tgz#8364b502d5257b540f9de4c40be84c98e23a129d" - integrity sha512-WOkT3XYvrpXx4vMMqlD+8R8R37fZkjyLGlxavMc4iB8lrl8L0DeTcHbYgw/v0N/z9wAFsgBhcsF0ruoySS22mA== - -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" - -unist-util-stringify-position@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/unist-util-stringify-position/-/unist-util-stringify-position-3.0.2.tgz#5c6aa07c90b1deffd9153be170dce628a869a447" - integrity sha512-7A6eiDCs9UtjcwZOcCpM4aPII3bAAGv13E96IkawkOAW0OhH+yRxtY0lzo8KiHpzEMfH7Q+FizUmwp8Iqy5EWg== - dependencies: - "@types/unist" "^2.0.0" - -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" - -utf-8-validate@^5.0.2: - version "5.0.9" - resolved "https://registry.yarnpkg.com/utf-8-validate/-/utf-8-validate-5.0.9.tgz#ba16a822fbeedff1a58918f2a6a6b36387493ea3" - integrity sha512-Yek7dAy0v3Kl0orwMlvi7TPtiCNrdfHNd7Gcc/pLq4BLXqfAmd0J7OWMizUQnTTJsyjKn02mU7anqwfmUP4J8Q== - dependencies: - node-gyp-build "^4.3.0" - -utf8@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/utf8/-/utf8-3.0.0.tgz#f052eed1364d696e769ef058b183df88c87f69d1" - integrity sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ== - -util-deprecate@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" - integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= - -v8-compile-cache@^2.0.3: - version "2.3.0" - resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee" - integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA== - -vfile-message@^3.0.0: - version "3.1.2" - resolved "https://registry.yarnpkg.com/vfile-message/-/vfile-message-3.1.2.tgz#a2908f64d9e557315ec9d7ea3a910f658ac05f7d" - integrity sha512-QjSNP6Yxzyycd4SVOtmKKyTsSvClqBPJcd00Z0zuPj3hOIjg0rUPG6DbFGPvUKRgYyaIWLPKpuEclcuvb3H8qA== - dependencies: - "@types/unist" "^2.0.0" - unist-util-stringify-position "^3.0.0" - -vfile@*: - version "5.3.2" - resolved "https://registry.yarnpkg.com/vfile/-/vfile-5.3.2.tgz#b499fbc50197ea50ad3749e9b60beb16ca5b7c54" - integrity sha512-w0PLIugRY3Crkgw89TeMvHCzqCs/zpreR31hl4D92y6SOE07+bfJe+dK5Q2akwS+i/c801kzjoOr9gMcTe6IAA== - dependencies: - "@types/unist" "^2.0.0" - is-buffer "^2.0.0" - unist-util-stringify-position "^3.0.0" - vfile-message "^3.0.0" - -web3-utils@^1.3.4: - version "1.7.3" - resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.7.3.tgz#b214d05f124530d8694ad364509ac454d05f207c" - integrity sha512-g6nQgvb/bUpVUIxJE+ezVN+rYwYmlFyMvMIRSuqpi1dk6ApDD00YNArrk7sPcZnjvxOJ76813Xs2vIN2rgh4lg== - dependencies: - bn.js "^4.11.9" - ethereum-bloom-filters "^1.0.6" - ethereumjs-util "^7.1.0" - ethjs-unit "0.1.6" - number-to-bn "1.7.0" - randombytes "^2.1.0" - utf8 "3.0.0" - -webidl-conversions@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" - integrity sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE= - -websocket@^1.0.32, websocket@^1.0.34: - version "1.0.34" - resolved "https://registry.yarnpkg.com/websocket/-/websocket-1.0.34.tgz#2bdc2602c08bf2c82253b730655c0ef7dcab3111" - integrity sha512-PRDso2sGwF6kM75QykIesBijKSVceR6jL2G8NGYyq2XrItNC2P5/qL5XeR056GhA+Ly7JMFvJb9I312mJfmqnQ== - dependencies: - bufferutil "^4.0.1" - debug "^2.2.0" - es5-ext "^0.10.50" - typedarray-to-buffer "^3.1.5" - utf-8-validate "^5.0.2" - yaeti "^0.0.6" - -whatwg-url@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" - integrity sha1-lmRU6HZUYuN2RNNib2dCzotwll0= - dependencies: - 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@^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" - -word-wrap@^1.2.3: - version "1.2.3" - resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" - integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== - -wrappy@1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" - integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= - -xxhashjs@^0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/xxhashjs/-/xxhashjs-0.2.2.tgz#8a6251567621a1c46a5ae204da0249c7f8caa9d8" - integrity sha512-AkTuIuVTET12tpsVIQo+ZU6f/qDmKuRUcjaqR+OIvm+aCBsZ95i7UVY5WJ9TMsSaZ0DA2WxoZ4acu0sPH+OKAw== - dependencies: - cuint "^0.2.2" - -yaeti@^0.0.6: - version "0.0.6" - resolved "https://registry.yarnpkg.com/yaeti/-/yaeti-0.0.6.tgz#f26f484d72684cf42bedfb76970aa1608fbf9577" - integrity sha1-8m9ITXJoTPQr7ft2lwqhYI+/lXc= - -yallist@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" - integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== diff --git a/metadata-protobuf/.eslintrc.js b/metadata-protobuf/.eslintrc.js index d8ea276e5e..dc2f73f2fe 100644 --- a/metadata-protobuf/.eslintrc.js +++ b/metadata-protobuf/.eslintrc.js @@ -12,5 +12,20 @@ module.exports = { 'no-unused-vars': 'off', // Required by the typescript rule below '@typescript-eslint/no-unused-vars': ['error'], '@typescript-eslint/no-floating-promises': 'error', + '@typescript-eslint/ban-types': ['error', + { + 'types': { + 'String': false, + 'Boolean': false, + 'Number': false, + 'Symbol': false, + '{}': false, + 'Object': false, + 'object': false, + 'Function': false, + }, + 'extendDefaults': true + } +] }, } diff --git a/metadata-protobuf/package.json b/metadata-protobuf/package.json index dcc1043b02..5468693015 100644 --- a/metadata-protobuf/package.json +++ b/metadata-protobuf/package.json @@ -1,6 +1,6 @@ { "name": "@joystream/metadata-protobuf", - "version": "2.13.0", + "version": "2.15.0", "description": "Joystream Metadata Protobuf Library", "main": "lib/index.js", "types": "lib/index.d.ts", @@ -13,9 +13,15 @@ }, "typesVersions": { "*": { - "lib/index.d.ts": ["lib/index.d.ts"], - "json": [ "lib/json/index.d.ts" ], - "*": [ "lib/*" ] + "lib/index.d.ts": [ + "lib/index.d.ts" + ], + "json": [ + "lib/json/index.d.ts" + ], + "*": [ + "lib/*" + ] } }, "repository": "https://github.com/joystream/joystream", @@ -61,6 +67,6 @@ "mocha": "^8.2.1", "prettier": "2.0.2", "ts-node": "^10.2.1", - "typescript": "^4.4.3" + "typescript": "^5.0.2" } } diff --git a/metadata-protobuf/src/utils.ts b/metadata-protobuf/src/utils.ts index 3adf1b5f36..6ac87b8b74 100644 --- a/metadata-protobuf/src/utils.ts +++ b/metadata-protobuf/src/utils.ts @@ -7,7 +7,7 @@ export function isSet(v: T | null | undefined): v is T { return v !== null && v !== undefined } -export function isEmptyObject(object: T): boolean { +export function isEmptyObject(object: T): boolean { return Object.keys(object).length === 0 } diff --git a/opentelemetry/package.json b/opentelemetry/package.json index 6393ea262e..2c1560748c 100644 --- a/opentelemetry/package.json +++ b/opentelemetry/package.json @@ -8,7 +8,7 @@ "license": "MIT", "bugs": "https://github.com/Joystream/joystream/issues", "devDependencies": { - "typescript": "^4.4.3" + "typescript": "^5.0.2" }, "dependencies": { "@opentelemetry/api": "^1.4.1", diff --git a/opentelemetry/yarn.lock b/opentelemetry/yarn.lock deleted file mode 100644 index a07b4e839d..0000000000 --- a/opentelemetry/yarn.lock +++ /dev/null @@ -1,1663 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@grpc/grpc-js@^1.7.1": - version "1.8.17" - resolved "https://registry.yarnpkg.com/@grpc/grpc-js/-/grpc-js-1.8.17.tgz#a3a2f826fc033eae7d2f5ee41e0ab39cee948838" - integrity sha512-DGuSbtMFbaRsyffMf+VEkVu8HkSXEUfO3UyGJNtqxW9ABdtTIA+2UXAJpwbJS+xfQxuwqLUeELmL6FuZkOqPxw== - dependencies: - "@grpc/proto-loader" "^0.7.0" - "@types/node" ">=12.12.47" - -"@grpc/proto-loader@^0.7.0": - version "0.7.7" - resolved "https://registry.yarnpkg.com/@grpc/proto-loader/-/proto-loader-0.7.7.tgz#d33677a77eea8407f7c66e2abd97589b60eb4b21" - integrity sha512-1TIeXOi8TuSCQprPItwoMymZXxWT0CPxUhkrkeCUH+D8U7QDwQ6b7SUz2MaLuWM2llT+J/TVFLmQI5KtML3BhQ== - dependencies: - "@types/long" "^4.0.1" - lodash.camelcase "^4.3.0" - long "^4.0.0" - protobufjs "^7.0.0" - yargs "^17.7.2" - -"@hapi/b64@5.x.x": - version "5.0.0" - resolved "https://registry.yarnpkg.com/@hapi/b64/-/b64-5.0.0.tgz#b8210cbd72f4774985e78569b77e97498d24277d" - integrity sha512-ngu0tSEmrezoiIaNGG6rRvKOUkUuDdf4XTPnONHGYfSGRmDqPZX5oJL6HAdKTo1UQHECbdB4OzhWrfgVppjHUw== - dependencies: - "@hapi/hoek" "9.x.x" - -"@hapi/boom@9.x.x", "@hapi/boom@^9.0.0": - version "9.1.4" - resolved "https://registry.yarnpkg.com/@hapi/boom/-/boom-9.1.4.tgz#1f9dad367c6a7da9f8def24b4a986fc5a7bd9db6" - integrity sha512-Ls1oH8jaN1vNsqcaHVYJrKmgMcKsC1wcp8bujvXrHaAqD2iDYq3HoOwsxwo09Cuda5R5nC0o0IxlrlTuvPuzSw== - dependencies: - "@hapi/hoek" "9.x.x" - -"@hapi/bourne@2.x.x": - version "2.1.0" - resolved "https://registry.yarnpkg.com/@hapi/bourne/-/bourne-2.1.0.tgz#66aff77094dc3080bd5df44ec63881f2676eb020" - integrity sha512-i1BpaNDVLJdRBEKeJWkVO6tYX6DMFBuwMhSuWqLsY4ufeTKGVuV5rBsUhxPayXqnnWHgXUAmWK16H/ykO5Wj4Q== - -"@hapi/cryptiles@5.x.x": - version "5.1.0" - resolved "https://registry.yarnpkg.com/@hapi/cryptiles/-/cryptiles-5.1.0.tgz#655de4cbbc052c947f696148c83b187fc2be8f43" - integrity sha512-fo9+d1Ba5/FIoMySfMqPBR/7Pa29J2RsiPrl7bkwo5W5o+AN1dAYQRi4SPrPwwVxVGKjgLOEWrsvt1BonJSfLA== - dependencies: - "@hapi/boom" "9.x.x" - -"@hapi/hoek@9.x.x", "@hapi/hoek@^9.0.0": - version "9.3.0" - resolved "https://registry.yarnpkg.com/@hapi/hoek/-/hoek-9.3.0.tgz#8368869dcb735be2e7f5cb7647de78e167a251fb" - integrity sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ== - -"@hapi/iron@^6.0.0": - version "6.0.0" - resolved "https://registry.yarnpkg.com/@hapi/iron/-/iron-6.0.0.tgz#ca3f9136cda655bdd6028de0045da0de3d14436f" - integrity sha512-zvGvWDufiTGpTJPG1Y/McN8UqWBu0k/xs/7l++HVU535NLHXsHhy54cfEMdW7EjwKfbBfM9Xy25FmTiobb7Hvw== - dependencies: - "@hapi/b64" "5.x.x" - "@hapi/boom" "9.x.x" - "@hapi/bourne" "2.x.x" - "@hapi/cryptiles" "5.x.x" - "@hapi/hoek" "9.x.x" - -"@hapi/podium@^4.1.3": - version "4.1.3" - resolved "https://registry.yarnpkg.com/@hapi/podium/-/podium-4.1.3.tgz#91e20838fc2b5437f511d664aabebbb393578a26" - integrity sha512-ljsKGQzLkFqnQxE7qeanvgGj4dejnciErYd30dbrYzUOF/FyS/DOF97qcrT3bhoVwCYmxa6PEMhxfCPlnUcD2g== - dependencies: - "@hapi/hoek" "9.x.x" - "@hapi/teamwork" "5.x.x" - "@hapi/validate" "1.x.x" - -"@hapi/teamwork@5.x.x": - version "5.1.1" - resolved "https://registry.yarnpkg.com/@hapi/teamwork/-/teamwork-5.1.1.tgz#4d2ba3cac19118a36c44bf49a3a47674de52e4e4" - integrity sha512-1oPx9AE5TIv+V6Ih54RP9lTZBso3rP8j4Xhb6iSVwPXtAM+sDopl5TFMv5Paw73UnpZJ9gjcrTE1BXrWt9eQrg== - -"@hapi/topo@^5.0.0": - version "5.1.0" - resolved "https://registry.yarnpkg.com/@hapi/topo/-/topo-5.1.0.tgz#dc448e332c6c6e37a4dc02fd84ba8d44b9afb012" - integrity sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg== - dependencies: - "@hapi/hoek" "^9.0.0" - -"@hapi/validate@1.x.x": - version "1.1.3" - resolved "https://registry.yarnpkg.com/@hapi/validate/-/validate-1.1.3.tgz#f750a07283929e09b51aa16be34affb44e1931ad" - integrity sha512-/XMR0N0wjw0Twzq2pQOzPBZlDzkekGcoCtzO314BpIEsbXdYGthQUbxgkGDf4nhk1+IPDAsXqWjMohRQYO06UA== - dependencies: - "@hapi/hoek" "^9.0.0" - "@hapi/topo" "^5.0.0" - -"@opentelemetry/api-logs@0.39.1": - version "0.39.1" - resolved "https://registry.yarnpkg.com/@opentelemetry/api-logs/-/api-logs-0.39.1.tgz#3ea1e9dda11c35f993cb60dc5e52780b8175e702" - integrity sha512-9BJ8lMcOzEN0lu+Qji801y707oFO4xT3db6cosPvl+k7ItUHKN5ofWqtSbM9gbt1H4JJ/4/2TVrqI9Rq7hNv6Q== - dependencies: - "@opentelemetry/api" "^1.0.0" - -"@opentelemetry/api@^1.0.0", "@opentelemetry/api@^1.4.1": - version "1.4.1" - resolved "https://registry.yarnpkg.com/@opentelemetry/api/-/api-1.4.1.tgz#ff22eb2e5d476fbc2450a196e40dd243cc20c28f" - integrity sha512-O2yRJce1GOc6PAy3QxFM4NzFiWzvScDC1/5ihYBL6BUEVdq0XMWN01sppE+H6bBXbaFYipjwFLEWLg5PaSOThA== - -"@opentelemetry/auto-instrumentations-node@0.37.0": - version "0.37.0" - resolved "https://registry.yarnpkg.com/@opentelemetry/auto-instrumentations-node/-/auto-instrumentations-node-0.37.0.tgz#9925726b0c315215a0a4efa7d7049736f021c8f2" - integrity sha512-sPvZEm1YvnRkhC6XNs9a+LQpsAqmIw4KSoedYxPoWTpuU4mpkdJFQMfC1E51+z/Bo2AXWw3CyWpxI96tUZlxHg== - dependencies: - "@opentelemetry/instrumentation" "^0.39.1" - "@opentelemetry/instrumentation-amqplib" "^0.32.4" - "@opentelemetry/instrumentation-aws-lambda" "^0.35.2" - "@opentelemetry/instrumentation-aws-sdk" "^0.34.2" - "@opentelemetry/instrumentation-bunyan" "^0.31.3" - "@opentelemetry/instrumentation-cassandra-driver" "^0.32.3" - "@opentelemetry/instrumentation-connect" "^0.31.3" - "@opentelemetry/instrumentation-dataloader" "^0.4.2" - "@opentelemetry/instrumentation-dns" "^0.31.4" - "@opentelemetry/instrumentation-express" "^0.32.3" - "@opentelemetry/instrumentation-fastify" "^0.31.3" - "@opentelemetry/instrumentation-fs" "^0.7.3" - "@opentelemetry/instrumentation-generic-pool" "^0.31.3" - "@opentelemetry/instrumentation-graphql" "^0.34.2" - "@opentelemetry/instrumentation-grpc" "^0.39.1" - "@opentelemetry/instrumentation-hapi" "^0.31.3" - "@opentelemetry/instrumentation-http" "^0.39.1" - "@opentelemetry/instrumentation-ioredis" "^0.34.2" - "@opentelemetry/instrumentation-knex" "^0.31.3" - "@opentelemetry/instrumentation-koa" "^0.34.5" - "@opentelemetry/instrumentation-lru-memoizer" "^0.32.3" - "@opentelemetry/instrumentation-memcached" "^0.31.3" - "@opentelemetry/instrumentation-mongodb" "^0.34.3" - "@opentelemetry/instrumentation-mongoose" "^0.32.3" - "@opentelemetry/instrumentation-mysql" "^0.33.2" - "@opentelemetry/instrumentation-mysql2" "^0.33.3" - "@opentelemetry/instrumentation-nestjs-core" "^0.32.4" - "@opentelemetry/instrumentation-net" "^0.31.3" - "@opentelemetry/instrumentation-pg" "^0.35.2" - "@opentelemetry/instrumentation-pino" "^0.33.3" - "@opentelemetry/instrumentation-redis" "^0.34.6" - "@opentelemetry/instrumentation-redis-4" "^0.34.5" - "@opentelemetry/instrumentation-restify" "^0.32.3" - "@opentelemetry/instrumentation-router" "^0.32.3" - "@opentelemetry/instrumentation-socket.io" "^0.33.3" - "@opentelemetry/instrumentation-tedious" "^0.5.3" - "@opentelemetry/instrumentation-winston" "^0.31.3" - "@opentelemetry/resource-detector-alibaba-cloud" "^0.27.6" - "@opentelemetry/resource-detector-aws" "^1.2.4" - "@opentelemetry/resource-detector-container" "^0.2.4" - "@opentelemetry/resource-detector-gcp" "^0.28.2" - "@opentelemetry/resources" "^1.12.0" - "@opentelemetry/sdk-node" "^0.39.1" - -"@opentelemetry/context-async-hooks@1.13.0": - version "1.13.0" - resolved "https://registry.yarnpkg.com/@opentelemetry/context-async-hooks/-/context-async-hooks-1.13.0.tgz#b697317c1670eaa9b1c23201d09dd29250dcc8fa" - integrity sha512-pS5fU4lrRjOIPZQqA2V1SUM9QUFXbO+8flubAiy6ntLjnAjJJUdRFOUOxK6v86ZHI2p2S8A0vD0BTu95FZYvjA== - -"@opentelemetry/core@1.13.0": - version "1.13.0" - resolved "https://registry.yarnpkg.com/@opentelemetry/core/-/core-1.13.0.tgz#7cdcb4176d260d279b0aa31456c4ce2ba7f410aa" - integrity sha512-2dBX3Sj99H96uwJKvc2w9NOiNgbvAO6mOFJFramNkKfS9O4Um+VWgpnlAazoYjT6kUJ1MP70KQ5ngD4ed+4NUw== - dependencies: - "@opentelemetry/semantic-conventions" "1.13.0" - -"@opentelemetry/core@1.15.0", "@opentelemetry/core@^1.0.0", "@opentelemetry/core@^1.8.0": - version "1.15.0" - resolved "https://registry.yarnpkg.com/@opentelemetry/core/-/core-1.15.0.tgz#2ba928df0443732825a72a766c2edae9a7f9863f" - integrity sha512-GGTS6BytfaN8OgbCUOnxg/a9WVsVUj0484zXHZuBzvIXx7V4Tmkb0IHnnhS7Q0cBLNLgjNuvrCpQaP8fIvO4bg== - dependencies: - "@opentelemetry/semantic-conventions" "1.15.0" - tslib "^2.3.1" - -"@opentelemetry/exporter-jaeger@1.13.0": - version "1.13.0" - resolved "https://registry.yarnpkg.com/@opentelemetry/exporter-jaeger/-/exporter-jaeger-1.13.0.tgz#e96436438d3f8cc7b262ab4e517d55f96f413161" - integrity sha512-ke/STs/erRDqKmNv6Dv+5SetXsVD+Zm1/Wo8cLdAGrZn6kG6Fyp5EXVO/BJuzx6q+jHCdODm8jV4veXl4m71nQ== - dependencies: - "@opentelemetry/core" "1.13.0" - "@opentelemetry/sdk-trace-base" "1.13.0" - "@opentelemetry/semantic-conventions" "1.13.0" - jaeger-client "^3.15.0" - -"@opentelemetry/exporter-metrics-otlp-http@0.39.1", "@opentelemetry/exporter-metrics-otlp-http@^0.39.1": - version "0.39.1" - resolved "https://registry.yarnpkg.com/@opentelemetry/exporter-metrics-otlp-http/-/exporter-metrics-otlp-http-0.39.1.tgz#be2a9954db69b3c11779bf30c51e2fa901721c78" - integrity sha512-Uj2i6t5v9aexV03xvVobwLV0Yxn7lQcCxBGN5KKxcs8BTZYSfjdwhrFjsOxvEQ2cXugL0aIzCuTKxrlXYTmFwA== - dependencies: - "@opentelemetry/core" "1.13.0" - "@opentelemetry/otlp-exporter-base" "0.39.1" - "@opentelemetry/otlp-transformer" "0.39.1" - "@opentelemetry/resources" "1.13.0" - "@opentelemetry/sdk-metrics" "1.13.0" - -"@opentelemetry/exporter-metrics-otlp-proto@^0.39.1": - version "0.39.1" - resolved "https://registry.yarnpkg.com/@opentelemetry/exporter-metrics-otlp-proto/-/exporter-metrics-otlp-proto-0.39.1.tgz#872a7f8ab6a7f57ef39225d073d89840f89b0bf4" - integrity sha512-S+FgIhmZiFMsUivtAlCyzf3L5ezPyCqvlzt4hSZmiKs0kqapau1HS4cSpGacs9Jy499TRSNtqfjj7GxZrNIevw== - dependencies: - "@opentelemetry/core" "1.13.0" - "@opentelemetry/exporter-metrics-otlp-http" "0.39.1" - "@opentelemetry/otlp-exporter-base" "0.39.1" - "@opentelemetry/otlp-proto-exporter-base" "0.39.1" - "@opentelemetry/otlp-transformer" "0.39.1" - "@opentelemetry/resources" "1.13.0" - "@opentelemetry/sdk-metrics" "1.13.0" - -"@opentelemetry/exporter-trace-otlp-grpc@0.39.1": - version "0.39.1" - resolved "https://registry.yarnpkg.com/@opentelemetry/exporter-trace-otlp-grpc/-/exporter-trace-otlp-grpc-0.39.1.tgz#3949f909fb3f8cbb456480a35829bb2630331bd3" - integrity sha512-l5RhLKx6U+yuLhMrtgavTDthX50E1mZM3/SSySC7OPZiArFHV/b/9x9jxAzrOgIQUDxyj4N0V9aLKSA2t7Qzxg== - dependencies: - "@grpc/grpc-js" "^1.7.1" - "@opentelemetry/core" "1.13.0" - "@opentelemetry/otlp-grpc-exporter-base" "0.39.1" - "@opentelemetry/otlp-transformer" "0.39.1" - "@opentelemetry/resources" "1.13.0" - "@opentelemetry/sdk-trace-base" "1.13.0" - -"@opentelemetry/exporter-trace-otlp-http@0.39.1": - version "0.39.1" - resolved "https://registry.yarnpkg.com/@opentelemetry/exporter-trace-otlp-http/-/exporter-trace-otlp-http-0.39.1.tgz#9625b04451f91d308395333c188f4841a173a781" - integrity sha512-AEhnJfVmo1g+7NxszAuf3c6vddld2DGH2+IM4XrPxCklucCsIpuStuC5EVZbCXXXBMpAY+n3t04QMxIQqNrcSw== - dependencies: - "@opentelemetry/core" "1.13.0" - "@opentelemetry/otlp-exporter-base" "0.39.1" - "@opentelemetry/otlp-transformer" "0.39.1" - "@opentelemetry/resources" "1.13.0" - "@opentelemetry/sdk-trace-base" "1.13.0" - -"@opentelemetry/exporter-trace-otlp-proto@0.39.1": - version "0.39.1" - resolved "https://registry.yarnpkg.com/@opentelemetry/exporter-trace-otlp-proto/-/exporter-trace-otlp-proto-0.39.1.tgz#0d8f8a57e2a4e61849e19fb325292d0c2c32f7bc" - integrity sha512-oJQC7a67iwExRYynKqn/O9Fl5gUjDa43ZQsZu2iKAADs/6YJ+u5MJ/wcq3CpJsn2KU/8j8HWAKOcDkkQXPuJ9A== - dependencies: - "@opentelemetry/core" "1.13.0" - "@opentelemetry/otlp-exporter-base" "0.39.1" - "@opentelemetry/otlp-proto-exporter-base" "0.39.1" - "@opentelemetry/otlp-transformer" "0.39.1" - "@opentelemetry/resources" "1.13.0" - "@opentelemetry/sdk-trace-base" "1.13.0" - -"@opentelemetry/exporter-zipkin@1.13.0": - version "1.13.0" - resolved "https://registry.yarnpkg.com/@opentelemetry/exporter-zipkin/-/exporter-zipkin-1.13.0.tgz#156ea40629e293a8bf5d80d7862df43440de13ea" - integrity sha512-4IuUmYEhlHm8tAGtd6KKkktEO9Bt7dpdBdAPVAzhmXsPwGi0yExo7E5qfi9HtHQcdfP9SnrGRkeorVtrZkGlhg== - dependencies: - "@opentelemetry/core" "1.13.0" - "@opentelemetry/resources" "1.13.0" - "@opentelemetry/sdk-trace-base" "1.13.0" - "@opentelemetry/semantic-conventions" "1.13.0" - -"@opentelemetry/instrumentation-amqplib@^0.32.4": - version "0.32.5" - resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-amqplib/-/instrumentation-amqplib-0.32.5.tgz#48d6b2b7a7295a147402de6af1875beed9d5f60c" - integrity sha512-D2hTvDfXQxj/9ydOcrz8Na7O3rLpNwSAKYHju37Mc15YLN2rmhnB/kW7YyW2+z1eC+cbLPg2iDIxzLd1FsJ15Q== - dependencies: - "@opentelemetry/core" "^1.8.0" - "@opentelemetry/instrumentation" "^0.40.0" - "@opentelemetry/semantic-conventions" "^1.0.0" - -"@opentelemetry/instrumentation-aws-lambda@^0.35.2": - version "0.35.3" - resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-aws-lambda/-/instrumentation-aws-lambda-0.35.3.tgz#19c42ba680f93a595a38edb06b28bac2b7da6f92" - integrity sha512-GCG0MyKSOyRfRUcWNUA0xLZQ5gVS+GDHXX//IIc01n81sFoWhgEl0wYWIa/ziLu7qKAAsJF1klKlMo/HppfkLQ== - dependencies: - "@opentelemetry/instrumentation" "^0.40.0" - "@opentelemetry/propagator-aws-xray" "^1.2.1" - "@opentelemetry/resources" "^1.8.0" - "@opentelemetry/semantic-conventions" "^1.0.0" - "@types/aws-lambda" "8.10.81" - -"@opentelemetry/instrumentation-aws-sdk@^0.34.2": - version "0.34.3" - resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-aws-sdk/-/instrumentation-aws-sdk-0.34.3.tgz#d66e9811e958212ab8dddd372b9e91d3d7ad7eae" - integrity sha512-esz3PUIKnRlzu9rXtSPfQkoR/amvrNDqFJK7RGAmcOxvXg+4TQGLF3BY74ZCv84iBjSgvObL8ELkVofYH6cDWg== - dependencies: - "@opentelemetry/core" "^1.8.0" - "@opentelemetry/instrumentation" "^0.40.0" - "@opentelemetry/propagation-utils" "^0.29.5" - "@opentelemetry/semantic-conventions" "^1.0.0" - -"@opentelemetry/instrumentation-bunyan@^0.31.3": - version "0.31.4" - resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-bunyan/-/instrumentation-bunyan-0.31.4.tgz#0d11b13e52eae20a8999282acfb451ab8bb950cb" - integrity sha512-uwQPzNXq+f2/7odtYPsBlozm2bjDHLOB/r3pSO02BEnHG5L7RyzV7aPLH1xYTHrLnZAd8ew8Am5dGM4uRiO4sA== - dependencies: - "@opentelemetry/instrumentation" "^0.40.0" - "@types/bunyan" "1.8.7" - -"@opentelemetry/instrumentation-cassandra-driver@^0.32.3": - version "0.32.4" - resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-cassandra-driver/-/instrumentation-cassandra-driver-0.32.4.tgz#ce8306c07c70a778457bc8ea409a4d67ed4630e4" - integrity sha512-xBWXyg585E/8PFoIgEyUdvVo4y/9rO/plkH9h1LF7aE4xXpAiYKVKNVFh4BsOTcylJkFSEZEvbHnFM8z8zb4jA== - dependencies: - "@opentelemetry/instrumentation" "^0.40.0" - "@opentelemetry/semantic-conventions" "^1.0.0" - -"@opentelemetry/instrumentation-connect@^0.31.3": - version "0.31.4" - resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-connect/-/instrumentation-connect-0.31.4.tgz#c1693d26f103dc133cb6a9708cc9ed2fda288a52" - integrity sha512-cce1AVRfWyQUOvJHMARaT+0KK5gN5qvKfmiiecmNSlj4NVC6w2DzknMuoHy3WkHQEQKPgF0pJG034UaU6bLKFA== - dependencies: - "@opentelemetry/core" "^1.8.0" - "@opentelemetry/instrumentation" "^0.40.0" - "@opentelemetry/semantic-conventions" "^1.0.0" - "@types/connect" "3.4.35" - -"@opentelemetry/instrumentation-dataloader@^0.4.2": - version "0.4.3" - resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-dataloader/-/instrumentation-dataloader-0.4.3.tgz#13d2041d44d8ff4b9ebfc48bcbf9cbda74b61d00" - integrity sha512-iV1noFh7rOjDJ5WXg3o5mQIaEnxTCIpFGWPxqwK2kta3p78wU0KpYIz9x4MvdEVjFyTXxfB7iVz1kQ2g2b6Kpw== - dependencies: - "@opentelemetry/instrumentation" "^0.40.0" - -"@opentelemetry/instrumentation-dns@^0.31.4": - version "0.31.5" - resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-dns/-/instrumentation-dns-0.31.5.tgz#bea92dface0829b3bde50ef6f5d884b5f991cc1f" - integrity sha512-jGMpUzUlPT0mPum2N931Q918cuAfrEJOTHM35O1+YpCfjBnpbj+Vx77pIX0dSdWPxrigiPNZqdxQ2GadfdwBCA== - dependencies: - "@opentelemetry/instrumentation" "^0.40.0" - "@opentelemetry/semantic-conventions" "^1.0.0" - semver "^7.3.2" - -"@opentelemetry/instrumentation-express@^0.32.3": - version "0.32.4" - resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-express/-/instrumentation-express-0.32.4.tgz#bced338cc6c2a5aeb3433f12302c0460207c7090" - integrity sha512-67o/pc2GYRxNpgC5nw6xrPvxlpGKjr43dsukR23IJom45gtsZjt0V7YjEGw40MAvtdsrG0PMkthjXNBvr34Y6A== - dependencies: - "@opentelemetry/core" "^1.8.0" - "@opentelemetry/instrumentation" "^0.40.0" - "@opentelemetry/semantic-conventions" "^1.0.0" - "@types/express" "4.17.13" - -"@opentelemetry/instrumentation-fastify@^0.31.3": - version "0.31.4" - resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-fastify/-/instrumentation-fastify-0.31.4.tgz#d3a17a190ba0b258330423982f7437c66e8f2b70" - integrity sha512-3qYJySc+Eo0cpQVpE/MGbMi+WKU7n9OxQIEj/CswTcn3W1H7ot9dreV8IchNdM6WrRhUjFmAMCtrDS7Ewdvkpg== - dependencies: - "@opentelemetry/core" "^1.8.0" - "@opentelemetry/instrumentation" "^0.40.0" - "@opentelemetry/semantic-conventions" "^1.0.0" - -"@opentelemetry/instrumentation-fs@^0.7.3": - version "0.7.4" - resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-fs/-/instrumentation-fs-0.7.4.tgz#28a15842fc9b8d373f87c7fbf560049717f58156" - integrity sha512-JN+X7nfBeEbl2dvyd/6IBqVujjqE5/fY0oJdju2kW6X/fsKyIBTlEoKW1nlI+VLO6JVwTMTkvREFTvTOlGZqsA== - dependencies: - "@opentelemetry/core" "^1.8.0" - "@opentelemetry/instrumentation" "^0.40.0" - "@opentelemetry/semantic-conventions" "^1.0.0" - -"@opentelemetry/instrumentation-generic-pool@^0.31.3": - version "0.31.4" - resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-generic-pool/-/instrumentation-generic-pool-0.31.4.tgz#049efa886f666c9e21cf0f32c06ef45642cbf992" - integrity sha512-S9LpOtGhk7COsC6GmkF5i/BB+XQD8qBbMgLHR0/fccsrzxTw7wd2IMo2hZOLPBYDvaSrywmOy8etJGT34eOEQA== - dependencies: - "@opentelemetry/instrumentation" "^0.40.0" - "@opentelemetry/semantic-conventions" "^1.0.0" - "@types/generic-pool" "^3.1.9" - -"@opentelemetry/instrumentation-graphql@^0.34.2": - version "0.34.3" - resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-graphql/-/instrumentation-graphql-0.34.3.tgz#f55cb9223f616a27c8fa4303ee8c8b8f64059ddd" - integrity sha512-5NTOZWpIr0/E6FbftUHpoR6MxdySjcnNbHA3XAVqqAgLg5w5cmsaJepeKPxrbbNI91CShXqwcrNcaHueUGGCBw== - dependencies: - "@opentelemetry/instrumentation" "^0.40.0" - -"@opentelemetry/instrumentation-grpc@^0.39.1": - version "0.39.1" - resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-grpc/-/instrumentation-grpc-0.39.1.tgz#70b7c0cf02c7fb3f429d3a2d3c586fcd93c1f992" - integrity sha512-Kw5sZTB6zvo7a515q2FhlK4tLLRwgzqt0niqozsOxtkiPUJCNcdVEoNn+US7MWtXeOB6BujEPwRu3WuDr+9wew== - dependencies: - "@opentelemetry/instrumentation" "0.39.1" - "@opentelemetry/semantic-conventions" "1.13.0" - -"@opentelemetry/instrumentation-hapi@^0.31.3": - version "0.31.4" - resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-hapi/-/instrumentation-hapi-0.31.4.tgz#df54ed4d36618f5adff0235bd95e68ae0da7ecd0" - integrity sha512-6A8jxzeHow6RwrlM2PRfV10C2sVAeqy3L8EBa8FvNoUQiZbmmHhJssu0lxgeRabI3VS/1vDrac1zASN3aMqecQ== - dependencies: - "@opentelemetry/core" "^1.8.0" - "@opentelemetry/instrumentation" "^0.40.0" - "@opentelemetry/semantic-conventions" "^1.0.0" - "@types/hapi__hapi" "20.0.9" - -"@opentelemetry/instrumentation-http@^0.39.1": - version "0.39.1" - resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-http/-/instrumentation-http-0.39.1.tgz#1bc63d4773fe7996a933a1351877e9a6ea73859a" - integrity sha512-JX1HTvNOqqel2fuMSRiSzFREyk2iMQ2B4/1Y46AGa0u6i4XQRCbCuy64FZ1YYMrQ2e5P917iiGrEUFkB+33Tlw== - dependencies: - "@opentelemetry/core" "1.13.0" - "@opentelemetry/instrumentation" "0.39.1" - "@opentelemetry/semantic-conventions" "1.13.0" - semver "^7.3.5" - -"@opentelemetry/instrumentation-ioredis@^0.34.2": - version "0.34.3" - resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-ioredis/-/instrumentation-ioredis-0.34.3.tgz#95fb4b6ff2b5eb29e01ee8d36ec24c69f2996019" - integrity sha512-k/4zPfdZSkdRYbx6CEjwgqi/UZlTUKk+8ZsthOzYsvmpCwPb1a1PomOa+1gk+5OvF83HanSy4mO06FhMx/NUgQ== - dependencies: - "@opentelemetry/instrumentation" "^0.40.0" - "@opentelemetry/redis-common" "^0.35.1" - "@opentelemetry/semantic-conventions" "^1.0.0" - "@types/ioredis4" "npm:@types/ioredis@^4.28.10" - -"@opentelemetry/instrumentation-knex@^0.31.3": - version "0.31.4" - resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-knex/-/instrumentation-knex-0.31.4.tgz#15c747acf3de94f15bbad852140ec584b79d5cd9" - integrity sha512-1Q0I5mn/pF5d42sZa9RWEayBft8c5XqQupC/MSaK6nuSZowQKcOPs5q8wMuPCB8Ma04xLmiH3N4MErjS3GIaSA== - dependencies: - "@opentelemetry/instrumentation" "^0.40.0" - "@opentelemetry/semantic-conventions" "^1.0.0" - -"@opentelemetry/instrumentation-koa@^0.34.5": - version "0.34.6" - resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-koa/-/instrumentation-koa-0.34.6.tgz#88f2ab16f94f7c41bcd4b3487c254f9374a438c1" - integrity sha512-Rohp13k6t8XkbIKWjblW+qOovqSl3+OmgWHoyM8lf12cN0DAdCklwCKiittvht4ecVU/uRLh3MBIPIMCnkQa6g== - dependencies: - "@opentelemetry/core" "^1.8.0" - "@opentelemetry/instrumentation" "^0.40.0" - "@opentelemetry/semantic-conventions" "^1.0.0" - "@types/koa" "2.13.6" - "@types/koa__router" "8.0.7" - -"@opentelemetry/instrumentation-lru-memoizer@^0.32.3": - version "0.32.4" - resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-lru-memoizer/-/instrumentation-lru-memoizer-0.32.4.tgz#d5bee9d54117064ad535529875d7a55f2cc5f09c" - integrity sha512-5IxH+cW/2CsPR3owASTaO+RAlfs+oSZtHpCx/2LhjXms49yuLHB6YDFJcWyOW4QN6P2A3uLbxWYCxMt2XKy39Q== - dependencies: - "@opentelemetry/instrumentation" "^0.40.0" - -"@opentelemetry/instrumentation-memcached@^0.31.3": - version "0.31.4" - resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-memcached/-/instrumentation-memcached-0.31.4.tgz#15994856ba8cd2cb507b81958f1c42775296c00f" - integrity sha512-IDGys1d3aG7CGqgvZZ0dkmZCEFn1eQ3HPJCap+gUhjt7RRxLFYasa4h/GWviUHM3BNwJaA7VSmhEfbwxUCHxXw== - dependencies: - "@opentelemetry/instrumentation" "^0.40.0" - "@opentelemetry/semantic-conventions" "^1.0.0" - "@types/memcached" "^2.2.6" - -"@opentelemetry/instrumentation-mongodb@^0.34.3": - version "0.34.3" - resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-mongodb/-/instrumentation-mongodb-0.34.3.tgz#7652b4804470c3c8ae2ccec9ad60d3669cdb28d1" - integrity sha512-QCsX5vGjmmUnqLOlT+eThfBQ35JbQ3bdZSOCFvYu24+vqDEzMf+sWmgQVZuSlEGooXJ9lhlyFszPyUrTk2jS3g== - dependencies: - "@opentelemetry/instrumentation" "^0.39.1" - "@opentelemetry/semantic-conventions" "^1.0.0" - -"@opentelemetry/instrumentation-mongoose@^0.32.3": - version "0.32.4" - resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-mongoose/-/instrumentation-mongoose-0.32.4.tgz#f421d477264abd46e66d78ac65ca59f98c39b07c" - integrity sha512-JylmvZnH1ScQGc9tbV/6PIzk/rTNVgOtZDh9kJCYU0fbmX9a4lAsKav4kfnOK177IE+/jLsEECSUuytjqumGnQ== - dependencies: - "@opentelemetry/core" "^1.8.0" - "@opentelemetry/instrumentation" "^0.40.0" - "@opentelemetry/semantic-conventions" "^1.0.0" - -"@opentelemetry/instrumentation-mysql2@^0.33.3": - version "0.33.4" - resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-mysql2/-/instrumentation-mysql2-0.33.4.tgz#fd69e38d1b5eefff6e4362fc257e60c5bec5a10f" - integrity sha512-niaBa79lmgXTvMJXDpucPdiyTv+gUejkAiweAqgpigTTQM4T4qtfxNcw+dlP3vWAkHfu44+INy+96BHGlROxYw== - dependencies: - "@opentelemetry/instrumentation" "^0.40.0" - "@opentelemetry/semantic-conventions" "^1.0.0" - -"@opentelemetry/instrumentation-mysql@^0.33.2": - version "0.33.3" - resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-mysql/-/instrumentation-mysql-0.33.3.tgz#1f09c9cd19d971c2d5f142bb83c35f25c72975d9" - integrity sha512-nzKW1mtEHu0YlUD+dRq+oPAMMQHMML5hLNDGKDwK/mcGqrXKHzaQKukVIKHv3AS3tMVBoayQi4Rz2LdZ/kylwA== - dependencies: - "@opentelemetry/instrumentation" "^0.40.0" - "@opentelemetry/semantic-conventions" "^1.0.0" - "@types/mysql" "2.15.19" - -"@opentelemetry/instrumentation-nestjs-core@^0.32.4": - version "0.32.5" - resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-nestjs-core/-/instrumentation-nestjs-core-0.32.5.tgz#ed4f81651f141a298b3a8d6107f50bc47b66004b" - integrity sha512-fqPLahEiAW21aO60R+O+j5PJyfLHBczF+Ol7dodXpbzxd+9JWmiB2jeEgAAoOePDTJQC98WBuzfSZ8wRct06sQ== - dependencies: - "@opentelemetry/instrumentation" "^0.40.0" - "@opentelemetry/semantic-conventions" "^1.0.0" - -"@opentelemetry/instrumentation-net@^0.31.3": - version "0.31.4" - resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-net/-/instrumentation-net-0.31.4.tgz#b771e1c8ec24c19b86a212271d694e61ad8a14b1" - integrity sha512-KbQg0Qwhu98+kgo2jIWw0/WqSxHA/Old6yFj8MoNOo/OF+SWQwaPHK1+oV9dZGV6v3aaikb//YnoaubWucUOiQ== - dependencies: - "@opentelemetry/instrumentation" "^0.40.0" - "@opentelemetry/semantic-conventions" "^1.0.0" - -"@opentelemetry/instrumentation-pg@^0.35.2": - version "0.35.3" - resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-pg/-/instrumentation-pg-0.35.3.tgz#47b29891e2be797a2148e699bb43094fdf33a281" - integrity sha512-Q37HiZJ1KsHH/gdzRHI8ixgiR1v7/+bFL+E/f6bi4BpPdJGJzer+sYYhdPyzpvGMFwlzRcGJpv9jYaQvCwJp9Q== - dependencies: - "@opentelemetry/core" "^1.8.0" - "@opentelemetry/instrumentation" "^0.40.0" - "@opentelemetry/semantic-conventions" "^1.0.0" - "@types/pg" "8.6.1" - "@types/pg-pool" "2.0.3" - -"@opentelemetry/instrumentation-pino@^0.33.3": - version "0.33.4" - resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-pino/-/instrumentation-pino-0.33.4.tgz#58baeb797e7035808633c7fc61b9d64570e17322" - integrity sha512-9jRkfICHBkwcP/O363Ft3cA2t7cuYgOyiW1L+hJ4rmnCmfAVOM+uNQ1dTezftkodgTvurlQbDjOBSKhvh2r2Pw== - dependencies: - "@opentelemetry/instrumentation" "^0.40.0" - -"@opentelemetry/instrumentation-redis-4@^0.34.5": - version "0.34.6" - resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-redis-4/-/instrumentation-redis-4-0.34.6.tgz#2503f33b60f2cbe3311558fc95037d348e020575" - integrity sha512-owBvjxm5QjSLaJJT23yX0Wx6DzBEE0m+yq3wue4k3yGToGgYienS5ThfrWNtkoTKhECJNajR0LyqZCtC+CGHsw== - dependencies: - "@opentelemetry/instrumentation" "^0.40.0" - "@opentelemetry/redis-common" "^0.35.1" - "@opentelemetry/semantic-conventions" "^1.0.0" - -"@opentelemetry/instrumentation-redis@^0.34.6": - version "0.34.7" - resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-redis/-/instrumentation-redis-0.34.7.tgz#56e9d03fb8f9348a0fa54dbcf1156702d619661b" - integrity sha512-mDfoMi73SXC5TRn/Xt1LRrQKYcz7w7TVekM8QlbPpx3KI7xKAjwa9+38psO1snhbX/nXdXgtcrtbXhz8nUJ+Sg== - dependencies: - "@opentelemetry/instrumentation" "^0.40.0" - "@opentelemetry/redis-common" "^0.35.1" - "@opentelemetry/semantic-conventions" "^1.0.0" - -"@opentelemetry/instrumentation-restify@^0.32.3": - version "0.32.4" - resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-restify/-/instrumentation-restify-0.32.4.tgz#c344147e6e1ec83a6e3ce6185e25b6773b34ba94" - integrity sha512-puF9DaSKgC8NvqrUUt/5XA9iua+qOdtm8HhUvBmUlEfo8aNc//wfSd1znGAhg8jXaf5lRdYbOmBbT7SMM8gxiA== - dependencies: - "@opentelemetry/core" "^1.8.0" - "@opentelemetry/instrumentation" "^0.40.0" - "@opentelemetry/semantic-conventions" "^1.0.0" - -"@opentelemetry/instrumentation-router@^0.32.3": - version "0.32.4" - resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-router/-/instrumentation-router-0.32.4.tgz#eb5a964306e50697e81262a2b80a52a8a7c4f8ed" - integrity sha512-TbiufieBpP78UvVnECmhxuHtVWR0tfkZW53TwqsYShlNPeQjNYX377fLUw+S8Lnvnctqn47Wjt4SbCOBhNnZEg== - dependencies: - "@opentelemetry/instrumentation" "^0.40.0" - "@opentelemetry/semantic-conventions" "^1.0.0" - -"@opentelemetry/instrumentation-socket.io@^0.33.3": - version "0.33.4" - resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-socket.io/-/instrumentation-socket.io-0.33.4.tgz#0959c500fb7102b62cf269ba7bb1095f9197e2ba" - integrity sha512-6Rbg1d1q/OECrodA+ESFw30KA9zb0atrX+bk2rhLxhJMSO8s3MW9/rtdgkytLFS+nsEyPVMljmmOOPKwiki2Xg== - dependencies: - "@opentelemetry/instrumentation" "^0.40.0" - "@opentelemetry/semantic-conventions" "^1.0.0" - -"@opentelemetry/instrumentation-tedious@^0.5.3": - version "0.5.4" - resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-tedious/-/instrumentation-tedious-0.5.4.tgz#75d23732196bc6f20aa0ae71f8615ecc3da66287" - integrity sha512-i3P+/9+i8yWoMhrw9vCKClpiWB4lp9CGRF/riaRGTrPNF14IO2B0E+DpNMlOjCWydnOLnjZ/m0vIkbVLAdP9aw== - dependencies: - "@opentelemetry/instrumentation" "^0.40.0" - "@opentelemetry/semantic-conventions" "^1.0.0" - "@types/tedious" "^4.0.6" - -"@opentelemetry/instrumentation-winston@^0.31.3": - version "0.31.4" - resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-winston/-/instrumentation-winston-0.31.4.tgz#09c160dfeb935ea6981d898176be79dea67f31c8" - integrity sha512-AmUq5Do7FUoPLrehsDh45sK34qlPNg1i9HUieop3F+d1+gk+YPv2Z29WGi7KEnhM4/GJu2OsWq/pwzgemeNHuQ== - dependencies: - "@opentelemetry/instrumentation" "^0.40.0" - -"@opentelemetry/instrumentation@0.39.1", "@opentelemetry/instrumentation@^0.39.1": - version "0.39.1" - resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation/-/instrumentation-0.39.1.tgz#46d03b4c7ce9f8d08f575d756acc801fa1283615" - integrity sha512-s7/9tPmM0l5KCd07VQizC4AO2/5UJdkXq5gMSHPdCeiMKSeBEdyDyQX7A+Cq+RYZM452qzFmrJ4ut628J5bnSg== - dependencies: - require-in-the-middle "^7.1.0" - semver "^7.3.2" - shimmer "^1.2.1" - -"@opentelemetry/instrumentation@^0.40.0": - version "0.40.0" - resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation/-/instrumentation-0.40.0.tgz#13d5f2d60c3fafef124ab6961a32204f7ef8bb25" - integrity sha512-23TzBKPflUS1uEq5SXymnQKQDSda35KvHjnvxdcDQGE+wg6hwDHgScUCWiBmZW4sxAaPcANfs+Wc9B7yDuyT6Q== - dependencies: - "@types/shimmer" "^1.0.2" - import-in-the-middle "1.3.5" - require-in-the-middle "^7.1.0" - semver "^7.3.2" - shimmer "^1.2.1" - -"@opentelemetry/otlp-exporter-base@0.39.1": - version "0.39.1" - resolved "https://registry.yarnpkg.com/@opentelemetry/otlp-exporter-base/-/otlp-exporter-base-0.39.1.tgz#650c9b23bbc6eb335c5f9b7f433aca87e9dc88a3" - integrity sha512-Pv5X8fbi6jD/RJBePyn7MnCSuE6MbPB6dl+7YYBWJ5RcMGYMwvLXjd4h2jWsPV2TSUg38H/RoSP0aXvQ06Y7iw== - dependencies: - "@opentelemetry/core" "1.13.0" - -"@opentelemetry/otlp-grpc-exporter-base@0.39.1": - version "0.39.1" - resolved "https://registry.yarnpkg.com/@opentelemetry/otlp-grpc-exporter-base/-/otlp-grpc-exporter-base-0.39.1.tgz#944f2ab384c08c37641c02f63381380d9d0714f4" - integrity sha512-u3ErFRQqQFKjjIMuwLWxz/tLPYInfmiAmSy//fGSCzCh2ZdJgqQjMOAxBgqFtCF2xFL+OmMhyuC2ThMzceGRWA== - dependencies: - "@grpc/grpc-js" "^1.7.1" - "@opentelemetry/core" "1.13.0" - "@opentelemetry/otlp-exporter-base" "0.39.1" - protobufjs "^7.2.2" - -"@opentelemetry/otlp-proto-exporter-base@0.39.1": - version "0.39.1" - resolved "https://registry.yarnpkg.com/@opentelemetry/otlp-proto-exporter-base/-/otlp-proto-exporter-base-0.39.1.tgz#04a46c7497724759a260d8ded5463a20ac5c6d39" - integrity sha512-VssdfGYu6LkSliQATdkvoP8lPSQuNLENRdHTUOV2veF4iqY/UpxBFFlkarY29W+MYjWXIBfYntgNjQvcn78A+w== - dependencies: - "@opentelemetry/core" "1.13.0" - "@opentelemetry/otlp-exporter-base" "0.39.1" - protobufjs "^7.1.2" - -"@opentelemetry/otlp-transformer@0.39.1": - version "0.39.1" - resolved "https://registry.yarnpkg.com/@opentelemetry/otlp-transformer/-/otlp-transformer-0.39.1.tgz#6d83e33d2a031f9ae1dcaf29595eac25b681bebf" - integrity sha512-0hgVnXXz5efI382B/24NxD4b6Zxlh7nxCdJkxkdmQMbn0yRiwoq/ZT+QG8eUL6JNzsBAV1WJlF5aJNsL8skHvw== - dependencies: - "@opentelemetry/api-logs" "0.39.1" - "@opentelemetry/core" "1.13.0" - "@opentelemetry/resources" "1.13.0" - "@opentelemetry/sdk-logs" "0.39.1" - "@opentelemetry/sdk-metrics" "1.13.0" - "@opentelemetry/sdk-trace-base" "1.13.0" - -"@opentelemetry/propagation-utils@^0.29.5": - version "0.29.5" - resolved "https://registry.yarnpkg.com/@opentelemetry/propagation-utils/-/propagation-utils-0.29.5.tgz#2d3ba90a69370e7c9f2f851943cdd2e2e63a56bd" - integrity sha512-TRVQAZZfXmatJ8ZrjtQadxv+3n1DbQl42aK2/UOeZ0THdz9EqQ2+IBbvPD484c8H7pjUVUwqDOsk+1BOSPwXEw== - -"@opentelemetry/propagator-aws-xray@^1.2.1": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@opentelemetry/propagator-aws-xray/-/propagator-aws-xray-1.2.1.tgz#69522afa2fb9978ffa81e80a1a30454e98d6f30c" - integrity sha512-xGPBHXwMvrFuRUfyWj6HEUuQX/QSblN3pcGila/wX01/9KYO5TgFvwKOqR9uxLqvS1s/NaF8J1afsieYCGp7Tg== - dependencies: - "@opentelemetry/core" "^1.0.0" - -"@opentelemetry/propagator-b3@1.13.0": - version "1.13.0" - resolved "https://registry.yarnpkg.com/@opentelemetry/propagator-b3/-/propagator-b3-1.13.0.tgz#30a19a24e61ae8dbc26c2d7d7d3423d804d48f07" - integrity sha512-HOo91EI4UbuG8xQVLFziTzrcIn0MJQhy8m9jorh8aonb94jFVFi3CFNIiAnIGOabmnshJLOABxpYXsiPB8Xnzg== - dependencies: - "@opentelemetry/core" "1.13.0" - -"@opentelemetry/propagator-jaeger@1.13.0": - version "1.13.0" - resolved "https://registry.yarnpkg.com/@opentelemetry/propagator-jaeger/-/propagator-jaeger-1.13.0.tgz#94a79d5301409d49b149227ee5568fcf6b21f9fe" - integrity sha512-IV9TO+u1Jzm9mUDAD3gyXf89eyvgEJUY1t+GB5QmS4wjVeWrSMUtD0JjH3yG9SNqkrQOqOGJq7YUSSetW+Lf5Q== - dependencies: - "@opentelemetry/core" "1.13.0" - -"@opentelemetry/redis-common@^0.35.1": - version "0.35.1" - resolved "https://registry.yarnpkg.com/@opentelemetry/redis-common/-/redis-common-0.35.1.tgz#01356f6845d4f9f9fdfd2c4c562a74316d2d24d3" - integrity sha512-qLXe7h9VzFLx3LaizFiUlpuohCRyvHlDW5b9synE6omHKTZr/n0EHEdmhp3GezBeAqMGI+q499Mht4SmStaSqQ== - -"@opentelemetry/resource-detector-alibaba-cloud@^0.27.6": - version "0.27.7" - resolved "https://registry.yarnpkg.com/@opentelemetry/resource-detector-alibaba-cloud/-/resource-detector-alibaba-cloud-0.27.7.tgz#9eccdbf3b70eb891dcbd8f36a8019610ce838254" - integrity sha512-TjNuB+e1fUrlypy76ksoi3CGGVf/8eY5ZAHalvCZMWdHLjmziuaJbmYfBhqeqzwUswiSxgJvFjwhcA92wL7U2Q== - dependencies: - "@opentelemetry/resources" "^1.0.0" - "@opentelemetry/semantic-conventions" "^1.0.0" - -"@opentelemetry/resource-detector-aws@^1.2.4": - version "1.2.5" - resolved "https://registry.yarnpkg.com/@opentelemetry/resource-detector-aws/-/resource-detector-aws-1.2.5.tgz#851efb8b5842cca23078109f15680aed643b8fa6" - integrity sha512-/YeDkep2Rzt8emhftfVw2AKHWAuWyzee5HOZoJKAlJEVQ7EkFu2LSXIdg1wf74i0YcvN/rPAbMoAXPodPpSQdA== - dependencies: - "@opentelemetry/core" "^1.0.0" - "@opentelemetry/resources" "^1.0.0" - "@opentelemetry/semantic-conventions" "^1.0.0" - -"@opentelemetry/resource-detector-container@^0.2.4": - version "0.2.5" - resolved "https://registry.yarnpkg.com/@opentelemetry/resource-detector-container/-/resource-detector-container-0.2.5.tgz#614512329b9bf443864bd77ceb29b0822ace2c79" - integrity sha512-aaTr+mKF8KiqIQRR9KjPAGa7budCpyVUH1iun8pxTuxMs9TkuP5PAvQioyhDFtnMt9BBfV+nFOFShu0Npss7wA== - dependencies: - "@opentelemetry/resources" "^1.0.0" - "@opentelemetry/semantic-conventions" "^1.0.0" - -"@opentelemetry/resource-detector-gcp@^0.28.2": - version "0.28.3" - resolved "https://registry.yarnpkg.com/@opentelemetry/resource-detector-gcp/-/resource-detector-gcp-0.28.3.tgz#580016f4765e275b83777a52fabe93e48716948e" - integrity sha512-P2iE0kSaEdrFn2in6N232LcYDvt19G3cTvllIYcjK8trKrClFSpJyhReZj+dW/HPItMCXYQnL+tyU4CYq3QVZw== - dependencies: - "@opentelemetry/core" "^1.0.0" - "@opentelemetry/resources" "^1.0.0" - "@opentelemetry/semantic-conventions" "^1.0.0" - gcp-metadata "^5.0.0" - -"@opentelemetry/resources@1.13.0": - version "1.13.0" - resolved "https://registry.yarnpkg.com/@opentelemetry/resources/-/resources-1.13.0.tgz#436b33ea950004e66fce6575f2776a05faca7f8e" - integrity sha512-euqjOkiN6xhjE//0vQYGvbStxoD/WWQRhDiO0OTLlnLBO9Yw2Gd/VoSx2H+svsebjzYk5OxLuREBmcdw6rbUNg== - dependencies: - "@opentelemetry/core" "1.13.0" - "@opentelemetry/semantic-conventions" "1.13.0" - -"@opentelemetry/resources@^1.0.0", "@opentelemetry/resources@^1.12.0", "@opentelemetry/resources@^1.8.0": - version "1.15.0" - resolved "https://registry.yarnpkg.com/@opentelemetry/resources/-/resources-1.15.0.tgz#748a6ae9017636b8b30f5dee1fff3e166e51f63d" - integrity sha512-Sb8A6ZXHXDlgHv32UNRE3y8McWE3vkb5dsSttYArYa5ZpwjiF5ge0vnnKUUnG7bY0AgF9VBIOORZE8gsrnD2WA== - dependencies: - "@opentelemetry/core" "1.15.0" - "@opentelemetry/semantic-conventions" "1.15.0" - tslib "^2.3.1" - -"@opentelemetry/sdk-logs@0.39.1": - version "0.39.1" - resolved "https://registry.yarnpkg.com/@opentelemetry/sdk-logs/-/sdk-logs-0.39.1.tgz#888af05458af5d097d6263ade118e8db78f76f38" - integrity sha512-/gmgKfZ1ZVFporKuwsewqIyvaUIGpv76JZ7lBpHQQPb37IMpaXO6pdqFI4ebHAWfNIm3akMyhmdtzivcgF3lgw== - dependencies: - "@opentelemetry/core" "1.13.0" - "@opentelemetry/resources" "1.13.0" - -"@opentelemetry/sdk-metrics@1.13.0": - version "1.13.0" - resolved "https://registry.yarnpkg.com/@opentelemetry/sdk-metrics/-/sdk-metrics-1.13.0.tgz#4e859107a7a4389bcda7b37d3952bc7dd34211d7" - integrity sha512-MOjZX6AnSOqLliCcZUrb+DQKjAWXBiGeICGbHAGe5w0BB18PJIeIo995lO5JSaFfHpmUMgJButTPfJJD27W3Vg== - dependencies: - "@opentelemetry/core" "1.13.0" - "@opentelemetry/resources" "1.13.0" - lodash.merge "4.6.2" - -"@opentelemetry/sdk-node@^0.39.1": - version "0.39.1" - resolved "https://registry.yarnpkg.com/@opentelemetry/sdk-node/-/sdk-node-0.39.1.tgz#0e3c0ee36c500e715a4c61fa4dd1985408ad0bb8" - integrity sha512-qODReBGNSdfRS5gvCFj1SdiIi/3ZFTZb0H1KvWE/OrTkklyL5RhIs7vDwvEGHmha+YpUu0Y2+R2+itSBSu/jCA== - dependencies: - "@opentelemetry/core" "1.13.0" - "@opentelemetry/exporter-jaeger" "1.13.0" - "@opentelemetry/exporter-trace-otlp-grpc" "0.39.1" - "@opentelemetry/exporter-trace-otlp-http" "0.39.1" - "@opentelemetry/exporter-trace-otlp-proto" "0.39.1" - "@opentelemetry/exporter-zipkin" "1.13.0" - "@opentelemetry/instrumentation" "0.39.1" - "@opentelemetry/resources" "1.13.0" - "@opentelemetry/sdk-metrics" "1.13.0" - "@opentelemetry/sdk-trace-base" "1.13.0" - "@opentelemetry/sdk-trace-node" "1.13.0" - "@opentelemetry/semantic-conventions" "1.13.0" - -"@opentelemetry/sdk-trace-base@1.13.0": - version "1.13.0" - resolved "https://registry.yarnpkg.com/@opentelemetry/sdk-trace-base/-/sdk-trace-base-1.13.0.tgz#096cc2759430d880c5d886e009df2605097403dc" - integrity sha512-moTiQtc0uPR1hQLt6gLDJH9IIkeBhgRb71OKjNHZPE1VF45fHtD6nBDi5J/DkTHTwYP5X3kBJLa3xN7ub6J4eg== - dependencies: - "@opentelemetry/core" "1.13.0" - "@opentelemetry/resources" "1.13.0" - "@opentelemetry/semantic-conventions" "1.13.0" - -"@opentelemetry/sdk-trace-node@1.13.0": - version "1.13.0" - resolved "https://registry.yarnpkg.com/@opentelemetry/sdk-trace-node/-/sdk-trace-node-1.13.0.tgz#baadf62218ca69e37486debfbcf15b2563f75979" - integrity sha512-FXA85lXKTsnbOflA/TBuBf2pmhD3c8uDjNjG0YqK+ap8UayfALmfJhf+aG1yBOUHevCY0JXJ4/xtbXExxpsMog== - dependencies: - "@opentelemetry/context-async-hooks" "1.13.0" - "@opentelemetry/core" "1.13.0" - "@opentelemetry/propagator-b3" "1.13.0" - "@opentelemetry/propagator-jaeger" "1.13.0" - "@opentelemetry/sdk-trace-base" "1.13.0" - semver "^7.3.5" - -"@opentelemetry/semantic-conventions@1.13.0": - version "1.13.0" - resolved "https://registry.yarnpkg.com/@opentelemetry/semantic-conventions/-/semantic-conventions-1.13.0.tgz#0290398b3eaebc6029c348988a78c3b688fe9219" - integrity sha512-LMGqfSZkaMQXqewO0o1wvWr/2fQdCh4a3Sqlxka/UsJCe0cfLulh6x2aqnKLnsrSGiCq5rSCwvINd152i0nCqw== - -"@opentelemetry/semantic-conventions@1.15.0", "@opentelemetry/semantic-conventions@^1.0.0": - version "1.15.0" - resolved "https://registry.yarnpkg.com/@opentelemetry/semantic-conventions/-/semantic-conventions-1.15.0.tgz#e6173daa5fd61f353b02c858001388bf26e9d059" - integrity sha512-f3wwFrFyCpGrFBrFs7lCUJSCSCGyeKG52c+EKeobs3Dd29M75yO6GYkt6PkYPfDawxSlV5p+4yJPPk8tPObzTQ== - dependencies: - tslib "^2.3.1" - -"@protobufjs/aspromise@^1.1.1", "@protobufjs/aspromise@^1.1.2": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@protobufjs/aspromise/-/aspromise-1.1.2.tgz#9b8b0cc663d669a7d8f6f5d0893a14d348f30fbf" - integrity sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ== - -"@protobufjs/base64@^1.1.2": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@protobufjs/base64/-/base64-1.1.2.tgz#4c85730e59b9a1f1f349047dbf24296034bb2735" - integrity sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg== - -"@protobufjs/codegen@^2.0.4": - version "2.0.4" - resolved "https://registry.yarnpkg.com/@protobufjs/codegen/-/codegen-2.0.4.tgz#7ef37f0d010fb028ad1ad59722e506d9262815cb" - integrity sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg== - -"@protobufjs/eventemitter@^1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz#355cbc98bafad5978f9ed095f397621f1d066b70" - integrity sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q== - -"@protobufjs/fetch@^1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@protobufjs/fetch/-/fetch-1.1.0.tgz#ba99fb598614af65700c1619ff06d454b0d84c45" - integrity sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ== - dependencies: - "@protobufjs/aspromise" "^1.1.1" - "@protobufjs/inquire" "^1.1.0" - -"@protobufjs/float@^1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@protobufjs/float/-/float-1.0.2.tgz#5e9e1abdcb73fc0a7cb8b291df78c8cbd97b87d1" - integrity sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ== - -"@protobufjs/inquire@^1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@protobufjs/inquire/-/inquire-1.1.0.tgz#ff200e3e7cf2429e2dcafc1140828e8cc638f089" - integrity sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q== - -"@protobufjs/path@^1.1.2": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@protobufjs/path/-/path-1.1.2.tgz#6cc2b20c5c9ad6ad0dccfd21ca7673d8d7fbf68d" - integrity sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA== - -"@protobufjs/pool@^1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@protobufjs/pool/-/pool-1.1.0.tgz#09fd15f2d6d3abfa9b65bc366506d6ad7846ff54" - integrity sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw== - -"@protobufjs/utf8@^1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@protobufjs/utf8/-/utf8-1.1.0.tgz#a777360b5b39a1a2e5106f8e858f2fd2d060c570" - integrity sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw== - -"@sideway/address@^4.1.3": - version "4.1.4" - resolved "https://registry.yarnpkg.com/@sideway/address/-/address-4.1.4.tgz#03dccebc6ea47fdc226f7d3d1ad512955d4783f0" - integrity sha512-7vwq+rOHVWjyXxVlR76Agnvhy8I9rpzjosTESvmhNeXOXdZZB15Fl+TI9x1SiHZH5Jv2wTGduSxFDIaq0m3DUw== - dependencies: - "@hapi/hoek" "^9.0.0" - -"@sideway/formula@^3.0.1": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@sideway/formula/-/formula-3.0.1.tgz#80fcbcbaf7ce031e0ef2dd29b1bfc7c3f583611f" - integrity sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg== - -"@sideway/pinpoint@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@sideway/pinpoint/-/pinpoint-2.0.0.tgz#cff8ffadc372ad29fd3f78277aeb29e632cc70df" - integrity sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ== - -"@types/accepts@*": - version "1.3.5" - resolved "https://registry.yarnpkg.com/@types/accepts/-/accepts-1.3.5.tgz#c34bec115cfc746e04fe5a059df4ce7e7b391575" - integrity sha512-jOdnI/3qTpHABjM5cx1Hc0sKsPoYCp+DP/GJRGtDlPd7fiV9oXGGIcjW/ZOxLIvjGz8MA+uMZI9metHlgqbgwQ== - dependencies: - "@types/node" "*" - -"@types/aws-lambda@8.10.81": - version "8.10.81" - resolved "https://registry.yarnpkg.com/@types/aws-lambda/-/aws-lambda-8.10.81.tgz#6d405269aad82e05a348687631aa9a587cdbe158" - integrity sha512-C1rFKGVZ8KwqhwBOYlpoybTSRtxu2433ea6JaO3amc6ubEe08yQoFsPa9aU9YqvX7ppeZ25CnCtC4AH9mhtxsQ== - -"@types/body-parser@*": - version "1.19.2" - resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.19.2.tgz#aea2059e28b7658639081347ac4fab3de166e6f0" - integrity sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g== - dependencies: - "@types/connect" "*" - "@types/node" "*" - -"@types/bunyan@1.8.7": - version "1.8.7" - resolved "https://registry.yarnpkg.com/@types/bunyan/-/bunyan-1.8.7.tgz#63cc65b5ecff6217d1509409a575e7b991f80831" - integrity sha512-jaNt6xX5poSmXuDAkQrSqx2zkR66OrdRDuVnU8ldvn3k/Ci/7Sf5nooKspQWimDnw337Bzt/yirqSThTjvrHkg== - dependencies: - "@types/node" "*" - -"@types/connect@*", "@types/connect@3.4.35": - version "3.4.35" - resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.35.tgz#5fcf6ae445e4021d1fc2219a4873cc73a3bb2ad1" - integrity sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ== - dependencies: - "@types/node" "*" - -"@types/content-disposition@*": - version "0.5.5" - resolved "https://registry.yarnpkg.com/@types/content-disposition/-/content-disposition-0.5.5.tgz#650820e95de346e1f84e30667d168c8fd25aa6e3" - integrity sha512-v6LCdKfK6BwcqMo+wYW05rLS12S0ZO0Fl4w1h4aaZMD7bqT3gVUns6FvLJKGZHQmYn3SX55JWGpziwJRwVgutA== - -"@types/cookies@*": - version "0.7.7" - resolved "https://registry.yarnpkg.com/@types/cookies/-/cookies-0.7.7.tgz#7a92453d1d16389c05a5301eef566f34946cfd81" - integrity sha512-h7BcvPUogWbKCzBR2lY4oqaZbO3jXZksexYJVFvkrFeLgbZjQkU4x8pRq6eg2MHXQhY0McQdqmmsxRWlVAHooA== - dependencies: - "@types/connect" "*" - "@types/express" "*" - "@types/keygrip" "*" - "@types/node" "*" - -"@types/express-serve-static-core@^4.17.18", "@types/express-serve-static-core@^4.17.33": - version "4.17.35" - resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.35.tgz#c95dd4424f0d32e525d23812aa8ab8e4d3906c4f" - integrity sha512-wALWQwrgiB2AWTT91CB62b6Yt0sNHpznUXeZEcnPU3DRdlDIz74x8Qg1UUYKSVFi+va5vKOLYRBI1bRKiLLKIg== - dependencies: - "@types/node" "*" - "@types/qs" "*" - "@types/range-parser" "*" - "@types/send" "*" - -"@types/express@*": - version "4.17.17" - resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.17.tgz#01d5437f6ef9cfa8668e616e13c2f2ac9a491ae4" - integrity sha512-Q4FmmuLGBG58btUnfS1c1r/NQdlp3DMfGDGig8WhfpA2YRUtEkxAjkZb0yvplJGYdF1fsQ81iMDcH24sSCNC/Q== - dependencies: - "@types/body-parser" "*" - "@types/express-serve-static-core" "^4.17.33" - "@types/qs" "*" - "@types/serve-static" "*" - -"@types/express@4.17.13": - version "4.17.13" - resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.13.tgz#a76e2995728999bab51a33fabce1d705a3709034" - integrity sha512-6bSZTPaTIACxn48l50SR+axgrqm6qXFIxrdAKaG6PaJk3+zuUr35hBlgT7vOmJcum+OEaIBLtHV/qloEAFITeA== - dependencies: - "@types/body-parser" "*" - "@types/express-serve-static-core" "^4.17.18" - "@types/qs" "*" - "@types/serve-static" "*" - -"@types/generic-pool@^3.1.9": - version "3.8.1" - resolved "https://registry.yarnpkg.com/@types/generic-pool/-/generic-pool-3.8.1.tgz#b9b25b2ba4733057fa5df1818352d3205c48e87b" - integrity sha512-eaMAbZS0EfKvaP5PUZ/Cdf5uJBO2t6T3RdvQTKuMqUwGhNpCnPAsKWEMyV+mCeCQG3UiHrtgdzni8X6DmhxRaQ== - dependencies: - generic-pool "*" - -"@types/hapi__catbox@*": - version "10.2.4" - resolved "https://registry.yarnpkg.com/@types/hapi__catbox/-/hapi__catbox-10.2.4.tgz#4d0531a6c2d0e45024f724020d536041ef8ffe30" - integrity sha512-A6ivRrXD5glmnJna1UAGw87QNZRp/vdFO9U4GS+WhOMWzHnw+oTGkMvg0g6y1930CbeheGOCm7A1qHsqH7AXqg== - -"@types/hapi__hapi@20.0.9": - version "20.0.9" - resolved "https://registry.yarnpkg.com/@types/hapi__hapi/-/hapi__hapi-20.0.9.tgz#9d570846c96268266a14c970c13aeeaccfc8e172" - integrity sha512-fGpKScknCKZityRXdZgpCLGbm41R1ppFgnKHerfZlqOOlCX/jI129S6ghgBqkqCE8m9A0CIu1h7Ch04lD9KOoA== - dependencies: - "@hapi/boom" "^9.0.0" - "@hapi/iron" "^6.0.0" - "@hapi/podium" "^4.1.3" - "@types/hapi__catbox" "*" - "@types/hapi__mimos" "*" - "@types/hapi__shot" "*" - "@types/node" "*" - joi "^17.3.0" - -"@types/hapi__mimos@*": - version "4.1.4" - resolved "https://registry.yarnpkg.com/@types/hapi__mimos/-/hapi__mimos-4.1.4.tgz#4f8a1c58345fc468553708d3cb508724aa081bd9" - integrity sha512-i9hvJpFYTT/qzB5xKWvDYaSXrIiNqi4ephi+5Lo6+DoQdwqPXQgmVVOZR+s3MBiHoFqsCZCX9TmVWG3HczmTEQ== - dependencies: - "@types/mime-db" "*" - -"@types/hapi__shot@*": - version "4.1.2" - resolved "https://registry.yarnpkg.com/@types/hapi__shot/-/hapi__shot-4.1.2.tgz#d4011999a91e8101030fece1462fe99769455855" - integrity sha512-8wWgLVP1TeGqgzZtCdt+F+k15DWQvLG1Yv6ZzPfb3D5WIo5/S+GGKtJBVo2uNEcqabP5Ifc71QnJTDnTmw1axA== - dependencies: - "@types/node" "*" - -"@types/http-assert@*": - version "1.5.3" - resolved "https://registry.yarnpkg.com/@types/http-assert/-/http-assert-1.5.3.tgz#ef8e3d1a8d46c387f04ab0f2e8ab8cb0c5078661" - integrity sha512-FyAOrDuQmBi8/or3ns4rwPno7/9tJTijVW6aQQjK02+kOQ8zmoNg2XJtAuQhvQcy1ASJq38wirX5//9J1EqoUA== - -"@types/http-errors@*": - version "2.0.1" - resolved "https://registry.yarnpkg.com/@types/http-errors/-/http-errors-2.0.1.tgz#20172f9578b225f6c7da63446f56d4ce108d5a65" - integrity sha512-/K3ds8TRAfBvi5vfjuz8y6+GiAYBZ0x4tXv1Av6CWBWn0IlADc+ZX9pMq7oU0fNQPnBwIZl3rmeLp6SBApbxSQ== - -"@types/ioredis4@npm:@types/ioredis@^4.28.10": - version "4.28.10" - resolved "https://registry.yarnpkg.com/@types/ioredis/-/ioredis-4.28.10.tgz#40ceb157a4141088d1394bb87c98ed09a75a06ff" - integrity sha512-69LyhUgrXdgcNDv7ogs1qXZomnfOEnSmrmMFqKgt1XMJxmoOSG/u3wYy13yACIfKuMJ8IhKgHafDO3sx19zVQQ== - dependencies: - "@types/node" "*" - -"@types/keygrip@*": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@types/keygrip/-/keygrip-1.0.2.tgz#513abfd256d7ad0bf1ee1873606317b33b1b2a72" - integrity sha512-GJhpTepz2udxGexqos8wgaBx4I/zWIDPh/KOGEwAqtuGDkOUJu5eFvwmdBX4AmB8Odsr+9pHCQqiAqDL/yKMKw== - -"@types/koa-compose@*": - version "3.2.5" - resolved "https://registry.yarnpkg.com/@types/koa-compose/-/koa-compose-3.2.5.tgz#85eb2e80ac50be95f37ccf8c407c09bbe3468e9d" - integrity sha512-B8nG/OoE1ORZqCkBVsup/AKcvjdgoHnfi4pZMn5UwAPCbhk/96xyv284eBYW8JlQbQ7zDmnpFr68I/40mFoIBQ== - dependencies: - "@types/koa" "*" - -"@types/koa@*", "@types/koa@2.13.6": - version "2.13.6" - resolved "https://registry.yarnpkg.com/@types/koa/-/koa-2.13.6.tgz#6dc14e727baf397310aa6f414ebe5d144983af42" - integrity sha512-diYUfp/GqfWBAiwxHtYJ/FQYIXhlEhlyaU7lB/bWQrx4Il9lCET5UwpFy3StOAohfsxxvEQ11qIJgT1j2tfBvw== - dependencies: - "@types/accepts" "*" - "@types/content-disposition" "*" - "@types/cookies" "*" - "@types/http-assert" "*" - "@types/http-errors" "*" - "@types/keygrip" "*" - "@types/koa-compose" "*" - "@types/node" "*" - -"@types/koa__router@8.0.7": - version "8.0.7" - resolved "https://registry.yarnpkg.com/@types/koa__router/-/koa__router-8.0.7.tgz#663d69d5ddebff5aaca27c0594430b3ba6ea20be" - integrity sha512-OB3Ax75nmTP+WR9AgdzA42DI7YmBtiNKN2g1Wxl+d5Dyek9SWt740t+ukwXSmv/jMBCUPyV3YEI93vZHgdP7UQ== - dependencies: - "@types/koa" "*" - -"@types/long@^4.0.1": - version "4.0.2" - resolved "https://registry.yarnpkg.com/@types/long/-/long-4.0.2.tgz#b74129719fc8d11c01868010082d483b7545591a" - integrity sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA== - -"@types/memcached@^2.2.6": - version "2.2.7" - resolved "https://registry.yarnpkg.com/@types/memcached/-/memcached-2.2.7.tgz#b3de026a11a4c0a18fb079cfeeaea10a41da20f9" - integrity sha512-ImJbz1i8pl+OnyhYdIDnHe8jAuM8TOwM/7VsciqhYX3IL0jPPUToAtVxklfcWFGYckahEYZxhd9FS0z3MM1dpA== - dependencies: - "@types/node" "*" - -"@types/mime-db@*": - version "1.43.1" - resolved "https://registry.yarnpkg.com/@types/mime-db/-/mime-db-1.43.1.tgz#c2a0522453bb9b6e84ee48b7eef765d19bcd519e" - integrity sha512-kGZJY+R+WnR5Rk+RPHUMERtb2qBRViIHCBdtUrY+NmwuGb8pQdfTqQiCKPrxpdoycl8KWm2DLdkpoSdt479XoQ== - -"@types/mime@*": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@types/mime/-/mime-3.0.1.tgz#5f8f2bca0a5863cb69bc0b0acd88c96cb1d4ae10" - integrity sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA== - -"@types/mime@^1": - version "1.3.2" - resolved "https://registry.yarnpkg.com/@types/mime/-/mime-1.3.2.tgz#93e25bf9ee75fe0fd80b594bc4feb0e862111b5a" - integrity sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw== - -"@types/mysql@2.15.19": - version "2.15.19" - resolved "https://registry.yarnpkg.com/@types/mysql/-/mysql-2.15.19.tgz#d158927bb7c1a78f77e56de861a3b15cae0e7aed" - integrity sha512-wSRg2QZv14CWcZXkgdvHbbV2ACufNy5EgI8mBBxnJIptchv7DBy/h53VMa2jDhyo0C9MO4iowE6z9vF8Ja1DkQ== - dependencies: - "@types/node" "*" - -"@types/node@*", "@types/node@>=12.12.47", "@types/node@>=13.7.0": - version "20.4.1" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.4.1.tgz#a6033a8718653c50ac4962977e14d0f984d9527d" - integrity sha512-JIzsAvJeA/5iY6Y/OxZbv1lUcc8dNSE77lb2gnBH+/PJ3lFR1Ccvgwl5JWnHAkNHcRsT0TbpVOsiMKZ1F/yyJg== - -"@types/pg-pool@2.0.3": - version "2.0.3" - resolved "https://registry.yarnpkg.com/@types/pg-pool/-/pg-pool-2.0.3.tgz#3eb8df2933f617f219a53091ad4080c94ba1c959" - integrity sha512-fwK5WtG42Yb5RxAwxm3Cc2dJ39FlgcaNiXKvtTLAwtCn642X7dgel+w1+cLWwpSOFImR3YjsZtbkfjxbHtFAeg== - dependencies: - "@types/pg" "*" - -"@types/pg@*": - version "8.10.2" - resolved "https://registry.yarnpkg.com/@types/pg/-/pg-8.10.2.tgz#7814d1ca02c8071f4d0864c1b17c589b061dba43" - integrity sha512-MKFs9P6nJ+LAeHLU3V0cODEOgyThJ3OAnmOlsZsxux6sfQs3HRXR5bBn7xG5DjckEFhTAxsXi7k7cd0pCMxpJw== - dependencies: - "@types/node" "*" - pg-protocol "*" - pg-types "^4.0.1" - -"@types/pg@8.6.1": - version "8.6.1" - resolved "https://registry.yarnpkg.com/@types/pg/-/pg-8.6.1.tgz#099450b8dc977e8197a44f5229cedef95c8747f9" - integrity sha512-1Kc4oAGzAl7uqUStZCDvaLFqZrW9qWSjXOmBfdgyBP5La7Us6Mg4GBvRlSoaZMhQF/zSj1C8CtKMBkoiT8eL8w== - dependencies: - "@types/node" "*" - pg-protocol "*" - pg-types "^2.2.0" - -"@types/qs@*": - version "6.9.7" - resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.7.tgz#63bb7d067db107cc1e457c303bc25d511febf6cb" - integrity sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw== - -"@types/range-parser@*": - version "1.2.4" - resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.4.tgz#cd667bcfdd025213aafb7ca5915a932590acdcdc" - integrity sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw== - -"@types/send@*": - version "0.17.1" - resolved "https://registry.yarnpkg.com/@types/send/-/send-0.17.1.tgz#ed4932b8a2a805f1fe362a70f4e62d0ac994e301" - integrity sha512-Cwo8LE/0rnvX7kIIa3QHCkcuF21c05Ayb0ZfxPiv0W8VRiZiNW/WuRupHKpqqGVGf7SUA44QSOUKaEd9lIrd/Q== - dependencies: - "@types/mime" "^1" - "@types/node" "*" - -"@types/serve-static@*": - version "1.15.2" - resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.15.2.tgz#3e5419ecd1e40e7405d34093f10befb43f63381a" - integrity sha512-J2LqtvFYCzaj8pVYKw8klQXrLLk7TBZmQ4ShlcdkELFKGwGMfevMLneMMRkMgZxotOD9wg497LpC7O8PcvAmfw== - dependencies: - "@types/http-errors" "*" - "@types/mime" "*" - "@types/node" "*" - -"@types/shimmer@^1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@types/shimmer/-/shimmer-1.0.2.tgz#93eb2c243c351f3f17d5c580c7467ae5d686b65f" - integrity sha512-dKkr1bTxbEsFlh2ARpKzcaAmsYixqt9UyCdoEZk8rHyE4iQYcDCyvSjDSf7JUWJHlJiTtbIoQjxKh6ViywqDAg== - -"@types/tedious@^4.0.6": - version "4.0.9" - resolved "https://registry.yarnpkg.com/@types/tedious/-/tedious-4.0.9.tgz#baa3892e45c63d7aac54d7bf5b01385d210ff19e" - integrity sha512-ipwFvfy9b2m0gjHsIX0D6NAAwGCKokzf5zJqUZHUGt+7uWVlBIy6n2eyMgiKQ8ChLFVxic/zwQUhjLYNzbHDRA== - dependencies: - "@types/node" "*" - -agent-base@6: - version "6.0.2" - resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" - integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== - dependencies: - debug "4" - -ansi-color@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/ansi-color/-/ansi-color-0.2.1.tgz#3e75c037475217544ed763a8db5709fa9ae5bf9a" - integrity sha512-bF6xLaZBLpOQzgYUtYEhJx090nPSZk1BQ/q2oyBK9aMMcJHzx9uXGCjI2Y+LebsN4Jwoykr0V9whbPiogdyHoQ== - -ansi-regex@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" - integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== - -ansi-styles@^4.0.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" - integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== - dependencies: - color-convert "^2.0.1" - -bignumber.js@^9.0.0: - version "9.1.1" - resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-9.1.1.tgz#c4df7dc496bd849d4c9464344c1aa74228b4dac6" - integrity sha512-pHm4LsMJ6lzgNGVfZHjMoO8sdoRhOzOH4MLmY65Jg70bpxCKu5iOHNJyfF6OyvYw7t8Fpf35RuzUyqnQsj8Vig== - -bufrw@^1.2.1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/bufrw/-/bufrw-1.3.0.tgz#28d6cfdaf34300376836310f5c31d57eeb40c8fa" - integrity sha512-jzQnSbdJqhIltU9O5KUiTtljP9ccw2u5ix59McQy4pV2xGhVLhRZIndY8GIrgh5HjXa6+QJ9AQhOd2QWQizJFQ== - dependencies: - ansi-color "^0.2.1" - error "^7.0.0" - hexer "^1.5.0" - xtend "^4.0.0" - -cliui@^8.0.1: - version "8.0.1" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa" - integrity sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ== - dependencies: - string-width "^4.2.0" - strip-ansi "^6.0.1" - wrap-ansi "^7.0.0" - -color-convert@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" - integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== - dependencies: - color-name "~1.1.4" - -color-name@~1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" - integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== - -debug@4, debug@^4.1.1: - 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" - -emoji-regex@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" - integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== - -error@7.0.2: - version "7.0.2" - resolved "https://registry.yarnpkg.com/error/-/error-7.0.2.tgz#a5f75fff4d9926126ddac0ea5dc38e689153cb02" - integrity sha512-UtVv4l5MhijsYUxPJo4390gzfZvAnTHreNnDjnTZaKIiZ/SemXxAhBkYSKtWa5RtBXbLP8tMgn/n0RUa/H7jXw== - dependencies: - string-template "~0.2.1" - xtend "~4.0.0" - -error@^7.0.0: - version "7.2.1" - resolved "https://registry.yarnpkg.com/error/-/error-7.2.1.tgz#eab21a4689b5f684fc83da84a0e390de82d94894" - integrity sha512-fo9HBvWnx3NGUKMvMwB/CBCMMrfEJgbDTVDEkPygA3Bdd3lM1OyCd+rbQ8BwnpF6GdVeOLDNmyL4N5Bg80ZvdA== - dependencies: - string-template "~0.2.1" - -escalade@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" - integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== - -extend@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" - integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== - -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== - -gaxios@^5.0.0: - version "5.1.3" - resolved "https://registry.yarnpkg.com/gaxios/-/gaxios-5.1.3.tgz#f7fa92da0fe197c846441e5ead2573d4979e9013" - integrity sha512-95hVgBRgEIRQQQHIbnxBXeHbW4TqFk4ZDJW7wmVtvYar72FdhRIo1UGOLS2eRAKCPEdPBWu+M7+A33D9CdX9rA== - dependencies: - extend "^3.0.2" - https-proxy-agent "^5.0.0" - is-stream "^2.0.0" - node-fetch "^2.6.9" - -gcp-metadata@^5.0.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/gcp-metadata/-/gcp-metadata-5.3.0.tgz#6f45eb473d0cb47d15001476b48b663744d25408" - integrity sha512-FNTkdNEnBdlqF2oatizolQqNANMrcqJt6AAYt99B3y1aLLC8Hc5IOBb+ZnnzllodEEf6xMBp6wRcBbc16fa65w== - dependencies: - gaxios "^5.0.0" - json-bigint "^1.0.0" - -generic-pool@*: - version "3.9.0" - resolved "https://registry.yarnpkg.com/generic-pool/-/generic-pool-3.9.0.tgz#36f4a678e963f4fdb8707eab050823abc4e8f5e4" - integrity sha512-hymDOu5B53XvN4QT9dBmZxPX4CWhBPPLguTZ9MMFeFa/Kg0xWVfylOVNlJji/E7yTZWFd/q9GO5TxDLq156D7g== - -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" - integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== - -has@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" - integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== - dependencies: - function-bind "^1.1.1" - -hexer@^1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/hexer/-/hexer-1.5.0.tgz#b86ce808598e8a9d1892c571f3cedd86fc9f0653" - integrity sha512-dyrPC8KzBzUJ19QTIo1gXNqIISRXQ0NwteW6OeQHRN4ZuZeHkdODfj0zHBdOlHbRY8GqbqK57C9oWSvQZizFsg== - dependencies: - ansi-color "^0.2.1" - minimist "^1.1.0" - process "^0.10.0" - xtend "^4.0.0" - -https-proxy-agent@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" - integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== - dependencies: - agent-base "6" - debug "4" - -import-in-the-middle@1.3.5: - version "1.3.5" - resolved "https://registry.yarnpkg.com/import-in-the-middle/-/import-in-the-middle-1.3.5.tgz#78384fbcfc7c08faf2b1f61cb94e7dd25651df9c" - integrity sha512-yzHlBqi1EBFrkieAnSt8eTgO5oLSl+YJ7qaOpUH/PMqQOMZoQ/RmDlwnTLQrwYto+gHYjRG+i/IbsB1eDx32NQ== - dependencies: - module-details-from-path "^1.0.3" - -is-core-module@^2.11.0: - version "2.12.1" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.12.1.tgz#0c0b6885b6f80011c71541ce15c8d66cf5a4f9fd" - integrity sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg== - dependencies: - has "^1.0.3" - -is-fullwidth-code-point@^3.0.0: - version "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-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== - -jaeger-client@^3.15.0: - version "3.19.0" - resolved "https://registry.yarnpkg.com/jaeger-client/-/jaeger-client-3.19.0.tgz#9b5bd818ebd24e818616ee0f5cffe1722a53ae6e" - integrity sha512-M0c7cKHmdyEUtjemnJyx/y9uX16XHocL46yQvyqDlPdvAcwPDbHrIbKjQdBqtiE4apQ/9dmr+ZLJYYPGnurgpw== - dependencies: - node-int64 "^0.4.0" - opentracing "^0.14.4" - thriftrw "^3.5.0" - uuid "^8.3.2" - xorshift "^1.1.1" - -joi@^17.3.0: - version "17.9.2" - resolved "https://registry.yarnpkg.com/joi/-/joi-17.9.2.tgz#8b2e4724188369f55451aebd1d0b1d9482470690" - integrity sha512-Itk/r+V4Dx0V3c7RLFdRh12IOjySm2/WGPMubBT92cQvRfYZhPM2W0hZlctjj72iES8jsRCwp7S/cRmWBnJ4nw== - dependencies: - "@hapi/hoek" "^9.0.0" - "@hapi/topo" "^5.0.0" - "@sideway/address" "^4.1.3" - "@sideway/formula" "^3.0.1" - "@sideway/pinpoint" "^2.0.0" - -json-bigint@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/json-bigint/-/json-bigint-1.0.0.tgz#ae547823ac0cad8398667f8cd9ef4730f5b01ff1" - integrity sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ== - dependencies: - bignumber.js "^9.0.0" - -lodash.camelcase@^4.3.0: - version "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.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== - -long@^2.4.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/long/-/long-2.4.0.tgz#9fa180bb1d9500cdc29c4156766a1995e1f4524f" - integrity sha512-ijUtjmO/n2A5PaosNG9ZGDsQ3vxJg7ZW8vsY8Kp0f2yIZWhSJvjmegV7t+9RPQKxKrvj8yKGehhS+po14hPLGQ== - -long@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/long/-/long-4.0.0.tgz#9a7b71cfb7d361a194ea555241c92f7468d5bf28" - integrity sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA== - -long@^5.0.0: - version "5.2.3" - resolved "https://registry.yarnpkg.com/long/-/long-5.2.3.tgz#a3ba97f3877cf1d778eccbcb048525ebb77499e1" - integrity sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q== - -lru-cache@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" - integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== - dependencies: - yallist "^4.0.0" - -minimist@^1.1.0: - version "1.2.8" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" - integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== - -module-details-from-path@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/module-details-from-path/-/module-details-from-path-1.0.3.tgz#114c949673e2a8a35e9d35788527aa37b679da2b" - integrity sha512-ySViT69/76t8VhE1xXHK6Ch4NcDd26gx0MzKXLO+F7NOtnqH68d9zF94nT8ZWSxXh8ELOERsnJO/sWt1xZYw5A== - -ms@2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" - integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== - -node-fetch@^2.6.9: - version "2.6.12" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.12.tgz#02eb8e22074018e3d5a83016649d04df0e348fba" - integrity sha512-C/fGU2E8ToujUivIO0H+tpQ6HWo4eEmchoPIoXtxCrVghxdKq+QOHqEZW7tuP3KlV3bC8FRMO5nMCC7Zm1VP6g== - dependencies: - whatwg-url "^5.0.0" - -node-int64@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" - integrity sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw== - -obuf@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/obuf/-/obuf-1.1.2.tgz#09bea3343d41859ebd446292d11c9d4db619084e" - integrity sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg== - -opentracing@^0.14.4: - version "0.14.7" - resolved "https://registry.yarnpkg.com/opentracing/-/opentracing-0.14.7.tgz#25d472bd0296dc0b64d7b94cbc995219031428f5" - integrity sha512-vz9iS7MJ5+Bp1URw8Khvdyw1H/hGvzHWlKQ7eRrQojSCDL1/SrWfrY9QebLw97n2deyRtzHRC3MkQfVNUCo91Q== - -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== - -pg-int8@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/pg-int8/-/pg-int8-1.0.1.tgz#943bd463bf5b71b4170115f80f8efc9a0c0eb78c" - integrity sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw== - -pg-numeric@1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/pg-numeric/-/pg-numeric-1.0.2.tgz#816d9a44026086ae8ae74839acd6a09b0636aa3a" - integrity sha512-BM/Thnrw5jm2kKLE5uJkXqqExRUY/toLHda65XgFTBTFYZyopbKjBe29Ii3RbkvlsMoFwD+tHeGaCjjv0gHlyw== - -pg-protocol@*: - version "1.6.0" - resolved "https://registry.yarnpkg.com/pg-protocol/-/pg-protocol-1.6.0.tgz#4c91613c0315349363af2084608db843502f8833" - integrity sha512-M+PDm637OY5WM307051+bsDia5Xej6d9IR4GwJse1qA1DIhiKlksvrneZOYQq42OM+spubpcNYEo2FcKQrDk+Q== - -pg-types@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/pg-types/-/pg-types-2.2.0.tgz#2d0250d636454f7cfa3b6ae0382fdfa8063254a3" - integrity sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA== - dependencies: - pg-int8 "1.0.1" - postgres-array "~2.0.0" - postgres-bytea "~1.0.0" - postgres-date "~1.0.4" - postgres-interval "^1.1.0" - -pg-types@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/pg-types/-/pg-types-4.0.1.tgz#31857e89d00a6c66b06a14e907c3deec03889542" - integrity sha512-hRCSDuLII9/LE3smys1hRHcu5QGcLs9ggT7I/TCs0IE+2Eesxi9+9RWAAwZ0yaGjxoWICF/YHLOEjydGujoJ+g== - dependencies: - pg-int8 "1.0.1" - pg-numeric "1.0.2" - postgres-array "~3.0.1" - postgres-bytea "~3.0.0" - postgres-date "~2.0.1" - postgres-interval "^3.0.0" - postgres-range "^1.1.1" - -postgres-array@~2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/postgres-array/-/postgres-array-2.0.0.tgz#48f8fce054fbc69671999329b8834b772652d82e" - integrity sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA== - -postgres-array@~3.0.1: - version "3.0.2" - resolved "https://registry.yarnpkg.com/postgres-array/-/postgres-array-3.0.2.tgz#68d6182cb0f7f152a7e60dc6a6889ed74b0a5f98" - integrity sha512-6faShkdFugNQCLwucjPcY5ARoW1SlbnrZjmGl0IrrqewpvxvhSLHimCVzqeuULCbG0fQv7Dtk1yDbG3xv7Veog== - -postgres-bytea@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/postgres-bytea/-/postgres-bytea-1.0.0.tgz#027b533c0aa890e26d172d47cf9ccecc521acd35" - integrity sha512-xy3pmLuQqRBZBXDULy7KbaitYqLcmxigw14Q5sj8QBVLqEwXfeybIKVWiqAXTlcvdvb0+xkOtDbfQMOf4lST1w== - -postgres-bytea@~3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/postgres-bytea/-/postgres-bytea-3.0.0.tgz#9048dc461ac7ba70a6a42d109221619ecd1cb089" - integrity sha512-CNd4jim9RFPkObHSjVHlVrxoVQXz7quwNFpz7RY1okNNme49+sVyiTvTRobiLV548Hx/hb1BG+iE7h9493WzFw== - dependencies: - obuf "~1.1.2" - -postgres-date@~1.0.4: - version "1.0.7" - resolved "https://registry.yarnpkg.com/postgres-date/-/postgres-date-1.0.7.tgz#51bc086006005e5061c591cee727f2531bf641a8" - integrity sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q== - -postgres-date@~2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/postgres-date/-/postgres-date-2.0.1.tgz#638b62e5c33764c292d37b08f5257ecb09231457" - integrity sha512-YtMKdsDt5Ojv1wQRvUhnyDJNSr2dGIC96mQVKz7xufp07nfuFONzdaowrMHjlAzY6GDLd4f+LUHHAAM1h4MdUw== - -postgres-interval@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/postgres-interval/-/postgres-interval-1.2.0.tgz#b460c82cb1587507788819a06aa0fffdb3544695" - integrity sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ== - dependencies: - xtend "^4.0.0" - -postgres-interval@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/postgres-interval/-/postgres-interval-3.0.0.tgz#baf7a8b3ebab19b7f38f07566c7aab0962f0c86a" - integrity sha512-BSNDnbyZCXSxgA+1f5UU2GmwhoI0aU5yMxRGO8CdFEcY2BQF9xm/7MqKnYoM1nJDk8nONNWDk9WeSmePFhQdlw== - -postgres-range@^1.1.1: - version "1.1.3" - resolved "https://registry.yarnpkg.com/postgres-range/-/postgres-range-1.1.3.tgz#9ccd7b01ca2789eb3c2e0888b3184225fa859f76" - integrity sha512-VdlZoocy5lCP0c/t66xAfclglEapXPCIVhqqJRncYpvbCgImF0w67aPKfbqUMr72tO2k5q0TdTZwCLjPTI6C9g== - -process@^0.10.0: - version "0.10.1" - resolved "https://registry.yarnpkg.com/process/-/process-0.10.1.tgz#842457cc51cfed72dc775afeeafb8c6034372725" - integrity sha512-dyIett8dgGIZ/TXKUzeYExt7WA6ldDzys9vTDU/cCA9L17Ypme+KzS+NjQCjpn9xsvi/shbMC+yP/BcFMBz0NA== - -protobufjs@^7.0.0, protobufjs@^7.1.2, protobufjs@^7.2.2: - version "7.2.4" - resolved "https://registry.yarnpkg.com/protobufjs/-/protobufjs-7.2.4.tgz#3fc1ec0cdc89dd91aef9ba6037ba07408485c3ae" - integrity sha512-AT+RJgD2sH8phPmCf7OUZR8xGdcJRga4+1cOaXJ64hvcSkVhNcRHOwIxUatPH15+nj59WAGTDv3LSGZPEQbJaQ== - dependencies: - "@protobufjs/aspromise" "^1.1.2" - "@protobufjs/base64" "^1.1.2" - "@protobufjs/codegen" "^2.0.4" - "@protobufjs/eventemitter" "^1.1.0" - "@protobufjs/fetch" "^1.1.0" - "@protobufjs/float" "^1.0.2" - "@protobufjs/inquire" "^1.1.0" - "@protobufjs/path" "^1.1.2" - "@protobufjs/pool" "^1.1.0" - "@protobufjs/utf8" "^1.1.0" - "@types/node" ">=13.7.0" - long "^5.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-in-the-middle@^7.1.0: - version "7.1.1" - resolved "https://registry.yarnpkg.com/require-in-the-middle/-/require-in-the-middle-7.1.1.tgz#2000741f7894322ebd4b82fc783880d5b5052d36" - integrity sha512-OScOjQjrrjhAdFpQmnkE/qbIBGCRFhQB/YaJhcC3CPOlmhe7llnW46Ac1J5+EjcNXOTnDdpF96Erw/yedsGksQ== - dependencies: - debug "^4.1.1" - module-details-from-path "^1.0.3" - resolve "^1.22.1" - -resolve@^1.22.1: - version "1.22.2" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.2.tgz#0ed0943d4e301867955766c9f3e1ae6d01c6845f" - integrity sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g== - dependencies: - is-core-module "^2.11.0" - path-parse "^1.0.7" - supports-preserve-symlinks-flag "^1.0.0" - -semver@^7.3.2, semver@^7.3.5: - 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== - dependencies: - lru-cache "^6.0.0" - -shimmer@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/shimmer/-/shimmer-1.2.1.tgz#610859f7de327b587efebf501fb43117f9aff337" - integrity sha512-sQTKC1Re/rM6XyFM6fIAGHRPVGvyXfgzIDvzoq608vM+jeyVD0Tu1E6Np0Kc2zAIFWIj963V2800iF/9LPieQw== - -string-template@~0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/string-template/-/string-template-0.2.1.tgz#42932e598a352d01fc22ec3367d9d84eec6c9add" - integrity sha512-Yptehjogou2xm4UJbxJ4CxgZx12HBfeystp0y3x7s4Dj32ltVVG1Gg8YhKjHZkHicuKpZX/ffilA8505VbUbpw== - -string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: - version "4.2.3" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" - integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.1" - -strip-ansi@^6.0.0, strip-ansi@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" - integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== - dependencies: - ansi-regex "^5.0.1" - -supports-preserve-symlinks-flag@^1.0.0: - version "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== - -thriftrw@^3.5.0: - version "3.11.4" - resolved "https://registry.yarnpkg.com/thriftrw/-/thriftrw-3.11.4.tgz#84c990ee89e926631c0b475909ada44ee9249870" - integrity sha512-UcuBd3eanB3T10nXWRRMwfwoaC6VMk7qe3/5YIWP2Jtw+EbHqJ0p1/K3x8ixiR5dozKSSfcg1W+0e33G1Di3XA== - dependencies: - bufrw "^1.2.1" - error "7.0.2" - long "^2.4.0" - -tr46@~0.0.3: - version "0.0.3" - resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" - integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== - -tslib@^2.3.1: - version "2.6.0" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.0.tgz#b295854684dbda164e181d259a22cd779dcd7bc3" - integrity sha512-7At1WUettjcSRHXCyYtTselblcHl9PJFFVKiCAy/bY97+BPZXSQ2wbq0P9s8tK2G7dFQfNnlJnPAiArVBVBsfA== - -typescript@^4.4.3: - version "4.9.5" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.5.tgz#095979f9bcc0d09da324d58d03ce8f8374cbe65a" - integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g== - -uuid@^8.3.2: - version "8.3.2" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" - integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== - -webidl-conversions@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" - integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== - -whatwg-url@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" - integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== - dependencies: - tr46 "~0.0.3" - webidl-conversions "^3.0.0" - -wrap-ansi@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" - integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== - dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - -xorshift@^1.1.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/xorshift/-/xorshift-1.2.0.tgz#30a4cdd8e9f8d09d959ed2a88c42a09c660e8148" - integrity sha512-iYgNnGyeeJ4t6U11NpA/QiKy+PXn5Aa3Azg5qkwIFz1tBLllQrjjsk9yzD7IAK0naNU4JxdeDgqW9ov4u/hc4g== - -xtend@^4.0.0, xtend@~4.0.0: - version "4.0.2" - resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" - integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== - -y18n@^5.0.5: - version "5.0.8" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" - integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== - -yallist@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" - integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== - -yargs-parser@^21.1.1: - version "21.1.1" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" - integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== - -yargs@^17.7.2: - version "17.7.2" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269" - integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w== - dependencies: - cliui "^8.0.1" - escalade "^3.1.1" - get-caller-file "^2.0.5" - require-directory "^2.1.1" - string-width "^4.2.3" - y18n "^5.0.5" - yargs-parser "^21.1.1" diff --git a/package.json b/package.json index 023dcbc0db..130c686fcd 100644 --- a/package.json +++ b/package.json @@ -27,7 +27,6 @@ "devops/eslint-config", "devops/prettier-config", "utils/api-scripts", - "utils/migration-scripts", "query-node", "query-node/mappings", "query-node/generated/graphql-server", @@ -36,16 +35,15 @@ "opentelemetry" ], "resolutions": { - "@polkadot/api": "8.9.1", - "@polkadot/keyring": "9.5.1", - "@polkadot/types": "8.9.1", - "@polkadot/util": "9.5.1", - "@polkadot/util-crypto": "9.5.1", - "@polkadot/networks": "9.5.1", - "@polkadot/x-fetch": "9.5.1", - "@polkadot/x-global": "9.5.1", - "@polkadot/x-ws": "9.5.1", - "typescript": "^4.4.3", + "@polkadot/api": "10.1.4", + "@polkadot/keyring": "^11.1.1", + "@polkadot/types": "10.1.4", + "@polkadot/util": "^11.1.1", + "@polkadot/util-crypto": "^11.1.1", + "@polkadot/networks": "^11.1.1", + "@polkadot/x-fetch": "^11.1.1", + "@polkadot/x-global": "^11.1.1", + "@polkadot/x-ws": "^11.1.1", "bn.js": "^5.2.1", "rxjs": "^7.4.0", "typeorm": "https://github.com/Joystream/typeorm/releases/download/0.3.5/typeorm-v0.3.5.tgz", @@ -53,7 +51,8 @@ "graphql-tools": "^4.0.8", "pg": "^8.4.0", "@types/bn.js": "^5.1.0", - "@substrate/txwrapper-core": "=3.1.3" + "typescript": "5.0.2", + "@substrate/txwrapper-core": "6.0.1" }, "devDependencies": { "eslint": "^7.25.0", diff --git a/query-node/CHANGELOG.md b/query-node/CHANGELOG.md index 710056e7e7..99e15118b7 100644 --- a/query-node/CHANGELOG.md +++ b/query-node/CHANGELOG.md @@ -1,3 +1,12 @@ +### 2.1.0 + +- Bump polkadot-js/api version bump, use newer hydra-typegen version +- Fixes in mappings, when checking runtime version to pick correct event type + +### 2.0.0 + +- Add support for Nara release - CRTs, freeze pallet proposal, new chain metadata spec + ### 1.9.0 - Add `isShort` field to `Video` entity. and updated mappings to process/set this filed diff --git a/query-node/build.sh b/query-node/build.sh index ac2b1f370d..897f799c83 100755 --- a/query-node/build.sh +++ b/query-node/build.sh @@ -27,6 +27,7 @@ yarn ln -s ../../../../../node_modules/typeorm/cli.js ./generated/graphql-server/node_modules/.bin/typeorm yarn workspace query-node codegen +cp graphql-server-tsconfig.json generated/graphql-server/tsconfig.json yarn workspace query-node build diff --git a/query-node/chain-metadata/2002.json b/query-node/chain-metadata/2002.json new file mode 100644 index 0000000000..111bac48c9 --- /dev/null +++ b/query-node/chain-metadata/2002.json @@ -0,0 +1 @@ +{"jsonrpc":"2.0","result":"0x6d6574610e090a000c1c73705f636f72651863727970746f2c4163636f756e7449643332000004000401205b75383b2033325d0000040000032000000008000800000503000c08306672616d655f73797374656d2c4163636f756e74496e666f0814496e64657801102c4163636f756e74446174610114001401146e6f6e6365100114496e646578000124636f6e73756d657273100120526566436f756e7400012470726f766964657273100120526566436f756e7400012c73756666696369656e7473100120526566436f756e740001106461746114012c4163636f756e7444617461000010000005050014083c70616c6c65745f62616c616e6365732c4163636f756e7444617461041c42616c616e63650118001001106672656518011c42616c616e6365000120726573657276656418011c42616c616e636500012c6d6973635f66726f7a656e18011c42616c616e63650001286665655f66726f7a656e18011c42616c616e636500001800000507001c0c346672616d655f737570706f7274206469737061746368405065724469737061746368436c6173730404540120000c01186e6f726d616c2001045400012c6f7065726174696f6e616c200104540001246d616e6461746f7279200104540000200c2873705f77656967687473247765696768745f76321857656967687400000801207265665f74696d6524010c75363400012870726f6f665f73697a6524010c75363400002400000628002800000506002c083c7072696d69746976655f74797065731048323536000004000401205b75383b2033325d000030000002080034102873705f72756e74696d651c67656e65726963186469676573741844696765737400000401106c6f677338013c5665633c4469676573744974656d3e0000380000023c003c102873705f72756e74696d651c67656e6572696318646967657374284469676573744974656d0001142850726552756e74696d650800400144436f6e73656e737573456e67696e654964000030011c5665633c75383e00060024436f6e73656e7375730800400144436f6e73656e737573456e67696e654964000030011c5665633c75383e000400105365616c0800400144436f6e73656e737573456e67696e654964000030011c5665633c75383e000500144f74686572040030011c5665633c75383e0000006452756e74696d65456e7669726f6e6d656e745570646174656400080000400000030400000008004400000248004808306672616d655f73797374656d2c4576656e745265636f7264080445014c0454012c000c01147068617365d503011450686173650001146576656e744c010445000118746f70696373d90301185665633c543e00004c08586a6f7973747265616d5f6e6f64655f72756e74696d653052756e74696d654576656e7400018c1853797374656d04005001706672616d655f73797374656d3a3a4576656e743c52756e74696d653e0000001c5574696c69747904007401607375627374726174655f7574696c6974793a3a4576656e740001002042616c616e636573040080017c70616c6c65745f62616c616e6365733a3a4576656e743c52756e74696d653e000500485472616e73616374696f6e5061796d656e7404008801a870616c6c65745f7472616e73616374696f6e5f7061796d656e743a3a4576656e743c52756e74696d653e00060068456c656374696f6e50726f76696465724d756c7469506861736504008c01d070616c6c65745f656c656374696f6e5f70726f76696465725f6d756c74695f70686173653a3a4576656e743c52756e74696d653e0007001c5374616b696e670400a8017870616c6c65745f7374616b696e673a3a4576656e743c52756e74696d653e0008001c53657373696f6e0400bc015470616c6c65745f73657373696f6e3a3a4576656e740009001c4772616e6470610400c0015470616c6c65745f6772616e6470613a3a4576656e74000b0020496d4f6e6c696e650400d4018070616c6c65745f696d5f6f6e6c696e653a3a4576656e743c52756e74696d653e000d00204f6666656e6365730400f8015870616c6c65745f6f6666656e6365733a3a4576656e74000e0024566f7465724c6973740400010101f470616c6c65745f626167735f6c6973743a3a4576656e743c52756e74696d652c2070616c6c65745f626167735f6c6973743a3a496e7374616e6365313e0010001c56657374696e6704000501017870616c6c65745f76657374696e673a3a4576656e743c52756e74696d653e001100204d756c746973696704000901017c70616c6c65745f6d756c74697369673a3a4576656e743c52756e74696d653e0012001c436f756e63696c04001101015c636f756e63696c3a3a4576656e743c52756e74696d653e001300285265666572656e64756d0400190101c47265666572656e64756d3a3a4576656e743c52756e74696d652c207265666572656e64756d3a3a496e7374616e6365313e0014001c4d656d626572730400290101686d656d626572736869703a3a4576656e743c52756e74696d653e00150014466f72756d040051010154666f72756d3a3a4576656e743c52756e74696d653e00160030436f6e737469747574696f6e04006d01018c70616c6c65745f636f6e737469747574696f6e3a3a4576656e743c52756e74696d653e00170018426f756e7479040071010158626f756e74793a3a4576656e743c52756e74696d653e001800404a6f7973747265616d5574696c6974790400950101846a6f7973747265616d5f7574696c6974793a3a4576656e743c52756e74696d653e0019001c436f6e74656e740400a101015c636f6e74656e743a3a4576656e743c52756e74696d653e001a001c53746f7261676504008d02015c73746f726167653a3a4576656e743c52756e74696d653e001b003050726f6a656374546f6b656e0400c102017470726f6a6563745f746f6b656e3a3a4576656e743c52756e74696d653e001c003c50726f706f73616c73456e67696e6504002903018070726f706f73616c735f656e67696e653a3a4576656e743c52756e74696d653e001d004c50726f706f73616c7344697363757373696f6e04004103019070726f706f73616c735f64697363757373696f6e3a3a4576656e743c52756e74696d653e001e003850726f706f73616c73436f64657804004903017c70726f706f73616c735f636f6465783a3a4576656e743c52756e74696d653e001f0044466f72756d576f726b696e6747726f75700400710301dc776f726b696e675f67726f75703a3a4576656e743c52756e74696d652c20776f726b696e675f67726f75703a3a496e7374616e6365313e0020004c53746f72616765576f726b696e6747726f75700400950301dc776f726b696e675f67726f75703a3a4576656e743c52756e74696d652c20776f726b696e675f67726f75703a3a496e7374616e6365323e0021004c436f6e74656e74576f726b696e6747726f757004009d0301dc776f726b696e675f67726f75703a3a4576656e743c52756e74696d652c20776f726b696e675f67726f75703a3a496e7374616e6365333e0022006c4f7065726174696f6e73576f726b696e6747726f7570416c7068610400a50301dc776f726b696e675f67726f75703a3a4576656e743c52756e74696d652c20776f726b696e675f67726f75703a3a496e7374616e6365343e0023003c417070576f726b696e6747726f75700400ad0301dc776f726b696e675f67726f75703a3a4576656e743c52756e74696d652c20776f726b696e675f67726f75703a3a496e7374616e6365353e002400584d656d62657273686970576f726b696e6747726f75700400b50301dc776f726b696e675f67726f75703a3a4576656e743c52756e74696d652c20776f726b696e675f67726f75703a3a496e7374616e6365363e002500684f7065726174696f6e73576f726b696e6747726f7570426574610400bd0301dc776f726b696e675f67726f75703a3a4576656e743c52756e74696d652c20776f726b696e675f67726f75703a3a496e7374616e6365373e0026006c4f7065726174696f6e73576f726b696e6747726f757047616d6d610400c50301dc776f726b696e675f67726f75703a3a4576656e743c52756e74696d652c20776f726b696e675f67726f75703a3a496e7374616e6365383e00270060446973747269627574696f6e576f726b696e6747726f75700400cd0301dc776f726b696e675f67726f75703a3a4576656e743c52756e74696d652c20776f726b696e675f67726f75703a3a496e7374616e6365393e00280000500c306672616d655f73797374656d1870616c6c6574144576656e740404540001184045787472696e7369635375636365737304013464697370617463685f696e666f5401304469737061746368496e666f00000490416e2065787472696e73696320636f6d706c65746564207375636365737366756c6c792e3c45787472696e7369634661696c656408013864697370617463685f6572726f7260013444697370617463684572726f7200013464697370617463685f696e666f5401304469737061746368496e666f00010450416e2065787472696e736963206661696c65642e2c436f64655570646174656400020450603a636f6465602077617320757064617465642e284e65774163636f756e7404011c6163636f756e74000130543a3a4163636f756e7449640003046841206e6577206163636f756e742077617320637265617465642e344b696c6c65644163636f756e7404011c6163636f756e74000130543a3a4163636f756e74496400040458416e206163636f756e7420776173207265617065642e2052656d61726b656408011873656e646572000130543a3a4163636f756e744964000110686173682c011c543a3a48617368000504704f6e206f6e2d636861696e2072656d61726b2068617070656e65642e04704576656e7420666f72207468652053797374656d2070616c6c65742e540c346672616d655f737570706f7274206469737061746368304469737061746368496e666f00000c0118776569676874200118576569676874000114636c6173735801344469737061746368436c617373000120706179735f6665655c0110506179730000580c346672616d655f737570706f7274206469737061746368344469737061746368436c61737300010c184e6f726d616c0000002c4f7065726174696f6e616c000100244d616e6461746f7279000200005c0c346672616d655f737570706f727420646973706174636810506179730001080c596573000000084e6f0001000060082873705f72756e74696d653444697370617463684572726f72000134144f746865720000003043616e6e6f744c6f6f6b7570000100244261644f726967696e000200184d6f64756c65040064012c4d6f64756c654572726f7200030044436f6e73756d657252656d61696e696e670004002c4e6f50726f76696465727300050040546f6f4d616e79436f6e73756d65727300060014546f6b656e0400680128546f6b656e4572726f720007002841726974686d6574696304006c013c41726974686d657469634572726f72000800345472616e73616374696f6e616c04007001485472616e73616374696f6e616c4572726f7200090024457868617573746564000a0028436f7272757074696f6e000b002c556e617661696c61626c65000c000064082873705f72756e74696d652c4d6f64756c654572726f720000080114696e64657808010875380001146572726f7240018c5b75383b204d41585f4d4f44554c455f4552524f525f454e434f4445445f53495a455d000068082873705f72756e74696d6528546f6b656e4572726f7200011c1c4e6f46756e647300000020576f756c644469650001003042656c6f774d696e696d756d0002003043616e6e6f7443726561746500030030556e6b6e6f776e41737365740004001846726f7a656e0005002c556e737570706f72746564000600006c083473705f61726974686d657469633c41726974686d657469634572726f7200010c24556e646572666c6f77000000204f766572666c6f77000100384469766973696f6e42795a65726f0002000070082873705f72756e74696d65485472616e73616374696f6e616c4572726f72000108304c696d6974526561636865640000001c4e6f4c6179657200010000740c3870616c6c65745f7574696c6974791870616c6c6574144576656e74000118404261746368496e746572727570746564080114696e64657810010c7533320001146572726f7260013444697370617463684572726f7200000855014261746368206f66206469737061746368657320646964206e6f7420636f6d706c6574652066756c6c792e20496e646578206f66206669727374206661696c696e6720646973706174636820676976656e2c2061734877656c6c20617320746865206572726f722e384261746368436f6d706c65746564000104c84261746368206f66206469737061746368657320636f6d706c657465642066756c6c792077697468206e6f206572726f722e604261746368436f6d706c65746564576974684572726f7273000204b44261746368206f66206469737061746368657320636f6d706c657465642062757420686173206572726f72732e344974656d436f6d706c657465640003041d01412073696e676c65206974656d2077697468696e2061204261746368206f6620646973706174636865732068617320636f6d706c657465642077697468206e6f206572726f722e284974656d4661696c65640401146572726f7260013444697370617463684572726f720004041101412073696e676c65206974656d2077697468696e2061204261746368206f6620646973706174636865732068617320636f6d706c657465642077697468206572726f722e30446973706174636865644173040118726573756c747801384469737061746368526573756c7400050458412063616c6c2077617320646973706174636865642e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909780418526573756c74080454017c044501600108084f6b04007c000000000c45727204006000000100007c0000040000800c3c70616c6c65745f62616c616e6365731870616c6c6574144576656e740804540004490001281c456e646f77656408011c6163636f756e74000130543a3a4163636f756e744964000130667265655f62616c616e6365180128543a3a42616c616e6365000004b8416e206163636f756e74207761732063726561746564207769746820736f6d6520667265652062616c616e63652e20447573744c6f737408011c6163636f756e74000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e63650001083d01416e206163636f756e74207761732072656d6f7665642077686f73652062616c616e636520776173206e6f6e2d7a65726f206275742062656c6f77204578697374656e7469616c4465706f7369742c78726573756c74696e6720696e20616e206f75747269676874206c6f73732e205472616e736665720c011066726f6d000130543a3a4163636f756e744964000108746f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e63650002044c5472616e73666572207375636365656465642e2842616c616e63655365740c010c77686f000130543a3a4163636f756e74496400011066726565180128543a3a42616c616e63650001207265736572766564180128543a3a42616c616e636500030468412062616c616e6365207761732073657420627920726f6f742e20526573657276656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000404e0536f6d652062616c616e63652077617320726573657276656420286d6f7665642066726f6d206672656520746f207265736572766564292e28556e726573657276656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000504e8536f6d652062616c616e63652077617320756e726573657276656420286d6f7665642066726f6d20726573657276656420746f2066726565292e4852657365727665526570617472696174656410011066726f6d000130543a3a4163636f756e744964000108746f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e636500014864657374696e6174696f6e5f7374617475738401185374617475730006084d01536f6d652062616c616e636520776173206d6f7665642066726f6d207468652072657365727665206f6620746865206669727374206163636f756e7420746f20746865207365636f6e64206163636f756e742ed846696e616c20617267756d656e7420696e64696361746573207468652064657374696e6174696f6e2062616c616e636520747970652e1c4465706f73697408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000704d8536f6d6520616d6f756e7420776173206465706f73697465642028652e672e20666f72207472616e73616374696f6e2066656573292e20576974686472617708010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e63650008041d01536f6d6520616d6f756e74207761732077697468647261776e2066726f6d20746865206163636f756e742028652e672e20666f72207472616e73616374696f6e2066656573292e1c536c617368656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e63650009040101536f6d6520616d6f756e74207761732072656d6f7665642066726f6d20746865206163636f756e742028652e672e20666f72206d69736265686176696f72292e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a0909098414346672616d655f737570706f72741874726169747318746f6b656e73106d6973633442616c616e6365537461747573000108104672656500000020526573657276656400010000880c6870616c6c65745f7472616e73616374696f6e5f7061796d656e741870616c6c6574144576656e74040454000104485472616e73616374696f6e466565506169640c010c77686f000130543a3a4163636f756e74496400012861637475616c5f66656518013042616c616e63654f663c543e00010c74697018013042616c616e63654f663c543e000008590141207472616e73616374696f6e20666565206061637475616c5f666565602c206f662077686963682060746970602077617320616464656420746f20746865206d696e696d756d20696e636c7573696f6e206665652c5c686173206265656e2070616964206279206077686f602e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a0909098c0c9070616c6c65745f656c656374696f6e5f70726f76696465725f6d756c74695f70686173651870616c6c6574144576656e7404045400011838536f6c7574696f6e53746f7265640c011c636f6d7075746590013c456c656374696f6e436f6d707574650001186f726967696e9401504f7074696f6e3c543a3a4163636f756e7449643e000130707265765f656a6563746564980110626f6f6c00001cb44120736f6c7574696f6e207761732073746f72656420776974682074686520676976656e20636f6d707574652e00510154686520606f726967696e6020696e6469636174657320746865206f726967696e206f662074686520736f6c7574696f6e2e20496620606f726967696e602069732060536f6d65284163636f756e74496429602c55017468652073746f72656420736f6c7574696f6e20776173207375626d6974656420696e20746865207369676e65642070686173652062792061206d696e657220776974682074686520604163636f756e744964602e25014f74686572776973652c2074686520736f6c7574696f6e207761732073746f7265642065697468657220647572696e672074686520756e7369676e6564207068617365206f722062794d0160543a3a466f7263654f726967696e602e205468652060626f6f6c6020697320607472756560207768656e20612070726576696f757320736f6c7574696f6e2077617320656a656374656420746f206d616b6548726f6f6d20666f722074686973206f6e652e44456c656374696f6e46696e616c697a656408011c636f6d7075746590013c456c656374696f6e436f6d7075746500011473636f72659c0134456c656374696f6e53636f7265000104190154686520656c656374696f6e20686173206265656e2066696e616c697a65642c20776974682074686520676976656e20636f6d7075746174696f6e20616e642073636f72652e38456c656374696f6e4661696c656400020c4c416e20656c656374696f6e206661696c65642e0001014e6f74206d7563682063616e20626520736169642061626f757420776869636820636f6d7075746573206661696c656420696e207468652070726f636573732e20526577617264656408011c6163636f756e740001983c54206173206672616d655f73797374656d3a3a436f6e6669673e3a3a4163636f756e74496400011476616c756518013042616c616e63654f663c543e0003042501416e206163636f756e7420686173206265656e20726577617264656420666f72207468656972207369676e6564207375626d697373696f6e206265696e672066696e616c697a65642e1c536c617368656408011c6163636f756e740001983c54206173206672616d655f73797374656d3a3a436f6e6669673e3a3a4163636f756e74496400011476616c756518013042616c616e63654f663c543e0004042101416e206163636f756e7420686173206265656e20736c617368656420666f72207375626d697474696e6720616e20696e76616c6964207369676e6564207375626d697373696f6e2e4450686173655472616e736974696f6e65640c011066726f6da0015450686173653c543a3a426c6f636b4e756d6265723e000108746fa0015450686173653c543a3a426c6f636b4e756d6265723e000114726f756e6410010c753332000504b85468657265207761732061207068617365207472616e736974696f6e20696e206120676976656e20726f756e642e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a09090990089070616c6c65745f656c656374696f6e5f70726f76696465725f6d756c74695f70686173653c456c656374696f6e436f6d707574650001141c4f6e436861696e000000185369676e656400010020556e7369676e65640002002046616c6c6261636b00030024456d657267656e6379000400009404184f7074696f6e04045401000108104e6f6e6500000010536f6d6504000000000100009800000500009c084473705f6e706f735f656c656374696f6e7334456c656374696f6e53636f726500000c01346d696e696d616c5f7374616b6518013c457874656e64656442616c616e636500012473756d5f7374616b6518013c457874656e64656442616c616e636500014473756d5f7374616b655f7371756172656418013c457874656e64656442616c616e63650000a0089070616c6c65745f656c656374696f6e5f70726f76696465725f6d756c74695f70686173651450686173650408426e011001100c4f6666000000185369676e656400010020556e7369676e65640400a4012828626f6f6c2c20426e2900020024456d657267656e637900030000a400000408981000a8103870616c6c65745f7374616b696e671870616c6c65741870616c6c6574144576656e7404045400013c1c457261506169640c01246572615f696e646578100120457261496e64657800014076616c696461746f725f7061796f757418013042616c616e63654f663c543e00012472656d61696e64657218013042616c616e63654f663c543e000008550154686520657261207061796f757420686173206265656e207365743b207468652066697273742062616c616e6365206973207468652076616c696461746f722d7061796f75743b20746865207365636f6e64206973c07468652072656d61696e6465722066726f6d20746865206d6178696d756d20616d6f756e74206f66207265776172642e2052657761726465640801147374617368000130543a3a4163636f756e744964000118616d6f756e7418013042616c616e63654f663c543e000104bc546865206e6f6d696e61746f7220686173206265656e207265776172646564206279207468697320616d6f756e742e1c536c61736865640801187374616b6572000130543a3a4163636f756e744964000118616d6f756e7418013042616c616e63654f663c543e0002041d0141207374616b6572202876616c696461746f72206f72206e6f6d696e61746f722920686173206265656e20736c61736865642062792074686520676976656e20616d6f756e742e34536c6173685265706f727465640c012476616c696461746f72000130543a3a4163636f756e7449640001206672616374696f6eac011c50657262696c6c000124736c6173685f657261100120457261496e64657800030859014120736c61736820666f722074686520676976656e2076616c696461746f722c20666f722074686520676976656e2070657263656e74616765206f66207468656972207374616b652c2061742074686520676976656e54657261206173206265656e207265706f727465642e684f6c64536c617368696e675265706f727444697363617264656404013473657373696f6e5f696e64657810013053657373696f6e496e6465780004081901416e206f6c6420736c617368696e67207265706f72742066726f6d2061207072696f72206572612077617320646973636172646564206265636175736520697420636f756c64446e6f742062652070726f6365737365642e385374616b657273456c65637465640005048441206e657720736574206f66207374616b6572732077617320656c65637465642e18426f6e6465640801147374617368000130543a3a4163636f756e744964000118616d6f756e7418013042616c616e63654f663c543e000610d0416e206163636f756e742068617320626f6e646564207468697320616d6f756e742e205c5b73746173682c20616d6f756e745c5d004d014e4f54453a2054686973206576656e74206973206f6e6c7920656d6974746564207768656e2066756e64732061726520626f6e64656420766961206120646973706174636861626c652e204e6f7461626c792c210169742077696c6c206e6f7420626520656d697474656420666f72207374616b696e672072657761726473207768656e20746865792061726520616464656420746f207374616b652e20556e626f6e6465640801147374617368000130543a3a4163636f756e744964000118616d6f756e7418013042616c616e63654f663c543e00070490416e206163636f756e742068617320756e626f6e646564207468697320616d6f756e742e2457697468647261776e0801147374617368000130543a3a4163636f756e744964000118616d6f756e7418013042616c616e63654f663c543e0008085901416e206163636f756e74206861732063616c6c6564206077697468647261775f756e626f6e6465646020616e642072656d6f76656420756e626f6e64696e67206368756e6b7320776f727468206042616c616e6365606466726f6d2074686520756e6c6f636b696e672071756575652e184b69636b65640801246e6f6d696e61746f72000130543a3a4163636f756e7449640001147374617368000130543a3a4163636f756e744964000904b441206e6f6d696e61746f7220686173206265656e206b69636b65642066726f6d20612076616c696461746f722e545374616b696e67456c656374696f6e4661696c6564000a04ac54686520656c656374696f6e206661696c65642e204e6f206e65772065726120697320706c616e6e65642e1c4368696c6c65640401147374617368000130543a3a4163636f756e744964000b042101416e206163636f756e74206861732073746f707065642070617274696369706174696e672061732065697468657220612076616c696461746f72206f72206e6f6d696e61746f722e345061796f7574537461727465640801246572615f696e646578100120457261496e64657800013c76616c696461746f725f7374617368000130543a3a4163636f756e744964000c0498546865207374616b657273272072657761726473206172652067657474696e6720706169642e4456616c696461746f7250726566735365740801147374617368000130543a3a4163636f756e7449640001147072656673b0013856616c696461746f725072656673000d0498412076616c696461746f72206861732073657420746865697220707265666572656e6365732e20466f7263654572610401106d6f6465b8011c466f7263696e67000e047441206e657720666f72636520657261206d6f646520776173207365742e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909ac0c3473705f61726974686d65746963287065725f7468696e67731c50657262696c6c0000040010010c7533320000b0083870616c6c65745f7374616b696e673856616c696461746f7250726566730000080128636f6d6d697373696f6eb4011c50657262696c6c00011c626c6f636b6564980110626f6f6c0000b4000006ac00b8083870616c6c65745f7374616b696e671c466f7263696e67000110284e6f74466f7263696e6700000020466f7263654e657700010024466f7263654e6f6e650002002c466f726365416c7761797300030000bc0c3870616c6c65745f73657373696f6e1870616c6c6574144576656e74000104284e657753657373696f6e04013473657373696f6e5f696e64657810013053657373696f6e496e64657800000839014e65772073657373696f6e206861732068617070656e65642e204e6f746520746861742074686520617267756d656e74206973207468652073657373696f6e20696e6465782c206e6f74207468659c626c6f636b206e756d626572206173207468652074797065206d6967687420737567676573742e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909c00c3870616c6c65745f6772616e6470611870616c6c6574144576656e7400010c384e6577417574686f726974696573040134617574686f726974795f736574c40134417574686f726974794c6973740000048c4e657720617574686f726974792073657420686173206265656e206170706c6965642e185061757365640001049843757272656e7420617574686f726974792073657420686173206265656e207061757365642e1c526573756d65640002049c43757272656e7420617574686f726974792073657420686173206265656e20726573756d65642e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909c4000002c800c800000408cc2800cc0c5073705f636f6e73656e7375735f6772616e6470610c617070185075626c696300000400d0013c656432353531393a3a5075626c69630000d00c1c73705f636f72651c65643235353139185075626c6963000004000401205b75383b2033325d0000d40c4070616c6c65745f696d5f6f6e6c696e651870616c6c6574144576656e7404045400010c444865617274626561745265636569766564040130617574686f726974795f6964d80138543a3a417574686f726974794964000004c041206e657720686561727462656174207761732072656365697665642066726f6d2060417574686f726974794964602e1c416c6c476f6f64000104d041742074686520656e64206f66207468652073657373696f6e2c206e6f206f6666656e63652077617320636f6d6d69747465642e2c536f6d654f66666c696e6504011c6f66666c696e65e0016c5665633c4964656e74696669636174696f6e5475706c653c543e3e000204290141742074686520656e64206f66207468652073657373696f6e2c206174206c65617374206f6e652076616c696461746f722077617320666f756e6420746f206265206f66666c696e652e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909d8104070616c6c65745f696d5f6f6e6c696e651c737232353531392c6170705f73723235353139185075626c696300000400dc013c737232353531393a3a5075626c69630000dc0c1c73705f636f72651c73723235353139185075626c6963000004000401205b75383b2033325d0000e0000002e400e40000040800e800e8083870616c6c65745f7374616b696e67204578706f7375726508244163636f756e74496401001c42616c616e63650118000c0114746f74616cec011c42616c616e636500010c6f776eec011c42616c616e63650001186f7468657273f001ac5665633c496e646976696475616c4578706f737572653c4163636f756e7449642c2042616c616e63653e3e0000ec0000061800f0000002f400f4083870616c6c65745f7374616b696e6748496e646976696475616c4578706f7375726508244163636f756e74496401001c42616c616e636501180008010c77686f0001244163636f756e74496400011476616c7565ec011c42616c616e63650000f80c3c70616c6c65745f6f6666656e6365731870616c6c6574144576656e740001041c4f6666656e63650801106b696e64fc01104b696e6400012074696d65736c6f743001384f706171756554696d65536c6f7400000c5101546865726520697320616e206f6666656e6365207265706f72746564206f662074686520676976656e20606b696e64602068617070656e656420617420746865206073657373696f6e5f696e6465786020616e643501286b696e642d7370656369666963292074696d6520736c6f742e2054686973206576656e74206973206e6f74206465706f736974656420666f72206475706c696361746520736c61736865732e4c5c5b6b696e642c2074696d65736c6f745c5d2e04304576656e747320747970652efc00000310000000080001010c4070616c6c65745f626167735f6c6973741870616c6c6574144576656e740804540004490001082052656261676765640c010c77686f000130543a3a4163636f756e74496400011066726f6d280120543a3a53636f7265000108746f280120543a3a53636f7265000004a44d6f76656420616e206163636f756e742066726f6d206f6e652062616720746f20616e6f746865722e3053636f72655570646174656408010c77686f000130543a3a4163636f756e7449640001246e65775f73636f7265280120543a3a53636f7265000104d855706461746564207468652073636f7265206f6620736f6d65206163636f756e7420746f2074686520676976656e20616d6f756e742e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a09090905010c3870616c6c65745f76657374696e671870616c6c6574144576656e740404540001083856657374696e675570646174656408011c6163636f756e74000130543a3a4163636f756e744964000120756e76657374656418013042616c616e63654f663c543e000008510154686520616d6f756e742076657374656420686173206265656e20757064617465642e205468697320636f756c6420696e6469636174652061206368616e676520696e2066756e647320617661696c61626c652e25015468652062616c616e636520676976656e2069732074686520616d6f756e74207768696368206973206c65667420756e7665737465642028616e642074687573206c6f636b6564292e4056657374696e67436f6d706c6574656404011c6163636f756e74000130543a3a4163636f756e7449640001049c416e205c5b6163636f756e745c5d20686173206265636f6d652066756c6c79207665737465642e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a09090909010c3c70616c6c65745f6d756c74697369671870616c6c6574144576656e740404540001102c4e65774d756c74697369670c0124617070726f76696e67000130543a3a4163636f756e7449640001206d756c7469736967000130543a3a4163636f756e74496400012463616c6c5f6861736804012043616c6c486173680000048c41206e6577206d756c7469736967206f7065726174696f6e2068617320626567756e2e404d756c7469736967417070726f76616c100124617070726f76696e67000130543a3a4163636f756e74496400012474696d65706f696e740d01016454696d65706f696e743c543a3a426c6f636b4e756d6265723e0001206d756c7469736967000130543a3a4163636f756e74496400012463616c6c5f6861736804012043616c6c48617368000104c841206d756c7469736967206f7065726174696f6e20686173206265656e20617070726f76656420627920736f6d656f6e652e404d756c74697369674578656375746564140124617070726f76696e67000130543a3a4163636f756e74496400012474696d65706f696e740d01016454696d65706f696e743c543a3a426c6f636b4e756d6265723e0001206d756c7469736967000130543a3a4163636f756e74496400012463616c6c5f6861736804012043616c6c48617368000118726573756c747801384469737061746368526573756c740002049c41206d756c7469736967206f7065726174696f6e20686173206265656e2065786563757465642e444d756c746973696743616e63656c6c656410012863616e63656c6c696e67000130543a3a4163636f756e74496400012474696d65706f696e740d01016454696d65706f696e743c543a3a426c6f636b4e756d6265723e0001206d756c7469736967000130543a3a4163636f756e74496400012463616c6c5f6861736804012043616c6c48617368000304a041206d756c7469736967206f7065726174696f6e20686173206265656e2063616e63656c6c65642e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a0909090d01083c70616c6c65745f6d756c74697369672454696d65706f696e74042c426c6f636b4e756d62657201100008011868656967687410012c426c6f636b4e756d626572000114696e64657810010c75333200001101083870616c6c65745f636f756e63696c205261774576656e74101c42616c616e636501182c426c6f636b4e756d6265720110204d656d62657249640128244163636f756e7449640100014c5c416e6e6f756e63696e67506572696f6453746172746564040010012c426c6f636b4e756d6265720000045c4e657720636f756e63696c2077617320656c65637465644c4e6f74456e6f75676843616e64696461746573040010012c426c6f636b4e756d6265720001041d01416e6e6f756e63696e6720706572696f642063616e27742066696e6973682062656361757365206f6620696e73756666696369656e742063616e6469647461746520636f756e744c566f74696e67506572696f6453746172746564040010010c753332000204a843616e646964617465732061726520616e6e6f756e63656420616e6420766f74696e6720737461727473304e657743616e64696461746510002801204d656d626572496400000001244163636f756e74496400000001244163636f756e744964000018011c42616c616e63650003045c4e65772063616e64696461746520616e6e6f756e636564444e6577436f756e63696c456c65637465640800150101345665633c4d656d62657249643e000010012c426c6f636b4e756d626572000404944e657720636f756e63696c2077617320656c656374656420616e64206170706f696e746564504e6577436f756e63696c4e6f74456c6563746564040010012c426c6f636b4e756d6265720005046c4e657720636f756e63696c20776173206e6f7420656c65637465645443616e6469646163795374616b6552656c6561736504002801204d656d6265724964000604d843616e646964616379207374616b65207468617420776173206e6f206c6f6e676572206e6565646564207761732072656c65617365644443616e646964616379576974686472617704002801204d656d62657249640007049443616e646964617465206861732077697468647261776e206869732063616e6469646163794043616e6469646163794e6f746553657408002801204d656d6265724964000030011c5665633c75383e000804d05468652063616e64696461746520686173207365742061206e6577206e6f746520666f722074686569722063616e646964616379345265776172645061796d656e7410002801204d656d626572496400000001244163636f756e744964000018011c42616c616e6365000018011c42616c616e6365000904c05468652077686f6c652072657761726420776173207061696420746f2074686520636f756e63696c206d656d6265722e4042756467657442616c616e6365536574040018011c42616c616e6365000a049c4275646765742062616c616e636520776173206368616e6765642062792074686520726f6f742e30427564676574526566696c6c040018011c42616c616e6365000b04c44275646765742062616c616e63652077617320696e63726561736564206279206175746f6d6174696320726566696c6c2e4c427564676574526566696c6c506c616e6e6564040010012c426c6f636b4e756d626572000c048c546865206e6578742062756467657420726566696c6c2077617320706c616e6e65642e58427564676574496e6372656d656e7455706461746564040018011c42616c616e6365000d048842756467657420696e6372656d656e7420686173206265656e20757064617465642e58436f756e63696c6f7252657761726455706461746564040018011c42616c616e6365000e0488436f756e63696c6f722072657761726420686173206265656e20757064617465642e345265717565737446756e64656408000001244163636f756e744964000018011c42616c616e6365000f045c5265717565737420686173206265656e2066756e6465644c436f756e63696c42756467657446756e6465640c002801204d656d6265724964000018011c42616c616e6365000030011c5665633c75383e0010146046756e642074686520636f756e63696c206275646765742e1c506172616d733a2c2d204d656d6265722049444c2d20416d6f756e74206f662062616c616e63652c2d20526174696f6e616c6544436f756e63696c6f7252656d61726b656408002801204d656d6265724964000030011c5665633c75383e00110460436f756e63696c6f722072656d61726b206d6573736167654443616e64696461746552656d61726b656408002801204d656d6265724964000030011c5665633c75383e0012046043616e6469646174652072656d61726b206d657373616765085c4576656e747320666f722074686973206d6f64756c652e00150100000228001901084470616c6c65745f7265666572656e64756d205261774576656e741c2c426c6f636b4e756d62657201101c42616c616e636501181048617368012c244163636f756e744964010024566f7465506f7765720118204d656d626572496401280449011d010120445265666572656e64756d53746172746564080010010c753332000010012c426c6f636b4e756d626572000004485265666572656e64756d20737461727465646c5265666572656e64756d53746172746564466f72636566756c6c79080010010c753332000010012c426c6f636b4e756d626572000104485265666572656e64756d20737461727465645452657665616c696e67537461676553746172746564040010012c426c6f636b4e756d6265720002046452657665616c696e672070686173652068617320626567756e485265666572656e64756d46696e69736865640400210101985665633c4f7074696f6e526573756c743c4d656d62657249642c20566f7465506f7765723e3e000304c05265666572656e64756d20656e64656420616e642077696e6e696e67206f7074696f6e207761732073656c656374656420566f7465436173740c000001244163636f756e74496400002c011048617368000018011c42616c616e636500040478557365722063617374206120766f746520696e207265666572656e64756d30566f746552657665616c65640c000001244163636f756e74496400002801204d656d6265724964000030011c5665633c75383e00050458557365722072657665616c65642068697320766f7465345374616b6552656c656173656404000001244163636f756e7449640006045c557365722072656c656173656420686973207374616b655c4163636f756e744f707465644f75744f66566f74696e6704000001244163636f756e744964000704d84163636f756e74207065726d616e656e746c79206f70746564206f7574206f6620766f74696e6720696e207265666572656e64756d2e085c4576656e747320666f722074686973206d6f64756c652e001d01084470616c6c65745f7265666572656e64756d24496e7374616e6365310000000021010000022501002501084470616c6c65745f7265666572656e64756d304f7074696f6e526573756c7408204d656d6265724964012824566f7465506f7765720118000801246f7074696f6e5f69642801204d656d6265724964000128766f74655f706f776572180124566f7465506f77657200002901084470616c6c65745f6d656d62657273686970205261774576656e7420204d656d626572496401281c42616c616e63650118244163636f756e74496401005c4275794d656d62657273686970506172616d6574657273012d011c4163746f724964012868496e766974654d656d62657273686970506172616d6574657273013901584372656174654d656d626572506172616d6574657273013d0160476966744d656d62657273686970506172616d65746572730141010144344d656d626572496e76697465640c002801204d656d6265724964000039010168496e766974654d656d62657273686970506172616d6574657273000018011c42616c616e6365000000404d656d6265727368697047696674656408002801204d656d6265724964000041010160476966744d656d62657273686970506172616d6574657273000100404d656d62657273686970426f756768740c002801204d656d626572496400002d01015c4275794d656d62657273686970506172616d6574657273000010010c753332000200504d656d62657250726f66696c65557064617465640c002801204d656d626572496400003101013c4f7074696f6e3c5665633c75383e3e00003101013c4f7074696f6e3c5665633c75383e3e000300544d656d6265724163636f756e7473557064617465640c002801204d656d626572496400009401444f7074696f6e3c4163636f756e7449643e00009401444f7074696f6e3c4163636f756e7449643e0004007c4d656d626572566572696669636174696f6e537461747573557064617465640c002801204d656d62657249640000980110626f6f6c000028011c4163746f72496400050048526566657272616c437574557064617465640400080108753800060048496e76697465735472616e736665727265640c002801204d656d626572496400002801204d656d6265724964000010010c753332000700584d656d62657273686970507269636555706461746564040018011c42616c616e63650008007c496e697469616c496e7669746174696f6e42616c616e636555706461746564040018011c42616c616e6365000900704c6561646572496e7669746174696f6e51756f746155706461746564040010010c753332000a0074496e697469616c496e7669746174696f6e436f756e7455706461746564040010010c753332000b004c5374616b696e674163636f756e74416464656408000001244163636f756e74496400002801204d656d6265724964000c00545374616b696e674163636f756e7452656d6f76656408000001244163636f756e74496400002801204d656d6265724964000d005c5374616b696e674163636f756e74436f6e6669726d656408000001244163636f756e74496400002801204d656d6265724964000e00384d656d62657252656d61726b65640c002801204d656d6265724964000030011c5665633c75383e0000490101704f7074696f6e3c284163636f756e7449642c2042616c616e6365293e000f00344d656d626572437265617465640c002801204d656d626572496400003d0101584372656174654d656d626572506172616d6574657273000010010c753332001000085c4576656e747320666f722074686973206d6f64756c652e002d01084470616c6c65745f6d656d626572736869705c4275794d656d62657273686970506172616d657465727308244163636f756e7449640100204d656d6265724964012800140130726f6f745f6163636f756e740001244163636f756e744964000148636f6e74726f6c6c65725f6163636f756e740001244163636f756e74496400011868616e646c653101013c4f7074696f6e3c5665633c75383e3e0001206d6574616461746130011c5665633c75383e00012c72656665727265725f6964350101404f7074696f6e3c4d656d62657249643e0000310104184f7074696f6e04045401300108104e6f6e6500000010536f6d650400300000010000350104184f7074696f6e04045401280108104e6f6e6500000010536f6d6504002800000100003901084470616c6c65745f6d656d6265727368697068496e766974654d656d62657273686970506172616d657465727308244163636f756e7449640100204d656d6265724964012800140148696e766974696e675f6d656d6265725f69642801204d656d6265724964000130726f6f745f6163636f756e740001244163636f756e744964000148636f6e74726f6c6c65725f6163636f756e740001244163636f756e74496400011868616e646c653101013c4f7074696f6e3c5665633c75383e3e0001206d6574616461746130011c5665633c75383e00003d01084470616c6c65745f6d656d62657273686970584372656174654d656d626572506172616d657465727304244163636f756e744964010000140130726f6f745f6163636f756e740001244163636f756e744964000148636f6e74726f6c6c65725f6163636f756e740001244163636f756e74496400011868616e646c6530011c5665633c75383e0001206d6574616461746130011c5665633c75383e00014869735f666f756e64696e675f6d656d626572980110626f6f6c00004101084470616c6c65745f6d656d6265727368697060476966744d656d62657273686970506172616d657465727308244163636f756e74496401001c42616c616e6365011800200130726f6f745f6163636f756e740001244163636f756e744964000148636f6e74726f6c6c65725f6163636f756e740001244163636f756e74496400011868616e646c653101013c4f7074696f6e3c5665633c75383e3e0001206d6574616461746130011c5665633c75383e0001646372656469745f636f6e74726f6c6c65725f6163636f756e7418011c42616c616e63650001a06170706c795f636f6e74726f6c6c65725f6163636f756e745f696e7669746174696f6e5f6c6f636b4501013c4f7074696f6e3c42616c616e63653e00014c6372656469745f726f6f745f6163636f756e7418011c42616c616e63650001886170706c795f726f6f745f6163636f756e745f696e7669746174696f6e5f6c6f636b4501013c4f7074696f6e3c42616c616e63653e0000450104184f7074696f6e04045401180108104e6f6e6500000010536f6d650400180000010000490104184f7074696f6e040454014d010108104e6f6e6500000010536f6d6504004d0100000100004d01000004080018005101083070616c6c65745f666f72756d205261774576656e74202843617465676f7279496401282c4d6f64657261746f7249640128205468726561644964012818506f7374496401281048617368012c2c466f72756d55736572496401283c50726976696c656765644163746f7201550138457874656e646564506f7374496401590101443c43617465676f727943726561746564100028012843617465676f727949640000350101484f7074696f6e3c43617465676f727949643e000030011c5665633c75383e000030011c5665633c75383e00000464412063617465676f72792077617320696e74726f64756365647443617465676f7279417263686976616c537461747573557064617465640c0028012843617465676f727949640000980110626f6f6c00005501013c50726976696c656765644163746f72000108e0416e206172686963616c20737461747573206f662063617465676f7279207769746820676976656e2069642077617320757064617465642e1501546865207365636f6e6420617267756d656e74207265666c6563747320746865206e657720617263686976616c20737461747573206f66207468652063617465676f72792e5043617465676f72795469746c65557064617465640c0028012843617465676f7279496400002c01104861736800005501013c50726976696c656765644163746f72000208b841207469746c65206f662063617465676f7279207769746820676976656e2069642077617320757064617465642e0101546865207365636f6e6420617267756d656e74207265666c6563747320746865206e6577207469746c652068617368206f66207468652063617465676f72792e6843617465676f72794465736372697074696f6e557064617465640c0028012843617465676f7279496400002c01104861736800005501013c50726976696c656765644163746f72000308d041206469736372697074696f6e206f662063617465676f7279207769746820676976656e2069642077617320757064617465642e1901546865207365636f6e6420617267756d656e74207265666c6563747320746865206e6577206465736372697074696f6e2068617368206f66207468652063617465676f72792e3c43617465676f727944656c65746564080028012843617465676f7279496400005501013c50726976696c656765644163746f7200040458412063617465676f7279207761732064656c657465643454687265616443726561746564180028012843617465676f72794964000028012054687265616449640000280118506f73744964000028012c466f72756d557365724964000030011c5665633c75383e000030011c5665633c75383e0005088c4120746872656164207769746820676976656e2069642077617320637265617465642ef04120746869726420617267756d656e74207265666c656374732074686520696e697469616c20706f7374206964206f6620746865207468726561642e3c5468726561644d6f6465726174656410002801205468726561644964000030011c5665633c75383e00005501013c50726976696c656765644163746f72000028012843617465676f72794964000604944120746872656164207769746820676976656e20696420776173206d6f646572617465642e3454687265616455706461746564100028012054687265616449640000980110626f6f6c00005501013c50726976696c656765644163746f72000028012843617465676f727949640007088c4120746872656164207769746820676976656e2069642077617320757064617465642e0d01546865207365636f6e6420617267756d656e74207265666c6563747320746865206e657720617263686976616c20737461747573206f6620746865207468726561642e545468726561644d657461646174615570646174656410002801205468726561644964000028012c466f72756d557365724964000028012843617465676f72794964000030011c5665633c75383e0008049c4120746872656164206d6574616461746120676976656e2069642077617320757064617465642e3454687265616444656c6574656410002801205468726561644964000028012c466f72756d557365724964000028012843617465676f727949640000980110626f6f6c000904544120746872656164207761732064656c657465642e2c5468726561644d6f76656410002801205468726561644964000028012843617465676f7279496400005501013c50726976696c656765644163746f72000028012843617465676f72794964000a0488412074687265616420776173206d6f76656420746f206e65772063617465676f727924506f737441646465641800280118506f73744964000028012c466f72756d557365724964000028012843617465676f7279496400002801205468726561644964000030011c5665633c75383e0000980110626f6f6c000b047c506f7374207769746820676976656e2069642077617320637265617465642e34506f73744d6f646572617465641400280118506f73744964000030011c5665633c75383e00005501013c50726976696c656765644163746f72000028012843617465676f7279496400002801205468726561644964000c0484506f73742077697468206769766e6520696420776173206d6f646572617465642e2c506f737444656c657465640c0030011c5665633c75383e000028012c466f72756d55736572496400005d01017842547265654d61703c457874656e646564506f737449642c20626f6f6c3e000d047c506f73742077697468206769766e65206964207761732064656c657465642e3c506f737454657874557064617465641400280118506f73744964000028012c466f72756d557365724964000028012843617465676f7279496400002801205468726561644964000030011c5665633c75383e000e08a0506f7374207769746820676976656e2069642068616420697473207465787420757064617465642e4d01546865207365636f6e6420617267756d656e74207265666c6563747320746865206e756d626572206f6620746f74616c206564697473207768656e20746865207465787420757064617465206f63637572732e6843617465676f7279537469636b795468726561645570646174650c0028012843617465676f7279496400006901014842547265655365743c54687265616449643e00005501013c50726976696c656765644163746f72000f0488537469636b7920746872656164207570646174656420666f722063617465676f72799043617465676f72794d656d626572736869704f664d6f64657261746f72557064617465640c0028012c4d6f64657261746f724964000028012843617465676f727949640000980110626f6f6c0010042501416e206d6f64657261746f72206162696c69747920746f206d6f64657261746520612063617465676f727920616e64206974732073756263617465676f726965732075706461746564085c4576656e747320666f722074686973206d6f64756c652e005501083070616c6c65745f666f72756d3c50726976696c656765644163746f72040454000108104c656164000000244d6f64657261746f7204002801384d6f64657261746f7249643c543e000100005901083070616c6c65745f666f72756d50457874656e646564506f737449644f626a6563740c2843617465676f727949640128205468726561644964012818506f737449640128000c012c63617465676f72795f696428012843617465676f727949640001247468726561645f6964280120546872656164496400011c706f73745f6964280118506f7374496400005d01042042547265654d617008044b015901045601980004006101000000610100000265010065010000040859019800690104204254726565536574040454012800040015010000006d01084c70616c6c65745f636f6e737469747574696f6e205261774576656e74041048617368012c010444436f6e73747574696f6e416d656e64656408002c011048617368000030011c5665633c75383e00001080456d697473206f6e20636f6e737469747574696f6e20616d656e646d656e742e2c506172616d65746572733a602d20636f6e737469747574696f6e207465787420686173684c2d20636f6e737469747574696f6e2074657874085c4576656e747320666f722074686973206d6f64756c652e007101083470616c6c65745f626f756e7479205261774576656e741c20426f756e7479496401281c456e747279496401281c42616c616e63650118204d656d62657249640128244163636f756e744964010060426f756e74794372656174696f6e506172616d6574657273017501384f7261636c654a7564676d656e74018501015c34426f756e7479437265617465640c00280120426f756e74794964000075010160426f756e74794372656174696f6e506172616d6574657273000030011c5665633c75383e000014544120626f756e74792077617320637265617465642e1c506172616d733a2c2d20626f756e7479204944542d206372656174696f6e20706172616d6574657273442d20626f756e7479206d6574616461746150426f756e74794f7261636c6553776974636865641000280120426f756e74794964000079010154426f756e74794163746f723c4d656d62657249643e000079010154426f756e74794163746f723c4d656d62657249643e000079010154426f756e74794163746f723c4d656d62657249643e000118d0426f756e7479204f7261636c652053776974636865642062792063757272656e74206f7261636c65206f7220636f756e63696c2e1c506172616d733a2c2d20626f756e7479204944282d207377697463686572442d2063757272656e745f6f7261636c652c302d206e6577206f7261636c6540426f756e74795465726d696e617465641000280120426f756e74794964000079010154426f756e74794163746f723c4d656d62657249643e000079010154426f756e74794163746f723c4d656d62657249643e000079010154426f756e74794163746f723c4d656d62657249643e0002188c4120626f756e747920776173207465726d696e6174656420627920636f756e63696c2e1c506172616d733a2c2d20626f756e74792049444c2d20626f756e7479207465726d696e61746f72402d20626f756e74792063726561746f723c2d20626f756e7479206f7261636c6530426f756e747946756e6465640c00280120426f756e74794964000079010154426f756e74794163746f723c4d656d62657249643e000018011c42616c616e6365000314b44120626f756e7479207761732066756e6465642062792061206d656d626572206f72206120636f756e63696c2e1c506172616d733a2c2d20626f756e74792049443c2d20626f756e74792066756e646572402d2066756e64696e6720616d6f756e745c426f756e74794d617846756e64696e67526561636865640400280120426f756e7479496400040cbc4120626f756e747920686173207265616368656420697473207461726765742066756e64696e6720616d6f756e742e1c506172616d733a2c2d20626f756e74792049445c426f756e747946756e64696e675769746864726177616c0800280120426f756e74794964000079010154426f756e74794163746f723c4d656d62657249643e000510c041206d656d626572206f72206120636f756e63696c206861732077697468647261776e207468652066756e64696e672e1c506172616d733a2c2d20626f756e74792049443c2d20626f756e74792066756e64657274426f756e747943726561746f724368657272795769746864726177616c0800280120426f756e74794964000079010154426f756e74794163746f723c4d656d62657249643e000610f84120626f756e74792063726561746f72206861732077697468647261776e207468652063686572727920286d656d626572206f7220636f756e63696c292e1c506172616d733a2c2d20626f756e7479204944402d20626f756e74792063726561746f728c426f756e747943726561746f724f7261636c655265776172645769746864726177616c0800280120426f756e74794964000079010154426f756e74794163746f723c4d656d62657249643e00071015014120626f756e74792063726561746f72206861732077697468647261776e20746865206f7261636c652072657761726420286d656d626572206f7220636f756e63696c292e1c506172616d733a2c2d20626f756e7479204944402d20626f756e74792063726561746f7270426f756e74794f7261636c655265776172645769746864726177616c0c00280120426f756e74794964000079010154426f756e74794163746f723c4d656d62657249643e000018011c42616c616e6365000814f441204f7261636c65206861732077697468647261776e20746865206f7261636c652072657761726420286d656d626572206f7220636f756e63696c292e1c506172616d733a2c2d20626f756e7479204944402d20626f756e74792063726561746f723c2d204f7261636c652052657761726434426f756e747952656d6f7665640400280120426f756e7479496400090c544120626f756e7479207761732072656d6f7665642e1c506172616d733a2c2d20626f756e747920494448576f726b456e747279416e6e6f756e6365641400280120426f756e74794964000028011c456e747279496400002801204d656d626572496400000001244163636f756e744964000030011c5665633c75383e000a1c64576f726b20656e7472792077617320616e6e6f756e6365642e1c506172616d733a2c2d20626f756e7479204944482d206372656174656420656e7472792049444c2d20656e7472616e74206d656d626572204944502d207374616b696e67206163636f756e74204944482d20776f726b206465736372697074696f6e34576f726b5375626d69747465641000280120426f756e74794964000028011c456e747279496400002801204d656d6265724964000030011c5665633c75383e000b18305375626d697420776f726b2e1c506172616d733a2c2d20626f756e7479204944482d206372656174656420656e7472792049444c2d20656e7472616e74206d656d626572204944a82d20776f726b206461746120286465736372697074696f6e2c2055524c2c20424c4f422c206574632e295c4f7261636c654a7564676d656e745375626d69747465641000280120426f756e74794964000079010154426f756e74794163746f723c4d656d62657249643e0000850101384f7261636c654a7564676d656e74000030011c5665633c75383e000c185c5375626d6974206f7261636c65206a7564676d656e742e1c506172616d733a2c2d20626f756e7479204944202d206f7261636c653c2d206a7564676d656e7420646174612c2d20726174696f6e616c6564576f726b456e7472616e7446756e647357697468647261776e0c00280120426f756e74794964000028011c456e747279496400002801204d656d6265724964000d145c576f726b20656e7472792077617320736c61736865642e1c506172616d733a2c2d20626f756e7479204944282d20656e7472792049444c2d20656e7472616e74206d656d62657220494464426f756e7479436f6e7472696275746f7252656d61726b65640c0079010154426f756e74794163746f723c4d656d62657249643e0000280120426f756e74794964000030011c5665633c75383e000e14a0426f756e747920636f6e7472696275746f72206d6164652061206d6573736167652072656d61726b1c506172616d733a342d20636f6e7472696275746f722c2d20626f756e7479206964242d206d65737361676550426f756e74794f7261636c6552656d61726b65640c0079010154426f756e74794163746f723c4d656d62657249643e0000280120426f756e74794964000030011c5665633c75383e000f148c426f756e7479206f7261636c65206d6164652061206d6573736167652072656d61726b1c506172616d733a202d206f7261636c652c2d20626f756e7479206964242d206d65737361676554426f756e7479456e7472616e7452656d61726b656410002801204d656d62657249640000280120426f756e74794964000028011c456e7472794964000030011c5665633c75383e00101890426f756e747920656e7472616e74206d6164652061206d6573736167652072656d61726b1c506172616d733a302d20656e7472616e745f69642c2d20626f756e7479206964282d20656e747279206964242d206d65737361676554426f756e747943726561746f7252656d61726b65640c0079010154426f756e74794163746f723c4d656d62657249643e0000280120426f756e74794964000030011c5665633c75383e00111490426f756e74792063726561746f72206d6164652061206d6573736167652072656d61726b1c506172616d733a242d2063726561746f722c2d20626f756e7479206964242d206d65737361676564576f726b5375626d697373696f6e506572696f64456e6465640800280120426f756e74794964000079010154426f756e74794163746f723c4d656d62657249643e0012105c576f726b20656e7472792077617320736c61736865642e1c506172616d733a2c2d20626f756e7479204944442d206f7261636c65202863616c6c65722960576f726b456e7472616e745374616b65556e6c6f636b65640c00280120426f756e74794964000028011c456e747279496400000001244163636f756e74496400131468576f726b20656e747279207374616b6520756e6c6f636b65642e1c506172616d733a2c2d20626f756e7479204944282d20656e7472792049443c2d207374616b65206163636f756e745c576f726b456e7472616e745374616b65536c61736865641000280120426f756e74794964000028011c456e747279496400000001244163636f756e744964000018011c42616c616e636500141864576f726b20656e747279207374616b6520736c61736865642e1c506172616d733a2c2d20626f756e7479204944282d20656e7472792049443c2d207374616b65206163636f756e74402d20736c617368656420616d6f756e747446756e6465725374617465426c6f6174426f6e6457697468647261776e0c00280120426f756e74794964000079010154426f756e74794163746f723c4d656d62657249643e000018011c42616c616e63650015141d0141206d656d626572206f72206120636f756e63696c2066756e646572206861732077697468647261776e207468652066756e64657220737461746520626c6f617420626f6e642e1c506172616d733a2c2d20626f756e74792049443c2d20626f756e74792066756e646572802d2066756e64657220537461746520626c6f617420626f6e6420616d6f756e747843726561746f725374617465426c6f6174426f6e6457697468647261776e0c00280120426f756e74794964000079010154426f756e74794163746f723c4d656d62657249643e000018011c42616c616e6365001614250141206d656d626572206f72206120636f756e63696c2063726561746f72206861732077697468647261776e207468652063726561746f7220737461746520626c6f617420626f6e642e1c506172616d733a2c2d20626f756e7479204944402d20626f756e74792063726561746f72842d2043726561746f7220537461746520626c6f617420626f6e6420616d6f756e74085c4576656e747320666f722074686973206d6f64756c652e007501083470616c6c65745f626f756e747940426f756e7479506172616d6574657273101c42616c616e636501182c426c6f636b4e756d6265720110204d656d626572496401285c436c6f736564436f6e747261637457686974656c697374016901001c01186f7261636c6579010154426f756e74794163746f723c4d656d62657249643e000134636f6e74726163745f747970657d0101b84173737572616e6365436f6e7472616374547970653c436c6f736564436f6e747261637457686974656c6973743e00011c63726561746f7279010154426f756e74794163746f723c4d656d62657249643e00011863686572727918011c42616c616e63650001346f7261636c655f72657761726418011c42616c616e6365000134656e7472616e745f7374616b6518011c42616c616e636500013066756e64696e675f747970658101018446756e64696e67547970653c426c6f636b4e756d6265722c2042616c616e63653e00007901083470616c6c65745f626f756e74792c426f756e74794163746f7204204d656d6265724964012801081c436f756e63696c000000184d656d62657204002801204d656d6265724964000100007d01083470616c6c65745f626f756e7479544173737572616e6365436f6e747261637454797065045c436c6f736564436f6e747261637457686974656c6973740169010108104f70656e00000018436c6f73656404006901015c436c6f736564436f6e747261637457686974656c697374000100008101083470616c6c65745f626f756e74792c46756e64696e6754797065082c426c6f636b4e756d62657201101c42616c616e6365011801082450657270657475616c04011874617267657418011c42616c616e63650000001c4c696d6974656408011874617267657418011c42616c616e636500013866756e64696e675f706572696f6410012c426c6f636b4e756d626572000100008501042042547265654d617008044b012804560189010004008d010000008901083470616c6c65745f626f756e74795c4f7261636c65576f726b456e7472794a7564676d656e74041c42616c616e6365011801081857696e6e657204011872657761726418011c42616c616e63650000002052656a6563746564080138736c617368696e675f7368617265ac011c50657262696c6c000150616374696f6e5f6a757374696669636174696f6e30011c5665633c75383e000100008d01000002910100910100000408288901009501086070616c6c65745f6a6f7973747265616d5f7574696c697479205261774576656e74081c42616c616e63650118244163636f756e74496401000110205369676e616c6564040030011c5665633c75383e00000c7841207369676e616c2070726f706f73616c207761732065786563757465641c506172616d733adc2d205369676e616c20676976656e207768656e206372656174696e672074686520636f72726573706f6e64696e672070726f706f73616c3c52756e74696d655570677261646564040030011c5665633c75383e00010c78412072756e74696d652075706772616465207761732065786563757465641c506172616d733a6c2d204e657720636f646520656e636f64656420696e2062797465736455706461746564576f726b696e6747726f75704275646765740c0099010130576f726b696e6747726f7570000018011c42616c616e636500009d01012c42616c616e63654b696e64000218d8416e206055706461746520576f726b696e672047726f757020427564676574602070726f706f73616c207761732065786563757465641c506172616d733ab42d20576f726b696e672067726f757020776869636820627564676574206973206265696e6720757064617465647c2d20416d6f756e74206f662062616c616e6365206265696e67206d6f7665645d012d20456e756d2076617269616e74207769746820706f73697469766520696e6469636174696e672066756e6473206d6f76656420746f72776172647320776f726b696e672067726f757020616e64206e65676174697665c0616e64206e656761746976652066756e6473206d6f76696e672066726f6d2074686520776f726b696e672067726f757030546f6b656e734275726e656408000001244163636f756e744964000018011c42616c616e636500031060416e206163636f756e74206275726e656420746f6b656e731c506172616d733a882d204163636f756e74204964206f6620746865206275726e696e6720746f6b656e73882d2042616c616e6365206275726e65642066726f6d2074686174206163636f756e74085c4576656e747320666f722074686973206d6f64756c652e009901103470616c6c65745f636f6d6d6f6e34776f726b696e675f67726f7570386974657261626c655f656e756d7330576f726b696e6747726f757000012414466f72756d0000001c53746f726167650001001c436f6e74656e740002003c4f7065726174696f6e73416c7068610003000c41707000040030446973747269627574696f6e000500384f7065726174696f6e73426574610006003c4f7065726174696f6e7347616d6d61000700284d656d62657273686970000800009d01083470616c6c65745f636f6d6d6f6e2c42616c616e63654b696e6400010820506f736974697665000000204e6567617469766500010000a101083870616c6c65745f636f6e74656e74205261774576656e746430436f6e74656e744163746f7201a501204d656d626572496401283843757261746f7247726f7570496401282443757261746f72496401281c566964656f49640128244368616e6e656c496401281c4368616e6e656c01a90130446174614f626a6563744964012850456e676c69736841756374696f6e506172616d7301fd01444f70656e41756374696f6e506172616d73010502344f70656e41756374696f6e49640128544e667449737375616e6365506172616d65746572730109021c42616c616e63650118644368616e6e656c4372656174696f6e506172616d65746572730115025c4368616e6e656c557064617465506172616d65746572730141025c566964656f4372656174696f6e506172616d657465727301490254566964656f557064617465506172616d6574657273015102544368616e6e656c50726976696c6567654c6576656c0108704d6f6465726174696f6e5065726d697373696f6e7342794c6576656c015502645472616e73666572436f6d6d69746d656e745769746e657373016d023c50656e64696e675472616e7366657201ed01244163636f756e7449640100785570646174654368616e6e656c5061796f757473506172616d65746572730171021c546f6b656e496401285c4368616e6e656c46756e647344657374696e6174696f6e01850201d44c43757261746f7247726f757043726561746564040028013843757261746f7247726f757049640000007843757261746f7247726f75705065726d697373696f6e7355706461746564080028013843757261746f7247726f757049640000550201704d6f6465726174696f6e5065726d697373696f6e7342794c6576656c0001005443757261746f7247726f7570537461747573536574080028013843757261746f7247726f757049640000980110626f6f6c0002003043757261746f7241646465640c0028013843757261746f7247726f75704964000028012443757261746f7249640000bd01015c4368616e6e656c4167656e745065726d697373696f6e730003003843757261746f7252656d6f766564080028013843757261746f7247726f75704964000028012443757261746f724964000400384368616e6e656c4372656174656410002801244368616e6e656c49640000a901011c4368616e6e656c0000150201644368616e6e656c4372656174696f6e506172616d657465727300000001244163636f756e744964000500384368616e6e656c557064617465641000a5010130436f6e74656e744163746f7200002801244368616e6e656c496400004102015c4368616e6e656c557064617465506172616d657465727300006901015842547265655365743c446174614f626a65637449643e000600704368616e6e656c50726976696c6567654c6576656c5570646174656408002801244368616e6e656c496400000801544368616e6e656c50726976696c6567654c6576656c000700844368616e6e656c5374617465426c6f6174426f6e6456616c756555706461746564040018011c42616c616e63650008007c566964656f5374617465426c6f6174426f6e6456616c756555706461746564040018011c42616c616e6365000900504368616e6e656c41737365747352656d6f7665641000a5010130436f6e74656e744163746f7200002801244368616e6e656c496400006901015842547265655365743c446174614f626a65637449643e0000a901011c4368616e6e656c000a00384368616e6e656c44656c657465640800a5010130436f6e74656e744163746f7200002801244368616e6e656c4964000b007c4368616e6e656c5669736962696c69747953657442794d6f64657261746f721000a5010130436f6e74656e744163746f7200002801244368616e6e656c49640000980110626f6f6c000030011c5665633c75383e000c009c4368616e6e656c50617573656446656174757265735570646174656442794d6f64657261746f721000a5010130436f6e74656e744163746f7200002801244368616e6e656c49640000d901018042547265655365743c5061757361626c654368616e6e656c466561747572653e000030011c5665633c75383e000d007c4368616e6e656c41737365747344656c6574656442794d6f64657261746f721000a5010130436f6e74656e744163746f7200002801244368616e6e656c496400006901015842547265655365743c446174614f626a65637449643e000030011c5665633c75383e000e00544368616e6e656c46756e647357697468647261776e1000a5010130436f6e74656e744163746f7200002801244368616e6e656c4964000018011c42616c616e636500008502015c4368616e6e656c46756e647344657374696e6174696f6e000f00804368616e6e656c526577617264436c61696d6564416e6457697468647261776e1000a5010130436f6e74656e744163746f7200002801244368616e6e656c4964000018011c42616c616e636500008502015c4368616e6e656c46756e647344657374696e6174696f6e00100030566964656f437265617465641400a5010130436f6e74656e744163746f7200002801244368616e6e656c4964000028011c566964656f496400004902015c566964656f4372656174696f6e506172616d657465727300006901015842547265655365743c446174614f626a65637449643e00110030566964656f557064617465641000a5010130436f6e74656e744163746f72000028011c566964656f4964000051020154566964656f557064617465506172616d657465727300006901015842547265655365743c446174614f626a65637449643e00120030566964656f44656c657465640800a5010130436f6e74656e744163746f72000028011c566964656f496400130074566964656f5669736962696c69747953657442794d6f64657261746f721000a5010130436f6e74656e744163746f72000028011c566964656f49640000980110626f6f6c000030011c5665633c75383e00140074566964656f41737365747344656c6574656442794d6f64657261746f721400a5010130436f6e74656e744163746f72000028011c566964656f496400006901015842547265655365743c446174614f626a65637449643e0000980110626f6f6c000030011c5665633c75383e001500544368616e6e656c5061796f757473557064617465640c00710201785570646174654368616e6e656c5061796f757473506172616d65746572730000350101504f7074696f6e3c446174614f626a65637449643e00000001244163636f756e744964001600504368616e6e656c526577617264557064617465640c0018011c42616c616e6365000018011c42616c616e636500002801244368616e6e656c496400170054456e676c69736841756374696f6e537461727465640c00a5010130436f6e74656e744163746f72000028011c566964656f49640000fd010150456e676c69736841756374696f6e506172616d73001800484f70656e41756374696f6e537461727465641000a5010130436f6e74656e744163746f72000028011c566964656f49640000050201444f70656e41756374696f6e506172616d7300002801344f70656e41756374696f6e4964001900244e66744973737565640c00a5010130436f6e74656e744163746f72000028011c566964656f49640000090201544e667449737375616e6365506172616d6574657273001a00304e667444657374726f7965640800a5010130436f6e74656e744163746f72000028011c566964656f4964001b003841756374696f6e4269644d61646510002801204d656d6265724964000028011c566964656f4964000018011c42616c616e63650000350101404f7074696f6e3c4d656d62657249643e001c004841756374696f6e42696443616e63656c656408002801204d656d6265724964000028011c566964656f4964001d003c41756374696f6e43616e63656c65640800a5010130436f6e74656e744163746f72000028011c566964656f4964001e0054456e676c69736841756374696f6e536574746c65640c002801204d656d626572496400000001244163636f756e744964000028011c566964656f4964001f00604269644d616465436f6d706c6574696e6741756374696f6e0c002801204d656d6265724964000028011c566964656f49640000350101404f7074696f6e3c4d656d62657249643e002000584f70656e41756374696f6e42696441636365707465641000a5010130436f6e74656e744163746f72000028011c566964656f496400002801204d656d6265724964000018011c42616c616e6365002100304f6666657253746172746564100028011c566964656f49640000a5010130436f6e74656e744163746f7200002801204d656d626572496400004501013c4f7074696f6e3c42616c616e63653e002200344f666665724163636570746564040028011c566964656f4964002300344f6666657243616e63656c6564080028011c566964656f49640000a5010130436f6e74656e744163746f72002400404e667453656c6c4f726465724d6164650c0028011c566964656f49640000a5010130436f6e74656e744163746f72000018011c42616c616e6365002500244e6674426f75676874080028011c566964656f496400002801204d656d6265724964002600384275794e6f7743616e63656c6564080028011c566964656f49640000a5010130436f6e74656e744163746f72002700484275794e6f775072696365557064617465640c0028011c566964656f49640000a5010130436f6e74656e744163746f72000018011c42616c616e6365002800844e6674536c696e6765644261636b546f5468654f726967696e616c417274697374080028011c566964656f49640000a5010130436f6e74656e744163746f72002900504368616e6e656c4f776e657252656d61726b656408002801244368616e6e656c4964000030011c5665633c75383e002a046c4d65746170726f746f636f6c732072656c61746564206576656e74504368616e6e656c4167656e7452656d61726b65640c00a5010130436f6e74656e744163746f7200002801244368616e6e656c4964000030011c5665633c75383e002b00404e66744f776e657252656d61726b65640c00a5010130436f6e74656e744163746f72000028011c566964656f4964000030011c5665633c75383e002c0068496e697469616c697a65644368616e6e656c5472616e736665720c002801244368616e6e656c49640000a5010130436f6e74656e744163746f720000ed01013c50656e64696e675472616e73666572002d005443616e63656c4368616e6e656c5472616e7366657208002801244368616e6e656c49640000a5010130436f6e74656e744163746f72002e005c4368616e6e656c5472616e73666572416363657074656408002801244368616e6e656c496400006d0201645472616e73666572436f6d6d69746d656e745769746e657373002f0054476c6f62616c4e66744c696d6974557064617465640800890201384e66744c696d6974506572696f64000028010c753634003000584368616e6e656c4e66744c696d6974557064617465641000a5010130436f6e74656e744163746f720000890201384e66744c696d6974506572696f6400002801244368616e6e656c4964000028010c75363400310040546f67676c65644e66744c696d6974730400980110626f6f6c0032004843726561746f72546f6b656e4973737565640c00a5010130436f6e74656e744163746f7200002801244368616e6e656c4964000028011c546f6b656e49640033006843726561746f72546f6b656e49737375657252656d61726b65640c002801244368616e6e656c4964000028011c546f6b656e4964000030011c5665633c75383e003400085c4576656e747320666f722074686973206d6f64756c652e00a5010c3870616c6c65745f636f6e74656e742c7065726d697373696f6e7330436f6e74656e744163746f720c3843757261746f7247726f7570496401282443757261746f7249640128204d656d62657249640128010c1c43757261746f72080028013843757261746f7247726f75704964000028012443757261746f724964000000184d656d62657204002801204d656d6265724964000100104c65616400020000a9010c3870616c6c65745f636f6e74656e74147479706573344368616e6e656c5265636f72642c204d656d626572496401283843757261746f7247726f7570496401281c42616c616e63650118544368616e6e656c50726976696c6567654c6576656c01082c426c6f636b4e756d62657201101c546f6b656e49640128285472616e7366657249640128404368616e6e656c41737365747353657401ad015c4368616e6e656c436f6c6c61626f7261746f72734d617001b10144506175736564466561747572657353657401d10148526570617961626c65426c6f6174426f6e6401e101003801146f776e6572e50101984368616e6e656c4f776e65723c4d656d62657249642c2043757261746f7247726f757049643e0001286e756d5f766964656f7328010c753634000134636f6c6c61626f7261746f7273b101015c4368616e6e656c436f6c6c61626f7261746f72734d617000016463756d756c61746976655f7265776172645f636c61696d656418011c42616c616e636500013c70726976696c6567655f6c6576656c0801544368616e6e656c50726976696c6567654c6576656c00013c7061757365645f6665617475726573d1010144506175736564466561747572657353657400013c7472616e736665725f737461747573e9010179014368616e6e656c5472616e736665725374617475733c4d656d62657249642c2043757261746f7247726f757049642c2042616c616e63652c205472616e7366657249642c0a4368616e6e656c436f6c6c61626f7261746f72734d61702c3e000130646174615f6f626a65637473ad0101404368616e6e656c41737365747353657400013c6461696c795f6e66745f6c696d6974f501016c4c696d6974506572506572696f643c426c6f636b4e756d6265723e0001407765656b6c795f6e66745f6c696d6974f501016c4c696d6974506572506572696f643c426c6f636b4e756d6265723e0001446461696c795f6e66745f636f756e746572f901015c4e6674436f756e7465723c426c6f636b4e756d6265723e0001487765656b6c795f6e66745f636f756e746572f901015c4e6674436f756e7465723c426c6f636b4e756d6265723e00014063726561746f725f746f6b656e5f69643501013c4f7074696f6e3c546f6b656e49643e0001606368616e6e656c5f73746174655f626c6f61745f626f6e64e1010148526570617961626c65426c6f6174426f6e640000ad010c4c626f756e6465645f636f6c6c656374696f6e7344626f756e6465645f62747265655f7365743c426f756e646564425472656553657408045401280453000004006901012c42547265655365743c543e0000b1010c4c626f756e6465645f636f6c6c656374696f6e7344626f756e6465645f62747265655f6d61703c426f756e64656442547265654d61700c044b0128045601b501045300000400c501013842547265654d61703c4b2c20563e0000b5010c4c626f756e6465645f636f6c6c656374696f6e7344626f756e6465645f62747265655f7365743c426f756e646564425472656553657408045401b901045300000400bd01012c42547265655365743c543e0000b901103870616c6c65745f636f6e74656e74147479706573386974657261626c655f656e756d735c4368616e6e656c416374696f6e5065726d697373696f6e000158545570646174654368616e6e656c4d657461646174610000006c4d616e6167654e6f6e566964656f4368616e6e656c417373657473000100684d616e6167654368616e6e656c436f6c6c61626f7261746f72730002004c557064617465566964656f4d6574616461746100030020416464566964656f000400444d616e616765566964656f4173736574730005003444656c6574654368616e6e656c0006002c44656c657465566964656f0007003c4d616e616765566964656f4e6674730008002c4167656e7452656d61726b0009003c5472616e736665724368616e6e656c000a0048436c61696d4368616e6e656c526577617264000b0068576974686472617746726f6d4368616e6e656c42616c616e6365000c0044497373756543726561746f72546f6b656e000d0068436c61696d43726561746f72546f6b656e506174726f6e616765000e0074496e6974416e644d616e61676543726561746f72546f6b656e53616c65000f006843726561746f72546f6b656e4973737565725472616e73666572001000784d616b6543726561746f72546f6b656e5065726d697373696f6e6c6573730011007c52656475636543726561746f72546f6b656e506174726f6e616765526174650012004c4d616e616765526576656e756553706c6974730013004c4465697373756543726561746f72546f6b656e00140028416d6d436f6e74726f6c00150000bd010420425472656553657404045401b901000400c101000000c101000002b90100c501042042547265654d617008044b0128045601b501000400c901000000c901000002cd0100cd010000040828b50100d1010c4c626f756e6465645f636f6c6c656374696f6e7344626f756e6465645f62747265655f7365743c426f756e646564425472656553657408045401d501045300000400d901012c42547265655365743c543e0000d501143870616c6c65745f636f6e74656e742c7065726d697373696f6e733463757261746f725f67726f7570386974657261626c655f656e756d73585061757361626c654368616e6e656c4665617475726500011c504368616e6e656c46756e64735472616e736665720000003843726561746f72436173686f757400010040566964656f4e667449737375616e636500020034566964656f4372656174696f6e0003002c566964656f557064617465000400344368616e6e656c5570646174650005005043726561746f72546f6b656e49737375616e636500060000d9010420425472656553657404045401d501000400dd01000000dd01000002d50100e1010c3470616c6c65745f636f6d6d6f6e28626c6f61745f626f6e6448526570617961626c65426c6f6174426f6e6408244163636f756e74496401001c42616c616e636501180008015c72657061796d656e745f726573747269637465645f746f9401444f7074696f6e3c4163636f756e7449643e000118616d6f756e7418011c42616c616e63650000e5010c3870616c6c65745f636f6e74656e74147479706573304368616e6e656c4f776e657208204d656d626572496401283843757261746f7247726f7570496401280108184d656d62657204002801204d656d62657249640000003043757261746f7247726f7570040028013843757261746f7247726f7570496400010000e9010c3870616c6c65745f636f6e74656e74147479706573544368616e6e656c5472616e7366657253746174757314204d656d626572496401283843757261746f7247726f7570496401281c42616c616e63650118285472616e73666572496401285c4368616e6e656c436f6c6c61626f7261746f72734d617001b1010108404e6f4163746976655472616e736665720000003c50656e64696e675472616e736665720400ed01015d0150656e64696e675472616e736665723c4d656d62657249642c2043757261746f7247726f757049642c2042616c616e63652c205472616e7366657249642c0a4368616e6e656c436f6c6c61626f7261746f72734d61703e00010000ed010c3870616c6c65745f636f6e74656e741474797065733c50656e64696e675472616e7366657214204d656d626572496401283843757261746f7247726f7570496401281c42616c616e63650118285472616e73666572496401285c4368616e6e656c436f6c6c61626f7261746f72734d617001b101000801246e65775f6f776e6572e50101984368616e6e656c4f776e65723c4d656d62657249642c2043757261746f7247726f757049643e00013c7472616e736665725f706172616d73f1010129015472616e73666572436f6d6d69746d656e74506172616d65746572733c4368616e6e656c436f6c6c61626f7261746f72734d61702c2042616c616e63652c205472616e7366657249643e0000f1010c3870616c6c65745f636f6e74656e74147479706573705472616e73666572436f6d6d69746d656e74506172616d65746572730c5c4368616e6e656c436f6c6c61626f7261746f72734d617001b1011c42616c616e63650118285472616e7366657249640128000c01446e65775f636f6c6c61626f7261746f7273b101015c4368616e6e656c436f6c6c61626f7261746f72734d6170000114707269636518011c42616c616e636500012c7472616e736665725f69642801285472616e7366657249640000f5010c3870616c6c65745f636f6e74656e74147479706573384c696d6974506572506572696f64042c426c6f636b4e756d6265720110000801146c696d697428010c75363400014c626c6f636b5f6e756d6265725f706572696f6410012c426c6f636b4e756d6265720000f9010c3870616c6c65745f636f6e74656e74147479706573284e6674436f756e746572042c426c6f636b4e756d62657201100008011c636f756e74657228010c7536340001306c6173745f7570646174656410012c426c6f636b4e756d6265720000fd01103870616c6c65745f636f6e74656e740c6e667414747970657368456e676c69736841756374696f6e506172616d735265636f72640c2c426c6f636b4e756d62657201101c42616c616e63650118204d656d62657249640128001c01387374617274696e675f707269636518011c42616c616e63650001346275795f6e6f775f70726963654501013c4f7074696f6e3c42616c616e63653e00012477686974656c6973746901014842547265655365743c4d656d62657249643e0001247374617274735f61740102014c4f7074696f6e3c426c6f636b4e756d6265723e0001206475726174696f6e10012c426c6f636b4e756d626572000140657874656e73696f6e5f706572696f6410012c426c6f636b4e756d6265720001306d696e5f6269645f7374657018011c42616c616e63650000010204184f7074696f6e04045401100108104e6f6e6500000010536f6d6504001000000100000502103870616c6c65745f636f6e74656e740c6e66741474797065735c4f70656e41756374696f6e506172616d735265636f72640c2c426c6f636b4e756d62657201101c42616c616e63650118204d656d62657249640128001401387374617274696e675f707269636518011c42616c616e63650001346275795f6e6f775f70726963654501013c4f7074696f6e3c42616c616e63653e0001247374617274735f61740102014c4f7074696f6e3c426c6f636b4e756d6265723e00012477686974656c6973746901014842547265655365743c4d656d62657249643e0001446269645f6c6f636b5f6475726174696f6e10012c426c6f636b4e756d62657200000902103870616c6c65745f636f6e74656e740c6e66741474797065736c4e667449737375616e6365506172616d65746572735265636f726408204d656d626572496401285c496e69745472616e73616374696f6e616c537461747573010d020010011c726f79616c74791102013c4f7074696f6e3c526f79616c74793e0001306e66745f6d6574616461746130012c4e66744d657461646174610001446e6f6e5f6368616e6e656c5f6f776e6572350101404f7074696f6e3c4d656d62657249643e000164696e69745f7472616e73616374696f6e616c5f7374617475730d02015c496e69745472616e73616374696f6e616c53746174757300000d02103870616c6c65745f636f6e74656e740c6e667414747970657374496e69745472616e73616374696f6e616c5374617475735265636f72641050456e676c69736841756374696f6e506172616d7301fd01444f70656e41756374696f6e506172616d73010502204d656d626572496401281c42616c616e6365011801141049646c65000000184275794e6f77040018011c42616c616e636500010058496e697469617465644f66666572546f4d656d62657208002801204d656d626572496400004501013c4f7074696f6e3c42616c616e63653e00020038456e676c69736841756374696f6e0400fd010150456e676c69736841756374696f6e506172616d730003002c4f70656e41756374696f6e0400050201444f70656e41756374696f6e506172616d7300040000110204184f7074696f6e04045401ac0108104e6f6e6500000010536f6d650400ac000001000015020c3870616c6c65745f636f6e74656e741474797065737c4368616e6e656c4372656174696f6e506172616d65746572735265636f7264143453746f72616765417373657473011902204d656d626572496401283c53746f726167654275636b65744964012850446973747269627574696f6e4275636b657449640125021c42616c616e63650118001c0118617373657473290201544f7074696f6e3c53746f726167654173736574733e0001106d6574613101013c4f7074696f6e3c5665633c75383e3e000134636f6c6c61626f7261746f72732d0201ac42547265654d61703c4d656d62657249642c204368616e6e656c4167656e745065726d697373696f6e733e00013c73746f726167655f6275636b6574736901016442547265655365743c53746f726167654275636b657449643e000150646973747269627574696f6e5f6275636b6574733902017842547265655365743c446973747269627574696f6e4275636b657449643e00018465787065637465645f6368616e6e656c5f73746174655f626c6f61745f626f6e6418011c42616c616e636500019465787065637465645f646174615f6f626a6563745f73746174655f626c6f61745f626f6e6418011c42616c616e6365000019020c3870616c6c65745f636f6e74656e741474797065734c53746f726167654173736574735265636f7264041c42616c616e63650118000801506f626a6563745f6372656174696f6e5f6c6973741d0201845665633c446174614f626a6563744372656174696f6e506172616d65746572733e00015865787065637465645f646174615f73697a655f66656518011c42616c616e636500001d020000022102002102083870616c6c65745f73746f7261676570446174614f626a6563744372656174696f6e506172616d6574657273000008011073697a6528010c75363400013c697066735f636f6e74656e745f696430011c5665633c75383e00002502083870616c6c65745f73746f7261676568446973747269627574696f6e4275636b657449645265636f72640868446973747269627574696f6e4275636b657446616d696c79496401285c446973747269627574696f6e4275636b6574496e646578012800080174646973747269627574696f6e5f6275636b65745f66616d696c795f6964280168446973747269627574696f6e4275636b657446616d696c794964000164646973747269627574696f6e5f6275636b65745f696e64657828015c446973747269627574696f6e4275636b6574496e6465780000290204184f7074696f6e0404540119020108104e6f6e6500000010536f6d650400190200000100002d02042042547265654d617008044b0128045601bd010004003102000000310200000235020035020000040828bd01003902042042547265655365740404540125020004003d020000003d0200000225020041020c3870616c6c65745f636f6e74656e74147479706573744368616e6e656c557064617465506172616d65746572735265636f7264103453746f7261676541737365747301190230446174614f626a65637449640128204d656d626572496401281c42616c616e63650118001801406173736574735f746f5f75706c6f6164290201544f7074696f6e3c53746f726167654173736574733e0001206e65775f6d6574613101013c4f7074696f6e3c5665633c75383e3e0001406173736574735f746f5f72656d6f76656901015842547265655365743c446174614f626a65637449643e000134636f6c6c61626f7261746f7273450201cc4f7074696f6e3c42547265654d61703c4d656d62657249642c204368616e6e656c4167656e745065726d697373696f6e733e3e00019465787065637465645f646174615f6f626a6563745f73746174655f626c6f61745f626f6e6418011c42616c616e636500016c73746f726167655f6275636b6574735f6e756d5f7769746e6573730102012c4f7074696f6e3c7533323e0000450204184f7074696f6e040454012d020108104e6f6e6500000010536f6d6504002d02000001000049020c3870616c6c65745f636f6e74656e7414747970657374566964656f4372656174696f6e506172616d65746572735265636f72640c3453746f72616765417373657473011902544e667449737375616e6365506172616d65746572730109021c42616c616e6365011800180118617373657473290201544f7074696f6e3c53746f726167654173736574733e0001106d6574613101013c4f7074696f6e3c5665633c75383e3e0001386175746f5f69737375655f6e66744d0201744f7074696f6e3c4e667449737375616e6365506172616d65746572733e00017c65787065637465645f766964656f5f73746174655f626c6f61745f626f6e6418011c42616c616e636500019465787065637465645f646174615f6f626a6563745f73746174655f626c6f61745f626f6e6418011c42616c616e636500016c73746f726167655f6275636b6574735f6e756d5f7769746e65737310010c75333200004d0204184f7074696f6e0404540109020108104e6f6e6500000010536f6d6504000902000001000051020c3870616c6c65745f636f6e74656e741474797065736c566964656f557064617465506172616d65746572735265636f7264103453746f7261676541737365747301190230446174614f626a65637449640128544e667449737375616e6365506172616d65746572730109021c42616c616e63650118001801406173736574735f746f5f75706c6f6164290201544f7074696f6e3c53746f726167654173736574733e0001206e65775f6d6574613101013c4f7074696f6e3c5665633c75383e3e0001406173736574735f746f5f72656d6f76656901015842547265655365743c446174614f626a65637449643e0001386175746f5f69737375655f6e66744d0201744f7074696f6e3c4e667449737375616e6365506172616d65746572733e00019465787065637465645f646174615f6f626a6563745f73746174655f626c6f61745f626f6e6418011c42616c616e636500016c73746f726167655f6275636b6574735f6e756d5f7769746e6573730102012c4f7074696f6e3c7533323e00005502042042547265654d617008044b010804560159020004006502000000590204204254726565536574040454015d0200040061020000005d02143870616c6c65745f636f6e74656e742c7065726d697373696f6e733463757261746f725f67726f7570386974657261626c655f656e756d735c436f6e74656e744d6f6465726174696f6e416374696f6e0001182448696465566964656f0000002c486964654368616e6e656c000100684368616e67654368616e6e656c466561747572655374617475730400d50101585061757361626c654368616e6e656c466561747572650002004444656c657465566964656f4173736574730400980110626f6f6c0003006c44656c6574654e6f6e566964656f4368616e6e656c417373657473000400585570646174654368616e6e656c4e66744c696d6974730005000061020000025d02006502000002690200690200000408085902006d020c3870616c6c65745f636f6e74656e74147479706573705472616e73666572436f6d6d69746d656e74506172616d65746572730c5c4368616e6e656c436f6c6c61626f7261746f72734d6170012d021c42616c616e63650118285472616e7366657249640128000c01446e65775f636f6c6c61626f7261746f72732d02015c4368616e6e656c436f6c6c61626f7261746f72734d6170000114707269636518011c42616c616e636500012c7472616e736665725f69642801285472616e736665724964000071020c3870616c6c65745f636f6e74656e74147479706573905570646174654368616e6e656c5061796f757473506172616d65746572735265636f72640c7c4368616e6e656c5061796f7574735061796c6f6164506172616d65746572730175021c42616c616e636501181048617368012c00140128636f6d6d69746d656e74790201304f7074696f6e3c486173683e00011c7061796c6f61647d02019c4f7074696f6e3c4368616e6e656c5061796f7574735061796c6f6164506172616d65746572733e00014c6d696e5f636173686f75745f616c6c6f7765644501013c4f7074696f6e3c42616c616e63653e00014c6d61785f636173686f75745f616c6c6f7765644501013c4f7074696f6e3c42616c616e63653e0001606368616e6e656c5f636173686f7574735f656e61626c6564810201304f7074696f6e3c626f6f6c3e000075020c3870616c6c65745f636f6e74656e74147479706573944368616e6e656c5061796f7574735061796c6f6164506172616d65746572735265636f7264041c42616c616e63650118000c01586f626a6563745f6372656174696f6e5f706172616d7321020170446174614f626a6563744372656174696f6e506172616d657465727300015865787065637465645f646174615f73697a655f66656518011c42616c616e636500019465787065637465645f646174615f6f626a6563745f73746174655f626c6f61745f626f6e6418011c42616c616e63650000790204184f7074696f6e040454012c0108104e6f6e6500000010536f6d6504002c00000100007d0204184f7074696f6e0404540175020108104e6f6e6500000010536f6d65040075020000010000810204184f7074696f6e04045401980108104e6f6e6500000010536f6d65040098000001000085020c3870616c6c65745f636f6e74656e741474797065735c4368616e6e656c46756e647344657374696e6174696f6e04244163636f756e74496401000108244163636f756e74496404000001244163636f756e74496400000034436f756e63696c4275646765740001000089020c3870616c6c65745f636f6e74656e74147479706573384e66744c696d6974506572696f64000108144461696c79000000185765656b6c79000100008d02083870616c6c65745f73746f72616765205261774576656e74303c53746f726167654275636b65744964012820576f726b65724964012830446174614f626a656374496401284055706c6f6164506172616d65746572730191021442616749640195023044796e616d69634261674964019d02244163636f756e74496401001c42616c616e6365011868446973747269627574696f6e4275636b657446616d696c794964012850446973747269627574696f6e4275636b657449640125025c446973747269627574696f6e4275636b6574496e64657801287044796e616d69634261674372656174696f6e506172616d657465727301a10201a85053746f726167654275636b657443726561746564140028013c53746f726167654275636b657449640000350101404f7074696f6e3c576f726b657249643e0000980110626f6f6c000028010c753634000028010c75363400001c94456d697473206f6e206372656174696e67207468652073746f72616765206275636b65742e18506172616d734c2d2073746f72616765206275636b6574204944402d20696e766974656420776f726b65726c2d20666c61672022616363657074696e675f6e65775f6261677322642d2073697a65206c696d697420666f7220766f75636865722c702d206f626a65637473206c696d697420666f7220766f75636865722c7c53746f726167654275636b6574496e7669746174696f6e41636365707465640c0028013c53746f726167654275636b657449640000280120576f726b6572496400000001244163636f756e744964000114c4456d697473206f6e20616363657074696e67207468652073746f72616765206275636b657420696e7669746174696f6e2e18506172616d734c2d2073746f72616765206275636b65742049444c2d20696e766974656420776f726b65722049445c2d207472616e736163746f72206163636f756e742049446c53746f726167654275636b65747355706461746564466f724261670c0095020114426167496400006901016442547265655365743c53746f726167654275636b657449643e00006901016442547265655365743c53746f726167654275636b657449643e000214a8456d697473206f6e207570646174696e672073746f72616765206275636b65747320666f72206261672e18506172616d73202d20626167204944982d2073746f72616765206275636b65747320746f2061646420494420636f6c6c656374696f6ea42d2073746f72616765206275636b65747320746f2072656d6f766520494420636f6c6c656374696f6e4c446174614f626a6563747355706c6f616465640c006901015842547265655365743c446174614f626a65637449643e00009102014055706c6f6164506172616d6574657273000018011c42616c616e636500031480456d697473206f6e2075706c6f6164696e672064617461206f626a656374732e18506172616d73482d2064617461206f626a6563747320494473782d20696e697469616c2075706c6f6164696e6720706172616d6574657273782d20737461746520626c6f617420626f6e6420666f72206f626a656374736853746f726167654f70657261746f724d657461646174615365740c0028013c53746f726167654275636b657449640000280120576f726b65724964000030011c5665633c75383e000414bc456d697473206f6e2073657474696e67207468652073746f72616765206f70657261746f72206d657461646174612e18506172616d734c2d2073746f72616765206275636b65742049444c2d20696e766974656420776f726b6572204944282d206d657461646174617453746f726167654275636b6574566f75636865724c696d6974735365740c0028013c53746f726167654275636b65744964000028010c753634000028010c753634000514cc456d697473206f6e2073657474696e67207468652073746f72616765206275636b657420766f7563686572206c696d6974732e18506172616d734c2d2073746f72616765206275636b6574204944782d206e657720746f74616c206f626a656374732073697a65206c696d6974802d206e657720746f74616c206f626a65637473206e756d626572206c696d69746850656e64696e67446174614f626a656374734163636570746564100028013c53746f726167654275636b657449640000280120576f726b65724964000095020114426167496400006901015842547265655365743c446174614f626a65637449643e000618a0456d697473206f6e20616363657074696e672070656e64696e672064617461206f626a656374732e18506172616d734c2d2073746f72616765206275636b6574204944842d20776f726b6572204944202873746f726167652070726f766964657220494429202d20626167204944582d2070656e64696e672064617461206f626a656374738053746f726167654275636b6574496e7669746174696f6e43616e63656c6c6564040028013c53746f726167654275636b6574496400070cc8456d697473206f6e2063616e63656c6c696e67207468652073746f72616765206275636b657420696e7669746174696f6e2e18506172616d734c2d2073746f72616765206275636b65742049447053746f726167654275636b65744f70657261746f72496e7669746564080028013c53746f726167654275636b657449640000280120576f726b65724964000810c0456d697473206f6e207468652073746f72616765206275636b6574206f70657261746f7220696e7669746174696f6e2e18506172616d734c2d2073746f72616765206275636b6574204944a82d206f70657261746f7220776f726b6572204944202873746f726167652070726f7669646572204944297053746f726167654275636b65744f70657261746f7252656d6f766564040028013c53746f726167654275636b6574496400090cb4456d697473206f6e207468652073746f72616765206275636b6574206f70657261746f722072656d6f76616c2e18506172616d734c2d2073746f72616765206275636b65742049446c55706c6f6164696e67426c6f636b537461747573557064617465640400980110626f6f6c000a0c0501456d697473206f6e206368616e67696e67207468652073697a652d62617365642070726963696e67206f66206e6577206f626a656374732075706c6f616465642e18506172616d73302d206e6577207374617475737c446174614f626a6563745065724d6567616279746546656555706461746564040018011c42616c616e6365000b0c0501456d697473206f6e206368616e67696e67207468652073697a652d62617365642070726963696e67206f66206e6577206f626a656374732075706c6f616465642e18506172616d734c2d206e657720646174612073697a65206665658053746f726167654275636b6574735065724261674c696d697455706461746564040010010c753332000c0cf4456d697473206f6e206368616e67696e6720746865202253746f72616765206275636b657473207065722062616722206e756d626572206c696d69742e18506172616d732c2d206e6577206c696d69749453746f726167654275636b657473566f75636865724d61784c696d69747355706461746564080028010c753634000028010c753634000d10ec456d697473206f6e206368616e67696e6720746865202253746f72616765206275636b65747320766f7563686572206d6178206c696d697473222e18506172616d73602d206e6577206f626a656374732073697a65206c696d6974682d206e6577206f626a65637473206e756d626572206c696d697440446174614f626a656374734d6f7665640c00950201144261674964000095020114426167496400006901015842547265655365743c446174614f626a65637449643e000e14a8456d697473206f6e206d6f76696e672064617461206f626a65637473206265747765656e20626167732e18506172616d733c2d20736f7572636520626167204944502d2064657374696e6174696f6e20626167204944442d2064617461206f626a6563742049447348446174614f626a6563747344656c657465640c000001244163636f756e744964000095020114426167496400006901015842547265655365743c446174614f626a65637449643e000f14a4456d697473206f6e2064617461206f626a656374732064656c6574696f6e2066726f6d20626167732e18506172616d73942d206163636f756e7420494420666f722074686520737461746520626c6f617420626f6e64202d20626167204944442d2064617461206f626a656374204944736853746f726167654275636b657453746174757355706461746564080028013c53746f726167654275636b657449640000980110626f6f6c00101098456d697473206f6e2073746f72616765206275636b657420737461747573207570646174652e18506172616d734c2d2073746f72616765206275636b6574204944302d206e6577207374617475733c557064617465426c61636b6c6973740800a502014442547265655365743c5665633c75383e3e0000a502014442547265655365743c5665633c75383e3e001110c4456d697473206f6e207570646174696e672074686520626c61636b6c69737420776974682064617461206861736865732e18506172616d73942d2068617368657320746f2072656d6f76652066726f6d2074686520626c61636b6c697374802d2068617368657320746f2061646420746f2074686520626c61636b6c6973744444796e616d696342616744656c6574656404009d02013044796e616d6963426167496400120c80456d697473206f6e2064656c6574696e6720612064796e616d6963206261672e18506172616d73402d2064796e616d6963206261672049444444796e616d6963426167437265617465640800a102017044796e616d69634261674372656174696f6e506172616d657465727300006901015842547265655365743c446174614f626a65637449643e00131080456d697473206f6e206372656174696e6720612064796e616d6963206261672e18506172616d73842d2064796e616d696320626167206372656174696f6e20706172616d65746572736c2d2075706c6f616465642064617461206f626a656374732069647338566f75636865724368616e676564080028013c53746f726167654275636b657449640000ad02011c566f7563686572001410cc456d697473206f6e206368616e67696e672074686520766f756368657220666f7220612073746f72616765206275636b65742e18506172616d734c2d2073746f72616765206275636b6574204944342d206e657720766f75636865725053746f726167654275636b657444656c65746564040028013c53746f726167654275636b6574496400150c84456d697473206f6e2073746f72616765206275636b65742064656c6574696e672e18506172616d734c2d2073746f72616765206275636b6574204944dc4e756d6265724f6653746f726167654275636b657473496e44796e616d69634261674372656174696f6e506f6c696379557064617465640800b102013844796e616d696342616754797065000010010c7533320016103d01456d697473206f6e207570646174696e6720746865206e756d626572206f662073746f72616765206275636b65747320696e2064796e616d696320626167206372656174696f6e20706f6c6963792e18506172616d73482d2064796e616d69632062616720747970657c2d206e6577206e756d626572206f662073746f72616765206275636b6574737c446973747269627574696f6e4275636b657446616d696c79437265617465640400280168446973747269627574696f6e4275636b657446616d696c79496400170cb4456d697473206f6e206372656174696e6720646973747269627574696f6e206275636b65742066616d696c792e18506172616d737c2d20646973747269627574696f6e2066616d696c79206275636b65742049447c446973747269627574696f6e4275636b657446616d696c7944656c657465640400280168446973747269627574696f6e4275636b657446616d696c79496400180cb4456d697473206f6e2064656c6574696e6720646973747269627574696f6e206275636b65742066616d696c792e18506172616d737c2d20646973747269627574696f6e2066616d696c79206275636b657420494464446973747269627574696f6e4275636b6574437265617465640c00280168446973747269627574696f6e4275636b657446616d696c7949640000980110626f6f6c000025020150446973747269627574696f6e4275636b6574496400191498456d697473206f6e206372656174696e6720646973747269627574696f6e206275636b65742e18506172616d737c2d20646973747269627574696f6e206275636b65742066616d696c79204944502d20616363657074696e67206e65772062616773602d20646973747269627574696f6e206275636b65742049447c446973747269627574696f6e4275636b657453746174757355706461746564080025020150446973747269627574696f6e4275636b657449640000980110626f6f6c001a10ec456d697473206f6e2073746f72616765206275636b657420737461747573207570646174652028616363657074696e67206e65772062616773292e18506172616d73602d20646973747269627574696f6e206275636b6574204944842d206e6577207374617475732028616363657074696e67206e657720626167732964446973747269627574696f6e4275636b657444656c65746564040025020150446973747269627574696f6e4275636b65744964001b0c98456d697473206f6e2064656c6574696e6720646973747269627574696f6e206275636b65742e18506172616d73602d20646973747269627574696f6e206275636b657420494480446973747269627574696f6e4275636b65747355706461746564466f7242616710009502011442616749640000280168446973747269627574696f6e4275636b657446616d696c79496400006901018442547265655365743c446973747269627574696f6e4275636b6574496e6465783e00006901018442547265655365743c446973747269627574696f6e4275636b6574496e6465783e001c14bc456d697473206f6e207570646174696e6720646973747269627574696f6e206275636b65747320666f72206261672e18506172616d73202d20626167204944982d2073746f72616765206275636b65747320746f2061646420494420636f6c6c656374696f6ea42d2073746f72616765206275636b65747320746f2072656d6f766520494420636f6c6c656374696f6e94446973747269627574696f6e4275636b6574735065724261674c696d697455706461746564040010010c753332001d0c0901456d697473206f6e206368616e67696e67207468652022446973747269627574696f6e206275636b657473207065722062616722206e756d626572206c696d69742e18506172616d732c2d206e6577206c696d697474446973747269627574696f6e4275636b65744d6f646555706461746564080025020150446973747269627574696f6e4275636b657449640000980110626f6f6c001e10e0456d697473206f6e2073746f72616765206275636b6574206d6f6465207570646174652028646973747269627574696e6720666c6167292e18506172616d73602d20646973747269627574696f6e206275636b6574204944382d20646973747269627574696e67a446616d696c696573496e44796e616d69634261674372656174696f6e506f6c696379557064617465640800b102013844796e616d6963426167547970650000b50201a442547265654d61703c446973747269627574696f6e4275636b657446616d696c7949642c207533323e001f102d01456d697473206f6e2064796e616d696320626167206372656174696f6e20706f6c696379207570646174652028646973747269627574696f6e206275636b65742066616d696c696573292e18506172616d73482d2064796e616d6963206261672074797065742d2066616d696c69657320616e64206275636b6574206e756d6265727384446973747269627574696f6e4275636b65744f70657261746f72496e7669746564080025020150446973747269627574696f6e4275636b657449640000280120576f726b657249640020101101456d697473206f6e206372656174696e67206120646973747269627574696f6e206275636b657420696e7669746174696f6e20666f7220746865206f70657261746f722e18506172616d73602d20646973747269627574696f6e206275636b65742049442c2d20776f726b657220494494446973747269627574696f6e4275636b6574496e7669746174696f6e43616e63656c6c6564080025020150446973747269627574696f6e4275636b657449640000280120576f726b657249640021101501456d697473206f6e2063616e63656c696e67206120646973747269627574696f6e206275636b657420696e7669746174696f6e20666f7220746865206f70657261746f722e18506172616d73602d20646973747269627574696f6e206275636b6574204944502d206f70657261746f7220776f726b657220494490446973747269627574696f6e4275636b6574496e7669746174696f6e41636365707465640800280120576f726b65724964000025020150446973747269627574696f6e4275636b657449640022101501456d697473206f6e20616363657074696e67206120646973747269627574696f6e206275636b657420696e7669746174696f6e20666f7220746865206f70657261746f722e18506172616d732c2d20776f726b6572204944602d20646973747269627574696f6e206275636b657420494474446973747269627574696f6e4275636b65744d657461646174615365740c00280120576f726b65724964000025020150446973747269627574696f6e4275636b65744964000030011c5665633c75383e0023140101456d697473206f6e2073657474696e6720746865206d65746164617461206279206120646973747269627574696f6e206275636b6574206f70657261746f722e18506172616d732c2d20776f726b6572204944602d20646973747269627574696f6e206275636b6574204944282d206d6574616461746184446973747269627574696f6e4275636b65744f70657261746f7252656d6f766564080025020150446973747269627574696f6e4275636b657449640000280120576f726b65724964002410c8456d697473206f6e2074686520646973747269627574696f6e206275636b6574206f70657261746f722072656d6f76616c2e18506172616d73602d20646973747269627574696f6e206275636b6574204944842d20646973747269627574696f6e206275636b6574206f70657261746f722049448c446973747269627574696f6e4275636b657446616d696c794d657461646174615365740800280168446973747269627574696f6e4275636b657446616d696c794964000030011c5665633c75383e002510f8456d697473206f6e2073657474696e6720746865206d65746164617461206279206120646973747269627574696f6e206275636b65742066616d696c792e18506172616d737c2d20646973747269627574696f6e206275636b65742066616d696c79204944282d206d6574616461746190446174614f626a6563745374617465426c6f6174426f6e6456616c756555706461746564040018011c42616c616e636500260ccc456d697473206f6e207570646174696e67207468652064617461206f626a65637420737461746520626c6f617420626f6e642e18506172616d73602d20737461746520626c6f617420626f6e642076616c756548446174614f626a65637473557064617465640c009102014055706c6f6164506172616d657465727300006901015842547265655365743c446174614f626a65637449643e00006901015842547265655365743c446174614f626a65637449643e0027140d01456d697473206f6e2073746f7261676520617373657473206265696e672075706c6f6164656420616e642064656c65746564206174207468652073616d652074696d6518506172616d73482d2055706c6f6164506172616d6574657273742d20496473206f66207468652075706c6f61646564206f626a65637473702d20496473206f66207468652072656d6f766564206f626a656374735c53746f726167654f70657261746f7252656d61726b65640c00280120576f726b65724964000028013c53746f726167654275636b65744964000030011c5665633c75383e002814a4456d697473206f6e2053746f72616765204f70657261746f72206d616b696e6720612072656d61726b18506172616d73582d206f70657261746f72277320776f726b65722069644c2d2073746f72616765206275636b6574206964402d2072656d61726b206d65737361676570446973747269627574696f6e4f70657261746f7252656d61726b65640c00280120576f726b65724964000025020150446973747269627574696f6e4275636b65744964000030011c5665633c75383e002914b8456d697473206f6e20446973747269627574696f6e204f70657261746f72206d616b696e6720612072656d61726b18506172616d73582d206f70657261746f72277320776f726b6572206964602d20646973747269627574696f6e206275636b6574206964402d2072656d61726b206d6573736167650c5c4576656e747320666f722074686973206d6f64756c652e003853746f72616765206576656e74739102083870616c6c65745f73746f726167655855706c6f6164506172616d65746572735265636f72640c144261674964019502244163636f756e74496401001c42616c616e63650118001401186261675f69649502011442616749640001506f626a6563745f6372656174696f6e5f6c6973741d0201845665633c446174614f626a6563744372656174696f6e506172616d65746572733e00018873746174655f626c6f61745f626f6e645f736f757263655f6163636f756e745f69640001244163636f756e74496400015865787065637465645f646174615f73697a655f66656518011c42616c616e636500019465787065637465645f646174615f6f626a6563745f73746174655f626c6f61745f626f6e6418011c42616c616e636500009502083870616c6c65745f73746f726167652442616749645479706508204d656d62657249640128244368616e6e656c4964012801081853746174696304009902012c53746174696342616749640000001c44796e616d696304009d02019444796e616d69634261674964547970653c4d656d62657249642c204368616e6e656c49643e000100009902083870616c6c65745f73746f726167652c53746174696342616749640001081c436f756e63696c00000030576f726b696e6747726f7570040099010130576f726b696e6747726f7570000100009d02083870616c6c65745f73746f726167654044796e616d696342616749645479706508204d656d62657249640128244368616e6e656c496401280108184d656d62657204002801204d656d62657249640000001c4368616e6e656c04002801244368616e6e656c496400010000a102083870616c6c65745f73746f726167657844796e4261674372656174696f6e506172616d65746572735265636f726414144261674964019d02244163636f756e74496401001c42616c616e636501183c53746f726167654275636b65744964012850446973747269627574696f6e4275636b65744964012502001c01186261675f69649d02011442616749640001506f626a6563745f6372656174696f6e5f6c6973741d0201845665633c446174614f626a6563744372656174696f6e506172616d65746572733e00018873746174655f626c6f61745f626f6e645f736f757263655f6163636f756e745f69640001244163636f756e74496400015865787065637465645f646174615f73697a655f66656518011c42616c616e636500019465787065637465645f646174615f6f626a6563745f73746174655f626c6f61745f626f6e6418011c42616c616e636500013c73746f726167655f6275636b6574736901016442547265655365743c53746f726167654275636b657449643e000150646973747269627574696f6e5f6275636b6574733902017842547265655365743c446973747269627574696f6e4275636b657449643e0000a502042042547265655365740404540130000400a902000000a9020000023000ad02083870616c6c65745f73746f726167651c566f7563686572000010012873697a655f6c696d697428010c7536340001346f626a656374735f6c696d697428010c75363400012473697a655f7573656428010c7536340001306f626a656374735f7573656428010c7536340000b102083870616c6c65745f73746f726167653844796e616d696342616754797065000108184d656d6265720000001c4368616e6e656c00010000b502042042547265654d617008044b012804560110000400b902000000b902000002bd0200bd0200000408281000c1020c5070616c6c65745f70726f6a6563745f746f6b656e186576656e7473205261774576656e742c1c42616c616e63650118284a6f7942616c616e636501181c546f6b656e49640128244163636f756e7449640100204d656d626572496401282c426c6f636b4e756d6265720110385472616e73666572506f6c69637901c5025c546f6b656e49737375616e6365506172616d657465727301c9024856616c6964617465645472616e736665727301fd0224546f6b656e53616c6501210320416d6d4375727665012503015c58546f6b656e416d6f756e745472616e73666572726564100028011c546f6b656e496400002801204d656d62657249640000fd02014856616c6964617465645472616e7366657273000030011c5665633c75383e000018ac546f6b656e20616d6f756e74206973207472616e736665727265642066726f6d2073726320746f206473741c506172616d733a482d20746f6b656e206964656e746966696572482d20736f75726365206d656d62657220696459012d206d617020636f6e7461696e696e672076616c696461746564206f7574707574732028616d6f756e7420696e646578656420627920286d656d6265725f6964202b206163636f756e74206578697374616e63652929542d207472616e736665722773206d6574616461746178546f6b656e416d6f756e745472616e736665727265644279497373756572100028011c546f6b656e496400002801204d656d62657249640000fd02014856616c6964617465645472616e7366657273000030011c5665633c75383e00012088546f6b656e20616d6f756e74207472616e73666572726564206279206973737565721c506172616d733a482d20746f6b656e206964656e7469666965726c2d20736f75726365202869737375657229206d656d626572206964882d206d617020636f6e7461696e696e672076616c696461746564206f7574707574732d01202028616d6f756e742c206f70742e2076657374696e67207363686564756c652c206f70742e2076657374696e6720636c65616e7570206b657929206461746120696e6465786564206279882020286163636f756e745f6964202b206163636f756e74206578697374616e636529542d207472616e736665722773206d6574616461746160506174726f6e61676552617465446563726561736564546f080028011c546f6b656e49640000f9020128596561726c795261746500021060506174726f6e6167652072617465206465637265617365641c506172616d733a482d20746f6b656e206964656e746966696572502d206e657720706174726f6e616765207261746558506174726f6e616765437265646974436c61696d65640c0028011c546f6b656e4964000018011c42616c616e636500002801204d656d62657249640003148c506174726f6e6167652063726564697420636c61696d65642062792063726561746f721c506172616d733a482d20746f6b656e206964656e7469666965723c2d2063726564697420616d6f756e742c2d206d656d62657220696448526576656e756553706c6974497373756564100028011c546f6b656e4964000010012c426c6f636b4e756d626572000010012c426c6f636b4e756d62657200001801284a6f7942616c616e636500041850526576656e75652053706c6974206973737565641c506172616d733a482d20746f6b656e206964656e746966696572782d207374617274696e6720626c6f636b20666f72207468652073706c69745c2d206475726174696f6e206f66207468652073706c6974742d204a4f5920616c6c6f636174656420666f72207468652073706c697454526576656e756553706c697446696e616c697a65640c0028011c546f6b656e496400000001244163636f756e74496400001801284a6f7942616c616e63650005145c526576656e75652053706c69742066696e616c697a65641c506172616d733a482d20746f6b656e206964656e746966696572a42d207265636f76657279206163636f756e7420666f7220746865206c6566746f7665722066756e6473402d206c6566746f7665722066756e64735c55736572506172746963697061746564496e53706c6974140028011c546f6b656e496400002801204d656d6265724964000018011c42616c616e636500001801284a6f7942616c616e63650000100138526576656e756553706c6974496400061c8855736572207061727469706174656420696e206120726576656e75652073706c69741c506172616d733a482d20746f6b656e206964656e746966696572642d207061727469636970616e742773206d656d6265722069647c2d207573657220616c6c6f6361746564207374616b65642062616c616e63657c2d206469766964656e6420616d6f756e7420284a4f5929206772616e746564682d20726576656e75652073706c6974206964656e74696669657240526576656e756553706c69744c6566740c0028011c546f6b656e496400002801204d656d6265724964000018011c42616c616e63650007145c55736572206c65667420726576656e75652073706c69741c506172616d733a482d20746f6b656e206964656e746966696572702d2065782d7061727469636970616e742773206d656d626572206964442d20616d6f756e7420756e7374616b6564544d656d6265724a6f696e656457686974656c6973740c0028011c546f6b656e496400002801204d656d62657249640000c50201385472616e73666572506f6c6963790008145c4d656d626572206a6f696e65642077686974656c6973741c506172616d733a482d20746f6b656e206964656e7469666965722c2d206d656d626572206964642d206f6e676f696e67207472616e7366657220706f6c6963793c4163636f756e744475737465644279100028011c546f6b656e496400002801204d656d626572496400000001244163636f756e7449640000c50201385472616e73666572506f6c696379000918384163636f756e74204475737465641c506172616d733a482d20746f6b656e206964656e7469666965729c2d206964206f662074686520647573746564206163636f756e74206f776e6572206d656d6265728c2d206163636f756e7420746861742063616c6c6564207468652065787472696e736963402d206f6e676f696e6720706f6c69637934546f6b656e4465697373756564040028011c546f6b656e4964000a0c38546f6b656e2044656973737565641c506172616d733a282d20746f6b656e2069642c546f6b656e497373756564080028011c546f6b656e49640000c902015c546f6b656e49737375616e6365506172616d6574657273000b1030546f6b656e204973737565641c506172616d733a282d20746f6b656e2069646c2d20746f6b656e2069737375616e636520706172616d657465727350546f6b656e53616c65496e697469616c697a6564100028011c546f6b656e4964000010012c546f6b656e53616c654964000021030124546f6b656e53616c6500003101013c4f7074696f6e3c5665633c75383e3e000c1864546f6b652053616c652077617320496e697469616c697a65641c506172616d733a282d20746f6b656e2069643c2d20746f6b656e2073616c65206964442d20746f6b656e2073616c652064617461542d20746f6b656e2073616c65206d65746164617461605570636f6d696e67546f6b656e53616c6555706461746564100028011c546f6b656e4964000010012c546f6b656e53616c65496400000102014c4f7074696f6e3c426c6f636b4e756d6265723e00000102014c4f7074696f6e3c426c6f636b4e756d6265723e000d187c5570636f6d696e6720546f6b656e2053616c652077617320557064617465641c506172616d733a282d20746f6b656e2069643c2d20746f6b656e2073616c65206964582d206e65772073616c6520737461727420626c6f636b4c2d206e65772073616c65206475726174696f6e54546f6b656e735075726368617365644f6e53616c65100028011c546f6b656e4964000010012c546f6b656e53616c654964000018011c42616c616e636500002801204d656d6265724964000e1860546f6b656e7320507572636861736564204f6e2053616c651c506172616d733a282d20746f6b656e2069643c2d20746f6b656e2073616c65206964702d20616d6f756e74206f6620746f6b656e73207075726368617365644c2d2062757965722773206d656d62657220696448546f6b656e53616c6546696e616c697a6564100028011c546f6b656e4964000010012c546f6b656e53616c654964000018011c42616c616e636500001801284a6f7942616c616e6365000f1850546f6b656e2053616c652046696e616c697a65641c506172616d733a282d20746f6b656e2069643c2d20746f6b656e2073616c652069648c2d20616d6f756e74206f6620756e736f6c6420746f6b656e73207265636f7665726564642d20616d6f756e74206f66204a4f5920636f6c6c6563746564945472616e73666572506f6c6963794368616e676564546f5065726d697373696f6e6c657373040028011c546f6b656e496400100ca45472616e7366657220506f6c696379204368616e67656420546f205065726d697373696f6e6c6573731c506172616d733a282d20746f6b656e20696430546f6b656e734275726e65640c0028011c546f6b656e496400002801204d656d6265724964000018011c42616c616e636500111434546f6b656e73204275726e65641c506172616d733a282d20746f6b656e2069642c2d206d656d626572206964642d206e756d626572206f6620746f6b656e73206275726e656430416d6d4163746976617465640c0028011c546f6b656e496400002801204d656d6265724964000025030120416d6d437572766500121434414d4d206163746976617465641c506172616d733a282d20746f6b656e2069642c2d206d656d626572206964782d20706172616d7320666f722074686520626f6e64696e6720637572766544546f6b656e73426f756768744f6e416d6d100028011c546f6b656e496400002801204d656d6265724964000018011c42616c616e636500001801284a6f7942616c616e636500131850546f6b656e7320426f75676874206f6e20414d4d1c506172616d733a282d20746f6b656e2069642c2d206d656d626572206964582d20616d6f756e74206f6620435254206d696e746564b42d20616d6f756e74206f66204a4f59206465706f736974656420696e746f2063757276652074726561737572793c546f6b656e73536f6c644f6e416d6d100028011c546f6b656e496400002801204d656d6265724964000018011c42616c616e636500001801284a6f7942616c616e636500141848546f6b656e7320536f6c64206f6e20414d4d1c506172616d733a282d20746f6b656e2069642c2d206d656d626572206964582d20616d6f756e74206f6620435254206275726e6564b42d20616d6f756e74206f66204a4f592077697468647261776e2066726f6d20637572766520747265617375727938416d6d44656163746976617465640c0028011c546f6b656e496400002801204d656d626572496400001801284a6f7942616c616e63650015143c414d4d2064656163746976617465641c506172616d733a282d20746f6b656e2069642c2d206d656d626572206964b82d20616d6d20747265617375727920616d6f756e74206275726e65642075706f6e20646561637469766174696f6e4c46726f7a656e537461747573557064617465640400980110626f6f6c00160c7050616c6c65742046726f7a656e2073746174757320746f67676c65641c506172616d733a882d206e65772066726f7a656e20737461747573202874727565207c2066616c736529085c4576656e747320666f722074686973206d6f64756c652e00c5020c5070616c6c65745f70726f6a6563745f746f6b656e147479706573385472616e73666572506f6c696379041048617368012c0108385065726d697373696f6e6c657373000000305065726d697373696f6e656404002c01104861736800010000c9020c5070616c6c65745f70726f6a6563745f746f6b656e1474797065735c546f6b656e49737375616e6365506172616d65746572730c3c546f6b656e416c6c6f636174696f6e01cd02505472616e73666572506f6c696379506172616d7301dd02204d656d6265724964012800140148696e697469616c5f616c6c6f636174696f6eed02018c42547265654d61703c4d656d62657249642c20546f6b656e416c6c6f636174696f6e3e00013c7472616e736665725f706f6c696379dd0201505472616e73666572506f6c696379506172616d73000138706174726f6e6167655f72617465f9020128596561726c7952617465000148726576656e75655f73706c69745f72617465d502011c5065726d696c6c0001206d6574616461746130011c5665633c75383e0000cd020c5070616c6c65745f70726f6a6563745f746f6b656e1474797065733c546f6b656e416c6c6f636174696f6e081c42616c616e636501185456657374696e675363686564756c65506172616d7301d10200080118616d6f756e7418011c42616c616e636500015c76657374696e675f7363686564756c655f706172616d73d90201744f7074696f6e3c56657374696e675363686564756c65506172616d733e0000d1020c5070616c6c65745f70726f6a6563745f746f6b656e1474797065735456657374696e675363686564756c65506172616d73042c426c6f636b4e756d6265720110000c015c6c696e6561725f76657374696e675f6475726174696f6e10012c426c6f636b4e756d62657200014c626c6f636b735f6265666f72655f636c69666610012c426c6f636b4e756d62657200015c636c6966665f616d6f756e745f70657263656e74616765d502011c5065726d696c6c0000d5020c3473705f61726974686d65746963287065725f7468696e67731c5065726d696c6c0000040010010c7533320000d90204184f7074696f6e04045401d1020108104e6f6e6500000010536f6d650400d1020000010000dd020c5070616c6c65745f70726f6a6563745f746f6b656e147479706573505472616e73666572506f6c696379506172616d73043c57686974656c697374506172616d7301e1020108385065726d697373696f6e6c657373000000305065726d697373696f6e65640400e102013c57686974656c697374506172616d7300010000e1020c5070616c6c65745f70726f6a6563745f746f6b656e1474797065733c57686974656c697374506172616d73081048617368012c7053696e676c65446174614f626a65637455706c6f6164506172616d7301e50200080128636f6d6d69746d656e742c01104861736800011c7061796c6f6164e90201904f7074696f6e3c53696e676c65446174614f626a65637455706c6f6164506172616d733e0000e5020c5070616c6c65745f70726f6a6563745f746f6b656e1474797065737053696e676c65446174614f626a65637455706c6f6164506172616d7304284a6f7942616c616e63650118000c01586f626a6563745f6372656174696f6e5f706172616d7321020170446174614f626a6563744372656174696f6e506172616d657465727300015865787065637465645f646174615f73697a655f6665651801284a6f7942616c616e636500019465787065637465645f646174615f6f626a6563745f73746174655f626c6f61745f626f6e641801284a6f7942616c616e63650000e90204184f7074696f6e04045401e5020108104e6f6e6500000010536f6d650400e5020000010000ed02042042547265654d617008044b0128045601cd02000400f102000000f102000002f50200f5020000040828cd0200f9020c5070616c6c65745f70726f6a6563745f746f6b656e14747970657328596561726c795261746500000400d502011c5065726d696c6c0000fd020c5070616c6c65745f70726f6a6563745f746f6b656e147479706573245472616e736665727308204d656d62657249640101031c5061796d656e740105030004001503016c42547265654d61703c4d656d62657249642c205061796d656e743e000001030c5070616c6c65745f70726f6a6563745f746f6b656e1474797065732456616c69646174656404204d656d626572496401280108204578697374696e6704002801204d656d62657249640000002c4e6f6e4578697374696e6704002801204d656d62657249640001000005030c5070616c6c65745f70726f6a6563745f746f6b656e1474797065734056616c6964617465645061796d656e7404485061796d656e745769746856657374696e670109030008011c7061796d656e74090301485061796d656e745769746856657374696e6700016476657374696e675f636c65616e75705f63616e6469646174650d0301544f7074696f6e3c56657374696e67536f757263653e000009030c5070616c6c65745f70726f6a6563745f746f6b656e147479706573485061796d656e745769746856657374696e67081c42616c616e636501185456657374696e675363686564756c65506172616d7301d10200080118616d6f756e7418011c42616c616e636500014076657374696e675f7363686564756c65d90201744f7074696f6e3c56657374696e675363686564756c65506172616d733e00000d0304184f7074696f6e0404540111030108104e6f6e6500000010536f6d6504001103000001000011030c5070616c6c65745f70726f6a6563745f746f6b656e1474797065733456657374696e67536f7572636500010c3c496e697469616c49737375616e63650000001053616c65040010012c546f6b656e53616c654964000100384973737565725472616e73666572040028010c753634000200001503042042547265654d617008044b0101030456010503000400190300000019030000021d03001d0300000408010305030021030c5070616c6c65745f70726f6a6563745f746f6b656e14747970657324546f6b656e53616c6518284a6f7942616c616e636501181c42616c616e636501182c426c6f636b4e756d62657201105456657374696e675363686564756c65506172616d7301d102204d656d62657249640128244163636f756e744964010000280128756e69745f70726963651801284a6f7942616c616e63650001347175616e746974795f6c65667418011c42616c616e636500013c66756e64735f636f6c6c65637465641801284a6f7942616c616e6365000134746f6b656e735f736f757263652801204d656d62657249640001506561726e696e67735f64657374696e6174696f6e9401444f7074696f6e3c4163636f756e7449643e00012c73746172745f626c6f636b10012c426c6f636b4e756d6265720001206475726174696f6e10012c426c6f636b4e756d62657200015c76657374696e675f7363686564756c655f706172616d73d90201744f7074696f6e3c56657374696e675363686564756c65506172616d733e0001386361705f7065725f6d656d6265724501013c4f7074696f6e3c42616c616e63653e0001346175746f5f66696e616c697a65980110626f6f6c000025030c5070616c6c65745f70726f6a6563745f746f6b656e14747970657320416d6d4375727665041c42616c616e63650118000c0114736c6f706518011c42616c616e6365000124696e7465726365707418011c42616c616e636500013c70726f76696465645f737570706c7918011c42616c616e636500002903085c70616c6c65745f70726f706f73616c735f656e67696e65205261774576656e740c2850726f706f73616c49640110204d656d626572496401282c426c6f636b4e756d626572011001185450726f706f73616c53746174757355706461746564080010012850726f706f73616c496400002d03016c50726f706f73616c5374617475733c426c6f636b4e756d6265723e0000106c456d697473206f6e2070726f706f73616c206372656174696f6e2e1c506172616d733a4c2d204964206f6620612070726f706f73616c2e582d204e65772070726f706f73616c207374617475732e5050726f706f73616c4465636973696f6e4d616465080010012850726f706f73616c496400003103014050726f706f73616c4465636973696f6e000110b0456d697473206f6e2067657474696e6720612070726f706f73616c20737461747573206465636973696f6e2e1c506172616d733a4c2d204964206f6620612070726f706f73616c2e4c2d2050726f706f73616c206465636973696f6e4050726f706f73616c4578656375746564080010012850726f706f73616c496400003903013c457865637574696f6e53746174757300021070456d697473206f6e2070726f706f73616c20657865637574696f6e2e1c506172616d733a6c2d204964206f66206120757064617465642070726f706f73616c2e702d2050726f706f73616c20657865637574696f6e207374617475732e14566f74656410002801204d656d6265724964000010012850726f706f73616c496400003d030120566f74654b696e64000030011c5665633c75383e00031880456d697473206f6e20766f74696e6720666f72207468652070726f706f73616c1c506172616d733a7c2d20566f746572202d206d656d626572206964206f66206120766f7465722e4c2d204964206f6620612070726f706f73616c2e3c2d204b696e64206f6620766f74652e302d20526174696f6e616c652e4450726f706f73616c43616e63656c6c656408002801204d656d6265724964000010012850726f706f73616c49640004108c456d697473206f6e20612070726f706f73616c206265696e672063616e63656c6c65641c506172616d733a6c2d204d656d626572204964206f66207468652070726f706f736572502d204964206f66207468652070726f706f73616c4050726f706f73657252656d61726b65640c002801204d656d6265724964000010012850726f706f73616c4964000030011c5665633c75383e00051084456d697473206f6e2070726f706f736572206d616b696e6720612072656d61726b342d2070726f706f736572206964342d2070726f706f73616c206964242d206d6573736167650c5c4576656e747320666f722074686973206d6f64756c652e005c50726f706f73616c7320656e67696e65206576656e74732d03105c70616c6c65745f70726f706f73616c735f656e67696e651474797065734470726f706f73616c5f73746174757365733850726f706f73616c537461747573042c426c6f636b4e756d6265720110010c184163746976650000004050656e64696e67457865637574696f6e040010012c426c6f636b4e756d6265720001006050656e64696e67436f6e737469747574696f6e616c697479000200003103105c70616c6c65745f70726f706f73616c735f656e67696e651474797065734470726f706f73616c5f73746174757365734050726f706f73616c4465636973696f6e00011c2043616e63656c65640000004443616e63656c6564427952756e74696d65000100185665746f65640002002052656a65637465640003001c536c61736865640004001c4578706972656400050020417070726f766564040035030160417070726f76656450726f706f73616c4465636973696f6e000600003503105c70616c6c65745f70726f706f73616c735f656e67696e651474797065734470726f706f73616c5f737461747573657360417070726f76656450726f706f73616c4465636973696f6e0001084050656e64696e67457865637574696f6e0000006050656e64696e67436f6e737469747574696f6e616c697479000100003903105c70616c6c65745f70726f706f73616c735f656e67696e651474797065734470726f706f73616c5f73746174757365733c457865637574696f6e5374617475730001082045786563757465640000003c457865637574696f6e4661696c65640401146572726f7230011c5665633c75383e000100003d030c5c70616c6c65745f70726f706f73616c735f656e67696e6514747970657320566f74654b696e640001101c417070726f76650000001852656a65637400010014536c6173680002001c4162737461696e000300004103086c70616c6c65745f70726f706f73616c735f64697363757373696f6e205261774576656e740c2054687265616449640128204d656d6265724964012818506f737449640128011434546872656164437265617465640800280120546872656164496400002801204d656d626572496400000464456d697473206f6e20746872656164206372656174696f6e2e2c506f7374437265617465641400280118506f7374496400002801204d656d626572496400002801205468726561644964000030011c5665633c75383e0000980110626f6f6c0001045c456d697473206f6e20706f7374206372656174696f6e2e2c506f7374557064617465641000280118506f7374496400002801204d656d626572496400002801205468726561644964000030011c5665633c75383e00020454456d697473206f6e20706f7374207570646174652e445468726561644d6f64654368616e6765640c0028012054687265616449640000450301785468726561644d6f64653c42547265655365743c4d656d62657249643e3e00002801204d656d626572496400030470456d697473206f6e20746872656164206d6f6465206368616e67652e2c506f737444656c6574656410002801204d656d6265724964000028012054687265616449640000280118506f737449640000980110626f6f6c00040454456d697473206f6e20706f73742064656c657465640c5c4576656e747320666f722074686973206d6f64756c652e005c50726f706f73616c7320656e67696e65206576656e747345030c6c70616c6c65745f70726f706f73616c735f64697363757373696f6e147479706573285468726561644d6f6465043c54687265616457686974656c6973740169010108104f70656e00000018436c6f73656404006901013c54687265616457686974656c697374000100004903085870616c6c65745f70726f706f73616c735f636f646578205261774576656e74106447656e6572616c50726f706f73616c506172616d6574657273014d034450726f706f73616c44657461696c734f660151032850726f706f73616c49640110205468726561644964012801043c50726f706f73616c43726561746564100010012850726f706f73616c496400004d03016447656e6572616c50726f706f73616c506172616d657465727300005103014450726f706f73616c44657461696c734f660000280120546872656164496400001858412070726f706f73616c2077617320637265617465641c506172616d733afc2d204964206f662061206e65776c7920637265617465642070726f706f73616c2061667465722069742077617320736176656420696e2073746f726167652e01012d2047656e6572616c2070726f706f73616c20706172616d657465722e20506172616d65746572732073686172656420627920616c6c2070726f706f73616c7349012d2050726f706f73616c2044657461696c732e20506172616d65746572206f662070726f706f73616c207769746820612076617269616e7420666f722065616368206b696e64206f662070726f706f73616c9c2d204964206f662061206e65776c7920637265617465642070726f706f73616c20746872656164085c4576656e747320666f722074686973206d6f64756c652e004d030c5870616c6c65745f70726f706f73616c735f636f6465781474797065735447656e6572616c50726f706f73616c506172616d730c204d656d62657249640128244163636f756e74496401002c426c6f636b4e756d6265720110001401246d656d6265725f69642801204d656d62657249640001147469746c6530011c5665633c75383e00012c6465736372697074696f6e30011c5665633c75383e0001487374616b696e675f6163636f756e745f69649401444f7074696f6e3c4163636f756e7449643e00015465786163745f657865637574696f6e5f626c6f636b0102014c4f7074696f6e3c426c6f636b4e756d6265723e000051030c5870616c6c65745f70726f706f73616c735f636f6465781474797065733c50726f706f73616c44657461696c731c1c42616c616e636501182c426c6f636b4e756d6265720110244163636f756e744964010020576f726b657249640128244f70656e696e67496401282850726f706f73616c49640110785570646174654368616e6e656c5061796f757473506172616d65746572730171020160185369676e616c040030011c5665633c75383e0000003852756e74696d6555706772616465040030011c5665633c75383e0001003846756e64696e67526571756573740400550301c45665633c46756e64696e6752657175657374506172616d65746572733c42616c616e63652c204163636f756e7449643e3e000200505365744d617856616c696461746f72436f756e74040010010c75333200030074437265617465576f726b696e6747726f75704c6561644f70656e696e6704005d0301b44372656174654f70656e696e67506172616d65746572733c426c6f636b4e756d6265722c2042616c616e63653e0004006c46696c6c576f726b696e6747726f75704c6561644f70656e696e6704006503015446696c6c4f70656e696e67506172616d657465727300050060557064617465576f726b696e6747726f75704275646765740c0018011c42616c616e6365000099010130576f726b696e6747726f757000009d01012c42616c616e63654b696e64000600744465637265617365576f726b696e6747726f75704c6561645374616b650c00280120576f726b65724964000018011c42616c616e6365000099010130576f726b696e6747726f757000070054536c617368576f726b696e6747726f75704c6561640c00280120576f726b65724964000018011c42616c616e6365000099010130576f726b696e6747726f757000080064536574576f726b696e6747726f75704c6561645265776172640c00280120576f726b6572496400004501013c4f7074696f6e3c42616c616e63653e000099010130576f726b696e6747726f7570000900645465726d696e617465576f726b696e6747726f75704c6561640400690301a85465726d696e617465526f6c65506172616d65746572733c576f726b657249642c2042616c616e63653e000a0044416d656e64436f6e737469747574696f6e040030011c5665633c75383e000b007443616e63656c576f726b696e6747726f75704c6561644f70656e696e6708002801244f70656e696e674964000099010130576f726b696e6747726f7570000c00485365744d656d626572736869705072696365040018011c42616c616e6365000d0064536574436f756e63696c427564676574496e6372656d656e74040018011c42616c616e6365000e0048536574436f756e63696c6f72526577617264040018011c42616c616e6365000f006c536574496e697469616c496e7669746174696f6e42616c616e6365040018011c42616c616e636500100064536574496e697469616c496e7669746174696f6e436f756e74040010010c753332001100805365744d656d626572736869704c656164496e7669746174696f6e51756f7461040010010c75333200120038536574526566657272616c43757404000801087538001300305665746f50726f706f73616c040010012850726f706f73616c496400140050557064617465476c6f62616c4e66744c696d69740800890201384e66744c696d6974506572696f64000028010c753634001500505570646174654368616e6e656c5061796f7574730400710201785570646174654368616e6e656c5061796f757473506172616d65746572730016005053657450616c6c6574466f7a656e5374617475730800980110626f6f6c00006d03013c467265657a61626c6550616c6c65740017000055030000025903005903083470616c6c65745f636f6d6d6f6e6046756e64696e6752657175657374506172616d6574657273081c42616c616e63650118244163636f756e74496401000008011c6163636f756e740001244163636f756e744964000118616d6f756e7418011c42616c616e636500005d030c5870616c6c65745f70726f706f73616c735f636f6465781474797065735c4372656174654f70656e696e67506172616d6574657273082c426c6f636b4e756d62657201101c42616c616e636501180010012c6465736372697074696f6e30011c5665633c75383e0001307374616b655f706f6c696379610301845374616b65506f6c6963793c426c6f636b4e756d6265722c2042616c616e63653e0001407265776172645f7065725f626c6f636b4501013c4f7074696f6e3c42616c616e63653e00011467726f757099010130576f726b696e6747726f7570000061030c5070616c6c65745f776f726b696e675f67726f75701474797065732c5374616b65506f6c696379082c426c6f636b4e756d62657201101c42616c616e63650118000801307374616b655f616d6f756e7418011c42616c616e63650001606c656176696e675f756e7374616b696e675f706572696f6410012c426c6f636b4e756d626572000065030c5870616c6c65745f70726f706f73616c735f636f6465781474797065735446696c6c4f70656e696e67506172616d657465727300000c01286f70656e696e675f6964280160776f726b696e675f67726f75703a3a4f70656e696e6749640001386170706c69636174696f6e5f6964280170776f726b696e675f67726f75703a3a4170706c69636174696f6e4964000134776f726b696e675f67726f757099010130576f726b696e6747726f7570000069030c5870616c6c65745f70726f706f73616c735f636f6465781474797065735c5465726d696e617465526f6c65506172616d65746572730820576f726b6572496401281c42616c616e63650118000c0124776f726b65725f6964280120576f726b6572496400013c736c617368696e675f616d6f756e744501013c4f7074696f6e3c42616c616e63653e00011467726f757099010130576f726b696e6747726f757000006d03083470616c6c65745f636f6d6d6f6e3c467265657a61626c6550616c6c65740001043050726f6a656374546f6b656e000000007103085070616c6c65745f776f726b696e675f67726f7570205261774576656e7430244f70656e696e6749640128344170706c69636174696f6e49640128684170706c69636174696f6e4964546f576f726b657249644d617001750320576f726b657249640128244163636f756e74496401001c42616c616e636501182c4f70656e696e67547970650181032c5374616b65506f6c696379016103604170706c794f6e4f70656e696e67506172616d6574657273018503204d656d626572496401281048617368012c0449018d030164304f70656e696e67416464656414002801244f70656e696e674964000030011c5665633c75383e00008103012c4f70656e696e675479706500006103012c5374616b65506f6c69637900004501013c4f7074696f6e3c42616c616e63653e00001c80456d697473206f6e20616464696e67206e6577206a6f62206f70656e696e672e1c506172616d733a302d204f70656e696e67206964342d204465736372697074696f6e782d204f70656e696e672054797065284c656164206f7220576f726b657229782d205374616b6520506f6c69637920666f7220746865206f70656e696e67482d205265776172642070657220626c6f636b404170706c6965644f6e4f70656e696e670800850301604170706c794f6e4f70656e696e67506172616d657465727300002801344170706c69636174696f6e4964000110dc456d697473206f6e20616464696e6720746865206170706c69636174696f6e20666f722074686520776f726b6572206f70656e696e672e1c506172616d733a542d204f70656e696e6720706172616d657465726573402d204170706c69636174696f6e206964344f70656e696e6746696c6c65640c002801244f70656e696e6749640000750301684170706c69636174696f6e4964546f576f726b657249644d617000006901015c42547265655365743c4170706c69636174696f6e49643e00021484456d697473206f6e2066696c6c696e6720746865206a6f62206f70656e696e672e1c506172616d733a4c2d20576f726b6572206f70656e696e67206964cc2d20576f726b6572206170706c69636174696f6e20696420746f2074686520776f726b65722069642064696374696f6e617279ac2d204170706c69636174696f6e6420696473207573656420746f2066696c6c20746865206f70656e696e67244c65616465725365740400280120576f726b6572496400030c88456d697473206f6e2073657474696e67207468652067726f7570206c65616465722e1c506172616d733a482d2047726f757020776f726b65722069642e60576f726b6572526f6c654163636f756e74557064617465640800280120576f726b6572496400000001244163636f756e744964000410c4456d697473206f6e207570646174696e672074686520726f6c65206163636f756e74206f662074686520776f726b65722e1c506172616d733a4c2d204964206f662074686520776f726b65722e802d20526f6c65206163636f756e74206964206f662074686520776f726b65722e2c4c6561646572556e7365740005047c456d697473206f6e20756e2d73657474696e6720746865206c65616465722e30576f726b65724578697465640400280120576f726b6572496400061070456d697473206f6e2065786974696e672074686520776f726b65722e1c506172616d733a302d20776f726b65722069642e302d20526174696f6e616c652e50576f726b6572537461727465644c656176696e670800280120576f726b6572496400003101013c4f7074696f6e3c5665633c75383e3e000710b4456d697473207768656e20776f726b65722073746172746564206c656176696e6720746865697220726f6c652e1c506172616d733a302d20576f726b65722069642e302d20526174696f6e616c652e405465726d696e61746564576f726b65720c00280120576f726b6572496400004501013c4f7074696f6e3c42616c616e63653e00003101013c4f7074696f6e3c5665633c75383e3e00081480456d697473206f6e207465726d696e6174696e672074686520776f726b65722e1c506172616d733a302d20776f726b65722069642e282d2050656e616c74792e302d20526174696f6e616c652e405465726d696e617465644c65616465720c00280120576f726b6572496400004501013c4f7074696f6e3c42616c616e63653e00003101013c4f7074696f6e3c5665633c75383e3e00091480456d697473206f6e207465726d696e6174696e6720746865206c65616465722e1c506172616d733a4c2d206c656164657220776f726b65722069642e282d2050656e616c74792e302d20526174696f6e616c652e305374616b65536c61736865641000280120576f726b65724964000018011c42616c616e6365000018011c42616c616e636500003101013c4f7074696f6e3c5665633c75383e3e000a18c0456d697473206f6e20736c617368696e672074686520726567756c617220776f726b65722f6c656164207374616b652e1c506172616d733a642d20726567756c617220776f726b65722f6c6561642069642e642d2061637475616c20736c61736865642062616c616e63652e702d2052657175657374656420736c61736865642062616c616e63652e302d20526174696f6e616c652e385374616b654465637265617365640800280120576f726b65724964000018011c42616c616e6365000b10c8456d697473206f6e2064656372656173696e672074686520726567756c617220776f726b65722f6c656164207374616b652e1c506172616d733a642d20726567756c617220776f726b65722f6c6561642069642e502d207374616b652064656c746120616d6f756e74385374616b65496e637265617365640800280120576f726b65724964000018011c42616c616e6365000c10c8456d697473206f6e20696e6372656173696e672074686520726567756c617220776f726b65722f6c656164207374616b652e1c506172616d733a642d20726567756c617220776f726b65722f6c6561642069642e502d207374616b652064656c746120616d6f756e74504170706c69636174696f6e57697468647261776e04002801344170706c69636174696f6e4964000d0c2501456d697473206f6e207769746864726177696e6720746865206170706c69636174696f6e20666f722074686520726567756c617220776f726b65722f6c656164206f70656e696e672e1c506172616d733a502d204a6f62206170706c69636174696f6e2069643c4f70656e696e6743616e63656c656404002801244f70656e696e674964000e0c8c456d697473206f6e2063616e63656c696e6720746865206a6f62206f70656e696e672e1c506172616d733a302d204f70656e696e6720696424427564676574536574040018011c42616c616e6365000f0cc8456d697473206f6e2073657474696e67207468652062756467657420666f722074686520776f726b696e672067726f75702e1c506172616d733a302d206e65772062756467657468576f726b65725265776172644163636f756e74557064617465640800280120576f726b6572496400000001244163636f756e744964001010cc456d697473206f6e207570646174696e672074686520726577617264206163636f756e74206f662074686520776f726b65722e1c506172616d733a4c2d204964206f662074686520776f726b65722e882d20526577617264206163636f756e74206964206f662074686520776f726b65722e64576f726b6572526577617264416d6f756e74557064617465640800280120576f726b6572496400004501013c4f7074696f6e3c42616c616e63653e001110c8456d697473206f6e207570646174696e67207468652072657761726420616d6f756e74206f662074686520776f726b65722e1c506172616d733a4c2d204964206f662074686520776f726b65722e482d205265776172642070657220626c6f636b44537461747573546578744368616e67656408002c01104861736800003101013c4f7074696f6e3c5665633c75383e3e001210dc456d697473206f6e207570646174696e6720746865207374617475732074657874206f662074686520776f726b696e672067726f75702e1c506172616d733a482d2073746174757320746578742068617368342d207374617475732074657874384275646765745370656e64696e670c000001244163636f756e744964000018011c42616c616e636500003101013c4f7074696f6e3c5665633c75383e3e001314c8456d697473206f6e206275646765742066726f6d2074686520776f726b696e672067726f7570206265696e67207370656e741c506172616d733a582d205265636569766572204163636f756e742049642e402d2042616c616e6365207370656e742e302d20526174696f6e616c652e28526577617264506169641000280120576f726b6572496400000001244163636f756e744964000018011c42616c616e63650000910301445265776172645061796d656e74547970650014186c456d697473206f6e20706179696e6720746865207265776172642e1c506172616d733a4c2d204964206f662074686520776f726b65722e582d205265636569766572204163636f756e742049642e202d20526577617264b42d205061796d656e74207479706520286d697373656420726577617264206f7220726567756c6172206f6e65296c4e65774d69737365645265776172644c6576656c526561636865640800280120576f726b6572496400004501013c4f7074696f6e3c42616c616e63653e00151090456d697473206f6e207265616368696e67206e6577206d6973736564207265776172642e1c506172616d733a302d20576f726b65722049442ee82d204d69737365642072657761726420286f7074696f6e616c292e204e6f6e65206d65616e7320276e6f206d697373656420726577617264272e60576f726b696e6747726f757042756467657446756e6465640c002801204d656d6265724964000018011c42616c616e6365000030011c5665633c75383e0016147846756e642074686520776f726b696e672067726f7570206275646765742e1c506172616d733a2c2d204d656d6265722049444c2d20416d6f756e74206f662062616c616e63652c2d20526174696f6e616c65304c65616452656d61726b6564040030011c5665633c75383e00170c94456d697473206f6e204c656164206d616b696e6720612072656d61726b206d6573736167651c506172616d733a242d206d65737361676538576f726b657252656d61726b65640800280120576f726b65724964000030011c5665633c75383e00181094456d697473206f6e204c656164206d616b696e6720612072656d61726b206d6573736167651c506172616d733a202d20776f726b6572242d206d6573736167650c5c4576656e747320666f722074686973206d6f64756c652e00385f47726f75705f206576656e74737503042042547265654d617008044b012804560128000400790300000079030000027d03007d030000040828280081030c5070616c6c65745f776f726b696e675f67726f75701474797065732c4f70656e696e6754797065000108184c65616465720000001c526567756c61720001000085030c5070616c6c65745f776f726b696e675f67726f7570147479706573504170706c794f6e4f70656e696e67506172616d7310204d656d62657249640128244f70656e696e6749640128244163636f756e74496401001c42616c616e63650118001801246d656d6265725f69642801204d656d62657249640001286f70656e696e675f69642801244f70656e696e67496400013c726f6c655f6163636f756e745f69640001244163636f756e7449640001447265776172645f6163636f756e745f69640001244163636f756e74496400012c6465736372697074696f6e30011c5665633c75383e0001407374616b655f706172616d65746572738903018c5374616b65506172616d65746572733c4163636f756e7449642c2042616c616e63653e000089030c5070616c6c65745f776f726b696e675f67726f75701474797065733c5374616b65506172616d657465727308244163636f756e74496401001c42616c616e63650118000801147374616b6518011c42616c616e63650001487374616b696e675f6163636f756e745f69640001244163636f756e74496400008d03085070616c6c65745f776f726b696e675f67726f757024496e7374616e6365310000000091030c5070616c6c65745f776f726b696e675f67726f7570147479706573445265776172645061796d656e7454797065000108304d697373656452657761726400000034526567756c6172526577617264000100009503085070616c6c65745f776f726b696e675f67726f7570205261774576656e7430244f70656e696e6749640128344170706c69636174696f6e49640128684170706c69636174696f6e4964546f576f726b657249644d617001750320576f726b657249640128244163636f756e74496401001c42616c616e636501182c4f70656e696e67547970650181032c5374616b65506f6c696379016103604170706c794f6e4f70656e696e67506172616d6574657273018503204d656d626572496401281048617368012c04490199030164304f70656e696e67416464656414002801244f70656e696e674964000030011c5665633c75383e00008103012c4f70656e696e675479706500006103012c5374616b65506f6c69637900004501013c4f7074696f6e3c42616c616e63653e00001c80456d697473206f6e20616464696e67206e6577206a6f62206f70656e696e672e1c506172616d733a302d204f70656e696e67206964342d204465736372697074696f6e782d204f70656e696e672054797065284c656164206f7220576f726b657229782d205374616b6520506f6c69637920666f7220746865206f70656e696e67482d205265776172642070657220626c6f636b404170706c6965644f6e4f70656e696e670800850301604170706c794f6e4f70656e696e67506172616d657465727300002801344170706c69636174696f6e4964000110dc456d697473206f6e20616464696e6720746865206170706c69636174696f6e20666f722074686520776f726b6572206f70656e696e672e1c506172616d733a542d204f70656e696e6720706172616d657465726573402d204170706c69636174696f6e206964344f70656e696e6746696c6c65640c002801244f70656e696e6749640000750301684170706c69636174696f6e4964546f576f726b657249644d617000006901015c42547265655365743c4170706c69636174696f6e49643e00021484456d697473206f6e2066696c6c696e6720746865206a6f62206f70656e696e672e1c506172616d733a4c2d20576f726b6572206f70656e696e67206964cc2d20576f726b6572206170706c69636174696f6e20696420746f2074686520776f726b65722069642064696374696f6e617279ac2d204170706c69636174696f6e6420696473207573656420746f2066696c6c20746865206f70656e696e67244c65616465725365740400280120576f726b6572496400030c88456d697473206f6e2073657474696e67207468652067726f7570206c65616465722e1c506172616d733a482d2047726f757020776f726b65722069642e60576f726b6572526f6c654163636f756e74557064617465640800280120576f726b6572496400000001244163636f756e744964000410c4456d697473206f6e207570646174696e672074686520726f6c65206163636f756e74206f662074686520776f726b65722e1c506172616d733a4c2d204964206f662074686520776f726b65722e802d20526f6c65206163636f756e74206964206f662074686520776f726b65722e2c4c6561646572556e7365740005047c456d697473206f6e20756e2d73657474696e6720746865206c65616465722e30576f726b65724578697465640400280120576f726b6572496400061070456d697473206f6e2065786974696e672074686520776f726b65722e1c506172616d733a302d20776f726b65722069642e302d20526174696f6e616c652e50576f726b6572537461727465644c656176696e670800280120576f726b6572496400003101013c4f7074696f6e3c5665633c75383e3e000710b4456d697473207768656e20776f726b65722073746172746564206c656176696e6720746865697220726f6c652e1c506172616d733a302d20576f726b65722069642e302d20526174696f6e616c652e405465726d696e61746564576f726b65720c00280120576f726b6572496400004501013c4f7074696f6e3c42616c616e63653e00003101013c4f7074696f6e3c5665633c75383e3e00081480456d697473206f6e207465726d696e6174696e672074686520776f726b65722e1c506172616d733a302d20776f726b65722069642e282d2050656e616c74792e302d20526174696f6e616c652e405465726d696e617465644c65616465720c00280120576f726b6572496400004501013c4f7074696f6e3c42616c616e63653e00003101013c4f7074696f6e3c5665633c75383e3e00091480456d697473206f6e207465726d696e6174696e6720746865206c65616465722e1c506172616d733a4c2d206c656164657220776f726b65722069642e282d2050656e616c74792e302d20526174696f6e616c652e305374616b65536c61736865641000280120576f726b65724964000018011c42616c616e6365000018011c42616c616e636500003101013c4f7074696f6e3c5665633c75383e3e000a18c0456d697473206f6e20736c617368696e672074686520726567756c617220776f726b65722f6c656164207374616b652e1c506172616d733a642d20726567756c617220776f726b65722f6c6561642069642e642d2061637475616c20736c61736865642062616c616e63652e702d2052657175657374656420736c61736865642062616c616e63652e302d20526174696f6e616c652e385374616b654465637265617365640800280120576f726b65724964000018011c42616c616e6365000b10c8456d697473206f6e2064656372656173696e672074686520726567756c617220776f726b65722f6c656164207374616b652e1c506172616d733a642d20726567756c617220776f726b65722f6c6561642069642e502d207374616b652064656c746120616d6f756e74385374616b65496e637265617365640800280120576f726b65724964000018011c42616c616e6365000c10c8456d697473206f6e20696e6372656173696e672074686520726567756c617220776f726b65722f6c656164207374616b652e1c506172616d733a642d20726567756c617220776f726b65722f6c6561642069642e502d207374616b652064656c746120616d6f756e74504170706c69636174696f6e57697468647261776e04002801344170706c69636174696f6e4964000d0c2501456d697473206f6e207769746864726177696e6720746865206170706c69636174696f6e20666f722074686520726567756c617220776f726b65722f6c656164206f70656e696e672e1c506172616d733a502d204a6f62206170706c69636174696f6e2069643c4f70656e696e6743616e63656c656404002801244f70656e696e674964000e0c8c456d697473206f6e2063616e63656c696e6720746865206a6f62206f70656e696e672e1c506172616d733a302d204f70656e696e6720696424427564676574536574040018011c42616c616e6365000f0cc8456d697473206f6e2073657474696e67207468652062756467657420666f722074686520776f726b696e672067726f75702e1c506172616d733a302d206e65772062756467657468576f726b65725265776172644163636f756e74557064617465640800280120576f726b6572496400000001244163636f756e744964001010cc456d697473206f6e207570646174696e672074686520726577617264206163636f756e74206f662074686520776f726b65722e1c506172616d733a4c2d204964206f662074686520776f726b65722e882d20526577617264206163636f756e74206964206f662074686520776f726b65722e64576f726b6572526577617264416d6f756e74557064617465640800280120576f726b6572496400004501013c4f7074696f6e3c42616c616e63653e001110c8456d697473206f6e207570646174696e67207468652072657761726420616d6f756e74206f662074686520776f726b65722e1c506172616d733a4c2d204964206f662074686520776f726b65722e482d205265776172642070657220626c6f636b44537461747573546578744368616e67656408002c01104861736800003101013c4f7074696f6e3c5665633c75383e3e001210dc456d697473206f6e207570646174696e6720746865207374617475732074657874206f662074686520776f726b696e672067726f75702e1c506172616d733a482d2073746174757320746578742068617368342d207374617475732074657874384275646765745370656e64696e670c000001244163636f756e744964000018011c42616c616e636500003101013c4f7074696f6e3c5665633c75383e3e001314c8456d697473206f6e206275646765742066726f6d2074686520776f726b696e672067726f7570206265696e67207370656e741c506172616d733a582d205265636569766572204163636f756e742049642e402d2042616c616e6365207370656e742e302d20526174696f6e616c652e28526577617264506169641000280120576f726b6572496400000001244163636f756e744964000018011c42616c616e63650000910301445265776172645061796d656e74547970650014186c456d697473206f6e20706179696e6720746865207265776172642e1c506172616d733a4c2d204964206f662074686520776f726b65722e582d205265636569766572204163636f756e742049642e202d20526577617264b42d205061796d656e74207479706520286d697373656420726577617264206f7220726567756c6172206f6e65296c4e65774d69737365645265776172644c6576656c526561636865640800280120576f726b6572496400004501013c4f7074696f6e3c42616c616e63653e00151090456d697473206f6e207265616368696e67206e6577206d6973736564207265776172642e1c506172616d733a302d20576f726b65722049442ee82d204d69737365642072657761726420286f7074696f6e616c292e204e6f6e65206d65616e7320276e6f206d697373656420726577617264272e60576f726b696e6747726f757042756467657446756e6465640c002801204d656d6265724964000018011c42616c616e6365000030011c5665633c75383e0016147846756e642074686520776f726b696e672067726f7570206275646765742e1c506172616d733a2c2d204d656d6265722049444c2d20416d6f756e74206f662062616c616e63652c2d20526174696f6e616c65304c65616452656d61726b6564040030011c5665633c75383e00170c94456d697473206f6e204c656164206d616b696e6720612072656d61726b206d6573736167651c506172616d733a242d206d65737361676538576f726b657252656d61726b65640800280120576f726b65724964000030011c5665633c75383e00181094456d697473206f6e204c656164206d616b696e6720612072656d61726b206d6573736167651c506172616d733a202d20776f726b6572242d206d6573736167650c5c4576656e747320666f722074686973206d6f64756c652e00385f47726f75705f206576656e74739903085070616c6c65745f776f726b696e675f67726f757024496e7374616e636532000000009d03085070616c6c65745f776f726b696e675f67726f7570205261774576656e7430244f70656e696e6749640128344170706c69636174696f6e49640128684170706c69636174696f6e4964546f576f726b657249644d617001750320576f726b657249640128244163636f756e74496401001c42616c616e636501182c4f70656e696e67547970650181032c5374616b65506f6c696379016103604170706c794f6e4f70656e696e67506172616d6574657273018503204d656d626572496401281048617368012c044901a1030164304f70656e696e67416464656414002801244f70656e696e674964000030011c5665633c75383e00008103012c4f70656e696e675479706500006103012c5374616b65506f6c69637900004501013c4f7074696f6e3c42616c616e63653e00001c80456d697473206f6e20616464696e67206e6577206a6f62206f70656e696e672e1c506172616d733a302d204f70656e696e67206964342d204465736372697074696f6e782d204f70656e696e672054797065284c656164206f7220576f726b657229782d205374616b6520506f6c69637920666f7220746865206f70656e696e67482d205265776172642070657220626c6f636b404170706c6965644f6e4f70656e696e670800850301604170706c794f6e4f70656e696e67506172616d657465727300002801344170706c69636174696f6e4964000110dc456d697473206f6e20616464696e6720746865206170706c69636174696f6e20666f722074686520776f726b6572206f70656e696e672e1c506172616d733a542d204f70656e696e6720706172616d657465726573402d204170706c69636174696f6e206964344f70656e696e6746696c6c65640c002801244f70656e696e6749640000750301684170706c69636174696f6e4964546f576f726b657249644d617000006901015c42547265655365743c4170706c69636174696f6e49643e00021484456d697473206f6e2066696c6c696e6720746865206a6f62206f70656e696e672e1c506172616d733a4c2d20576f726b6572206f70656e696e67206964cc2d20576f726b6572206170706c69636174696f6e20696420746f2074686520776f726b65722069642064696374696f6e617279ac2d204170706c69636174696f6e6420696473207573656420746f2066696c6c20746865206f70656e696e67244c65616465725365740400280120576f726b6572496400030c88456d697473206f6e2073657474696e67207468652067726f7570206c65616465722e1c506172616d733a482d2047726f757020776f726b65722069642e60576f726b6572526f6c654163636f756e74557064617465640800280120576f726b6572496400000001244163636f756e744964000410c4456d697473206f6e207570646174696e672074686520726f6c65206163636f756e74206f662074686520776f726b65722e1c506172616d733a4c2d204964206f662074686520776f726b65722e802d20526f6c65206163636f756e74206964206f662074686520776f726b65722e2c4c6561646572556e7365740005047c456d697473206f6e20756e2d73657474696e6720746865206c65616465722e30576f726b65724578697465640400280120576f726b6572496400061070456d697473206f6e2065786974696e672074686520776f726b65722e1c506172616d733a302d20776f726b65722069642e302d20526174696f6e616c652e50576f726b6572537461727465644c656176696e670800280120576f726b6572496400003101013c4f7074696f6e3c5665633c75383e3e000710b4456d697473207768656e20776f726b65722073746172746564206c656176696e6720746865697220726f6c652e1c506172616d733a302d20576f726b65722069642e302d20526174696f6e616c652e405465726d696e61746564576f726b65720c00280120576f726b6572496400004501013c4f7074696f6e3c42616c616e63653e00003101013c4f7074696f6e3c5665633c75383e3e00081480456d697473206f6e207465726d696e6174696e672074686520776f726b65722e1c506172616d733a302d20776f726b65722069642e282d2050656e616c74792e302d20526174696f6e616c652e405465726d696e617465644c65616465720c00280120576f726b6572496400004501013c4f7074696f6e3c42616c616e63653e00003101013c4f7074696f6e3c5665633c75383e3e00091480456d697473206f6e207465726d696e6174696e6720746865206c65616465722e1c506172616d733a4c2d206c656164657220776f726b65722069642e282d2050656e616c74792e302d20526174696f6e616c652e305374616b65536c61736865641000280120576f726b65724964000018011c42616c616e6365000018011c42616c616e636500003101013c4f7074696f6e3c5665633c75383e3e000a18c0456d697473206f6e20736c617368696e672074686520726567756c617220776f726b65722f6c656164207374616b652e1c506172616d733a642d20726567756c617220776f726b65722f6c6561642069642e642d2061637475616c20736c61736865642062616c616e63652e702d2052657175657374656420736c61736865642062616c616e63652e302d20526174696f6e616c652e385374616b654465637265617365640800280120576f726b65724964000018011c42616c616e6365000b10c8456d697473206f6e2064656372656173696e672074686520726567756c617220776f726b65722f6c656164207374616b652e1c506172616d733a642d20726567756c617220776f726b65722f6c6561642069642e502d207374616b652064656c746120616d6f756e74385374616b65496e637265617365640800280120576f726b65724964000018011c42616c616e6365000c10c8456d697473206f6e20696e6372656173696e672074686520726567756c617220776f726b65722f6c656164207374616b652e1c506172616d733a642d20726567756c617220776f726b65722f6c6561642069642e502d207374616b652064656c746120616d6f756e74504170706c69636174696f6e57697468647261776e04002801344170706c69636174696f6e4964000d0c2501456d697473206f6e207769746864726177696e6720746865206170706c69636174696f6e20666f722074686520726567756c617220776f726b65722f6c656164206f70656e696e672e1c506172616d733a502d204a6f62206170706c69636174696f6e2069643c4f70656e696e6743616e63656c656404002801244f70656e696e674964000e0c8c456d697473206f6e2063616e63656c696e6720746865206a6f62206f70656e696e672e1c506172616d733a302d204f70656e696e6720696424427564676574536574040018011c42616c616e6365000f0cc8456d697473206f6e2073657474696e67207468652062756467657420666f722074686520776f726b696e672067726f75702e1c506172616d733a302d206e65772062756467657468576f726b65725265776172644163636f756e74557064617465640800280120576f726b6572496400000001244163636f756e744964001010cc456d697473206f6e207570646174696e672074686520726577617264206163636f756e74206f662074686520776f726b65722e1c506172616d733a4c2d204964206f662074686520776f726b65722e882d20526577617264206163636f756e74206964206f662074686520776f726b65722e64576f726b6572526577617264416d6f756e74557064617465640800280120576f726b6572496400004501013c4f7074696f6e3c42616c616e63653e001110c8456d697473206f6e207570646174696e67207468652072657761726420616d6f756e74206f662074686520776f726b65722e1c506172616d733a4c2d204964206f662074686520776f726b65722e482d205265776172642070657220626c6f636b44537461747573546578744368616e67656408002c01104861736800003101013c4f7074696f6e3c5665633c75383e3e001210dc456d697473206f6e207570646174696e6720746865207374617475732074657874206f662074686520776f726b696e672067726f75702e1c506172616d733a482d2073746174757320746578742068617368342d207374617475732074657874384275646765745370656e64696e670c000001244163636f756e744964000018011c42616c616e636500003101013c4f7074696f6e3c5665633c75383e3e001314c8456d697473206f6e206275646765742066726f6d2074686520776f726b696e672067726f7570206265696e67207370656e741c506172616d733a582d205265636569766572204163636f756e742049642e402d2042616c616e6365207370656e742e302d20526174696f6e616c652e28526577617264506169641000280120576f726b6572496400000001244163636f756e744964000018011c42616c616e63650000910301445265776172645061796d656e74547970650014186c456d697473206f6e20706179696e6720746865207265776172642e1c506172616d733a4c2d204964206f662074686520776f726b65722e582d205265636569766572204163636f756e742049642e202d20526577617264b42d205061796d656e74207479706520286d697373656420726577617264206f7220726567756c6172206f6e65296c4e65774d69737365645265776172644c6576656c526561636865640800280120576f726b6572496400004501013c4f7074696f6e3c42616c616e63653e00151090456d697473206f6e207265616368696e67206e6577206d6973736564207265776172642e1c506172616d733a302d20576f726b65722049442ee82d204d69737365642072657761726420286f7074696f6e616c292e204e6f6e65206d65616e7320276e6f206d697373656420726577617264272e60576f726b696e6747726f757042756467657446756e6465640c002801204d656d6265724964000018011c42616c616e6365000030011c5665633c75383e0016147846756e642074686520776f726b696e672067726f7570206275646765742e1c506172616d733a2c2d204d656d6265722049444c2d20416d6f756e74206f662062616c616e63652c2d20526174696f6e616c65304c65616452656d61726b6564040030011c5665633c75383e00170c94456d697473206f6e204c656164206d616b696e6720612072656d61726b206d6573736167651c506172616d733a242d206d65737361676538576f726b657252656d61726b65640800280120576f726b65724964000030011c5665633c75383e00181094456d697473206f6e204c656164206d616b696e6720612072656d61726b206d6573736167651c506172616d733a202d20776f726b6572242d206d6573736167650c5c4576656e747320666f722074686973206d6f64756c652e00385f47726f75705f206576656e7473a103085070616c6c65745f776f726b696e675f67726f757024496e7374616e63653300000000a503085070616c6c65745f776f726b696e675f67726f7570205261774576656e7430244f70656e696e6749640128344170706c69636174696f6e49640128684170706c69636174696f6e4964546f576f726b657249644d617001750320576f726b657249640128244163636f756e74496401001c42616c616e636501182c4f70656e696e67547970650181032c5374616b65506f6c696379016103604170706c794f6e4f70656e696e67506172616d6574657273018503204d656d626572496401281048617368012c044901a9030164304f70656e696e67416464656414002801244f70656e696e674964000030011c5665633c75383e00008103012c4f70656e696e675479706500006103012c5374616b65506f6c69637900004501013c4f7074696f6e3c42616c616e63653e00001c80456d697473206f6e20616464696e67206e6577206a6f62206f70656e696e672e1c506172616d733a302d204f70656e696e67206964342d204465736372697074696f6e782d204f70656e696e672054797065284c656164206f7220576f726b657229782d205374616b6520506f6c69637920666f7220746865206f70656e696e67482d205265776172642070657220626c6f636b404170706c6965644f6e4f70656e696e670800850301604170706c794f6e4f70656e696e67506172616d657465727300002801344170706c69636174696f6e4964000110dc456d697473206f6e20616464696e6720746865206170706c69636174696f6e20666f722074686520776f726b6572206f70656e696e672e1c506172616d733a542d204f70656e696e6720706172616d657465726573402d204170706c69636174696f6e206964344f70656e696e6746696c6c65640c002801244f70656e696e6749640000750301684170706c69636174696f6e4964546f576f726b657249644d617000006901015c42547265655365743c4170706c69636174696f6e49643e00021484456d697473206f6e2066696c6c696e6720746865206a6f62206f70656e696e672e1c506172616d733a4c2d20576f726b6572206f70656e696e67206964cc2d20576f726b6572206170706c69636174696f6e20696420746f2074686520776f726b65722069642064696374696f6e617279ac2d204170706c69636174696f6e6420696473207573656420746f2066696c6c20746865206f70656e696e67244c65616465725365740400280120576f726b6572496400030c88456d697473206f6e2073657474696e67207468652067726f7570206c65616465722e1c506172616d733a482d2047726f757020776f726b65722069642e60576f726b6572526f6c654163636f756e74557064617465640800280120576f726b6572496400000001244163636f756e744964000410c4456d697473206f6e207570646174696e672074686520726f6c65206163636f756e74206f662074686520776f726b65722e1c506172616d733a4c2d204964206f662074686520776f726b65722e802d20526f6c65206163636f756e74206964206f662074686520776f726b65722e2c4c6561646572556e7365740005047c456d697473206f6e20756e2d73657474696e6720746865206c65616465722e30576f726b65724578697465640400280120576f726b6572496400061070456d697473206f6e2065786974696e672074686520776f726b65722e1c506172616d733a302d20776f726b65722069642e302d20526174696f6e616c652e50576f726b6572537461727465644c656176696e670800280120576f726b6572496400003101013c4f7074696f6e3c5665633c75383e3e000710b4456d697473207768656e20776f726b65722073746172746564206c656176696e6720746865697220726f6c652e1c506172616d733a302d20576f726b65722069642e302d20526174696f6e616c652e405465726d696e61746564576f726b65720c00280120576f726b6572496400004501013c4f7074696f6e3c42616c616e63653e00003101013c4f7074696f6e3c5665633c75383e3e00081480456d697473206f6e207465726d696e6174696e672074686520776f726b65722e1c506172616d733a302d20776f726b65722069642e282d2050656e616c74792e302d20526174696f6e616c652e405465726d696e617465644c65616465720c00280120576f726b6572496400004501013c4f7074696f6e3c42616c616e63653e00003101013c4f7074696f6e3c5665633c75383e3e00091480456d697473206f6e207465726d696e6174696e6720746865206c65616465722e1c506172616d733a4c2d206c656164657220776f726b65722069642e282d2050656e616c74792e302d20526174696f6e616c652e305374616b65536c61736865641000280120576f726b65724964000018011c42616c616e6365000018011c42616c616e636500003101013c4f7074696f6e3c5665633c75383e3e000a18c0456d697473206f6e20736c617368696e672074686520726567756c617220776f726b65722f6c656164207374616b652e1c506172616d733a642d20726567756c617220776f726b65722f6c6561642069642e642d2061637475616c20736c61736865642062616c616e63652e702d2052657175657374656420736c61736865642062616c616e63652e302d20526174696f6e616c652e385374616b654465637265617365640800280120576f726b65724964000018011c42616c616e6365000b10c8456d697473206f6e2064656372656173696e672074686520726567756c617220776f726b65722f6c656164207374616b652e1c506172616d733a642d20726567756c617220776f726b65722f6c6561642069642e502d207374616b652064656c746120616d6f756e74385374616b65496e637265617365640800280120576f726b65724964000018011c42616c616e6365000c10c8456d697473206f6e20696e6372656173696e672074686520726567756c617220776f726b65722f6c656164207374616b652e1c506172616d733a642d20726567756c617220776f726b65722f6c6561642069642e502d207374616b652064656c746120616d6f756e74504170706c69636174696f6e57697468647261776e04002801344170706c69636174696f6e4964000d0c2501456d697473206f6e207769746864726177696e6720746865206170706c69636174696f6e20666f722074686520726567756c617220776f726b65722f6c656164206f70656e696e672e1c506172616d733a502d204a6f62206170706c69636174696f6e2069643c4f70656e696e6743616e63656c656404002801244f70656e696e674964000e0c8c456d697473206f6e2063616e63656c696e6720746865206a6f62206f70656e696e672e1c506172616d733a302d204f70656e696e6720696424427564676574536574040018011c42616c616e6365000f0cc8456d697473206f6e2073657474696e67207468652062756467657420666f722074686520776f726b696e672067726f75702e1c506172616d733a302d206e65772062756467657468576f726b65725265776172644163636f756e74557064617465640800280120576f726b6572496400000001244163636f756e744964001010cc456d697473206f6e207570646174696e672074686520726577617264206163636f756e74206f662074686520776f726b65722e1c506172616d733a4c2d204964206f662074686520776f726b65722e882d20526577617264206163636f756e74206964206f662074686520776f726b65722e64576f726b6572526577617264416d6f756e74557064617465640800280120576f726b6572496400004501013c4f7074696f6e3c42616c616e63653e001110c8456d697473206f6e207570646174696e67207468652072657761726420616d6f756e74206f662074686520776f726b65722e1c506172616d733a4c2d204964206f662074686520776f726b65722e482d205265776172642070657220626c6f636b44537461747573546578744368616e67656408002c01104861736800003101013c4f7074696f6e3c5665633c75383e3e001210dc456d697473206f6e207570646174696e6720746865207374617475732074657874206f662074686520776f726b696e672067726f75702e1c506172616d733a482d2073746174757320746578742068617368342d207374617475732074657874384275646765745370656e64696e670c000001244163636f756e744964000018011c42616c616e636500003101013c4f7074696f6e3c5665633c75383e3e001314c8456d697473206f6e206275646765742066726f6d2074686520776f726b696e672067726f7570206265696e67207370656e741c506172616d733a582d205265636569766572204163636f756e742049642e402d2042616c616e6365207370656e742e302d20526174696f6e616c652e28526577617264506169641000280120576f726b6572496400000001244163636f756e744964000018011c42616c616e63650000910301445265776172645061796d656e74547970650014186c456d697473206f6e20706179696e6720746865207265776172642e1c506172616d733a4c2d204964206f662074686520776f726b65722e582d205265636569766572204163636f756e742049642e202d20526577617264b42d205061796d656e74207479706520286d697373656420726577617264206f7220726567756c6172206f6e65296c4e65774d69737365645265776172644c6576656c526561636865640800280120576f726b6572496400004501013c4f7074696f6e3c42616c616e63653e00151090456d697473206f6e207265616368696e67206e6577206d6973736564207265776172642e1c506172616d733a302d20576f726b65722049442ee82d204d69737365642072657761726420286f7074696f6e616c292e204e6f6e65206d65616e7320276e6f206d697373656420726577617264272e60576f726b696e6747726f757042756467657446756e6465640c002801204d656d6265724964000018011c42616c616e6365000030011c5665633c75383e0016147846756e642074686520776f726b696e672067726f7570206275646765742e1c506172616d733a2c2d204d656d6265722049444c2d20416d6f756e74206f662062616c616e63652c2d20526174696f6e616c65304c65616452656d61726b6564040030011c5665633c75383e00170c94456d697473206f6e204c656164206d616b696e6720612072656d61726b206d6573736167651c506172616d733a242d206d65737361676538576f726b657252656d61726b65640800280120576f726b65724964000030011c5665633c75383e00181094456d697473206f6e204c656164206d616b696e6720612072656d61726b206d6573736167651c506172616d733a202d20776f726b6572242d206d6573736167650c5c4576656e747320666f722074686973206d6f64756c652e00385f47726f75705f206576656e7473a903085070616c6c65745f776f726b696e675f67726f757024496e7374616e63653400000000ad03085070616c6c65745f776f726b696e675f67726f7570205261774576656e7430244f70656e696e6749640128344170706c69636174696f6e49640128684170706c69636174696f6e4964546f576f726b657249644d617001750320576f726b657249640128244163636f756e74496401001c42616c616e636501182c4f70656e696e67547970650181032c5374616b65506f6c696379016103604170706c794f6e4f70656e696e67506172616d6574657273018503204d656d626572496401281048617368012c044901b1030164304f70656e696e67416464656414002801244f70656e696e674964000030011c5665633c75383e00008103012c4f70656e696e675479706500006103012c5374616b65506f6c69637900004501013c4f7074696f6e3c42616c616e63653e00001c80456d697473206f6e20616464696e67206e6577206a6f62206f70656e696e672e1c506172616d733a302d204f70656e696e67206964342d204465736372697074696f6e782d204f70656e696e672054797065284c656164206f7220576f726b657229782d205374616b6520506f6c69637920666f7220746865206f70656e696e67482d205265776172642070657220626c6f636b404170706c6965644f6e4f70656e696e670800850301604170706c794f6e4f70656e696e67506172616d657465727300002801344170706c69636174696f6e4964000110dc456d697473206f6e20616464696e6720746865206170706c69636174696f6e20666f722074686520776f726b6572206f70656e696e672e1c506172616d733a542d204f70656e696e6720706172616d657465726573402d204170706c69636174696f6e206964344f70656e696e6746696c6c65640c002801244f70656e696e6749640000750301684170706c69636174696f6e4964546f576f726b657249644d617000006901015c42547265655365743c4170706c69636174696f6e49643e00021484456d697473206f6e2066696c6c696e6720746865206a6f62206f70656e696e672e1c506172616d733a4c2d20576f726b6572206f70656e696e67206964cc2d20576f726b6572206170706c69636174696f6e20696420746f2074686520776f726b65722069642064696374696f6e617279ac2d204170706c69636174696f6e6420696473207573656420746f2066696c6c20746865206f70656e696e67244c65616465725365740400280120576f726b6572496400030c88456d697473206f6e2073657474696e67207468652067726f7570206c65616465722e1c506172616d733a482d2047726f757020776f726b65722069642e60576f726b6572526f6c654163636f756e74557064617465640800280120576f726b6572496400000001244163636f756e744964000410c4456d697473206f6e207570646174696e672074686520726f6c65206163636f756e74206f662074686520776f726b65722e1c506172616d733a4c2d204964206f662074686520776f726b65722e802d20526f6c65206163636f756e74206964206f662074686520776f726b65722e2c4c6561646572556e7365740005047c456d697473206f6e20756e2d73657474696e6720746865206c65616465722e30576f726b65724578697465640400280120576f726b6572496400061070456d697473206f6e2065786974696e672074686520776f726b65722e1c506172616d733a302d20776f726b65722069642e302d20526174696f6e616c652e50576f726b6572537461727465644c656176696e670800280120576f726b6572496400003101013c4f7074696f6e3c5665633c75383e3e000710b4456d697473207768656e20776f726b65722073746172746564206c656176696e6720746865697220726f6c652e1c506172616d733a302d20576f726b65722069642e302d20526174696f6e616c652e405465726d696e61746564576f726b65720c00280120576f726b6572496400004501013c4f7074696f6e3c42616c616e63653e00003101013c4f7074696f6e3c5665633c75383e3e00081480456d697473206f6e207465726d696e6174696e672074686520776f726b65722e1c506172616d733a302d20776f726b65722069642e282d2050656e616c74792e302d20526174696f6e616c652e405465726d696e617465644c65616465720c00280120576f726b6572496400004501013c4f7074696f6e3c42616c616e63653e00003101013c4f7074696f6e3c5665633c75383e3e00091480456d697473206f6e207465726d696e6174696e6720746865206c65616465722e1c506172616d733a4c2d206c656164657220776f726b65722069642e282d2050656e616c74792e302d20526174696f6e616c652e305374616b65536c61736865641000280120576f726b65724964000018011c42616c616e6365000018011c42616c616e636500003101013c4f7074696f6e3c5665633c75383e3e000a18c0456d697473206f6e20736c617368696e672074686520726567756c617220776f726b65722f6c656164207374616b652e1c506172616d733a642d20726567756c617220776f726b65722f6c6561642069642e642d2061637475616c20736c61736865642062616c616e63652e702d2052657175657374656420736c61736865642062616c616e63652e302d20526174696f6e616c652e385374616b654465637265617365640800280120576f726b65724964000018011c42616c616e6365000b10c8456d697473206f6e2064656372656173696e672074686520726567756c617220776f726b65722f6c656164207374616b652e1c506172616d733a642d20726567756c617220776f726b65722f6c6561642069642e502d207374616b652064656c746120616d6f756e74385374616b65496e637265617365640800280120576f726b65724964000018011c42616c616e6365000c10c8456d697473206f6e20696e6372656173696e672074686520726567756c617220776f726b65722f6c656164207374616b652e1c506172616d733a642d20726567756c617220776f726b65722f6c6561642069642e502d207374616b652064656c746120616d6f756e74504170706c69636174696f6e57697468647261776e04002801344170706c69636174696f6e4964000d0c2501456d697473206f6e207769746864726177696e6720746865206170706c69636174696f6e20666f722074686520726567756c617220776f726b65722f6c656164206f70656e696e672e1c506172616d733a502d204a6f62206170706c69636174696f6e2069643c4f70656e696e6743616e63656c656404002801244f70656e696e674964000e0c8c456d697473206f6e2063616e63656c696e6720746865206a6f62206f70656e696e672e1c506172616d733a302d204f70656e696e6720696424427564676574536574040018011c42616c616e6365000f0cc8456d697473206f6e2073657474696e67207468652062756467657420666f722074686520776f726b696e672067726f75702e1c506172616d733a302d206e65772062756467657468576f726b65725265776172644163636f756e74557064617465640800280120576f726b6572496400000001244163636f756e744964001010cc456d697473206f6e207570646174696e672074686520726577617264206163636f756e74206f662074686520776f726b65722e1c506172616d733a4c2d204964206f662074686520776f726b65722e882d20526577617264206163636f756e74206964206f662074686520776f726b65722e64576f726b6572526577617264416d6f756e74557064617465640800280120576f726b6572496400004501013c4f7074696f6e3c42616c616e63653e001110c8456d697473206f6e207570646174696e67207468652072657761726420616d6f756e74206f662074686520776f726b65722e1c506172616d733a4c2d204964206f662074686520776f726b65722e482d205265776172642070657220626c6f636b44537461747573546578744368616e67656408002c01104861736800003101013c4f7074696f6e3c5665633c75383e3e001210dc456d697473206f6e207570646174696e6720746865207374617475732074657874206f662074686520776f726b696e672067726f75702e1c506172616d733a482d2073746174757320746578742068617368342d207374617475732074657874384275646765745370656e64696e670c000001244163636f756e744964000018011c42616c616e636500003101013c4f7074696f6e3c5665633c75383e3e001314c8456d697473206f6e206275646765742066726f6d2074686520776f726b696e672067726f7570206265696e67207370656e741c506172616d733a582d205265636569766572204163636f756e742049642e402d2042616c616e6365207370656e742e302d20526174696f6e616c652e28526577617264506169641000280120576f726b6572496400000001244163636f756e744964000018011c42616c616e63650000910301445265776172645061796d656e74547970650014186c456d697473206f6e20706179696e6720746865207265776172642e1c506172616d733a4c2d204964206f662074686520776f726b65722e582d205265636569766572204163636f756e742049642e202d20526577617264b42d205061796d656e74207479706520286d697373656420726577617264206f7220726567756c6172206f6e65296c4e65774d69737365645265776172644c6576656c526561636865640800280120576f726b6572496400004501013c4f7074696f6e3c42616c616e63653e00151090456d697473206f6e207265616368696e67206e6577206d6973736564207265776172642e1c506172616d733a302d20576f726b65722049442ee82d204d69737365642072657761726420286f7074696f6e616c292e204e6f6e65206d65616e7320276e6f206d697373656420726577617264272e60576f726b696e6747726f757042756467657446756e6465640c002801204d656d6265724964000018011c42616c616e6365000030011c5665633c75383e0016147846756e642074686520776f726b696e672067726f7570206275646765742e1c506172616d733a2c2d204d656d6265722049444c2d20416d6f756e74206f662062616c616e63652c2d20526174696f6e616c65304c65616452656d61726b6564040030011c5665633c75383e00170c94456d697473206f6e204c656164206d616b696e6720612072656d61726b206d6573736167651c506172616d733a242d206d65737361676538576f726b657252656d61726b65640800280120576f726b65724964000030011c5665633c75383e00181094456d697473206f6e204c656164206d616b696e6720612072656d61726b206d6573736167651c506172616d733a202d20776f726b6572242d206d6573736167650c5c4576656e747320666f722074686973206d6f64756c652e00385f47726f75705f206576656e7473b103085070616c6c65745f776f726b696e675f67726f757024496e7374616e63653500000000b503085070616c6c65745f776f726b696e675f67726f7570205261774576656e7430244f70656e696e6749640128344170706c69636174696f6e49640128684170706c69636174696f6e4964546f576f726b657249644d617001750320576f726b657249640128244163636f756e74496401001c42616c616e636501182c4f70656e696e67547970650181032c5374616b65506f6c696379016103604170706c794f6e4f70656e696e67506172616d6574657273018503204d656d626572496401281048617368012c044901b9030164304f70656e696e67416464656414002801244f70656e696e674964000030011c5665633c75383e00008103012c4f70656e696e675479706500006103012c5374616b65506f6c69637900004501013c4f7074696f6e3c42616c616e63653e00001c80456d697473206f6e20616464696e67206e6577206a6f62206f70656e696e672e1c506172616d733a302d204f70656e696e67206964342d204465736372697074696f6e782d204f70656e696e672054797065284c656164206f7220576f726b657229782d205374616b6520506f6c69637920666f7220746865206f70656e696e67482d205265776172642070657220626c6f636b404170706c6965644f6e4f70656e696e670800850301604170706c794f6e4f70656e696e67506172616d657465727300002801344170706c69636174696f6e4964000110dc456d697473206f6e20616464696e6720746865206170706c69636174696f6e20666f722074686520776f726b6572206f70656e696e672e1c506172616d733a542d204f70656e696e6720706172616d657465726573402d204170706c69636174696f6e206964344f70656e696e6746696c6c65640c002801244f70656e696e6749640000750301684170706c69636174696f6e4964546f576f726b657249644d617000006901015c42547265655365743c4170706c69636174696f6e49643e00021484456d697473206f6e2066696c6c696e6720746865206a6f62206f70656e696e672e1c506172616d733a4c2d20576f726b6572206f70656e696e67206964cc2d20576f726b6572206170706c69636174696f6e20696420746f2074686520776f726b65722069642064696374696f6e617279ac2d204170706c69636174696f6e6420696473207573656420746f2066696c6c20746865206f70656e696e67244c65616465725365740400280120576f726b6572496400030c88456d697473206f6e2073657474696e67207468652067726f7570206c65616465722e1c506172616d733a482d2047726f757020776f726b65722069642e60576f726b6572526f6c654163636f756e74557064617465640800280120576f726b6572496400000001244163636f756e744964000410c4456d697473206f6e207570646174696e672074686520726f6c65206163636f756e74206f662074686520776f726b65722e1c506172616d733a4c2d204964206f662074686520776f726b65722e802d20526f6c65206163636f756e74206964206f662074686520776f726b65722e2c4c6561646572556e7365740005047c456d697473206f6e20756e2d73657474696e6720746865206c65616465722e30576f726b65724578697465640400280120576f726b6572496400061070456d697473206f6e2065786974696e672074686520776f726b65722e1c506172616d733a302d20776f726b65722069642e302d20526174696f6e616c652e50576f726b6572537461727465644c656176696e670800280120576f726b6572496400003101013c4f7074696f6e3c5665633c75383e3e000710b4456d697473207768656e20776f726b65722073746172746564206c656176696e6720746865697220726f6c652e1c506172616d733a302d20576f726b65722069642e302d20526174696f6e616c652e405465726d696e61746564576f726b65720c00280120576f726b6572496400004501013c4f7074696f6e3c42616c616e63653e00003101013c4f7074696f6e3c5665633c75383e3e00081480456d697473206f6e207465726d696e6174696e672074686520776f726b65722e1c506172616d733a302d20776f726b65722069642e282d2050656e616c74792e302d20526174696f6e616c652e405465726d696e617465644c65616465720c00280120576f726b6572496400004501013c4f7074696f6e3c42616c616e63653e00003101013c4f7074696f6e3c5665633c75383e3e00091480456d697473206f6e207465726d696e6174696e6720746865206c65616465722e1c506172616d733a4c2d206c656164657220776f726b65722069642e282d2050656e616c74792e302d20526174696f6e616c652e305374616b65536c61736865641000280120576f726b65724964000018011c42616c616e6365000018011c42616c616e636500003101013c4f7074696f6e3c5665633c75383e3e000a18c0456d697473206f6e20736c617368696e672074686520726567756c617220776f726b65722f6c656164207374616b652e1c506172616d733a642d20726567756c617220776f726b65722f6c6561642069642e642d2061637475616c20736c61736865642062616c616e63652e702d2052657175657374656420736c61736865642062616c616e63652e302d20526174696f6e616c652e385374616b654465637265617365640800280120576f726b65724964000018011c42616c616e6365000b10c8456d697473206f6e2064656372656173696e672074686520726567756c617220776f726b65722f6c656164207374616b652e1c506172616d733a642d20726567756c617220776f726b65722f6c6561642069642e502d207374616b652064656c746120616d6f756e74385374616b65496e637265617365640800280120576f726b65724964000018011c42616c616e6365000c10c8456d697473206f6e20696e6372656173696e672074686520726567756c617220776f726b65722f6c656164207374616b652e1c506172616d733a642d20726567756c617220776f726b65722f6c6561642069642e502d207374616b652064656c746120616d6f756e74504170706c69636174696f6e57697468647261776e04002801344170706c69636174696f6e4964000d0c2501456d697473206f6e207769746864726177696e6720746865206170706c69636174696f6e20666f722074686520726567756c617220776f726b65722f6c656164206f70656e696e672e1c506172616d733a502d204a6f62206170706c69636174696f6e2069643c4f70656e696e6743616e63656c656404002801244f70656e696e674964000e0c8c456d697473206f6e2063616e63656c696e6720746865206a6f62206f70656e696e672e1c506172616d733a302d204f70656e696e6720696424427564676574536574040018011c42616c616e6365000f0cc8456d697473206f6e2073657474696e67207468652062756467657420666f722074686520776f726b696e672067726f75702e1c506172616d733a302d206e65772062756467657468576f726b65725265776172644163636f756e74557064617465640800280120576f726b6572496400000001244163636f756e744964001010cc456d697473206f6e207570646174696e672074686520726577617264206163636f756e74206f662074686520776f726b65722e1c506172616d733a4c2d204964206f662074686520776f726b65722e882d20526577617264206163636f756e74206964206f662074686520776f726b65722e64576f726b6572526577617264416d6f756e74557064617465640800280120576f726b6572496400004501013c4f7074696f6e3c42616c616e63653e001110c8456d697473206f6e207570646174696e67207468652072657761726420616d6f756e74206f662074686520776f726b65722e1c506172616d733a4c2d204964206f662074686520776f726b65722e482d205265776172642070657220626c6f636b44537461747573546578744368616e67656408002c01104861736800003101013c4f7074696f6e3c5665633c75383e3e001210dc456d697473206f6e207570646174696e6720746865207374617475732074657874206f662074686520776f726b696e672067726f75702e1c506172616d733a482d2073746174757320746578742068617368342d207374617475732074657874384275646765745370656e64696e670c000001244163636f756e744964000018011c42616c616e636500003101013c4f7074696f6e3c5665633c75383e3e001314c8456d697473206f6e206275646765742066726f6d2074686520776f726b696e672067726f7570206265696e67207370656e741c506172616d733a582d205265636569766572204163636f756e742049642e402d2042616c616e6365207370656e742e302d20526174696f6e616c652e28526577617264506169641000280120576f726b6572496400000001244163636f756e744964000018011c42616c616e63650000910301445265776172645061796d656e74547970650014186c456d697473206f6e20706179696e6720746865207265776172642e1c506172616d733a4c2d204964206f662074686520776f726b65722e582d205265636569766572204163636f756e742049642e202d20526577617264b42d205061796d656e74207479706520286d697373656420726577617264206f7220726567756c6172206f6e65296c4e65774d69737365645265776172644c6576656c526561636865640800280120576f726b6572496400004501013c4f7074696f6e3c42616c616e63653e00151090456d697473206f6e207265616368696e67206e6577206d6973736564207265776172642e1c506172616d733a302d20576f726b65722049442ee82d204d69737365642072657761726420286f7074696f6e616c292e204e6f6e65206d65616e7320276e6f206d697373656420726577617264272e60576f726b696e6747726f757042756467657446756e6465640c002801204d656d6265724964000018011c42616c616e6365000030011c5665633c75383e0016147846756e642074686520776f726b696e672067726f7570206275646765742e1c506172616d733a2c2d204d656d6265722049444c2d20416d6f756e74206f662062616c616e63652c2d20526174696f6e616c65304c65616452656d61726b6564040030011c5665633c75383e00170c94456d697473206f6e204c656164206d616b696e6720612072656d61726b206d6573736167651c506172616d733a242d206d65737361676538576f726b657252656d61726b65640800280120576f726b65724964000030011c5665633c75383e00181094456d697473206f6e204c656164206d616b696e6720612072656d61726b206d6573736167651c506172616d733a202d20776f726b6572242d206d6573736167650c5c4576656e747320666f722074686973206d6f64756c652e00385f47726f75705f206576656e7473b903085070616c6c65745f776f726b696e675f67726f757024496e7374616e63653600000000bd03085070616c6c65745f776f726b696e675f67726f7570205261774576656e7430244f70656e696e6749640128344170706c69636174696f6e49640128684170706c69636174696f6e4964546f576f726b657249644d617001750320576f726b657249640128244163636f756e74496401001c42616c616e636501182c4f70656e696e67547970650181032c5374616b65506f6c696379016103604170706c794f6e4f70656e696e67506172616d6574657273018503204d656d626572496401281048617368012c044901c1030164304f70656e696e67416464656414002801244f70656e696e674964000030011c5665633c75383e00008103012c4f70656e696e675479706500006103012c5374616b65506f6c69637900004501013c4f7074696f6e3c42616c616e63653e00001c80456d697473206f6e20616464696e67206e6577206a6f62206f70656e696e672e1c506172616d733a302d204f70656e696e67206964342d204465736372697074696f6e782d204f70656e696e672054797065284c656164206f7220576f726b657229782d205374616b6520506f6c69637920666f7220746865206f70656e696e67482d205265776172642070657220626c6f636b404170706c6965644f6e4f70656e696e670800850301604170706c794f6e4f70656e696e67506172616d657465727300002801344170706c69636174696f6e4964000110dc456d697473206f6e20616464696e6720746865206170706c69636174696f6e20666f722074686520776f726b6572206f70656e696e672e1c506172616d733a542d204f70656e696e6720706172616d657465726573402d204170706c69636174696f6e206964344f70656e696e6746696c6c65640c002801244f70656e696e6749640000750301684170706c69636174696f6e4964546f576f726b657249644d617000006901015c42547265655365743c4170706c69636174696f6e49643e00021484456d697473206f6e2066696c6c696e6720746865206a6f62206f70656e696e672e1c506172616d733a4c2d20576f726b6572206f70656e696e67206964cc2d20576f726b6572206170706c69636174696f6e20696420746f2074686520776f726b65722069642064696374696f6e617279ac2d204170706c69636174696f6e6420696473207573656420746f2066696c6c20746865206f70656e696e67244c65616465725365740400280120576f726b6572496400030c88456d697473206f6e2073657474696e67207468652067726f7570206c65616465722e1c506172616d733a482d2047726f757020776f726b65722069642e60576f726b6572526f6c654163636f756e74557064617465640800280120576f726b6572496400000001244163636f756e744964000410c4456d697473206f6e207570646174696e672074686520726f6c65206163636f756e74206f662074686520776f726b65722e1c506172616d733a4c2d204964206f662074686520776f726b65722e802d20526f6c65206163636f756e74206964206f662074686520776f726b65722e2c4c6561646572556e7365740005047c456d697473206f6e20756e2d73657474696e6720746865206c65616465722e30576f726b65724578697465640400280120576f726b6572496400061070456d697473206f6e2065786974696e672074686520776f726b65722e1c506172616d733a302d20776f726b65722069642e302d20526174696f6e616c652e50576f726b6572537461727465644c656176696e670800280120576f726b6572496400003101013c4f7074696f6e3c5665633c75383e3e000710b4456d697473207768656e20776f726b65722073746172746564206c656176696e6720746865697220726f6c652e1c506172616d733a302d20576f726b65722069642e302d20526174696f6e616c652e405465726d696e61746564576f726b65720c00280120576f726b6572496400004501013c4f7074696f6e3c42616c616e63653e00003101013c4f7074696f6e3c5665633c75383e3e00081480456d697473206f6e207465726d696e6174696e672074686520776f726b65722e1c506172616d733a302d20776f726b65722069642e282d2050656e616c74792e302d20526174696f6e616c652e405465726d696e617465644c65616465720c00280120576f726b6572496400004501013c4f7074696f6e3c42616c616e63653e00003101013c4f7074696f6e3c5665633c75383e3e00091480456d697473206f6e207465726d696e6174696e6720746865206c65616465722e1c506172616d733a4c2d206c656164657220776f726b65722069642e282d2050656e616c74792e302d20526174696f6e616c652e305374616b65536c61736865641000280120576f726b65724964000018011c42616c616e6365000018011c42616c616e636500003101013c4f7074696f6e3c5665633c75383e3e000a18c0456d697473206f6e20736c617368696e672074686520726567756c617220776f726b65722f6c656164207374616b652e1c506172616d733a642d20726567756c617220776f726b65722f6c6561642069642e642d2061637475616c20736c61736865642062616c616e63652e702d2052657175657374656420736c61736865642062616c616e63652e302d20526174696f6e616c652e385374616b654465637265617365640800280120576f726b65724964000018011c42616c616e6365000b10c8456d697473206f6e2064656372656173696e672074686520726567756c617220776f726b65722f6c656164207374616b652e1c506172616d733a642d20726567756c617220776f726b65722f6c6561642069642e502d207374616b652064656c746120616d6f756e74385374616b65496e637265617365640800280120576f726b65724964000018011c42616c616e6365000c10c8456d697473206f6e20696e6372656173696e672074686520726567756c617220776f726b65722f6c656164207374616b652e1c506172616d733a642d20726567756c617220776f726b65722f6c6561642069642e502d207374616b652064656c746120616d6f756e74504170706c69636174696f6e57697468647261776e04002801344170706c69636174696f6e4964000d0c2501456d697473206f6e207769746864726177696e6720746865206170706c69636174696f6e20666f722074686520726567756c617220776f726b65722f6c656164206f70656e696e672e1c506172616d733a502d204a6f62206170706c69636174696f6e2069643c4f70656e696e6743616e63656c656404002801244f70656e696e674964000e0c8c456d697473206f6e2063616e63656c696e6720746865206a6f62206f70656e696e672e1c506172616d733a302d204f70656e696e6720696424427564676574536574040018011c42616c616e6365000f0cc8456d697473206f6e2073657474696e67207468652062756467657420666f722074686520776f726b696e672067726f75702e1c506172616d733a302d206e65772062756467657468576f726b65725265776172644163636f756e74557064617465640800280120576f726b6572496400000001244163636f756e744964001010cc456d697473206f6e207570646174696e672074686520726577617264206163636f756e74206f662074686520776f726b65722e1c506172616d733a4c2d204964206f662074686520776f726b65722e882d20526577617264206163636f756e74206964206f662074686520776f726b65722e64576f726b6572526577617264416d6f756e74557064617465640800280120576f726b6572496400004501013c4f7074696f6e3c42616c616e63653e001110c8456d697473206f6e207570646174696e67207468652072657761726420616d6f756e74206f662074686520776f726b65722e1c506172616d733a4c2d204964206f662074686520776f726b65722e482d205265776172642070657220626c6f636b44537461747573546578744368616e67656408002c01104861736800003101013c4f7074696f6e3c5665633c75383e3e001210dc456d697473206f6e207570646174696e6720746865207374617475732074657874206f662074686520776f726b696e672067726f75702e1c506172616d733a482d2073746174757320746578742068617368342d207374617475732074657874384275646765745370656e64696e670c000001244163636f756e744964000018011c42616c616e636500003101013c4f7074696f6e3c5665633c75383e3e001314c8456d697473206f6e206275646765742066726f6d2074686520776f726b696e672067726f7570206265696e67207370656e741c506172616d733a582d205265636569766572204163636f756e742049642e402d2042616c616e6365207370656e742e302d20526174696f6e616c652e28526577617264506169641000280120576f726b6572496400000001244163636f756e744964000018011c42616c616e63650000910301445265776172645061796d656e74547970650014186c456d697473206f6e20706179696e6720746865207265776172642e1c506172616d733a4c2d204964206f662074686520776f726b65722e582d205265636569766572204163636f756e742049642e202d20526577617264b42d205061796d656e74207479706520286d697373656420726577617264206f7220726567756c6172206f6e65296c4e65774d69737365645265776172644c6576656c526561636865640800280120576f726b6572496400004501013c4f7074696f6e3c42616c616e63653e00151090456d697473206f6e207265616368696e67206e6577206d6973736564207265776172642e1c506172616d733a302d20576f726b65722049442ee82d204d69737365642072657761726420286f7074696f6e616c292e204e6f6e65206d65616e7320276e6f206d697373656420726577617264272e60576f726b696e6747726f757042756467657446756e6465640c002801204d656d6265724964000018011c42616c616e6365000030011c5665633c75383e0016147846756e642074686520776f726b696e672067726f7570206275646765742e1c506172616d733a2c2d204d656d6265722049444c2d20416d6f756e74206f662062616c616e63652c2d20526174696f6e616c65304c65616452656d61726b6564040030011c5665633c75383e00170c94456d697473206f6e204c656164206d616b696e6720612072656d61726b206d6573736167651c506172616d733a242d206d65737361676538576f726b657252656d61726b65640800280120576f726b65724964000030011c5665633c75383e00181094456d697473206f6e204c656164206d616b696e6720612072656d61726b206d6573736167651c506172616d733a202d20776f726b6572242d206d6573736167650c5c4576656e747320666f722074686973206d6f64756c652e00385f47726f75705f206576656e7473c103085070616c6c65745f776f726b696e675f67726f757024496e7374616e63653700000000c503085070616c6c65745f776f726b696e675f67726f7570205261774576656e7430244f70656e696e6749640128344170706c69636174696f6e49640128684170706c69636174696f6e4964546f576f726b657249644d617001750320576f726b657249640128244163636f756e74496401001c42616c616e636501182c4f70656e696e67547970650181032c5374616b65506f6c696379016103604170706c794f6e4f70656e696e67506172616d6574657273018503204d656d626572496401281048617368012c044901c9030164304f70656e696e67416464656414002801244f70656e696e674964000030011c5665633c75383e00008103012c4f70656e696e675479706500006103012c5374616b65506f6c69637900004501013c4f7074696f6e3c42616c616e63653e00001c80456d697473206f6e20616464696e67206e6577206a6f62206f70656e696e672e1c506172616d733a302d204f70656e696e67206964342d204465736372697074696f6e782d204f70656e696e672054797065284c656164206f7220576f726b657229782d205374616b6520506f6c69637920666f7220746865206f70656e696e67482d205265776172642070657220626c6f636b404170706c6965644f6e4f70656e696e670800850301604170706c794f6e4f70656e696e67506172616d657465727300002801344170706c69636174696f6e4964000110dc456d697473206f6e20616464696e6720746865206170706c69636174696f6e20666f722074686520776f726b6572206f70656e696e672e1c506172616d733a542d204f70656e696e6720706172616d657465726573402d204170706c69636174696f6e206964344f70656e696e6746696c6c65640c002801244f70656e696e6749640000750301684170706c69636174696f6e4964546f576f726b657249644d617000006901015c42547265655365743c4170706c69636174696f6e49643e00021484456d697473206f6e2066696c6c696e6720746865206a6f62206f70656e696e672e1c506172616d733a4c2d20576f726b6572206f70656e696e67206964cc2d20576f726b6572206170706c69636174696f6e20696420746f2074686520776f726b65722069642064696374696f6e617279ac2d204170706c69636174696f6e6420696473207573656420746f2066696c6c20746865206f70656e696e67244c65616465725365740400280120576f726b6572496400030c88456d697473206f6e2073657474696e67207468652067726f7570206c65616465722e1c506172616d733a482d2047726f757020776f726b65722069642e60576f726b6572526f6c654163636f756e74557064617465640800280120576f726b6572496400000001244163636f756e744964000410c4456d697473206f6e207570646174696e672074686520726f6c65206163636f756e74206f662074686520776f726b65722e1c506172616d733a4c2d204964206f662074686520776f726b65722e802d20526f6c65206163636f756e74206964206f662074686520776f726b65722e2c4c6561646572556e7365740005047c456d697473206f6e20756e2d73657474696e6720746865206c65616465722e30576f726b65724578697465640400280120576f726b6572496400061070456d697473206f6e2065786974696e672074686520776f726b65722e1c506172616d733a302d20776f726b65722069642e302d20526174696f6e616c652e50576f726b6572537461727465644c656176696e670800280120576f726b6572496400003101013c4f7074696f6e3c5665633c75383e3e000710b4456d697473207768656e20776f726b65722073746172746564206c656176696e6720746865697220726f6c652e1c506172616d733a302d20576f726b65722069642e302d20526174696f6e616c652e405465726d696e61746564576f726b65720c00280120576f726b6572496400004501013c4f7074696f6e3c42616c616e63653e00003101013c4f7074696f6e3c5665633c75383e3e00081480456d697473206f6e207465726d696e6174696e672074686520776f726b65722e1c506172616d733a302d20776f726b65722069642e282d2050656e616c74792e302d20526174696f6e616c652e405465726d696e617465644c65616465720c00280120576f726b6572496400004501013c4f7074696f6e3c42616c616e63653e00003101013c4f7074696f6e3c5665633c75383e3e00091480456d697473206f6e207465726d696e6174696e6720746865206c65616465722e1c506172616d733a4c2d206c656164657220776f726b65722069642e282d2050656e616c74792e302d20526174696f6e616c652e305374616b65536c61736865641000280120576f726b65724964000018011c42616c616e6365000018011c42616c616e636500003101013c4f7074696f6e3c5665633c75383e3e000a18c0456d697473206f6e20736c617368696e672074686520726567756c617220776f726b65722f6c656164207374616b652e1c506172616d733a642d20726567756c617220776f726b65722f6c6561642069642e642d2061637475616c20736c61736865642062616c616e63652e702d2052657175657374656420736c61736865642062616c616e63652e302d20526174696f6e616c652e385374616b654465637265617365640800280120576f726b65724964000018011c42616c616e6365000b10c8456d697473206f6e2064656372656173696e672074686520726567756c617220776f726b65722f6c656164207374616b652e1c506172616d733a642d20726567756c617220776f726b65722f6c6561642069642e502d207374616b652064656c746120616d6f756e74385374616b65496e637265617365640800280120576f726b65724964000018011c42616c616e6365000c10c8456d697473206f6e20696e6372656173696e672074686520726567756c617220776f726b65722f6c656164207374616b652e1c506172616d733a642d20726567756c617220776f726b65722f6c6561642069642e502d207374616b652064656c746120616d6f756e74504170706c69636174696f6e57697468647261776e04002801344170706c69636174696f6e4964000d0c2501456d697473206f6e207769746864726177696e6720746865206170706c69636174696f6e20666f722074686520726567756c617220776f726b65722f6c656164206f70656e696e672e1c506172616d733a502d204a6f62206170706c69636174696f6e2069643c4f70656e696e6743616e63656c656404002801244f70656e696e674964000e0c8c456d697473206f6e2063616e63656c696e6720746865206a6f62206f70656e696e672e1c506172616d733a302d204f70656e696e6720696424427564676574536574040018011c42616c616e6365000f0cc8456d697473206f6e2073657474696e67207468652062756467657420666f722074686520776f726b696e672067726f75702e1c506172616d733a302d206e65772062756467657468576f726b65725265776172644163636f756e74557064617465640800280120576f726b6572496400000001244163636f756e744964001010cc456d697473206f6e207570646174696e672074686520726577617264206163636f756e74206f662074686520776f726b65722e1c506172616d733a4c2d204964206f662074686520776f726b65722e882d20526577617264206163636f756e74206964206f662074686520776f726b65722e64576f726b6572526577617264416d6f756e74557064617465640800280120576f726b6572496400004501013c4f7074696f6e3c42616c616e63653e001110c8456d697473206f6e207570646174696e67207468652072657761726420616d6f756e74206f662074686520776f726b65722e1c506172616d733a4c2d204964206f662074686520776f726b65722e482d205265776172642070657220626c6f636b44537461747573546578744368616e67656408002c01104861736800003101013c4f7074696f6e3c5665633c75383e3e001210dc456d697473206f6e207570646174696e6720746865207374617475732074657874206f662074686520776f726b696e672067726f75702e1c506172616d733a482d2073746174757320746578742068617368342d207374617475732074657874384275646765745370656e64696e670c000001244163636f756e744964000018011c42616c616e636500003101013c4f7074696f6e3c5665633c75383e3e001314c8456d697473206f6e206275646765742066726f6d2074686520776f726b696e672067726f7570206265696e67207370656e741c506172616d733a582d205265636569766572204163636f756e742049642e402d2042616c616e6365207370656e742e302d20526174696f6e616c652e28526577617264506169641000280120576f726b6572496400000001244163636f756e744964000018011c42616c616e63650000910301445265776172645061796d656e74547970650014186c456d697473206f6e20706179696e6720746865207265776172642e1c506172616d733a4c2d204964206f662074686520776f726b65722e582d205265636569766572204163636f756e742049642e202d20526577617264b42d205061796d656e74207479706520286d697373656420726577617264206f7220726567756c6172206f6e65296c4e65774d69737365645265776172644c6576656c526561636865640800280120576f726b6572496400004501013c4f7074696f6e3c42616c616e63653e00151090456d697473206f6e207265616368696e67206e6577206d6973736564207265776172642e1c506172616d733a302d20576f726b65722049442ee82d204d69737365642072657761726420286f7074696f6e616c292e204e6f6e65206d65616e7320276e6f206d697373656420726577617264272e60576f726b696e6747726f757042756467657446756e6465640c002801204d656d6265724964000018011c42616c616e6365000030011c5665633c75383e0016147846756e642074686520776f726b696e672067726f7570206275646765742e1c506172616d733a2c2d204d656d6265722049444c2d20416d6f756e74206f662062616c616e63652c2d20526174696f6e616c65304c65616452656d61726b6564040030011c5665633c75383e00170c94456d697473206f6e204c656164206d616b696e6720612072656d61726b206d6573736167651c506172616d733a242d206d65737361676538576f726b657252656d61726b65640800280120576f726b65724964000030011c5665633c75383e00181094456d697473206f6e204c656164206d616b696e6720612072656d61726b206d6573736167651c506172616d733a202d20776f726b6572242d206d6573736167650c5c4576656e747320666f722074686973206d6f64756c652e00385f47726f75705f206576656e7473c903085070616c6c65745f776f726b696e675f67726f757024496e7374616e63653800000000cd03085070616c6c65745f776f726b696e675f67726f7570205261774576656e7430244f70656e696e6749640128344170706c69636174696f6e49640128684170706c69636174696f6e4964546f576f726b657249644d617001750320576f726b657249640128244163636f756e74496401001c42616c616e636501182c4f70656e696e67547970650181032c5374616b65506f6c696379016103604170706c794f6e4f70656e696e67506172616d6574657273018503204d656d626572496401281048617368012c044901d1030164304f70656e696e67416464656414002801244f70656e696e674964000030011c5665633c75383e00008103012c4f70656e696e675479706500006103012c5374616b65506f6c69637900004501013c4f7074696f6e3c42616c616e63653e00001c80456d697473206f6e20616464696e67206e6577206a6f62206f70656e696e672e1c506172616d733a302d204f70656e696e67206964342d204465736372697074696f6e782d204f70656e696e672054797065284c656164206f7220576f726b657229782d205374616b6520506f6c69637920666f7220746865206f70656e696e67482d205265776172642070657220626c6f636b404170706c6965644f6e4f70656e696e670800850301604170706c794f6e4f70656e696e67506172616d657465727300002801344170706c69636174696f6e4964000110dc456d697473206f6e20616464696e6720746865206170706c69636174696f6e20666f722074686520776f726b6572206f70656e696e672e1c506172616d733a542d204f70656e696e6720706172616d657465726573402d204170706c69636174696f6e206964344f70656e696e6746696c6c65640c002801244f70656e696e6749640000750301684170706c69636174696f6e4964546f576f726b657249644d617000006901015c42547265655365743c4170706c69636174696f6e49643e00021484456d697473206f6e2066696c6c696e6720746865206a6f62206f70656e696e672e1c506172616d733a4c2d20576f726b6572206f70656e696e67206964cc2d20576f726b6572206170706c69636174696f6e20696420746f2074686520776f726b65722069642064696374696f6e617279ac2d204170706c69636174696f6e6420696473207573656420746f2066696c6c20746865206f70656e696e67244c65616465725365740400280120576f726b6572496400030c88456d697473206f6e2073657474696e67207468652067726f7570206c65616465722e1c506172616d733a482d2047726f757020776f726b65722069642e60576f726b6572526f6c654163636f756e74557064617465640800280120576f726b6572496400000001244163636f756e744964000410c4456d697473206f6e207570646174696e672074686520726f6c65206163636f756e74206f662074686520776f726b65722e1c506172616d733a4c2d204964206f662074686520776f726b65722e802d20526f6c65206163636f756e74206964206f662074686520776f726b65722e2c4c6561646572556e7365740005047c456d697473206f6e20756e2d73657474696e6720746865206c65616465722e30576f726b65724578697465640400280120576f726b6572496400061070456d697473206f6e2065786974696e672074686520776f726b65722e1c506172616d733a302d20776f726b65722069642e302d20526174696f6e616c652e50576f726b6572537461727465644c656176696e670800280120576f726b6572496400003101013c4f7074696f6e3c5665633c75383e3e000710b4456d697473207768656e20776f726b65722073746172746564206c656176696e6720746865697220726f6c652e1c506172616d733a302d20576f726b65722069642e302d20526174696f6e616c652e405465726d696e61746564576f726b65720c00280120576f726b6572496400004501013c4f7074696f6e3c42616c616e63653e00003101013c4f7074696f6e3c5665633c75383e3e00081480456d697473206f6e207465726d696e6174696e672074686520776f726b65722e1c506172616d733a302d20776f726b65722069642e282d2050656e616c74792e302d20526174696f6e616c652e405465726d696e617465644c65616465720c00280120576f726b6572496400004501013c4f7074696f6e3c42616c616e63653e00003101013c4f7074696f6e3c5665633c75383e3e00091480456d697473206f6e207465726d696e6174696e6720746865206c65616465722e1c506172616d733a4c2d206c656164657220776f726b65722069642e282d2050656e616c74792e302d20526174696f6e616c652e305374616b65536c61736865641000280120576f726b65724964000018011c42616c616e6365000018011c42616c616e636500003101013c4f7074696f6e3c5665633c75383e3e000a18c0456d697473206f6e20736c617368696e672074686520726567756c617220776f726b65722f6c656164207374616b652e1c506172616d733a642d20726567756c617220776f726b65722f6c6561642069642e642d2061637475616c20736c61736865642062616c616e63652e702d2052657175657374656420736c61736865642062616c616e63652e302d20526174696f6e616c652e385374616b654465637265617365640800280120576f726b65724964000018011c42616c616e6365000b10c8456d697473206f6e2064656372656173696e672074686520726567756c617220776f726b65722f6c656164207374616b652e1c506172616d733a642d20726567756c617220776f726b65722f6c6561642069642e502d207374616b652064656c746120616d6f756e74385374616b65496e637265617365640800280120576f726b65724964000018011c42616c616e6365000c10c8456d697473206f6e20696e6372656173696e672074686520726567756c617220776f726b65722f6c656164207374616b652e1c506172616d733a642d20726567756c617220776f726b65722f6c6561642069642e502d207374616b652064656c746120616d6f756e74504170706c69636174696f6e57697468647261776e04002801344170706c69636174696f6e4964000d0c2501456d697473206f6e207769746864726177696e6720746865206170706c69636174696f6e20666f722074686520726567756c617220776f726b65722f6c656164206f70656e696e672e1c506172616d733a502d204a6f62206170706c69636174696f6e2069643c4f70656e696e6743616e63656c656404002801244f70656e696e674964000e0c8c456d697473206f6e2063616e63656c696e6720746865206a6f62206f70656e696e672e1c506172616d733a302d204f70656e696e6720696424427564676574536574040018011c42616c616e6365000f0cc8456d697473206f6e2073657474696e67207468652062756467657420666f722074686520776f726b696e672067726f75702e1c506172616d733a302d206e65772062756467657468576f726b65725265776172644163636f756e74557064617465640800280120576f726b6572496400000001244163636f756e744964001010cc456d697473206f6e207570646174696e672074686520726577617264206163636f756e74206f662074686520776f726b65722e1c506172616d733a4c2d204964206f662074686520776f726b65722e882d20526577617264206163636f756e74206964206f662074686520776f726b65722e64576f726b6572526577617264416d6f756e74557064617465640800280120576f726b6572496400004501013c4f7074696f6e3c42616c616e63653e001110c8456d697473206f6e207570646174696e67207468652072657761726420616d6f756e74206f662074686520776f726b65722e1c506172616d733a4c2d204964206f662074686520776f726b65722e482d205265776172642070657220626c6f636b44537461747573546578744368616e67656408002c01104861736800003101013c4f7074696f6e3c5665633c75383e3e001210dc456d697473206f6e207570646174696e6720746865207374617475732074657874206f662074686520776f726b696e672067726f75702e1c506172616d733a482d2073746174757320746578742068617368342d207374617475732074657874384275646765745370656e64696e670c000001244163636f756e744964000018011c42616c616e636500003101013c4f7074696f6e3c5665633c75383e3e001314c8456d697473206f6e206275646765742066726f6d2074686520776f726b696e672067726f7570206265696e67207370656e741c506172616d733a582d205265636569766572204163636f756e742049642e402d2042616c616e6365207370656e742e302d20526174696f6e616c652e28526577617264506169641000280120576f726b6572496400000001244163636f756e744964000018011c42616c616e63650000910301445265776172645061796d656e74547970650014186c456d697473206f6e20706179696e6720746865207265776172642e1c506172616d733a4c2d204964206f662074686520776f726b65722e582d205265636569766572204163636f756e742049642e202d20526577617264b42d205061796d656e74207479706520286d697373656420726577617264206f7220726567756c6172206f6e65296c4e65774d69737365645265776172644c6576656c526561636865640800280120576f726b6572496400004501013c4f7074696f6e3c42616c616e63653e00151090456d697473206f6e207265616368696e67206e6577206d6973736564207265776172642e1c506172616d733a302d20576f726b65722049442ee82d204d69737365642072657761726420286f7074696f6e616c292e204e6f6e65206d65616e7320276e6f206d697373656420726577617264272e60576f726b696e6747726f757042756467657446756e6465640c002801204d656d6265724964000018011c42616c616e6365000030011c5665633c75383e0016147846756e642074686520776f726b696e672067726f7570206275646765742e1c506172616d733a2c2d204d656d6265722049444c2d20416d6f756e74206f662062616c616e63652c2d20526174696f6e616c65304c65616452656d61726b6564040030011c5665633c75383e00170c94456d697473206f6e204c656164206d616b696e6720612072656d61726b206d6573736167651c506172616d733a242d206d65737361676538576f726b657252656d61726b65640800280120576f726b65724964000030011c5665633c75383e00181094456d697473206f6e204c656164206d616b696e6720612072656d61726b206d6573736167651c506172616d733a202d20776f726b6572242d206d6573736167650c5c4576656e747320666f722074686973206d6f64756c652e00385f47726f75705f206576656e7473d103085070616c6c65745f776f726b696e675f67726f757024496e7374616e63653900000000d50308306672616d655f73797374656d14506861736500010c384170706c7945787472696e736963040010010c7533320000003046696e616c697a6174696f6e00010038496e697469616c697a6174696f6e00020000d9030000022c00dd03000002e10300e10300000408101000e50308306672616d655f73797374656d584c61737452756e74696d6555706772616465496e666f0000080130737065635f76657273696f6ee903014c636f6465633a3a436f6d706163743c7533323e000124737065635f6e616d65ed03016473705f72756e74696d653a3a52756e74696d65537472696e670000e9030000061000ed030000050200f1030c306672616d655f73797374656d1870616c6c65741043616c6c0404540001201872656d61726b04011872656d61726b30011c5665633c75383e000010684d616b6520736f6d65206f6e2d636861696e2072656d61726b2e0034232320436f6d706c6578697479202d20604f28312960387365745f686561705f7061676573040114706167657328010c753634000104f853657420746865206e756d626572206f6620706167657320696e2074686520576562417373656d626c7920656e7669726f6e6d656e74277320686561702e207365745f636f6465040110636f646530011c5665633c75383e0002106453657420746865206e65772072756e74696d6520636f64652e0034232320436f6d706c657869747931012d20604f2843202b2053296020776865726520604360206c656e677468206f662060636f64656020616e642060536020636f6d706c6578697479206f66206063616e5f7365745f636f6465605c7365745f636f64655f776974686f75745f636865636b73040110636f646530011c5665633c75383e000310190153657420746865206e65772072756e74696d6520636f646520776974686f757420646f696e6720616e7920636865636b73206f662074686520676976656e2060636f6465602e0034232320436f6d706c65786974798c2d20604f2843296020776865726520604360206c656e677468206f662060636f6465602c7365745f73746f726167650401146974656d73f50301345665633c4b657956616c75653e0004046853657420736f6d65206974656d73206f662073746f726167652e306b696c6c5f73746f726167650401106b657973a90201205665633c4b65793e000504744b696c6c20736f6d65206974656d732066726f6d2073746f726167652e2c6b696c6c5f70726566697808011870726566697830010c4b657900011c7375626b65797310010c75333200061011014b696c6c20616c6c2073746f72616765206974656d7320776974682061206b657920746861742073746172747320776974682074686520676976656e207072656669782e0039012a2a4e4f54453a2a2a2057652072656c79206f6e2074686520526f6f74206f726967696e20746f2070726f7669646520757320746865206e756d626572206f66207375626b65797320756e6465723d0174686520707265666978207765206172652072656d6f76696e6720746f2061636375726174656c792063616c63756c6174652074686520776569676874206f6620746869732066756e6374696f6e2e4472656d61726b5f776974685f6576656e7404011872656d61726b30011c5665633c75383e000704a44d616b6520736f6d65206f6e2d636861696e2072656d61726b20616e6420656d6974206576656e742e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632ef503000002f90300f90300000408303000fd030c306672616d655f73797374656d186c696d69747330426c6f636b5765696768747300000c0128626173655f626c6f636b2001185765696768740001246d61785f626c6f636b2001185765696768740001247065725f636c617373010401845065724469737061746368436c6173733c57656967687473506572436c6173733e000001040c346672616d655f737570706f7274206469737061746368405065724469737061746368436c617373040454010504000c01186e6f726d616c050401045400012c6f7065726174696f6e616c05040104540001246d616e6461746f72790504010454000005040c306672616d655f73797374656d186c696d6974733c57656967687473506572436c6173730000100138626173655f65787472696e7369632001185765696768740001346d61785f65787472696e736963090401384f7074696f6e3c5765696768743e0001246d61785f746f74616c090401384f7074696f6e3c5765696768743e0001207265736572766564090401384f7074696f6e3c5765696768743e0000090404184f7074696f6e04045401200108104e6f6e6500000010536f6d6504002000000100000d040c306672616d655f73797374656d186c696d6974732c426c6f636b4c656e677468000004010c6d6178110401545065724469737061746368436c6173733c7533323e000011040c346672616d655f737570706f7274206469737061746368405065724469737061746368436c6173730404540110000c01186e6f726d616c1001045400012c6f7065726174696f6e616c100104540001246d616e6461746f72791001045400001504082873705f776569676874733c52756e74696d65446257656967687400000801107265616428010c753634000114777269746528010c75363400001904082873705f76657273696f6e3852756e74696d6556657273696f6e0000200124737065635f6e616d65ed03013452756e74696d65537472696e67000124696d706c5f6e616d65ed03013452756e74696d65537472696e67000144617574686f72696e675f76657273696f6e10010c753332000130737065635f76657273696f6e10010c753332000130696d706c5f76657273696f6e10010c753332000110617069731d04011c4170697356656300014c7472616e73616374696f6e5f76657273696f6e10010c75333200013473746174655f76657273696f6e080108753800001d04040c436f77040454012104000400210400000021040000022504002504000004082904100029040000030800000008002d04000005040031040c306672616d655f73797374656d1870616c6c6574144572726f720404540001183c496e76616c6964537065634e616d650000081101546865206e616d65206f662073706563696669636174696f6e20646f6573206e6f74206d61746368206265747765656e207468652063757272656e742072756e74696d6550616e6420746865206e65772072756e74696d652e685370656356657273696f6e4e65656473546f496e63726561736500010841015468652073706563696669636174696f6e2076657273696f6e206973206e6f7420616c6c6f77656420746f206465637265617365206265747765656e207468652063757272656e742072756e74696d6550616e6420746865206e65772072756e74696d652e744661696c6564546f4578747261637452756e74696d6556657273696f6e00020cec4661696c656420746f2065787472616374207468652072756e74696d652076657273696f6e2066726f6d20746865206e65772072756e74696d652e0009014569746865722063616c6c696e672060436f72655f76657273696f6e60206f72206465636f64696e67206052756e74696d6556657273696f6e60206661696c65642e4c4e6f6e44656661756c74436f6d706f73697465000304fc537569636964652063616c6c6564207768656e20746865206163636f756e7420686173206e6f6e2d64656661756c7420636f6d706f7369746520646174612e3c4e6f6e5a65726f526566436f756e74000404350154686572652069732061206e6f6e2d7a65726f207265666572656e636520636f756e742070726576656e74696e6720746865206163636f756e742066726f6d206265696e67207075726765642e3043616c6c46696c7465726564000504d0546865206f726967696e2066696c7465722070726576656e74207468652063616c6c20746f20626520646973706174636865642e046c4572726f7220666f72207468652053797374656d2070616c6c657435040c3870616c6c65745f7574696c6974791870616c6c65741043616c6c04045400011814626174636804011463616c6c733904017c5665633c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e0000487c53656e642061206261746368206f662064697370617463682063616c6c732e00b04d61792062652063616c6c65642066726f6d20616e79206f726967696e2065786365707420604e6f6e65602e005d012d206063616c6c73603a205468652063616c6c7320746f20626520646973706174636865642066726f6d207468652073616d65206f726967696e2e20546865206e756d626572206f662063616c6c206d757374206e6f74390120206578636565642074686520636f6e7374616e743a2060626174636865645f63616c6c735f6c696d6974602028617661696c61626c6520696e20636f6e7374616e74206d65746164617461292e0055014966206f726967696e20697320726f6f74207468656e207468652063616c6c7320617265206469737061746368656420776974686f757420636865636b696e67206f726967696e2066696c7465722e202854686973ec696e636c7564657320627970617373696e6720606672616d655f73797374656d3a3a436f6e6669673a3a4261736543616c6c46696c74657260292e0034232320436f6d706c6578697479d02d204f284329207768657265204320697320746865206e756d626572206f662063616c6c7320746f20626520626174636865642e005501546869732077696c6c2072657475726e20604f6b6020696e20616c6c2063697263756d7374616e6365732e20546f2064657465726d696e65207468652073756363657373206f66207468652062617463682c20616e31016576656e74206973206465706f73697465642e20496620612063616c6c206661696c656420616e64207468652062617463682077617320696e7465727275707465642c207468656e207468655501604261746368496e74657272757074656460206576656e74206973206465706f73697465642c20616c6f6e67207769746820746865206e756d626572206f66207375636365737366756c2063616c6c73206d6164654d01616e6420746865206572726f72206f6620746865206661696c65642063616c6c2e20496620616c6c2077657265207375636365737366756c2c207468656e2074686520604261746368436f6d706c65746564604c6576656e74206973206465706f73697465642e3461735f64657269766174697665080114696e6465782d04010c75313600011063616c6c3d04017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e000134dc53656e6420612063616c6c207468726f75676820616e20696e64657865642070736575646f6e796d206f66207468652073656e6465722e00550146696c7465722066726f6d206f726967696e206172652070617373656420616c6f6e672e205468652063616c6c2077696c6c2062652064697370617463686564207769746820616e206f726967696e207768696368bc757365207468652073616d652066696c74657220617320746865206f726967696e206f6620746869732063616c6c2e0045014e4f54453a20496620796f75206e65656420746f20656e73757265207468617420616e79206163636f756e742d62617365642066696c746572696e67206973206e6f7420686f6e6f7265642028692e652e61016265636175736520796f7520657870656374206070726f78796020746f2068617665206265656e2075736564207072696f7220696e207468652063616c6c20737461636b20616e6420796f7520646f206e6f742077616e7451017468652063616c6c207265737472696374696f6e7320746f206170706c7920746f20616e79207375622d6163636f756e7473292c207468656e20757365206061735f6d756c74695f7468726573686f6c645f31607c696e20746865204d756c74697369672070616c6c657420696e73746561642e00f44e4f54453a205072696f7220746f2076657273696f6e202a31322c2074686973207761732063616c6c6564206061735f6c696d697465645f737562602e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e2462617463685f616c6c04011463616c6c733904017c5665633c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e000234ec53656e642061206261746368206f662064697370617463682063616c6c7320616e642061746f6d6963616c6c792065786563757465207468656d2e21015468652077686f6c65207472616e73616374696f6e2077696c6c20726f6c6c6261636b20616e64206661696c20696620616e79206f66207468652063616c6c73206661696c65642e00b04d61792062652063616c6c65642066726f6d20616e79206f726967696e2065786365707420604e6f6e65602e005d012d206063616c6c73603a205468652063616c6c7320746f20626520646973706174636865642066726f6d207468652073616d65206f726967696e2e20546865206e756d626572206f662063616c6c206d757374206e6f74390120206578636565642074686520636f6e7374616e743a2060626174636865645f63616c6c735f6c696d6974602028617661696c61626c6520696e20636f6e7374616e74206d65746164617461292e0055014966206f726967696e20697320726f6f74207468656e207468652063616c6c7320617265206469737061746368656420776974686f757420636865636b696e67206f726967696e2066696c7465722e202854686973ec696e636c7564657320627970617373696e6720606672616d655f73797374656d3a3a436f6e6669673a3a4261736543616c6c46696c74657260292e0034232320436f6d706c6578697479d02d204f284329207768657265204320697320746865206e756d626572206f662063616c6c7320746f20626520626174636865642e2c64697370617463685f617308012461735f6f726967696e95060154426f783c543a3a50616c6c6574734f726967696e3e00011063616c6c3d04017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e000318c84469737061746368657320612066756e6374696f6e2063616c6c207769746820612070726f7669646564206f726967696e2e00c4546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f526f6f745f2e0034232320436f6d706c65786974791c2d204f2831292e2c666f7263655f626174636804011463616c6c733904017c5665633c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e0004347c53656e642061206261746368206f662064697370617463682063616c6c732ed4556e6c696b6520606261746368602c20697420616c6c6f7773206572726f727320616e6420776f6e277420696e746572727570742e00b04d61792062652063616c6c65642066726f6d20616e79206f726967696e2065786365707420604e6f6e65602e005d012d206063616c6c73603a205468652063616c6c7320746f20626520646973706174636865642066726f6d207468652073616d65206f726967696e2e20546865206e756d626572206f662063616c6c206d757374206e6f74390120206578636565642074686520636f6e7374616e743a2060626174636865645f63616c6c735f6c696d6974602028617661696c61626c6520696e20636f6e7374616e74206d65746164617461292e004d014966206f726967696e20697320726f6f74207468656e207468652063616c6c732061726520646973706174636820776974686f757420636865636b696e67206f726967696e2066696c7465722e202854686973ec696e636c7564657320627970617373696e6720606672616d655f73797374656d3a3a436f6e6669673a3a4261736543616c6c46696c74657260292e0034232320436f6d706c6578697479d02d204f284329207768657265204320697320746865206e756d626572206f662063616c6c7320746f20626520626174636865642e2c776974685f77656967687408011063616c6c3d04017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e000118776569676874200118576569676874000518c4446973706174636820612066756e6374696f6e2063616c6c2077697468206120737065636966696564207765696768742e002d01546869732066756e6374696f6e20646f6573206e6f7420636865636b2074686520776569676874206f66207468652063616c6c2c20616e6420696e737465616420616c6c6f777320746865b8526f6f74206f726967696e20746f20737065636966792074686520776569676874206f66207468652063616c6c2e00c4546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f526f6f745f2e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e39040000023d04003d0408586a6f7973747265616d5f6e6f64655f72756e74696d652c52756e74696d6543616c6c00018c1853797374656d0400f10301ad0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c53797374656d2c2052756e74696d653e0000001c5574696c6974790400350401b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c5574696c6974792c2052756e74696d653e00010010426162650400410401a50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c426162652c2052756e74696d653e0002002454696d657374616d700400650401b90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c54696d657374616d702c2052756e74696d653e0003002042616c616e6365730400690401b50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c42616c616e6365732c2052756e74696d653e00050068456c656374696f6e50726f76696465724d756c7469506861736504006d0401fd0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c456c656374696f6e50726f76696465724d756c746950686173652c2052756e74696d653e0007001c5374616b696e670400590501b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c5374616b696e672c2052756e74696d653e0008001c53657373696f6e04007d0501b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c53657373696f6e2c2052756e74696d653e0009001c4772616e6470610400890501b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4772616e6470612c2052756e74696d653e000b0020496d4f6e6c696e650400b90501b50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c496d4f6e6c696e652c2052756e74696d653e000d0024566f7465724c6973740400d90501b90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c566f7465724c6973742c2052756e74696d653e0010001c56657374696e670400dd0501b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c56657374696e672c2052756e74696d653e001100204d756c74697369670400e50501b50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4d756c74697369672c2052756e74696d653e0012001c436f756e63696c0400ed0501b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c436f756e63696c2c2052756e74696d653e001300285265666572656e64756d0400f10501bd0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c5265666572656e64756d2c2052756e74696d653e0014001c4d656d626572730400f50501b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4d656d626572732c2052756e74696d653e00150014466f72756d0400f90501a90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c466f72756d2c2052756e74696d653e00160030436f6e737469747574696f6e0400fd0501c50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c436f6e737469747574696f6e2c2052756e74696d653e00170018426f756e74790400010601ad0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c426f756e74792c2052756e74696d653e001800404a6f7973747265616d5574696c6974790400050601d50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4a6f7973747265616d5574696c6974792c2052756e74696d653e0019001c436f6e74656e740400090601b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c436f6e74656e742c2052756e74696d653e001a001c53746f726167650400390601b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c53746f726167652c2052756e74696d653e001b003050726f6a656374546f6b656e04003d0601c50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c50726f6a656374546f6b656e2c2052756e74696d653e001c003c50726f706f73616c73456e67696e650400650601d10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c50726f706f73616c73456e67696e652c2052756e74696d653e001d004c50726f706f73616c7344697363757373696f6e0400690601e10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c50726f706f73616c7344697363757373696f6e2c2052756e74696d653e001e003850726f706f73616c73436f64657804006d0601cd0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c50726f706f73616c73436f6465782c2052756e74696d653e001f0044466f72756d576f726b696e6747726f75700400710601d90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c466f72756d576f726b696e6747726f75702c2052756e74696d653e0020004c53746f72616765576f726b696e6747726f75700400750601e10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c53746f72616765576f726b696e6747726f75702c2052756e74696d653e0021004c436f6e74656e74576f726b696e6747726f75700400790601e10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c436f6e74656e74576f726b696e6747726f75702c2052756e74696d653e0022006c4f7065726174696f6e73576f726b696e6747726f7570416c70686104007d0601010273656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4f7065726174696f6e73576f726b696e6747726f7570416c7068612c2052756e74696d653e0023003c417070576f726b696e6747726f75700400810601d10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c417070576f726b696e6747726f75702c2052756e74696d653e002400584d656d62657273686970576f726b696e6747726f75700400850601ed0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4d656d62657273686970576f726b696e6747726f75702c2052756e74696d653e002500684f7065726174696f6e73576f726b696e6747726f7570426574610400890601fd0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4f7065726174696f6e73576f726b696e6747726f7570426574612c2052756e74696d653e0026006c4f7065726174696f6e73576f726b696e6747726f757047616d6d6104008d0601010273656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4f7065726174696f6e73576f726b696e6747726f757047616d6d612c2052756e74696d653e00270060446973747269627574696f6e576f726b696e6747726f75700400910601f50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c446973747269627574696f6e576f726b696e6747726f75702c2052756e74696d653e0028000041040c2c70616c6c65745f626162651870616c6c65741043616c6c04045400010c4c7265706f72745f65717569766f636174696f6e08014865717569766f636174696f6e5f70726f6f6645040184426f783c45717569766f636174696f6e50726f6f663c543a3a4865616465723e3e00013c6b65795f6f776e65725f70726f6f6659040140543a3a4b65794f776e657250726f6f6600001009015265706f727420617574686f726974792065717569766f636174696f6e2f6d69736265686176696f722e2054686973206d6574686f642077696c6c2076657269667905017468652065717569766f636174696f6e2070726f6f6620616e642076616c69646174652074686520676976656e206b6579206f776e6572736869702070726f6f660d01616761696e73742074686520657874726163746564206f6666656e6465722e20496620626f7468206172652076616c69642c20746865206f6666656e63652077696c6c306265207265706f727465642e707265706f72745f65717569766f636174696f6e5f756e7369676e656408014865717569766f636174696f6e5f70726f6f6645040184426f783c45717569766f636174696f6e50726f6f663c543a3a4865616465723e3e00013c6b65795f6f776e65725f70726f6f6659040140543a3a4b65794f776e657250726f6f6600012009015265706f727420617574686f726974792065717569766f636174696f6e2f6d69736265686176696f722e2054686973206d6574686f642077696c6c2076657269667905017468652065717569766f636174696f6e2070726f6f6620616e642076616c69646174652074686520676976656e206b6579206f776e6572736869702070726f6f660d01616761696e73742074686520657874726163746564206f6666656e6465722e20496620626f7468206172652076616c69642c20746865206f6666656e63652077696c6c306265207265706f727465642e0d01546869732065787472696e736963206d7573742062652063616c6c656420756e7369676e656420616e642069742069732065787065637465642074686174206f6e6c791501626c6f636b20617574686f72732077696c6c2063616c6c206974202876616c69646174656420696e206056616c6964617465556e7369676e656460292c2061732073756368150169662074686520626c6f636b20617574686f7220697320646566696e65642069742077696c6c20626520646566696e6564206173207468652065717569766f636174696f6e247265706f727465722e48706c616e5f636f6e6669675f6368616e6765040118636f6e6669675d0401504e657874436f6e66696744657363726970746f720002105d01506c616e20616e2065706f636820636f6e666967206368616e67652e205468652065706f636820636f6e666967206368616e6765206973207265636f7264656420616e642077696c6c20626520656e6163746564206f6e5101746865206e6578742063616c6c20746f2060656e6163745f65706f63685f6368616e6765602e2054686520636f6e6669672077696c6c20626520616374697661746564206f6e652065706f63682061667465722e59014d756c7469706c652063616c6c7320746f2074686973206d6574686f642077696c6c207265706c61636520616e79206578697374696e6720706c616e6e656420636f6e666967206368616e6765207468617420686164546e6f74206265656e20656e6163746564207965742e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e4504084873705f636f6e73656e7375735f736c6f74734445717569766f636174696f6e50726f6f660818486561646572014904084964015104001001206f6666656e646572510401084964000110736c6f7455040110536c6f7400013066697273745f686561646572490401184865616465720001347365636f6e645f6865616465724904011848656164657200004904102873705f72756e74696d651c67656e65726963186865616465721848656164657208184e756d62657201101048617368014d040014012c706172656e745f686173682c0130486173683a3a4f75747075740001186e756d626572e90301184e756d62657200012873746174655f726f6f742c0130486173683a3a4f757470757400013c65787472696e736963735f726f6f742c0130486173683a3a4f757470757400011864696765737434011844696765737400004d040c2873705f72756e74696d65187472616974732c426c616b6554776f3235360000000051040c4473705f636f6e73656e7375735f626162650c617070185075626c696300000400dc013c737232353531393a3a5075626c696300005504084873705f636f6e73656e7375735f736c6f747310536c6f740000040028010c75363400005904082873705f73657373696f6e3c4d656d6265727368697050726f6f6600000c011c73657373696f6e10013053657373696f6e496e646578000128747269655f6e6f646573a90201305665633c5665633c75383e3e00013c76616c696461746f725f636f756e7410013856616c696461746f72436f756e7400005d040c4473705f636f6e73656e7375735f626162651c64696765737473504e657874436f6e66696744657363726970746f72000104085631080104637d030128287536342c2075363429000134616c6c6f7765645f736c6f747361040130416c6c6f776564536c6f7473000100006104084473705f636f6e73656e7375735f6261626530416c6c6f776564536c6f747300010c305072696d617279536c6f7473000000745072696d617279416e645365636f6e64617279506c61696e536c6f74730001006c5072696d617279416e645365636f6e64617279565246536c6f74730002000065040c4070616c6c65745f74696d657374616d701870616c6c65741043616c6c0404540001040c73657404010c6e6f77240124543a3a4d6f6d656e7400003c54536574207468652063757272656e742074696d652e005501546869732063616c6c2073686f756c6420626520696e766f6b65642065786163746c79206f6e63652070657220626c6f636b2e2049742077696c6c2070616e6963206174207468652066696e616c697a6174696f6ed470686173652c20696620746869732063616c6c206861736e2774206265656e20696e766f6b656420627920746861742074696d652e0041015468652074696d657374616d702073686f756c642062652067726561746572207468616e207468652070726576696f7573206f6e652062792074686520616d6f756e742073706563696669656420627940604d696e696d756d506572696f64602e00d4546865206469737061746368206f726967696e20666f7220746869732063616c6c206d7573742062652060496e686572656e74602e0034232320436f6d706c657869747931012d20604f2831296020284e6f7465207468617420696d706c656d656e746174696f6e73206f6620604f6e54696d657374616d7053657460206d75737420616c736f20626520604f283129602961012d20312073746f72616765207265616420616e6420312073746f72616765206d75746174696f6e2028636f64656320604f28312960292e202862656361757365206f6620604469645570646174653a3a74616b656020696e402020606f6e5f66696e616c697a656029d42d2031206576656e742068616e646c657220606f6e5f74696d657374616d705f736574602e204d75737420626520604f283129602e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e69040c3c70616c6c65745f62616c616e6365731870616c6c65741043616c6c080454000449000118207472616e73666572080110646573740001504163636f756e7449644c6f6f6b75704f663c543e00011476616c7565ec0128543a3a42616c616e6365000058d45472616e7366657220736f6d65206c697175696420667265652062616c616e636520746f20616e6f74686572206163636f756e742e000501607472616e73666572602077696c6c207365742074686520604672656542616c616e636560206f66207468652073656e64657220616e642072656365697665722e11014966207468652073656e6465722773206163636f756e742069732062656c6f7720746865206578697374656e7469616c206465706f736974206173206120726573756c74b06f6620746865207472616e736665722c20746865206163636f756e742077696c6c206265207265617065642e001501546865206469737061746368206f726967696e20666f7220746869732063616c6c206d75737420626520605369676e65646020627920746865207472616e736163746f722e0034232320436f6d706c657869747961012d20446570656e64656e74206f6e20617267756d656e747320627574206e6f7420637269746963616c2c20676976656e2070726f70657220696d706c656d656e746174696f6e7320666f7220696e70757420636f6e66696794202074797065732e205365652072656c617465642066756e6374696f6e732062656c6f772e31012d20497420636f6e7461696e732061206c696d69746564206e756d626572206f6620726561647320616e642077726974657320696e7465726e616c6c7920616e64206e6f20636f6d706c6578382020636f6d7075746174696f6e2e004852656c617465642066756e6374696f6e733a004d0120202d2060656e737572655f63616e5f77697468647261776020697320616c776179732063616c6c656420696e7465726e616c6c792062757420686173206120626f756e64656420636f6d706c65786974792e290120202d205472616e7366657272696e672062616c616e63657320746f206163636f756e7473207468617420646964206e6f74206578697374206265666f72652077696c6c206361757365cc2020202060543a3a4f6e4e65774163636f756e743a3a6f6e5f6e65775f6163636f756e746020746f2062652063616c6c65642e5d0120202d2052656d6f76696e6720656e6f7567682066756e64732066726f6d20616e206163636f756e742077696c6c20747269676765722060543a3a4475737452656d6f76616c3a3a6f6e5f756e62616c616e636564602e5d0120202d20607472616e736665725f6b6565705f616c6976656020776f726b73207468652073616d652077617920617320607472616e73666572602c206275742068617320616e206164646974696f6e616c20636865636bdc202020207468617420746865207472616e736665722077696c6c206e6f74206b696c6c20746865206f726967696e206163636f756e742e2c7365745f62616c616e63650c010c77686f0001504163636f756e7449644c6f6f6b75704f663c543e0001206e65775f66726565ec0128543a3a42616c616e63650001306e65775f7265736572766564ec0128543a3a42616c616e636500012090536574207468652062616c616e636573206f66206120676976656e206163636f756e742e001d01546869732077696c6c20616c74657220604672656542616c616e63656020616e642060526573657276656442616c616e63656020696e2073746f726167652e2069742077696c6c3101616c736f20616c7465722074686520746f74616c2069737375616e6365206f66207468652073797374656d202860546f74616c49737375616e6365602920617070726f7072696174656c792e1501496620746865206e65772066726565206f722072657365727665642062616c616e63652069732062656c6f7720746865206578697374656e7469616c206465706f7369742cfc69742077696c6c20726573657420746865206163636f756e74206e6f6e63652028606672616d655f73797374656d3a3a4163636f756e744e6f6e636560292e00b0546865206469737061746368206f726967696e20666f7220746869732063616c6c2069732060726f6f74602e38666f7263655f7472616e736665720c0118736f757263650001504163636f756e7449644c6f6f6b75704f663c543e000110646573740001504163636f756e7449644c6f6f6b75704f663c543e00011476616c7565ec0128543a3a42616c616e63650002144d0145786163746c7920617320607472616e73666572602c2065786365707420746865206f726967696e206d75737420626520726f6f7420616e642074686520736f75726365206163636f756e74206d6179206265287370656369666965642e34232320436f6d706c65786974794d012d2053616d65206173207472616e736665722c20627574206164646974696f6e616c207265616420616e6420777269746520626563617573652074686520736f75726365206163636f756e74206973206e6f747c2020617373756d656420746f20626520696e20746865206f7665726c61792e4c7472616e736665725f6b6565705f616c697665080110646573740001504163636f756e7449644c6f6f6b75704f663c543e00011476616c7565ec0128543a3a42616c616e63650003184d0153616d6520617320746865205b607472616e73666572605d2063616c6c2c206275742077697468206120636865636b207468617420746865207472616e736665722077696c6c206e6f74206b696c6c207468653c6f726967696e206163636f756e742e00b8393925206f66207468652074696d6520796f752077616e74205b607472616e73666572605d20696e73746561642e00c05b607472616e73666572605d3a207374727563742e50616c6c65742e68746d6c236d6574686f642e7472616e73666572307472616e736665725f616c6c080110646573740001504163636f756e7449644c6f6f6b75704f663c543e0001286b6565705f616c697665980110626f6f6c00044005015472616e736665722074686520656e74697265207472616e7366657261626c652062616c616e63652066726f6d207468652063616c6c6572206163636f756e742e0059014e4f54453a20546869732066756e6374696f6e206f6e6c7920617474656d70747320746f207472616e73666572205f7472616e7366657261626c655f2062616c616e6365732e2054686973206d65616e7320746861746101616e79206c6f636b65642c2072657365727665642c206f72206578697374656e7469616c206465706f7369747320287768656e20606b6565705f616c6976656020697320607472756560292c2077696c6c206e6f742062655d017472616e7366657272656420627920746869732066756e6374696f6e2e20546f20656e73757265207468617420746869732066756e6374696f6e20726573756c747320696e2061206b696c6c6564206163636f756e742c4501796f75206d69676874206e65656420746f207072657061726520746865206163636f756e742062792072656d6f76696e6720616e79207265666572656e636520636f756e746572732c2073746f72616765406465706f736974732c206574632e2e2e00c0546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265205369676e65642e00a02d206064657374603a2054686520726563697069656e74206f6620746865207472616e736665722e59012d20606b6565705f616c697665603a204120626f6f6c65616e20746f2064657465726d696e652069662074686520607472616e736665725f616c6c60206f7065726174696f6e2073686f756c642073656e6420616c6c4d0120206f66207468652066756e647320746865206163636f756e74206861732c2063617573696e67207468652073656e646572206163636f756e7420746f206265206b696c6c6564202866616c7365292c206f72590120207472616e736665722065766572797468696e6720657863657074206174206c6561737420746865206578697374656e7469616c206465706f7369742c2077686963682077696c6c2067756172616e74656520746fd420206b656570207468652073656e646572206163636f756e7420616c697665202874727565292e20232320436f6d706c657869747939012d204f2831292e204a757374206c696b65207472616e736665722c206275742072656164696e672074686520757365722773207472616e7366657261626c652062616c616e63652066697273742e3c666f7263655f756e7265736572766508010c77686f0001504163636f756e7449644c6f6f6b75704f663c543e000118616d6f756e74180128543a3a42616c616e636500050cb0556e7265736572766520736f6d652062616c616e63652066726f6d2061207573657220627920666f7263652e006c43616e206f6e6c792062652063616c6c656420627920524f4f542e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e6d040c9070616c6c65745f656c656374696f6e5f70726f76696465725f6d756c74695f70686173651870616c6c65741043616c6c0404540001143c7375626d69745f756e7369676e65640801307261775f736f6c7574696f6e710401b0426f783c526177536f6c7574696f6e3c536f6c7574696f6e4f663c543a3a4d696e6572436f6e6669673e3e3e00011c7769746e65737341050158536f6c7574696f6e4f72536e617073686f7453697a65000038a45375626d6974206120736f6c7574696f6e20666f722074686520756e7369676e65642070686173652e00c8546865206469737061746368206f726967696e20666f20746869732063616c6c206d757374206265205f5f6e6f6e655f5f2e003d0154686973207375626d697373696f6e20697320636865636b6564206f6e2074686520666c792e204d6f72656f7665722c207468697320756e7369676e656420736f6c7574696f6e206973206f6e6c79550176616c696461746564207768656e207375626d697474656420746f2074686520706f6f6c2066726f6d20746865202a2a6c6f63616c2a2a206e6f64652e204566666563746976656c792c2074686973206d65616e735d0174686174206f6e6c79206163746976652076616c696461746f72732063616e207375626d69742074686973207472616e73616374696f6e207768656e20617574686f72696e67206120626c6f636b202873696d696c617240746f20616e20696e686572656e74292e005901546f2070726576656e7420616e7920696e636f727265637420736f6c7574696f6e2028616e642074687573207761737465642074696d652f776569676874292c2074686973207472616e73616374696f6e2077696c6c4d0170616e69632069662074686520736f6c7574696f6e207375626d6974746564206279207468652076616c696461746f7220697320696e76616c696420696e20616e79207761792c206566666563746976656c799c70757474696e6720746865697220617574686f72696e6720726577617264206174207269736b2e00e04e6f206465706f736974206f7220726577617264206973206173736f63696174656420776974682074686973207375626d697373696f6e2e6c7365745f6d696e696d756d5f756e747275737465645f73636f72650401406d617962655f6e6578745f73636f7265450501544f7074696f6e3c456c656374696f6e53636f72653e000114b05365742061206e65772076616c756520666f7220604d696e696d756d556e7472757374656453636f7265602e00d84469737061746368206f726967696e206d75737420626520616c69676e656420776974682060543a3a466f7263654f726967696e602e00f05468697320636865636b2063616e206265207475726e6564206f66662062792073657474696e67207468652076616c756520746f20604e6f6e65602e747365745f656d657267656e63795f656c656374696f6e5f726573756c74040120737570706f72747349050158537570706f7274733c543a3a4163636f756e7449643e0002205901536574206120736f6c7574696f6e20696e207468652071756575652c20746f2062652068616e646564206f757420746f2074686520636c69656e74206f6620746869732070616c6c657420696e20746865206e6578748863616c6c20746f2060456c656374696f6e50726f76696465723a3a656c656374602e004501546869732063616e206f6e6c79206265207365742062792060543a3a466f7263654f726967696e602c20616e64206f6e6c79207768656e207468652070686173652069732060456d657267656e6379602e00610154686520736f6c7574696f6e206973206e6f7420636865636b656420666f7220616e7920666561736962696c69747920616e6420697320617373756d656420746f206265207472757374776f727468792c20617320616e795101666561736962696c69747920636865636b20697473656c662063616e20696e207072696e6369706c652063617573652074686520656c656374696f6e2070726f6365737320746f206661696c202864756520746f686d656d6f72792f77656967687420636f6e73747261696e73292e187375626d69740401307261775f736f6c7574696f6e710401b0426f783c526177536f6c7574696f6e3c536f6c7574696f6e4f663c543a3a4d696e6572436f6e6669673e3e3e0003249c5375626d6974206120736f6c7574696f6e20666f7220746865207369676e65642070686173652e00d0546865206469737061746368206f726967696e20666f20746869732063616c6c206d757374206265205f5f7369676e65645f5f2e005d0154686520736f6c7574696f6e20697320706f74656e7469616c6c79207175657565642c206261736564206f6e2074686520636c61696d65642073636f726520616e642070726f6365737365642061742074686520656e64506f6620746865207369676e65642070686173652e005d0141206465706f73697420697320726573657276656420616e64207265636f7264656420666f722074686520736f6c7574696f6e2e204261736564206f6e20746865206f7574636f6d652c2074686520736f6c7574696f6e15016d696768742062652072657761726465642c20736c61736865642c206f722067657420616c6c206f7220612070617274206f6620746865206465706f736974206261636b2e4c676f7665726e616e63655f66616c6c6261636b0801406d617962655f6d61785f766f746572730102012c4f7074696f6e3c7533323e0001446d617962655f6d61785f746172676574730102012c4f7074696f6e3c7533323e00041080547269676765722074686520676f7665726e616e63652066616c6c6261636b2e004901546869732063616e206f6e6c792062652063616c6c6564207768656e205b6050686173653a3a456d657267656e6379605d20697320656e61626c65642c20617320616e20616c7465726e617469766520746fc063616c6c696e67205b6043616c6c3a3a7365745f656d657267656e63795f656c656374696f6e5f726573756c74605d2e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e7104089070616c6c65745f656c656374696f6e5f70726f76696465725f6d756c74695f70686173652c526177536f6c7574696f6e040453017504000c0120736f6c7574696f6e750401045300011473636f72659c0134456c656374696f6e53636f7265000114726f756e6410010c7533320000750408586a6f7973747265616d5f6e6f64655f72756e74696d65384e706f73536f6c7574696f6e31360000400118766f74657331790400000118766f74657332850400000118766f74657333990400000118766f74657334a50400000118766f74657335b10400000118766f74657336bd0400000118766f74657337c90400000118766f74657338d50400000118766f74657339e1040000011c766f7465733130ed040000011c766f7465733131f9040000011c766f746573313205050000011c766f746573313311050000011c766f74657331341d050000011c766f746573313529050000011c766f7465733136350500000079040000027d04007d0400000408e90381040081040000062d0400850400000289040089040000040ce9038d048104008d04000004088104910400910400000695040095040c3473705f61726974686d65746963287065725f7468696e677318506572553136000004002d04010c753136000099040000029d04009d040000040ce903a104810400a104000003020000008d0400a504000002a90400a9040000040ce903ad04810400ad04000003030000008d0400b104000002b50400b5040000040ce903b904810400b904000003040000008d0400bd04000002c10400c1040000040ce903c504810400c504000003050000008d0400c904000002cd0400cd040000040ce903d104810400d104000003060000008d0400d504000002d90400d9040000040ce903dd04810400dd04000003070000008d0400e104000002e50400e5040000040ce903e904810400e904000003080000008d0400ed04000002f10400f1040000040ce903f504810400f504000003090000008d0400f904000002fd0400fd040000040ce903010581040001050000030a0000008d0400050500000209050009050000040ce9030d058104000d050000030b0000008d0400110500000215050015050000040ce903190581040019050000030c0000008d04001d0500000221050021050000040ce903250581040025050000030d0000008d040029050000022d05002d050000040ce903310581040031050000030e0000008d0400350500000239050039050000040ce9033d058104003d050000030f0000008d04004105089070616c6c65745f656c656374696f6e5f70726f76696465725f6d756c74695f706861736558536f6c7574696f6e4f72536e617073686f7453697a650000080118766f74657273e903010c75333200011c74617267657473e903010c7533320000450504184f7074696f6e040454019c0108104e6f6e6500000010536f6d6504009c000001000049050000024d05004d0500000408005105005105084473705f6e706f735f656c656374696f6e731c537570706f727404244163636f756e744964010000080114746f74616c18013c457874656e64656442616c616e6365000118766f74657273550501845665633c284163636f756e7449642c20457874656e64656442616c616e6365293e000055050000024d01005905103870616c6c65745f7374616b696e671870616c6c65741870616c6c65741043616c6c04045400016810626f6e640c0128636f6e74726f6c6c65720001504163636f756e7449644c6f6f6b75704f663c543e00011476616c7565ec013042616c616e63654f663c543e00011470617965655d05017c52657761726444657374696e6174696f6e3c543a3a4163636f756e7449643e00003c610154616b6520746865206f726967696e206163636f756e74206173206120737461736820616e64206c6f636b207570206076616c756560206f66206974732062616c616e63652e2060636f6e74726f6c6c6572602077696c6c80626520746865206163636f756e74207468617420636f6e74726f6c732069742e002d016076616c756560206d757374206265206d6f7265207468616e2074686520606d696e696d756d5f62616c616e636560207370656369666965642062792060543a3a43757272656e6379602e002101546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20627920746865207374617368206163636f756e742e003c456d6974732060426f6e646564602e34232320436f6d706c6578697479d02d20496e646570656e64656e74206f662074686520617267756d656e74732e204d6f64657261746520636f6d706c65786974792e1c2d204f2831292e642d20546872656520657874726120444220656e74726965732e004d014e4f54453a2054776f206f66207468652073746f726167652077726974657320286053656c663a3a626f6e646564602c206053656c663a3a7061796565602920617265205f6e657665725f20636c65616e65643d01756e6c6573732074686520606f726967696e602066616c6c732062656c6f77205f6578697374656e7469616c206465706f7369745f20616e6420676574732072656d6f76656420617320647573742e28626f6e645f65787472610401386d61785f6164646974696f6e616cec013042616c616e63654f663c543e000138610141646420736f6d6520657874726120616d6f756e742074686174206861766520617070656172656420696e207468652073746173682060667265655f62616c616e63656020696e746f207468652062616c616e636520757030666f72207374616b696e672e005101546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f206279207468652073746173682c206e6f742074686520636f6e74726f6c6c65722e004d01557365207468697320696620746865726520617265206164646974696f6e616c2066756e647320696e20796f7572207374617368206163636f756e74207468617420796f75207769736820746f20626f6e642e5501556e6c696b65205b60626f6e64605d2853656c663a3a626f6e6429206f72205b60756e626f6e64605d2853656c663a3a756e626f6e642920746869732066756e6374696f6e20646f6573206e6f7420696d706f7365bc616e79206c696d69746174696f6e206f6e2074686520616d6f756e7420746861742063616e2062652061646465642e003c456d6974732060426f6e646564602e0034232320436f6d706c6578697479e42d20496e646570656e64656e74206f662074686520617267756d656e74732e20496e7369676e69666963616e7420636f6d706c65786974792e1c2d204f2831292e18756e626f6e6404011476616c7565ec013042616c616e63654f663c543e00024c51015363686564756c65206120706f7274696f6e206f662074686520737461736820746f20626520756e6c6f636b656420726561647920666f72207472616e73666572206f75742061667465722074686520626f6e64fc706572696f6420656e64732e2049662074686973206c656176657320616e20616d6f756e74206163746976656c7920626f6e646564206c657373207468616e2101543a3a43757272656e63793a3a6d696e696d756d5f62616c616e636528292c207468656e20697420697320696e6372656173656420746f207468652066756c6c20616d6f756e742e005101546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2062792074686520636f6e74726f6c6c65722c206e6f74207468652073746173682e0045014f6e63652074686520756e6c6f636b20706572696f6420697320646f6e652c20796f752063616e2063616c6c206077697468647261775f756e626f6e6465646020746f2061637475616c6c79206d6f7665bc7468652066756e6473206f7574206f66206d616e6167656d656e7420726561647920666f72207472616e736665722e0031014e6f206d6f7265207468616e2061206c696d69746564206e756d626572206f6620756e6c6f636b696e67206368756e6b73202873656520604d6178556e6c6f636b696e674368756e6b736029410163616e20636f2d657869737473206174207468652073616d652074696d652e20496620746865726520617265206e6f20756e6c6f636b696e67206368756e6b7320736c6f747320617661696c61626c6545015b6043616c6c3a3a77697468647261775f756e626f6e646564605d2069732063616c6c656420746f2072656d6f766520736f6d65206f6620746865206368756e6b732028696620706f737369626c65292e00390149662061207573657220656e636f756e74657273207468652060496e73756666696369656e74426f6e6460206572726f72207768656e2063616c6c696e6720746869732065787472696e7369632c1901746865792073686f756c642063616c6c20606368696c6c6020666972737420696e206f7264657220746f206672656520757020746865697220626f6e6465642066756e64732e0044456d6974732060556e626f6e646564602e009453656520616c736f205b6043616c6c3a3a77697468647261775f756e626f6e646564605d2e4477697468647261775f756e626f6e6465640401486e756d5f736c617368696e675f7370616e7310010c753332000338290152656d6f766520616e7920756e6c6f636b6564206368756e6b732066726f6d207468652060756e6c6f636b696e67602071756575652066726f6d206f7572206d616e6167656d656e742e0031015468697320657373656e7469616c6c7920667265657320757020746861742062616c616e636520746f206265207573656420627920746865207374617368206163636f756e7420746f20646f4877686174657665722069742077616e74732e001501546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2062792074686520636f6e74726f6c6c65722e0048456d697473206057697468647261776e602e006853656520616c736f205b6043616c6c3a3a756e626f6e64605d2e0034232320436f6d706c6578697479d84f285329207768657265205320697320746865206e756d626572206f6620736c617368696e67207370616e7320746f2072656d6f766509014e4f54453a2057656967687420616e6e6f746174696f6e20697320746865206b696c6c207363656e6172696f2c20776520726566756e64206f74686572776973652e2076616c69646174650401147072656673b0013856616c696461746f725072656673000414e44465636c617265207468652064657369726520746f2076616c696461746520666f7220746865206f726967696e20636f6e74726f6c6c65722e00d8456666656374732077696c6c2062652066656c742061742074686520626567696e6e696e67206f6620746865206e657874206572612e005101546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2062792074686520636f6e74726f6c6c65722c206e6f74207468652073746173682e206e6f6d696e61746504011c74617267657473610501645665633c4163636f756e7449644c6f6f6b75704f663c543e3e0005280d014465636c617265207468652064657369726520746f206e6f6d696e6174652060746172676574736020666f7220746865206f726967696e20636f6e74726f6c6c65722e00d8456666656374732077696c6c2062652066656c742061742074686520626567696e6e696e67206f6620746865206e657874206572612e005101546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2062792074686520636f6e74726f6c6c65722c206e6f74207468652073746173682e0034232320436f6d706c65786974792d012d20546865207472616e73616374696f6e277320636f6d706c65786974792069732070726f706f7274696f6e616c20746f207468652073697a65206f662060746172676574736020284e29050177686963682069732063617070656420617420436f6d7061637441737369676e6d656e74733a3a4c494d49542028543a3a4d61784e6f6d696e6174696f6e73292ed42d20426f74682074686520726561647320616e642077726974657320666f6c6c6f7720612073696d696c6172207061747465726e2e146368696c6c000628c44465636c617265206e6f2064657369726520746f206569746865722076616c6964617465206f72206e6f6d696e6174652e00d8456666656374732077696c6c2062652066656c742061742074686520626567696e6e696e67206f6620746865206e657874206572612e005101546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2062792074686520636f6e74726f6c6c65722c206e6f74207468652073746173682e0034232320436f6d706c6578697479e42d20496e646570656e64656e74206f662074686520617267756d656e74732e20496e7369676e69666963616e7420636f6d706c65786974792e502d20436f6e7461696e73206f6e6520726561642ec42d2057726974657320617265206c696d6974656420746f2074686520606f726967696e60206163636f756e74206b65792e247365745f706179656504011470617965655d05017c52657761726444657374696e6174696f6e3c543a3a4163636f756e7449643e000730b42852652d2973657420746865207061796d656e742074617267657420666f72206120636f6e74726f6c6c65722e005101456666656374732077696c6c2062652066656c7420696e7374616e746c792028617320736f6f6e20617320746869732066756e6374696f6e20697320636f6d706c65746564207375636365737366756c6c79292e005101546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2062792074686520636f6e74726f6c6c65722c206e6f74207468652073746173682e0034232320436f6d706c6578697479182d204f283129e42d20496e646570656e64656e74206f662074686520617267756d656e74732e20496e7369676e69666963616e7420636f6d706c65786974792e942d20436f6e7461696e732061206c696d69746564206e756d626572206f662072656164732ec42d2057726974657320617265206c696d6974656420746f2074686520606f726967696e60206163636f756e74206b65792e242d2d2d2d2d2d2d2d2d387365745f636f6e74726f6c6c6572040128636f6e74726f6c6c65720001504163636f756e7449644c6f6f6b75704f663c543e00082c8c2852652d297365742074686520636f6e74726f6c6c6572206f6620612073746173682e005101456666656374732077696c6c2062652066656c7420696e7374616e746c792028617320736f6f6e20617320746869732066756e6374696f6e20697320636f6d706c65746564207375636365737366756c6c79292e005101546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f206279207468652073746173682c206e6f742074686520636f6e74726f6c6c65722e0034232320436f6d706c6578697479104f283129e42d20496e646570656e64656e74206f662074686520617267756d656e74732e20496e7369676e69666963616e7420636f6d706c65786974792e942d20436f6e7461696e732061206c696d69746564206e756d626572206f662072656164732ec42d2057726974657320617265206c696d6974656420746f2074686520606f726967696e60206163636f756e74206b65792e4c7365745f76616c696461746f725f636f756e7404010c6e6577e903010c75333200091890536574732074686520696465616c206e756d626572206f662076616c696461746f72732e0084546865206469737061746368206f726967696e206d75737420626520526f6f742e0034232320436f6d706c6578697479104f28312960696e6372656173655f76616c696461746f725f636f756e740401286164646974696f6e616ce903010c753332000a1ce4496e6372656d656e74732074686520696465616c206e756d626572206f662076616c696461746f7273207570746f206d6178696d756d206f668c60456c656374696f6e50726f7669646572426173653a3a4d617857696e6e657273602e0084546865206469737061746368206f726967696e206d75737420626520526f6f742e0034232320436f6d706c65786974799853616d65206173205b6053656c663a3a7365745f76616c696461746f725f636f756e74605d2e547363616c655f76616c696461746f725f636f756e74040118666163746f726505011c50657263656e74000b1c0d015363616c652075702074686520696465616c206e756d626572206f662076616c696461746f7273206279206120666163746f72207570746f206d6178696d756d206f668c60456c656374696f6e50726f7669646572426173653a3a4d617857696e6e657273602e0084546865206469737061746368206f726967696e206d75737420626520526f6f742e0034232320436f6d706c65786974799853616d65206173205b6053656c663a3a7365745f76616c696461746f725f636f756e74605d2e34666f7263655f6e6f5f65726173000c34ac466f72636520746865726520746f206265206e6f206e6577206572617320696e646566696e6974656c792e0084546865206469737061746368206f726967696e206d75737420626520526f6f742e002423205761726e696e6700190154686520656c656374696f6e2070726f6365737320737461727473206d756c7469706c6520626c6f636b73206265666f72652074686520656e64206f6620746865206572612e3901546875732074686520656c656374696f6e2070726f63657373206d6179206265206f6e676f696e67207768656e20746869732069732063616c6c65642e20496e2074686973206361736520746865dc656c656374696f6e2077696c6c20636f6e74696e756520756e74696c20746865206e65787420657261206973207472696767657265642e0034232320436f6d706c65786974793c2d204e6f20617267756d656e74732e382d205765696768743a204f28312934666f7263655f6e65775f657261000d384901466f72636520746865726520746f2062652061206e6577206572612061742074686520656e64206f6620746865206e6578742073657373696f6e2e20416674657220746869732c2069742077696c6c2062659c726573657420746f206e6f726d616c20286e6f6e2d666f7263656429206265686176696f75722e0084546865206469737061746368206f726967696e206d75737420626520526f6f742e002423205761726e696e6700190154686520656c656374696f6e2070726f6365737320737461727473206d756c7469706c6520626c6f636b73206265666f72652074686520656e64206f6620746865206572612e4901496620746869732069732063616c6c6564206a757374206265666f72652061206e657720657261206973207472696767657265642c2074686520656c656374696f6e2070726f63657373206d6179206e6f748c6861766520656e6f75676820626c6f636b7320746f20676574206120726573756c742e0034232320436f6d706c65786974793c2d204e6f20617267756d656e74732e382d205765696768743a204f283129447365745f696e76756c6e657261626c6573040134696e76756c6e657261626c6573610501445665633c543a3a4163636f756e7449643e000e0cc8536574207468652076616c696461746f72732077686f2063616e6e6f7420626520736c61736865642028696620616e79292e0084546865206469737061746368206f726967696e206d75737420626520526f6f742e34666f7263655f756e7374616b650801147374617368000130543a3a4163636f756e7449640001486e756d5f736c617368696e675f7370616e7310010c753332000f0c0901466f72636520612063757272656e74207374616b657220746f206265636f6d6520636f6d706c6574656c7920756e7374616b65642c20696d6d6564696174656c792e0084546865206469737061746368206f726967696e206d75737420626520526f6f742e50666f7263655f6e65775f6572615f616c776179730010240101466f72636520746865726520746f2062652061206e6577206572612061742074686520656e64206f662073657373696f6e7320696e646566696e6974656c792e0084546865206469737061746368206f726967696e206d75737420626520526f6f742e002423205761726e696e6700190154686520656c656374696f6e2070726f6365737320737461727473206d756c7469706c6520626c6f636b73206265666f72652074686520656e64206f6620746865206572612e4901496620746869732069732063616c6c6564206a757374206265666f72652061206e657720657261206973207472696767657265642c2074686520656c656374696f6e2070726f63657373206d6179206e6f748c6861766520656e6f75676820626c6f636b7320746f20676574206120726573756c742e5463616e63656c5f64656665727265645f736c61736808010c657261100120457261496e646578000134736c6173685f696e6469636573690501205665633c7533323e0011149443616e63656c20656e6163746d656e74206f66206120646566657272656420736c6173682e009843616e2062652063616c6c6564206279207468652060543a3a41646d696e4f726967696e602e000101506172616d65746572733a2065726120616e6420696e6469636573206f662074686520736c617368657320666f7220746861742065726120746f206b696c6c2e387061796f75745f7374616b65727308013c76616c696461746f725f7374617368000130543a3a4163636f756e74496400010c657261100120457261496e64657800122c0d01506179206f757420616c6c20746865207374616b65727320626568696e6420612073696e676c652076616c696461746f7220666f7220612073696e676c65206572612e0049012d206076616c696461746f725f73746173686020697320746865207374617368206163636f756e74206f66207468652076616c696461746f722e205468656972206e6f6d696e61746f72732c20757020746f2501202060543a3a4d61784e6f6d696e61746f72526577617264656450657256616c696461746f72602c2077696c6c20616c736f207265636569766520746865697220726577617264732e31012d206065726160206d617920626520616e7920657261206265747765656e20605b63757272656e745f657261202d20686973746f72795f64657074683b2063757272656e745f6572615d602e005501546865206f726967696e206f6620746869732063616c6c206d757374206265205f5369676e65645f2e20416e79206163636f756e742063616e2063616c6c20746869732066756e6374696f6e2c206576656e206966746974206973206e6f74206f6e65206f6620746865207374616b6572732e0034232320436f6d706c6578697479b82d204174206d6f7374204f284d61784e6f6d696e61746f72526577617264656450657256616c696461746f72292e187265626f6e6404011476616c7565ec013042616c616e63654f663c543e00131cdc5265626f6e64206120706f7274696f6e206f6620746865207374617368207363686564756c656420746f20626520756e6c6f636b65642e00d4546865206469737061746368206f726967696e206d757374206265207369676e65642062792074686520636f6e74726f6c6c65722e0034232320436f6d706c6578697479d02d2054696d6520636f6d706c65786974793a204f284c292c207768657265204c20697320756e6c6f636b696e67206368756e6b73882d20426f756e64656420627920604d6178556e6c6f636b696e674368756e6b73602e28726561705f73746173680801147374617368000130543a3a4163636f756e7449640001486e756d5f736c617368696e675f7370616e7310010c7533320014305d0152656d6f766520616c6c2064617461207374727563747572657320636f6e6365726e696e672061207374616b65722f7374617368206f6e636520697420697320617420612073746174652077686572652069742063616e0501626520636f6e736964657265642060647573746020696e20746865207374616b696e672073797374656d2e2054686520726571756972656d656e7473206172653a000501312e207468652060746f74616c5f62616c616e636560206f66207468652073746173682069732062656c6f77206578697374656e7469616c206465706f7369742e1101322e206f722c2074686520606c65646765722e746f74616c60206f66207468652073746173682069732062656c6f77206578697374656e7469616c206465706f7369742e00550154686520666f726d65722063616e2068617070656e20696e206361736573206c696b65206120736c6173683b20746865206c6174746572207768656e20612066756c6c7920756e626f6e646564206163636f756e7409016973207374696c6c20726563656976696e67207374616b696e67207265776172647320696e206052657761726444657374696e6174696f6e3a3a5374616b6564602e00310149742063616e2062652063616c6c656420627920616e796f6e652c206173206c6f6e672061732060737461736860206d65657473207468652061626f766520726571756972656d656e74732e00dc526566756e647320746865207472616e73616374696f6e20666565732075706f6e207375636365737366756c20657865637574696f6e2e106b69636b04010c77686f610501645665633c4163636f756e7449644c6f6f6b75704f663c543e3e00152ce052656d6f76652074686520676976656e206e6f6d696e6174696f6e732066726f6d207468652063616c6c696e672076616c696461746f722e00d8456666656374732077696c6c2062652066656c742061742074686520626567696e6e696e67206f6620746865206e657874206572612e005101546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2062792074686520636f6e74726f6c6c65722c206e6f74207468652073746173682e004d012d206077686f603a2041206c697374206f66206e6f6d696e61746f72207374617368206163636f756e74732077686f20617265206e6f6d696e6174696e6720746869732076616c696461746f72207768696368c0202073686f756c64206e6f206c6f6e676572206265206e6f6d696e6174696e6720746869732076616c696461746f722e0055014e6f74653a204d616b696e6720746869732063616c6c206f6e6c79206d616b65732073656e736520696620796f7520666972737420736574207468652076616c696461746f7220707265666572656e63657320746f78626c6f636b20616e792066757274686572206e6f6d696e6174696f6e732e4c7365745f7374616b696e675f636f6e666967731801486d696e5f6e6f6d696e61746f725f626f6e646d050158436f6e6669674f703c42616c616e63654f663c543e3e0001486d696e5f76616c696461746f725f626f6e646d050158436f6e6669674f703c42616c616e63654f663c543e3e00014c6d61785f6e6f6d696e61746f725f636f756e7471050134436f6e6669674f703c7533323e00014c6d61785f76616c696461746f725f636f756e7471050134436f6e6669674f703c7533323e00013c6368696c6c5f7468726573686f6c6475050144436f6e6669674f703c50657263656e743e0001386d696e5f636f6d6d697373696f6e79050144436f6e6669674f703c50657262696c6c3e001644ac5570646174652074686520766172696f7573207374616b696e6720636f6e66696775726174696f6e73202e0025012a20606d696e5f6e6f6d696e61746f725f626f6e64603a20546865206d696e696d756d2061637469766520626f6e64206e656564656420746f2062652061206e6f6d696e61746f722e25012a20606d696e5f76616c696461746f725f626f6e64603a20546865206d696e696d756d2061637469766520626f6e64206e656564656420746f20626520612076616c696461746f722e55012a20606d61785f6e6f6d696e61746f725f636f756e74603a20546865206d6178206e756d626572206f662075736572732077686f2063616e2062652061206e6f6d696e61746f72206174206f6e63652e205768656e98202073657420746f20604e6f6e65602c206e6f206c696d697420697320656e666f726365642e55012a20606d61785f76616c696461746f725f636f756e74603a20546865206d6178206e756d626572206f662075736572732077686f2063616e20626520612076616c696461746f72206174206f6e63652e205768656e98202073657420746f20604e6f6e65602c206e6f206c696d697420697320656e666f726365642e59012a20606368696c6c5f7468726573686f6c64603a2054686520726174696f206f6620606d61785f6e6f6d696e61746f725f636f756e7460206f7220606d61785f76616c696461746f725f636f756e74602077686963681901202073686f756c642062652066696c6c656420696e206f7264657220666f722074686520606368696c6c5f6f7468657260207472616e73616374696f6e20746f20776f726b2e61012a20606d696e5f636f6d6d697373696f6e603a20546865206d696e696d756d20616d6f756e74206f6620636f6d6d697373696f6e207468617420656163682076616c696461746f7273206d757374206d61696e7461696e2e550120205468697320697320636865636b6564206f6e6c792075706f6e2063616c6c696e67206076616c6964617465602e204578697374696e672076616c696461746f727320617265206e6f742061666665637465642e00c452756e74696d654f726967696e206d75737420626520526f6f7420746f2063616c6c20746869732066756e6374696f6e2e0035014e4f54453a204578697374696e67206e6f6d696e61746f727320616e642076616c696461746f72732077696c6c206e6f742062652061666665637465642062792074686973207570646174652e1101746f206b69636b2070656f706c6520756e64657220746865206e6577206c696d6974732c20606368696c6c5f6f74686572602073686f756c642062652063616c6c65642e2c6368696c6c5f6f74686572040128636f6e74726f6c6c6572000130543a3a4163636f756e74496400176841014465636c61726520612060636f6e74726f6c6c65726020746f2073746f702070617274696369706174696e672061732065697468657220612076616c696461746f72206f72206e6f6d696e61746f722e00d8456666656374732077696c6c2062652066656c742061742074686520626567696e6e696e67206f6620746865206e657874206572612e004101546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2c206275742063616e2062652063616c6c656420627920616e796f6e652e0059014966207468652063616c6c6572206973207468652073616d652061732074686520636f6e74726f6c6c6572206265696e672074617267657465642c207468656e206e6f206675727468657220636865636b7320617265d8656e666f726365642c20616e6420746869732066756e6374696f6e2062656861766573206a757374206c696b6520606368696c6c602e005d014966207468652063616c6c657220697320646966666572656e74207468616e2074686520636f6e74726f6c6c6572206265696e672074617267657465642c2074686520666f6c6c6f77696e6720636f6e646974696f6e73306d757374206265206d65743a001d012a2060636f6e74726f6c6c657260206d7573742062656c6f6e6720746f2061206e6f6d696e61746f722077686f20686173206265636f6d65206e6f6e2d6465636f6461626c652c000c4f723a003d012a204120604368696c6c5468726573686f6c6460206d7573742062652073657420616e6420636865636b656420776869636820646566696e657320686f7720636c6f736520746f20746865206d6178550120206e6f6d696e61746f7273206f722076616c696461746f7273207765206d757374207265616368206265666f72652075736572732063616e207374617274206368696c6c696e67206f6e652d616e6f746865722e59012a204120604d61784e6f6d696e61746f72436f756e746020616e6420604d617856616c696461746f72436f756e7460206d75737420626520736574207768696368206973207573656420746f2064657465726d696e65902020686f7720636c6f73652077652061726520746f20746865207468726573686f6c642e5d012a204120604d696e4e6f6d696e61746f72426f6e646020616e6420604d696e56616c696461746f72426f6e6460206d7573742062652073657420616e6420636865636b65642c2077686963682064657465726d696e65735101202069662074686973206973206120706572736f6e20746861742073686f756c64206265206368696c6c6564206265636175736520746865792068617665206e6f74206d657420746865207468726573686f6c64402020626f6e642072657175697265642e005501546869732063616e2062652068656c7066756c20696620626f6e6420726571756972656d656e74732061726520757064617465642c20616e64207765206e65656420746f2072656d6f7665206f6c642075736572739877686f20646f206e6f74207361746973667920746865736520726571756972656d656e74732e68666f7263655f6170706c795f6d696e5f636f6d6d697373696f6e04013c76616c696461746f725f7374617368000130543a3a4163636f756e74496400180c4501466f72636520612076616c696461746f7220746f2068617665206174206c6561737420746865206d696e696d756d20636f6d6d697373696f6e2e20546869732077696c6c206e6f74206166666563742061610176616c696461746f722077686f20616c726561647920686173206120636f6d6d697373696f6e2067726561746572207468616e206f7220657175616c20746f20746865206d696e696d756d2e20416e79206163636f756e743863616e2063616c6c20746869732e487365745f6d696e5f636f6d6d697373696f6e04010c6e6577ac011c50657262696c6c00191025015365747320746865206d696e696d756d20616d6f756e74206f6620636f6d6d697373696f6e207468617420656163682076616c696461746f7273206d757374206d61696e7461696e2e005901546869732063616c6c20686173206c6f7765722070726976696c65676520726571756972656d656e7473207468616e20607365745f7374616b696e675f636f6e6669676020616e642063616e2062652063616c6c6564cc6279207468652060543a3a41646d696e4f726967696e602e20526f6f742063616e20616c776179732063616c6c20746869732e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e5d05083870616c6c65745f7374616b696e674452657761726444657374696e6174696f6e04244163636f756e74496401000114185374616b656400000014537461736800010028436f6e74726f6c6c65720002001c4163636f756e7404000001244163636f756e744964000300104e6f6e65000400006105000002000065050c3473705f61726974686d65746963287065725f7468696e67731c50657263656e740000040008010875380000690500000210006d05103870616c6c65745f7374616b696e671870616c6c65741870616c6c657420436f6e6669674f700404540118010c104e6f6f700000000c5365740400180104540001001852656d6f7665000200007105103870616c6c65745f7374616b696e671870616c6c65741870616c6c657420436f6e6669674f700404540110010c104e6f6f700000000c5365740400100104540001001852656d6f7665000200007505103870616c6c65745f7374616b696e671870616c6c65741870616c6c657420436f6e6669674f70040454016505010c104e6f6f700000000c536574040065050104540001001852656d6f7665000200007905103870616c6c65745f7374616b696e671870616c6c65741870616c6c657420436f6e6669674f7004045401ac010c104e6f6f700000000c5365740400ac0104540001001852656d6f7665000200007d050c3870616c6c65745f73657373696f6e1870616c6c65741043616c6c040454000108207365745f6b6579730801106b6579738105011c543a3a4b65797300011470726f6f6630011c5665633c75383e000024e453657473207468652073657373696f6e206b6579287329206f66207468652066756e6374696f6e2063616c6c657220746f20606b657973602e1d01416c6c6f777320616e206163636f756e7420746f20736574206974732073657373696f6e206b6579207072696f7220746f206265636f6d696e6720612076616c696461746f722ec05468697320646f65736e27742074616b652065666665637420756e74696c20746865206e6578742073657373696f6e2e00d0546865206469737061746368206f726967696e206f6620746869732066756e6374696f6e206d757374206265207369676e65642e0034232320436f6d706c657869747959012d20604f283129602e2041637475616c20636f737420646570656e6473206f6e20746865206e756d626572206f66206c656e677468206f662060543a3a4b6579733a3a6b65795f69647328296020776869636820697320202066697865642e2870757267655f6b657973000130c852656d6f76657320616e792073657373696f6e206b6579287329206f66207468652066756e6374696f6e2063616c6c65722e00c05468697320646f65736e27742074616b652065666665637420756e74696c20746865206e6578742073657373696f6e2e005501546865206469737061746368206f726967696e206f6620746869732066756e6374696f6e206d757374206265205369676e656420616e6420746865206163636f756e74206d757374206265206569746865722062655d01636f6e7665727469626c6520746f20612076616c696461746f72204944207573696e672074686520636861696e2773207479706963616c2061646472657373696e672073797374656d20287468697320757375616c6c7951016d65616e73206265696e67206120636f6e74726f6c6c6572206163636f756e7429206f72206469726563746c7920636f6e7665727469626c6520696e746f20612076616c696461746f722049442028776869636894757375616c6c79206d65616e73206265696e672061207374617368206163636f756e74292e0034232320436f6d706c65786974793d012d20604f2831296020696e206e756d626572206f66206b65792074797065732e2041637475616c20636f737420646570656e6473206f6e20746865206e756d626572206f66206c656e677468206f6698202060543a3a4b6579733a3a6b65795f6964732829602077686963682069732066697865642e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e810508586a6f7973747265616d5f6e6f64655f72756e74696d652c53657373696f6e4b657973000010011c6772616e647061cc01d03c4772616e647061206173202463726174653a3a426f756e64546f52756e74696d654170705075626c69633e3a3a5075626c696300011062616265510401c43c42616265206173202463726174653a3a426f756e64546f52756e74696d654170705075626c69633e3a3a5075626c6963000124696d5f6f6e6c696e65d801d43c496d4f6e6c696e65206173202463726174653a3a426f756e64546f52756e74696d654170705075626c69633e3a3a5075626c696300014c617574686f726974795f646973636f76657279850501fc3c417574686f72697479446973636f76657279206173202463726174653a3a426f756e64546f52756e74696d654170705075626c69633e3a3a5075626c6963000085050c5873705f617574686f726974795f646973636f766572790c617070185075626c696300000400dc013c737232353531393a3a5075626c6963000089050c3870616c6c65745f6772616e6470611870616c6c65741043616c6c04045400010c4c7265706f72745f65717569766f636174696f6e08014865717569766f636174696f6e5f70726f6f668d0501bc426f783c45717569766f636174696f6e50726f6f663c543a3a486173682c20543a3a426c6f636b4e756d6265723e3e00013c6b65795f6f776e65725f70726f6f6659040140543a3a4b65794f776e657250726f6f6600001009015265706f727420766f7465722065717569766f636174696f6e2f6d69736265686176696f722e2054686973206d6574686f642077696c6c2076657269667920746865f465717569766f636174696f6e2070726f6f6620616e642076616c69646174652074686520676976656e206b6579206f776e6572736869702070726f6f66f8616761696e73742074686520657874726163746564206f6666656e6465722e20496620626f7468206172652076616c69642c20746865206f6666656e63654477696c6c206265207265706f727465642e707265706f72745f65717569766f636174696f6e5f756e7369676e656408014865717569766f636174696f6e5f70726f6f668d0501bc426f783c45717569766f636174696f6e50726f6f663c543a3a486173682c20543a3a426c6f636b4e756d6265723e3e00013c6b65795f6f776e65725f70726f6f6659040140543a3a4b65794f776e657250726f6f6600012409015265706f727420766f7465722065717569766f636174696f6e2f6d69736265686176696f722e2054686973206d6574686f642077696c6c2076657269667920746865f465717569766f636174696f6e2070726f6f6620616e642076616c69646174652074686520676976656e206b6579206f776e6572736869702070726f6f66f8616761696e73742074686520657874726163746564206f6666656e6465722e20496620626f7468206172652076616c69642c20746865206f6666656e63654477696c6c206265207265706f727465642e000d01546869732065787472696e736963206d7573742062652063616c6c656420756e7369676e656420616e642069742069732065787065637465642074686174206f6e6c791501626c6f636b20617574686f72732077696c6c2063616c6c206974202876616c69646174656420696e206056616c6964617465556e7369676e656460292c2061732073756368150169662074686520626c6f636b20617574686f7220697320646566696e65642069742077696c6c20626520646566696e6564206173207468652065717569766f636174696f6e247265706f727465722e306e6f74655f7374616c6c656408011464656c6179100138543a3a426c6f636b4e756d62657200016c626573745f66696e616c697a65645f626c6f636b5f6e756d626572100138543a3a426c6f636b4e756d6265720002303d014e6f74652074686174207468652063757272656e7420617574686f7269747920736574206f6620746865204752414e4450412066696e616c6974792067616467657420686173207374616c6c65642e006101546869732077696c6c2074726967676572206120666f7263656420617574686f7269747920736574206368616e67652061742074686520626567696e6e696e67206f6620746865206e6578742073657373696f6e2c20746f6101626520656e6163746564206064656c61796020626c6f636b7320616674657220746861742e20546865206064656c6179602073686f756c64206265206869676820656e6f75676820746f20736166656c7920617373756d654901746861742074686520626c6f636b207369676e616c6c696e672074686520666f72636564206368616e67652077696c6c206e6f742062652072652d6f7267656420652e672e203130303020626c6f636b732e5d0154686520626c6f636b2070726f64756374696f6e207261746520287768696368206d617920626520736c6f77656420646f776e2062656361757365206f662066696e616c697479206c616767696e67292073686f756c64510162652074616b656e20696e746f206163636f756e74207768656e2063686f6f73696e6720746865206064656c6179602e20546865204752414e44504120766f74657273206261736564206f6e20746865206e65775501617574686f726974792077696c6c20737461727420766f74696e67206f6e20746f70206f662060626573745f66696e616c697a65645f626c6f636b5f6e756d6265726020666f72206e65772066696e616c697a65644d01626c6f636b732e2060626573745f66696e616c697a65645f626c6f636b5f6e756d626572602073686f756c64206265207468652068696768657374206f6620746865206c61746573742066696e616c697a6564c4626c6f636b206f6620616c6c2076616c696461746f7273206f6620746865206e657720617574686f72697479207365742e00584f6e6c792063616c6c61626c6520627920726f6f742e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e8d05085073705f636f6e73656e7375735f6772616e6470614445717569766f636174696f6e50726f6f66080448012c044e0110000801187365745f6964280114536574496400013065717569766f636174696f6e9105014845717569766f636174696f6e3c482c204e3e00009105085073705f636f6e73656e7375735f6772616e6470613045717569766f636174696f6e080448012c044e011001081c507265766f7465040095050139016772616e6470613a3a45717569766f636174696f6e3c417574686f7269747949642c206772616e6470613a3a507265766f74653c482c204e3e2c0a417574686f726974795369676e61747572653e00000024507265636f6d6d69740400ad050141016772616e6470613a3a45717569766f636174696f6e3c417574686f7269747949642c206772616e6470613a3a507265636f6d6d69743c482c204e3e2c0a417574686f726974795369676e61747572653e000100009505084066696e616c6974795f6772616e6470613045717569766f636174696f6e0c08496401cc04560199050453019d0500100130726f756e645f6e756d62657228010c7536340001206964656e74697479cc010849640001146669727374a905011828562c2053290001187365636f6e64a905011828562c20532900009905084066696e616c6974795f6772616e6470611c507265766f7465080448012c044e01100008012c7461726765745f686173682c0104480001347461726765745f6e756d6265721001044e00009d050c5073705f636f6e73656e7375735f6772616e6470610c617070245369676e617475726500000400a1050148656432353531393a3a5369676e61747572650000a1050c1c73705f636f72651c65643235353139245369676e617475726500000400a50501205b75383b2036345d0000a505000003400000000800a9050000040899059d0500ad05084066696e616c6974795f6772616e6470613045717569766f636174696f6e0c08496401cc045601b1050453019d0500100130726f756e645f6e756d62657228010c7536340001206964656e74697479cc010849640001146669727374b505011828562c2053290001187365636f6e64b505011828562c2053290000b105084066696e616c6974795f6772616e64706124507265636f6d6d6974080448012c044e01100008012c7461726765745f686173682c0104480001347461726765745f6e756d6265721001044e0000b50500000408b1059d0500b9050c4070616c6c65745f696d5f6f6e6c696e651870616c6c65741043616c6c04045400010424686561727462656174080124686561727462656174bd0501644865617274626561743c543a3a426c6f636b4e756d6265723e0001247369676e6174757265d10501bc3c543a3a417574686f7269747949642061732052756e74696d654170705075626c69633e3a3a5369676e617475726500001438232320436f6d706c65786974793a59012d20604f284b202b20452960207768657265204b206973206c656e677468206f6620604b6579736020286865617274626561742e76616c696461746f72735f6c656e2920616e642045206973206c656e677468206f66b02020606865617274626561742e6e6574776f726b5f73746174652e65787465726e616c5f61646472657373608820202d20604f284b29603a206465636f64696e67206f66206c656e67746820604b60ac20202d20604f284529603a206465636f64696e672f656e636f64696e67206f66206c656e67746820604560042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632ebd05084070616c6c65745f696d5f6f6e6c696e6524486561727462656174042c426c6f636b4e756d626572011000140130626c6f636b5f6e756d62657210012c426c6f636b4e756d6265720001346e6574776f726b5f7374617465c10501484f70617175654e6574776f726b537461746500013473657373696f6e5f696e64657810013053657373696f6e496e64657800013c617574686f726974795f696e64657810012441757468496e64657800013876616c696461746f72735f6c656e10010c7533320000c1050c1c73705f636f7265206f6666636861696e484f70617175654e6574776f726b5374617465000008011c706565725f6964c50501304f706171756550656572496400014865787465726e616c5f616464726573736573c90501505665633c4f70617175654d756c7469616464723e0000c505081c73705f636f7265304f70617175655065657249640000040030011c5665633c75383e0000c905000002cd0500cd050c1c73705f636f7265206f6666636861696e3c4f70617175654d756c7469616464720000040030011c5665633c75383e0000d105104070616c6c65745f696d5f6f6e6c696e651c737232353531392c6170705f73723235353139245369676e617475726500000400d5050148737232353531393a3a5369676e61747572650000d5050c1c73705f636f72651c73723235353139245369676e617475726500000400a50501205b75383b2036345d0000d9050c4070616c6c65745f626167735f6c6973741870616c6c65741043616c6c0804540004490001081472656261670401286469736c6f63617465640001504163636f756e7449644c6f6f6b75704f663c543e00002859014465636c617265207468617420736f6d6520606469736c6f636174656460206163636f756e74206861732c207468726f7567682072657761726473206f722070656e616c746965732c2073756666696369656e746c7951016368616e676564206974732073636f726520746861742069742073686f756c642070726f7065726c792066616c6c20696e746f206120646966666572656e7420626167207468616e206974732063757272656e74106f6e652e001d01416e796f6e652063616e2063616c6c20746869732066756e6374696f6e2061626f757420616e7920706f74656e7469616c6c79206469736c6f6361746564206163636f756e742e00490157696c6c20616c7761797320757064617465207468652073746f7265642073636f7265206f6620606469736c6f63617465646020746f2074686520636f72726563742073636f72652c206261736564206f6e406053636f726550726f7669646572602e00d4496620606469736c6f63617465646020646f6573206e6f74206578697374732c2069742072657475726e7320616e206572726f722e3c7075745f696e5f66726f6e745f6f6604011c6c6967687465720001504163636f756e7449644c6f6f6b75704f663c543e000120d04d6f7665207468652063616c6c65722773204964206469726563746c7920696e2066726f6e74206f6620606c696768746572602e005901546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e642063616e206f6e6c792062652063616c6c656420627920746865204964206f66a0746865206163636f756e7420676f696e6720696e2066726f6e74206f6620606c696768746572602e00344f6e6c7920776f726b73206966942d20626f7468206e6f646573206172652077697468696e207468652073616d65206261672cd02d20616e6420606f726967696e602068617320612067726561746572206053636f726560207468616e20606c696768746572602e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632edd050c3870616c6c65745f76657374696e671870616c6c65741043616c6c0404540001141076657374000024b8556e6c6f636b20616e79207665737465642066756e6473206f66207468652073656e646572206163636f756e742e005d01546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e64207468652073656e646572206d75737420686176652066756e6473207374696c6c646c6f636b656420756e64657220746869732070616c6c65742e00d0456d69747320656974686572206056657374696e67436f6d706c6574656460206f72206056657374696e6755706461746564602e0034232320436f6d706c6578697479242d20604f283129602e28766573745f6f746865720401187461726765740001504163636f756e7449644c6f6f6b75704f663c543e00012cb8556e6c6f636b20616e79207665737465642066756e6473206f662061206074617267657460206163636f756e742e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e0051012d2060746172676574603a20546865206163636f756e742077686f7365207665737465642066756e64732073686f756c6420626520756e6c6f636b65642e204d75737420686176652066756e6473207374696c6c646c6f636b656420756e64657220746869732070616c6c65742e00d0456d69747320656974686572206056657374696e67436f6d706c6574656460206f72206056657374696e6755706461746564602e0034232320436f6d706c6578697479242d20604f283129602e3c7665737465645f7472616e736665720801187461726765740001504163636f756e7449644c6f6f6b75704f663c543e0001207363686564756c65e10501a456657374696e67496e666f3c42616c616e63654f663c543e2c20543a3a426c6f636b4e756d6265723e00023464437265617465206120766573746564207472616e736665722e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e00cc2d2060746172676574603a20546865206163636f756e7420726563656976696e6720746865207665737465642066756e64732ef02d20607363686564756c65603a205468652076657374696e67207363686564756c6520617474616368656420746f20746865207472616e736665722e005c456d697473206056657374696e6743726561746564602e00fc4e4f54453a20546869732077696c6c20756e6c6f636b20616c6c207363686564756c6573207468726f756768207468652063757272656e7420626c6f636b2e0034232320436f6d706c6578697479242d20604f283129602e54666f7263655f7665737465645f7472616e736665720c0118736f757263650001504163636f756e7449644c6f6f6b75704f663c543e0001187461726765740001504163636f756e7449644c6f6f6b75704f663c543e0001207363686564756c65e10501a456657374696e67496e666f3c42616c616e63654f663c543e2c20543a3a426c6f636b4e756d6265723e00033860466f726365206120766573746564207472616e736665722e00c4546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f526f6f745f2e00e82d2060736f75726365603a20546865206163636f756e742077686f73652066756e64732073686f756c64206265207472616e736665727265642e11012d2060746172676574603a20546865206163636f756e7420746861742073686f756c64206265207472616e7366657272656420746865207665737465642066756e64732ef02d20607363686564756c65603a205468652076657374696e67207363686564756c6520617474616368656420746f20746865207472616e736665722e005c456d697473206056657374696e6743726561746564602e00fc4e4f54453a20546869732077696c6c20756e6c6f636b20616c6c207363686564756c6573207468726f756768207468652063757272656e7420626c6f636b2e0034232320436f6d706c6578697479242d20604f283129602e3c6d657267655f7363686564756c657308013c7363686564756c65315f696e64657810010c75333200013c7363686564756c65325f696e64657810010c7533320004545d014d657267652074776f2076657374696e67207363686564756c657320746f6765746865722c206372656174696e672061206e65772076657374696e67207363686564756c65207468617420756e6c6f636b73206f7665725501746865206869676865737420706f737369626c6520737461727420616e6420656e6420626c6f636b732e20496620626f7468207363686564756c6573206861766520616c7265616479207374617274656420746865590163757272656e7420626c6f636b2077696c6c206265207573656420617320746865207363686564756c652073746172743b207769746820746865206361766561742074686174206966206f6e65207363686564756c655d0169732066696e6973686564206279207468652063757272656e7420626c6f636b2c20746865206f746865722077696c6c206265207472656174656420617320746865206e6577206d6572676564207363686564756c652c2c756e6d6f6469666965642e00f84e4f54453a20496620607363686564756c65315f696e646578203d3d207363686564756c65325f696e6465786020746869732069732061206e6f2d6f702e41014e4f54453a20546869732077696c6c20756e6c6f636b20616c6c207363686564756c6573207468726f756768207468652063757272656e7420626c6f636b207072696f7220746f206d657267696e672e61014e4f54453a20496620626f7468207363686564756c6573206861766520656e646564206279207468652063757272656e7420626c6f636b2c206e6f206e6577207363686564756c652077696c6c206265206372656174656464616e6420626f74682077696c6c2062652072656d6f7665642e006c4d6572676564207363686564756c6520617474726962757465733a35012d20607374617274696e675f626c6f636b603a20604d4158287363686564756c65312e7374617274696e675f626c6f636b2c207363686564756c6564322e7374617274696e675f626c6f636b2c48202063757272656e745f626c6f636b29602e21012d2060656e64696e675f626c6f636b603a20604d4158287363686564756c65312e656e64696e675f626c6f636b2c207363686564756c65322e656e64696e675f626c6f636b29602e59012d20606c6f636b6564603a20607363686564756c65312e6c6f636b65645f61742863757272656e745f626c6f636b29202b207363686564756c65322e6c6f636b65645f61742863757272656e745f626c6f636b29602e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e00e82d20607363686564756c65315f696e646578603a20696e646578206f6620746865206669727374207363686564756c6520746f206d657267652eec2d20607363686564756c65325f696e646578603a20696e646578206f6620746865207365636f6e64207363686564756c6520746f206d657267652e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632ee1050c3870616c6c65745f76657374696e673076657374696e675f696e666f2c56657374696e67496e666f081c42616c616e636501182c426c6f636b4e756d6265720110000c01186c6f636b656418011c42616c616e63650001247065725f626c6f636b18011c42616c616e63650001387374617274696e675f626c6f636b10012c426c6f636b4e756d6265720000e5050c3c70616c6c65745f6d756c74697369671870616c6c65741043616c6c0404540001105061735f6d756c74695f7468726573686f6c645f310801446f746865725f7369676e61746f72696573610501445665633c543a3a4163636f756e7449643e00011063616c6c3d04017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e0000305101496d6d6564696174656c792064697370617463682061206d756c74692d7369676e61747572652063616c6c207573696e6720612073696e676c6520617070726f76616c2066726f6d207468652063616c6c65722e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e003d012d20606f746865725f7369676e61746f72696573603a20546865206163636f756e747320286f74686572207468616e207468652073656e646572292077686f206172652070617274206f662074686501016d756c74692d7369676e61747572652c2062757420646f206e6f7420706172746963697061746520696e2074686520617070726f76616c2070726f636573732e882d206063616c6c603a205468652063616c6c20746f2062652065786563757465642e00b8526573756c74206973206571756976616c656e7420746f20746865206469737061746368656420726573756c742e0034232320436f6d706c657869747919014f285a202b204329207768657265205a20697320746865206c656e677468206f66207468652063616c6c20616e6420432069747320657865637574696f6e207765696768742e2061735f6d756c74691401247468726573686f6c642d04010c7531360001446f746865725f7369676e61746f72696573610501445665633c543a3a4163636f756e7449643e00013c6d617962655f74696d65706f696e74e90501844f7074696f6e3c54696d65706f696e743c543a3a426c6f636b4e756d6265723e3e00011063616c6c3d04017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e0001286d61785f77656967687420011857656967687400019c5501526567697374657220617070726f76616c20666f72206120646973706174636820746f206265206d6164652066726f6d20612064657465726d696e697374696320636f6d706f73697465206163636f756e74206966f8617070726f766564206279206120746f74616c206f6620607468726573686f6c64202d203160206f6620606f746865725f7369676e61746f72696573602e00b049662074686572652061726520656e6f7567682c207468656e206469737061746368207468652063616c6c2e002d015061796d656e743a20604465706f73697442617365602077696c6c20626520726573657276656420696620746869732069732074686520666972737420617070726f76616c2c20706c75733d01607468726573686f6c64602074696d657320604465706f736974466163746f72602e2049742069732072657475726e6564206f6e636520746869732064697370617463682068617070656e73206f723469732063616e63656c6c65642e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e0055012d20607468726573686f6c64603a2054686520746f74616c206e756d626572206f6620617070726f76616c7320666f722074686973206469737061746368206265666f72652069742069732065786563757465642e41012d20606f746865725f7369676e61746f72696573603a20546865206163636f756e747320286f74686572207468616e207468652073656e646572292077686f2063616e20617070726f766520746869736c64697370617463682e204d6179206e6f7420626520656d7074792e59012d20606d617962655f74696d65706f696e74603a20496620746869732069732074686520666972737420617070726f76616c2c207468656e2074686973206d75737420626520604e6f6e65602e20496620697420697351016e6f742074686520666972737420617070726f76616c2c207468656e206974206d7573742062652060536f6d65602c2077697468207468652074696d65706f696e742028626c6f636b206e756d62657220616e64d47472616e73616374696f6e20696e64657829206f662074686520666972737420617070726f76616c207472616e73616374696f6e2e882d206063616c6c603a205468652063616c6c20746f2062652065786563757465642e001d014e4f54453a20556e6c6573732074686973206973207468652066696e616c20617070726f76616c2c20796f752077696c6c2067656e6572616c6c792077616e7420746f20757365190160617070726f76655f61735f6d756c74696020696e73746561642c2073696e6365206974206f6e6c7920726571756972657320612068617368206f66207468652063616c6c2e005901526573756c74206973206571756976616c656e7420746f20746865206469737061746368656420726573756c7420696620607468726573686f6c64602069732065786163746c79206031602e204f746865727769736555016f6e20737563636573732c20726573756c7420697320604f6b6020616e642074686520726573756c742066726f6d2074686520696e746572696f722063616c6c2c206966206974207761732065786563757465642cdc6d617920626520666f756e6420696e20746865206465706f736974656420604d756c7469736967457865637574656460206576656e742e0034232320436f6d706c6578697479502d20604f2853202b205a202b2043616c6c29602ecc2d20557020746f206f6e652062616c616e63652d72657365727665206f7220756e72657365727665206f7065726174696f6e2e3d012d204f6e6520706173737468726f756768206f7065726174696f6e2c206f6e6520696e736572742c20626f746820604f285329602077686572652060536020697320746865206e756d626572206f66450120207369676e61746f726965732e206053602069732063617070656420627920604d61785369676e61746f72696573602c207769746820776569676874206265696e672070726f706f7274696f6e616c2e21012d204f6e652063616c6c20656e636f6465202620686173682c20626f7468206f6620636f6d706c657869747920604f285a296020776865726520605a602069732074782d6c656e2ebc2d204f6e6520656e636f6465202620686173682c20626f7468206f6620636f6d706c657869747920604f285329602ed42d20557020746f206f6e652062696e6172792073656172636820616e6420696e736572742028604f286c6f6753202b20532960292ef82d20492f4f3a2031207265616420604f285329602c20757020746f2031206d757461746520604f285329602e20557020746f206f6e652072656d6f76652e302d204f6e65206576656e742e6c2d2054686520776569676874206f6620746865206063616c6c602e4d012d2053746f726167653a20696e7365727473206f6e65206974656d2c2076616c75652073697a6520626f756e64656420627920604d61785369676e61746f72696573602c20776974682061206465706f7369741901202074616b656e20666f7220697473206c69666574696d65206f6620604465706f73697442617365202b207468726573686f6c64202a204465706f736974466163746f72602e40617070726f76655f61735f6d756c74691401247468726573686f6c642d04010c7531360001446f746865725f7369676e61746f72696573610501445665633c543a3a4163636f756e7449643e00013c6d617962655f74696d65706f696e74e90501844f7074696f6e3c54696d65706f696e743c543a3a426c6f636b4e756d6265723e3e00012463616c6c5f686173680401205b75383b2033325d0001286d61785f7765696768742001185765696768740002785501526567697374657220617070726f76616c20666f72206120646973706174636820746f206265206d6164652066726f6d20612064657465726d696e697374696320636f6d706f73697465206163636f756e74206966f8617070726f766564206279206120746f74616c206f6620607468726573686f6c64202d203160206f6620606f746865725f7369676e61746f72696573602e002d015061796d656e743a20604465706f73697442617365602077696c6c20626520726573657276656420696620746869732069732074686520666972737420617070726f76616c2c20706c75733d01607468726573686f6c64602074696d657320604465706f736974466163746f72602e2049742069732072657475726e6564206f6e636520746869732064697370617463682068617070656e73206f723469732063616e63656c6c65642e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e0055012d20607468726573686f6c64603a2054686520746f74616c206e756d626572206f6620617070726f76616c7320666f722074686973206469737061746368206265666f72652069742069732065786563757465642e41012d20606f746865725f7369676e61746f72696573603a20546865206163636f756e747320286f74686572207468616e207468652073656e646572292077686f2063616e20617070726f766520746869736c64697370617463682e204d6179206e6f7420626520656d7074792e59012d20606d617962655f74696d65706f696e74603a20496620746869732069732074686520666972737420617070726f76616c2c207468656e2074686973206d75737420626520604e6f6e65602e20496620697420697351016e6f742074686520666972737420617070726f76616c2c207468656e206974206d7573742062652060536f6d65602c2077697468207468652074696d65706f696e742028626c6f636b206e756d62657220616e64d47472616e73616374696f6e20696e64657829206f662074686520666972737420617070726f76616c207472616e73616374696f6e2ecc2d206063616c6c5f68617368603a205468652068617368206f66207468652063616c6c20746f2062652065786563757465642e0035014e4f54453a2049662074686973206973207468652066696e616c20617070726f76616c2c20796f752077696c6c2077616e7420746f20757365206061735f6d756c74696020696e73746561642e0034232320436f6d706c6578697479242d20604f285329602ecc2d20557020746f206f6e652062616c616e63652d72657365727665206f7220756e72657365727665206f7065726174696f6e2e3d012d204f6e6520706173737468726f756768206f7065726174696f6e2c206f6e6520696e736572742c20626f746820604f285329602077686572652060536020697320746865206e756d626572206f66450120207369676e61746f726965732e206053602069732063617070656420627920604d61785369676e61746f72696573602c207769746820776569676874206265696e672070726f706f7274696f6e616c2ebc2d204f6e6520656e636f6465202620686173682c20626f7468206f6620636f6d706c657869747920604f285329602ed42d20557020746f206f6e652062696e6172792073656172636820616e6420696e736572742028604f286c6f6753202b20532960292ef82d20492f4f3a2031207265616420604f285329602c20757020746f2031206d757461746520604f285329602e20557020746f206f6e652072656d6f76652e302d204f6e65206576656e742e4d012d2053746f726167653a20696e7365727473206f6e65206974656d2c2076616c75652073697a6520626f756e64656420627920604d61785369676e61746f72696573602c20776974682061206465706f7369741901202074616b656e20666f7220697473206c69666574696d65206f6620604465706f73697442617365202b207468726573686f6c64202a204465706f736974466163746f72602e3c63616e63656c5f61735f6d756c74691001247468726573686f6c642d04010c7531360001446f746865725f7369676e61746f72696573610501445665633c543a3a4163636f756e7449643e00012474696d65706f696e740d01016454696d65706f696e743c543a3a426c6f636b4e756d6265723e00012463616c6c5f686173680401205b75383b2033325d000354550143616e63656c2061207072652d6578697374696e672c206f6e2d676f696e67206d756c7469736967207472616e73616374696f6e2e20416e79206465706f7369742072657365727665642070726576696f75736c79c4666f722074686973206f7065726174696f6e2077696c6c20626520756e7265736572766564206f6e20737563636573732e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e0055012d20607468726573686f6c64603a2054686520746f74616c206e756d626572206f6620617070726f76616c7320666f722074686973206469737061746368206265666f72652069742069732065786563757465642e41012d20606f746865725f7369676e61746f72696573603a20546865206163636f756e747320286f74686572207468616e207468652073656e646572292077686f2063616e20617070726f766520746869736c64697370617463682e204d6179206e6f7420626520656d7074792e5d012d206074696d65706f696e74603a205468652074696d65706f696e742028626c6f636b206e756d62657220616e64207472616e73616374696f6e20696e64657829206f662074686520666972737420617070726f76616c787472616e73616374696f6e20666f7220746869732064697370617463682ecc2d206063616c6c5f68617368603a205468652068617368206f66207468652063616c6c20746f2062652065786563757465642e0034232320436f6d706c6578697479242d20604f285329602ecc2d20557020746f206f6e652062616c616e63652d72657365727665206f7220756e72657365727665206f7065726174696f6e2e3d012d204f6e6520706173737468726f756768206f7065726174696f6e2c206f6e6520696e736572742c20626f746820604f285329602077686572652060536020697320746865206e756d626572206f66450120207369676e61746f726965732e206053602069732063617070656420627920604d61785369676e61746f72696573602c207769746820776569676874206265696e672070726f706f7274696f6e616c2ebc2d204f6e6520656e636f6465202620686173682c20626f7468206f6620636f6d706c657869747920604f285329602e302d204f6e65206576656e742e842d20492f4f3a2031207265616420604f285329602c206f6e652072656d6f76652e702d2053746f726167653a2072656d6f766573206f6e65206974656d2e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632ee90504184f7074696f6e040454010d010108104e6f6e6500000010536f6d6504000d010000010000ed05083870616c6c65745f636f756e63696c1043616c6c04045400013048616e6e6f756e63655f63616e6469646163791001346d656d626572736869705f696428012c543a3a4d656d62657249640001487374616b696e675f6163636f756e745f6964000130543a3a4163636f756e7449640001447265776172645f6163636f756e745f6964000130543a3a4163636f756e7449640001147374616b6518012842616c616e63653c543e0000244c5375627363726962652063616e646964617465002823203c7765696768743e00242323207765696768741c604f2028312960142d2064623ad42020202d20604f2831296020646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e5c72656c656173655f63616e6469646163795f7374616b650401346d656d626572736869705f696428012c543a3a4d656d6265724964000124c452656c656173652063616e646964616379207374616b652074686174206973206e6f206c6f6e676572206e65656465642e002823203c7765696768743e00242323207765696768741c604f2028312960142d2064623ad42020202d20604f2831296020646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e4877697468647261775f63616e6469646163790401346d656d626572736869705f696428012c543a3a4d656d6265724964000224bc57697468647261772063616e64696461637920616e642072656c656173652063616e646964616379207374616b652e002823203c7765696768743e00242323207765696768741c604f2028312960142d2064623ad42020202d20604f2831296020646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e487365745f63616e6469646163795f6e6f74650801346d656d626572736869705f696428012c543a3a4d656d62657249640001106e6f746530011c5665633c75383e00032879015365742073686f7274206465736372697074696f6e20666f7220746865207573657227732063616e6469646163792e2043616e2062652063616c6c656420616e7974696d6520647572696e67207573657227732063616e6469646163792e002823203c7765696768743e002423232077656967687438604f20284e29602077686572653a98604e60206973207468652073697a65206f6620606e6f74656020696e206b696c6f6279746573142d2064623ad42020202d20604f2831296020646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e287365745f62756467657404011c62616c616e636518012842616c616e63653c543e000424605365747320746865206275646765742062616c616e63652e002823203c7765696768743e00242323207765696768741c604f2028312960142d2064623ad42020202d20604f2831296020646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e48706c616e5f6275646765745f726566696c6c04012c6e6578745f726566696c6c100138543a3a426c6f636b4e756d62657200052470506c616e20746865206e6578742062756467657420726566696c6c2e002823203c7765696768743e00242323207765696768741c604f2028312960142d2064623ad42020202d20604f2831296020646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e507365745f6275646765745f696e6372656d656e740401406275646765745f696e6372656d656e7418012842616c616e63653c543e0006247453657473207468652062756467657420726566696c6c20616d6f756e74002823203c7765696768743e00242323207765696768741c604f2028312960142d2064623ad42020202d20604f2831296020646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e507365745f636f756e63696c6f725f726577617264040140636f756e63696c6f725f72657761726418012842616c616e63653c543e0007248c536574732074686520636f756e63696c6f72207265776172642070657220626c6f636b002823203c7765696768743e00242323207765696768741c604f2028312960142d2064623ad42020202d20604f2831296020646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e3c66756e64696e675f7265717565737404014066756e64696e675f7265717565737473550301dc5665633c46756e64696e6752657175657374506172616d65746572733c42616c616e63653c543e2c20543a3a4163636f756e7449643e3e000828b85472616e73666572732066756e64732066726f6d20636f756e63696c2062756467657420746f206163636f756e74002823203c7765696768743e002423232077656967687438604f20284629602077686572653a9c60466020697320746865206c656e677468206f66206066756e64696e675f726571756573747360142d2064623ad42020202d20604f2831296020646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e4c66756e645f636f756e63696c5f6275646765740c01246d656d6265725f696428012c4d656d62657249643c543e000118616d6f756e7418012842616c616e63653c543e000124726174696f6e616c6530011c5665633c75383e0009209046756e642074686520636f756e63696c206275646765742062792061206d656d6265722e203c7765696768743e0024232320576569676874c4604f202831296020446f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d6574657273142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e40636f756e63696c6f725f72656d61726b080130636f756e63696c6f725f696428012c543a3a4d656d626572496400010c6d736730011c5665633c75383e000a2480436f756e63696c6f72206d616b657320612072656d61726b206d657373616765002823203c7765696768743e00242323207765696768741c604f2028312960142d2064623ad42020202d20604f2831296020646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e4063616e6469646174655f72656d61726b08013063616e6469646174655f696428012c543a3a4d656d626572496400010c6d736730011c5665633c75383e000b248043616e646964617465206d616b657320612072656d61726b206d657373616765002823203c7765696768743e00242323207765696768741c604f2028312960142d2064623ad42020202d20604f2831296020646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e0c4c446973706174636861626c652063616c6c732e005501456163682076617269616e74206f66207468697320656e756d206d61707320746f206120646973706174636861626c652066756e6374696f6e2066726f6d20746865206173736f636961746564206d6f64756c652ef105084470616c6c65745f7265666572656e64756d1043616c6c08045400044900011010766f7465080128636f6d6d69746d656e742c011c543a3a486173680001147374616b6518013042616c616e63654f663c543e00002494436173742061207365616c656420766f746520696e20746865207265666572656e64756d2e002823203c7765696768743e00242323207765696768741c604f2028312960142d2064623ad42020202d20604f2831296020646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e2c72657665616c5f766f746508011073616c7430011c5665633c75383e000138766f74655f6f7074696f6e5f69642801d03c5420617320636f6d6d6f6e3a3a6d656d626572736869703a3a4d656d6265727368697054797065733e3a3a4d656d626572496400012c9c52657665616c2061207365616c656420766f746520696e20746865207265666572656e64756d2e002823203c7765696768743e002423232057656967687438604f20285729602077686572653a0d012d2060576020697320746865206e756d626572206f662060696e7465726d6564696174655f77696e6e657273602073746f72656420696e207468652063757272656e7468202020206053746167653a3a3c542c20493e3a3a676574282960142d2044423ad42020202d20604f2831296020646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e4872656c656173655f766f74655f7374616b650002205c52656c656173652061206c6f636b6564207374616b652e2823203c7765696768743e00242323207765696768741c604f2028312960142d2064623ad42020202d20604f2831296020646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e446f70745f6f75745f6f665f766f74696e67000324cc5065726d616e656e746c79206f7074206f7574206f6620766f74696e672066726f6d206120676976656e206163636f756e742e002823203c7765696768743e00242323207765696768741c604f2028312960142d2064623ad42020202d20604f2831296020646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e0c4c446973706174636861626c652063616c6c732e005501456163682076617269616e74206f66207468697320656e756d206d61707320746f206120646973706174636861626c652066756e6374696f6e2066726f6d20746865206173736f636961746564206d6f64756c652ef505084470616c6c65745f6d656d626572736869701043616c6c040454000144386275795f6d656d62657273686970040118706172616d732d0101c84275794d656d62657273686970506172616d65746572733c543a3a4163636f756e7449642c20543a3a4d656d62657249643e00002c7c4e6f6e2d6d656d626572732063616e20627579206d656d626572736869702e00203c7765696768743e002423232057656967687448604f202857202b204d29602077686572653a942d20605760206973207468652068616e646c652073697a6520696e206b696c6f62797465739c2d20604d6020697320746865206d657461646174612073697a6520696e206b696c6f6279746573142d2044423a242020202d204f2831292c23203c2f7765696768743e387570646174655f70726f66696c650c01246d656d6265725f696428012c543a3a4d656d626572496400011868616e646c653101013c4f7074696f6e3c5665633c75383e3e0001206d657461646174613101013c4f7074696f6e3c5665633c75383e3e0001300d01557064617465206d656d626572277320616c6c206f7220736f6d65206f66206e616d652c2068616e646c652c2061766174617220616e642061626f757420746578742e7c4e6f20656666656374206966206e6f206368616e676564206669656c64732e00203c7765696768743e002423232057656967687448604f202857202b204d29602077686572653a942d20605760206973207468652068616e646c652073697a6520696e206b696c6f62797465739c2d20604d6020697320746865206d657461646174612073697a6520696e206b696c6f6279746573142d2044423a242020202d204f2831292c23203c2f7765696768743e3c7570646174655f6163636f756e74730c01246d656d6265725f696428012c543a3a4d656d62657249640001406e65775f726f6f745f6163636f756e749401504f7074696f6e3c543a3a4163636f756e7449643e0001586e65775f636f6e74726f6c6c65725f6163636f756e749401504f7074696f6e3c543a3a4163636f756e7449643e00022c550155706461746573206d656d62657220726f6f74206f7220636f6e74726f6c6c6572206163636f756e74732e204e6f2065666665637420696620626f7468206e6577206163636f756e74732061726520656d7074792e00203c7765696768743e00203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e6c7570646174655f70726f66696c655f766572696669636174696f6e0c0124776f726b65725f6964280128543a3a4163746f7249640001407461726765745f6d656d6265725f696428012c543a3a4d656d626572496400012c69735f7665726966696564980110626f6f6c000324450155706461746573206d656d6265722070726f66696c6520766572696669636174696f6e207374617475732e20526571756972657320776f726b696e672067726f7570206d656d626572206f726967696e2e00203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e407365745f726566657272616c5f63757404013470657263656e745f76616c75650801087538000424110155706461746573206d656d6265727368697020726566657272616c206375742070657263656e742076616c75652e20526571756972657320726f6f74206f726967696e2e00203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e407472616e736665725f696e76697465730c0140736f757263655f6d656d6265725f696428012c543a3a4d656d62657249640001407461726765745f6d656d6265725f696428012c543a3a4d656d62657249640001446e756d6265725f6f665f696e766974657310010c753332000524b45472616e736665727320696e76697465732066726f6d206f6e65206d656d62657220746f20616e6f746865722e00203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e34696e766974655f6d656d626572040118706172616d73390101d4496e766974654d656d62657273686970506172616d65746572733c543a3a4163636f756e7449642c20543a3a4d656d62657249643e00062c50496e766974652061206e6577206d656d6265722e00203c7765696768743e002423232057656967687448604f202857202b204d29602077686572653a942d20605760206973207468652068616e646c652073697a6520696e206b696c6f62797465739c2d20604d6020697320746865206d657461646174612073697a6520696e206b696c6f6279746573142d2044423a242020202d204f2831292c23203c2f7765696768743e3c676966745f6d656d62657273686970040118706172616d73410101d0476966744d656d62657273686970506172616d65746572733c543a3a4163636f756e7449642c2042616c616e63654f663c543e3e00070c1d01476966742061206d656d62657273686970207573696e67206f776e2066756e64732e2047696674657220646f6573206e6f74206e65656420746f2062652061206d656d6265722e5d0143616e206f7074696e616c6c79206170706c792061206c6f636b206f6e206120706f7274696f6e206f66207468652066756e6473207472616e7366657272656420746f20726f6f7420616e6420636f6e74726f6c6c6572b86163636f756e74732e2047696674657220616c736f207061797320746865206d656d62657273686970206665652e507365745f6d656d626572736869705f70726963650401246e65775f707269636518013042616c616e63654f663c543e000824bc55706461746573206d656d626572736869702070726963652e20526571756972657320726f6f74206f726967696e2e00203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e6c7365745f6c65616465725f696e7669746174696f6e5f71756f7461040140696e7669746174696f6e5f71756f746110010c753332000924d855706461746573206c656164657220696e7669746174696f6e2071756f74612e20526571756972657320726f6f74206f726967696e2e00203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e787365745f696e697469616c5f696e7669746174696f6e5f62616c616e636504014c6e65775f696e697469616c5f62616c616e636518013042616c616e63654f663c543e000a2439015570646174657320696e697469616c20696e7669746174696f6e2062616c616e636520666f72206120696e7669746564206d656d6265722e20526571756972657320726f6f74206f726967696e2e00203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e707365745f696e697469616c5f696e7669746174696f6e5f636f756e740401506e65775f696e7669746174696f6e5f636f756e7410010c753332000b2411015570646174657320696e697469616c20696e7669746174696f6e20636f756e7420666f722061206d656d6265722e20526571756972657320726f6f74206f726967696e2e00203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e746164645f7374616b696e675f6163636f756e745f63616e6469646174650401246d656d6265725f696428012c543a3a4d656d6265724964000c28ac416464207374616b696e67206163636f756e742063616e64696461746520666f722061206d656d6265722eb8546865206d656d62657273686970206d75737420626520636f6e6669726d6564206265666f72652075736167652e00203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e5872656d6f76655f7374616b696e675f6163636f756e740401246d656d6265725f696428012c543a3a4d656d6265724964000d249052656d6f7665207374616b696e67206163636f756e7420666f722061206d656d6265722e00203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e5c636f6e6669726d5f7374616b696e675f6163636f756e740801246d656d6265725f696428012c543a3a4d656d62657249640001487374616b696e675f6163636f756e745f6964000130543a3a4163636f756e744964000e24bc436f6e6669726d207374616b696e67206163636f756e742063616e64696461746520666f722061206d656d6265722e00203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e346d656d6265725f72656d61726b0c01246d656d6265725f696428012c543a3a4d656d626572496400010c6d736730011c5665633c75383e00011c7061796d656e74490101884f7074696f6e3c28543a3a4163636f756e7449642c20543a3a42616c616e6365293e000f24544d656d626572206d616b657320612072656d61726b00203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e346372656174655f6d656d626572040118706172616d733d0101904372656174654d656d626572506172616d65746572733c543a3a4163636f756e7449643e00102c804372656174652061206d656d6265722070726f66696c6520617320726f6f742e00203c7765696768743e002423232057656967687448604f202849202b204a29602077686572653a942d20604960206973207468652068616e646c652073697a6520696e206b696c6f62797465739c2d20604a6020697320746865206d657461646174612073697a6520696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e0c4c446973706174636861626c652063616c6c732e005501456163682076617269616e74206f66207468697320656e756d206d61707320746f206120646973706174636861626c652066756e6374696f6e2066726f6d20746865206173736f636961746564206d6f64756c652ef905083070616c6c65745f666f72756d1043616c6c0404540001409c7570646174655f63617465676f72795f6d656d626572736869705f6f665f6d6f64657261746f720c01306d6f64657261746f725f69642801384d6f64657261746f7249643c543e00012c63617465676f72795f6964280134543a3a43617465676f727949640001246e65775f76616c7565980110626f6f6c0000240901456e61626c652061206d6f64657261746f722063616e206d6f64657261746520612063617465676f727920616e6420697473207375622063617465676f726965732e00203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e3c6372656174655f63617465676f72790c0148706172656e745f63617465676f72795f6964350101544f7074696f6e3c543a3a43617465676f727949643e0001147469746c6530011c5665633c75383e00012c6465736372697074696f6e30011c5665633c75383e0001304c4164642061206e65772063617465676f72792e00203c7765696768743e002423232057656967687458604f202857202b2056202b205829602077686572653a6c2d20605760206973207468652063617465676f7279206465707468d42d20605660206973207468652073697a65206f66207468652063617465676f7279207469746c6520696e206b696c6f62797465732eec2d20605860206973207468652073697a65206f66207468652063617465676f7279206465736372697074696f6e20696e206b696c6f62797465732e142d2044423a242020202d204f2857292c23203c2f7765696768743e7c7570646174655f63617465676f72795f617263686976616c5f7374617475730c01146163746f725501014850726976696c656765644163746f723c543e00012c63617465676f72795f6964280134543a3a43617465676f7279496400014c6e65775f617263686976616c5f737461747573980110626f6f6c0002285855706461746520617263686976616c2073746174757300203c7765696768743e002423232057656967687438604f20285729602077686572653a6c2d20605760206973207468652063617465676f7279206465707468142d2044423a242020202d204f2857292c23203c2f7765696768743e547570646174655f63617465676f72795f7469746c650c01146163746f725501014850726976696c656765644163746f723c543e00012c63617465676f72795f6964280134543a3a43617465676f727949640001147469746c6530011c5665633c75383e00032c545570646174652063617465676f7279207469746c6500203c7765696768743e002423232057656967687448604f202857202b205629602077686572653a6c2d20605760206973207468652063617465676f7279206465707468d42d20605660206973207468652073697a65206f66207468652063617465676f7279207469746c6520696e206b696c6f62797465732e142d2044423a242020202d204f2857292c23203c2f7765696768743e6c7570646174655f63617465676f72795f6465736372697074696f6e0c01146163746f725501014850726976696c656765644163746f723c543e00012c63617465676f72795f6964280134543a3a43617465676f7279496400012c6465736372697074696f6e30011c5665633c75383e00042c6c5570646174652063617465676f7279206465736372697074696f6e00203c7765696768743e002423232057656967687438604f20285729602077686572653a6c2d20605760206973207468652063617465676f7279206465707468ec2d20605660206973207468652073697a65206f66207468652063617465676f7279206465736372697074696f6e20696e206b696c6f62797465732e142d2044423a242020202d204f2857292c23203c2f7765696768743e3c64656c6574655f63617465676f72790801146163746f725501014850726976696c656765644163746f723c543e00012c63617465676f72795f6964280134543a3a43617465676f727949640005283c44656c6574652063617465676f727900203c7765696768743e002423232057656967687438604f20285729602077686572653a6c2d20605760206973207468652063617465676f7279206465707468142d2044423a242020202d204f2857292c23203c2f7765696768743e346372656174655f746872656164100134666f72756d5f757365725f6964280138466f72756d5573657249643c543e00012c63617465676f72795f6964280134543a3a43617465676f727949640001206d6574616461746130011c5665633c75383e0001107465787430011c5665633c75383e00063074437265617465206e65772074687265616420696e2063617465676f727900203c7765696768743e002423232057656967687458604f202857202b2056202b205829602077686572653a6c2d20605760206973207468652063617465676f7279206465707468cc2d20605660206973207468652073697a65206f662074686520746872656164207469746c6520696e206b696c6f62797465732ec82d20605860206973207468652073697a65206f662074686520746872656164207465787420696e206b696c6f62797465732e142d2044423a242020202d204f2857292c23203c2f7765696768743e50656469745f7468726561645f6d65746164617461100134666f72756d5f757365725f6964280138466f72756d5573657249643c543e00012c63617465676f72795f6964280134543a3a43617465676f727949640001247468726561645f696428012c543a3a54687265616449640001306e65775f6d6574616461746130011c5665633c75383e00072c504564697420746872656164206d6574616461746100203c7765696768743e002423232057656967687448604f202857202b205629602077686572653a6c2d20605760206973207468652063617465676f7279206465707468d82d20605660206973207468652073697a65206f662074686520746872656164206d6574616461746120696e206b696c6f62797465732e142d2044423a242020202d204f2857292c23203c2f7765696768743e3464656c6574655f746872656164100134666f72756d5f757365725f6964280138466f72756d5573657249643c543e00012c63617465676f72795f6964280134543a3a43617465676f727949640001247468726561645f696428012c543a3a546872656164496400011068696465980110626f6f6c0008283444656c6574652074687265616400203c7765696768743e002423232057656967687438604f20285729602077686572653a6c2d20605760206973207468652063617465676f7279206465707468142d2044423a242020202d204f2857292c23203c2f7765696768743e5c6d6f76655f7468726561645f746f5f63617465676f72791001146163746f725501014850726976696c656765644163746f723c543e00012c63617465676f72795f6964280134543a3a43617465676f727949640001247468726561645f696428012c543a3a546872656164496400013c6e65775f63617465676f72795f6964280134543a3a43617465676f727949640009287c4d6f76652074687265616420746f20616e6f746865722063617465676f727900203c7765696768743e002423232057656967687438604f20285729602077686572653a6c2d20605760206973207468652063617465676f7279206465707468142d2044423a242020202d204f2857292c23203c2f7765696768743e3c6d6f6465726174655f7468726561641001146163746f725501014850726976696c656765644163746f723c543e00012c63617465676f72795f6964280134543a3a43617465676f727949640001247468726561645f696428012c543a3a5468726561644964000124726174696f6e616c6530011c5665633c75383e000a303c4d6f6465726174652074687265616400203c7765696768743e002423232057656967687458604f202857202b2056202b205829602077686572653a702d20605760206973207468652063617465676f72792064657074682c902d2060566020697320746865206e756d626572206f662074687265616420706f7374732cbc2d20605860206973207468652073697a65206f662074686520726174696f6e616c6520696e206b696c6f6279746573142d2044423a342020202d204f2857202b2056292c23203c2f7765696768743e206164645f706f7374140134666f72756d5f757365725f6964280138466f72756d5573657249643c543e00012c63617465676f72795f6964280134543a3a43617465676f727949640001247468726561645f696428012c543a3a54687265616449640001107465787430011c5665633c75383e0001206564697461626c65980110626f6f6c000b2c2041646420706f737400203c7765696768743e002423232057656967687448604f202857202b205629602077686572653a702d20605760206973207468652063617465676f72792064657074682ca82d20605660206973207468652073697a65206f6620746865207465787420696e206b696c6f6279746573142d2044423a242020202d204f2857292c23203c2f7765696768743e38656469745f706f73745f74657874140134666f72756d5f757365725f6964280138466f72756d5573657249643c543e00012c63617465676f72795f6964280134543a3a43617465676f727949640001247468726561645f696428012c543a3a546872656164496400011c706f73745f6964280124543a3a506f737449640001206e65775f7465787430011c5665633c75383e000c2c384564697420706f7374207465787400203c7765696768743e002423232057656967687448604f202857202b205629602077686572653a702d20605760206973207468652063617465676f72792064657074682cb82d20605660206973207468652073697a65206f6620746865206e6577207465787420696e206b696c6f6279746573142d2044423a242020202d204f2857292c23203c2f7765696768743e346d6f6465726174655f706f73741401146163746f725501014850726976696c656765644163746f723c543e00012c63617465676f72795f6964280134543a3a43617465676f727949640001247468726561645f696428012c543a3a546872656164496400011c706f73745f6964280124543a3a506f73744964000124726174696f6e616c6530011c5665633c75383e000d2c344d6f64657261746520706f737400203c7765696768743e002423232057656967687448604f202857202b205629602077686572653a702d20605760206973207468652063617465676f72792064657074682cbc2d20605660206973207468652073697a65206f662074686520726174696f6e616c6520696e206b696c6f6279746573142d2044423a242020202d204f2857292c23203c2f7765696768743e3064656c6574655f706f7374730c0134666f72756d5f757365725f6964280138466f72756d5573657249643c543e000114706f7374735d01018442547265654d61703c457874656e646564506f737449643c543e2c20626f6f6c3e000124726174696f6e616c6530011c5665633c75383e000e346444656c65746520706f73742066726f6d2073746f726167652eec596f75206e65656420746f2070726f76696465206120766563746f72206f6620706f73747320746f2064656c65746520696e2074686520666f726db428543a3a43617465676f727949642c20543a3a54687265616449642c20543a3a506f737449642c20626f6f6c292501776865726520746865206c61737420626f6f6c206973207768657468657220796f752077616e7420746f20686964652069742061706172742066726f6d2064656c6574696e67206974002423232057656967687458604f202857202b2056202b205029602077686572653a702d20605760206973207468652063617465676f72792064657074682cbc2d20605660206973207468652073697a65206f662074686520726174696f6e616c6520696e206b696c6f6279746573982d2060506020697320746865206e756d626572206f6620706f73747320746f2064656c657465142d2044423a342020202d204f2857202b2050292c23203c2f7765696768743e507365745f737469636b6965645f746872656164730c01146163746f725501014850726976696c656765644163746f723c543e00012c63617465676f72795f6964280134543a3a43617465676f72794964000130737469636b6965645f6964736901015442547265655365743c543a3a54687265616449643e000f2c8453657420737469636b696564207468726561647320666f722063617465676f727900203c7765696768743e002423232057656967687448604f202857202b205629602077686572653a702d20605760206973207468652063617465676f72792064657074682c9c2d2060566020697320746865206c656e677468206f662074686520737469636b6965645f696473142d2044423a342020202d204f2857202b2056292c23203c2f7765696768743e0c4c446973706174636861626c652063616c6c732e005501456163682076617269616e74206f66207468697320656e756d206d61707320746f206120646973706174636861626c652066756e6374696f6e2066726f6d20746865206173736f636961746564206d6f64756c652efd05084c70616c6c65745f636f6e737469747574696f6e1043616c6c04045400010448616d656e645f636f6e737469747574696f6e040144636f6e737469747574696f6e5f7465787430011c5665633c75383e000018e453657473207468652063757272656e7420636f6e737469747574696f6e20686173682e20526571756972657320726f6f74206f726967696e2e2823203c7765696768743e11012d20436f6d706c65786974793a20604f28432960207768657265204320697320746865206c656e677468206f662074686520636f6e737469747574696f6e20746578742e342d2044622072656164733a20307c2d204462207772697465733a20312028636f6e7374616e742076616c7565292c23203c2f7765696768743e0c4c446973706174636861626c652063616c6c732e005501456163682076617269616e74206f66207468697320656e756d206d61707320746f206120646973706174636861626c652066756e6374696f6e2066726f6d20746865206173736f636961746564206d6f64756c652e0106083470616c6c65745f626f756e74791043616c6c04045400013c346372656174655f626f756e7479080118706172616d737501016c426f756e74794372656174696f6e506172616d65746572733c543e0001206d6574616461746130011c5665633c75383e000028490143726561746573206120626f756e74792e204d657461646174612073746f72656420696e20746865207472616e73616374696f6e206c6f67206275742064697363617264656420616674657220746861742e203c7765696768743e002423232057656967687438604f20285729602077686572653aa42d2060576020697320746865205f6d657461646174612073697a6520696e206b696c6f62797465732eb02d20604d6020697320636c6f73656420636f6e7472616374206d656d626572206c697374206c656e6774682e142d2044423a842020202d204f284d2920284f283129206f6e206f70656e20636f6e7472616374292c23203c2f7765696768743e2c66756e645f626f756e74790c011866756e64657279010160426f756e74794163746f723c4d656d62657249643c543e3e000124626f756e74795f696428012c543a3a426f756e74794964000118616d6f756e7418013042616c616e63654f663c543e0001206050726f766964657320626f756e74792066756e64696e672e2823203c7765696768743e00242323207765696768741c604f2028312960142d2064623ad42020202d20604f2831296020646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e407465726d696e6174655f626f756e7479040124626f756e74795f696428012c543a3a426f756e74794964000224c05465726d696e61746573206120626f756e747920696e2066756e64696e672c2066756e64696e6720657870697265642c7c776f726b7375626d697373696f6e2c206a756467696e6720706572696f642e2823203c7765696768743e00242323207765696768741c604f2028312960142d2064623ad42020202d20604f2831296020646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e347377697463685f6f7261636c650801286e65775f6f7261636c6579010160426f756e74794163746f723c4d656d62657249643c543e3e000124626f756e74795f696428012c543a3a426f756e74794964000324904f7261636c652073776974636865732068696d73656c6620746f2061206e6577206f6e652823203c7765696768743e00242323207765696768741c604f2028312960142d2064623ad42020202d20604f2831296020646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e004077697468647261775f66756e64696e6708011866756e64657279010160426f756e74794163746f723c4d656d62657249643c543e3e000124626f756e74795f696428012c543a3a426f756e74794964000420c4576974686472617720626f756e74792066756e64696e672062792061206d656d626572206f72206120636f756e63696c2e2823203c7765696768743e00242323207765696768741c604f2028312960142d2064623ad42020202d20604f2831296020646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e4c616e6e6f756e63655f776f726b5f656e7472791001246d656d6265725f696428012c4d656d62657249643c543e000124626f756e74795f696428012c543a3a426f756e747949640001487374616b696e675f6163636f756e745f6964000130543a3a4163636f756e744964000140776f726b5f6465736372697074696f6e30011c5665633c75383e000528b0416e6e6f756e636520776f726b20656e74727920666f722061207375636365737366756c20626f756e74792e2823203c7765696768743e002423232077656967687448604f202857202b204d29602077686572653ac02d206057602069732074686520776f726b5f6465736372697074696f6e2073697a6520696e206b696c6f62797465732eb02d20604d6020697320636c6f73656420636f6e7472616374206d656d626572206c697374206c656e6774682e142d2064623ad42020202d20604f2831296020646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e2c7375626d69745f776f726b1001246d656d6265725f696428012c4d656d62657249643c543e000124626f756e74795f696428012c543a3a426f756e74794964000120656e7472795f6964280128543a3a456e7472794964000124776f726b5f6461746130011c5665633c75383e000624645375626d697420776f726b20666f72206120626f756e74792e2823203c7765696768743e00242323207765696768741c604f20284e2960a42d20604e602069732074686520776f726b5f646174612073697a6520696e206b696c6f62797465732c142d2064623ad42020202d20604f2831296020646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e48656e645f776f726b696e675f706572696f64040124626f756e74795f696428012c543a3a426f756e7479496400072068656e6420626f756e747920776f726b696e6720706572696f642e2823203c7765696768743e00242323207765696768741c604f2028312960142d2064623ad42020202d20604f2831296020646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e587375626d69745f6f7261636c655f6a7564676d656e740c0124626f756e74795f696428012c543a3a426f756e747949640001206a7564676d656e74850101a04f7261636c654a7564676d656e743c543a3a456e74727949642c2042616c616e63654f663c543e3e000124726174696f6e616c6530011c5665633c75383e00083819015375626d69747320616e206f7261636c65206a7564676d656e7420666f72206120626f756e74792c20736c617368696e672074686520656e74726965732072656a65637465642d01627920616e206172626974726172792070657263656e7461676520616e6420726577617264696e67207468652077696e6e65727320627920616e2061726269747261727920616d6f756e7498286e6f742073757270617373696e672074686520746f74616c2066756e6420616d6f756e74292823203c7765696768743e00242323207765696768744c604f20284a202b204b202b2057202b20522960942d20604a6020697320726174696f6e616c652073697a6520696e206b696c6f62797465732c61012d20604b60206973207468652073756d206f6620616c6c20616374696f6e5f6a757374696669636174696f6e2073697a65732028696e206b696c6f62797465732920696e73696465204f7261636c654a7564676d656e742cac2d20605760206973206e756d626572206f662077696e6e6572206a7564676d656e7420656e74726965732cb42d20605260206973206e756d626572206f662072656a6563746564206a7564676d656e7420656e74726965732c142d2064623a3c2020202d20604f2857202b205229602c23203c2f7765696768743e5877697468647261775f656e7472616e745f7374616b650c01246d656d6265725f696428012c4d656d62657249643c543e000124626f756e74795f696428012c543a3a426f756e74794964000120656e7472795f6964280128543a3a456e7472794964000928a4556e6c6f636b7320746865207374616b652072656c6174656420746f206120776f726b20656e747279a901416674657220746865206f7261636c65206d616b657320746865206a7564676d656e74206f722074686520636f756e63696c207465726d696e617465732074686520626f756e74792062792063616c6c696e67207465726d696e6174655f626f756e7479282e2e2e292c51016561636820776f726b65722077686f736520656e74727920686173206e6f74206265656e206a75646765642c2063616e20756e6c6f636b2074686520746f74616c697479206f66207468656972207374616b652e2823203c7765696768743e00242323207765696768741c604f2028312960142d2064623ad42020202d20604f2831296020646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e5877697468647261775f6f7261636c655f726577617264040124626f756e74795f696428012c543a3a426f756e74794964000a2890576974687261777320746865206f7261636c652072657761726420746f206f7261636c651101496620626f756e7479206973207375636365737366756c6c792c204661696c6564206f722043616e63656c6c6564206f7261636c65206d7573742063616c6c2074686973a065787472696e73696320746f20776974686472617720746865206f7261636c65207265776172642c2823203c7765696768743e00242323207765696768741c604f2028312960142d2064623ad42020202d20604f2831296020646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e48636f6e7472696275746f725f72656d61726b0c012c636f6e7472696275746f7279010160426f756e74794163746f723c4d656d62657249643c543e3e000124626f756e74795f696428012c543a3a426f756e7479496400010c6d736730011c5665633c75383e000b2880426f756e747920436f6e7472696275746f72206d61646520612072656d61726b002823203c7765696768743e00242323207765696768741c604f20284e2960782d20604e60206973206d73672073697a6520696e206b696c6f6279746573142d2064623ad42020202d20604f2831296020646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e346f7261636c655f72656d61726b0c01186f7261636c6579010160426f756e74794163746f723c4d656d62657249643c543e3e000124626f756e74795f696428012c543a3a426f756e7479496400010c6d736730011c5665633c75383e000c286c426f756e7479204f7261636c65206d61646520612072656d61726b002823203c7765696768743e00242323207765696768741c604f20284e2960782d20604e60206973206d73672073697a6520696e206b696c6f6279746573142d2064623ad42020202d20604f2831296020646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e38656e7472616e745f72656d61726b100128656e7472616e745f696428012c4d656d62657249643c543e000124626f756e74795f696428012c543a3a426f756e74794964000120656e7472795f6964280128543a3a456e747279496400010c6d736730011c5665633c75383e000d288c426f756e747920456e7472616e7420576f726b6572206d61646520612072656d61726b002823203c7765696768743e00242323207765696768741c604f20284e2960782d20604e60206973206d73672073697a6520696e206b696c6f6279746573142d2064623ad42020202d20604f2831296020646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e3863726561746f725f72656d61726b0c011c63726561746f7279010160426f756e74794163746f723c4d656d62657249643c543e3e000124626f756e74795f696428012c543a3a426f756e7479496400010c6d736730011c5665633c75383e000e286c426f756e7479204f7261636c65206d61646520612072656d61726b002823203c7765696768743e00242323207765696768741c604f20284e2960782d20604e60206973206d73672073697a6520696e206b696c6f6279746573142d2064623ad42020202d20604f2831296020646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e0c4c446973706174636861626c652063616c6c732e005501456163682076617269616e74206f66207468697320656e756d206d61707320746f206120646973706174636861626c652066756e6374696f6e2066726f6d20746865206173736f636961746564206d6f64756c652e0506086070616c6c65745f6a6f7973747265616d5f7574696c6974791043616c6c0404540001105c657865637574655f7369676e616c5f70726f706f73616c0401187369676e616c30011c5665633c75383e00002871015369676e616c2070726f706f73616c2065787472696e7369632e2053686f756c6420626520757365642061732063616c6c61626c65206f626a65637420746f207061737320746f207468652060656e67696e6560206d6f64756c652e00203c7765696768743e002423232057656967687438604f20285329602077686572653ab02d20605360206973207468652073697a65206f6620746865207369676e616c20696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e80657865637574655f72756e74696d655f757067726164655f70726f706f73616c0401107761736d30011c5665633c75383e0001288c52756e74696d6520757067726164652070726f706f73616c2065787472696e7369632e050153686f756c6420626520757365642061732063616c6c61626c65206f626a65637420746f207061737320746f207468652060656e67696e6560206d6f64756c652e203c7765696768743e002423232057656967687438604f20284329602077686572653a742d2060436020697320746865206c656e677468206f6620607761736d603d01486f77657665722c207765207472656174207468697320617320612066756c6c20626c6f636b20617320606672616d655f73797374656d3a3a4d6f64756c653a3a7365745f636f64656020646f65732c23203c2f7765696768743ebd01235b776569676874203d2028543a3a426c6f636b576569676874733a3a67657428292e676574284469737061746368436c6173733a3a4f7065726174696f6e616c292e626173655f65787472696e7369632c204469737061746368436c6173733a3a4f7065726174696f6e616c295d6c7570646174655f776f726b696e675f67726f75705f6275646765740c0134776f726b696e675f67726f757099010130576f726b696e6747726f7570000118616d6f756e7418013042616c616e63654f663c543e00013062616c616e63655f6b696e649d01012c42616c616e63654b696e640002206c55706461746520776f726b696e672067726f757020627564676574203c7765696768743e0024232320576569676874c4604f202831296020446f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d6574657273142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e4c6275726e5f6163636f756e745f746f6b656e73040118616d6f756e7418013042616c616e63654f663c543e000320784275726e7320746f6b656e20666f722063616c6c6572206163636f756e74203c7765696768743e0024232320576569676874c4604f202831296020446f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d6574657273142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e0c4c446973706174636861626c652063616c6c732e005501456163682076617269616e74206f66207468697320656e756d206d61707320746f206120646973706174636861626c652066756e6374696f6e2066726f6d20746865206173736f636961746564206d6f64756c652e0906083870616c6c65745f636f6e74656e741043616c6c04045400010101506372656174655f63757261746f725f67726f757008012469735f616374697665980110626f6f6c0001507065726d697373696f6e735f62795f6c6576656c5502017c4d6f6465726174696f6e5065726d697373696f6e7342794c6576656c3c543e000028a0416464206e65772063757261746f722067726f757020746f2072756e74696d652073746f7261676500203c7765696768743e002423232057656967687438604f20284129602077686572653af02d2060416020697320746865206e756d626572206f6620656e747269657320696e20607065726d697373696f6e735f62795f6c6576656c60206d6170142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e807570646174655f63757261746f725f67726f75705f7065726d697373696f6e7308014063757261746f725f67726f75705f6964280144543a3a43757261746f7247726f757049640001507065726d697373696f6e735f62795f6c6576656c5502017c4d6f6465726174696f6e5065726d697373696f6e7342794c6576656c3c543e000128ac557064617465206578697374696e672063757261746f722067726f75702773207065726d697373696f6e7300203c7765696768743e002423232057656967687438604f20284129602077686572653af02d2060416020697320746865206e756d626572206f6620656e747269657320696e20607065726d697373696f6e735f62795f6c6576656c60206d6170142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e607365745f63757261746f725f67726f75705f73746174757308014063757261746f725f67726f75705f6964280144543a3a43757261746f7247726f7570496400012469735f616374697665980110626f6f6c0002241d01536574206069735f616374697665602073746174757320666f722063757261746f722067726f757020756e64657220676976656e206063757261746f725f67726f75705f69646000203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e506164645f63757261746f725f746f5f67726f75700c014063757261746f725f67726f75705f6964280144543a3a43757261746f7247726f7570496400012863757261746f725f6964280130543a3a43757261746f72496400012c7065726d697373696f6e73bd01015c4368616e6e656c4167656e745065726d697373696f6e73000324ec4164642063757261746f7220746f2063757261746f722067726f757020756e64657220676976656e206063757261746f725f67726f75705f69646000203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e6472656d6f76655f63757261746f725f66726f6d5f67726f757008014063757261746f725f67726f75705f6964280144543a3a43757261746f7247726f7570496400012863757261746f725f6964280130543a3a43757261746f724964000424a452656d6f76652063757261746f722066726f6d206120676976656e2063757261746f722067726f757000203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e386372656174655f6368616e6e656c0801346368616e6e656c5f6f776e6572e50101b04368616e6e656c4f776e65723c543a3a4d656d62657249642c20543a3a43757261746f7247726f757049643e000118706172616d73150201704368616e6e656c4372656174696f6e506172616d65746572733c543e000530203c7765696768743e002423232057656967687478604f202841202b2042202b2043202b2044202b204529602077686572653ae02d2060416020697320746865206e756d626572206f6620656e747269657320696e2060706172616d732e636f6c6c61626f7261746f727360e02d2060426020697320746865206e756d626572206f66206974656d7320696e2060706172616d732e73746f726167655f6275636b65747360f42d2060436020697320746865206e756d626572206f66206974656d7320696e2060706172616d732e646973747269627574696f6e5f6275636b6574736011012d2060446020697320746865206e756d626572206f66206974656d7320696e2060706172616d732e6173736574732e6f626a6563745f6372656174696f6e5f6c69737460c02d20604560206973207468652073697a65206f66202060706172616d732e6d6574616020696e206b696c6f6279746573142d2044423ae02020202d20604f2841202b2042202b2043202b20442960202d2066726f6d20746865207468652067656e65726174656420776569676874732c23203c2f7765696768743e387570646174655f6368616e6e656c0c01146163746f72a50101e8436f6e74656e744163746f723c543a3a43757261746f7247726f757049642c20543a3a43757261746f7249642c20543a3a4d656d62657249643e0001286368616e6e656c5f6964280130543a3a4368616e6e656c4964000118706172616d73410201684368616e6e656c557064617465506172616d65746572733c543e000630203c7765696768743e002423232057656967687478604f202841202b2042202b2043202b2044202b204529602077686572653ae02d2060416020697320746865206e756d626572206f6620656e747269657320696e2060706172616d732e636f6c6c61626f7261746f72736071012d2060426020697320746865206e756d626572206f66206974656d7320696e2060706172616d732e6173736574735f746f5f75706c6f61642e6f626a6563745f6372656174696f6e5f6c69737460202869662070726f766964656429e42d2060436020697320746865206e756d626572206f66206974656d7320696e2060706172616d732e6173736574735f746f5f72656d6f766560cc2d20604460206973207468652073697a65206f662060706172616d732e6e65775f6d6574616020696e206b696c6f6279746573ec2d206045602069732060706172616d732e73746f726167655f6275636b6574735f6e756d5f7769746e65737360202869662070726f766964656429142d2044423ae02020202d20604f2841202b2042202b2043202b20452960202d2066726f6d20746865207468652067656e65726174656420776569676874732c23203c2f7765696768743e787570646174655f6368616e6e656c5f70726976696c6567655f6c6576656c0801286368616e6e656c5f6964280130543a3a4368616e6e656c496400014c6e65775f70726976696c6567655f6c6576656c080160543a3a4368616e6e656c50726976696c6567654c6576656c000724150145787472696e73696320666f72207570646174696e67206368616e6e656c2070726976696c656765206c6576656c20287265717569726573206c656164206163636573732900203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743ea07365745f6368616e6e656c5f7061757365645f66656174757265735f61735f6d6f64657261746f721001146163746f72a50101e8436f6e74656e744163746f723c543a3a43757261746f7247726f757049642c20543a3a43757261746f7249642c20543a3a4d656d62657249643e0001286368616e6e656c5f6964280130543a3a4368616e6e656c496400014c6e65775f7061757365645f6665617475726573d901018042547265655365743c5061757361626c654368616e6e656c466561747572653e000124726174696f6e616c6530011c5665633c75383e000828c845787472696e73696320666f722070617573696e672f72652d656e61626c696e67206368616e6e656c20666561747572657300203c7765696768743e002423232057656967687438604f20284129602077686572653ab42d20604160206973207468652073697a65206f662060726174696f6e616c656020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e3864656c6574655f6368616e6e656c1001146163746f72a50101e8436f6e74656e744163746f723c543a3a43757261746f7247726f757049642c20543a3a43757261746f7249642c20543a3a4d656d62657249643e0001286368616e6e656c5f6964280130543a3a4368616e6e656c496400014c6368616e6e656c5f6261675f7769746e6573730d0601444368616e6e656c4261675769746e6573730001546e756d5f6f626a656374735f746f5f64656c65746528010c753634000928203c7765696768743e002423232057656967687458604f202841202b2042202b204329602077686572653a802d2060416020697320606e756d5f6f626a656374735f746f5f64656c65746560c82d2060426020697320606368616e6e656c5f6261675f7769746e6573732e73746f726167655f6275636b6574735f6e756d60dc2d2060436020697320606368616e6e656c5f6261675f7769746e6573732e646973747269627574696f6e5f6275636b6574735f6e756d60142d2044423ad02020202d20604f2841202b2042202b20432960202d2066726f6d20746865207468652067656e65726174656420776569676874732c23203c2f7765696768743e8864656c6574655f6368616e6e656c5f6173736574735f61735f6d6f64657261746f721401146163746f72a50101e8436f6e74656e744163746f723c543a3a43757261746f7247726f757049642c20543a3a43757261746f7249642c20543a3a4d656d62657249643e0001286368616e6e656c5f6964280130543a3a4368616e6e656c49640001406173736574735f746f5f72656d6f76656901016442547265655365743c446174614f626a65637449643c543e3e00016c73746f726167655f6275636b6574735f6e756d5f7769746e65737310010c753332000124726174696f6e616c6530011c5665633c75383e000a28203c7765696768743e002423232057656967687458604f202841202b2042202b204329602077686572653aa42d2060416020697320746865206c656e677468206f6620606173736574735f746f5f72656d6f766560cc2d20604260206973207468652076616c7565206f66206073746f726167655f6275636b6574735f6e756d5f7769746e65737360b42d20604360206973207468652073697a65206f662060726174696f6e616c656020696e206b696c6f6279746573142d2044423ac02020202d20604f2841202b20422960202d2066726f6d20746865207468652067656e65726174656420776569676874732c23203c2f7765696768743e8c7365745f6368616e6e656c5f7669736962696c6974795f61735f6d6f64657261746f721001146163746f72a50101e8436f6e74656e744163746f723c543a3a43757261746f7247726f757049642c20543a3a43757261746f7249642c20543a3a4d656d62657249643e0001286368616e6e656c5f6964280130543a3a4368616e6e656c496400012469735f68696464656e980110626f6f6c000124726174696f6e616c6530011c5665633c75383e000b28350145787472696e73696320666f722073657474696e67206368616e6e656c207669736962696c69747920737461747573202868696464656e2f76697369626c6529206279206d6f64657261746f7200203c7765696768743e002423232057656967687438604f20284129602077686572653ab42d20604160206973207468652073697a65206f662060726174696f6e616c656020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e306372656174655f766964656f0c01146163746f72a50101e8436f6e74656e744163746f723c543a3a43757261746f7247726f757049642c20543a3a43757261746f7249642c20543a3a4d656d62657249643e0001286368616e6e656c5f6964280130543a3a4368616e6e656c4964000118706172616d7349020168566964656f4372656174696f6e506172616d65746572733c543e000c2c203c7765696768743e002423232057656967687468604f202841202b2042202b2043202b204429602077686572653a11012d2060416020697320746865206e756d626572206f66206974656d7320696e2060706172616d732e6173736574732e6f626a6563745f6372656174696f6e5f6c69737460b42d206042602069732060706172616d732e73746f726167655f6275636b6574735f6e756d5f7769746e6573736035012d2060436020697320746865206c656e677468206f66206f70656e2061756374696f6e202f20656e676c6973682061756374696f6e2077686974656c697374202869662070726f766964656429f42d20604460206973207468652073697a65206f662060706172616d732e6d6574616020696e206b696c6f6279746573202869662070726f766964656429142d2044423ad02020202d20604f2841202b2042202b20432960202d2066726f6d20746865207468652067656e65726174656420776569676874732c23203c2f7765696768743e307570646174655f766964656f0c01146163746f72a50101e8436f6e74656e744163746f723c543a3a43757261746f7247726f757049642c20543a3a43757261746f7249642c20543a3a4d656d62657249643e000120766964656f5f6964280128543a3a566964656f4964000118706172616d7351020160566964656f557064617465506172616d65746572733c543e000d30203c7765696768743e002423232057656967687478604f202841202b2042202b2043202b2044202b204529602077686572653a25012d2060416020697320706172616d732e6173736574735f746f5f75706c6f61642e6f626a6563745f6372656174696f6e5f6c6973742e6c656e2829202869662070726f766964656429982d2060426020697320706172616d732e6173736574735f746f5f72656d6f76652e6c656e2829ec2d206043602069732060706172616d732e73746f726167655f6275636b6574735f6e756d5f7769746e65737360202869662070726f76696465642935012d2060446020697320746865206c656e677468206f66206f70656e2061756374696f6e202f20656e676c6973682061756374696f6e2077686974656c697374202869662070726f76696465642905012d20604560206973207468652073697a65206f662060706172616d732e6e65775f6d6574616020696e206b696c6f6279746573202869662070726f766964656429142d2044423ae02020202d20604f2841202b2042202b2043202b20442960202d2066726f6d20746865207468652067656e65726174656420776569676874732c23203c2f7765696768743e3064656c6574655f766964656f1001146163746f72a50101e8436f6e74656e744163746f723c543a3a43757261746f7247726f757049642c20543a3a43757261746f7249642c20543a3a4d656d62657249643e000120766964656f5f6964280128543a3a566964656f49640001546e756d5f6f626a656374735f746f5f64656c65746528010c75363400016c73746f726167655f6275636b6574735f6e756d5f7769746e6573730102012c4f7074696f6e3c7533323e000e24203c7765696768743e002423232057656967687448604f202841202b204229602077686572653a782d20604160206973206e756d5f6f626a656374735f746f5f64656c657465ec2d206042602069732060706172616d732e73746f726167655f6275636b6574735f6e756d5f7769746e65737360202869662070726f766964656429142d2044423ac02020202d20604f2841202b20422960202d2066726f6d20746865207468652067656e65726174656420776569676874732c23203c2f7765696768743e8064656c6574655f766964656f5f6173736574735f61735f6d6f64657261746f721401146163746f72a50101e8436f6e74656e744163746f723c543a3a43757261746f7247726f757049642c20543a3a43757261746f7249642c20543a3a4d656d62657249643e000120766964656f5f6964280128543a3a566964656f496400016c73746f726167655f6275636b6574735f6e756d5f7769746e65737310010c7533320001406173736574735f746f5f72656d6f76656901016442547265655365743c446174614f626a65637449643c543e3e000124726174696f6e616c6530011c5665633c75383e000f28203c7765696768743e002423232057656967687458604f202841202b2042202b204329602077686572653aa42d2060416020697320746865206c656e677468206f6620606173736574735f746f5f72656d6f766560cc2d20604260206973207468652076616c7565206f66206073746f726167655f6275636b6574735f6e756d5f7769746e65737360b42d20604360206973207468652073697a65206f662060726174696f6e616c656020696e206b696c6f6279746573142d2044423ac02020202d20604f2841202b20422960202d2066726f6d20746865207468652067656e65726174656420776569676874732c23203c2f7765696768743e847365745f766964656f5f7669736962696c6974795f61735f6d6f64657261746f721001146163746f72a50101e8436f6e74656e744163746f723c543a3a43757261746f7247726f757049642c20543a3a43757261746f7249642c20543a3a4d656d62657249643e000120766964656f5f6964280128543a3a566964656f496400012469735f68696464656e980110626f6f6c000124726174696f6e616c6530011c5665633c75383e0010282d0145787472696e73696320666f7220766964656f207669736962696c69747920737461747573202868696464656e2f76697369626c65292073657474696e67206279206d6f64657261746f7200203c7765696768743e002423232057656967687438604f20284129602077686572653ab42d20604160206973207468652073697a65206f662060726174696f6e616c656020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e587570646174655f6368616e6e656c5f7061796f757473080118706172616d73710201845570646174654368616e6e656c5061796f757473506172616d65746572733c543e00014075706c6f616465725f6163636f756e74000130543a3a4163636f756e74496400112458557064617465206368616e6e656c207061796f75747300203c7765696768743e002423232057656967687438604f20283129602077686572653a142d2044423a182d204f2831292c23203c2f7765696768743e50636c61696d5f6368616e6e656c5f7265776172640c01146163746f72a50101e8436f6e74656e744163746f723c543a3a43757261746f7247726f757049642c20543a3a43757261746f7249642c20543a3a4d656d62657249643e00011470726f6f66110601505665633c50726f6f66456c656d656e743c543e3e0001106974656d1d06013850756c6c5061796d656e743c543e001228a0436c61696d2072657761726420696e204a4f592066726f6d206368616e6e656c206163636f756e7400203c7765696768743e002423232057656967687438604f20284829602077686572653ac82d2060486020697320746865206c656e676874206f66207468652070726f7669646564206d65726b6c65206070726f6f6660142d2044423a242020202d204f2831292c23203c2f7765696768743e7477697468647261775f66726f6d5f6368616e6e656c5f62616c616e63650c01146163746f72a50101e8436f6e74656e744163746f723c543a3a43757261746f7247726f757049642c20543a3a43757261746f7249642c20543a3a4d656d62657249643e0001286368616e6e656c5f6964280130543a3a4368616e6e656c4964000118616d6f756e7418013042616c616e63654f663c543e001324845769746864726177204a4f592066726f6d206368616e6e656c206163636f756e7400203c7765696768743e00242323205765696768741c604f2028312960142d2044423a242020202d204f2831292c23203c2f7765696768743e7c7570646174655f6368616e6e656c5f73746174655f626c6f61745f626f6e640401706e65775f6368616e6e656c5f73746174655f626c6f61745f626f6e6418013042616c616e63654f663c543e0014289c55706461746573206368616e6e656c20737461746520626c6f617420626f6e642076616c75652e7c4f6e6c79206c6561642063616e2075706c6f616420746869732076616c756500203c7765696768743e00242323205765696768741c604f2028312960142d2044423a242020202d204f2831292c23203c2f7765696768743e747570646174655f766964656f5f73746174655f626c6f61745f626f6e640401686e65775f766964656f5f73746174655f626c6f61745f626f6e6418013042616c616e63654f663c543e001528945570646174657320766964656f20737461746520626c6f617420626f6e642076616c75652e7c4f6e6c79206c6561642063616e2075706c6f616420746869732076616c756500203c7765696768743e00242323205765696768741c604f2028312960142d2044423a242020202d204f2831292c23203c2f7765696768743e2469737375655f6e66740c01146163746f72a50101e8436f6e74656e744163746f723c543a3a43757261746f7247726f757049642c20543a3a43757261746f7249642c20543a3a4d656d62657249643e000120766964656f5f6964280128543a3a566964656f4964000118706172616d73090201604e667449737375616e6365506172616d65746572733c543e001630244973737565204e465400203c7765696768743e00242323205765696768742c604f202857202b20422960142d2044423a242020202d204f2857291877686572653a19012020202d2057203a206d656d6265722077686974656c697374206c656e67746820696e2063617365206e667420696e697469616c207374617475732069732061756374696f6ec02020202d2042203a2073697a65206f66206d6574616461746120706172616d6574657220696e206b696c6f62797465732c23203c2f7765696768743e2c64657374726f795f6e66740801146163746f72a50101e8436f6e74656e744163746f723c543a3a43757261746f7247726f757049642c20543a3a43757261746f7249642c20543a3a4d656d62657249643e000120766964656f5f6964280128543a3a566964656f49640017242c44657374726f79204e465400203c7765696768743e00242323205765696768741c604f2028312960142d2044423a242020202d204f2831292c23203c2f7765696768743e4873746172745f6f70656e5f61756374696f6e0c01206f776e65725f6964a50101e8436f6e74656e744163746f723c543a3a43757261746f7247726f757049642c20543a3a43757261746f7249642c20543a3a4d656d62657249643e000120766964656f5f6964280128543a3a566964656f496400013861756374696f6e5f706172616d73050201504f70656e41756374696f6e506172616d733c543e00182470537461727420766964656f206e6674206f70656e2061756374696f6e203c7765696768743e002423232057656967687438604f20285729602077686572653a742d2057203a206d656d6265722077686974656c697374206c656e677468142d2044423a242020202d204f2857292c23203c2f7765696768743e5473746172745f656e676c6973685f61756374696f6e0c01206f776e65725f6964a50101e8436f6e74656e744163746f723c543a3a43757261746f7247726f757049642c20543a3a43757261746f7249642c20543a3a4d656d62657249643e000120766964656f5f6964280128543a3a566964656f496400013861756374696f6e5f706172616d73fd01015c456e676c69736841756374696f6e506172616d733c543e0019247c537461727420766964656f206e667420656e676c6973682061756374696f6e203c7765696768743e002423232057656967687438604f20285729602077686572653a882d2057203a2077686974656c697374206d656d626572206c697374206c656e677468142d2044423a242020202d204f2857292c23203c2f7765696768743e5863616e63656c5f656e676c6973685f61756374696f6e0801206f776e65725f6964a50101e8436f6e74656e744163746f723c543a3a43757261746f7247726f757049642c20543a3a43757261746f7249642c20543a3a4d656d62657249643e000120766964656f5f6964280128543a3a566964656f4964001a208043616e63656c20766964656f206e667420656e676c6973682061756374696f6e203c7765696768743e00242323205765696768741c604f2028312960142d2044423a242020202d204f2831292c23203c2f7765696768743e4c63616e63656c5f6f70656e5f61756374696f6e0801206f776e65725f6964a50101e8436f6e74656e744163746f723c543a3a43757261746f7247726f757049642c20543a3a43757261746f7249642c20543a3a4d656d62657249643e000120766964656f5f6964280128543a3a566964656f4964001b207443616e63656c20766964656f206e6674206f70656e2061756374696f6e203c7765696768743e00242323205765696768741c604f2028312960142d2044423a242020202d204f2831292c23203c2f7765696768743e3063616e63656c5f6f666665720801206f776e65725f6964a50101e8436f6e74656e744163746f723c543a3a43757261746f7247726f757049642c20543a3a43757261746f7249642c20543a3a4d656d62657249643e000120766964656f5f6964280128543a3a566964656f4964001c244043616e63656c204e6674206f6666657200203c7765696768743e00242323205765696768741c604f2028312960142d2044423a242020202d204f2831292c23203c2f7765696768743e3863616e63656c5f6275795f6e6f770801206f776e65725f6964a50101e8436f6e74656e744163746f723c543a3a43757261746f7247726f757049642c20543a3a43757261746f7249642c20543a3a4d656d62657249643e000120766964656f5f6964280128543a3a566964656f4964001d245443616e63656c204e66742073656c6c206f7264657200203c7765696768743e00242323205765696768741c604f2028312960142d2044423a242020202d204f283129243c2f7765696768743e507570646174655f6275795f6e6f775f70726963650c01206f776e65725f6964a50101e8436f6e74656e744163746f723c543a3a43757261746f7247726f757049642c20543a3a43757261746f7249642c20543a3a4d656d62657249643e000120766964656f5f6964280128543a3a566964656f49640001246e65775f707269636518013042616c616e63654f663c543e001e246055706461746520427579206e6f77206e667420707269636500203c7765696768743e00242323205765696768741c604f2028312960142d2044423a242020202d204f2831292c23203c2f7765696768743e546d616b655f6f70656e5f61756374696f6e5f6269640c01387061727469636970616e745f696428012c543a3a4d656d6265724964000120766964656f5f6964280128543a3a566964656f49640001286269645f616d6f756e7418013042616c616e63654f663c543e001f20404d616b652061756374696f6e20626964203c7765696768743e00242323205765696768741c604f2028312960142d2044423a242020202d204f2831292c23203c2f7765696768743e606d616b655f656e676c6973685f61756374696f6e5f6269640c01387061727469636970616e745f696428012c543a3a4d656d6265724964000120766964656f5f6964280128543a3a566964656f49640001286269645f616d6f756e7418013042616c616e63654f663c543e002020604d616b6520656e676c6973682061756374696f6e20626964203c7765696768743e00242323205765696768741c604f2028312960142d2044423a242020202d204f2831292c23203c2f7765696768743e5c63616e63656c5f6f70656e5f61756374696f6e5f6269640801387061727469636970616e745f696428012c543a3a4d656d6265724964000120766964656f5f6964280128543a3a566964656f49640021205c43616e63656c206f70656e2061756374696f6e20626964203c7765696768743e00242323205765696768741c604f2028312960142d2044423a242020202d204f2831292c23203c2f7765696768743e58736574746c655f656e676c6973685f61756374696f6e040120766964656f5f6964280128543a3a566964656f496400222464436c61696d20776f6e20656e676c6973682061756374696f6e5c43616e2062652063616c6c656420627920616e796f6e65203c7765696768743e00242323205765696768741c604f2028312960142d2044423a242020202d204f2831292c23203c2f7765696768743e607069636b5f6f70656e5f61756374696f6e5f77696e6e65721001206f776e65725f6964a50101e8436f6e74656e744163746f723c543a3a43757261746f7247726f757049642c20543a3a43757261746f7249642c20543a3a4d656d62657249643e000120766964656f5f6964280128543a3a566964656f496400012477696e6e65725f696428012c543a3a4d656d6265724964000118636f6d6d697418013042616c616e63654f663c543e0023245c416363657074206f70656e2061756374696f6e206269648c53686f756c64206f6e6c792062652063616c6c65642062792061756374696f6e656572203c7765696768743e00242323205765696768741c604f2028312960142d2044423a242020202d204f2831292c23203c2f7765696768743e246f666665725f6e6674100120766964656f5f6964280128543a3a566964656f49640001206f776e65725f6964a50101e8436f6e74656e744163746f723c543a3a43757261746f7247726f757049642c20543a3a43757261746f7249642c20543a3a4d656d62657249643e000108746f28012c543a3a4d656d62657249640001147072696365450101504f7074696f6e3c42616c616e63654f663c543e3e002424244f66666572204e667400203c7765696768743e00242323205765696768741c604f2028312960142d2044423a242020202d204f2831292c23203c2f7765696768743e38736c696e675f6e66745f6261636b080120766964656f5f6964280128543a3a566964656f49640001206f776e65725f6964a50101e8436f6e74656e744163746f723c543a3a43757261746f7247726f757049642c20543a3a43757261746f7249642c20543a3a4d656d62657249643e002524c452657475726e204e6674206261636b20746f20746865206f726967696e616c20617274697374206174206e6f20636f737400203c7765696768743e00242323205765696768741c604f2028312960142d2044423a242020202d204f2831292c23203c2f7765696768743e546163636570745f696e636f6d696e675f6f66666572080120766964656f5f6964280128543a3a566964656f49640001347769746e6573735f7072696365450101a04f7074696f6e3c3c542061732062616c616e6365733a3a436f6e6669673e3a3a42616c616e63653e0026246441636365707420696e636f6d696e67204e6674206f6666657200203c7765696768743e00242323205765696768741c604f2028312960142d2044423a242020202d204f2831292c23203c2f7765696768743e2073656c6c5f6e66740c0120766964656f5f6964280128543a3a566964656f49640001206f776e65725f6964a50101e8436f6e74656e744163746f723c543a3a43757261746f7247726f757049642c20543a3a43757261746f7249642c20543a3a4d656d62657249643e000114707269636518013042616c616e63654f663c543e0027202053656c6c204e6674203c7765696768743e00242323205765696768741c604f2028312960142d2044423a242020202d204f2831292c23203c2f7765696768743e1c6275795f6e66740c0120766964656f5f6964280128543a3a566964656f49640001387061727469636970616e745f696428012c543a3a4d656d62657249640001347769746e6573735f707269636518013042616c616e63654f663c543e0028241c427579204e667400203c7765696768743e00242323205765696768741c604f2028312960142d2044423a242020202d204f2831292c23203c2f7765696768743e44746f67676c655f6e66745f6c696d69747304011c656e61626c6564980110626f6f6c002920dc4f6e6c7920436f756e63696c2063616e20746f67676c65206e66742069737375616e6365206c696d69747320636f6e73747261696e7473203c7765696768743e00242323205765696768741c604f2028312960142d2044423a242020202d204f2831292c23203c2f7765696768743e506368616e6e656c5f6f776e65725f72656d61726b0801286368616e6e656c5f6964280130543a3a4368616e6e656c496400010c6d736730011c5665633c75383e002a28504368616e6e656c206f776e65722072656d61726b203c7765696768743e00242323205765696768741c604f2028422960142d2044423a242020202d204f2831291877686572653a8c2d204220697320746865206b696c6f62797465206c656e676874206f6620606d7367602c23203c2f7765696768743e506368616e6e656c5f6167656e745f72656d61726b0c01146163746f72a50101e8436f6e74656e744163746f723c543a3a43757261746f7247726f757049642c20543a3a43757261746f7249642c20543a3a4d656d62657249643e0001286368616e6e656c5f6964280130543a3a4368616e6e656c496400010c6d736730011c5665633c75383e002b286c4368616e6e656c20636f6c6c61626f7261746f722072656d61726b203c7765696768743e00242323205765696768741c604f2028422960142d2044423a242020202d204f2831291877686572653a8420202d2042206973207468652062797465206c656e676874206f6620606d7367602c23203c2f7765696768743e406e66745f6f776e65725f72656d61726b0c01146163746f72a50101e8436f6e74656e744163746f723c543a3a43757261746f7247726f757049642c20543a3a43757261746f7249642c20543a3a4d656d62657249643e000120766964656f5f6964280128543a3a566964656f496400010c6d736730011c5665633c75383e002c28404e4654206f776e65722072656d61726b203c7765696768743e00242323205765696768741c604f2028422960142d2044423a2020202d204f2831291877686572653a8420202d2042206973207468652062797465206c656e676874206f6620606d7367602c23203c2f7765696768743e6c696e697469616c697a655f6368616e6e656c5f7472616e736665720c01286368616e6e656c5f6964280130543a3a4368616e6e656c49640001146163746f72a50101e8436f6e74656e744163746f723c543a3a43757261746f7247726f757049642c20543a3a43757261746f7249642c20543a3a4d656d62657249643e00013c7472616e736665725f706172616d732106016c496e69745472616e73666572506172616d65746572734f663c543e002d28dc53746172742061206368616e6e656c207472616e736665722077697468207370656369666965642063686172616374657269737469637300203c7765696768743e002423232057656967687438604f20284129602077686572653a25012d2060416020697320746865206e756d626572206f6620656e747269657320696e20607472616e736665725f706172616d732e6e65775f636f6c6c61626f7261746f727360206d6170142d2044423aa82020202d204f284129202d2066726f6d20746865207468652067656e65726174656420776569676874732c23203c2f7765696768743e5c63616e63656c5f6368616e6e656c5f7472616e736665720801286368616e6e656c5f6964280130543a3a4368616e6e656c49640001146163746f72a50101e8436f6e74656e744163746f723c543a3a43757261746f7247726f757049642c20543a3a43757261746f7249642c20543a3a4d656d62657249643e002e245c63616e63656c206368616e6e656c207472616e7366657200203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e5c6163636570745f6368616e6e656c5f7472616e736665720801286368616e6e656c5f6964280130543a3a4368616e6e656c4964000144636f6d6d69746d656e745f706172616d736d0201785472616e73666572436f6d6d69746d656e745769746e6573734f663c543e002f2c6441636365707473206368616e6e656c207472616e736665722e310160636f6d6d69746d656e745f706172616d736020697320726571756972656420746f2070726576656e74206368616e67696e6720746865207472616e7366657220636f6e646974696f6e732e00203c7765696768743e002423232057656967687438604f20284129602077686572653a2d012d2060416020697320746865206e756d626572206f6620656e747269657320696e2060636f6d6d69746d656e745f706172616d732e6e65775f636f6c6c61626f7261746f727360206d6170142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e5c7570646174655f676c6f62616c5f6e66745f6c696d69740801406e66745f6c696d69745f706572696f64890201384e66744c696d6974506572696f640001146c696d697428010c753634003020605570646174657320676c6f62616c204e4654206c696d6974203c7765696768743e00242323205765696768741c604f2028312960142d2044423a242020202d204f2831292c23203c2f7765696768743e607570646174655f6368616e6e656c5f6e66745f6c696d69741001146163746f72a50101e8436f6e74656e744163746f723c543a3a43757261746f7247726f757049642c20543a3a43757261746f7249642c20543a3a4d656d62657249643e0001406e66745f6c696d69745f706572696f64890201384e66744c696d6974506572696f640001286368616e6e656c5f6964280130543a3a4368616e6e656c49640001146c696d697428010c7536340031207055706461746573206368616e6e656c2773204e4654206c696d69742e203c7765696768743e00242323205765696768741c604f2028312960142d2044423a242020202d204f2831292c23203c2f7765696768743e4c69737375655f63726561746f725f746f6b656e0c01146163746f72a50101e8436f6e74656e744163746f723c543a3a43757261746f7247726f757049642c20543a3a43757261746f7249642c20543a3a4d656d62657249643e0001286368616e6e656c5f6964280130543a3a4368616e6e656c4964000118706172616d73c9020170546f6b656e49737375616e6365506172616d65746572734f663c543e0032284c49737375652063726561746f7220746f6b656e00203c7765696768743e002423232057656967687438604f20284129602077686572653a05012d2060416020697320746865206e756d626572206f6620656e747269657320696e2060706172616d732e696e697469616c5f616c6c6f636174696f6e60206d6170142d2044423ab02020202d20604f28412960202d2066726f6d20746865207468652067656e65726174656420776569676874732c23203c2f7765696768743e5c696e69745f63726561746f725f746f6b656e5f73616c650c01146163746f72a50101e8436f6e74656e744163746f723c543a3a43757261746f7247726f757049642c20543a3a43757261746f7249642c20543a3a4d656d62657249643e0001286368616e6e656c5f6964280130543a3a4368616e6e656c4964000118706172616d7325060150546f6b656e53616c65506172616d734f663c543e00332874496e697469616c697a652063726561746f7220746f6b656e2073616c6500203c7765696768743e002423232057656967687438604f20284129602077686572653a29012d20604160206973207468652073697a65206f662060706172616d732e6d657461646174616020696e206b696c6f627974657320286f722030206966206e6f742070726f766964656429142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e887570646174655f7570636f6d696e675f63726561746f725f746f6b656e5f73616c651001146163746f72a50101e8436f6e74656e744163746f723c543a3a43757261746f7247726f757049642c20543a3a43757261746f7249642c20543a3a4d656d62657249643e0001286368616e6e656c5f6964280130543a3a4368616e6e656c496400013c6e65775f73746172745f626c6f636b010201584f7074696f6e3c543a3a426c6f636b4e756d6265723e0001306e65775f6475726174696f6e010201584f7074696f6e3c543a3a426c6f636b4e756d6265723e00342488557064617465207570636f6d696e672063726561746f7220746f6b656e2073616c6500203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e7463726561746f725f746f6b656e5f6973737565725f7472616e736665721001146163746f72a50101e8436f6e74656e744163746f723c543a3a43757261746f7247726f757049642c20543a3a43757261746f7249642c20543a3a4d656d62657249643e0001286368616e6e656c5f6964280130543a3a4368616e6e656c496400011c6f7574707574732906017c5472616e736665725769746856657374696e674f7574707574734f663c543e0001206d6574616461746130011c5665633c75383e00352cc8506572666f726d207472616e73666572206f6620746f6b656e732061732063726561746f7220746f6b656e2069737375657200203c7765696768743e002423232057656967687448604f202841202b204229602077686572653aac2d2060416020697320746865206e756d626572206f6620656e747269657320696e20606f75747075747360c02d20604260206973207468652073697a65206f662074686520606d657461646174616020696e206b696c6f6279746573142d2044423ab02020202d20604f28412960202d2066726f6d20746865207468652067656e65726174656420776569676874732c23203c2f7765696768743e846d616b655f63726561746f725f746f6b656e5f7065726d697373696f6e6c6573730801146163746f72a50101e8436f6e74656e744163746f723c543a3a43757261746f7247726f757049642c20543a3a43757261746f7249642c20543a3a4d656d62657249643e0001286368616e6e656c5f6964280130543a3a4368616e6e656c4964003624ac4d616b65206368616e6e656c27732063726561746f7220746f6b656e207065726d697373696f6e6c65737300203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e987265647563655f63726561746f725f746f6b656e5f706174726f6e6167655f726174655f746f0c01146163746f72a50101e8436f6e74656e744163746f723c543a3a43757261746f7247726f757049642c20543a3a43757261746f7249642c20543a3a4d656d62657249643e0001286368616e6e656c5f6964280130543a3a4368616e6e656c496400012c7461726765745f72617465f9020128596561726c7952617465003724f0526564756365206368616e6e656c27732063726561746f7220746f6b656e20706174726f6e616765207261746520746f20676976656e2076616c756500203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e90636c61696d5f63726561746f725f746f6b656e5f706174726f6e6167655f6372656469740801146163746f72a50101e8436f6e74656e744163746f723c543a3a43757261746f7247726f757049642c20543a3a43757261746f7249642c20543a3a4d656d62657249643e0001286368616e6e656c5f6964280130543a3a4368616e6e656c4964003824b8436c61696d206368616e6e656c27732063726561746f7220746f6b656e20706174726f6e6167652063726564697400203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e4c69737375655f726576656e75655f73706c69741001146163746f72a50101e8436f6e74656e744163746f723c543a3a43757261746f7247726f757049642c20543a3a43757261746f7249642c20543a3a4d656d62657249643e0001286368616e6e656c5f6964280130543a3a4368616e6e656c49640001147374617274010201584f7074696f6e3c543a3a426c6f636b4e756d6265723e0001206475726174696f6e100138543a3a426c6f636b4e756d62657200392484497373756520726576656e75652073706c697420666f722061206368616e6e656c00203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e5866696e616c697a655f726576656e75655f73706c69740801146163746f72a50101e8436f6e74656e744163746f723c543a3a43757261746f7247726f757049642c20543a3a43757261746f7249642c20543a3a4d656d62657249643e0001286368616e6e656c5f6964280130543a3a4368616e6e656c4964003a247c46696e616c697a6520616e20656e64656420726576656e75652073706c697400203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e6c66696e616c697a655f63726561746f725f746f6b656e5f73616c650801146163746f72a50101e8436f6e74656e744163746f723c543a3a43757261746f7247726f757049642c20543a3a43757261746f7249642c20543a3a4d656d62657249643e0001286368616e6e656c5f6964280130543a3a4368616e6e656c4964003b249046696e616c697a6520616e20656e6465642063726561746f7220746f6b656e2073616c6500203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e54646569737375655f63726561746f725f746f6b656e0801146163746f72a50101e8436f6e74656e744163746f723c543a3a43757261746f7247726f757049642c20543a3a43757261746f7249642c20543a3a4d656d62657249643e0001286368616e6e656c5f6964280130543a3a4368616e6e656c4964003c247c44656973737565206368616e6e656c27732063726561746f7220746f6b656e00203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e3061637469766174655f616d6d0c01146163746f72a50101e8436f6e74656e744163746f723c543a3a43757261746f7247726f757049642c20543a3a43757261746f7249642c20543a3a4d656d62657249643e0001286368616e6e656c5f6964280130543a3a4368616e6e656c4964000118706172616d7335060138416d6d506172616d734f663c543e003d0490416374697661746520416d6d2066756e6374696f6e616c69747920666f7220746f6b656e38646561637469766174655f616d6d0801146163746f72a50101e8436f6e74656e744163746f723c543a3a43757261746f7247726f757049642c20543a3a43757261746f7249642c20543a3a4d656d62657249643e0001286368616e6e656c5f6964280130543a3a4368616e6e656c4964003e04984465616374697661746520416d6d2066756e6374696f6e616c69747920666f7220746f6b656e6c63726561746f725f746f6b656e5f6973737565725f72656d61726b0c01146163746f72a50101e8436f6e74656e744163746f723c543a3a43757261746f7247726f757049642c20543a3a43757261746f7249642c20543a3a4d656d62657249643e0001286368616e6e656c5f6964280130543a3a4368616e6e656c496400011872656d61726b30011c5665633c75383e003f04e4416c6c6f77206372742069737375657220746f20757064617465206d6574616461746120666f7220616e206578697374696e6720746f6b656e0c4c446973706174636861626c652063616c6c732e005501456163682076617269616e74206f66207468697320656e756d206d61707320746f206120646973706174636861626c652066756e6374696f6e2066726f6d20746865206173736f636961746564206d6f64756c652e0d060c3870616c6c65745f636f6e74656e74147479706573444368616e6e656c4261675769746e657373000008014c73746f726167655f6275636b6574735f6e756d10010c753332000160646973747269627574696f6e5f6275636b6574735f6e756d10010c7533320000110600000215060015060c3470616c6c65745f636f6d6d6f6e2c6d65726b6c655f747265654850726f6f66456c656d656e745265636f7264081048617368012c105369646501190600080110686173682c011048617368000110736964651906011053696465000019060c3470616c6c65745f636f6d6d6f6e2c6d65726b6c655f747265651053696465000108104c656674000000145269676874000100001d060c3870616c6c65745f636f6e74656e741474797065734850756c6c5061796d656e74456c656d656e740c244368616e6e656c496401281c42616c616e636501181048617368012c000c01286368616e6e656c5f69642801244368616e6e656c496400016063756d756c61746976655f7265776172645f6561726e656418011c42616c616e6365000118726561736f6e2c011048617368000021060c3870616c6c65745f636f6e74656e7414747970657358496e69745472616e73666572506172616d65746572730c204d656d626572496401283843757261746f7247726f7570496401281c42616c616e63650118000c01446e65775f636f6c6c61626f7261746f72732d0201ac42547265654d61703c4d656d62657249642c204368616e6e656c4167656e745065726d697373696f6e733e000114707269636518011c42616c616e63650001246e65775f6f776e6572e50101984368616e6e656c4f776e65723c4d656d62657249642c2043757261746f7247726f757049643e000025060c5070616c6c65745f70726f6a6563745f746f6b656e1474797065733c546f6b656e53616c65506172616d7310284a6f7942616c616e636501181c42616c616e636501182c426c6f636b4e756d62657201105456657374696e675363686564756c65506172616d7301d102001c0128756e69745f70726963651801284a6f7942616c616e636500015075707065725f626f756e645f7175616e7469747918011c42616c616e63650001247374617274735f61740102014c4f7074696f6e3c426c6f636b4e756d6265723e0001206475726174696f6e10012c426c6f636b4e756d62657200015c76657374696e675f7363686564756c655f706172616d73d90201744f7074696f6e3c56657374696e675363686564756c65506172616d733e0001386361705f7065725f6d656d6265724501013c4f7074696f6e3c42616c616e63653e0001206d657461646174613101013c4f7074696f6e3c5665633c75383e3e000029060c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454012d06045300000400310601185665633c543e00002d06000004082809030031060000022d060035060c5070616c6c65745f70726f6a6563745f746f6b656e14747970657324416d6d506172616d73041c42616c616e6365011800080114736c6f706518011c42616c616e6365000124696e7465726365707418011c42616c616e636500003906083870616c6c65745f73746f726167651043616c6c04045400018c5464656c6574655f73746f726167655f6275636b657404014473746f726167655f6275636b65745f6964280148543a3a53746f726167654275636b657449640000201d0144656c6574652073746f72616765206275636b65742e204d75737420626520656d7074792e2053746f72616765206f70657261746f72206d757374206265206d697373696e672e203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e7c7570646174655f75706c6f6164696e675f626c6f636b65645f7374617475730401286e65775f737461747573980110626f6f6c000120785570646174657320676c6f62616c2075706c6f6164696e6720666c61672e203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e507570646174655f646174615f73697a655f6665650401446e65775f646174615f73697a655f66656518013042616c616e63654f663c543e000220cc557064617465732073697a652d62617365642070726963696e67206f66206e6577206f626a656374732075706c6f616465642e203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e907570646174655f73746f726167655f6275636b6574735f7065725f6261675f6c696d69740401246e65775f6c696d697410010c753332000320bc55706461746573202253746f72616765206275636b657473207065722062616722206e756d626572206c696d69742e203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743ea47570646174655f73746f726167655f6275636b6574735f766f75636865725f6d61785f6c696d6974730801406e65775f6f626a656374735f73697a6528010c7536340001486e65775f6f626a656374735f6e756d62657228010c753634000420b455706461746573202253746f72616765206275636b65747320766f7563686572206d6178206c696d697473222e203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e8c7570646174655f646174615f6f626a6563745f73746174655f626c6f61745f626f6e6404014073746174655f626c6f61745f626f6e6418013042616c616e63654f663c543e000520ac557064617465732064617461206f626a65637420737461746520626c6f617420626f6e642076616c75652e203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743efc7570646174655f6e756d6265725f6f665f73746f726167655f6275636b6574735f696e5f64796e616d69635f6261675f6372656174696f6e5f706f6c69637908014064796e616d69635f6261675f74797065b102013844796e616d6963426167547970650001646e756d6265725f6f665f73746f726167655f6275636b65747310010c7533320006202d01557064617465206e756d626572206f662073746f72616765206275636b657473207573656420696e20676976656e2064796e616d696320626167206372656174696f6e20706f6c6963792e203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e407570646174655f626c61636b6c69737408013472656d6f76655f686173686573a502014442547265655365743c5665633c75383e3e0001286164645f686173686573a502014442547265655365743c5665633c75383e3e000728bc41646420616e642072656d6f76652068617368657320746f207468652063757272656e7420626c61636b6c6973742e203c7765696768743e002423232057656967687448604f202857202b205629602077686572653abc2d2060576020697320746865206e756d626572206f66206974656d7320696e206072656d6f76655f68617368657360b02d2060566020697320746865206e756d626572206f66206974656d7320696e20606164645f68617368657360142d2044423ab02020202d20604f28572960202d2066726f6d20746865207468652067656e65726174656420776569676874732c23203c2f7765696768743e546372656174655f73746f726167655f6275636b6574100134696e766974655f776f726b65723501014c4f7074696f6e3c576f726b657249643c543e3e000148616363657074696e675f6e65775f62616773980110626f6f6c00012873697a655f6c696d697428010c7536340001346f626a656374735f6c696d697428010c753634000820584372656174652073746f72616765206275636b65742e203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e787570646174655f73746f726167655f6275636b6574735f666f725f6261670c01186261675f69649502012042616749643c543e00012c6164645f6275636b6574736901017042547265655365743c543a3a53746f726167654275636b657449643e00013872656d6f76655f6275636b6574736901017042547265655365743c543a3a53746f726167654275636b657449643e00092888557064617465732073746f72616765206275636b65747320666f722061206261672e203c7765696768743e002423232057656967687448604f202857202b205629602077686572653ab42d2060576020697320746865206e756d626572206f66206974656d7320696e20606164645f6275636b65747360c02d2060566020697320746865206e756d626572206f66206974656d7320696e206072656d6f76655f6275636b65747360142d2044423ac02020202d20604f2856202b20572960202d2066726f6d20746865207468652067656e65726174656420776569676874732c23203c2f7765696768743e9463616e63656c5f73746f726167655f6275636b65745f6f70657261746f725f696e7669746504014473746f726167655f6275636b65745f6964280148543a3a53746f726167654275636b65744964000a20110143616e63656c2070656e64696e672073746f72616765206275636b657420696e766974652e20416e20696e7669746174696f6e206d7573742062652070656e64696e672e203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e78696e766974655f73746f726167655f6275636b65745f6f70657261746f7208014473746f726167655f6275636b65745f6964280148543a3a53746f726167654275636b6574496400012c6f70657261746f725f696428012c576f726b657249643c543e000b20c0496e766974652073746f72616765206275636b6574206f70657261746f722e204d757374206265206d697373696e672e203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e7872656d6f76655f73746f726167655f6275636b65745f6f70657261746f7204014473746f726167655f6275636b65745f6964280148543a3a53746f726167654275636b65744964000c208052656d6f7665732073746f72616765206275636b6574206f70657261746f722e203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e707570646174655f73746f726167655f6275636b65745f73746174757308014473746f726167655f6275636b65745f6964280148543a3a53746f726167654275636b65744964000148616363657074696e675f6e65775f62616773980110626f6f6c000d20dc5570646174652077686574686572206e6577206261677320617265206265696e6720616363657074656420666f722073746f726167652e203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e847365745f73746f726167655f6275636b65745f766f75636865725f6c696d6974730c014473746f726167655f6275636b65745f6964280148543a3a53746f726167654275636b657449640001586e65775f6f626a656374735f73697a655f6c696d697428010c7536340001606e65775f6f626a656374735f6e756d6265725f6c696d697428010c753634000e208c536574732073746f72616765206275636b657420766f7563686572206c696d6974732e203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e806163636570745f73746f726167655f6275636b65745f696e7669746174696f6e0c0124776f726b65725f696428012c576f726b657249643c543e00014473746f726167655f6275636b65745f6964280148543a3a53746f726167654275636b657449640001547472616e736163746f725f6163636f756e745f6964000130543a3a4163636f756e744964000f285d01416363657074207468652073746f72616765206275636b657420696e7669746174696f6e2e20416e20696e7669746174696f6e206d757374206d617463682074686520776f726b65725f696420706172616d657465722e59014974206163636570747320616e206164646974696f6e616c206163636f756e7420494420287472616e736163746f722920666f7220616363657074696e672064617461206f626a6563747320746f2070726576656e74747472616e73616374696f6e206e6f6e636520636f6c6c6973696f6e732e203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e747365745f73746f726167655f6f70657261746f725f6d657461646174610c0124776f726b65725f696428012c576f726b657249643c543e00014473746f726167655f6275636b65745f6964280148543a3a53746f726167654275636b657449640001206d6574616461746130011c5665633c75383e001024dc536574732073746f72616765206f70657261746f72206d65746164617461202865672e3a2073746f72616765206e6f64652055524c292e203c7765696768743e002423232057656967687438604f20285729602077686572653aa02d206057602069732073697a65206f6620606d657461646174616020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e6c6163636570745f70656e64696e675f646174615f6f626a65637473100124776f726b65725f696428012c576f726b657249643c543e00014473746f726167655f6275636b65745f6964280148543a3a53746f726167654275636b657449640001186261675f69649502012042616749643c543e000130646174615f6f626a656374736901016442547265655365743c543a3a446174614f626a65637449643e0011246501412073746f726167652070726f7669646572207369676e616c732074686174207468652064617461206f626a65637420776173207375636365737366756c6c792075706c6f6164656420746f206974732073746f726167652e203c7765696768743e00242323205765696768743c604f2028572029602077686572653ab82d2060576020697320746865206e756d626572206f66206974656d7320696e2060646174615f6f626a6563747360142d2044423ab02020202d20604f28572960202d2066726f6d20746865207468652067656e65726174656420776569676874732c23203c2f7765696768743e846372656174655f646973747269627574696f6e5f6275636b65745f66616d696c7900122090437265617465206120646973747269627574696f6e206275636b65742066616d696c792e203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e8464656c6574655f646973747269627574696f6e5f6275636b65745f66616d696c7904012466616d696c795f6964280174543a3a446973747269627574696f6e4275636b657446616d696c7949640013209444656c65746573206120646973747269627574696f6e206275636b65742066616d696c792e203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e686372656174655f646973747269627574696f6e5f6275636b657408012466616d696c795f6964280174543a3a446973747269627574696f6e4275636b657446616d696c794964000148616363657074696e675f6e65775f62616773980110626f6f6c00142074437265617465206120646973747269627574696f6e206275636b65742e203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e847570646174655f646973747269627574696f6e5f6275636b65745f7374617475730801246275636b65745f69642502015c446973747269627574696f6e4275636b657449643c543e000148616363657074696e675f6e65775f62616773980110626f6f6c001520d855706461746573206120646973747269627574696f6e206275636b6574202761636365707473206e657720626167732720666c61672e203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e6864656c6574655f646973747269627574696f6e5f6275636b65740401246275636b65745f69642502015c446973747269627574696f6e4275636b657449643c543e001620a844656c65746520646973747269627574696f6e206275636b65742e204d75737420626520656d7074792e203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e8c7570646174655f646973747269627574696f6e5f6275636b6574735f666f725f6261671001186261675f69649502012042616749643c543e00012466616d696c795f6964280174543a3a446973747269627574696f6e4275636b657446616d696c79496400014c6164645f6275636b6574735f696e64696365736901019042547265655365743c543a3a446973747269627574696f6e4275636b6574496e6465783e00015872656d6f76655f6275636b6574735f696e64696365736901019042547265655365743c543a3a446973747269627574696f6e4275636b6574496e6465783e0017289c5570646174657320646973747269627574696f6e206275636b65747320666f722061206261672e203c7765696768743e002423232057656967687448604f202857202b205629602077686572653ad42d2060576020697320746865206e756d626572206f66206974656d7320696e20606164645f6275636b6574735f696e646963657360e02d2060566020697320746865206e756d626572206f66206974656d7320696e206072656d6f76655f6275636b6574735f696e646963657360142d2044423ac02020202d20604f2856202b20572960202d2066726f6d20746865207468652067656e65726174656420776569676874732c23203c2f7765696768743ea47570646174655f646973747269627574696f6e5f6275636b6574735f7065725f6261675f6c696d69740401246e65775f6c696d697410010c753332001820d0557064617465732022446973747269627574696f6e206275636b657473207065722062616722206e756d626572206c696d69742e203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e7c7570646174655f646973747269627574696f6e5f6275636b65745f6d6f64650801246275636b65745f69642502015c446973747269627574696f6e4275636b657449643c543e000130646973747269627574696e67980110626f6f6c001920d8557064617465732027646973747269627574696e672720666c616720666f722074686520646973747269627574696e6720666c61672e203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743eb87570646174655f66616d696c6965735f696e5f64796e616d69635f6261675f6372656174696f6e5f706f6c69637908014064796e616d69635f6261675f74797065b102013844796e616d69634261675479706500012066616d696c696573b50201b042547265654d61703c543a3a446973747269627574696f6e4275636b657446616d696c7949642c207533323e001a283d01557064617465206e756d626572206f66206469737472696275746564206275636b657473207573656420696e20676976656e2064796e616d696320626167206372656174696f6e20706f6c6963792e9c5570646174657320646973747269627574696f6e206275636b65747320666f722061206261672e203c7765696768743e002423232057656967687438604f20285729602077686572653aa82d2060576020697320746865206e756d626572206f66206974656d7320696e206066616d696c69657360142d2044423ab02020202d20604f28572960202d2066726f6d20746865207468652067656e65726174656420776569676874732c23203c2f7765696768743e8c696e766974655f646973747269627574696f6e5f6275636b65745f6f70657261746f720801246275636b65745f69642502015c446973747269627574696f6e4275636b657449643c543e0001486f70657261746f725f776f726b65725f696428012c576f726b657249643c543e001b2090496e7669746520616e206f70657261746f722e204d757374206265206d697373696e672e203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743ea863616e63656c5f646973747269627574696f6e5f6275636b65745f6f70657261746f725f696e766974650801246275636b65745f69642502015c446973747269627574696f6e4275636b657449643c543e0001486f70657261746f725f776f726b65725f696428012c576f726b657249643c543e001c209c43616e63656c2070656e64696e6720696e766974652e204d7573742062652070656e64696e672e203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e8c72656d6f76655f646973747269627574696f6e5f6275636b65745f6f70657261746f720801246275636b65745f69642502015c446973747269627574696f6e4275636b657449643c543e0001486f70657261746f725f776f726b65725f696428012c576f726b657249643c543e001d209452656d6f76657320646973747269627574696f6e206275636b6574206f70657261746f722e203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e9c7365745f646973747269627574696f6e5f6275636b65745f66616d696c795f6d6574616461746108012466616d696c795f6964280174543a3a446973747269627574696f6e4275636b657446616d696c7949640001206d6574616461746130011c5665633c75383e001e24a053657420646973747269627574696f6e206275636b65742066616d696c79206d657461646174612e203c7765696768743e002423232057656967687438604f20285729602077686572653aa02d206057602069732073697a65206f6620606d657461646174616020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e946163636570745f646973747269627574696f6e5f6275636b65745f696e7669746174696f6e080124776f726b65725f696428012c576f726b657249643c543e0001246275636b65745f69642502015c446973747269627574696f6e4275636b657449643c543e001f20584163636570742070656e64696e6720696e766974652e203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e887365745f646973747269627574696f6e5f6f70657261746f725f6d657461646174610c0124776f726b65725f696428012c576f726b657249643c543e0001246275636b65745f69642502015c446973747269627574696f6e4275636b657449643c543e0001206d6574616461746130011c5665633c75383e002024fc53657420646973747269627574696f6e206f70657261746f72206d6574616461746120666f722074686520646973747269627574696f6e206275636b65742e203c7765696768743e002423232057656967687438604f20285729602077686572653aa02d206057602069732073697a65206f6620606d657461646174616020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e5c73746f726167655f6f70657261746f725f72656d61726b0c0124776f726b65725f696428012c576f726b657249643c543e00014473746f726167655f6275636b65745f6964280148543a3a53746f726167654275636b6574496400010c6d736730011c5665633c75383e0021289c4465706f73697420612053746f726167654f70657261746f7252656d61726b6564206576656e7474636f6e7461696e696e6720612067656e65726963206d6573736167652e203c7765696768743e002423232057656967687438604f20285729602077686572653a9c2d206057602069732073697a65206f6620606d6573736167656020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e70646973747269627574696f6e5f6f70657261746f725f72656d61726b0c0124776f726b65725f696428012c576f726b657249643c543e000158646973747269627574696f6e5f6275636b65745f69642502015c446973747269627574696f6e4275636b657449643c543e00010c6d736730011c5665633c75383e0022249c43726561746520612064796e616d6963206261672e20446576656c6f706d656e74206d6f64652e203c7765696768743e002423232057656967687438604f20285729602077686572653a9c2d206057602069732073697a65206f6620606d6573736167656020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e0c4c446973706174636861626c652063616c6c732e005501456163682076617269616e74206f66207468697320656e756d206d61707320746f206120646973706174636861626c652066756e6374696f6e2066726f6d20746865206173736f636961746564206d6f64756c652e3d06085070616c6c65745f70726f6a6563745f746f6b656e1043616c6c040454000128207472616e736665721001347372635f6d656d6265725f696428012c543a3a4d656d6265724964000120746f6b656e5f6964280128543a3a546f6b656e496400011c6f757470757473410601505472616e736665724f7574707574734f663c543e0001206d6574616461746130011c5665633c75383e0000685501416c6c6f7720746f207472616e736665722066726f6d20607372635f6d656d6265725f696460206163636f756e7420746f2074686520766172696f757320606f757470757473602062656e6566696369617269657364696e207468652073706563696669656420616d6f756e74732e0038507265636f6e646974696f6e733ae82d206f726967696e207369676e6572206d75737420626520607372635f6d656d6265725f69646020636f6e74726f6c6c6572206163636f756e74842d20746f6b656e2062792060746f6b656e5f696460206d75737420657869737473d82d206163636f756e74206f6620607372635f6d656d6265725f696460206d75737420657869737420666f722060746f6b656e5f69646041012d2073656e646572206d757374206861766520656e6f756768204a4f597320746f20636f7665722074686520746f74616c20626c6f617420626f6e6420726571756972656420696e2063617365206f6678202064657374696e6174696f6e287329206e6f74206578697374696e672e29012d20736f75726365206163636f756e74206d757374206861766520656e6f75676820746f6b656e2066756e647320746f20636f76657220616c6c20746865207472616e7366657228732941012d20606f75747075747360206d7573742064657369676e617465206578697374696e672064657374696e6174696f6e28732920666f7220225065726d697373696f6e656422207472616e73666572732e3c506f7374636f6e646974696f6e733ae82d20736f75726365206163636f756e74277320746f6b656e7320616d6f756e74206973206465637265617365642062792060616d6f756e74602e49012d20746f74616c20626c6f617420626f6e64207472616e736665727265642066726f6d2073656e6465722773204a4f592062616c616e636520696e746f20746865207472656173757279206163636f756e74cc2020696e20636173652064657374696e6174696f6e2873292068617665206265656e20616464656420746f2073746f72616765ec2d20606f7574707574732e62656e65666963696172796020746f6b656e7320616d6f756e7420696e637265617365642062792060616d6f756e746000203c7765696768743e002423232057656967687448604f202854202b204d29602077686572653a802d2060546020697320746865206c656e677468206f6620606f75747075747360b02d20604d60206973207468652073697a65206f6620606d657461646174616020696e206b696c6f6279746573142d2044423aac20202d20604f28542960202d2066726f6d20746865207468652067656e65726174656420776569676874732c23203c2f7765696768743e106275726e0c0120746f6b656e5f6964280128543a3a546f6b656e49640001246d656d6265725f696428012c543a3a4d656d6265724964000118616d6f756e74180144546f6b656e42616c616e63654f663c543e000178884275726e20746f6b656e732066726f6d20737065636966696564206163636f756e740038507265636f6e646974696f6e733a442d2060616d6f756e7460206973203e2030f42d206f726967696e207369676e6572206973206120636f6e74726f6c6c6572206163636f756e74206f6620606d656d6265725f696460206d656d626572702d20746f6b656e2062792060746f6b656e5f69646020657869737473c02d20616e206163636f756e742065786973747320666f722060746f6b656e5f696460207820606d656d6265725f696460a02d206163636f756e74277320746f6b656e7320616d6f756e74206973203e3d2060616d6f756e746005012d20746f6b656e20737570706c792063616e206265206d6f64696669656420287468657265206973206e6f2061637469766520726576656e75652073706c697429003c506f7374636f6e646974696f6e733a4d012d207374617274696e6720776974682060756e70726f6365737365646020626565696e6720657175616c20746f2060616d6f756e74602c206163636f756e7427732076657374696e67207363686564756c6573602020617265206974657261746564206f76657220616e643a5d0120202d2075706461746564207769746820606275726e65645f616d6f756e74202b3d207570726f636573736564602069662076657374696e67207363686564756c65277320756e76657374656420616d6f756e74206973742020202067726561746572207468616e20607570726f636573736564605420202d2072656d6f766564206f746865727769736545012020286166746572206561636820697465726174696f6e2060756e70726f6365737365646020697320726564756365642062792074686520616d6f756e74206f6620756e76657374656420746f6b656e737c20206275726e656420647572696e67207468617420697465726174696f6e2949012d20696620746865206163636f756e742068617320616e79206073706c69745f7374616b696e675f737461747573602c20746865206073706c69745f7374616b696e675f7374617475732e616d6f756e7460e820206973207265647563656420627920606d696e28616d6f756e742c2073706c69745f7374616b696e675f7374617475732e616d6f756e742960a42d20606163636f756e742e616d6f756e746020697320726564756365642062792060616d6f756e7460942d20746f6b656e20737570706c7920697320726564756365642062792060616d6f756e746000203c7765696768743e00242323205765696768741c604f2028312960142d2044423ad820202d20604f28312960202d20646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e30647573745f6163636f756e74080120746f6b656e5f6964280128543a3a546f6b656e49640001246d656d6265725f696428012c543a3a4d656d62657249640002508c416c6c6f7720616e79207573657220746f2072656d6f766520616e206163636f756e740038507265636f6e646974696f6e733a802d20746f6b656e2062792060746f6b656e5f696460206d757374206578697374d02d20616e206163636f756e74206d75737420657869737420666f722060746f6b656e5f696460207820606d656d6265725f69646015012d206966205065726d697373696f6e656420746f6b656e3a20606f726967696e60207369676e6572206d75737420626520606d656d6265725f696460206d656d6265722773502020636f6e74726f6c6c6572206163636f756e74ec2d2060746f6b656e5f696460207820606d656d6265725f696460206163636f756e74206d75737420626520616e20656d707479206163636f756e7478202028606163636f756e745f646174612e616d6f756e7460203d3d2030293c506f7374636f6e646974696f6e733a1d012d204163636f756e7420696e666f726d6174696f6e20666f722060746f6b656e5f696460207820606d656d6265725f6964602072656d6f7665642066726f6d2073746f72616765dc2d20626c6f617420626f6e6420726566756e64656420746f20606d656d6265725f69646020636f6e74726f6c6c6572206163636f756e74cc2020286f722060626c6f61745f626f6e642e72657061796d656e745f726573747269637465645f746f60206163636f756e742900203c7765696768743e001c604f2028312960142d2044423ad820202d20604f28312960202d20646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e386a6f696e5f77686974656c6973740c01246d656d6265725f696428012c543a3a4d656d6265724964000120746f6b656e5f6964280128543a3a546f6b656e496400011470726f6f664d0601404d65726b6c6550726f6f664f663c543e00034c11014a6f696e2077686974656c69737420666f72207065726d697373696f6e656420636173653a207573656420746f20616464206163636f756e747320666f7220746f6b656e38507265636f6e646974696f6e733a682d2027746f6b656e5f696427206d7573742062652076616c6964f42d20606f726967696e60207369676e6572206d757374206265206120636f6e74726f6c6c6572206163636f756e74206f6620606d656d6265725f696460c02d206163636f756e7420666f7220606d656d6265725f696460206d757374206e6f7420616c726561647920657869737409012d207472616e7366657220706f6c69637920697320605065726d697373696f6e65646020616e64206d65726b6c652070726f6f66206d7573742062652076616c6964003c506f7374636f6e646974696f6e733af42d206163636f756e7420666f7220606d656d6265725f696460206372656174656420616e6420616464656420746f2070616c6c65742073746f72616765e82d2060626c6f61745f626f6e6460207472616e736665727265642066726f6d2073656e64657220746f207472656173757279206163636f756e7400203c7765696768743e002423232057656967687438604f20284829602077686572653a802d2060486020697320746865206c656e677468206f66206070726f6f662e3060142d2044423ad820202d20604f28312960202d20646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e5c70757263686173655f746f6b656e735f6f6e5f73616c650c0120746f6b656e5f6964280128543a3a546f6b656e49640001246d656d6265725f696428012c543a3a4d656d6265724964000118616d6f756e74180144546f6b656e42616c616e63654f663c543e0004ec94507572636861736520746f6b656e73206f6e2061637469766520746f6b656e2073616c652e0038507265636f6e646974696f6e733a802d20746f6b656e2062792060746f6b656e5f696460206d757374206578697374d02d20746f6b656e2062792060746f6b656e5f696460206d75737420626520696e204f66666572696e6753746174653a3a53616c65ec2d2060616d6f756e74602063616e6e6f7420657863656564206e756d626572206f6620746f6b656e732072656d61696e696e67206f6e2073616c6509012d20606f726967696e60207369676e6572206d75737420626520636f6e74726f6c6c6572206163636f756e74206f6620606d656d6265725f696460206d656d626572a42d2073656e646572277320617661696c61626c65204a4f592062616c616e6365206d7573742062653aec20202d203e3d20606a6f795f6578697374656e7469616c5f6465706f736974202b20616d6f756e74202a2073616c652e756e69745f70726963656080202020206966204163636f756e744461746120616c7265616479206578697374210120202d203e3d20606a6f795f6578697374656e7469616c5f6465706f736974202b20616d6f756e74202a2073616c652e756e69745f7072696365202b20626c6f61745f626f6e646084202020206966204163636f756e744461746120646f6573206e6f7420657869737435012d206c657420606665655f616d6f756e7460206265206073616c655f706c6174666f726d5f6665652e6d756c5f666c6f6f7228616d6f756e74202a2073616c652e756e69745f7072696365296059012d206966206073616c652e6561726e696e67735f64657374696e6174696f6e2e69735f736f6d6528296020616e64206073616c652e6561726e696e67735f64657374696e6174696f6e60206163636f756e74206861733c20207a65726f2062616c616e63653a390120202d2074686520616d6f756e7420746f206265207472616e736665727265642066726f6d206073656e6465726020746f206073616c652e6561726e696e67735f64657374696e6174696f6e602c4d0120202020776869636820697320657175616c20746f2060616d6f756e74202a2073616c652e756e69745f7072696365202d206665655f616d6f756e74602c206d7573742062652067726561746572207468616e7420202020606a6f795f6578697374656e7469616c5f6465706f7369746031012d20746f74616c206e756d626572206f6620746f6b656e7320616c72656164792070757263686173656420627920746865206d656d626572206f6e207468652063757272656e742073616c65f82020504c55532060616d6f756e7460206d757374206e6f74206578636565642073616c6527732070757263686173652063617020706572206d656d626572602d206966205065726d697373696f6e656420746f6b656e3a010120202d204163636f756e74496e666f4279546f6b656e416e644d656d62657228746f6b656e5f69642c20266d656d6265725f696429206d7573742065786973749c2d206966206073616c652e76657374696e675f7363686564756c652e69735f736f6d652829603ae020202d206e756d626572206f662073656e646572206163636f756e742773206f6e676f696e672076657374696e67207363686564756c6573cc202020206d757374206265203c204d617856657374696e675363686564756c65735065724163636f756e74506572546f6b656e003c506f7374636f6e646974696f6e733aac2d206966206073616c652e6561726e696e67735f64657374696e6174696f6e2e69735f736f6d652829603a4d0120202d2060616d6f756e74202a2073616c652e756e69745f7072696365202d206665655f616d6f756e7460204a4f5920746f6b656e7320617265207472616e7366657265642066726f6d206073656e646572608820202020746f206073616c652e6561726e696e67735f64657374696e6174696f6e60d420202d20606665655f616d6f756e7460204a4f5920697320736c61736865642066726f6d206073656e646572602062616c616e6365ac2d206966206073616c652e6561726e696e67735f64657374696e6174696f6e2e69735f6e6f6e652829603a0d0120202d2060616d6f756e74202a2073616c652e756e69745f707269636560204a4f5920697320736c61736865642066726f6d206073656e646572602062616c616e636549012d206966206e657720746f6b656e206163636f756e7420637265617465643a2060626c6f61745f626f6e6460207472616e736665727265642066726f6d206073656e6465726020746f2074726561737572799c2d206966206073616c652e76657374696e675f7363686564756c652e69735f736f6d652829603a0d0120202d20696620627579657220686173206e6f206076657374696e675f7363686564756c65602072656c6174656420746f207468652063757272656e742073616c653a5d01202020202d2061206e65772076657374696e67207363686564756c6520286073616c652e6765745f76657374696e675f7363686564756c652870757263686173655f616d6f756e7429602920697320616464656420746f80202020202020627579657227732060766573696e675f7363686564756c6573605501202020202d20736f6d652066696e69736865642076657374696e67207363686564756c652069732072656d6f7665642066726f6d2062757965722773206163636f756e745f6461746120696e20636173652074686559012020202020206e756d626572206f6620627579657227732076657374696e675f7363686564756c657320776173203d3d204d617856657374696e675363686564756c65735065724163636f756e74506572546f6b656e290120202d20696620627579657220616c7265616479206861732061206076657374696e675f7363686564756c65602072656c6174656420746f207468652063757272656e742073616c653afc202020202d2063757272656e742076657374696e67207363686564756c6527732060636c6966665f616d6f756e746020697320696e63726561736564206279fc2020202020206073616c652e6765745f76657374696e675f7363686564756c652870757263686173655f616d6f756e74292e636c6966665f616d6f756e74602901202020202d2063757272656e742076657374696e67207363686564756c6527732060706f73745f636c6966665f746f74616c5f616d6f756e746020697320696e6372656173656420627929012020202020206073616c652e6765745f76657374696e675f7363686564756c652870757263686173655f616d6f756e74292e706f73745f636c6966665f746f74616c5f616d6f756e74609c2d206966206073616c652e76657374696e675f7363686564756c652e69735f6e6f6e652829603ad820202d2062757965722773206163636f756e7420746f6b656e20616d6f756e7420696e637265617365642062792060616d6f756e746055012d2069662060746f6b656e5f646174612e73616c652e7175616e746974795f6c656674202d20616d6f756e74203d3d20306020616e64206073616c652e6175746f5f66696e616c697a6560206973206074727565604101202060746f6b656e5f646174612e73616c65602069732073657420746f204e6f6e652c206f74686572776973652060746f6b656e5f646174612e73616c652e7175616e746974795f6c65667460206973350120206465637265617365642062792060616d6f756e746020616e642060746f6b656e5f646174612e73616c652e66756e64735f636f6c6c65637465646020696e20696e6372656173656420627970202060616d6f756e74202a2073616c652e756e69745f70726963656000203c7765696768743e00242323205765696768741c604f2028312960142d2044423ad820202d20604f28312960202d20646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e5070617274696369706174655f696e5f73706c69740c0120746f6b656e5f6964280128543a3a546f6b656e49640001246d656d6265725f696428012c543a3a4d656d6265724964000118616d6f756e74180144546f6b656e42616c616e63654f663c543e000568f0506172746963697061746520696e20746865202a6c61746573742a20746f6b656e20726576656e75652073706c697420286966206f6e676f696e672938507265636f6e646974696f6e733a8c2d2060746f6b656e60206d75737420657869737420666f722060746f6b656e5f696460fc2d20606f726967696e60207369676e6572206d75737420626520606d656d6265725f696460206d656d62657220636f6e74726f6c6c6572206163636f756e74582d2060616d6f756e7460206d757374206265203e2030cc2d20606163636f756e7460206d7573742065786973742020666f72206028746f6b656e5f69642c206d656d6265725f69642960fc2d2060746f6b656e2e73706c69745f73746174757360206d7573742062652061637469766520414e44205448454e2063757272656e745f626c6f636b20696eb82020205b73706c69742e73746172742c2073706c69742e7374617274202b2073706c69745f6475726174696f6e2981012d20606163636f756e742e7374616b696e675f7374617475732e69735f6e6f6e65282960204f5220606163636f756e742e7374616b696e675f7374617475732e73706c69745f6964602072656665727320746f206120706173742073706c6974782d20606163636f756e742e616d6f756e7460203e3d2060616d6f756e74602d012d206c657420606469766964656e64203d2073706c69745f616c6c6f636174696f6e202a206163636f756e742e7374616b65645f616d6f756e74202f20746f6b656e2e737570706c79606015012020207468656e2060747265617375727960206d7573742062652061626c6520746f207472616e7366657220606469766964656e646020616d6f756e74206f66204a4f592eec202020285468697320636f6e646974696f6e20746563686e6963616c6c792c2073686f756c6420616c7761797320626520736174697366696564290038506f7374636f6e646974696f6e732d012d20606469766964656e646020616d6f756e74206f66204a4f5973207472616e736665727265642066726f6d206074726561737572795f6163636f756e746020746f206073656e6465726045012d2060746f6b656e6020726576656e75652073706c6974206469766964656e647320706179656420747261636b696e67207661726961626c6520696e6372656173656420627920606469766964656e646045012d20606163636f756e742e7374616b696e675f737461747573602073657420746f20536f6d65282e2e2920776974682060616d6f756e746020616e642060746f6b656e2e6c61746573745f73706c69746000203c7765696768743e00242323205765696768741c604f2028312960142d2044423ad820202d20604f28312960202d20646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e48657869745f726576656e75655f73706c6974080120746f6b656e5f6964280128543a3a546f6b656e49640001246d656d6265725f696428012c543a3a4d656d626572496400064cb453706c69742d70617274696369706174696e672075736572206c656176657320726576656e75652073706c697434507265636f6e646974696f6e738c2d2060746f6b656e60206d75737420657869737420666f722060746f6b656e5f696460fc2d20606f726967696e60207369676e6572206d75737420626520606d656d6265725f696460206d656d62657220636f6e74726f6c6c6572206163636f756e74c82d20606163636f756e7460206d75737420657869737420666f72206028746f6b656e5f69642c206d656d6265725f69642960902d20606163636f756e742e7374616b696e67207374617475732e69735f736f6d6528292729012d2069662060286163636f756e742e7374616b696e675f7374617475732e73706c69745f6964203d3d20746f6b656e2e6e6578745f726576656e75655f73706c69745f6964202d2031604101202020414e442060746f6b656e2e726576656e75655f73706c6974602069732061637469766529205448454e2073706c6974207374616b696e6720706572696f6420206d75737420626520656e6465640038506f7374636f6e646974696f6e73982d20606163636f756e742e7374616b696e675f737461747573602073657420746f204e6f6e6500203c7765696768743e00242323205765696768741c604f2028312960142d2044423ad820202d20604f28312960202d20646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e286275795f6f6e5f616d6d100120746f6b656e5f6964280128543a3a546f6b656e49640001246d656d6265725f696428012c543a3a4d656d6265724964000118616d6f756e741801583c5420617320436f6e6669673e3a3a42616c616e6365000148736c6970706167655f746f6c6572616e63655d0601884f7074696f6e3c285065726d696c6c2c204a6f7942616c616e63654f663c543e293e00073005014d696e7420646573697265642060746f6b656e5f69646020616d6f756e7420696e746f2075736572206163636f756e7420766961204a4f5920657863686e61676534507265636f6e646974696f6e73f02d206f726967696e2c206d656d6265725f69642070616972206d75737420626520612076616c69642061757468656e7469636174696f6e2070616972542d20746f6b656e5f6964206d7573742065786973742d012d207573657220757361626c65204a4f592062616c616e6365206d75737420626520656e6f75676820666f7220627579696e6720282b206578697374656e7469616c206465706f73697429d82d20736c69707061676520746f6c6572616e636520636f6e73747261696e7473207265737065637465642069662070726f76696465644d012d20746f6b656e20746f74616c20737570706c7920616e6420616d6f756e742076616c7565206d75737420626520732e742e20606576616c602066756e6374696f6e20646f65736e2774206f766572666c6f770038506f7374636f6e646974696f6e73b5012d2060616d6f756e746020435254206d696e74656420696e746f206163636f756e74202877686963682069732063726561746564206966206e65636573736172792077697468206578697374656e7469616c206465706f736974207472616e7366657272656420746f2069742935012d2072657370656374697665204a4f5920616d6f756e74207472616e736665727265642066726f6d20757365722062616c616e636520746f20616d6d207472656173757279206163636f756e74442d206576656e74206465706f73697465642c73656c6c5f6f6e5f616d6d100120746f6b656e5f6964280128543a3a546f6b656e49640001246d656d6265725f696428012c543a3a4d656d6265724964000118616d6f756e741801583c5420617320436f6e6669673e3a3a42616c616e6365000148736c6970706167655f746f6c6572616e63655d0601884f7074696f6e3c285065726d696c6c2c204a6f7942616c616e63654f663c543e293e00083c49014275726e20646573697265642060746f6b656e5f69646020616d6f756e742066726f6d2075736572206163636f756e7420616e6420676574204a4f592066726f6d207472656173757279206163636f756e7434507265636f6e646974696f6e73f02d206f726967696e2c206d656d6265725f69642070616972206d75737420626520612076616c69642061757468656e7469636174696f6e2070616972542d20746f6b656e5f6964206d757374206578697374dc2d20746f6b656e5f69642c206d656d6265725f6964206d7573742062652076616c6964206163636f756e7420636f6f7264696e61746573cc2d207573657220757361626c65204352542062616c616e6365206d757374206265206174206c656173742060616d6f756e7460d82d20736c69707061676520746f6c6572616e636520636f6e73747261696e7473207265737065637465642069662070726f76696465644d012d20746f6b656e20746f74616c20737570706c7920616e6420616d6f756e742076616c7565206d75737420626520732e742e20606576616c602066756e6374696f6e20646f65736e2774206f766572666c6f7709012d20616d6d207472656173757279206163636f756e74206d75737420686176652073756666696369656e74204a4f597320666f7220746865206f7065726174696f6e0038506f7374636f6e646974696f6e738c2d2060616d6f756e7460206275726e65642066726f6d2075736572206163636f756e74882d20746f74616c20737570706c792064656372656173656420627920616d6f756e7435012d2072657370656374697665204a4f5920616d6f756e74207472616e736665727265642066726f6d20616d6d207472656173757279206163636f756e7420746f2075736572206163636f756e74442d206576656e74206465706f7369746564447365745f66726f7a656e5f737461747573040118667265657a65980110626f6f6c000924fc416c6c6f777320746f20667265657a65206f7220756e667265657a6520746869732070616c6c65742e20526571756972657320726f6f74206f726967696e2e00203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e0c4c446973706174636861626c652063616c6c732e005501456163682076617269616e74206f66207468697320656e756d206d61707320746f206120646973706174636861626c652066756e6374696f6e2066726f6d20746865206173736f636961746564206d6f64756c652e41060c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454014506045300000400490601185665633c543e000045060000040828180049060000024506004d060c5070616c6c65745f70726f6a6563745f746f6b656e1474797065732c4d65726b6c6550726f6f660418486173686572014d04000400510601845665633c284861736865723a3a4f75747075742c204d65726b6c6553696465293e000051060000025506005506000004082c59060059060c5070616c6c65745f70726f6a6563745f746f6b656e147479706573284d65726b6c6553696465000108145269676874000000104c656674000100005d0604184f7074696f6e0404540161060108104e6f6e6500000010536f6d65040061060000010000610600000408d50218006506085c70616c6c65745f70726f706f73616c735f656e67696e651043616c6c04045400011010766f7465100120766f7465725f696428012c4d656d62657249643c543e00012c70726f706f73616c5f6964100134543a3a50726f706f73616c4964000110766f74653d030120566f74654b696e64000124726174696f6e616c6530011c5665633c75383e000028d4566f74652065787472696e7369632e20436f6e646974696f6e733a20206f726967696e206d75737420616c6c6f7720766f7465732e00203c7765696768743e002423232057656967687438604f20285229602077686572653ab42d20605260206973207468652073697a65206f662060726174696f6e616c656020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f722070617261656d746572732c23203c2f7765696768743e3c63616e63656c5f70726f706f73616c08012c70726f706f7365725f696428012c4d656d62657249643c543e00012c70726f706f73616c5f6964100134543a3a50726f706f73616c4964000128ac43616e63656c20612070726f706f73616c20627920697473206f726967696e616c2070726f706f7365722e00203c7765696768743e002423232057656967687438604f20284c29602077686572653ac02d20604c602069732074686520746f74616c206e756d626572206f66206c6f636b7320696e206042616c616e63657360142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e347665746f5f70726f706f73616c04012c70726f706f73616c5f6964100134543a3a50726f706f73616c4964000224785665746f20612070726f706f73616c2e204d75737420626520726f6f742e00203c7765696768743e0024232320576569676874c4604f202831296020646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d6574657273142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e3c70726f706f7365725f72656d61726b0c012c70726f706f73616c5f6964100134543a3a50726f706f73616c496400012c70726f706f7365725f696428012c4d656d62657249643c543e00010c6d736730011c5665633c75383e0003243c50726f706f7365722052656d61726b00203c7765696768743e0024232320576569676874c4604f202831296020646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d6574657273142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e0c4c446973706174636861626c652063616c6c732e005501456163682076617269616e74206f66207468697320656e756d206d61707320746f206120646973706174636861626c652066756e6374696f6e2066726f6d20746865206173736f636961746564206d6f64756c652e6906086c70616c6c65745f70726f706f73616c735f64697363757373696f6e1043616c6c040454000110206164645f706f7374100138706f73745f617574686f725f696428012c4d656d62657249643c543e0001247468726561645f696428012c543a3a54687265616449640001107465787430011c5665633c75383e0001206564697461626c65980110626f6f6c0000289441646473206120706f7374207769746820617574686f72206f726967696e20636865636b2e00203c7765696768743e002423232057656967687438604f20284c29602077686572653aa02d20604c60206973207468652073697a65206f662060746578746020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e2c64656c6574655f706f737410012864656c657465725f696428012c4d656d62657249643c543e00011c706f73745f6964280124543a3a506f737449640001247468726561645f696428012c543a3a546872656164496400011068696465980110626f6f6c000128510152656d6f766520706f73742066726f6d2073746f726167652c207769746820746865206c61737420706172616d6574657220696e6469636174696e67207768657468657220746f20616c736f206869646520697428696e207468652055492e00203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e2c7570646174655f706f73740c01247468726561645f696428012c543a3a546872656164496400011c706f73745f6964280124543a3a506f737449640001107465787430011c5665633c75383e0002282d0155706461746573206120706f7374207769746820617574686f72206f726967696e20636865636b2e2055706461746520617474656d707473206e756d626572206973206c696d697465642e00203c7765696768743e002423232057656967687438604f20284c29602077686572653aa02d20604c60206973207468652073697a65206f662060746578746020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e486368616e67655f7468726561645f6d6f64650c01246d656d6265725f696428012c4d656d62657249643c543e0001247468726561645f696428012c543a3a54687265616449640001106d6f6465450301d85468726561644d6f64653c42547265655365743c3c54206173204d656d6265727368697054797065733e3a3a4d656d62657249643e3e0003287c4368616e67657320746872656164207065726d697373696f6e206d6f64652e00203c7765696768743e0024232320576569676874dc604f2028572960206966205468726561644d6f646520697320636c6f7365206f72204f283129206f74686572776973652077686572653ad02d2060576020697320746865206e756d626572206f662077686974656c6973746564206d656d6265727320696e20606d6f646560142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e0c4c446973706174636861626c652063616c6c732e005501456163682076617269616e74206f66207468697320656e756d206d61707320746f206120646973706174636861626c652066756e6374696f6e2066726f6d20746865206173736f636961746564206d6f64756c652e6d06085870616c6c65745f70726f706f73616c735f636f6465781043616c6c0404540001043c6372656174655f70726f706f73616c08016c67656e6572616c5f70726f706f73616c5f706172616d65746572734d03017047656e6572616c50726f706f73616c506172616d65746572733c543e00014070726f706f73616c5f64657461696c735103015050726f706f73616c44657461696c734f663c543e000034450143726561746520612070726f706f73616c2c207468652074797065206f662070726f706f73616c20646570656e6473206f6e20746865206070726f706f73616c5f64657461696c73602076617269616e7400203c7765696768743e002423232057656967687458604f202854202b2044202b204929602077686572653a902d2060546020697320746865207469746c652073697a6520696e206b696c6f6279746573a82d2060446020697320746865206465736372697074696f6e2073697a6520696e206b696c6f6279746573e02d20604960206973207468652073697a65206f6620616e7920706172616d6574657220696e206070726f706f73616c5f64657461696c736084202028696e206b696c6f62797465732069662069742773206d6574616461746129142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e0c4c446973706174636861626c652063616c6c732e005501456163682076617269616e74206f66207468697320656e756d206d61707320746f206120646973706174636861626c652066756e6374696f6e2066726f6d20746865206173736f636961746564206d6f64756c652e7106085070616c6c65745f776f726b696e675f67726f75701043616c6c08045400044900014c2c6164645f6f70656e696e6710012c6465736372697074696f6e30011c5665633c75383e0001306f70656e696e675f747970658103012c4f70656e696e67547970650001307374616b655f706f6c696379610301a45374616b65506f6c6963793c543a3a426c6f636b4e756d6265722c2042616c616e63654f663c543e3e0001407265776172645f7065725f626c6f636b450101504f7074696f6e3c42616c616e63654f663c543e3e00002cc44164642061206a6f62206f70656e696e6720666f72206120726567756c617220776f726b65722f6c65616420726f6c652e490152657175697265207369676e6564206c6561646572206f726967696e206f722074686520726f6f742028746f20616464206f70656e696e6720666f7220746865206c656164657220706f736974696f6e292e002823203c7765696768743e002423232057656967687438604f20284429602077686572653abc2d20604460206973207468652073697a65206f6620606465736372697074696f6e6020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e406170706c795f6f6e5f6f70656e696e67040104708503016c4170706c794f6e4f70656e696e67506172616d65746572733c543e000128684170706c79206f6e206120776f726b6572206f70656e696e672e002823203c7765696768743e002423232057656967687438604f20284429602077686572653ac42d20604460206973207468652073697a65206f662060702e6465736372697074696f6e6020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e3066696c6c5f6f70656e696e670801286f70656e696e675f69642801244f70656e696e6749640001687375636365737366756c5f6170706c69636174696f6e5f6964736901015c42547265655365743c4170706c69636174696f6e49643e000228ac46696c6c206f70656e696e6720666f722074686520726567756c61722f6c65616420706f736974696f6e2e4d0152657175697265207369676e6564206c6561646572206f726967696e206f722074686520726f6f742028746f2066696c6c206f70656e696e6720666f7220746865206c656164657220706f736974696f6e292e2823203c7765696768743e002423232057656967687438604f20284129602077686572653acc2d2060416020697320746865206c656e677468206f6620607375636365737366756c5f6170706c69636174696f6e5f69647360142d2044423a242020202d204f2841292c23203c2f7765696768743e4c7570646174655f726f6c655f6163636f756e74080124776f726b65725f696428012c576f726b657249643c543e00014c6e65775f726f6c655f6163636f756e745f6964000130543a3a4163636f756e744964000324150155706461746520746865206173736f63696174656420726f6c65206163636f756e74206f66207468652061637469766520726567756c617220776f726b65722f6c6561642e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e286c656176655f726f6c65080124776f726b65725f696428012c576f726b657249643c543e000124726174696f6e616c653101013c4f7074696f6e3c5665633c75383e3e000424904c656176652074686520726f6c65206279207468652061637469766520776f726b65722e2823203c7765696768743e002423232057656967687438604f20285229602077686572653ab42d20605260206973207468652073697a65206f662060726174696f6e616c656020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e387465726d696e6174655f726f6c650c0124776f726b65725f696428012c576f726b657249643c543e00011c70656e616c7479450101504f7074696f6e3c42616c616e63654f663c543e3e000124726174696f6e616c653101013c4f7074696f6e3c5665633c75383e3e000528a05465726d696e617465207468652061637469766520776f726b657220627920746865206c6561642e25015265717569726573207369676e6564206c6561646572206f726967696e206f722074686520726f6f742028746f207465726d696e61746520746865206c656164657220726f6c65292e2823203c7765696768743e002423232057656967687438604f20285029602077686572653ad82d20605060206973207468652073697a65206070656e616c74792e736c617368696e675f746578746020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e2c736c6173685f7374616b650c0124776f726b65725f696428012c576f726b657249643c543e00011c70656e616c747918013042616c616e63654f663c543e000124726174696f6e616c653101013c4f7074696f6e3c5665633c75383e3e00062c7d01536c61736865732074686520726567756c617220776f726b6572207374616b652c2064656d616e64732061206c6561646572206f726967696e2e204e6f206c696d6974732c206e6f20616374696f6e73206f6e207a65726f207374616b652e3d01496620736c617368696e672062616c616e63652067726561746572207468616e20746865206578697374696e67207374616b65202d207374616b6520697320736c617368656420746f207a65726f2e19015265717569726573207369676e6564206c6561646572206f726967696e206f722074686520726f6f742028746f20736c61736820746865206c6561646572207374616b65292e2823203c7765696768743e002423232057656967687438604f20285029602077686572653ae82d20605060206973207468652073697a65206f66206070656e616c6974792e736c617368696e675f746578746020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e3864656372656173655f7374616b65080124776f726b65725f696428012c576f726b657249643c543e00014c7374616b655f62616c616e63655f64656c746118013042616c616e63654f663c543e00073021014465637265617365732074686520726567756c617220776f726b65722f6c656164207374616b6520616e642072657475726e73207468652072656d61696e64657220746f207468653901776f726b6572207374616b696e675f6163636f756e745f69642e2043616e2062652064656372656173656420746f207a65726f2c206e6f20616374696f6e73206f6e207a65726f207374616b652e944163636570747320746865207374616b6520616d6f756e7420746f2064656372656173652e25015265717569726573207369676e6564206c6561646572206f726967696e206f722074686520726f6f742028746f20646563726561736520746865206c6561646572207374616b65292e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e38696e6372656173655f7374616b65080124776f726b65725f696428012c576f726b657249643c543e00014c7374616b655f62616c616e63655f64656c746118013042616c616e63654f663c543e0008280501496e637265617365732074686520726567756c617220776f726b65722f6c656164207374616b652c2064656d616e6473206120776f726b6572206f726967696e2e6d014c6f636b7320746f6b656e732066726f6d2074686520776f726b6572207374616b696e675f6163636f756e745f696420657175616c20746f206e6577207374616b652e204e6f206c696d697473206f6e20746865207374616b652e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e5077697468647261775f6170706c69636174696f6e0401386170706c69636174696f6e5f69642801344170706c69636174696f6e4964000924010157697468647261772074686520776f726b6572206170706c69636174696f6e2e2043616e20626520646f6e652062792074686520776f726b6572206f6e6c792e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e3863616e63656c5f6f70656e696e670401286f70656e696e675f69642801244f70656e696e674964000a28dc43616e63656c20616e206f70656e696e6720666f722074686520726567756c617220776f726b65722f6c65616420706f736974696f6e2e550152657175697265207369676e6564206c6561646572206f726967696e206f722074686520726f6f742028746f2063616e63656c206f70656e696e6720666f7220746865206c656164657220706f736974696f6e292e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e287365745f6275646765740401286e65775f62756467657418013042616c616e63654f663c543e000b28a0536574732061206e65772062756467657420666f722074686520776f726b696e672067726f75702e54526571756972657320726f6f74206f726967696e2e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e547570646174655f7265776172645f6163636f756e74080124776f726b65725f696428012c576f726b657249643c543e0001546e65775f7265776172645f6163636f756e745f6964000130543a3a4163636f756e744964000c2469015570646174652074686520726577617264206163636f756e74206173736f6369617465642077697468206120736574207265776172642072656c6174696f6e7368697020666f72207468652061637469766520776f726b65722e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e507570646174655f7265776172645f616d6f756e74080124776f726b65725f696428012c576f726b657249643c543e0001407265776172645f7065725f626c6f636b450101504f7074696f6e3c42616c616e63654f663c543e3e000d28c855706461746520746865207265776172642070657220626c6f636b20666f72207468652061637469766520776f726b65722e310152657175697265207369676e6564206c6561646572206f726967696e206f722074686520726f6f742028746f20757064617465206c656164657227732072657761726420616d6f756e74292e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e3c7365745f7374617475735f7465787404012c7374617475735f746578743101013c4f7074696f6e3c5665633c75383e3e000e30b4536574732061206e657720737461747573207465787420666f722074686520776f726b696e672067726f75702e54526571756972657320726f6f74206f726967696e2e002823203c7765696768743e002423232057656967687438604f20285329602077686572653a4d012d20605360206973207468652073697a65206f662074686520636f6e74656e7473206f6620607374617475735f746578746020696e206b696c6f6279746573207768656e206974206973206e6f74206e6f6e6500142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e447370656e645f66726f6d5f6275646765740c01286163636f756e745f6964000130543a3a4163636f756e744964000118616d6f756e7418013042616c616e63654f663c543e000124726174696f6e616c653101013c4f7074696f6e3c5665633c75383e3e000f28a85472616e73666572732073706563696669656420616d6f756e7420746f20616e79206163636f756e742e5c5265717569726573206c6561646572206f726967696e2e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e6466756e645f776f726b696e675f67726f75705f6275646765740c01246d656d6265725f696428012c4d656d62657249643c543e000118616d6f756e7418013042616c616e63654f663c543e000124726174696f6e616c6530011c5665633c75383e0010209846756e6420776f726b696e672067726f7570206275646765742062792061206d656d6265722e203c7765696768743e0024232320576569676874c4604f202831296020446f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d6574657273142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e2c6c6561645f72656d61726b04010c6d736730011c5665633c75383e0011284c4c6561642072656d61726b206d657373616765002823203c7765696768743e002423232057656967687438604f20284d29602077686572653a9c2d20604d60206973207468652073697a65206f6620606d73676020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e34776f726b65725f72656d61726b080124776f726b65725f696428012c576f726b657249643c543e00010c6d736730011c5665633c75383e00122854576f726b65722072656d61726b206d657373616765002823203c7765696768743e002423232057656967687438604f20284d29602077686572653a9c2d20604d60206973207468652073697a65206f6620606d73676020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e0c4c446973706174636861626c652063616c6c732e005501456163682076617269616e74206f66207468697320656e756d206d61707320746f206120646973706174636861626c652066756e6374696f6e2066726f6d20746865206173736f636961746564206d6f64756c652e7506085070616c6c65745f776f726b696e675f67726f75701043616c6c08045400044900014c2c6164645f6f70656e696e6710012c6465736372697074696f6e30011c5665633c75383e0001306f70656e696e675f747970658103012c4f70656e696e67547970650001307374616b655f706f6c696379610301a45374616b65506f6c6963793c543a3a426c6f636b4e756d6265722c2042616c616e63654f663c543e3e0001407265776172645f7065725f626c6f636b450101504f7074696f6e3c42616c616e63654f663c543e3e00002cc44164642061206a6f62206f70656e696e6720666f72206120726567756c617220776f726b65722f6c65616420726f6c652e490152657175697265207369676e6564206c6561646572206f726967696e206f722074686520726f6f742028746f20616464206f70656e696e6720666f7220746865206c656164657220706f736974696f6e292e002823203c7765696768743e002423232057656967687438604f20284429602077686572653abc2d20604460206973207468652073697a65206f6620606465736372697074696f6e6020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e406170706c795f6f6e5f6f70656e696e67040104708503016c4170706c794f6e4f70656e696e67506172616d65746572733c543e000128684170706c79206f6e206120776f726b6572206f70656e696e672e002823203c7765696768743e002423232057656967687438604f20284429602077686572653ac42d20604460206973207468652073697a65206f662060702e6465736372697074696f6e6020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e3066696c6c5f6f70656e696e670801286f70656e696e675f69642801244f70656e696e6749640001687375636365737366756c5f6170706c69636174696f6e5f6964736901015c42547265655365743c4170706c69636174696f6e49643e000228ac46696c6c206f70656e696e6720666f722074686520726567756c61722f6c65616420706f736974696f6e2e4d0152657175697265207369676e6564206c6561646572206f726967696e206f722074686520726f6f742028746f2066696c6c206f70656e696e6720666f7220746865206c656164657220706f736974696f6e292e2823203c7765696768743e002423232057656967687438604f20284129602077686572653acc2d2060416020697320746865206c656e677468206f6620607375636365737366756c5f6170706c69636174696f6e5f69647360142d2044423a242020202d204f2841292c23203c2f7765696768743e4c7570646174655f726f6c655f6163636f756e74080124776f726b65725f696428012c576f726b657249643c543e00014c6e65775f726f6c655f6163636f756e745f6964000130543a3a4163636f756e744964000324150155706461746520746865206173736f63696174656420726f6c65206163636f756e74206f66207468652061637469766520726567756c617220776f726b65722f6c6561642e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e286c656176655f726f6c65080124776f726b65725f696428012c576f726b657249643c543e000124726174696f6e616c653101013c4f7074696f6e3c5665633c75383e3e000424904c656176652074686520726f6c65206279207468652061637469766520776f726b65722e2823203c7765696768743e002423232057656967687438604f20285229602077686572653ab42d20605260206973207468652073697a65206f662060726174696f6e616c656020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e387465726d696e6174655f726f6c650c0124776f726b65725f696428012c576f726b657249643c543e00011c70656e616c7479450101504f7074696f6e3c42616c616e63654f663c543e3e000124726174696f6e616c653101013c4f7074696f6e3c5665633c75383e3e000528a05465726d696e617465207468652061637469766520776f726b657220627920746865206c6561642e25015265717569726573207369676e6564206c6561646572206f726967696e206f722074686520726f6f742028746f207465726d696e61746520746865206c656164657220726f6c65292e2823203c7765696768743e002423232057656967687438604f20285029602077686572653ad82d20605060206973207468652073697a65206070656e616c74792e736c617368696e675f746578746020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e2c736c6173685f7374616b650c0124776f726b65725f696428012c576f726b657249643c543e00011c70656e616c747918013042616c616e63654f663c543e000124726174696f6e616c653101013c4f7074696f6e3c5665633c75383e3e00062c7d01536c61736865732074686520726567756c617220776f726b6572207374616b652c2064656d616e64732061206c6561646572206f726967696e2e204e6f206c696d6974732c206e6f20616374696f6e73206f6e207a65726f207374616b652e3d01496620736c617368696e672062616c616e63652067726561746572207468616e20746865206578697374696e67207374616b65202d207374616b6520697320736c617368656420746f207a65726f2e19015265717569726573207369676e6564206c6561646572206f726967696e206f722074686520726f6f742028746f20736c61736820746865206c6561646572207374616b65292e2823203c7765696768743e002423232057656967687438604f20285029602077686572653ae82d20605060206973207468652073697a65206f66206070656e616c6974792e736c617368696e675f746578746020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e3864656372656173655f7374616b65080124776f726b65725f696428012c576f726b657249643c543e00014c7374616b655f62616c616e63655f64656c746118013042616c616e63654f663c543e00073021014465637265617365732074686520726567756c617220776f726b65722f6c656164207374616b6520616e642072657475726e73207468652072656d61696e64657220746f207468653901776f726b6572207374616b696e675f6163636f756e745f69642e2043616e2062652064656372656173656420746f207a65726f2c206e6f20616374696f6e73206f6e207a65726f207374616b652e944163636570747320746865207374616b6520616d6f756e7420746f2064656372656173652e25015265717569726573207369676e6564206c6561646572206f726967696e206f722074686520726f6f742028746f20646563726561736520746865206c6561646572207374616b65292e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e38696e6372656173655f7374616b65080124776f726b65725f696428012c576f726b657249643c543e00014c7374616b655f62616c616e63655f64656c746118013042616c616e63654f663c543e0008280501496e637265617365732074686520726567756c617220776f726b65722f6c656164207374616b652c2064656d616e6473206120776f726b6572206f726967696e2e6d014c6f636b7320746f6b656e732066726f6d2074686520776f726b6572207374616b696e675f6163636f756e745f696420657175616c20746f206e6577207374616b652e204e6f206c696d697473206f6e20746865207374616b652e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e5077697468647261775f6170706c69636174696f6e0401386170706c69636174696f6e5f69642801344170706c69636174696f6e4964000924010157697468647261772074686520776f726b6572206170706c69636174696f6e2e2043616e20626520646f6e652062792074686520776f726b6572206f6e6c792e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e3863616e63656c5f6f70656e696e670401286f70656e696e675f69642801244f70656e696e674964000a28dc43616e63656c20616e206f70656e696e6720666f722074686520726567756c617220776f726b65722f6c65616420706f736974696f6e2e550152657175697265207369676e6564206c6561646572206f726967696e206f722074686520726f6f742028746f2063616e63656c206f70656e696e6720666f7220746865206c656164657220706f736974696f6e292e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e287365745f6275646765740401286e65775f62756467657418013042616c616e63654f663c543e000b28a0536574732061206e65772062756467657420666f722074686520776f726b696e672067726f75702e54526571756972657320726f6f74206f726967696e2e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e547570646174655f7265776172645f6163636f756e74080124776f726b65725f696428012c576f726b657249643c543e0001546e65775f7265776172645f6163636f756e745f6964000130543a3a4163636f756e744964000c2469015570646174652074686520726577617264206163636f756e74206173736f6369617465642077697468206120736574207265776172642072656c6174696f6e7368697020666f72207468652061637469766520776f726b65722e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e507570646174655f7265776172645f616d6f756e74080124776f726b65725f696428012c576f726b657249643c543e0001407265776172645f7065725f626c6f636b450101504f7074696f6e3c42616c616e63654f663c543e3e000d28c855706461746520746865207265776172642070657220626c6f636b20666f72207468652061637469766520776f726b65722e310152657175697265207369676e6564206c6561646572206f726967696e206f722074686520726f6f742028746f20757064617465206c656164657227732072657761726420616d6f756e74292e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e3c7365745f7374617475735f7465787404012c7374617475735f746578743101013c4f7074696f6e3c5665633c75383e3e000e30b4536574732061206e657720737461747573207465787420666f722074686520776f726b696e672067726f75702e54526571756972657320726f6f74206f726967696e2e002823203c7765696768743e002423232057656967687438604f20285329602077686572653a4d012d20605360206973207468652073697a65206f662074686520636f6e74656e7473206f6620607374617475735f746578746020696e206b696c6f6279746573207768656e206974206973206e6f74206e6f6e6500142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e447370656e645f66726f6d5f6275646765740c01286163636f756e745f6964000130543a3a4163636f756e744964000118616d6f756e7418013042616c616e63654f663c543e000124726174696f6e616c653101013c4f7074696f6e3c5665633c75383e3e000f28a85472616e73666572732073706563696669656420616d6f756e7420746f20616e79206163636f756e742e5c5265717569726573206c6561646572206f726967696e2e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e6466756e645f776f726b696e675f67726f75705f6275646765740c01246d656d6265725f696428012c4d656d62657249643c543e000118616d6f756e7418013042616c616e63654f663c543e000124726174696f6e616c6530011c5665633c75383e0010209846756e6420776f726b696e672067726f7570206275646765742062792061206d656d6265722e203c7765696768743e0024232320576569676874c4604f202831296020446f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d6574657273142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e2c6c6561645f72656d61726b04010c6d736730011c5665633c75383e0011284c4c6561642072656d61726b206d657373616765002823203c7765696768743e002423232057656967687438604f20284d29602077686572653a9c2d20604d60206973207468652073697a65206f6620606d73676020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e34776f726b65725f72656d61726b080124776f726b65725f696428012c576f726b657249643c543e00010c6d736730011c5665633c75383e00122854576f726b65722072656d61726b206d657373616765002823203c7765696768743e002423232057656967687438604f20284d29602077686572653a9c2d20604d60206973207468652073697a65206f6620606d73676020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e0c4c446973706174636861626c652063616c6c732e005501456163682076617269616e74206f66207468697320656e756d206d61707320746f206120646973706174636861626c652066756e6374696f6e2066726f6d20746865206173736f636961746564206d6f64756c652e7906085070616c6c65745f776f726b696e675f67726f75701043616c6c08045400044900014c2c6164645f6f70656e696e6710012c6465736372697074696f6e30011c5665633c75383e0001306f70656e696e675f747970658103012c4f70656e696e67547970650001307374616b655f706f6c696379610301a45374616b65506f6c6963793c543a3a426c6f636b4e756d6265722c2042616c616e63654f663c543e3e0001407265776172645f7065725f626c6f636b450101504f7074696f6e3c42616c616e63654f663c543e3e00002cc44164642061206a6f62206f70656e696e6720666f72206120726567756c617220776f726b65722f6c65616420726f6c652e490152657175697265207369676e6564206c6561646572206f726967696e206f722074686520726f6f742028746f20616464206f70656e696e6720666f7220746865206c656164657220706f736974696f6e292e002823203c7765696768743e002423232057656967687438604f20284429602077686572653abc2d20604460206973207468652073697a65206f6620606465736372697074696f6e6020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e406170706c795f6f6e5f6f70656e696e67040104708503016c4170706c794f6e4f70656e696e67506172616d65746572733c543e000128684170706c79206f6e206120776f726b6572206f70656e696e672e002823203c7765696768743e002423232057656967687438604f20284429602077686572653ac42d20604460206973207468652073697a65206f662060702e6465736372697074696f6e6020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e3066696c6c5f6f70656e696e670801286f70656e696e675f69642801244f70656e696e6749640001687375636365737366756c5f6170706c69636174696f6e5f6964736901015c42547265655365743c4170706c69636174696f6e49643e000228ac46696c6c206f70656e696e6720666f722074686520726567756c61722f6c65616420706f736974696f6e2e4d0152657175697265207369676e6564206c6561646572206f726967696e206f722074686520726f6f742028746f2066696c6c206f70656e696e6720666f7220746865206c656164657220706f736974696f6e292e2823203c7765696768743e002423232057656967687438604f20284129602077686572653acc2d2060416020697320746865206c656e677468206f6620607375636365737366756c5f6170706c69636174696f6e5f69647360142d2044423a242020202d204f2841292c23203c2f7765696768743e4c7570646174655f726f6c655f6163636f756e74080124776f726b65725f696428012c576f726b657249643c543e00014c6e65775f726f6c655f6163636f756e745f6964000130543a3a4163636f756e744964000324150155706461746520746865206173736f63696174656420726f6c65206163636f756e74206f66207468652061637469766520726567756c617220776f726b65722f6c6561642e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e286c656176655f726f6c65080124776f726b65725f696428012c576f726b657249643c543e000124726174696f6e616c653101013c4f7074696f6e3c5665633c75383e3e000424904c656176652074686520726f6c65206279207468652061637469766520776f726b65722e2823203c7765696768743e002423232057656967687438604f20285229602077686572653ab42d20605260206973207468652073697a65206f662060726174696f6e616c656020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e387465726d696e6174655f726f6c650c0124776f726b65725f696428012c576f726b657249643c543e00011c70656e616c7479450101504f7074696f6e3c42616c616e63654f663c543e3e000124726174696f6e616c653101013c4f7074696f6e3c5665633c75383e3e000528a05465726d696e617465207468652061637469766520776f726b657220627920746865206c6561642e25015265717569726573207369676e6564206c6561646572206f726967696e206f722074686520726f6f742028746f207465726d696e61746520746865206c656164657220726f6c65292e2823203c7765696768743e002423232057656967687438604f20285029602077686572653ad82d20605060206973207468652073697a65206070656e616c74792e736c617368696e675f746578746020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e2c736c6173685f7374616b650c0124776f726b65725f696428012c576f726b657249643c543e00011c70656e616c747918013042616c616e63654f663c543e000124726174696f6e616c653101013c4f7074696f6e3c5665633c75383e3e00062c7d01536c61736865732074686520726567756c617220776f726b6572207374616b652c2064656d616e64732061206c6561646572206f726967696e2e204e6f206c696d6974732c206e6f20616374696f6e73206f6e207a65726f207374616b652e3d01496620736c617368696e672062616c616e63652067726561746572207468616e20746865206578697374696e67207374616b65202d207374616b6520697320736c617368656420746f207a65726f2e19015265717569726573207369676e6564206c6561646572206f726967696e206f722074686520726f6f742028746f20736c61736820746865206c6561646572207374616b65292e2823203c7765696768743e002423232057656967687438604f20285029602077686572653ae82d20605060206973207468652073697a65206f66206070656e616c6974792e736c617368696e675f746578746020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e3864656372656173655f7374616b65080124776f726b65725f696428012c576f726b657249643c543e00014c7374616b655f62616c616e63655f64656c746118013042616c616e63654f663c543e00073021014465637265617365732074686520726567756c617220776f726b65722f6c656164207374616b6520616e642072657475726e73207468652072656d61696e64657220746f207468653901776f726b6572207374616b696e675f6163636f756e745f69642e2043616e2062652064656372656173656420746f207a65726f2c206e6f20616374696f6e73206f6e207a65726f207374616b652e944163636570747320746865207374616b6520616d6f756e7420746f2064656372656173652e25015265717569726573207369676e6564206c6561646572206f726967696e206f722074686520726f6f742028746f20646563726561736520746865206c6561646572207374616b65292e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e38696e6372656173655f7374616b65080124776f726b65725f696428012c576f726b657249643c543e00014c7374616b655f62616c616e63655f64656c746118013042616c616e63654f663c543e0008280501496e637265617365732074686520726567756c617220776f726b65722f6c656164207374616b652c2064656d616e6473206120776f726b6572206f726967696e2e6d014c6f636b7320746f6b656e732066726f6d2074686520776f726b6572207374616b696e675f6163636f756e745f696420657175616c20746f206e6577207374616b652e204e6f206c696d697473206f6e20746865207374616b652e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e5077697468647261775f6170706c69636174696f6e0401386170706c69636174696f6e5f69642801344170706c69636174696f6e4964000924010157697468647261772074686520776f726b6572206170706c69636174696f6e2e2043616e20626520646f6e652062792074686520776f726b6572206f6e6c792e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e3863616e63656c5f6f70656e696e670401286f70656e696e675f69642801244f70656e696e674964000a28dc43616e63656c20616e206f70656e696e6720666f722074686520726567756c617220776f726b65722f6c65616420706f736974696f6e2e550152657175697265207369676e6564206c6561646572206f726967696e206f722074686520726f6f742028746f2063616e63656c206f70656e696e6720666f7220746865206c656164657220706f736974696f6e292e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e287365745f6275646765740401286e65775f62756467657418013042616c616e63654f663c543e000b28a0536574732061206e65772062756467657420666f722074686520776f726b696e672067726f75702e54526571756972657320726f6f74206f726967696e2e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e547570646174655f7265776172645f6163636f756e74080124776f726b65725f696428012c576f726b657249643c543e0001546e65775f7265776172645f6163636f756e745f6964000130543a3a4163636f756e744964000c2469015570646174652074686520726577617264206163636f756e74206173736f6369617465642077697468206120736574207265776172642072656c6174696f6e7368697020666f72207468652061637469766520776f726b65722e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e507570646174655f7265776172645f616d6f756e74080124776f726b65725f696428012c576f726b657249643c543e0001407265776172645f7065725f626c6f636b450101504f7074696f6e3c42616c616e63654f663c543e3e000d28c855706461746520746865207265776172642070657220626c6f636b20666f72207468652061637469766520776f726b65722e310152657175697265207369676e6564206c6561646572206f726967696e206f722074686520726f6f742028746f20757064617465206c656164657227732072657761726420616d6f756e74292e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e3c7365745f7374617475735f7465787404012c7374617475735f746578743101013c4f7074696f6e3c5665633c75383e3e000e30b4536574732061206e657720737461747573207465787420666f722074686520776f726b696e672067726f75702e54526571756972657320726f6f74206f726967696e2e002823203c7765696768743e002423232057656967687438604f20285329602077686572653a4d012d20605360206973207468652073697a65206f662074686520636f6e74656e7473206f6620607374617475735f746578746020696e206b696c6f6279746573207768656e206974206973206e6f74206e6f6e6500142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e447370656e645f66726f6d5f6275646765740c01286163636f756e745f6964000130543a3a4163636f756e744964000118616d6f756e7418013042616c616e63654f663c543e000124726174696f6e616c653101013c4f7074696f6e3c5665633c75383e3e000f28a85472616e73666572732073706563696669656420616d6f756e7420746f20616e79206163636f756e742e5c5265717569726573206c6561646572206f726967696e2e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e6466756e645f776f726b696e675f67726f75705f6275646765740c01246d656d6265725f696428012c4d656d62657249643c543e000118616d6f756e7418013042616c616e63654f663c543e000124726174696f6e616c6530011c5665633c75383e0010209846756e6420776f726b696e672067726f7570206275646765742062792061206d656d6265722e203c7765696768743e0024232320576569676874c4604f202831296020446f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d6574657273142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e2c6c6561645f72656d61726b04010c6d736730011c5665633c75383e0011284c4c6561642072656d61726b206d657373616765002823203c7765696768743e002423232057656967687438604f20284d29602077686572653a9c2d20604d60206973207468652073697a65206f6620606d73676020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e34776f726b65725f72656d61726b080124776f726b65725f696428012c576f726b657249643c543e00010c6d736730011c5665633c75383e00122854576f726b65722072656d61726b206d657373616765002823203c7765696768743e002423232057656967687438604f20284d29602077686572653a9c2d20604d60206973207468652073697a65206f6620606d73676020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e0c4c446973706174636861626c652063616c6c732e005501456163682076617269616e74206f66207468697320656e756d206d61707320746f206120646973706174636861626c652066756e6374696f6e2066726f6d20746865206173736f636961746564206d6f64756c652e7d06085070616c6c65745f776f726b696e675f67726f75701043616c6c08045400044900014c2c6164645f6f70656e696e6710012c6465736372697074696f6e30011c5665633c75383e0001306f70656e696e675f747970658103012c4f70656e696e67547970650001307374616b655f706f6c696379610301a45374616b65506f6c6963793c543a3a426c6f636b4e756d6265722c2042616c616e63654f663c543e3e0001407265776172645f7065725f626c6f636b450101504f7074696f6e3c42616c616e63654f663c543e3e00002cc44164642061206a6f62206f70656e696e6720666f72206120726567756c617220776f726b65722f6c65616420726f6c652e490152657175697265207369676e6564206c6561646572206f726967696e206f722074686520726f6f742028746f20616464206f70656e696e6720666f7220746865206c656164657220706f736974696f6e292e002823203c7765696768743e002423232057656967687438604f20284429602077686572653abc2d20604460206973207468652073697a65206f6620606465736372697074696f6e6020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e406170706c795f6f6e5f6f70656e696e67040104708503016c4170706c794f6e4f70656e696e67506172616d65746572733c543e000128684170706c79206f6e206120776f726b6572206f70656e696e672e002823203c7765696768743e002423232057656967687438604f20284429602077686572653ac42d20604460206973207468652073697a65206f662060702e6465736372697074696f6e6020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e3066696c6c5f6f70656e696e670801286f70656e696e675f69642801244f70656e696e6749640001687375636365737366756c5f6170706c69636174696f6e5f6964736901015c42547265655365743c4170706c69636174696f6e49643e000228ac46696c6c206f70656e696e6720666f722074686520726567756c61722f6c65616420706f736974696f6e2e4d0152657175697265207369676e6564206c6561646572206f726967696e206f722074686520726f6f742028746f2066696c6c206f70656e696e6720666f7220746865206c656164657220706f736974696f6e292e2823203c7765696768743e002423232057656967687438604f20284129602077686572653acc2d2060416020697320746865206c656e677468206f6620607375636365737366756c5f6170706c69636174696f6e5f69647360142d2044423a242020202d204f2841292c23203c2f7765696768743e4c7570646174655f726f6c655f6163636f756e74080124776f726b65725f696428012c576f726b657249643c543e00014c6e65775f726f6c655f6163636f756e745f6964000130543a3a4163636f756e744964000324150155706461746520746865206173736f63696174656420726f6c65206163636f756e74206f66207468652061637469766520726567756c617220776f726b65722f6c6561642e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e286c656176655f726f6c65080124776f726b65725f696428012c576f726b657249643c543e000124726174696f6e616c653101013c4f7074696f6e3c5665633c75383e3e000424904c656176652074686520726f6c65206279207468652061637469766520776f726b65722e2823203c7765696768743e002423232057656967687438604f20285229602077686572653ab42d20605260206973207468652073697a65206f662060726174696f6e616c656020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e387465726d696e6174655f726f6c650c0124776f726b65725f696428012c576f726b657249643c543e00011c70656e616c7479450101504f7074696f6e3c42616c616e63654f663c543e3e000124726174696f6e616c653101013c4f7074696f6e3c5665633c75383e3e000528a05465726d696e617465207468652061637469766520776f726b657220627920746865206c6561642e25015265717569726573207369676e6564206c6561646572206f726967696e206f722074686520726f6f742028746f207465726d696e61746520746865206c656164657220726f6c65292e2823203c7765696768743e002423232057656967687438604f20285029602077686572653ad82d20605060206973207468652073697a65206070656e616c74792e736c617368696e675f746578746020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e2c736c6173685f7374616b650c0124776f726b65725f696428012c576f726b657249643c543e00011c70656e616c747918013042616c616e63654f663c543e000124726174696f6e616c653101013c4f7074696f6e3c5665633c75383e3e00062c7d01536c61736865732074686520726567756c617220776f726b6572207374616b652c2064656d616e64732061206c6561646572206f726967696e2e204e6f206c696d6974732c206e6f20616374696f6e73206f6e207a65726f207374616b652e3d01496620736c617368696e672062616c616e63652067726561746572207468616e20746865206578697374696e67207374616b65202d207374616b6520697320736c617368656420746f207a65726f2e19015265717569726573207369676e6564206c6561646572206f726967696e206f722074686520726f6f742028746f20736c61736820746865206c6561646572207374616b65292e2823203c7765696768743e002423232057656967687438604f20285029602077686572653ae82d20605060206973207468652073697a65206f66206070656e616c6974792e736c617368696e675f746578746020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e3864656372656173655f7374616b65080124776f726b65725f696428012c576f726b657249643c543e00014c7374616b655f62616c616e63655f64656c746118013042616c616e63654f663c543e00073021014465637265617365732074686520726567756c617220776f726b65722f6c656164207374616b6520616e642072657475726e73207468652072656d61696e64657220746f207468653901776f726b6572207374616b696e675f6163636f756e745f69642e2043616e2062652064656372656173656420746f207a65726f2c206e6f20616374696f6e73206f6e207a65726f207374616b652e944163636570747320746865207374616b6520616d6f756e7420746f2064656372656173652e25015265717569726573207369676e6564206c6561646572206f726967696e206f722074686520726f6f742028746f20646563726561736520746865206c6561646572207374616b65292e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e38696e6372656173655f7374616b65080124776f726b65725f696428012c576f726b657249643c543e00014c7374616b655f62616c616e63655f64656c746118013042616c616e63654f663c543e0008280501496e637265617365732074686520726567756c617220776f726b65722f6c656164207374616b652c2064656d616e6473206120776f726b6572206f726967696e2e6d014c6f636b7320746f6b656e732066726f6d2074686520776f726b6572207374616b696e675f6163636f756e745f696420657175616c20746f206e6577207374616b652e204e6f206c696d697473206f6e20746865207374616b652e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e5077697468647261775f6170706c69636174696f6e0401386170706c69636174696f6e5f69642801344170706c69636174696f6e4964000924010157697468647261772074686520776f726b6572206170706c69636174696f6e2e2043616e20626520646f6e652062792074686520776f726b6572206f6e6c792e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e3863616e63656c5f6f70656e696e670401286f70656e696e675f69642801244f70656e696e674964000a28dc43616e63656c20616e206f70656e696e6720666f722074686520726567756c617220776f726b65722f6c65616420706f736974696f6e2e550152657175697265207369676e6564206c6561646572206f726967696e206f722074686520726f6f742028746f2063616e63656c206f70656e696e6720666f7220746865206c656164657220706f736974696f6e292e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e287365745f6275646765740401286e65775f62756467657418013042616c616e63654f663c543e000b28a0536574732061206e65772062756467657420666f722074686520776f726b696e672067726f75702e54526571756972657320726f6f74206f726967696e2e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e547570646174655f7265776172645f6163636f756e74080124776f726b65725f696428012c576f726b657249643c543e0001546e65775f7265776172645f6163636f756e745f6964000130543a3a4163636f756e744964000c2469015570646174652074686520726577617264206163636f756e74206173736f6369617465642077697468206120736574207265776172642072656c6174696f6e7368697020666f72207468652061637469766520776f726b65722e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e507570646174655f7265776172645f616d6f756e74080124776f726b65725f696428012c576f726b657249643c543e0001407265776172645f7065725f626c6f636b450101504f7074696f6e3c42616c616e63654f663c543e3e000d28c855706461746520746865207265776172642070657220626c6f636b20666f72207468652061637469766520776f726b65722e310152657175697265207369676e6564206c6561646572206f726967696e206f722074686520726f6f742028746f20757064617465206c656164657227732072657761726420616d6f756e74292e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e3c7365745f7374617475735f7465787404012c7374617475735f746578743101013c4f7074696f6e3c5665633c75383e3e000e30b4536574732061206e657720737461747573207465787420666f722074686520776f726b696e672067726f75702e54526571756972657320726f6f74206f726967696e2e002823203c7765696768743e002423232057656967687438604f20285329602077686572653a4d012d20605360206973207468652073697a65206f662074686520636f6e74656e7473206f6620607374617475735f746578746020696e206b696c6f6279746573207768656e206974206973206e6f74206e6f6e6500142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e447370656e645f66726f6d5f6275646765740c01286163636f756e745f6964000130543a3a4163636f756e744964000118616d6f756e7418013042616c616e63654f663c543e000124726174696f6e616c653101013c4f7074696f6e3c5665633c75383e3e000f28a85472616e73666572732073706563696669656420616d6f756e7420746f20616e79206163636f756e742e5c5265717569726573206c6561646572206f726967696e2e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e6466756e645f776f726b696e675f67726f75705f6275646765740c01246d656d6265725f696428012c4d656d62657249643c543e000118616d6f756e7418013042616c616e63654f663c543e000124726174696f6e616c6530011c5665633c75383e0010209846756e6420776f726b696e672067726f7570206275646765742062792061206d656d6265722e203c7765696768743e0024232320576569676874c4604f202831296020446f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d6574657273142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e2c6c6561645f72656d61726b04010c6d736730011c5665633c75383e0011284c4c6561642072656d61726b206d657373616765002823203c7765696768743e002423232057656967687438604f20284d29602077686572653a9c2d20604d60206973207468652073697a65206f6620606d73676020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e34776f726b65725f72656d61726b080124776f726b65725f696428012c576f726b657249643c543e00010c6d736730011c5665633c75383e00122854576f726b65722072656d61726b206d657373616765002823203c7765696768743e002423232057656967687438604f20284d29602077686572653a9c2d20604d60206973207468652073697a65206f6620606d73676020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e0c4c446973706174636861626c652063616c6c732e005501456163682076617269616e74206f66207468697320656e756d206d61707320746f206120646973706174636861626c652066756e6374696f6e2066726f6d20746865206173736f636961746564206d6f64756c652e8106085070616c6c65745f776f726b696e675f67726f75701043616c6c08045400044900014c2c6164645f6f70656e696e6710012c6465736372697074696f6e30011c5665633c75383e0001306f70656e696e675f747970658103012c4f70656e696e67547970650001307374616b655f706f6c696379610301a45374616b65506f6c6963793c543a3a426c6f636b4e756d6265722c2042616c616e63654f663c543e3e0001407265776172645f7065725f626c6f636b450101504f7074696f6e3c42616c616e63654f663c543e3e00002cc44164642061206a6f62206f70656e696e6720666f72206120726567756c617220776f726b65722f6c65616420726f6c652e490152657175697265207369676e6564206c6561646572206f726967696e206f722074686520726f6f742028746f20616464206f70656e696e6720666f7220746865206c656164657220706f736974696f6e292e002823203c7765696768743e002423232057656967687438604f20284429602077686572653abc2d20604460206973207468652073697a65206f6620606465736372697074696f6e6020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e406170706c795f6f6e5f6f70656e696e67040104708503016c4170706c794f6e4f70656e696e67506172616d65746572733c543e000128684170706c79206f6e206120776f726b6572206f70656e696e672e002823203c7765696768743e002423232057656967687438604f20284429602077686572653ac42d20604460206973207468652073697a65206f662060702e6465736372697074696f6e6020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e3066696c6c5f6f70656e696e670801286f70656e696e675f69642801244f70656e696e6749640001687375636365737366756c5f6170706c69636174696f6e5f6964736901015c42547265655365743c4170706c69636174696f6e49643e000228ac46696c6c206f70656e696e6720666f722074686520726567756c61722f6c65616420706f736974696f6e2e4d0152657175697265207369676e6564206c6561646572206f726967696e206f722074686520726f6f742028746f2066696c6c206f70656e696e6720666f7220746865206c656164657220706f736974696f6e292e2823203c7765696768743e002423232057656967687438604f20284129602077686572653acc2d2060416020697320746865206c656e677468206f6620607375636365737366756c5f6170706c69636174696f6e5f69647360142d2044423a242020202d204f2841292c23203c2f7765696768743e4c7570646174655f726f6c655f6163636f756e74080124776f726b65725f696428012c576f726b657249643c543e00014c6e65775f726f6c655f6163636f756e745f6964000130543a3a4163636f756e744964000324150155706461746520746865206173736f63696174656420726f6c65206163636f756e74206f66207468652061637469766520726567756c617220776f726b65722f6c6561642e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e286c656176655f726f6c65080124776f726b65725f696428012c576f726b657249643c543e000124726174696f6e616c653101013c4f7074696f6e3c5665633c75383e3e000424904c656176652074686520726f6c65206279207468652061637469766520776f726b65722e2823203c7765696768743e002423232057656967687438604f20285229602077686572653ab42d20605260206973207468652073697a65206f662060726174696f6e616c656020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e387465726d696e6174655f726f6c650c0124776f726b65725f696428012c576f726b657249643c543e00011c70656e616c7479450101504f7074696f6e3c42616c616e63654f663c543e3e000124726174696f6e616c653101013c4f7074696f6e3c5665633c75383e3e000528a05465726d696e617465207468652061637469766520776f726b657220627920746865206c6561642e25015265717569726573207369676e6564206c6561646572206f726967696e206f722074686520726f6f742028746f207465726d696e61746520746865206c656164657220726f6c65292e2823203c7765696768743e002423232057656967687438604f20285029602077686572653ad82d20605060206973207468652073697a65206070656e616c74792e736c617368696e675f746578746020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e2c736c6173685f7374616b650c0124776f726b65725f696428012c576f726b657249643c543e00011c70656e616c747918013042616c616e63654f663c543e000124726174696f6e616c653101013c4f7074696f6e3c5665633c75383e3e00062c7d01536c61736865732074686520726567756c617220776f726b6572207374616b652c2064656d616e64732061206c6561646572206f726967696e2e204e6f206c696d6974732c206e6f20616374696f6e73206f6e207a65726f207374616b652e3d01496620736c617368696e672062616c616e63652067726561746572207468616e20746865206578697374696e67207374616b65202d207374616b6520697320736c617368656420746f207a65726f2e19015265717569726573207369676e6564206c6561646572206f726967696e206f722074686520726f6f742028746f20736c61736820746865206c6561646572207374616b65292e2823203c7765696768743e002423232057656967687438604f20285029602077686572653ae82d20605060206973207468652073697a65206f66206070656e616c6974792e736c617368696e675f746578746020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e3864656372656173655f7374616b65080124776f726b65725f696428012c576f726b657249643c543e00014c7374616b655f62616c616e63655f64656c746118013042616c616e63654f663c543e00073021014465637265617365732074686520726567756c617220776f726b65722f6c656164207374616b6520616e642072657475726e73207468652072656d61696e64657220746f207468653901776f726b6572207374616b696e675f6163636f756e745f69642e2043616e2062652064656372656173656420746f207a65726f2c206e6f20616374696f6e73206f6e207a65726f207374616b652e944163636570747320746865207374616b6520616d6f756e7420746f2064656372656173652e25015265717569726573207369676e6564206c6561646572206f726967696e206f722074686520726f6f742028746f20646563726561736520746865206c6561646572207374616b65292e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e38696e6372656173655f7374616b65080124776f726b65725f696428012c576f726b657249643c543e00014c7374616b655f62616c616e63655f64656c746118013042616c616e63654f663c543e0008280501496e637265617365732074686520726567756c617220776f726b65722f6c656164207374616b652c2064656d616e6473206120776f726b6572206f726967696e2e6d014c6f636b7320746f6b656e732066726f6d2074686520776f726b6572207374616b696e675f6163636f756e745f696420657175616c20746f206e6577207374616b652e204e6f206c696d697473206f6e20746865207374616b652e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e5077697468647261775f6170706c69636174696f6e0401386170706c69636174696f6e5f69642801344170706c69636174696f6e4964000924010157697468647261772074686520776f726b6572206170706c69636174696f6e2e2043616e20626520646f6e652062792074686520776f726b6572206f6e6c792e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e3863616e63656c5f6f70656e696e670401286f70656e696e675f69642801244f70656e696e674964000a28dc43616e63656c20616e206f70656e696e6720666f722074686520726567756c617220776f726b65722f6c65616420706f736974696f6e2e550152657175697265207369676e6564206c6561646572206f726967696e206f722074686520726f6f742028746f2063616e63656c206f70656e696e6720666f7220746865206c656164657220706f736974696f6e292e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e287365745f6275646765740401286e65775f62756467657418013042616c616e63654f663c543e000b28a0536574732061206e65772062756467657420666f722074686520776f726b696e672067726f75702e54526571756972657320726f6f74206f726967696e2e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e547570646174655f7265776172645f6163636f756e74080124776f726b65725f696428012c576f726b657249643c543e0001546e65775f7265776172645f6163636f756e745f6964000130543a3a4163636f756e744964000c2469015570646174652074686520726577617264206163636f756e74206173736f6369617465642077697468206120736574207265776172642072656c6174696f6e7368697020666f72207468652061637469766520776f726b65722e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e507570646174655f7265776172645f616d6f756e74080124776f726b65725f696428012c576f726b657249643c543e0001407265776172645f7065725f626c6f636b450101504f7074696f6e3c42616c616e63654f663c543e3e000d28c855706461746520746865207265776172642070657220626c6f636b20666f72207468652061637469766520776f726b65722e310152657175697265207369676e6564206c6561646572206f726967696e206f722074686520726f6f742028746f20757064617465206c656164657227732072657761726420616d6f756e74292e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e3c7365745f7374617475735f7465787404012c7374617475735f746578743101013c4f7074696f6e3c5665633c75383e3e000e30b4536574732061206e657720737461747573207465787420666f722074686520776f726b696e672067726f75702e54526571756972657320726f6f74206f726967696e2e002823203c7765696768743e002423232057656967687438604f20285329602077686572653a4d012d20605360206973207468652073697a65206f662074686520636f6e74656e7473206f6620607374617475735f746578746020696e206b696c6f6279746573207768656e206974206973206e6f74206e6f6e6500142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e447370656e645f66726f6d5f6275646765740c01286163636f756e745f6964000130543a3a4163636f756e744964000118616d6f756e7418013042616c616e63654f663c543e000124726174696f6e616c653101013c4f7074696f6e3c5665633c75383e3e000f28a85472616e73666572732073706563696669656420616d6f756e7420746f20616e79206163636f756e742e5c5265717569726573206c6561646572206f726967696e2e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e6466756e645f776f726b696e675f67726f75705f6275646765740c01246d656d6265725f696428012c4d656d62657249643c543e000118616d6f756e7418013042616c616e63654f663c543e000124726174696f6e616c6530011c5665633c75383e0010209846756e6420776f726b696e672067726f7570206275646765742062792061206d656d6265722e203c7765696768743e0024232320576569676874c4604f202831296020446f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d6574657273142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e2c6c6561645f72656d61726b04010c6d736730011c5665633c75383e0011284c4c6561642072656d61726b206d657373616765002823203c7765696768743e002423232057656967687438604f20284d29602077686572653a9c2d20604d60206973207468652073697a65206f6620606d73676020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e34776f726b65725f72656d61726b080124776f726b65725f696428012c576f726b657249643c543e00010c6d736730011c5665633c75383e00122854576f726b65722072656d61726b206d657373616765002823203c7765696768743e002423232057656967687438604f20284d29602077686572653a9c2d20604d60206973207468652073697a65206f6620606d73676020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e0c4c446973706174636861626c652063616c6c732e005501456163682076617269616e74206f66207468697320656e756d206d61707320746f206120646973706174636861626c652066756e6374696f6e2066726f6d20746865206173736f636961746564206d6f64756c652e8506085070616c6c65745f776f726b696e675f67726f75701043616c6c08045400044900014c2c6164645f6f70656e696e6710012c6465736372697074696f6e30011c5665633c75383e0001306f70656e696e675f747970658103012c4f70656e696e67547970650001307374616b655f706f6c696379610301a45374616b65506f6c6963793c543a3a426c6f636b4e756d6265722c2042616c616e63654f663c543e3e0001407265776172645f7065725f626c6f636b450101504f7074696f6e3c42616c616e63654f663c543e3e00002cc44164642061206a6f62206f70656e696e6720666f72206120726567756c617220776f726b65722f6c65616420726f6c652e490152657175697265207369676e6564206c6561646572206f726967696e206f722074686520726f6f742028746f20616464206f70656e696e6720666f7220746865206c656164657220706f736974696f6e292e002823203c7765696768743e002423232057656967687438604f20284429602077686572653abc2d20604460206973207468652073697a65206f6620606465736372697074696f6e6020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e406170706c795f6f6e5f6f70656e696e67040104708503016c4170706c794f6e4f70656e696e67506172616d65746572733c543e000128684170706c79206f6e206120776f726b6572206f70656e696e672e002823203c7765696768743e002423232057656967687438604f20284429602077686572653ac42d20604460206973207468652073697a65206f662060702e6465736372697074696f6e6020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e3066696c6c5f6f70656e696e670801286f70656e696e675f69642801244f70656e696e6749640001687375636365737366756c5f6170706c69636174696f6e5f6964736901015c42547265655365743c4170706c69636174696f6e49643e000228ac46696c6c206f70656e696e6720666f722074686520726567756c61722f6c65616420706f736974696f6e2e4d0152657175697265207369676e6564206c6561646572206f726967696e206f722074686520726f6f742028746f2066696c6c206f70656e696e6720666f7220746865206c656164657220706f736974696f6e292e2823203c7765696768743e002423232057656967687438604f20284129602077686572653acc2d2060416020697320746865206c656e677468206f6620607375636365737366756c5f6170706c69636174696f6e5f69647360142d2044423a242020202d204f2841292c23203c2f7765696768743e4c7570646174655f726f6c655f6163636f756e74080124776f726b65725f696428012c576f726b657249643c543e00014c6e65775f726f6c655f6163636f756e745f6964000130543a3a4163636f756e744964000324150155706461746520746865206173736f63696174656420726f6c65206163636f756e74206f66207468652061637469766520726567756c617220776f726b65722f6c6561642e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e286c656176655f726f6c65080124776f726b65725f696428012c576f726b657249643c543e000124726174696f6e616c653101013c4f7074696f6e3c5665633c75383e3e000424904c656176652074686520726f6c65206279207468652061637469766520776f726b65722e2823203c7765696768743e002423232057656967687438604f20285229602077686572653ab42d20605260206973207468652073697a65206f662060726174696f6e616c656020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e387465726d696e6174655f726f6c650c0124776f726b65725f696428012c576f726b657249643c543e00011c70656e616c7479450101504f7074696f6e3c42616c616e63654f663c543e3e000124726174696f6e616c653101013c4f7074696f6e3c5665633c75383e3e000528a05465726d696e617465207468652061637469766520776f726b657220627920746865206c6561642e25015265717569726573207369676e6564206c6561646572206f726967696e206f722074686520726f6f742028746f207465726d696e61746520746865206c656164657220726f6c65292e2823203c7765696768743e002423232057656967687438604f20285029602077686572653ad82d20605060206973207468652073697a65206070656e616c74792e736c617368696e675f746578746020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e2c736c6173685f7374616b650c0124776f726b65725f696428012c576f726b657249643c543e00011c70656e616c747918013042616c616e63654f663c543e000124726174696f6e616c653101013c4f7074696f6e3c5665633c75383e3e00062c7d01536c61736865732074686520726567756c617220776f726b6572207374616b652c2064656d616e64732061206c6561646572206f726967696e2e204e6f206c696d6974732c206e6f20616374696f6e73206f6e207a65726f207374616b652e3d01496620736c617368696e672062616c616e63652067726561746572207468616e20746865206578697374696e67207374616b65202d207374616b6520697320736c617368656420746f207a65726f2e19015265717569726573207369676e6564206c6561646572206f726967696e206f722074686520726f6f742028746f20736c61736820746865206c6561646572207374616b65292e2823203c7765696768743e002423232057656967687438604f20285029602077686572653ae82d20605060206973207468652073697a65206f66206070656e616c6974792e736c617368696e675f746578746020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e3864656372656173655f7374616b65080124776f726b65725f696428012c576f726b657249643c543e00014c7374616b655f62616c616e63655f64656c746118013042616c616e63654f663c543e00073021014465637265617365732074686520726567756c617220776f726b65722f6c656164207374616b6520616e642072657475726e73207468652072656d61696e64657220746f207468653901776f726b6572207374616b696e675f6163636f756e745f69642e2043616e2062652064656372656173656420746f207a65726f2c206e6f20616374696f6e73206f6e207a65726f207374616b652e944163636570747320746865207374616b6520616d6f756e7420746f2064656372656173652e25015265717569726573207369676e6564206c6561646572206f726967696e206f722074686520726f6f742028746f20646563726561736520746865206c6561646572207374616b65292e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e38696e6372656173655f7374616b65080124776f726b65725f696428012c576f726b657249643c543e00014c7374616b655f62616c616e63655f64656c746118013042616c616e63654f663c543e0008280501496e637265617365732074686520726567756c617220776f726b65722f6c656164207374616b652c2064656d616e6473206120776f726b6572206f726967696e2e6d014c6f636b7320746f6b656e732066726f6d2074686520776f726b6572207374616b696e675f6163636f756e745f696420657175616c20746f206e6577207374616b652e204e6f206c696d697473206f6e20746865207374616b652e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e5077697468647261775f6170706c69636174696f6e0401386170706c69636174696f6e5f69642801344170706c69636174696f6e4964000924010157697468647261772074686520776f726b6572206170706c69636174696f6e2e2043616e20626520646f6e652062792074686520776f726b6572206f6e6c792e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e3863616e63656c5f6f70656e696e670401286f70656e696e675f69642801244f70656e696e674964000a28dc43616e63656c20616e206f70656e696e6720666f722074686520726567756c617220776f726b65722f6c65616420706f736974696f6e2e550152657175697265207369676e6564206c6561646572206f726967696e206f722074686520726f6f742028746f2063616e63656c206f70656e696e6720666f7220746865206c656164657220706f736974696f6e292e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e287365745f6275646765740401286e65775f62756467657418013042616c616e63654f663c543e000b28a0536574732061206e65772062756467657420666f722074686520776f726b696e672067726f75702e54526571756972657320726f6f74206f726967696e2e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e547570646174655f7265776172645f6163636f756e74080124776f726b65725f696428012c576f726b657249643c543e0001546e65775f7265776172645f6163636f756e745f6964000130543a3a4163636f756e744964000c2469015570646174652074686520726577617264206163636f756e74206173736f6369617465642077697468206120736574207265776172642072656c6174696f6e7368697020666f72207468652061637469766520776f726b65722e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e507570646174655f7265776172645f616d6f756e74080124776f726b65725f696428012c576f726b657249643c543e0001407265776172645f7065725f626c6f636b450101504f7074696f6e3c42616c616e63654f663c543e3e000d28c855706461746520746865207265776172642070657220626c6f636b20666f72207468652061637469766520776f726b65722e310152657175697265207369676e6564206c6561646572206f726967696e206f722074686520726f6f742028746f20757064617465206c656164657227732072657761726420616d6f756e74292e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e3c7365745f7374617475735f7465787404012c7374617475735f746578743101013c4f7074696f6e3c5665633c75383e3e000e30b4536574732061206e657720737461747573207465787420666f722074686520776f726b696e672067726f75702e54526571756972657320726f6f74206f726967696e2e002823203c7765696768743e002423232057656967687438604f20285329602077686572653a4d012d20605360206973207468652073697a65206f662074686520636f6e74656e7473206f6620607374617475735f746578746020696e206b696c6f6279746573207768656e206974206973206e6f74206e6f6e6500142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e447370656e645f66726f6d5f6275646765740c01286163636f756e745f6964000130543a3a4163636f756e744964000118616d6f756e7418013042616c616e63654f663c543e000124726174696f6e616c653101013c4f7074696f6e3c5665633c75383e3e000f28a85472616e73666572732073706563696669656420616d6f756e7420746f20616e79206163636f756e742e5c5265717569726573206c6561646572206f726967696e2e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e6466756e645f776f726b696e675f67726f75705f6275646765740c01246d656d6265725f696428012c4d656d62657249643c543e000118616d6f756e7418013042616c616e63654f663c543e000124726174696f6e616c6530011c5665633c75383e0010209846756e6420776f726b696e672067726f7570206275646765742062792061206d656d6265722e203c7765696768743e0024232320576569676874c4604f202831296020446f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d6574657273142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e2c6c6561645f72656d61726b04010c6d736730011c5665633c75383e0011284c4c6561642072656d61726b206d657373616765002823203c7765696768743e002423232057656967687438604f20284d29602077686572653a9c2d20604d60206973207468652073697a65206f6620606d73676020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e34776f726b65725f72656d61726b080124776f726b65725f696428012c576f726b657249643c543e00010c6d736730011c5665633c75383e00122854576f726b65722072656d61726b206d657373616765002823203c7765696768743e002423232057656967687438604f20284d29602077686572653a9c2d20604d60206973207468652073697a65206f6620606d73676020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e0c4c446973706174636861626c652063616c6c732e005501456163682076617269616e74206f66207468697320656e756d206d61707320746f206120646973706174636861626c652066756e6374696f6e2066726f6d20746865206173736f636961746564206d6f64756c652e8906085070616c6c65745f776f726b696e675f67726f75701043616c6c08045400044900014c2c6164645f6f70656e696e6710012c6465736372697074696f6e30011c5665633c75383e0001306f70656e696e675f747970658103012c4f70656e696e67547970650001307374616b655f706f6c696379610301a45374616b65506f6c6963793c543a3a426c6f636b4e756d6265722c2042616c616e63654f663c543e3e0001407265776172645f7065725f626c6f636b450101504f7074696f6e3c42616c616e63654f663c543e3e00002cc44164642061206a6f62206f70656e696e6720666f72206120726567756c617220776f726b65722f6c65616420726f6c652e490152657175697265207369676e6564206c6561646572206f726967696e206f722074686520726f6f742028746f20616464206f70656e696e6720666f7220746865206c656164657220706f736974696f6e292e002823203c7765696768743e002423232057656967687438604f20284429602077686572653abc2d20604460206973207468652073697a65206f6620606465736372697074696f6e6020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e406170706c795f6f6e5f6f70656e696e67040104708503016c4170706c794f6e4f70656e696e67506172616d65746572733c543e000128684170706c79206f6e206120776f726b6572206f70656e696e672e002823203c7765696768743e002423232057656967687438604f20284429602077686572653ac42d20604460206973207468652073697a65206f662060702e6465736372697074696f6e6020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e3066696c6c5f6f70656e696e670801286f70656e696e675f69642801244f70656e696e6749640001687375636365737366756c5f6170706c69636174696f6e5f6964736901015c42547265655365743c4170706c69636174696f6e49643e000228ac46696c6c206f70656e696e6720666f722074686520726567756c61722f6c65616420706f736974696f6e2e4d0152657175697265207369676e6564206c6561646572206f726967696e206f722074686520726f6f742028746f2066696c6c206f70656e696e6720666f7220746865206c656164657220706f736974696f6e292e2823203c7765696768743e002423232057656967687438604f20284129602077686572653acc2d2060416020697320746865206c656e677468206f6620607375636365737366756c5f6170706c69636174696f6e5f69647360142d2044423a242020202d204f2841292c23203c2f7765696768743e4c7570646174655f726f6c655f6163636f756e74080124776f726b65725f696428012c576f726b657249643c543e00014c6e65775f726f6c655f6163636f756e745f6964000130543a3a4163636f756e744964000324150155706461746520746865206173736f63696174656420726f6c65206163636f756e74206f66207468652061637469766520726567756c617220776f726b65722f6c6561642e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e286c656176655f726f6c65080124776f726b65725f696428012c576f726b657249643c543e000124726174696f6e616c653101013c4f7074696f6e3c5665633c75383e3e000424904c656176652074686520726f6c65206279207468652061637469766520776f726b65722e2823203c7765696768743e002423232057656967687438604f20285229602077686572653ab42d20605260206973207468652073697a65206f662060726174696f6e616c656020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e387465726d696e6174655f726f6c650c0124776f726b65725f696428012c576f726b657249643c543e00011c70656e616c7479450101504f7074696f6e3c42616c616e63654f663c543e3e000124726174696f6e616c653101013c4f7074696f6e3c5665633c75383e3e000528a05465726d696e617465207468652061637469766520776f726b657220627920746865206c6561642e25015265717569726573207369676e6564206c6561646572206f726967696e206f722074686520726f6f742028746f207465726d696e61746520746865206c656164657220726f6c65292e2823203c7765696768743e002423232057656967687438604f20285029602077686572653ad82d20605060206973207468652073697a65206070656e616c74792e736c617368696e675f746578746020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e2c736c6173685f7374616b650c0124776f726b65725f696428012c576f726b657249643c543e00011c70656e616c747918013042616c616e63654f663c543e000124726174696f6e616c653101013c4f7074696f6e3c5665633c75383e3e00062c7d01536c61736865732074686520726567756c617220776f726b6572207374616b652c2064656d616e64732061206c6561646572206f726967696e2e204e6f206c696d6974732c206e6f20616374696f6e73206f6e207a65726f207374616b652e3d01496620736c617368696e672062616c616e63652067726561746572207468616e20746865206578697374696e67207374616b65202d207374616b6520697320736c617368656420746f207a65726f2e19015265717569726573207369676e6564206c6561646572206f726967696e206f722074686520726f6f742028746f20736c61736820746865206c6561646572207374616b65292e2823203c7765696768743e002423232057656967687438604f20285029602077686572653ae82d20605060206973207468652073697a65206f66206070656e616c6974792e736c617368696e675f746578746020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e3864656372656173655f7374616b65080124776f726b65725f696428012c576f726b657249643c543e00014c7374616b655f62616c616e63655f64656c746118013042616c616e63654f663c543e00073021014465637265617365732074686520726567756c617220776f726b65722f6c656164207374616b6520616e642072657475726e73207468652072656d61696e64657220746f207468653901776f726b6572207374616b696e675f6163636f756e745f69642e2043616e2062652064656372656173656420746f207a65726f2c206e6f20616374696f6e73206f6e207a65726f207374616b652e944163636570747320746865207374616b6520616d6f756e7420746f2064656372656173652e25015265717569726573207369676e6564206c6561646572206f726967696e206f722074686520726f6f742028746f20646563726561736520746865206c6561646572207374616b65292e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e38696e6372656173655f7374616b65080124776f726b65725f696428012c576f726b657249643c543e00014c7374616b655f62616c616e63655f64656c746118013042616c616e63654f663c543e0008280501496e637265617365732074686520726567756c617220776f726b65722f6c656164207374616b652c2064656d616e6473206120776f726b6572206f726967696e2e6d014c6f636b7320746f6b656e732066726f6d2074686520776f726b6572207374616b696e675f6163636f756e745f696420657175616c20746f206e6577207374616b652e204e6f206c696d697473206f6e20746865207374616b652e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e5077697468647261775f6170706c69636174696f6e0401386170706c69636174696f6e5f69642801344170706c69636174696f6e4964000924010157697468647261772074686520776f726b6572206170706c69636174696f6e2e2043616e20626520646f6e652062792074686520776f726b6572206f6e6c792e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e3863616e63656c5f6f70656e696e670401286f70656e696e675f69642801244f70656e696e674964000a28dc43616e63656c20616e206f70656e696e6720666f722074686520726567756c617220776f726b65722f6c65616420706f736974696f6e2e550152657175697265207369676e6564206c6561646572206f726967696e206f722074686520726f6f742028746f2063616e63656c206f70656e696e6720666f7220746865206c656164657220706f736974696f6e292e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e287365745f6275646765740401286e65775f62756467657418013042616c616e63654f663c543e000b28a0536574732061206e65772062756467657420666f722074686520776f726b696e672067726f75702e54526571756972657320726f6f74206f726967696e2e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e547570646174655f7265776172645f6163636f756e74080124776f726b65725f696428012c576f726b657249643c543e0001546e65775f7265776172645f6163636f756e745f6964000130543a3a4163636f756e744964000c2469015570646174652074686520726577617264206163636f756e74206173736f6369617465642077697468206120736574207265776172642072656c6174696f6e7368697020666f72207468652061637469766520776f726b65722e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e507570646174655f7265776172645f616d6f756e74080124776f726b65725f696428012c576f726b657249643c543e0001407265776172645f7065725f626c6f636b450101504f7074696f6e3c42616c616e63654f663c543e3e000d28c855706461746520746865207265776172642070657220626c6f636b20666f72207468652061637469766520776f726b65722e310152657175697265207369676e6564206c6561646572206f726967696e206f722074686520726f6f742028746f20757064617465206c656164657227732072657761726420616d6f756e74292e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e3c7365745f7374617475735f7465787404012c7374617475735f746578743101013c4f7074696f6e3c5665633c75383e3e000e30b4536574732061206e657720737461747573207465787420666f722074686520776f726b696e672067726f75702e54526571756972657320726f6f74206f726967696e2e002823203c7765696768743e002423232057656967687438604f20285329602077686572653a4d012d20605360206973207468652073697a65206f662074686520636f6e74656e7473206f6620607374617475735f746578746020696e206b696c6f6279746573207768656e206974206973206e6f74206e6f6e6500142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e447370656e645f66726f6d5f6275646765740c01286163636f756e745f6964000130543a3a4163636f756e744964000118616d6f756e7418013042616c616e63654f663c543e000124726174696f6e616c653101013c4f7074696f6e3c5665633c75383e3e000f28a85472616e73666572732073706563696669656420616d6f756e7420746f20616e79206163636f756e742e5c5265717569726573206c6561646572206f726967696e2e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e6466756e645f776f726b696e675f67726f75705f6275646765740c01246d656d6265725f696428012c4d656d62657249643c543e000118616d6f756e7418013042616c616e63654f663c543e000124726174696f6e616c6530011c5665633c75383e0010209846756e6420776f726b696e672067726f7570206275646765742062792061206d656d6265722e203c7765696768743e0024232320576569676874c4604f202831296020446f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d6574657273142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e2c6c6561645f72656d61726b04010c6d736730011c5665633c75383e0011284c4c6561642072656d61726b206d657373616765002823203c7765696768743e002423232057656967687438604f20284d29602077686572653a9c2d20604d60206973207468652073697a65206f6620606d73676020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e34776f726b65725f72656d61726b080124776f726b65725f696428012c576f726b657249643c543e00010c6d736730011c5665633c75383e00122854576f726b65722072656d61726b206d657373616765002823203c7765696768743e002423232057656967687438604f20284d29602077686572653a9c2d20604d60206973207468652073697a65206f6620606d73676020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e0c4c446973706174636861626c652063616c6c732e005501456163682076617269616e74206f66207468697320656e756d206d61707320746f206120646973706174636861626c652066756e6374696f6e2066726f6d20746865206173736f636961746564206d6f64756c652e8d06085070616c6c65745f776f726b696e675f67726f75701043616c6c08045400044900014c2c6164645f6f70656e696e6710012c6465736372697074696f6e30011c5665633c75383e0001306f70656e696e675f747970658103012c4f70656e696e67547970650001307374616b655f706f6c696379610301a45374616b65506f6c6963793c543a3a426c6f636b4e756d6265722c2042616c616e63654f663c543e3e0001407265776172645f7065725f626c6f636b450101504f7074696f6e3c42616c616e63654f663c543e3e00002cc44164642061206a6f62206f70656e696e6720666f72206120726567756c617220776f726b65722f6c65616420726f6c652e490152657175697265207369676e6564206c6561646572206f726967696e206f722074686520726f6f742028746f20616464206f70656e696e6720666f7220746865206c656164657220706f736974696f6e292e002823203c7765696768743e002423232057656967687438604f20284429602077686572653abc2d20604460206973207468652073697a65206f6620606465736372697074696f6e6020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e406170706c795f6f6e5f6f70656e696e67040104708503016c4170706c794f6e4f70656e696e67506172616d65746572733c543e000128684170706c79206f6e206120776f726b6572206f70656e696e672e002823203c7765696768743e002423232057656967687438604f20284429602077686572653ac42d20604460206973207468652073697a65206f662060702e6465736372697074696f6e6020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e3066696c6c5f6f70656e696e670801286f70656e696e675f69642801244f70656e696e6749640001687375636365737366756c5f6170706c69636174696f6e5f6964736901015c42547265655365743c4170706c69636174696f6e49643e000228ac46696c6c206f70656e696e6720666f722074686520726567756c61722f6c65616420706f736974696f6e2e4d0152657175697265207369676e6564206c6561646572206f726967696e206f722074686520726f6f742028746f2066696c6c206f70656e696e6720666f7220746865206c656164657220706f736974696f6e292e2823203c7765696768743e002423232057656967687438604f20284129602077686572653acc2d2060416020697320746865206c656e677468206f6620607375636365737366756c5f6170706c69636174696f6e5f69647360142d2044423a242020202d204f2841292c23203c2f7765696768743e4c7570646174655f726f6c655f6163636f756e74080124776f726b65725f696428012c576f726b657249643c543e00014c6e65775f726f6c655f6163636f756e745f6964000130543a3a4163636f756e744964000324150155706461746520746865206173736f63696174656420726f6c65206163636f756e74206f66207468652061637469766520726567756c617220776f726b65722f6c6561642e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e286c656176655f726f6c65080124776f726b65725f696428012c576f726b657249643c543e000124726174696f6e616c653101013c4f7074696f6e3c5665633c75383e3e000424904c656176652074686520726f6c65206279207468652061637469766520776f726b65722e2823203c7765696768743e002423232057656967687438604f20285229602077686572653ab42d20605260206973207468652073697a65206f662060726174696f6e616c656020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e387465726d696e6174655f726f6c650c0124776f726b65725f696428012c576f726b657249643c543e00011c70656e616c7479450101504f7074696f6e3c42616c616e63654f663c543e3e000124726174696f6e616c653101013c4f7074696f6e3c5665633c75383e3e000528a05465726d696e617465207468652061637469766520776f726b657220627920746865206c6561642e25015265717569726573207369676e6564206c6561646572206f726967696e206f722074686520726f6f742028746f207465726d696e61746520746865206c656164657220726f6c65292e2823203c7765696768743e002423232057656967687438604f20285029602077686572653ad82d20605060206973207468652073697a65206070656e616c74792e736c617368696e675f746578746020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e2c736c6173685f7374616b650c0124776f726b65725f696428012c576f726b657249643c543e00011c70656e616c747918013042616c616e63654f663c543e000124726174696f6e616c653101013c4f7074696f6e3c5665633c75383e3e00062c7d01536c61736865732074686520726567756c617220776f726b6572207374616b652c2064656d616e64732061206c6561646572206f726967696e2e204e6f206c696d6974732c206e6f20616374696f6e73206f6e207a65726f207374616b652e3d01496620736c617368696e672062616c616e63652067726561746572207468616e20746865206578697374696e67207374616b65202d207374616b6520697320736c617368656420746f207a65726f2e19015265717569726573207369676e6564206c6561646572206f726967696e206f722074686520726f6f742028746f20736c61736820746865206c6561646572207374616b65292e2823203c7765696768743e002423232057656967687438604f20285029602077686572653ae82d20605060206973207468652073697a65206f66206070656e616c6974792e736c617368696e675f746578746020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e3864656372656173655f7374616b65080124776f726b65725f696428012c576f726b657249643c543e00014c7374616b655f62616c616e63655f64656c746118013042616c616e63654f663c543e00073021014465637265617365732074686520726567756c617220776f726b65722f6c656164207374616b6520616e642072657475726e73207468652072656d61696e64657220746f207468653901776f726b6572207374616b696e675f6163636f756e745f69642e2043616e2062652064656372656173656420746f207a65726f2c206e6f20616374696f6e73206f6e207a65726f207374616b652e944163636570747320746865207374616b6520616d6f756e7420746f2064656372656173652e25015265717569726573207369676e6564206c6561646572206f726967696e206f722074686520726f6f742028746f20646563726561736520746865206c6561646572207374616b65292e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e38696e6372656173655f7374616b65080124776f726b65725f696428012c576f726b657249643c543e00014c7374616b655f62616c616e63655f64656c746118013042616c616e63654f663c543e0008280501496e637265617365732074686520726567756c617220776f726b65722f6c656164207374616b652c2064656d616e6473206120776f726b6572206f726967696e2e6d014c6f636b7320746f6b656e732066726f6d2074686520776f726b6572207374616b696e675f6163636f756e745f696420657175616c20746f206e6577207374616b652e204e6f206c696d697473206f6e20746865207374616b652e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e5077697468647261775f6170706c69636174696f6e0401386170706c69636174696f6e5f69642801344170706c69636174696f6e4964000924010157697468647261772074686520776f726b6572206170706c69636174696f6e2e2043616e20626520646f6e652062792074686520776f726b6572206f6e6c792e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e3863616e63656c5f6f70656e696e670401286f70656e696e675f69642801244f70656e696e674964000a28dc43616e63656c20616e206f70656e696e6720666f722074686520726567756c617220776f726b65722f6c65616420706f736974696f6e2e550152657175697265207369676e6564206c6561646572206f726967696e206f722074686520726f6f742028746f2063616e63656c206f70656e696e6720666f7220746865206c656164657220706f736974696f6e292e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e287365745f6275646765740401286e65775f62756467657418013042616c616e63654f663c543e000b28a0536574732061206e65772062756467657420666f722074686520776f726b696e672067726f75702e54526571756972657320726f6f74206f726967696e2e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e547570646174655f7265776172645f6163636f756e74080124776f726b65725f696428012c576f726b657249643c543e0001546e65775f7265776172645f6163636f756e745f6964000130543a3a4163636f756e744964000c2469015570646174652074686520726577617264206163636f756e74206173736f6369617465642077697468206120736574207265776172642072656c6174696f6e7368697020666f72207468652061637469766520776f726b65722e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e507570646174655f7265776172645f616d6f756e74080124776f726b65725f696428012c576f726b657249643c543e0001407265776172645f7065725f626c6f636b450101504f7074696f6e3c42616c616e63654f663c543e3e000d28c855706461746520746865207265776172642070657220626c6f636b20666f72207468652061637469766520776f726b65722e310152657175697265207369676e6564206c6561646572206f726967696e206f722074686520726f6f742028746f20757064617465206c656164657227732072657761726420616d6f756e74292e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e3c7365745f7374617475735f7465787404012c7374617475735f746578743101013c4f7074696f6e3c5665633c75383e3e000e30b4536574732061206e657720737461747573207465787420666f722074686520776f726b696e672067726f75702e54526571756972657320726f6f74206f726967696e2e002823203c7765696768743e002423232057656967687438604f20285329602077686572653a4d012d20605360206973207468652073697a65206f662074686520636f6e74656e7473206f6620607374617475735f746578746020696e206b696c6f6279746573207768656e206974206973206e6f74206e6f6e6500142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e447370656e645f66726f6d5f6275646765740c01286163636f756e745f6964000130543a3a4163636f756e744964000118616d6f756e7418013042616c616e63654f663c543e000124726174696f6e616c653101013c4f7074696f6e3c5665633c75383e3e000f28a85472616e73666572732073706563696669656420616d6f756e7420746f20616e79206163636f756e742e5c5265717569726573206c6561646572206f726967696e2e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e6466756e645f776f726b696e675f67726f75705f6275646765740c01246d656d6265725f696428012c4d656d62657249643c543e000118616d6f756e7418013042616c616e63654f663c543e000124726174696f6e616c6530011c5665633c75383e0010209846756e6420776f726b696e672067726f7570206275646765742062792061206d656d6265722e203c7765696768743e0024232320576569676874c4604f202831296020446f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d6574657273142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e2c6c6561645f72656d61726b04010c6d736730011c5665633c75383e0011284c4c6561642072656d61726b206d657373616765002823203c7765696768743e002423232057656967687438604f20284d29602077686572653a9c2d20604d60206973207468652073697a65206f6620606d73676020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e34776f726b65725f72656d61726b080124776f726b65725f696428012c576f726b657249643c543e00010c6d736730011c5665633c75383e00122854576f726b65722072656d61726b206d657373616765002823203c7765696768743e002423232057656967687438604f20284d29602077686572653a9c2d20604d60206973207468652073697a65206f6620606d73676020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e0c4c446973706174636861626c652063616c6c732e005501456163682076617269616e74206f66207468697320656e756d206d61707320746f206120646973706174636861626c652066756e6374696f6e2066726f6d20746865206173736f636961746564206d6f64756c652e9106085070616c6c65745f776f726b696e675f67726f75701043616c6c08045400044900014c2c6164645f6f70656e696e6710012c6465736372697074696f6e30011c5665633c75383e0001306f70656e696e675f747970658103012c4f70656e696e67547970650001307374616b655f706f6c696379610301a45374616b65506f6c6963793c543a3a426c6f636b4e756d6265722c2042616c616e63654f663c543e3e0001407265776172645f7065725f626c6f636b450101504f7074696f6e3c42616c616e63654f663c543e3e00002cc44164642061206a6f62206f70656e696e6720666f72206120726567756c617220776f726b65722f6c65616420726f6c652e490152657175697265207369676e6564206c6561646572206f726967696e206f722074686520726f6f742028746f20616464206f70656e696e6720666f7220746865206c656164657220706f736974696f6e292e002823203c7765696768743e002423232057656967687438604f20284429602077686572653abc2d20604460206973207468652073697a65206f6620606465736372697074696f6e6020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e406170706c795f6f6e5f6f70656e696e67040104708503016c4170706c794f6e4f70656e696e67506172616d65746572733c543e000128684170706c79206f6e206120776f726b6572206f70656e696e672e002823203c7765696768743e002423232057656967687438604f20284429602077686572653ac42d20604460206973207468652073697a65206f662060702e6465736372697074696f6e6020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e3066696c6c5f6f70656e696e670801286f70656e696e675f69642801244f70656e696e6749640001687375636365737366756c5f6170706c69636174696f6e5f6964736901015c42547265655365743c4170706c69636174696f6e49643e000228ac46696c6c206f70656e696e6720666f722074686520726567756c61722f6c65616420706f736974696f6e2e4d0152657175697265207369676e6564206c6561646572206f726967696e206f722074686520726f6f742028746f2066696c6c206f70656e696e6720666f7220746865206c656164657220706f736974696f6e292e2823203c7765696768743e002423232057656967687438604f20284129602077686572653acc2d2060416020697320746865206c656e677468206f6620607375636365737366756c5f6170706c69636174696f6e5f69647360142d2044423a242020202d204f2841292c23203c2f7765696768743e4c7570646174655f726f6c655f6163636f756e74080124776f726b65725f696428012c576f726b657249643c543e00014c6e65775f726f6c655f6163636f756e745f6964000130543a3a4163636f756e744964000324150155706461746520746865206173736f63696174656420726f6c65206163636f756e74206f66207468652061637469766520726567756c617220776f726b65722f6c6561642e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e286c656176655f726f6c65080124776f726b65725f696428012c576f726b657249643c543e000124726174696f6e616c653101013c4f7074696f6e3c5665633c75383e3e000424904c656176652074686520726f6c65206279207468652061637469766520776f726b65722e2823203c7765696768743e002423232057656967687438604f20285229602077686572653ab42d20605260206973207468652073697a65206f662060726174696f6e616c656020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e387465726d696e6174655f726f6c650c0124776f726b65725f696428012c576f726b657249643c543e00011c70656e616c7479450101504f7074696f6e3c42616c616e63654f663c543e3e000124726174696f6e616c653101013c4f7074696f6e3c5665633c75383e3e000528a05465726d696e617465207468652061637469766520776f726b657220627920746865206c6561642e25015265717569726573207369676e6564206c6561646572206f726967696e206f722074686520726f6f742028746f207465726d696e61746520746865206c656164657220726f6c65292e2823203c7765696768743e002423232057656967687438604f20285029602077686572653ad82d20605060206973207468652073697a65206070656e616c74792e736c617368696e675f746578746020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e2c736c6173685f7374616b650c0124776f726b65725f696428012c576f726b657249643c543e00011c70656e616c747918013042616c616e63654f663c543e000124726174696f6e616c653101013c4f7074696f6e3c5665633c75383e3e00062c7d01536c61736865732074686520726567756c617220776f726b6572207374616b652c2064656d616e64732061206c6561646572206f726967696e2e204e6f206c696d6974732c206e6f20616374696f6e73206f6e207a65726f207374616b652e3d01496620736c617368696e672062616c616e63652067726561746572207468616e20746865206578697374696e67207374616b65202d207374616b6520697320736c617368656420746f207a65726f2e19015265717569726573207369676e6564206c6561646572206f726967696e206f722074686520726f6f742028746f20736c61736820746865206c6561646572207374616b65292e2823203c7765696768743e002423232057656967687438604f20285029602077686572653ae82d20605060206973207468652073697a65206f66206070656e616c6974792e736c617368696e675f746578746020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e3864656372656173655f7374616b65080124776f726b65725f696428012c576f726b657249643c543e00014c7374616b655f62616c616e63655f64656c746118013042616c616e63654f663c543e00073021014465637265617365732074686520726567756c617220776f726b65722f6c656164207374616b6520616e642072657475726e73207468652072656d61696e64657220746f207468653901776f726b6572207374616b696e675f6163636f756e745f69642e2043616e2062652064656372656173656420746f207a65726f2c206e6f20616374696f6e73206f6e207a65726f207374616b652e944163636570747320746865207374616b6520616d6f756e7420746f2064656372656173652e25015265717569726573207369676e6564206c6561646572206f726967696e206f722074686520726f6f742028746f20646563726561736520746865206c6561646572207374616b65292e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e38696e6372656173655f7374616b65080124776f726b65725f696428012c576f726b657249643c543e00014c7374616b655f62616c616e63655f64656c746118013042616c616e63654f663c543e0008280501496e637265617365732074686520726567756c617220776f726b65722f6c656164207374616b652c2064656d616e6473206120776f726b6572206f726967696e2e6d014c6f636b7320746f6b656e732066726f6d2074686520776f726b6572207374616b696e675f6163636f756e745f696420657175616c20746f206e6577207374616b652e204e6f206c696d697473206f6e20746865207374616b652e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e5077697468647261775f6170706c69636174696f6e0401386170706c69636174696f6e5f69642801344170706c69636174696f6e4964000924010157697468647261772074686520776f726b6572206170706c69636174696f6e2e2043616e20626520646f6e652062792074686520776f726b6572206f6e6c792e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e3863616e63656c5f6f70656e696e670401286f70656e696e675f69642801244f70656e696e674964000a28dc43616e63656c20616e206f70656e696e6720666f722074686520726567756c617220776f726b65722f6c65616420706f736974696f6e2e550152657175697265207369676e6564206c6561646572206f726967696e206f722074686520726f6f742028746f2063616e63656c206f70656e696e6720666f7220746865206c656164657220706f736974696f6e292e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e287365745f6275646765740401286e65775f62756467657418013042616c616e63654f663c543e000b28a0536574732061206e65772062756467657420666f722074686520776f726b696e672067726f75702e54526571756972657320726f6f74206f726967696e2e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e547570646174655f7265776172645f6163636f756e74080124776f726b65725f696428012c576f726b657249643c543e0001546e65775f7265776172645f6163636f756e745f6964000130543a3a4163636f756e744964000c2469015570646174652074686520726577617264206163636f756e74206173736f6369617465642077697468206120736574207265776172642072656c6174696f6e7368697020666f72207468652061637469766520776f726b65722e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e507570646174655f7265776172645f616d6f756e74080124776f726b65725f696428012c576f726b657249643c543e0001407265776172645f7065725f626c6f636b450101504f7074696f6e3c42616c616e63654f663c543e3e000d28c855706461746520746865207265776172642070657220626c6f636b20666f72207468652061637469766520776f726b65722e310152657175697265207369676e6564206c6561646572206f726967696e206f722074686520726f6f742028746f20757064617465206c656164657227732072657761726420616d6f756e74292e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e3c7365745f7374617475735f7465787404012c7374617475735f746578743101013c4f7074696f6e3c5665633c75383e3e000e30b4536574732061206e657720737461747573207465787420666f722074686520776f726b696e672067726f75702e54526571756972657320726f6f74206f726967696e2e002823203c7765696768743e002423232057656967687438604f20285329602077686572653a4d012d20605360206973207468652073697a65206f662074686520636f6e74656e7473206f6620607374617475735f746578746020696e206b696c6f6279746573207768656e206974206973206e6f74206e6f6e6500142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e447370656e645f66726f6d5f6275646765740c01286163636f756e745f6964000130543a3a4163636f756e744964000118616d6f756e7418013042616c616e63654f663c543e000124726174696f6e616c653101013c4f7074696f6e3c5665633c75383e3e000f28a85472616e73666572732073706563696669656420616d6f756e7420746f20616e79206163636f756e742e5c5265717569726573206c6561646572206f726967696e2e002823203c7765696768743e00242323205765696768741c604f2028312960142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e6466756e645f776f726b696e675f67726f75705f6275646765740c01246d656d6265725f696428012c4d656d62657249643c543e000118616d6f756e7418013042616c616e63654f663c543e000124726174696f6e616c6530011c5665633c75383e0010209846756e6420776f726b696e672067726f7570206275646765742062792061206d656d6265722e203c7765696768743e0024232320576569676874c4604f202831296020446f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d6574657273142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e2c6c6561645f72656d61726b04010c6d736730011c5665633c75383e0011284c4c6561642072656d61726b206d657373616765002823203c7765696768743e002423232057656967687438604f20284d29602077686572653a9c2d20604d60206973207468652073697a65206f6620606d73676020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e34776f726b65725f72656d61726b080124776f726b65725f696428012c576f726b657249643c543e00010c6d736730011c5665633c75383e00122854576f726b65722072656d61726b206d657373616765002823203c7765696768743e002423232057656967687438604f20284d29602077686572653a9c2d20604d60206973207468652073697a65206f6620606d73676020696e206b696c6f6279746573142d2044423acc2020202d204f28312920646f65736e277420646570656e64206f6e20746865207374617465206f7220706172616d65746572732c23203c2f7765696768743e0c4c446973706174636861626c652063616c6c732e005501456163682076617269616e74206f66207468697320656e756d206d61707320746f206120646973706174636861626c652066756e6374696f6e2066726f6d20746865206173736f636961746564206d6f64756c652e950608586a6f7973747265616d5f6e6f64655f72756e74696d65304f726967696e43616c6c65720001081873797374656d0400990601746672616d655f73797374656d3a3a4f726967696e3c52756e74696d653e00000010566f696404009d0601110173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a566f69640001000099060c346672616d655f737570706f7274206469737061746368245261774f726967696e04244163636f756e7449640100010c10526f6f74000000185369676e656404000001244163636f756e744964000100104e6f6e65000200009d06081c73705f636f726510566f696400010000a1060c3870616c6c65745f7574696c6974791870616c6c6574144572726f7204045400010430546f6f4d616e7943616c6c730000045c546f6f206d616e792063616c6c7320626174636865642e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a090909a5060c4c626f756e6465645f636f6c6c656374696f6e73407765616b5f626f756e6465645f766563385765616b426f756e64656456656308045401a906045300000400ad0601185665633c543e0000a9060000040851042800ad06000002a90600b1060c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540104045300000400b50601185665633c543e0000b5060000020400b90604184f7074696f6e04045401bd060108104e6f6e6500000010536f6d650400bd060000010000bd060c4473705f636f6e73656e7375735f626162651c646967657374732450726544696765737400010c1c5072696d6172790400c10601405072696d617279507265446967657374000100385365636f6e64617279506c61696e0400c506015c5365636f6e64617279506c61696e507265446967657374000200305365636f6e646172795652460400c90601545365636f6e6461727956524650726544696765737400030000c1060c4473705f636f6e73656e7375735f626162651c64696765737473405072696d617279507265446967657374000010013c617574686f726974795f696e64657810015473757065723a3a417574686f72697479496e646578000110736c6f7455040110536c6f740001287672665f6f75747075740401245652464f75747075740001247672665f70726f6f66a505012056524650726f6f660000c5060c4473705f636f6e73656e7375735f626162651c646967657374735c5365636f6e64617279506c61696e507265446967657374000008013c617574686f726974795f696e64657810015473757065723a3a417574686f72697479496e646578000110736c6f7455040110536c6f740000c9060c4473705f636f6e73656e7375735f626162651c64696765737473545365636f6e64617279565246507265446967657374000010013c617574686f726974795f696e64657810015473757065723a3a417574686f72697479496e646578000110736c6f7455040110536c6f740001287672665f6f75747075740401245652464f75747075740001247672665f70726f6f66a505012056524650726f6f660000cd0604184f7074696f6e04045401040108104e6f6e6500000010536f6d650400040000010000d106084473705f636f6e73656e7375735f62616265584261626545706f6368436f6e66696775726174696f6e0000080104637d030128287536342c2075363429000134616c6c6f7765645f736c6f747361040130416c6c6f776564536c6f74730000d5060c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401bd02045300000400b90201185665633c543e0000d9060c2c70616c6c65745f626162651870616c6c6574144572726f7204045400011060496e76616c696445717569766f636174696f6e50726f6f660000043101416e2065717569766f636174696f6e2070726f6f662070726f76696465642061732070617274206f6620616e2065717569766f636174696f6e207265706f727420697320696e76616c69642e60496e76616c69644b65794f776e65727368697050726f6f66000104310141206b6579206f776e6572736869702070726f6f662070726f76696465642061732070617274206f6620616e2065717569766f636174696f6e207265706f727420697320696e76616c69642e584475706c69636174654f6666656e63655265706f727400020415014120676976656e2065717569766f636174696f6e207265706f72742069732076616c69642062757420616c72656164792070726576696f75736c79207265706f727465642e50496e76616c6964436f6e66696775726174696f6e0003048c5375626d697474656420636f6e66696775726174696f6e20697320696e76616c69642e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a090909dd060c4c626f756e6465645f636f6c6c656374696f6e73407765616b5f626f756e6465645f766563385765616b426f756e64656456656308045401e106045300000400e90601185665633c543e0000e106083c70616c6c65745f62616c616e6365732c42616c616e63654c6f636b041c42616c616e63650118000c01086964290401384c6f636b4964656e746966696572000118616d6f756e7418011c42616c616e636500011c726561736f6e73e506011c526561736f6e730000e506083c70616c6c65745f62616c616e6365731c526561736f6e7300010c0c466565000000104d6973630001000c416c6c00020000e906000002e10600ed060c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401f106045300000400f50601185665633c543e0000f106083c70616c6c65745f62616c616e6365732c52657365727665446174610844526573657276654964656e7469666965720129041c42616c616e6365011800080108696429040144526573657276654964656e746966696572000118616d6f756e7418011c42616c616e63650000f506000002f10600f9060c3c70616c6c65745f62616c616e6365731870616c6c6574144572726f720804540004490001203856657374696e6742616c616e63650000049856657374696e672062616c616e636520746f6f206869676820746f2073656e642076616c7565544c69717569646974795265737472696374696f6e73000104c44163636f756e74206c6971756964697479207265737472696374696f6e732070726576656e74207769746864726177616c4c496e73756666696369656e7442616c616e63650002047842616c616e636520746f6f206c6f7720746f2073656e642076616c75652e484578697374656e7469616c4465706f736974000304e856616c756520746f6f206c6f7720746f20637265617465206163636f756e742064756520746f206578697374656e7469616c206465706f736974244b656570416c6976650004048c5472616e736665722f7061796d656e7420776f756c64206b696c6c206163636f756e745c4578697374696e6756657374696e675363686564756c65000504c8412076657374696e67207363686564756c6520616c72656164792065786973747320666f722074686973206163636f756e742c446561644163636f756e740006048842656e6566696369617279206163636f756e74206d757374207072652d65786973743c546f6f4d616e795265736572766573000704ac4e756d626572206f66206e616d656420726573657276657320657863656564204d6178526573657276657304b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a090909fd060c3473705f61726974686d657469632c66697865645f706f696e7424466978656455313238000004001801107531323800000107086870616c6c65745f7472616e73616374696f6e5f7061796d656e742052656c6561736573000108245631416e6369656e74000000085632000100000507089070616c6c65745f656c656374696f6e5f70726f76696465725f6d756c74695f7068617365345265616479536f6c7574696f6e08244163636f756e74496400284d617857696e6e65727300000c0120737570706f72747309070198426f756e646564537570706f7274733c4163636f756e7449642c204d617857696e6e6572733e00011473636f72659c0134456c656374696f6e53636f726500011c636f6d7075746590013c456c656374696f6e436f6d70757465000009070c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454014d05045300000400490501185665633c543e00000d07089070616c6c65745f656c656374696f6e5f70726f76696465725f6d756c74695f706861736534526f756e64536e617073686f7408244163636f756e7449640100304461746150726f766964657201110700080118766f74657273190701445665633c4461746150726f76696465723e00011c74617267657473610501385665633c4163636f756e7449643e000011070000040c002815070015070c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540100045300000400610501185665633c543e000019070000021107001d070c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454012107045300000400250701185665633c543e000021070000040c9c101000250700000221070029070c9070616c6c65745f656c656374696f6e5f70726f76696465725f6d756c74695f7068617365187369676e6564405369676e65645375626d697373696f6e0c244163636f756e74496401001c42616c616e6365011820536f6c7574696f6e0175040010010c77686f0001244163636f756e74496400011c6465706f73697418011c42616c616e63650001307261775f736f6c7574696f6e71040154526177536f6c7574696f6e3c536f6c7574696f6e3e00012063616c6c5f66656518011c42616c616e636500002d070c9070616c6c65745f656c656374696f6e5f70726f76696465725f6d756c74695f70686173651870616c6c6574144572726f720404540001386850726544697370617463684561726c795375626d697373696f6e000004645375626d697373696f6e2077617320746f6f206561726c792e6c507265446973706174636857726f6e6757696e6e6572436f756e740001048857726f6e67206e756d626572206f662077696e6e6572732070726573656e7465642e6450726544697370617463685765616b5375626d697373696f6e000204905375626d697373696f6e2077617320746f6f207765616b2c2073636f72652d776973652e3c5369676e6564517565756546756c6c0003044901546865207175657565207761732066756c6c2c20616e642074686520736f6c7574696f6e20776173206e6f7420626574746572207468616e20616e79206f6620746865206578697374696e67206f6e65732e585369676e656443616e6e6f745061794465706f73697400040494546865206f726967696e206661696c656420746f2070617920746865206465706f7369742e505369676e6564496e76616c69645769746e657373000504a05769746e657373206461746120746f20646973706174636861626c6520697320696e76616c69642e4c5369676e6564546f6f4d756368576569676874000604b8546865207369676e6564207375626d697373696f6e20636f6e73756d657320746f6f206d756368207765696768743c4f637743616c6c57726f6e67457261000704984f4357207375626d697474656420736f6c7574696f6e20666f722077726f6e6720726f756e645c4d697373696e67536e617073686f744d65746164617461000804a8536e617073686f74206d657461646174612073686f756c6420657869737420627574206469646e27742e58496e76616c69645375626d697373696f6e496e646578000904d06053656c663a3a696e736572745f7375626d697373696f6e602072657475726e656420616e20696e76616c696420696e6465782e3843616c6c4e6f74416c6c6f776564000a04985468652063616c6c206973206e6f7420616c6c6f776564206174207468697320706f696e742e3846616c6c6261636b4661696c6564000b044c5468652066616c6c6261636b206661696c65642c426f756e644e6f744d6574000c0448536f6d6520626f756e64206e6f74206d657438546f6f4d616e7957696e6e657273000d049c5375626d697474656420736f6c7574696f6e2068617320746f6f206d616e792077696e6e657273040d014572726f72206f66207468652070616c6c657420746861742063616e2062652072657475726e656420696e20726573706f6e736520746f20646973706174636865732e3107083870616c6c65745f7374616b696e67345374616b696e674c656467657204045400001401147374617368000130543a3a4163636f756e744964000114746f74616cec013042616c616e63654f663c543e000118616374697665ec013042616c616e63654f663c543e000124756e6c6f636b696e67350701f0426f756e6465645665633c556e6c6f636b4368756e6b3c42616c616e63654f663c543e3e2c20543a3a4d6178556e6c6f636b696e674368756e6b733e00013c636c61696d65645f7265776172647341070194426f756e6465645665633c457261496e6465782c20543a3a486973746f727944657074683e000035070c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540139070453000004003d0701185665633c543e00003907083870616c6c65745f7374616b696e672c556e6c6f636b4368756e6b041c42616c616e636501180008011476616c7565ec011c42616c616e636500010c657261e9030120457261496e64657800003d0700000239070041070c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540110045300000400690501185665633c543e00004507083870616c6c65745f7374616b696e672c4e6f6d696e6174696f6e7304045400000c011c74617267657473150701ac426f756e6465645665633c543a3a4163636f756e7449642c20543a3a4d61784e6f6d696e6174696f6e733e0001307375626d69747465645f696e100120457261496e64657800012873757070726573736564980110626f6f6c00004907083870616c6c65745f7374616b696e6734416374697665457261496e666f0000080114696e646578100120457261496e64657800011473746172743501012c4f7074696f6e3c7536343e00004d07000004081000005107083870616c6c65745f7374616b696e673c457261526577617264506f696e747304244163636f756e744964010000080114746f74616c10012c526577617264506f696e74000128696e646976696475616c5507018042547265654d61703c4163636f756e7449642c20526577617264506f696e743e00005507042042547265654d617008044b010004560110000400590700000059070000025d07005d070000040800100061070000026507006507083870616c6c65745f7374616b696e6738556e6170706c696564536c61736808244163636f756e74496401001c42616c616e636501180014012476616c696461746f720001244163636f756e74496400010c6f776e18011c42616c616e63650001186f7468657273550501645665633c284163636f756e7449642c2042616c616e6365293e0001247265706f7274657273610501385665633c4163636f756e7449643e0001187061796f757418011c42616c616e63650000690700000408ac18006d070c3870616c6c65745f7374616b696e6720736c617368696e6734536c617368696e675370616e7300001001287370616e5f696e6465781001245370616e496e6465780001286c6173745f7374617274100120457261496e6465780001486c6173745f6e6f6e7a65726f5f736c617368100120457261496e6465780001147072696f72690501345665633c457261496e6465783e000071070c3870616c6c65745f7374616b696e6720736c617368696e67285370616e5265636f7264041c42616c616e636501180008011c736c617368656418011c42616c616e6365000120706169645f6f757418011c42616c616e6365000075070000027907007907000004081098007d07103870616c6c65745f7374616b696e671870616c6c65741870616c6c6574144572726f72040454000168344e6f74436f6e74726f6c6c6572000004644e6f74206120636f6e74726f6c6c6572206163636f756e742e204e6f745374617368000104504e6f742061207374617368206163636f756e742e34416c7265616479426f6e64656400020460537461736820697320616c726561647920626f6e6465642e34416c726561647950616972656400030474436f6e74726f6c6c657220697320616c7265616479207061697265642e30456d7074795461726765747300040460546172676574732063616e6e6f7420626520656d7074792e384475706c6963617465496e646578000504404475706c696361746520696e6465782e44496e76616c6964536c617368496e64657800060484536c617368207265636f726420696e646578206f7574206f6620626f756e64732e40496e73756666696369656e74426f6e6400070c590143616e6e6f74206861766520612076616c696461746f72206f72206e6f6d696e61746f7220726f6c652c20776974682076616c7565206c657373207468616e20746865206d696e696d756d20646566696e65642062793d01676f7665726e616e6365202873656520604d696e56616c696461746f72426f6e646020616e6420604d696e4e6f6d696e61746f72426f6e6460292e20496620756e626f6e64696e67206973207468651501696e74656e74696f6e2c20606368696c6c6020666972737420746f2072656d6f7665206f6e65277320726f6c652061732076616c696461746f722f6e6f6d696e61746f722e304e6f4d6f72654368756e6b730008049043616e206e6f74207363686564756c65206d6f726520756e6c6f636b206368756e6b732e344e6f556e6c6f636b4368756e6b000904a043616e206e6f74207265626f6e6420776974686f757420756e6c6f636b696e67206368756e6b732e3046756e646564546172676574000a04c8417474656d7074696e6720746f2074617267657420612073746173682074686174207374696c6c206861732066756e64732e48496e76616c6964457261546f526577617264000b0458496e76616c69642065726120746f207265776172642e68496e76616c69644e756d6265724f664e6f6d696e6174696f6e73000c0478496e76616c6964206e756d626572206f66206e6f6d696e6174696f6e732e484e6f74536f72746564416e64556e69717565000d04804974656d7320617265206e6f7420736f7274656420616e6420756e697175652e38416c7265616479436c61696d6564000e0409015265776172647320666f72207468697320657261206861766520616c7265616479206265656e20636c61696d656420666f7220746869732076616c696461746f722e54496e636f7272656374486973746f72794465707468000f04c0496e636f72726563742070726576696f757320686973746f727920646570746820696e7075742070726f76696465642e58496e636f7272656374536c617368696e675370616e73001004b0496e636f7272656374206e756d626572206f6620736c617368696e67207370616e732070726f76696465642e2042616453746174650011043901496e7465726e616c20737461746520686173206265636f6d6520736f6d65686f7720636f7272757074656420616e6420746865206f7065726174696f6e2063616e6e6f7420636f6e74696e75652e38546f6f4d616e795461726765747300120494546f6f206d616e79206e6f6d696e6174696f6e207461726765747320737570706c6965642e244261645461726765740013043d0141206e6f6d696e6174696f6e207461726765742077617320737570706c69656420746861742077617320626c6f636b6564206f72206f7468657277697365206e6f7420612076616c696461746f722e4043616e6e6f744368696c6c4f74686572001404550154686520757365722068617320656e6f75676820626f6e6420616e6420746875732063616e6e6f74206265206368696c6c656420666f72636566756c6c7920627920616e2065787465726e616c20706572736f6e2e44546f6f4d616e794e6f6d696e61746f72730015084d0154686572652061726520746f6f206d616e79206e6f6d696e61746f727320696e207468652073797374656d2e20476f7665726e616e6365206e6565647320746f2061646a75737420746865207374616b696e67b473657474696e677320746f206b656570207468696e6773207361666520666f72207468652072756e74696d652e44546f6f4d616e7956616c696461746f7273001608550154686572652061726520746f6f206d616e792076616c696461746f722063616e6469646174657320696e207468652073797374656d2e20476f7665726e616e6365206e6565647320746f2061646a75737420746865d47374616b696e672073657474696e677320746f206b656570207468696e6773207361666520666f72207468652072756e74696d652e40436f6d6d697373696f6e546f6f4c6f77001704e0436f6d6d697373696f6e20697320746f6f206c6f772e204d757374206265206174206c6561737420604d696e436f6d6d697373696f6e602e2c426f756e644e6f744d657400180458536f6d6520626f756e64206973206e6f74206d65742e44426f6e64696e6752657374726963746564001904e045787465726e616c207265737472696374696f6e2070726576656e747320626f6e64696e67207769746820676976656e206163636f756e7404b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a0909098107000002850700850700000408008105008907000004088d0730008d070c1c73705f636f72651863727970746f244b65795479706549640000040040011c5b75383b20345d000091070c3870616c6c65745f73657373696f6e1870616c6c6574144572726f7204045400011430496e76616c696450726f6f6600000460496e76616c6964206f776e6572736869702070726f6f662e5c4e6f4173736f63696174656456616c696461746f7249640001049c4e6f206173736f6369617465642076616c696461746f7220494420666f72206163636f756e742e344475706c6963617465644b65790002046452656769737465726564206475706c6963617465206b65792e184e6f4b657973000304a44e6f206b65797320617265206173736f63696174656420776974682074686973206163636f756e742e244e6f4163636f756e7400040419014b65792073657474696e67206163636f756e74206973206e6f74206c6976652c20736f206974277320696d706f737369626c6520746f206173736f6369617465206b6579732e04744572726f7220666f72207468652073657373696f6e2070616c6c65742e9507000004082c10009907083870616c6c65745f6772616e6470612c53746f726564537461746504044e01100110104c6976650000003050656e64696e6750617573650801307363686564756c65645f61741001044e00011464656c61791001044e000100185061757365640002003450656e64696e67526573756d650801307363686564756c65645f61741001044e00011464656c61791001044e000300009d07083870616c6c65745f6772616e6470614c53746f72656450656e64696e674368616e676508044e0110144c696d697400001001307363686564756c65645f61741001044e00011464656c61791001044e0001406e6578745f617574686f726974696573a107016c426f756e646564417574686f726974794c6973743c4c696d69743e000118666f72636564010201244f7074696f6e3c4e3e0000a1070c4c626f756e6465645f636f6c6c656374696f6e73407765616b5f626f756e6465645f766563385765616b426f756e64656456656308045401c8045300000400c401185665633c543e0000a5070c3870616c6c65745f6772616e6470611870616c6c6574144572726f7204045400011c2c50617573654661696c65640000080501417474656d707420746f207369676e616c204752414e445041207061757365207768656e2074686520617574686f72697479207365742069736e2774206c697665a42865697468657220706175736564206f7220616c72656164792070656e64696e67207061757365292e30526573756d654661696c65640001081101417474656d707420746f207369676e616c204752414e44504120726573756d65207768656e2074686520617574686f72697479207365742069736e277420706175736564a028656974686572206c697665206f7220616c72656164792070656e64696e6720726573756d65292e344368616e676550656e64696e67000204e8417474656d707420746f207369676e616c204752414e445041206368616e67652077697468206f6e6520616c72656164792070656e64696e672e1c546f6f536f6f6e000304bc43616e6e6f74207369676e616c20666f72636564206368616e676520736f20736f6f6e206166746572206c6173742e60496e76616c69644b65794f776e65727368697050726f6f66000404310141206b6579206f776e6572736869702070726f6f662070726f76696465642061732070617274206f6620616e2065717569766f636174696f6e207265706f727420697320696e76616c69642e60496e76616c696445717569766f636174696f6e50726f6f660005043101416e2065717569766f636174696f6e2070726f6f662070726f76696465642061732070617274206f6620616e2065717569766f636174696f6e207265706f727420697320696e76616c69642e584475706c69636174654f6666656e63655265706f727400060415014120676976656e2065717569766f636174696f6e207265706f72742069732076616c69642062757420616c72656164792070726576696f75736c79207265706f727465642e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a090909a9070c4c626f756e6465645f636f6c6c656374696f6e73407765616b5f626f756e6465645f766563385765616b426f756e646564566563080454018505045300000400ad0701185665633c543e0000ad07000002850500b1070c4c626f756e6465645f636f6c6c656374696f6e73407765616b5f626f756e6465645f766563385765616b426f756e64656456656308045401d8045300000400b50701185665633c543e0000b507000002d800b90710346672616d655f737570706f727418747261697473106d69736334577261707065724f706171756504045401bd07000800e903000000bd070104540000bd07084070616c6c65745f696d5f6f6e6c696e6564426f756e6465644f70617175654e6574776f726b53746174650c4c506565724964456e636f64696e674c696d697400584d756c746941646472456e636f64696e674c696d697400384164647265737365734c696d6974000008011c706565725f6964c107019c5765616b426f756e6465645665633c75382c20506565724964456e636f64696e674c696d69743e00014865787465726e616c5f616464726573736573c507012d015765616b426f756e6465645665633c5765616b426f756e6465645665633c75382c204d756c746941646472456e636f64696e674c696d69743e2c204164647265737365734c696d69740a3e0000c1070c4c626f756e6465645f636f6c6c656374696f6e73407765616b5f626f756e6465645f766563385765616b426f756e64656456656308045401080453000004003001185665633c543e0000c5070c4c626f756e6465645f636f6c6c656374696f6e73407765616b5f626f756e6465645f766563385765616b426f756e64656456656308045401c107045300000400c90701185665633c543e0000c907000002c10700cd070c4070616c6c65745f696d5f6f6e6c696e651870616c6c6574144572726f7204045400010828496e76616c69644b6579000004604e6f6e206578697374656e74207075626c6963206b65792e4c4475706c696361746564486561727462656174000104544475706c696361746564206865617274626561742e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a090909d1070c2873705f7374616b696e671c6f6666656e6365384f6666656e636544657461696c7308205265706f727465720100204f6666656e64657201e4000801206f6666656e646572e401204f6666656e6465720001247265706f7274657273610501345665633c5265706f727465723e0000d50700000408fc3000d9070c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454012c045300000400d90301185665633c543e0000dd070c4070616c6c65745f626167735f6c697374106c697374104e6f646508045400044900001401086964000130543a3a4163636f756e744964000110707265769401504f7074696f6e3c543a3a4163636f756e7449643e0001106e6578749401504f7074696f6e3c543a3a4163636f756e7449643e0001246261675f7570706572280120543a3a53636f726500011473636f7265280120543a3a53636f72650000e1070c4070616c6c65745f626167735f6c697374106c6973740c4261670804540004490000080110686561649401504f7074696f6e3c543a3a4163636f756e7449643e0001107461696c9401504f7074696f6e3c543a3a4163636f756e7449643e0000e5070c4070616c6c65745f626167735f6c6973741870616c6c6574144572726f72080454000449000104104c6973740400e90701244c6973744572726f72000004b441206572726f7220696e20746865206c69737420696e7465726661636520696d706c656d656e746174696f6e2e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a090909e9070c4070616c6c65745f626167735f6c697374106c697374244c6973744572726f72000110244475706c6963617465000000284e6f7448656176696572000100304e6f74496e53616d65426167000200304e6f64654e6f74466f756e6400030000ed070c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401e105045300000400f10701185665633c543e0000f107000002e10500f507083870616c6c65745f76657374696e672052656c656173657300010808563000000008563100010000f9070c3870616c6c65745f76657374696e671870616c6c6574144572726f72040454000114284e6f7456657374696e6700000484546865206163636f756e7420676976656e206973206e6f742076657374696e672e5441744d617856657374696e675363686564756c65730001082501546865206163636f756e7420616c72656164792068617320604d617856657374696e675363686564756c65736020636f756e74206f66207363686564756c657320616e642074687573510163616e6e6f742061646420616e6f74686572206f6e652e20436f6e7369646572206d657267696e67206578697374696e67207363686564756c657320696e206f7264657220746f2061646420616e6f746865722e24416d6f756e744c6f770002040501416d6f756e74206265696e67207472616e7366657272656420697320746f6f206c6f7720746f2063726561746520612076657374696e67207363686564756c652e605363686564756c65496e6465784f75744f66426f756e6473000304d0416e20696e64657820776173206f7574206f6620626f756e6473206f66207468652076657374696e67207363686564756c65732e54496e76616c69645363686564756c65506172616d730004040d014661696c656420746f206372656174652061206e6577207363686564756c65206265636175736520736f6d6520706172616d657465722077617320696e76616c69642e04744572726f7220666f72207468652076657374696e672070616c6c65742efd07000004080004000108083c70616c6c65745f6d756c7469736967204d756c7469736967102c426c6f636b4e756d62657201101c42616c616e63650118244163636f756e7449640100304d6178417070726f76616c7300001001107768656e0d01015854696d65706f696e743c426c6f636b4e756d6265723e00011c6465706f73697418011c42616c616e63650001246465706f7369746f720001244163636f756e744964000124617070726f76616c730508018c426f756e6465645665633c4163636f756e7449642c204d6178417070726f76616c733e000005080c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540100045300000400610501185665633c543e000009080c3c70616c6c65745f6d756c74697369671870616c6c6574144572726f72040454000138404d696e696d756d5468726573686f6c640000047c5468726573686f6c64206d7573742062652032206f7220677265617465722e3c416c7265616479417070726f766564000104ac43616c6c20697320616c726561647920617070726f7665642062792074686973207369676e61746f72792e444e6f417070726f76616c734e65656465640002049c43616c6c20646f65736e2774206e65656420616e7920286d6f72652920617070726f76616c732e44546f6f4665775369676e61746f72696573000304a854686572652061726520746f6f20666577207369676e61746f7269657320696e20746865206c6973742e48546f6f4d616e795369676e61746f72696573000404ac54686572652061726520746f6f206d616e79207369676e61746f7269657320696e20746865206c6973742e545369676e61746f726965734f75744f664f726465720005040d01546865207369676e61746f7269657320776572652070726f7669646564206f7574206f66206f726465723b20746865792073686f756c64206265206f7264657265642e4c53656e646572496e5369676e61746f726965730006040d015468652073656e6465722077617320636f6e7461696e656420696e20746865206f74686572207369676e61746f726965733b2069742073686f756c646e27742062652e204e6f74466f756e64000704dc4d756c7469736967206f7065726174696f6e206e6f7420666f756e64207768656e20617474656d7074696e6720746f2063616e63656c2e204e6f744f776e65720008042d014f6e6c7920746865206163636f756e742074686174206f726967696e616c6c79206372656174656420746865206d756c74697369672069732061626c6520746f2063616e63656c2069742e2c4e6f54696d65706f696e740009041d014e6f2074696d65706f696e742077617320676976656e2c2079657420746865206d756c7469736967206f7065726174696f6e20697320616c726561647920756e6465727761792e3857726f6e6754696d65706f696e74000a042d014120646966666572656e742074696d65706f696e742077617320676976656e20746f20746865206d756c7469736967206f7065726174696f6e207468617420697320756e6465727761792e4c556e657870656374656454696d65706f696e74000b04f4412074696d65706f696e742077617320676976656e2c20796574206e6f206d756c7469736967206f7065726174696f6e20697320756e6465727761792e3c4d6178576569676874546f6f4c6f77000c04d0546865206d6178696d756d2077656967687420696e666f726d6174696f6e2070726f76696465642077617320746f6f206c6f772e34416c726561647953746f726564000d04a0546865206461746120746f2062652073746f72656420697320616c72656164792073746f7265642e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a0909090d08083870616c6c65745f636f756e63696c48436f756e63696c5374616765557064617465042c426c6f636b4e756d626572011000080114737461676511080164436f756e63696c53746167653c426c6f636b4e756d6265723e0001286368616e6765645f617410012c426c6f636b4e756d62657200001108083870616c6c65745f636f756e63696c30436f756e63696c5374616765042c426c6f636b4e756d6265720110010c28416e6e6f756e63696e6704001508018c436f756e63696c5374616765416e6e6f756e63696e673c426c6f636b4e756d6265723e00000020456c656374696f6e040019080150436f756e63696c5374616765456c656374696f6e0001001049646c6504001d080174436f756e63696c537461676549646c653c426c6f636b4e756d6265723e000200001508083870616c6c65745f636f756e63696c58436f756e63696c5374616765416e6e6f756e63696e67042c426c6f636b4e756d62657201100008014063616e646964617465735f636f756e7410010c75333200011c656e64735f617410012c426c6f636b4e756d62657200001908083870616c6c65745f636f756e63696c50436f756e63696c5374616765456c656374696f6e000004014063616e646964617465735f636f756e7410010c75333200001d08083870616c6c65745f636f756e63696c40436f756e63696c537461676549646c65042c426c6f636b4e756d62657201100004011c656e64735f617410012c426c6f636b4e756d626572000021080c4c626f756e6465645f636f6c6c656374696f6e73407765616b5f626f756e6465645f766563385765616b426f756e646564566563080454012508045300000400290801185665633c543e00002508083870616c6c65745f636f756e63696c34436f756e63696c4d656d62657210244163636f756e7449640100204d656d626572496401281c42616c616e636501182c426c6f636b4e756d6265720110001801487374616b696e675f6163636f756e745f69640001244163636f756e7449640001447265776172645f6163636f756e745f69640001244163636f756e7449640001346d656d626572736869705f69642801204d656d62657249640001147374616b6518011c42616c616e63650001486c6173745f7061796d656e745f626c6f636b10012c426c6f636b4e756d626572000134756e706169645f72657761726418011c42616c616e6365000029080000022508002d08083870616c6c65745f636f756e63696c2443616e64696461746510244163636f756e74496401001c42616c616e636501181048617368012c24566f7465506f7765720118001801487374616b696e675f6163636f756e745f69640001244163636f756e7449640001447265776172645f6163636f756e745f69640001244163636f756e7449640001206379636c655f696428010c7536340001147374616b6518011c42616c616e6365000128766f74655f706f776572180124566f7465506f7765720001246e6f74655f68617368790201304f7074696f6e3c486173683e00003108083870616c6c65745f636f756e63696c144572726f720404540001603c41726974686d657469634572726f72000004c8556e65787065637465642061726974686d65746963206572726f7220286f766572666c6f77202f20756e646572666c6f7729244261644f726967696e000104484f726967696e20697320696e76616c69642e4043616e7443616e6469646174654e6f7700020439015573657220747269656420746f20616e6e6f756e63652063616e646964616379206f757473696465206f66207468652063616e64696461637920616e6e6f756e63656d656e7420706572696f642e4c43616e7452656c656173655374616b654e6f77000304f05573657220747269656420746f2072656c65617365207374616b65206f757473696465206f66207468652072657665616c696e6720706572696f642e5043616e6469646163795374616b65546f6f4c6f77000404b043616e64696461746520686176656e27742070726f76696465642073756666696369656e74207374616b652e4843616e7443616e6469646174655477696365000504f45573657220747269656420746f20616e6e6f756e63652063616e64696461637920747769636520696e207468652073616d6520656c656374696f6e732e40436f6e666c696374696e675374616b650006085d015573657220747269656420746f20616e6e6f756e63652063616e646964616379207769746820616e206163636f756e742074686174206861732074686520636f6e666c696374696e672074797065206f66207374616b653901776974682063616e646964616379207374616b6520616e6420686173206e6f7420656e6f7567682062616c616e636520666f72207374616b696e6720666f7220626f746820707572706f7365732e405374616b655374696c6c4e6565646564000704dc436f756e63696c206d656d62657220616e642063616e646964617465732063616e2774207769746864726177207374616b65207965742e1c4e6f5374616b65000804c45573657220747269656420746f2072656c65617365207374616b65207768656e206e6f207374616b65206578697374732e74496e73756666696369656e7442616c616e6365466f725374616b696e67000904ac496e73756666696369656e742062616c616e636520666f722063616e646964616379207374616b696e672e4c43616e74566f7465466f72596f757273656c66000a048443616e6469646174652063616e277420766f746520666f722068696d73656c662e5c4d656d62657249644e6f744d617463684163636f756e74000b044c496e76616c6964206d656d626572736869702e68496e76616c69644163636f756e74546f5374616b655265757365000c08510154686520636f6d62696e6174696f6e206f66206d656d6265727368697020696420616e64206163636f756e7420696420697320696e76616c696420666f7220756e7374616b696e6720616e206578697374696e674063616e646964616379207374616b652e444e6f7443616e6469646174696e674e6f77000d04d85573657220747269656420746f2077697468647261772063616e646964616379207768656e206e6f742063616e6469646174696e672e6043616e74576974686472617743616e6469646163794e6f77000e04190143616e27742077697468647261772063616e646964616379206f757473696465206f66207468652063616e64696461637920616e6e6f756e63656d656e7420706572696f642e304e6f74436f756e63696c6f72000f0478546865206d656d626572206973206e6f74206120636f756e63696c6f722e88496e73756666696369656e7446756e6473466f7246756e64696e6752657175657374001004f0496e737566666963656e742066756e647320696e20636f756e63696c20666f7220657865637574696e67202746756e64696e67205265717565737427585a65726f42616c616e636546756e64526571756573740011045c46756e642072657175657374206e6f2062616c616e636568526570656174656446756e64526571756573744163636f756e74001204fc5468652073616d65206163636f756e7420697320726563696576696e672066756e64732066726f6d207468652073616d65207265717565737420747769636550456d70747946756e64696e675265717565737473001304ac46756e64696e6720726571756573747320776974686f757420726563696576696e67206163636f756e747370496e73756666696369656e74546f6b656e73466f7246756e64696e67001404f8496e73756666696369656e7420746f6b656e7320666f722066756e64696e6720286f6e206d656d62657220636f6e74726f6c6c6572206163636f756e7429445a65726f546f6b656e7346756e64696e670015047c547279696e6720746f2066756e642077697468207a65726f20746f6b656e735443616e646964617465446f65734e6f7445786973740016045843616e646964617465206964206e6f7420666f756e6478496e73756666696369656e7442616c616e6365466f725472616e73666572001704b443616e6e6f742077697468647261773a20696e73756666696369656e74206275646765742062616c616e63652e0438436f756e63696c206572726f72733508084470616c6c65745f7265666572656e64756d3c5265666572656e64756d5374616765082c426c6f636b4e756d62657201104c496e7465726d65646961746557696e6e657273013908010c20496e61637469766500000018566f74696e6704003d0801885265666572656e64756d5374616765566f74696e673c426c6f636b4e756d6265723e0001002452657665616c696e670400410801e85265666572656e64756d537461676552657665616c696e673c426c6f636b4e756d6265722c20496e7465726d65646961746557696e6e6572733e0002000039080c4c626f756e6465645f636f6c6c656374696f6e73407765616b5f626f756e6465645f766563385765616b426f756e646564566563080454012501045300000400210101185665633c543e00003d08084470616c6c65745f7265666572656e64756d545265666572656e64756d5374616765566f74696e67042c426c6f636b4e756d62657201100010011c7374617274656410012c426c6f636b4e756d62657200015077696e6e696e675f7461726765745f636f756e7410010c75333200014063757272656e745f6379636c655f696428010c75363400011c656e64735f617410012c426c6f636b4e756d62657200004108084470616c6c65745f7265666572656e64756d605265666572656e64756d537461676552657665616c696e67082c426c6f636b4e756d62657201104c496e7465726d65646961746557696e6e6572730139080014011c7374617274656410012c426c6f636b4e756d62657200015077696e6e696e675f7461726765745f636f756e7410010c753332000150696e7465726d6564696174655f77696e6e6572733908014c496e7465726d65646961746557696e6e65727300014063757272656e745f6379636c655f696428010c75363400011c656e64735f617410012c426c6f636b4e756d62657200004508084470616c6c65745f7265666572656e64756d2043617374566f74650c1048617368012c2043757272656e63790118204d656d6265724964012800100128636f6d6d69746d656e742c0110486173680001206379636c655f696428010c7536340001147374616b6518012043757272656e6379000120766f74655f666f72350101404f7074696f6e3c4d656d62657249643e00004908084470616c6c65745f7265666572656e64756d144572726f72080454000449000138244261644f726967696e000004444f726967696e20697320696e76616c6964505265666572656e64756d4e6f7452756e6e696e67000104a85265666572656e64756d206973206e6f742072756e6e696e67207768656e20657870656374656420746f5852657665616c696e674e6f74496e50726f6772657373000204b052657665616c696e67207374616765206973206e6f7420696e2070726f6772657373207269676874206e6f775c436f6e666c6963745374616b65734f6e4163636f756e74000304b05374616b696e67206163636f756e7420636f6e7461696e7320636f6e666c696374696e67207374616b65732e68496e73756666696369656e7442616c616e6365546f5374616b650004049c4163636f756e7420496e73756666696369656e7420467265652042616c616e636520286e6f772944496e73756666696369656e745374616b65000504a8496e73756666696369656e74207374616b652070726f766964656420746f2063617374206120766f746534496e76616c696452657665616c000604190153616c7420616e64207265666572656e64756d206f7074696f6e2070726f766964656420646f6e277420636f72726573706f6e6420746f2074686520636f6d6d69746d656e742c496e76616c6964566f7465000704a4566f746520666f72206e6f74206578697374696e67206f7074696f6e207761732072657665616c65643c566f74654e6f744578697374696e670008049c547279696e6720746f2072657665616c20766f7465207468617420776173206e6f74206361737454416c7265616479566f746564546869734379636c65000904b8547279696e6720746f20766f7465206d756c7469706c652074696d6520696e207468652073616d65206379636c6560556e7374616b696e67566f7465496e53616d654379636c65000a04a0496e76616c69642074696d6520746f2072656c6561736520746865206c6f636b6564207374616b652c53616c74546f6f4c6f6e67000b044053616c7420697320746f6f206c6f6e6748556e7374616b696e67466f7262696464656e000c04f0556e7374616b696e6720686173206265656e20666f7262696464656e20666f7220746865207573657220286174206c6561737420666f72206e6f7729784163636f756e74416c72656164794f707465644f75744f66566f74696e67000d041d014120766f74652063616e6e6f7420626520636173742066726f6d20616e206163636f756e74207468617420616c7265616479206f70746564206f7574206f6620766f74696e672e04445265666572656e64756d206572726f72734d08084470616c6c65745f6d656d62657273686970404d656d626572736869704f626a65637408244163636f756e74496401001048617368012c0014012c68616e646c655f686173682c011048617368000130726f6f745f6163636f756e740001244163636f756e744964000148636f6e74726f6c6c65725f6163636f756e740001244163636f756e7449640001207665726966696564980110626f6f6c00011c696e766974657310010c75333200005108084470616c6c65745f6d656d626572736869706c5374616b696e674163636f756e744d656d62657242696e64696e6704204d656d62657249640128000801246d656d6265725f69642801204d656d6265724964000124636f6e6669726d6564980110626f6f6c00005508084470616c6c65745f6d656d62657273686970144572726f720404540001587c4e6f74456e6f75676842616c616e6365546f4275794d656d62657273686970000004944e6f7420656e6f7567682062616c616e636520746f20627579206d656d626572736869702e64436f6e74726f6c6c65724163636f756e74526571756972656400010470436f6e74726f6c6c6572206163636f756e742072657175697265642e4c526f6f744163636f756e74526571756972656400020458526f6f74206163636f756e742072657175697265642e38556e7369676e65644f726967696e00030440556e7369676e6564206f726967696e2e544d656d62657250726f66696c654e6f74466f756e64000404b44d656d6265722070726f66696c65206e6f7420666f756e642028696e76616c6964206d656d626572206964292e5c48616e646c65416c7265616479526567697374657265640005046848616e646c6520616c726561647920726567697374657265642e9848616e646c654d757374426550726f7669646564447572696e67526567697374726174696f6e000604b048616e646c65206d7573742062652070726f766964656420647572696e6720726567697374726174696f6e2e4c526566657272657249734e6f744d656d626572000704d043616e6e6f742066696e642061206d656d6265727368697020666f7220612070726f76696465642072656665727265722069642e8443616e6e6f745472616e73666572496e7669746573466f724e6f744d656d6265720008049853686f756c642062652061206d656d62657220746f207265636569766520696e76697465732e404e6f74456e6f756768496e7669746573000904ac4e6f7420656e6f75676820696e766974657320746f20706572666f726d20616e206f7065726174696f6e2e60576f726b696e6747726f75704c65616465724e6f74536574000a04ac4d656d6265727368697020776f726b696e672067726f7570206c6561646572206973206e6f74207365742e845374616b696e674163636f756e744973416c726561647952656769737465726564000b04b85374616b696e67206163636f756e74206973207265676973746572656420666f7220736f6d65206d656d6265722e645374616b696e674163636f756e74446f65736e744578697374000c04b45374616b696e67206163636f756e7420666f72206d656d6265727368697020646f65736e27742065786973742e785374616b696e674163636f756e74416c7265616479436f6e6669726d6564000d04ac5374616b696e67206163636f756e742068617320616c7265616479206265656e20636f6e6669726d65642eb0576f726b696e6747726f757042756467657449734e6f7453756666696369656e74466f72496e766974696e67000e08490143616e6e6f7420696e766974652061206d656d6265722e20576f726b696e672067726f75702062616c616e6365206973206e6f742073756666696369656e7420746f20736574207468652064656661756c742062616c616e63652e3c436f6e666c696374696e674c6f636b000f04410143616e6e6f7420696e766974652061206d656d6265722e2054686520636f6e74726f6c6c6572206163636f756e742068617320616e206578697374696e6720636f6e666c696374696e67206c6f636b2e8c43616e6e6f74457863656564526566657272616c43757450657263656e744c696d6974001004010143616e6e6f7420736574206120726566657272616c206375742070657263656e742076616c75652e20546865206c696d6974207761732065786365656465642e5c436f6e666c6963745374616b65734f6e4163636f756e74001104b05374616b696e67206163636f756e7420636f6e7461696e7320636f6e666c696374696e67207374616b65732e7c496e73756666696369656e7442616c616e6365546f436f7665725374616b6500120490496e73756666696369656e742062616c616e636520746f20636f766572207374616b652e504769664c6f636b45786365656473437265646974001304ac4c6f636b656420616d6f756e742069732067726561746572207468616e2063726564697420616d6f756e7464496e73756666696369656e7442616c616e6365546f47696674001404c047696674657220646f65736e277420686176652073756666696369656e742062616c616e636520746f2063726564697484496e73756666696369656e7442616c616e6365546f436f7665725061796d656e7400150498496e73756666696369656e742062616c616e636520746f20636f766572207061796d656e742e048c4d656d62657273686970206d6f64756c6520707265646566696e6564206572726f72735908083070616c6c65745f666f72756d2043617465676f72790c2843617465676f7279496401281048617368012c44537469636b696564546872656164496473015d08002001287469746c655f686173682c0110486173680001406465736372697074696f6e5f686173682c0110486173680001206172636869766564980110626f6f6c0001606e756d5f6469726563745f73756263617465676f7269657310010c7533320001486e756d5f6469726563745f7468726561647310010c7533320001546e756d5f6469726563745f6d6f64657261746f727310010c753332000148706172656e745f63617465676f72795f6964350101484f7074696f6e3c43617465676f727949643e000144737469636b795f7468726561645f6964735d080144537469636b69656454687265616449647300005d080c4c626f756e6465645f636f6c6c656374696f6e7344626f756e6465645f62747265655f7365743c426f756e646564425472656553657408045401280453000004006901012c42547265655365743c543e00006108083070616c6c65745f666f72756d185468726561640c2c466f72756d55736572496401282843617465676f72794964012848526570617961626c65426c6f6174426f6e6401e1010010012c63617465676f72795f696428012843617465676f72794964000124617574686f725f696428012c466f72756d55736572496400013c636c65616e75705f7061795f6f6666e1010148526570617961626c65426c6f6174426f6e640001606e756d6265725f6f665f6564697461626c655f706f7374732801344e756d6265724f66506f73747300006508083070616c6c65745f666f72756d10506f7374142c466f72756d557365724964012820546872656164496401281048617368012c2c426c6f636b4e756d626572011048526570617961626c65426c6f6174426f6e6401e101001401247468726561645f69642801205468726561644964000124746578745f686173682c011048617368000124617574686f725f696428012c466f72756d55736572496400013c636c65616e75705f7061795f6f6666e1010148526570617961626c65426c6f6174426f6e6400012c6c6173745f65646974656410012c426c6f636b4e756d62657200006908083070616c6c65745f666f72756d144572726f7204045400016c3c41726974686d657469634572726f72000004c8556e65787065637465642061726974686d65746963206572726f7220286f766572666c6f77202f20756e646572666c6f7729484f726967696e4e6f74466f72756d4c656164000104b44f726967696e20646f65736e277420636f72726573706f6e6420746f20616e79206c656164206163636f756e7468466f72756d5573657249644e6f744d617463684163636f756e7400020490466f72756d2075736572206964206e6f74206d6174636820697473206163636f756e742e684d6f64657261746f7249644e6f744d617463684163636f756e740003048c4d6f64657261746f72206964206e6f74206d6174636820697473206163636f756e742e7c4163636f756e74446f65734e6f744d61746368546872656164417574686f7200040498546872656164206e6f7420617574686f7265642062792074686520676976656e20757365722e48546872656164446f65734e6f7445786973740005045454687265616420646f6573206e6f742065786973747c4d6f64657261746f724d6f6465726174654f726967696e43617465676f7279000604d04d6f64657261746f722063616e2774206d6f6465726174652063617465676f727920636f6e7461696e696e67207468726561642e904d6f64657261746f724d6f64657261746544657374696e6174696f6e43617465676f7279000704b84d6f64657261746f722063616e2774206d6f6465726174652064657374696e6174696f6e2063617465676f72792e445468726561644d6f7665496e76616c6964000804984f726967696e206973207468652073616d65206173207468652064657374696e6174696f6e2e545468726561644e6f744265696e675570646174656400090464546872656164206e6f74206265696e6720757064617465642e90496e73756666696369656e7442616c616e6365466f725468726561644372656174696f6e000a048c4e6f7420656e6f7567682062616c616e636520746f20637265617465207468726561649843616e6e6f7444656c657465546872656164576974684f75747374616e64696e67506f737473000b04c441207468726561642077697468206f75747374616e64696e6720706f7374732063616e6e6f742062652072656d6f76656440506f7374446f65734e6f744578697374000c0450506f737420646f6573206e6f742065786973742e744163636f756e74446f65734e6f744d61746368506f7374417574686f72000d048c4163636f756e7420646f6573206e6f74206d6174636820706f737420617574686f722e68496e73756666696369656e7442616c616e6365466f72506f7374000e04684e6f7420656e6f7567682062616c616e636520746f20706f73745c43617465676f72794e6f744265696e6755706461746564000f046c43617465676f7279206e6f74206265696e6720757064617465642e64416e636573746f7243617465676f7279496d6d757461626c65001004d4416e636573746f722063617465676f727920696d6d757461626c652c20692e652e2064656c65746564206f72206172636869766564744d617856616c696443617465676f727944657074684578636565646564001104984d6178696d756d2076616c69642063617465676f72792064657074682065786365656465642e5043617465676f7279446f65734e6f7445786973740012046043617465676f727920646f6573206e6f742065786973742e7443617465676f72794d6f64657261746f72446f65734e6f744578697374001304c850726f7669646564206d6f64657261746f72206973206e6f7420676976656e2063617465676f7279206d6f64657261746f725c43617465676f72794e6f74456d707479546872656164730014049443617465676f7279207374696c6c20636f6e7461696e7320736f6d6520746872656164732e6843617465676f72794e6f74456d70747943617465676f72696573001504ac43617465676f7279207374696c6c20636f6e7461696e7320736f6d652073756263617465676f726965732e6c4d6f64657261746f7243616e7444656c65746543617465676f7279001604884e6f207065726d697373696f6e7320746f2064656c6574652063617465676f72792e6c4d6f64657261746f7243616e7455706461746543617465676f7279001704884e6f207065726d697373696f6e7320746f207570646174652063617465676f72792e304d617053697a654c696d6974001804904d6178696d756d2073697a65206f662073746f72616765206d617020657863656564656484506174684c656e67746853686f756c644265477265617465725468616e5a65726f001904b443617465676f72792070617468206c656e2073686f756c642062652067726561746572207468616e207a65726f884d61784e756d6265724f66537469636b696564546872656164734578636565646564001a04e04d6178696d756d206e756d626572206f6620737469636b6965642074687265616473207065722063617465676f7279206578636565646564045c466f72756d20707265646566696e6564206572726f72736d08084c70616c6c65745f636f6e737469747574696f6e40436f6e737469747574696f6e496e666f041048617368012c00040124746578745f686173682c01104861736800007108083470616c6c65745f626f756e747930426f756e74795265636f7264101c42616c616e636501182c426c6f636b4e756d6265720110204d656d626572496401285c436c6f736564436f6e747261637457686974656c6973740175080014013c6372656174696f6e5f706172616d737908012501426f756e7479506172616d65746572733c42616c616e63652c20426c6f636b4e756d6265722c204d656d62657249642c20436c6f736564436f6e747261637457686974656c6973743e000134746f74616c5f66756e64696e6718011c42616c616e63650001246d696c6573746f6e6581080170426f756e74794d696c6573746f6e653c426c6f636b4e756d6265723e00015c6163746976655f776f726b5f656e7472795f636f756e7410010c7533320001606861735f756e706169645f6f7261636c655f726577617264980110626f6f6c000075080c4c626f756e6465645f636f6c6c656374696f6e7344626f756e6465645f62747265655f7365743c426f756e646564425472656553657408045401280453000004006901012c42547265655365743c543e00007908083470616c6c65745f626f756e747940426f756e7479506172616d6574657273101c42616c616e636501182c426c6f636b4e756d6265720110204d656d626572496401285c436c6f736564436f6e747261637457686974656c697374017508001c01186f7261636c6579010154426f756e74794163746f723c4d656d62657249643e000134636f6e74726163745f747970657d0801b84173737572616e6365436f6e7472616374547970653c436c6f736564436f6e747261637457686974656c6973743e00011c63726561746f7279010154426f756e74794163746f723c4d656d62657249643e00011863686572727918011c42616c616e63650001346f7261636c655f72657761726418011c42616c616e6365000134656e7472616e745f7374616b6518011c42616c616e636500013066756e64696e675f747970658101018446756e64696e67547970653c426c6f636b4e756d6265722c2042616c616e63653e00007d08083470616c6c65745f626f756e7479544173737572616e6365436f6e747261637454797065045c436c6f736564436f6e747261637457686974656c6973740175080108104f70656e00000018436c6f73656404007508015c436c6f736564436f6e747261637457686974656c697374000100008108083470616c6c65745f626f756e74793c426f756e74794d696c6573746f6e65042c426c6f636b4e756d626572011001141c43726561746564080128637265617465645f617410012c426c6f636b4e756d6265720001446861735f636f6e747269627574696f6e73980110626f6f6c0000005c426f756e74794d617846756e64696e675265616368656400010034576f726b5375626d6974746564000200285465726d696e61746564000300444a7564676d656e745375626d69747465640401447375636365737366756c5f626f756e7479980110626f6f6c00040000850800000408287901008908083470616c6c65745f626f756e747930436f6e747269627574696f6e0404540000080118616d6f756e7418013042616c616e63654f663c543e00017866756e6465725f73746174655f626c6f61745f626f6e645f616d6f756e7418013042616c616e63654f663c543e00008d08083470616c6c65745f626f756e74792c456e7472795265636f72640c244163636f756e7449640100204d656d626572496401282c426c6f636b4e756d6265720110001001246d656d6265725f69642801204d656d62657249640001487374616b696e675f6163636f756e745f69640001244163636f756e7449640001307375626d69747465645f617410012c426c6f636b4e756d626572000138776f726b5f7375626d6974746564980110626f6f6c00009108083470616c6c65745f626f756e7479144572726f7204045400018c3c41726974686d657469634572726f72000004c8556e65787065637465642061726974686d65746963206572726f7220286f766572666c6f77202f20756e646572666c6f7729b04d696e46756e64696e67416d6f756e7443616e6e6f744265477265617465725468616e4d6178416d6f756e74000104d44d696e2066756e64696e6720616d6f756e742063616e6e6f742062652067726561746572207468616e206d617820616d6f756e742e44426f756e7479446f65736e74457869737400020450426f756e747920646f65736e742065786973742e605377697463684f7261636c654f726967696e4973526f6f7400030489014f726967696e20697320726f6f742c20736f20737769746368696e67206f7261636c65206973206e6f7420616c6c6f77656420696e20746869732065787472696e7369632e202863616c6c207377697463685f6f7261636c655f61735f726f6f742974496e76616c69645374616765556e657870656374656446756e64696e67000404c8556e657870656374656420626f756e747920737461676520666f7220616e206f7065726174696f6e3a2046756e64696e672ea8496e76616c69645374616765556e65787065637465644e6f46756e64696e67436f6e7472696275746564000504fc556e657870656374656420626f756e747920737461676520666f7220616e206f7065726174696f6e3a204e6f46756e64696e67436f6e74726962757465642e7c496e76616c69645374616765556e657870656374656443616e63656c6c6564000604d0556e657870656374656420626f756e747920737461676520666f7220616e206f7065726174696f6e3a2043616e63656c6c65642e90496e76616c69645374616765556e6578706563746564576f726b5375626d697373696f6e000704e4556e657870656374656420626f756e747920737461676520666f7220616e206f7065726174696f6e3a20576f726b5375626d697373696f6e2e78496e76616c69645374616765556e65787065637465644a7564676d656e74000804cc556e657870656374656420626f756e747920737461676520666f7220616e206f7065726174696f6e3a204a7564676d656e742ec0496e76616c69645374616765556e65787065637465645375636365737366756c426f756e74795769746864726177616c0009041501556e657870656374656420626f756e747920737461676520666f7220616e206f7065726174696f6e3a205375636365737366756c426f756e74795769746864726177616c2eb0496e76616c69645374616765556e65787065637465644661696c6564426f756e74795769746864726177616c000a040501556e657870656374656420626f756e747920737461676520666f7220616e206f7065726174696f6e3a204661696c6564426f756e74795769746864726177616c2e70496e73756666696369656e7442616c616e6365466f72426f756e7479000b04a4496e73756666696369656e742062616c616e636520666f72206120626f756e7479206368657272792e644e6f426f756e7479436f6e747269627574696f6e466f756e64000c048443616e6e6f7420666f756e6420626f756e747920636f6e747269627574696f6e2e6c496e73756666696369656e7442616c616e6365466f725374616b65000d04a05468657265206973206e6f7420656e6f7567682062616c616e636520666f722061207374616b652e44436f6e666c696374696e675374616b6573000e04bc54686520636f6e666c696374696e67207374616b6520646973636f76657265642e2043616e6e6f74207374616b652e50576f726b456e747279446f65736e744578697374000f0460576f726b20656e74727920646f65736e742065786973742e704368657272794c6573735468656e4d696e696d756d416c6c6f77656400100484436865727279206c657373207468616e206d696e696d756d20616c6c6f7765642e9843616e6e6f745375626d6974576f726b546f436c6f736564436f6e7472616374426f756e74790011085101496e636f6d70617469626c65206173737572616e636520636f6e7472616374207479706520666f722061206d656d6265723a2063616e6e6f74207375626d697420776f726b20746f207468652027636c6f7365646c6173737572616e63652720626f756e747920636f6e74726163742e7c436c6f736564436f6e74726163744d656d6265724c6973744973456d707479001204290143616e6e6f742063726561746520612027636c6f736564206173737572616e636520636f6e74726163742720626f756e7479207769746820656d707479206d656d626572206c6973742e88436c6f736564436f6e74726163744d656d6265724c6973744973546f6f4c61726765001308290143616e6e6f742063726561746520612027636c6f736564206173737572616e636520636f6e74726163742720626f756e74792077697468206d656d626572206c697374206c6172676572887468616e20616c6c6f776564206d617820776f726b20656e747279206c696d69742e70436c6f736564436f6e74726163744d656d6265724e6f74466f756e64001404410127636c6f736564206173737572616e636520636f6e74726163742720626f756e7479206d656d626572206c6973742063616e206f6e6c7920696e636c756465206578697374696e67206d656d6265727354496e76616c69644f7261636c654d656d6265724964001504fc50726f7669646564206f7261636c65206d656d62657220696420646f6573206e6f742062656c6f6e6720746f20616e206578697374696e67206d656d62657278496e76616c69645374616b696e674163636f756e74466f724d656d626572001604ac5374616b696e67206163636f756e7420646f65736e27742062656c6f6e6720746f2061206d656d6265722e405a65726f57696e6e65725265776172640017048c43616e6e6f7420736574207a65726f2072657761726420666f722077696e6e6572732e98546f74616c52657761726453686f756c644265457175616c546f546f74616c46756e64696e67001804150154686520746f74616c2072657761726420666f722077696e6e6572732073686f756c6420626520657175616c20746f20746f74616c20626f756e74792066756e64696e672e74456e7472616e745374616b6549734c6573735468616e4d696e696e756d0019042d0143616e6e6f7420637265617465206120626f756e7479207769746820616e20656e7472616e74207374616b65206973206c657373207468616e207265717569726564206d696e696d756d2e6446756e64696e67416d6f756e7443616e6e6f7442655a65726f001a04e843616e6e6f7420637265617465206120626f756e74792077697468207a65726f2066756e64696e6720616d6f756e7420706172616d657465722e6446756e64696e67506572696f6443616e6e6f7442655a65726f001b04e843616e6e6f7420637265617465206120626f756e74792077697468207a65726f2066756e64696e6720706572696f6420706172616d657465722e7457696e6e657253686f756c64486173576f726b5375626d697373696f6e001c04f0496e76616c6964206a7564676d656e74202d20616c6c2077696e6e6572732073686f756c64206861766520776f726b207375626d697373696f6e732e80496e76616c6964436f6e7472696275746f724163746f72537065636966696564001d0470426f756e747920636f6e7472696275746f72206e6f7420666f756e646c496e76616c69644f7261636c654163746f72537065636966696564001e045c426f756e7479206f7261636c65206e6f7420666f756e6474496e76616c6964456e7472616e74576f726b6572537065636966696564001f04a44d656d62657220737065636966696564206973206e6f7420616e20656e7472616e7420776f726b657270496e76616c696443726561746f724163746f72537065636966696564002004a8496e76616c69642043726561746f72204163746f7220666f7220426f756e74792073706563696669656474576f726b456e747279446f65736e7442656c6f6e67546f576f726b6572002104f8576f726b657220747269656420746f20616363657373206120776f726b20656e747279207468617420646f65736e27742062656c6f6e6720746f2068696d704f7261636c65526577617264416c726561647957697468647261776e002204884f7261636c65206861766520616c7265616479206265656e2077697468647261776e047c426f756e74792070616c6c657420707265646566696e6564206572726f72739508086070616c6c65745f6a6f7973747265616d5f7574696c697479144572726f7204045400010c80496e73756666696369656e7446756e6473466f724275646765745570646174650000041d01496e73756666696369656e742066756e647320666f72202755706461746520576f726b696e672047726f757020427564676574272070726f706f73616c20657865637574696f6e385a65726f546f6b656e734275726e00010468547279696e6720746f206275726e207a65726f20746f6b656e7360496e73756666696369656e7446756e6473466f724275726e00020478496e73756666696369656e742066756e647320666f72206275726e696e670478436f646578206d6f64756c6520707265646566696e6564206572726f727399080c3870616c6c65745f636f6e74656e741474797065732c566964656f5265636f726410244368616e6e656c49640128204f776e65644e6674019d0838566964656f41737365747353657401bd0848526570617961626c65426c6f6174426f6e6401e10100100128696e5f6368616e6e656c2801244368616e6e656c49640001286e66745f737461747573c10801404f7074696f6e3c4f776e65644e66743e000130646174615f6f626a65637473bd080138566964656f417373657473536574000158766964656f5f73746174655f626c6f61745f626f6e64e1010148526570617961626c65426c6f6174426f6e6400009d08103870616c6c65745f636f6e74656e740c6e6674147479706573204f776e65644e66740c4c5472616e73616374696f6e616c53746174757301a108204d656d626572496401282441756374696f6e49640128001001146f776e6572b90801484e66744f776e65723c4d656d62657249643e0001507472616e73616374696f6e616c5f737461747573a108014c5472616e73616374696f6e616c53746174757300013c63726561746f725f726f79616c74791102013c4f7074696f6e3c526f79616c74793e00014c6f70656e5f61756374696f6e735f6e6f6e636528012441756374696f6e49640000a108103870616c6c65745f636f6e74656e740c6e6674147479706573645472616e73616374696f6e616c5374617475735265636f726410204d656d626572496401281c42616c616e6365011848456e676c69736841756374696f6e5479706501a5083c4f70656e41756374696f6e5479706501b50801141049646c6500000058496e697469617465644f66666572546f4d656d62657208002801204d656d626572496400004501013c4f7074696f6e3c42616c616e63653e00010038456e676c69736841756374696f6e0400a5080148456e676c69736841756374696f6e547970650002002c4f70656e41756374696f6e0400b508013c4f70656e41756374696f6e54797065000300184275794e6f77040018011c42616c616e636500040000a508103870616c6c65745f636f6e74656e740c6e667414747970657350456e676c69736841756374696f6e5265636f7264102c426c6f636b4e756d62657201101c42616c616e63650118204d656d626572496401284c4e667441756374696f6e57686974656c69737401a908002001387374617274696e675f707269636518011c42616c616e63650001346275795f6e6f775f70726963654501013c4f7074696f6e3c42616c616e63653e00012477686974656c697374a908014c4e667441756374696f6e57686974656c69737400010c656e6410012c426c6f636b4e756d626572000114737461727410012c426c6f636b4e756d626572000140657874656e73696f6e5f706572696f6410012c426c6f636b4e756d6265720001306d696e5f6269645f7374657018011c42616c616e636500011c746f705f626964ad0801b04f7074696f6e3c456e676c69736841756374696f6e4269643c42616c616e63652c204d656d62657249643e3e0000a9080c4c626f756e6465645f636f6c6c656374696f6e7344626f756e6465645f62747265655f7365743c426f756e646564425472656553657408045401280453000004006901012c42547265655365743c543e0000ad0804184f7074696f6e04045401b1080108104e6f6e6500000010536f6d650400b1080000010000b108103870616c6c65745f636f6e74656e740c6e667414747970657344456e676c69736841756374696f6e426964081c42616c616e63650118204d656d6265724964012800080118616d6f756e7418011c42616c616e63650001246269646465725f69642801204d656d62657249640000b508103870616c6c65745f636f6e74656e740c6e6674147479706573444f70656e41756374696f6e5265636f7264102c426c6f636b4e756d62657201102441756374696f6e496401281c42616c616e636501184c4e667441756374696f6e57686974656c69737401a908001801387374617274696e675f707269636518011c42616c616e63650001346275795f6e6f775f70726963654501013c4f7074696f6e3c42616c616e63653e00012477686974656c697374a908014c4e667441756374696f6e57686974656c6973740001446269645f6c6f636b5f6475726174696f6e10012c426c6f636b4e756d62657200012861756374696f6e5f696428012441756374696f6e4964000114737461727410012c426c6f636b4e756d6265720000b908103870616c6c65745f636f6e74656e740c6e6674147479706573204e66744f776e657204204d656d626572496401280108304368616e6e656c4f776e6572000000184d656d62657204002801204d656d626572496400010000bd080c4c626f756e6465645f636f6c6c656374696f6e7344626f756e6465645f62747265655f7365743c426f756e646564425472656553657408045401280453000004006901012c42547265655365743c543e0000c10804184f7074696f6e040454019d080108104e6f6e6500000010536f6d6504009d080000010000c508103870616c6c65745f636f6e74656e742c7065726d697373696f6e733463757261746f725f67726f75704843757261746f7247726f75705265636f7264085c43757261746f7247726f757043757261746f72734d617001c908704d6f6465726174696f6e5065726d697373696f6e7342794c6576656c01cd08000c012063757261746f7273c908015c43757261746f7247726f757043757261746f72734d6170000118616374697665980110626f6f6c0001507065726d697373696f6e735f62795f6c6576656ccd0801704d6f6465726174696f6e5065726d697373696f6e7342794c6576656c0000c9080c4c626f756e6465645f636f6c6c656374696f6e7344626f756e6465645f62747265655f6d61703c426f756e64656442547265654d61700c044b0128045601b501045300000400c501013842547265654d61703c4b2c20563e0000cd080c4c626f756e6465645f636f6c6c656374696f6e7344626f756e6465645f62747265655f6d61703c426f756e64656442547265654d61700c044b0108045601d108045300000400d508013842547265654d61703c4b2c20563e0000d1080c4c626f756e6465645f636f6c6c656374696f6e7344626f756e6465645f62747265655f7365743c426f756e6465644254726565536574080454015d020453000004005902012c42547265655365743c543e0000d508042042547265654d617008044b0108045601d108000400d908000000d908000002dd0800dd080000040808d10800e108103870616c6c65745f636f6e74656e740c6e6674147479706573504f70656e41756374696f6e4269645265636f72640c1c42616c616e636501182c426c6f636b4e756d62657201102441756374696f6e49640128000c0118616d6f756e7418011c42616c616e63650001346d6164655f61745f626c6f636b10012c426c6f636b4e756d62657200012861756374696f6e5f696428012441756374696f6e49640000e5080c3870616c6c65745f636f6e74656e74186572726f7273144572726f7204045400010502704368616e6e656c5374617465426c6f6174426f6e644368616e676564000004e4496e76616c69642065787472696e7369632063616c6c3a204368616e6e656c20737461746520626c6f617420626f6e64206368616e6765642e68566964656f5374617465426c6f6174426f6e644368616e676564000104dc496e76616c69642065787472696e7369632063616c6c3a20766964656f20737461746520626c6f617420626f6e64206368616e6765642e544d696e436173686f757456616c7565546f6f4c6f77000204d8417474656d707420746f20736574206d696e696d756d20636173686f757420616c6c6f7765642062656c6f7720746865206c696d6974584d6178436173686f757456616c7565546f6f48696768000304d8417474656d707420746f20736574206d696e696d756d20636173686f757420616c6c6f7765642061626f766520746865206c696d69749c4d61784e756d6265724f664368616e6e656c436f6c6c61626f7261746f7273457863656564656400040429014e756d626572206f66206368616e6e656c20636f6c6c61626f7261746f72732065786365656473204d61784e756d6265724f66436f6c6c61626f7261746f72735065724368616e6e656c804d61784e756d6265724f664368616e6e656c4173736574734578636565646564000504f04e756d626572206f66206368616e6e656c206173736574732065786365656473204d61784e756d6265724f664173736574735065724368616e6e656c784d61784e756d6265724f66566964656f4173736574734578636565646564000604ec4e756d626572206f6620766964656f206173736574732065786365656473204d61784d61784e756d6265724f66417373657473506572566964656fa84d61784e756d6265724f664368616e6e656c4167656e745065726d697373696f6e73457863656564656400070419014d6178696d756d206e756d626572206f66206368616e6e656c206167656e74207065726d697373696f6e7320666f72206368616e6e656c206167656e74206578636565646564ac4d61784e756d6265724f6650617573656446656174757265735065724368616e6e656c4578636565646564000804d84d6178696d756d206e756d626572206f662070617573656420666561747572657320706572206368616e6e656c20657863656564656480496e76616c69644368616e6e656c4261675769746e65737350726f766964656400090411014368616e6e656c20626167207769746e65737320706172616d657465727320646f6e2774206d61746368207468652063757272656e742072756e74696d652073746174659c496e76616c696453746f726167654275636b6574734e756d5769746e65737350726f7669646564000a04450153746f72616765206275636b657473206e756d626572207769746e65737320706172616d6574657220646f6573206e6f74206d61746368207468652063757272656e742072756e74696d652073746174657c4d697373696e6753746f726167654275636b6574734e756d5769746e657373000b084d0153746f72616765206275636b657473206e756d626572207769746e65737320706172616d65746572206d7573742062652070726f7669646564207768656e206368616e6e656c2f766964656f2061737365747348617265206265696e6720757064617465642e784368616e6e656c4f776e65724d656d626572446f65734e6f744578697374000c04b850726f7669646564206368616e6e656c206f776e657220286d656d6265722920646f6573206e6f74206578697374904368616e6e656c4f776e657243757261746f7247726f7570446f65734e6f744578697374000d04d450726f7669646564206368616e6e656c206f776e6572202863757261746f722067726f75702920646f6573206e6f74206578697374b04368616e6e656c5374617465426c6f6174426f6e6442656c6f774578697374656e7469616c4465706f736974000e0809014368616e6e656c20737461746520626c6f617420626f6e642063616e6e6f74206265206c6f776572207468616e206578697374656e7469616c206465706f7369742c050162656361757365206974206d7573742073656375726520746865206368616e6e656c206d6f64756c65206163636f756e7420616761696e73742064757374696e67704e756d6265724f66417373657473546f52656d6f766549735a65726f000f04a90144656c657465206368616e6e656c20616e642061737365747320616e642064656c65746520766964656f20617373657473206d75737420686176652061206e756d626572206f662061737365747320746f2072656d6f76652067726561746572207468616e207a65726f9843757261746f7249734e6f74414d656d6265724f66476976656e43757261746f7247726f7570001004450143757261746f7220756e6465722070726f76696465642063757261746f72206964206973206e6f742061206d656d626572206f662063757261726f722067726f757020756e64657220676976656e206964a843757261746f724973416c7265616479414d656d6265724f66476976656e43757261746f7247726f7570001104550143757261746f7220756e6465722070726f76696465642063757261746f7220696420697320616c72656164792061206d656d626572206f662063757261726f722067726f757020756e64657220676976656e2069646043757261746f7247726f7570446f65734e6f74457869737400120488476976656e2063757261746f722067726f757020646f6573206e6f742065786973747043757261746f727350657247726f75704c696d697452656163686564001304b84d6178206e756d626572206f662063757261746f7273207065722067726f7570206c696d697420726561636865645c43757261746f7247726f757049734e6f744163746976650014046c43757261746f722067726f7570206973206e6f74206163746976654043757261746f724964496e76616c6964001504d843757261746f72206964206973206e6f74206120776f726b657220696420696e20636f6e74656e7420776f726b696e672067726f7570384c656164417574684661696c6564001604684c6561642061757468656e7469636174696f6e206661696c6564404d656d626572417574684661696c6564001704704d656d6265722061757468656e7469636174696f6e206661696c65644443757261746f72417574684661696c65640018047443757261746f722061757468656e7469636174696f6e206661696c6564244261644f726967696e00190478457870656374656420726f6f74206f72207369676e6564206f726967696e484163746f724e6f74417574686f72697a6564001a04b04f7065726174696f6e2063616e6e6f7420626520706572666f6d656420776974682074686973204163746f725043617465676f7279446f65734e6f744578697374001b04ac41204368616e6e656c206f7220566964656f2043617465676f727920646f6573206e6f742065786973742e4c4368616e6e656c446f65734e6f744578697374001c04584368616e6e656c20646f6573206e6f7420657869737444566964656f446f65734e6f744578697374001d0450566964656f20646f6573206e6f7420657869737434566964656f496e536561736f6e001e04f4566664656f20696e20736561736f6e2063616e60742062652072656d6f766564202862656361757365206f7264657220697320696d706f7274616e7429444163746f7243616e6e6f7442654c656164001f04c84163746f722063616e6e6f7420617574686f72697a65206173206c65616420666f7220676976656e2065787472696e736963544163746f7243616e6e6f744f776e4368616e6e656c002004604163746f722063616e6e6f74204f776e206368616e6e656c604e6674416c72656164794f776e656442794368616e6e656c002104a4417474656d707420746f20736c696e67206261636b2061206368616e6e656c206f776e6564206e6674404e6674416c7265616479457869737473002204944e667420666f7220676976656e20766964656f20696420616c7265616479206578697374733c4e6674446f65734e6f744578697374002304944e667420666f7220676976656e20766964656f20696420646f6573206e6f742065786973746c4f766572666c6f774f72556e646572666c6f7748617070656e6564002404904f766572666c6f77206f7220756e646572666c6f77206572726f722068617070656e656434446f65734e6f744f776e4e667400250474476976656e206f726967696e20646f6573206e6f74206f776e206e667464526f79616c74795570706572426f756e64457863656564656400260470526f79616c747920557070657220426f756e6420457863656564656464526f79616c74794c6f776572426f756e64457863656564656400270470526f79616c7479204c6f77657220426f756e642045786365656465648441756374696f6e4475726174696f6e5570706572426f756e6445786365656465640028049441756374696f6e206475726174696f6e20757070657220626f756e642065786365656465648441756374696f6e4475726174696f6e4c6f776572426f756e6445786365656465640029049441756374696f6e206475726174696f6e206c6f77657220626f756e6420657863656564656484457874656e73696f6e506572696f645570706572426f756e644578636565646564002a04b441756374696f6e20657874656e73696f6e20706572696f6420757070657220626f756e6420657863656564656484457874656e73696f6e506572696f644c6f776572426f756e644578636565646564002b04b441756374696f6e20657874656e73696f6e20706572696f64206c6f77657220626f756e64206578636565646564844269644c6f636b4475726174696f6e5570706572426f756e644578636565646564002c0498426964206c6f636b206475726174696f6e20757070657220626f756e64206578636565646564844269644c6f636b4475726174696f6e4c6f776572426f756e644578636565646564002d0498426964206c6f636b206475726174696f6e206c6f77657220626f756e642065786365656465647c5374617274696e6750726963655570706572426f756e644578636565646564002e048c5374617274696e6720707269636520757070657220626f756e642065786365656465647c5374617274696e6750726963654c6f776572426f756e644578636565646564002f048c5374617274696e67207072696365206c6f77657220626f756e642065786365656465648041756374696f6e426964537465705570706572426f756e6445786365656465640030049441756374696f6e20626964207374657020757070657220626f756e642065786365656465648041756374696f6e426964537465704c6f776572426f756e6445786365656465640031049441756374696f6e206269642073746570206c6f77657220626f756e642065786365656465644c496e73756666696369656e7442616c616e636500320450496e73756666696369656e742062616c616e63656442696453746570436f6e73747261696e7456696f6c61746564003304b44d696e696d616c2061756374696f6e20626964207374657020636f6e73747261696e742076696f6c617465642e64496e76616c6964426964416d6f756e7453706563696669656400340488436f6d6d697420766572696669636174696f6e20666f722062696420616d6f756e747c5374617274696e675072696365436f6e73747261696e7456696f6c61746564003504ac41756374696f6e207374617274696e6720707269636520636f6e73747261696e742076696f6c617465642e50416374696f6e48617342696473416c7265616479003604a8416c7265616479206163746976652061756374696f6e2063616e6e6f742062652063616e63656c6c6564304e667449734e6f7449646c65003704990143616e206e6f74206372656174652061756374696f6e20666f72204e66742c2069662061756374696f6e2068617665206265656e20616c72656164792073746172746564206f72206e6674206973206c6f636b656420666f7220746865207472616e736665726050656e64696e674f66666572446f65734e6f7445786973740038047c4e6f2070656e64696e67206f666665727320666f7220676976656e204e6674545265776172644163636f756e7449734e6f74536574003904c843726561746f7220726f79616c747920726571756972657320726577617264206163636f756e7420746f206265207365742e404163746f7249734e6f74426964646572003a04684163746f72206973206e6f742061206c617374206269646465726041756374696f6e43616e6e6f744265436f6d706c65746564003b046c41756374696f6e2063616e6e6f7420626520636f6d706c657465643c426964446f65734e6f744578697374003c046841756374696f6e20646f6573206e6f74206861766520626964734c4269644973466f725061737441756374696f6e003d049453656c65637465642042696420697320666f722070617374206f70656e2061756374696f6e6853746172747341744c6f776572426f756e644578636565646564003e049841756374696f6e20737461727473206174206c6f77657220626f756e642065786365656465646853746172747341745570706572426f756e644578636565646564003f049841756374696f6e2073746172747320617420757070657220626f756e642065786365656465644841756374696f6e4469644e6f7453746172740040045c41756374696f6e20646964206e6f742073746172746564444e6f74496e41756374696f6e53746174650041046c4e6674206973206e6f7420696e2061756374696f6e2073746174657c4d656d62657249734e6f74416c6c6f776564546f5061727469636970617465004204bc4d656d626572206973206e6f7420616c6c6f77656420746f20706172746963697061746520696e2061756374696f6e544d656d62657250726f66696c654e6f74466f756e64004304604d656d6265722070726f66696c65206e6f7420666f756e644c4e66744e6f74496e4275794e6f7753746174650044049c476976656e20766964656f206e6674206973206e6f7420696e20627579206e6f7720737461746584496e76616c69644275794e6f775769746e657373507269636550726f76696465640045045501607769746e6573735f7072696365602070726f766964656420746f20606275795f6e6f77602065787472696e73696320646f6573206e6f74206d61746368207468652063757272656e742073656c6c2070726963655049734e6f744f70656e41756374696f6e547970650046046841756374696f6e2074797065206973206e6f7420604f70656e605c49734e6f74456e676c69736841756374696f6e547970650047047441756374696f6e2074797065206973206e6f742060456e676c697368606c4269644c6f636b4475726174696f6e49734e6f744578706972656400480480426964206c6f636b206475726174696f6e206973206e6f742065787069726564684e667441756374696f6e4973416c726561647945787069726564004904784e66742061756374696f6e20697320616c72656164792065787069726564904275794e6f774d7573744265477265617465725468616e5374617274696e675072696365004a04ac41756374696f6e20627579206e6f77206973206c657373207468656e207374617274696e67207072696365605461726765744d656d626572446f65734e6f744578697374004b04984e6674206f6666657220746172676574206d656d62657220646f6573206e6f742065786973748c496e76616c69644e66744f666665725769746e657373507269636550726f7669646564004c040d0143757272656e74206e6674206f6666657220707269636520646f6573206e6f74206d61746368207468652070726f766964656420607769746e6573735f707269636560ac4d617841756374696f6e57686974654c6973744c656e6774685570706572426f756e644578636565646564004d04c44d61782061756374696f6e2077686974656c697374206c656e67746820757070657220626f756e642065786365656465646457686974656c6973744861734f6e6c794f6e654d656d626572004e049441756374696f6e2077686974656c69737420686173206f6e6c79206f6e65206d656d6265727457686974656c69737465644d656d626572446f65734e6f744578697374004f04d84174206c65617374206f6e65206f66207468652077686974656c6973746564206d656d6265727320646f6573206e6f74206578697374784e66744e6f6e4368616e6e656c4f776e6572446f65734e6f744578697374005004f84e6f6e2d6368616e6e656c206f776e65722073706563696669656420647572696e67206e66742069737375616e636520646f6573206e6f74206578697374ac457874656e73696f6e506572696f644973477265617465725468656e41756374696f6e4475726174696f6e005104c4457874656e73696f6e20706572696f642069732067726561746572207468656e2061756374696f6e206475726174696f6e444e6f417373657473537065636966696564005204ac4e6f2061737365747320746f2062652072656d6f7665642068617665206265656e2073706563696669656454496e76616c696441737365747350726f7669646564005304684368616e6e656c2061737365747320666561736962696c697479544368616e6e656c436f6e7461696e73566964656f73005404584368616e6e656c20436f6e7461696e7320566964656f544368616e6e656c436f6e7461696e734173736574730055045c4368616e6e656c20436f6e7461696e73204173736574735c496e76616c696442616753697a655370656369666965640056047c4261672053697a6520737065636966696564206973206e6f742076616c6964504d6967726174696f6e4e6f7446696e6973686564005704584d6967726174696f6e206e6f7420646f6e6520796574445265706c79446f65734e6f7445786973740058046c5061727465636970616e74206973206e6f742061206d656d6265724c556e73756666696369656e7442616c616e636500590450496e73756666696369656e742062616c616e63656c496e73756666696369656e74547265617375727942616c616e6365005a0474496e73756666696369656e742074726561737572792062616c616e636554496e76616c69644d656d62657250726f7669646564005b0470496e76616c6964206d656d62657220696420207370656369666965643c4163746f724e6f74414d656d626572005c04544163746f72206973206e6f742041204d656d626572785061796d656e7450726f6f66566572696669636174696f6e4661696c6564005d04845061796d656e742050726f6f6620766572696669636174696f6e206661696c656484436173686f7574416d6f756e74457863656564734d6178696d756d416d6f756e74005e04c04368616e6e656c20636173686f757420616d6f756e7420697320746f6f206869676820746f20626520636c61696d65647c436173686f7574416d6f756e7442656c6f774d696e696d756d416d6f756e74005f04bc4368616e6e656c20636173686f757420616d6f756e7420697320746f6f206c6f7720746f20626520636c61696d6564e05769746864726177616c416d6f756e74457863656564734368616e6e656c4163636f756e74576974686472617761626c6542616c616e63650060085901416e20617474656d707420746f2077697468647261772066756e64732066726f6d206368616e6e656c206163636f756e74206661696c65642c2062656361757365207468652073706563696669656420616d6f756e744901657863656564732074686520776974686472617761626c6520616d6f756e7420286368616e6e656c206163636f756e742062616c616e6365206d696e7573206368616e6e656c20626c6f617420626f6e64297c576974686472617746726f6d4368616e6e656c416d6f756e7449735a65726f0061085901416e20617474656d707420746f2077697468647261772066756e64732066726f6d206368616e6e656c206163636f756e74206661696c65642c2062656361757365207468652073706563696669656420616d6f756e741c6973207a65726f5c4368616e6e656c436173686f75747344697361626c65640062049c4368616e6e656c20636173686f757473206172652063757272656e746c792064697361626c6564a44d696e436173686f7574416c6c6f776564457863656564734d6178436173686f7574416c6c6f77656400630809014e65772076616c75657320666f72206d696e5f636173686f75745f616c6c6f7765642f6d61785f636173686f75745f616c6c6f7765642061726520696e76616c6964d46d696e5f636173686f75745f616c6c6f7765642063616e6e6f7420657863656564206d61785f636173686f75745f616c6c6f7765648443757261746f724d6f6465726174696f6e416374696f6e4e6f74416c6c6f776564006404110143757261746f7220646f6573206e6f742068617665207065726d697373696f6e7320746f20706572666f726d20676976656e206d6f6465726174696f6e20616374696f6e944d617843757261746f725065726d697373696f6e735065724c6576656c457863656564656400650441014d6178696d756d206e756d626572206f662063757261746f72207065726d697373696f6e732070657220676976656e206368616e6e656c2070726976696c656765206c6576656c206578636565646564c043757261746f7247726f75704d61785065726d697373696f6e7342794c6576656c4d617053697a654578636565646564006604290143757261746f722067726f75702773207065726d697373696f6e73206279206c6576656c206d617020657863656564656420746865206d6178696d756d20616c6c6f7765642073697a65504368616e6e656c466561747572655061757365640067045d014f7065726174696f6e2063616e6e6f742062652065786563757465642c20626563617573652074686973206368616e6e656c206665617475726520686173206265656e2070617573656420627920612063757261746f72444368616e6e656c4261674d697373696e670068042d01556e65787065637465642072756e74696d652073746174653a206d697373696e67206368616e6e656c2062616720647572696e672064656c6574655f6368616e6e656c20617474656d70748c417373657473546f52656d6f76654265796f6e64456e74697479417373657473536574006904f5014c697374206f662061737365747320746f2072656d6f76652070726f766964656420666f72207570646174655f6368616e6e656c202f207570646174655f766964656f20636f6e7461696e7320617373657473207468617420646f6e27742062656c6f6e6720746f207468652073706563696669656420656e7469747990496e76616c6964566964656f446174614f626a65637473436f756e7450726f7669646564006a04f4496e76616c6964206e756d626572206f66206f626a6563747320746f2064656c6574652070726f766964656420666f722064656c6574655f766964656f70496e76616c69644368616e6e656c5472616e73666572537461747573006b04bc496e76616c6964206368616e6e656c207472616e736665722073746174757320666f72206f7065726174696f6e732e78496e76616c69644368616e6e656c5472616e736665724163636570746f72006c04d4496e636f7272656374206163746f7220747269657320746f2061636365707420746865206368616e6e656c207472616e736665722e98496e76616c69644368616e6e656c5472616e73666572436f6d6d69746d656e74506172616d73006d08550143616e6e6f742061636365707420746865206368616e6e656c207472616e736665723a2070726f766964656420636f6d6d69746d656e7420706172616d657465727320646f65736e2774206d617463682077697468906368616e6e656c2070656e64696e67207472616e7366657220706172616d65746572732e8c4368616e6e656c4167656e74496e73756666696369656e745065726d697373696f6e73006e004c496e76616c69644368616e6e656c4f776e6572006f04a4496e636f7272656374206368616e6e656c206f776e657220666f7220616e206f7065726174696f6e2e285a65726f5265776172640070046443616e6e6f7420636c61696d207a65726f207265776172642e78496e73756666696369656e7442616c616e6365466f725472616e73666572007104510143616e6e6f74207472616e7366657220746865206368616e6e656c3a206368616e6e656c206f776e65722068617320696e73756666696369656e742062616c616e6365202862756467657420666f72205747732994496e73756666696369656e7442616c616e6365466f724368616e6e656c4372656174696f6e0072080d0143616e6e6f742063726561746520746865206368616e6e656c3a206368616e6e656c2063726561746f722068617320696e73756666696369656e742062616c616e6365e9012862756467657420666f72206368616e6e656c20737461746520626c6f617420626f6e64202b206368616e6e656c2064617461206f626a7320737461746520626c6f617420626f6e6473202b2064617461206f626a732073746f726167652066656573202b206578697374656e7469616c206465706f736974298c496e73756666696369656e7442616c616e6365466f72566964656f4372656174696f6e007308fc43616e6e6f74206372656174652074686520766964656f3a20766964656f2063726561746f722068617320696e73756666696369656e742062616c616e6365d9012862756467657420666f7220766964656f20737461746520626c6f617420626f6e64202b20766964656f2064617461206f626a7320737461746520626c6f617420626f6e6473202b2064617461206f626a732073746f726167652066656573202b206578697374656e7469616c206465706f7369742964496e73756666696369656e74436f756e63696c4275646765740074006c476c6f62616c4e66744461696c794c696d6974457863656564656400750070476c6f62616c4e66745765656b6c794c696d69744578636565646564007600704368616e6e656c4e66744461696c794c696d69744578636565646564007700744368616e6e656c4e66745765656b6c794c696d697445786365656465640078006443726561746f72546f6b656e416c7265616479497373756564007904c443726561746f7220746f6b656e2077617320616c72656164792069737375656420666f722074686973206368616e6e656c5443726561746f72546f6b656e4e6f74497373756564007a04b043726561746f7220746f6b656e207761736e27742069737375656420666f722074686973206368616e6e656c884d656d6265724964436f756c644e6f7442654465726976656446726f6d4163746f72007b0415014d656d62657220696420636f756c64206e6f7420626520646572697665642066726f6d207468652070726f766964656420436f6e74656e744163746f7220636f6e74657874bc43616e6e6f74576974686472617746726f6d4368616e6e656c5769746843726561746f72546f6b656e497373756564007c08290143616e6e6f74206469726563746c792077697468647261772066756e64732066726f6d2061206368616e6e656c206163636f756e74207768656e20746865206368616e6e656c2068617358612063726561746f7220746f6b656e20697373756564bc506174726f6e61676543616e4f6e6c794265436c61696d6564466f724d656d6265724f776e65644368616e6e656c73007d04f4506174726f6e6167652063616e206f6e6c7920626520636c61696d6564206966206368616e6e656c206973206f776e65642062792061206d656d626572a84368616e6e656c5472616e7366657273426c6f636b6564447572696e67526576656e756553706c697473007e04cc4368616e6e656c205472616e73666572732061726520626c6f636b656420647572696e6720726576656e75652073706c6974739c4368616e6e656c5472616e7366657273426c6f636b6564447572696e67546f6b656e53616c6573007f04c04368616e6e656c205472616e73666572732061726520626c6f636b656420647572696e6720746f6b656e2073616c6573984368616e6e656c5472616e7366657273426c6f636b6564447572696e67416374697665416d6d008004bc4368616e6e656c205472616e73666572732061726520626c6f636b656420647572696e672061637469766520414d4d0460436f6e74656e74206469726563746f7279206572726f7273e908083870616c6c65745f73746f72616765244261675265636f7264084c53746f726167654275636b657449647353657401ed0860446973747269627574696f6e4275636b657449647353657401f1080010012473746f7265645f6279ed08014c53746f726167654275636b657449647353657400013864697374726962757465645f6279f1080160446973747269627574696f6e4275636b65744964735365740001486f626a656374735f746f74616c5f73697a6528010c7536340001386f626a656374735f6e756d62657228010c7536340000ed080c4c626f756e6465645f636f6c6c656374696f6e7344626f756e6465645f62747265655f7365743c426f756e646564425472656553657408045401280453000004006901012c42547265655365743c543e0000f1080c4c626f756e6465645f636f6c6c656374696f6e7344626f756e6465645f62747265655f7365743c426f756e64656442547265655365740804540125020453000004003902012c42547265655365743c543e0000f508083870616c6c65745f73746f726167654c53746f726167654275636b65745265636f72640820576f726b657249640128244163636f756e74496401000010013c6f70657261746f725f737461747573f90801c053746f726167654275636b65744f70657261746f725374617475733c576f726b657249642c204163636f756e7449643e000148616363657074696e675f6e65775f62616773980110626f6f6c00011c766f7563686572ad02011c566f756368657200013461737369676e65645f6261677328010c7536340000f908083870616c6c65745f73746f726167656c53746f726167654275636b65744f70657261746f725374617475730820576f726b657249640128244163636f756e7449640100010c1c4d697373696e6700000050496e766974656453746f72616765576f726b65720400280120576f726b657249640001003453746f72616765576f726b65720800280120576f726b6572496400000001244163636f756e74496400020000fd080c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003001185665633c543e00000109083870616c6c65745f73746f726167656044796e616d69634261674372656174696f6e506f6c69637904b0446973747269627574696f6e4275636b657446616d696c79546f4e756d6265724f664275636b6574734d6170010509000801646e756d6265725f6f665f73746f726167655f6275636b65747310010c75333200012066616d696c696573050901b0446973747269627574696f6e4275636b657446616d696c79546f4e756d6265724f664275636b6574734d6170000005090c4c626f756e6465645f636f6c6c656374696f6e7344626f756e6465645f62747265655f6d61703c426f756e64656442547265654d61700c044b012804560110045300000400b502013842547265654d61703c4b2c20563e0000090900000408950228000d09083870616c6c65745f73746f7261676528446174614f626a6563740448526570617961626c65426c6f6174426f6e6401e101001001206163636570746564980110626f6f6c00014073746174655f626c6f61745f626f6e64e1010148526570617961626c65426c6f6174426f6e6400011073697a6528010c75363400013c697066735f636f6e74656e745f6964fd08013c4261736535384d756c74696861736800001109083870616c6c65745f73746f7261676578446973747269627574696f6e4275636b657446616d696c795265636f7264045c446973747269627574696f6e4275636b6574496e6465780128000401786e6578745f646973747269627574696f6e5f6275636b65745f696e64657828015c446973747269627574696f6e4275636b6574496e64657800001509083870616c6c65745f73746f7261676560446973747269627574696f6e4275636b65745265636f72640888446973747269627574696f6e4275636b6574496e76697465644f70657261746f72730119096c446973747269627574696f6e4275636b65744f70657261746f7273011d0900140148616363657074696e675f6e65775f62616773980110626f6f6c000130646973747269627574696e67980110626f6f6c00014c70656e64696e675f696e7669746174696f6e7319090188446973747269627574696f6e4275636b6574496e76697465644f70657261746f72730001246f70657261746f72731d09016c446973747269627574696f6e4275636b65744f70657261746f727300013461737369676e65645f6261677328010c753634000019090c4c626f756e6465645f636f6c6c656374696f6e7344626f756e6465645f62747265655f7365743c426f756e646564425472656553657408045401280453000004006901012c42547265655365743c543e00001d090c4c626f756e6465645f636f6c6c656374696f6e7344626f756e6465645f62747265655f7365743c426f756e646564425472656553657408045401280453000004006901012c42547265655365743c543e00002109083870616c6c65745f73746f72616765144572726f72040454000105013c41726974686d657469634572726f72000004f447656e657269632041726974686d65746963204572726f722064756520746f20696e7465726e616c206163636f756e74696e67206f7065726174696f6e40496e76616c69644369644c656e67746800010494496e76616c696420434944206c656e67746820286d75737420626520343620627974657329444e6f4f626a656374734f6e55706c6f6164000204a0456d707479202264617461206f626a656374206372656174696f6e2220636f6c6c656374696f6e2e6053746f726167654275636b6574446f65736e744578697374000304ac546865207265717565737465642073746f72616765206275636b657420646f65736e27742065786973742e7053746f726167654275636b657449734e6f74426f756e64546f426167000404cc546865207265717565737465642073746f72616765206275636b6574206973206e6f7420626f756e6420746f2061206261672e6453746f726167654275636b65744973426f756e64546f426167000504dc546865207265717565737465642073746f72616765206275636b657420697320616c726561647920626f756e6420746f2061206261672e644e6f53746f726167654275636b6574496e7669746174696f6e0006041901496e76616c6964206f7065726174696f6e207769746820696e76697465733a207468657265206973206e6f2073746f72616765206275636b657420696e7669746174696f6e2e6453746f7261676550726f7669646572416c72656164795365740007040501496e76616c6964206f7065726174696f6e207769746820696e76697465733a2073746f726167652070726f76696465722077617320616c7265616479207365742e6053746f7261676550726f76696465724d75737442655365740008047453746f726167652070726f7669646572206d757374206265207365742e7c446966666572656e7453746f7261676550726f7669646572496e76697465640009041501496e76616c6964206f7065726174696f6e207769746820696e76697465733a20616e6f746865722073746f726167652070726f76696465722077617320696e76697465642e58496e766974656453746f7261676550726f7669646572000a041501496e76616c6964206f7065726174696f6e207769746820696e76697465733a2073746f726167652070726f76696465722077617320616c726561647920696e76697465642e8853746f726167654275636b65744964436f6c6c656374696f6e73417265456d707479000b04a053746f72616765206275636b657420696420636f6c6c656374696f6e732061726520656d7074792ed053746f726167654275636b6574734e756d62657256696f6c6174657344796e616d69634261674372656174696f6e506f6c696379000c08290153746f72616765206275636b657420696420636f6c6c656374696f6e2070726f766964656420636f6e747261646963747320746865206578697374696e672064796e616d696320626167406372656174696f6e20706f6c6963792ecc446973747269627574696f6e4275636b65747356696f6c6174657344796e616d69634261674372656174696f6e506f6c696379000d083d01446973747269627574696f6e206275636b657420696420636f6c6c656374696f6e2070726f766964656420636f6e747261646963747320746865206578697374696e672064796e616d696320626167406372656174696f6e20706f6c6963792e38456d707479436f6e74656e744964000e04b455706c6f61642064617461206572726f723a20656d70747920636f6e74656e742049442070726f76696465642e385a65726f4f626a65637453697a65000f049055706c6f61642064617461206572726f723a207a65726f206f626a6563742073697a652e88496e76616c69645374617465426c6f6174426f6e64536f757263654163636f756e74001004ec55706c6f61642064617461206572726f723a20696e76616c696420737461746520626c6f617420626f6e6420736f75726365206163636f756e742e58496e76616c696453746f7261676550726f766964657200110490496e76616c69642073746f726167652070726f766964657220666f72206275636b65742e4c496e73756666696369656e7442616c616e636500120498496e73756666696369656e742062616c616e636520666f7220616e206f7065726174696f6e2e54446174614f626a656374446f65736e7445786973740013046844617461206f626a65637420646f65736e27742065786973742e4055706c6f6164696e67426c6f636b65640014049c55706c6f6164696e67206f6620746865206e6577206f626a65637420697320626c6f636b65642e74446174614f626a6563744964436f6c6c656374696f6e4973456d7074790015048c44617461206f626a65637420696420636f6c6c656374696f6e20697320656d7074792e80536f75726365416e6444657374696e6174696f6e42616773417265457175616c001604a043616e6e6f74206d6f7665206f626a656374732077697468696e207468652073616d65206261672e54446174614f626a656374426c61636b6c6973746564001704a844617461206f626a65637420686173682069732070617274206f662074686520626c61636b6c6973742e68426c61636b6c69737453697a654c696d6974457863656564656400180478426c61636b6c6973742073697a65206c696d69742065786365656465642e84566f75636865724d61784f626a65637453697a654c696d69744578636565646564001904ac4d6178206f626a6563742073697a65206c696d697420657863656564656420666f7220766f75636865722e8c566f75636865724d61784f626a6563744e756d6265724c696d69744578636565646564001a04b44d6178206f626a656374206e756d626572206c696d697420657863656564656420666f7220766f75636865722e9453746f726167654275636b65744f626a6563744e756d6265724c696d697452656163686564001b04cc4f626a656374206e756d626572206c696d697420666f72207468652073746f72616765206275636b657420726561636865642e8c53746f726167654275636b65744f626a65637453697a654c696d697452656163686564001c04e04f626a6563747320746f74616c2073697a65206c696d697420666f72207468652073746f72616765206275636b657420726561636865642e6c496e73756666696369656e74547265617375727942616c616e6365001d04d8496e73756666696369656e74206d6f64756c652074726561737572792062616c616e636520666f7220616e206f7065726174696f6e2e8443616e6e6f7444656c6574654e6f6e456d70747953746f726167654275636b6574001e04a443616e6e6f742064656c6574652061206e6f6e2d656d7074792073746f72616765206275636b65742e68446174614f626a6563744964506172616d73417265456d707479001f04f85468652060646174615f6f626a6563745f696473602065787472696e73696320706172616d6574657220636f6c6c656374696f6e20697320656d7074792e7c53746f726167654275636b6574735065724261674c696d6974546f6f4c6f77002004d8546865206e6577206053746f726167654275636b6574735065724261674c696d697460206e756d62657220697320746f6f206c6f772e8053746f726167654275636b6574735065724261674c696d6974546f6f48696768002104dc546865206e6577206053746f726167654275636b6574735065724261674c696d697460206e756d62657220697320746f6f20686967682e8053746f726167654275636b65745065724261674c696d69744578636565646564002204cc6053746f726167654275636b6574735065724261674c696d6974602077617320657863656564656420666f722061206261672e8053746f726167654275636b6574446f65736e744163636570744e657742616773002304ac5468652073746f72616765206275636b657420646f65736e277420616363657074206e657720626167732e4044796e616d6963426167457869737473002404c843616e6e6f7420637265617465207468652064796e616d6963206261673a2064796e616d696320626167206578697374732e5444796e616d6963426167446f65736e7445786973740025046844796e616d69632062616720646f65736e27742065786973742e8853746f7261676550726f76696465724f70657261746f72446f65736e744578697374002604a053746f726167652070726f7669646572206f70657261746f7220646f65736e27742065786973742e484461746153697a654665654368616e676564002704b8496e76616c69642065787472696e7369632063616c6c3a20646174612073697a6520666565206368616e6765642e7c446174614f626a6563745374617465426c6f6174426f6e644368616e676564002804f4496e76616c69642065787472696e7369632063616c6c3a2064617461206f626a65637420737461746520626c6f617420626f6e64206368616e6765642e7843616e6e6f7444656c6574654e6f6e456d70747944796e616d69634261670029049043616e6e6f742064656c657465206e6f6e20656d7074792064796e616d6963206261672eb84d6178446973747269627574696f6e4275636b657446616d696c794e756d6265724c696d69744578636565646564002a04d44d617820646973747269627574696f6e206275636b65742066616d696c79206e756d626572206c696d69742065786365656465642e8c446973747269627574696f6e4275636b657446616d696c79446f65736e744578697374002b04a4446973747269627574696f6e206275636b65742066616d696c7920646f65736e27742065786973742e74446973747269627574696f6e4275636b6574446f65736e744578697374002c0488446973747269627574696f6e206275636b657420646f65736e27742065786973742e9c446973747269627574696f6e4275636b65744964436f6c6c656374696f6e73417265456d707479002d04b4446973747269627574696f6e206275636b657420696420636f6c6c656374696f6e732061726520656d7074792e94446973747269627574696f6e4275636b6574446f65736e744163636570744e657742616773002e04b0446973747269627574696f6e206275636b657420646f65736e277420616363657074206e657720626167732eb84d6178446973747269627574696f6e4275636b65744e756d6265725065724261674c696d69744578636565646564002f04d84d617820646973747269627574696f6e206275636b6574206e756d6265722070657220626167206c696d69742065786365656465642e84446973747269627574696f6e4275636b657449734e6f74426f756e64546f426167003004a8446973747269627574696f6e206275636b6574206973206e6f7420626f756e6420746f2061206261672e78446973747269627574696f6e4275636b65744973426f756e64546f42616700310498446973747269627574696f6e206275636b657420697320626f756e6420746f2061206261672e90446973747269627574696f6e4275636b6574735065724261674c696d6974546f6f4c6f77003204ec546865206e65772060446973747269627574696f6e4275636b6574735065724261674c696d697460206e756d62657220697320746f6f206c6f772e94446973747269627574696f6e4275636b6574735065724261674c696d6974546f6f48696768003304f0546865206e65772060446973747269627574696f6e4275636b6574735065724261674c696d697460206e756d62657220697320746f6f20686967682e9c446973747269627574696f6e50726f76696465724f70657261746f72446f65736e744578697374003404b4446973747269627574696f6e2070726f7669646572206f70657261746f7220646f65736e27742065786973742ea8446973747269627574696f6e50726f76696465724f70657261746f72416c7265616479496e7669746564003504bc446973747269627574696f6e2070726f7669646572206f70657261746f7220616c726561647920696e76697465642e7c446973747269627574696f6e50726f76696465724f70657261746f72536574003604ac446973747269627574696f6e2070726f7669646572206f70657261746f7220616c7265616479207365742e784e6f446973747269627574696f6e4275636b6574496e7669746174696f6e003704884e6f20646973747269627574696f6e206275636b657420696e7669746174696f6e2eac4d7573744265446973747269627574696f6e50726f76696465724f70657261746f72466f724275636b65740038042901496e76616c6964206f7065726174696f6e733a206d757374206265206120646973747269627574696f6e2070726f7669646572206f70657261746f7220666f722061206275636b65742ef84d61784e756d6265724f6650656e64696e67496e7669746174696f6e734c696d6974466f72446973747269627574696f6e4275636b65745265616368656400390429014d6178206e756d626572206f662070656e64696e6720696e7669746174696f6e73206c696d697420666f72206120646973747269627574696f6e206275636b657420726561636865642ec04d61784e756d6265724f664f70657261746f7273506572446973747269627574696f6e4275636b657452656163686564003a04e84d6178206e756d626572206f66206f70657261746f727320666f72206120646973747269627574696f6e206275636b657420726561636865642ea8446973747269627574696f6e46616d696c79426f756e64546f4261674372656174696f6e506f6c696379003b04cc446973747269627574696f6e2066616d696c7920626f756e6420746f206120626167206372656174696f6e20706f6c6963792e644d6178446174614f626a65637453697a654578636565646564003c04784d61782064617461206f626a6563742073697a652065786365656465642e60496e76616c69645472616e736163746f724163636f756e74003d04b8496e76616c6964207472616e736163746f72206163636f756e7420494420666f722074686973206275636b65742ec04e756d6265724f6653746f726167654275636b6574734f7574736964654f66416c6c6f776564436f6e747261696e7473003e049c4e6f7420616c6c6f77656420276e756d626572206f662073746f72616765206275636b65747327d44e756d6265724f66446973747269627574696f6e4275636b6574734f7574736964654f66416c6c6f776564436f6e747261696e7473003f04b04e6f7420616c6c6f77656420276e756d626572206f6620646973747269627574696f6e206275636b657473273043616c6c44697361626c65640040043443616c6c2044697361626c6564048053746f72616765206d6f64756c6520707265646566696e6564206572726f727325090c5070616c6c65745f70726f6a6563745f746f6b656e1474797065732c4163636f756e7444617461101c42616c616e63650118345374616b696e6753746174757301290948526570617961626c65426c6f6174426f6e6401e1014056657374696e675363686564756c6573012d090018014476657374696e675f7363686564756c65732d09014056657374696e675363686564756c6573000118616d6f756e7418011c42616c616e636500015073706c69745f7374616b696e675f737461747573410901544f7074696f6e3c5374616b696e675374617475733e000128626c6f61745f626f6e64e1010148526570617961626c65426c6f6174426f6e640001606e6578745f76657374696e675f7472616e736665725f696428010c7536340001806c6173745f73616c655f746f74616c5f7075726368617365645f616d6f756e74450901784f7074696f6e3c28546f6b656e53616c6549642c2042616c616e6365293e000029090c5070616c6c65745f70726f6a6563745f746f6b656e147479706573345374616b696e67537461747573041c42616c616e636501180008012073706c69745f6964100138526576656e756553706c69744964000118616d6f756e7418011c42616c616e636500002d090c4c626f756e6465645f636f6c6c656374696f6e7344626f756e6465645f62747265655f6d61703c426f756e64656442547265654d61700c044b01110304560131090453000004003509013842547265654d61703c4b2c20563e000031090c5070616c6c65745f70726f6a6563745f746f6b656e1474797065733c56657374696e675363686564756c65082c426c6f636b4e756d62657201101c42616c616e63650118001401686c696e6561725f76657374696e675f73746172745f626c6f636b10012c426c6f636b4e756d62657200015c6c696e6561725f76657374696e675f6475726174696f6e10012c426c6f636b4e756d626572000130636c6966665f616d6f756e7418011c42616c616e636500015c706f73745f636c6966665f746f74616c5f616d6f756e7418011c42616c616e63650001346275726e65645f616d6f756e7418011c42616c616e636500003509042042547265654d617008044b0111030456013109000400390900000039090000023d09003d09000004081103310900410904184f7074696f6e0404540129090108104e6f6e6500000010536f6d65040029090000010000450904184f7074696f6e0404540149090108104e6f6e6500000010536f6d650400490900000100004909000004081018004d090c5070616c6c65745f70726f6a6563745f746f6b656e14747970657324546f6b656e44617461141c42616c616e636501181048617368012c2c426c6f636b4e756d626572011024546f6b656e53616c6501210344526576656e756553706c69745374617465015109002c0130746f74616c5f737570706c7918011c42616c616e6365000134746f6b656e735f69737375656418011c42616c616e63650001306e6578745f73616c655f696410012c546f6b656e53616c65496400011073616c655d0901444f7074696f6e3c546f6b656e53616c653e00013c7472616e736665725f706f6c696379c50201505472616e73666572506f6c6963793c486173683e000138706174726f6e6167655f696e666f6109018c506174726f6e616765446174613c42616c616e63652c20426c6f636b4e756d6265723e00013c6163636f756e74735f6e756d62657228010c753634000148726576656e75655f73706c69745f72617465d502011c5065726d696c6c000134726576656e75655f73706c697451090144526576656e756553706c697453746174650001546e6578745f726576656e75655f73706c69745f6964100138526576656e756553706c69744964000124616d6d5f6375727665650901644f7074696f6e3c416d6d43757276653c42616c616e63653e3e000051090c5070616c6c65745f70726f6a6563745f746f6b656e14747970657344526576656e756553706c6974537461746508284a6f7942616c616e636501182c426c6f636b4e756d6265720110010820496e616374697665000000184163746976650400550901a4526576656e756553706c6974496e666f3c4a6f7942616c616e63652c20426c6f636b4e756d6265723e0001000055090c5070616c6c65745f70726f6a6563745f746f6b656e14747970657340526576656e756553706c6974496e666f08284a6f7942616c616e636501182c426c6f636b4e756d6265720110000c0128616c6c6f636174696f6e1801284a6f7942616c616e636500012074696d656c696e655909015454696d656c696e653c426c6f636b4e756d6265723e0001446469766964656e64735f636c61696d65641801284a6f7942616c616e6365000059090c5070616c6c65745f70726f6a6563745f746f6b656e1474797065732054696d656c696e65042c426c6f636b4e756d626572011000080114737461727410012c426c6f636b4e756d6265720001206475726174696f6e10012c426c6f636b4e756d62657200005d0904184f7074696f6e0404540121030108104e6f6e6500000010536f6d6504002103000001000061090c5070616c6c65745f70726f6a6563745f746f6b656e14747970657334506174726f6e61676544617461081c42616c616e636501182c426c6f636b4e756d6265720110000c011072617465f9020128596561726c7952617465000180756e636c61696d65645f706174726f6e6167655f74616c6c795f616d6f756e7418011c42616c616e63650001906c6173745f756e636c61696d65645f706174726f6e6167655f74616c6c795f626c6f636b10012c426c6f636b4e756d6265720000650904184f7074696f6e0404540125030108104e6f6e6500000010536f6d6504002503000001000069090c5070616c6c65745f70726f6a6563745f746f6b656e186572726f7273144572726f720404540001f43c41726974686d657469634572726f72000004c8556e65787065637465642061726974686d65746963206572726f7220286f766572666c6f77202f20756e646572666c6f772980496e73756666696369656e745472616e736665727261626c6542616c616e636500010481014163636f756e742773207472616e736665727261626c652062616c616e636520697320696e73756666696369656e7420746f20706572666f726d20746865207472616e73666572206f7220696e697469616c697a6520746f6b656e2073616c6544546f6b656e446f65734e6f7445786973740002047852657175657374656420746f6b656e20646f6573206e6f74206578697374784163636f756e74496e666f726d6174696f6e446f65734e6f74457869737400030494526571756573746564206163636f756e74206461746120646f6573206e6f74206578697374945472616e7366657244657374696e6174696f6e4d656d626572446f65734e6f74457869737400040419014174206c65617374206f6e65206f6620746865207472616e736665722064657374696e6174696f6e73206973206e6f7420616e206578697374696e67206d656d626572206964784d65726b6c6550726f6f66566572696669636174696f6e4661696c757265000504804d65726b6c652070726f6f6620766572696669636174696f6e206661696c65645c546f6b656e53796d626f6c416c7265616479496e5573650006045453796d626f6c20616c726561647920696e2075736590496e697469616c416c6c6f636174696f6e546f4e6f6e4578697374696e674d656d62657200070441014174206c65617374206f6e65206f6620746865206d656d626572732070726f76696465642061732070617274206f6620496e697469616c416c6c6f636174696f6e20646f6573206e6f74206578697374504163636f756e74416c7265616479457869737473000804584163636f756e7420416c72656164792065786973747358546f6f4d616e795472616e736665724f757470757473000904985472616e736665722064657374696e6174696f6e206d656d62657220696420696e76616c69646c546f6b656e49737375616e63654e6f74496e49646c655374617465000a04a8546f6b656e27732063757272656e74206f66666572696e67207374617465206973206e6f742049646c6558496e73756666696369656e744a6f7942616c616e6365000b04dc496e73756666696369656e74204a4f592042616c616e636520746f20636f76657220746865207472616e73616374696f6e20636f7374736c4a6f795472616e736665725375626a656374546f44757374696e67000c045d0154686520616d6f756e74206f66204a4f5920746f206265207472616e73666572726564206973206e6f7420656e6f75676820746f206b656570207468652064657374696e6174696f6e206163636f756e7420616c697665cc417474656d7074546f52656d6f76654e6f6e4f776e65644163636f756e74556e6465725065726d697373696f6e65644d6f6465000d04ec417474656d707420746f2072656d6f7665206e6f6e206f776e6564206163636f756e7420756e646572207065726d697373696f6e6564206d6f646578417474656d7074546f52656d6f76654e6f6e456d7074794163636f756e74000e04e4417474656d707420746f2072656d6f766520616e206163636f756e74207769746820736f6d65206f75747374616e64696e6720746f6b656e739c43616e6e6f744a6f696e57686974656c697374496e5065726d697373696f6e6c6573734d6f6465000f04b043616e6e6f74206a6f696e2077686974656c69737420696e207065726d697373696f6e6c657373206d6f6465a443616e6e6f7444656973737565546f6b656e576974684f75747374616e64696e674163636f756e7473001004b843616e6e6f74204465697373756520546f6b656e2077697468206f75747374616e64696e67206163636f756e7473384e6f5570636f6d696e6753616c650011047854686520746f6b656e20686173206e6f207570636f6d696e672073616c65304e6f41637469766553616c65001204a854686520746f6b656e20686173206e6f206163746976652073616c6520617420746865206d6f6d656e748c496e73756666696369656e7442616c616e6365466f72546f6b656e507572636861736500130401014163636f756e742773204a4f592062616c616e636520697320696e73756666696369656e7420746f206d616b652074686520746f6b656e207075726368617365544e6f74456e6f756768546f6b656e734f6e53616c650014047d01416d6f756e74206f6620746f6b656e7320746f207075726368617365206f6e2073616c65206578636565647320746865207175616e74697479206f6620746f6b656e73207374696c6c20617661696c61626c65206f6e207468652073616c656853616c655374617274696e67426c6f636b496e54686550617374001504b05370656369666965642073616c65207374617274696e6720626c6f636b20697320696e2074686520706173745c53616c6541636365737350726f6f66526571756972656400160481014f6e6c792077686974656c6973746564207061727469636970616e74732061726520616c6c6f77656420746f20616363657373207468652073616c652c207468657265666f7265206163636573732070726f6f662069732072657175697265649453616c6541636365737350726f6f665061727469636970616e7449734e6f7453656e64657200170829015061727469636970616e7420696e2073616c65206163636573732070726f6f662070726f766964656420647572696e67206070757263686173655f746f6b656e735f6f6e5f73616c656084646f6573206e6f74206d61746368207468652073656e646572206163636f756e745c53616c6550757263686173654361704578636565646564001808610153616c65207061727469636970616e742773206361702028656974686572206361705f7065725f6d656d626572206f722077686974656c6973746564207061727469636970616e742773207370656369666963206361702978776173206578636565646564207769746820746865207075726368617365b04d617856657374696e675363686564756c65735065724163636f756e74506572546f6b656e52656163686564001908c843616e6e6f742061646420616e6f746865722076657374696e67207363686564756c6520746f20616e206163636f756e742e31014d6178696d756d206e756d626572206f662076657374696e67207363686564756c657320666f722074686973206163636f756e742d746f6b656e20706169722077617320726561636865642e6050726576696f757353616c654e6f7446696e616c697a6564001a04e450726576696f75732073616c6520776173207374696c6c206e6f742066696e616c697a65642c2066696e616c697a652069742066697273742e444e6f546f6b656e73546f5265636f766572001b041501546865726520617265206e6f2072656d61696e696e6720746f6b657320746f207265636f7665722066726f6d207468652070726576696f757320746f6b656e2073616c652e5053616c654475726174696f6e546f6f53686f7274001c04dc5370656369666965642073616c65206475726174696f6e2069732073686f72746572207468616e204d696e53616c654475726174696f6e4853616c654475726174696f6e49735a65726f001d047053616c65206475726174696f6e2063616e6e6f74206265207a65726f7053616c655570706572426f756e645175616e7469747949735a65726f001e048c557070657220626f756e64207175616e746974792063616e6e6f74206265207a65726f5853616c654361705065724d656d62657249735a65726f001f049850757263686173652063617020706572206d656d6265722063616e6e6f74206265207a65726f4c53616c65556e6974507269636549735a65726f00200484546f6b656e277320756e69742070726963652063616e6e6f74206265207a65726f6053616c655075726368617365416d6f756e7449735a65726f002104cc416d6f756e74206f6620746f6b656e7320746f207075726368617365206f6e2073616c652063616e6e6f74206265207a65726f6c43616e6e6f74496e697453616c654966416d6d4973416374697665002204604e6f2053616c6520696620416d6d206973206163746976657c526576656e756553706c697454696d65546f5374617274546f6f53686f7274002304d453706563696669656420726576656e75652073706c6974207374617274696e6720626c6f636b20697320696e20746865207061737470526576656e756553706c69744475726174696f6e546f6f53686f72740024048c526576656e75652053706c6974206475726174696f6e20697320746f6f2073686f727484526576656e756553706c6974416c7265616479416374697665466f72546f6b656e002504a8417474656d707420746f2061637469766174652073706c69742077697468206f6e65206f6e676f696e6774526576656e756553706c69744e6f74416374697665466f72546f6b656e0026043501417474656d707420746f206d616b6520726576656e75652073706c6974206f7065726174696f6e73207769746820746f6b656e206e6f7420696e206163746976652073706c697420737461746554526576656e756553706c69744469644e6f74456e640027047c526576656e75652053706c697420686173206e6f7420656e6465642079657458526576656e756553706c69744e6f744f6e676f696e67002804bc526576656e75652053706c697420666f7220746f6b656e206163746976652c20627574206e6f74206f6e676f696e676055736572416c726561647950617274696369706174696e67002904bc5573657220616c72656164792070617274696369706174696e6720696e2074686520726576656e75652073706c6974a0496e73756666696369656e7442616c616e6365466f7253706c697450617274696369706174696f6e002a041d015573657220646f6573206e6f7420706f7373657320656e6f7567682062616c616e636520746f20706172746963697061746520696e2074686520726576656e75652073706c69747c557365724e6f745061727469636970616e74696e67496e416e7953706c6974002b049855736572206973206e6f742070617274696369706174696e6720696e20616e792073706c69749843616e6e6f745061727469636970617465496e53706c6974576974685a65726f416d6f756e74002c04e8417474656d707420746f20706172746963697061746520696e20612073706c69742077697468207a65726f20746f6b656e20746f207374616b65a043616e6e6f74497373756553706c6974576974685a65726f416c6c6f636174696f6e416d6f756e74002d04dc417474656d707420746f20697373756520696e20612073706c69742077697468207a65726f20616c6c6f636174696f6e20616d6f756e74b043616e6e6f744d6f64696679537570706c795768656e526576656e756553706c697473417265416374697665002e04d4417474656d707420746f206d6f6469667920737570706c79207768656e20726576656e75652073706c69742069732061637469766558526576656e756553706c69745261746549735a65726f002f0478526576656e75652073706c697420726174652063616e6e6f742062652030404275726e416d6f756e7449735a65726f0030047c50726f766964656420616d6f756e7420746f206275726e206973203d3d2030a04275726e416d6f756e74477265617465725468616e4163636f756e74546f6b656e73416d6f756e740031043101416d6f756e74206f6620746f6b656e7320746f206275726e206578636565647320746f74616c20616d6f756e74206f6620746f6b656e73206f776e656420627920746865206163636f756e74344e6f74496e416d6d537461746500320811012d2d2d2d2d2d20414d4d202d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d406e6f7420696e20414d4d20737461746558496e76616c69644375727665506172616d6574657273003304b4496e76616c696420626f6e64696e6720637572766520636f6e737472756374696f6e20706172616d65746572733c446561646c696e654578706972656400340484446561646c696e6520636f6e73747261696e74206e6f742073617469736669656464536c697070616765546f6c6572616e63654578636565646564003504d4536c69707061676520746f6c6572616e636520636f6e73747261696e7420746f6c6572616e6365206e6f742073617469736669656460496e73756666696369656e74546f6b656e42616c616e63650036049443726561746f7220746f6b656e2062616c616e636520697320696e73756666696369656e74904f75747374616e64696e67416d6d50726f7669646564537570706c79546f6f4c617267650037046d014f757374616e64696e6720414d4d2d70726f766964656420737570706c7920636f6e737469747574657320746f6f206c617267652070657263656e74616765206f662074686520746f6b656e277320746f74616c20737570706c79684375727665536c6f7065506172616d6574657273546f6f4c6f77003804b0437572766520736c6f706520706172616d65746572732062656c6f77206d696e696d756d20616c6c6f776564904e6f74456e6f756768546f6b656e4d696e7465644279416d6d466f725468697353616c65003904c0417474656d7074696e6720746f2073656c6c206d6f7265207468616e20616d6d2070726f766964656420737570706c79a8546172676574506174726f6e6167655261746549734869676865725468616e43757272656e7452617465003a0815012d2d2d2d2d2d2d2d20506174726f6e616765202d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2dc4546172676574205261746520697320686967686572207468616e2063757272656e7420706174726f6e616765207261746580596561726c79506174726f6e616765526174654c696d69744578636565646564003b04dc50726f76696465642076616c756520666f7220706174726f6e61676520697320746f6f206269672028796561726c7920666f726d6174293050616c6c657446726f7a656e003c04c8417474656d707420746f20706572666f726d20616e20616374696f6e207768656e2070616c6c65742069732066726f7a656e006d090c5c70616c6c65745f70726f706f73616c735f656e67696e651474797065732050726f706f73616c102c426c6f636b4e756d62657201102850726f706f736572496401281c42616c616e63650118244163636f756e744964010000200128706172616d6574657273710901a050726f706f73616c506172616d65746572733c426c6f636b4e756d6265722c2042616c616e63653e00012c70726f706f7365725f696428012850726f706f73657249640001306163746976617465645f617410012c426c6f636b4e756d6265720001187374617475732d03016c50726f706f73616c5374617475733c426c6f636b4e756d6265723e000138766f74696e675f726573756c747375090134566f74696e67526573756c747300015465786163745f657865637574696f6e5f626c6f636b0102014c4f7074696f6e3c426c6f636b4e756d6265723e00016c6e725f6f665f636f756e63696c5f636f6e6669726d6174696f6e7310010c7533320001487374616b696e675f6163636f756e745f69649401444f7074696f6e3c4163636f756e7449643e000071090c5c70616c6c65745f70726f706f73616c735f656e67696e651474797065734850726f706f73616c506172616d6574657273082c426c6f636b4e756d62657201101c42616c616e6365011800200134766f74696e675f706572696f6410012c426c6f636b4e756d62657200013067726163655f706572696f6410012c426c6f636b4e756d626572000168617070726f76616c5f71756f72756d5f70657263656e7461676510010c753332000174617070726f76616c5f7468726573686f6c645f70657263656e7461676510010c753332000168736c617368696e675f71756f72756d5f70657263656e7461676510010c753332000174736c617368696e675f7468726573686f6c645f70657263656e7461676510010c75333200013872657175697265645f7374616b654501013c4f7074696f6e3c42616c616e63653e000144636f6e737469747574696f6e616c69747910010c753332000075090c5c70616c6c65745f70726f706f73616c735f656e67696e6514747970657334566f74696e67526573756c7473000010012c61627374656e74696f6e7310010c753332000124617070726f76616c7310010c75333200012872656a656374696f6e7310010c75333200011c736c617368657310010c753332000079090c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003001185665633c543e00007d09000004081028008109085c70616c6c65745f70726f706f73616c735f656e67696e65144572726f7204045400015c3c41726974686d657469634572726f72000004c8556e65787065637465642061726974686d65746963206572726f7220286f766572666c6f77202f20756e646572666c6f772948456d7074795469746c6550726f76696465640001049050726f706f73616c2063616e6e6f74206861766520616e20656d707479207469746c652260456d7074794465736372697074696f6e50726f76696465640002048850726f706f73616c2063616e6e6f74206861766520616e20656d70747920626f6479385469746c654973546f6f4c6f6e67000304445469746c6520697320746f6f206c6f6e67504465736372697074696f6e4973546f6f4c6f6e670004045c4465736372697074696f6e20697320746f6f206c6f6e674050726f706f73616c4e6f74466f756e640005046c5468652070726f706f73616c20646f6573206e6f742065786973744450726f706f73616c46696e616c697a65640006047450726f706f73616c2069732066696e616c697a656420616c726561647930416c7265616479566f7465640007049c5468652070726f706f73616c2068617665206265656e20616c726561647920766f746564206f6e244e6f74417574686f72000804344e6f7420616e20617574686f727c4d617841637469766550726f706f73616c4e756d6265724578636565646564000904904d6178206163746976652070726f706f73616c73206e756d62657220657863656564656428456d7074795374616b65000a04a05374616b652063616e6e6f7420626520656d707479207769746820746869732070726f706f73616c485374616b6553686f756c644265456d707479000b049c5374616b652073686f756c6420626520656d70747920666f7220746869732070726f706f73616c605374616b654469666665727346726f6d5265717569726564000c04b05374616b6520646966666572732066726f6d207468652070726f706f73616c20726571756972656d656e747384496e76616c6964506172616d65746572417070726f76616c5468726573686f6c64000d0484417070726f76616c207468726573686f6c642063616e6e6f74206265207a65726f84496e76616c6964506172616d65746572536c617368696e675468726573686f6c64000e0484536c617368696e67207468726573686f6c642063616e6e6f74206265207a65726f4452657175697265526f6f744f726967696e000f04845265717569726520726f6f74206f726967696e20696e2065787472696e736963734050726f706f73616c486173566f746573001004f4446973616c6c6f7720746f2063616e63656c207468652070726f706f73616c2069662074686572652061726520616e7920766f746573206f6e2069742e5c5a65726f4578616374457865637574696f6e426c6f636b00110494457861637420657865637574696f6e20626c6f636b2063616e6e6f74206265207a65726f2e68496e76616c69644578616374457865637574696f6e426c6f636b001204e0457861637420657865637574696f6e20626c6f636b2063616e6e6f74206265206c657373207468616e2063757272656e745f626c6f636b2e6c496e73756666696369656e7442616c616e6365466f725374616b65001304a05468657265206973206e6f7420656e6f7567682062616c616e636520666f722061207374616b652e44436f6e666c696374696e675374616b6573001404bc54686520636f6e666c696374696e67207374616b6520646973636f76657265642e2043616e6e6f74207374616b652e78496e76616c69645374616b696e674163636f756e74466f724d656d626572001504ac5374616b696e67206163636f756e7420646f65736e27742062656c6f6e6720746f2061206d656d6265722e8c4d6178446973706174636861626c6543616c6c436f646553697a6545786365656465640016043d015468652073697a65206f6620656e636f64656420646973706174636861626c652063616c6c20746f206265206578656375746564206279207468652070726f706f73616c20697320746f6f20626967047c456e67696e65206d6f64756c6520707265646566696e6564206572726f727385090c6c70616c6c65745f70726f706f73616c735f64697363757373696f6e1474797065734044697363757373696f6e5468726561640c204d656d626572496401282c426c6f636b4e756d62657201103c54687265616457686974656c697374018909000c01306163746976617465645f617410012c426c6f636b4e756d626572000124617574686f725f69642801204d656d62657249640001106d6f64658d09016c5468726561644d6f64653c54687265616457686974656c6973743e000089090c4c626f756e6465645f636f6c6c656374696f6e7344626f756e6465645f62747265655f7365743c426f756e646564425472656553657408045401280453000004006901012c42547265655365743c543e00008d090c6c70616c6c65745f70726f706f73616c735f64697363757373696f6e147479706573285468726561644d6f6465043c54687265616457686974656c6973740189090108104f70656e00000018436c6f73656404008909013c54687265616457686974656c6973740001000091090c6c70616c6c65745f70726f706f73616c735f64697363757373696f6e1474797065733844697363757373696f6e506f73740c204d656d626572496401282c426c6f636b4e756d626572011048526570617961626c65426c6f6174426f6e6401e101000c0124617574686f725f69642801204d656d626572496400013c636c65616e75705f7061795f6f6666e1010148526570617961626c65426c6f6174426f6e6400012c6c6173745f65646974656410012c426c6f636b4e756d62657200009509086c70616c6c65745f70726f706f73616c735f64697363757373696f6e144572726f720404540001283c41726974686d657469634572726f72000004c8556e65787065637465642061726974686d65746963206572726f7220286f766572666c6f77202f20756e646572666c6f772944546872656164446f65736e7445786973740001045054687265616420646f65736e27742065786973743c506f7374446f65736e74457869737400020448506f737420646f65736e27742065786973744452657175697265526f6f744f726967696e000304845265717569726520726f6f74206f726967696e20696e2065787472696e736963736043616e6e6f74506f73744f6e436c6f7365645468726561640004046501546865207468726561642068617320436c6f736564206d6f64652e20416e6420706f737420617574686f7220646f65736e27742062656c6f6e6720746f20636f756e63696c206f7220616c6c6f776564206d656d626572732e504e6f74417574686f724f72436f756e63696c6f720005049453686f756c642062652074687265616420617574686f72206f7220636f756e63696c6f722e604d617857686974654c69737453697a654578636565646564000604a04d617820616c6c6f77656420617574686f7273206c697374206c696d69742065786365656465642e7457686974656c69737465644d656d626572446f65734e6f74457869737400070849014174206c65617374206f6e65206f6620746865206d656d626572206964732070726f76696465642061732070617274206f6620636c6f736564207468726561642077686974656c6973742062656c6f6e677364746f2061206e6f6e2d6578697374696e67206d656d6265722e68496e73756666696369656e7442616c616e6365466f72506f7374000804c44163636f756e742068617320696e73756666696369656e742062616c616e636520746f20637265617465206120706f73744043616e6e6f7444656c657465506f73740009049c4163636f756e742063616e27742064656c65746520706f737420617420746865206d6f6d656e74048c44697363757373696f6e206d6f64756c6520707265646566696e6564206572726f72739909085870616c6c65745f70726f706f73616c735f636f646578144572726f72040454000168545369676e616c50726f706f73616c4973456d707479000004a050726f7669646564207465787420666f7220746578742070726f706f73616c20697320656d7074795852756e74696d6550726f706f73616c4973456d707479000104f050726f7669646564205741534d20636f646520666f72207468652072756e74696d6520757067726164652070726f706f73616c20697320656d70747990496e76616c696446756e64696e675265717565737450726f706f73616c42616c616e6365000204bc496e76616c69642062616c616e63652076616c756520666f7220746865207370656e64696e672070726f706f73616c54496e76616c696456616c696461746f72436f756e74000304f8496e76616c69642076616c696461746f7220636f756e7420666f722074686520277365742076616c696461746f7220636f756e74272070726f706f73616c4452657175697265526f6f744f726967696e000404845265717569726520726f6f74206f726967696e20696e2065787472696e73696373a8496e76616c6964436f756e63696c456c656374696f6e506172616d65746572436f756e63696c53697a65000504c4496e76616c696420636f756e63696c20656c656374696f6e20706172616d65746572202d20636f756e63696c5f73697a65b4496e76616c6964436f756e63696c456c656374696f6e506172616d6574657243616e6469646163794c696d6974000604d0496e76616c696420636f756e63696c20656c656374696f6e20706172616d65746572202d2063616e6469646163792d6c696d6974b4496e76616c6964436f756e63696c456c656374696f6e506172616d657465724d696e566f74696e675374616b65000704d4496e76616c696420636f756e63696c20656c656374696f6e20706172616d65746572202d206d696e2d766f74696e675f7374616b65b8496e76616c6964436f756e63696c456c656374696f6e506172616d657465724e65775465726d4475726174696f6e000804d8496e76616c696420636f756e63696c20656c656374696f6e20706172616d65746572202d206e65775f7465726d5f6475726174696f6eb8496e76616c6964436f756e63696c456c656374696f6e506172616d657465724d696e436f756e63696c5374616b65000904d8496e76616c696420636f756e63696c20656c656374696f6e20706172616d65746572202d206d696e5f636f756e63696c5f7374616b65b8496e76616c6964436f756e63696c456c656374696f6e506172616d6574657252657665616c696e67506572696f64000a04d4496e76616c696420636f756e63696c20656c656374696f6e20706172616d65746572202d2072657665616c696e675f706572696f64ac496e76616c6964436f756e63696c456c656374696f6e506172616d65746572566f74696e67506572696f64000b04c8496e76616c696420636f756e63696c20656c656374696f6e20706172616d65746572202d20766f74696e675f706572696f64bc496e76616c6964436f756e63696c456c656374696f6e506172616d65746572416e6e6f756e63696e67506572696f64000c04d8496e76616c696420636f756e63696c20656c656374696f6e20706172616d65746572202d20616e6e6f756e63696e675f706572696f6484496e76616c6964576f726b696e6747726f75704275646765744361706163697479000d04bc496e76616c696420776f726b696e672067726f75702062756467657420636170616369747920706172616d65746572a0496e76616c69645365744c656164506172616d6574657243616e6e6f744265436f756e63696c6f72000e042d01496e76616c69642027736574206c6561642070726f706f73616c2720706172616d65746572202d2070726f706f736564206c6561642063616e6e6f74206265206120636f756e63696c6f724c536c617368696e675374616b6549735a65726f000f042101496e76616c69642027736c617368207374616b652070726f706f73616c2720706172616d65746572202d2063616e6e6f7420736c617368206279207a65726f2062616c616e63652e5444656372656173696e675374616b6549735a65726f0010043901496e76616c696420276465637265617365207374616b652070726f706f73616c2720706172616d65746572202d2063616e6e6f74206465637265617365206279207a65726f2062616c616e63652e80496e73756666696369656e7446756e6473466f724275646765745570646174650011041d01496e73756666696369656e742066756e647320666f72202755706461746520576f726b696e672047726f757020427564676574272070726f706f73616c20657865637574696f6eb0496e76616c696446756e64696e675265717565737450726f706f73616c4e756d6265724f664163636f756e740012045101496e76616c6964206e756d626572206f66206163636f756e747320726563696576696e672066756e64696e67207265717565737420666f72202746756e64696e672052657175657374272070726f706f73616c2eb0496e76616c696446756e64696e675265717565737450726f706f73616c52657065617465644163636f756e74001304bc5265706561746564206163636f756e7420696e202746756e64696e672052657175657374272070726f706f73616c2ee0496e76616c69644368616e6e656c5061796f75747350726f706f73616c4d696e436173686f7574457863656564734d6178436173686f7574001404e50154686520737065636966696564206d696e206368616e6e656c20636173686f75742069732067726561746572207468616e2074686520737065636966696564206d6178206368616e6e656c20636173686f757420696e2060557064617465204368616e6e656c205061796f757473602070726f706f73616c2e4c496e76616c69644c656164576f726b657249640015049050726f7669646564206c65616420776f726b6572206964206973206e6f742076616c696450496e76616c69644c6561644f70656e696e6749640016049450726f7669646564206c656164206f70656e696e67206964206973206e6f742076616c696460496e76616c69644c6561644170706c69636174696f6e4964001704a450726f7669646564206c656164206170706c69636174696f6e206964206973206e6f742076616c696444496e76616c696450726f706f73616c49640018048450726f76696465642070726f706f73616c206964206973206e6f742076616c69643c41726974686d657469634572726f720019043c41726974686d656963204572726f720478436f646578206d6f64756c6520707265646566696e6564206572726f72739d090c5070616c6c65745f776f726b696e675f67726f75701474797065731c4f70656e696e670c2c426c6f636b4e756d62657201101c42616c616e636501181048617368012c001801306f70656e696e675f747970658103012c4f70656e696e675479706500011c6372656174656410012c426c6f636b4e756d6265720001406465736372697074696f6e5f686173682c0110486173680001307374616b655f706f6c696379610301845374616b65506f6c6963793c426c6f636b4e756d6265722c2042616c616e63653e0001407265776172645f7065725f626c6f636b4501013c4f7074696f6e3c42616c616e63653e0001386372656174696f6e5f7374616b6518011c42616c616e63650000a1090c5070616c6c65745f776f726b696e675f67726f7570147479706573384a6f624170706c69636174696f6e0c244163636f756e7449640100204d656d626572496401281048617368012c0018013c726f6c655f6163636f756e745f69640001244163636f756e7449640001447265776172645f6163636f756e745f69640001244163636f756e7449640001487374616b696e675f6163636f756e745f69640001244163636f756e7449640001246d656d6265725f69642801204d656d62657249640001406465736372697074696f6e5f686173682c0110486173680001286f70656e696e675f69642801244f70656e696e6749640000a5090c5070616c6c65745f776f726b696e675f67726f75701474797065732c47726f7570576f726b657210244163636f756e7449640100204d656d626572496401282c426c6f636b4e756d62657201101c42616c616e63650118002401246d656d6265725f69642801204d656d626572496400013c726f6c655f6163636f756e745f69640001244163636f756e7449640001487374616b696e675f6163636f756e745f69640001244163636f756e7449640001447265776172645f6163636f756e745f69640001244163636f756e744964000148737461727465645f6c656176696e675f61740102014c4f7074696f6e3c426c6f636b4e756d6265723e0001506a6f625f756e7374616b696e675f706572696f6410012c426c6f636b4e756d6265720001407265776172645f7065725f626c6f636b4501013c4f7074696f6e3c42616c616e63653e0001346d69737365645f7265776172644501013c4f7074696f6e3c42616c616e63653e000128637265617465645f617410012c426c6f636b4e756d6265720000a9090c5070616c6c65745f776f726b696e675f67726f7570186572726f7273144572726f720804540004490001803c41726974686d657469634572726f72000004c8556e65787065637465642061726974686d65746963206572726f7220286f766572666c6f77202f20756e646572666c6f7729605374616b6542616c616e636543616e6e6f7442655a65726f0001049850726f7669646564207374616b652062616c616e63652063616e6e6f74206265207a65726f2e4c4f70656e696e67446f65734e6f7445786973740002045c4f70656e696e6720646f6573206e6f742065786973742e6443616e6e6f74486972654d756c7469706c654c656164657273000304bc43616e6e6f742066696c6c206f70656e696e672077697468206d756c7469706c65206170706c69636174696f6e732e74576f726b65724170706c69636174696f6e446f65734e6f74457869737400040488576f726b6572206170706c69636174696f6e20646f6573206e6f742065786973742e744d6178416374697665576f726b65724e756d626572457863656564656400050488576f726b696e672067726f75702073697a65206c696d69742065786365656465642e9c5375636365737366756c576f726b65724170706c69636174696f6e446f65734e6f744578697374000604b45375636365737366756c20776f726b6572206170706c69636174696f6e20646f6573206e6f742065786973742e8043616e6e6f74486972654c65616465725768656e4c6561646572457869737473000704c45468657265206973206c656164657220616c72656164792c2063616e6e6f74206869726520616e6f74686572206f6e652e4049734e6f744c6561644163636f756e740008044c4e6f742061206c656164206163636f756e742e4443757272656e744c6561644e6f745365740009046043757272656e74206c656164206973206e6f74207365742e48576f726b6572446f65734e6f744578697374000a0458576f726b657220646f6573206e6f742065786973742e4c496e76616c69644d656d6265724f726967696e000b0470496e76616c6964206f726967696e20666f722061206d656d6265722e705369676e657249734e6f74576f726b6572526f6c654163636f756e74000c04885369676e6572206973206e6f7420776f726b657220726f6c65206163636f756e742e4842656c6f774d696e696d756d5374616b6573000d04885374616b696e67206c657373207468616e20746865206c6f77657220626f756e642e7c496e73756666696369656e7442616c616e6365546f436f7665725374616b65000e0490496e73756666696369656e742062616c616e636520746f20636f766572207374616b652e884170706c69636174696f6e5374616b65446f65736e744d617463684f70656e696e67000f04d84170706c69636174696f6e207374616b65206973206c657373207468616e207265717569726564206f70656e696e67207374616b652e504f726967696e49734e6f744170706c6963616e74001004604f726967696e206973206e6f74206170706c6963616e742e3c576f726b657249734c656176696e6700110498496e76616c6964206f7065726174696f6e202d20776f726b6572206973206c656176696e672e5043616e6e6f74526577617264576974685a65726f0012046452657761726420636f756c64206e6f74206265207a65726f2e78496e76616c69645374616b696e674163636f756e74466f724d656d626572001304ac5374616b696e67206163636f756e7420646f65736e27742062656c6f6e6720746f2061206d656d6265722e5c436f6e666c6963745374616b65734f6e4163636f756e74001404b05374616b696e67206163636f756e7420636f6e7461696e7320636f6e666c696374696e67207374616b65732e44576f726b65724861734e6f5265776172640015047c576f726b657220686173206e6f20726563757272696e67207265776172642e78556e7374616b696e67506572696f644c6573735468616e4d696e696d756d001604090153706563696669656420756e7374616b696e6720706572696f64206973206c657373207468656e206d696e696d756d2073657420666f72207468652067726f75702e3c43616e6e6f745370656e645a65726f00170460496e76616c6964207370656e64696e6720616d6f756e742e74496e73756666696369656e74427564676574466f725370656e64696e67001804a449742773206e6f7420656e6f7567682062756467657420666f722074686973207370656e64696e672e584e6f4170706c69636174696f6e7350726f7669646564001904bc43616e6e6f742066696c6c206f70656e696e67202d206e6f206170706c69636174696f6e732070726f76696465642ea043616e6e6f7444656372656173655374616b6544656c7461477265617465725468616e5374616b65001a04fc43616e6e6f74206465637265617365207374616b65202d207374616b652064656c74612067726561746572207468616e20696e697469616c207374616b652e644170706c69636174696f6e734e6f74466f724f70656e696e67001b04f0547279696e6720746f2066696c6c206f70656e696e67207769746820616e206170706c69636174696f6e20666f72206f74686572206f70656e696e6764576f726b657253746f7261676556616c7565546f6f4c6f6e67001c0480576f726b65722073746f72616765207465787420697320746f6f206c6f6e672e70496e73756666696369656e74546f6b656e73466f7246756e64696e67001d04f8496e73756666696369656e7420746f6b656e7320666f722066756e64696e6720286f6e206d656d62657220636f6e74726f6c6c6572206163636f756e7429445a65726f546f6b656e7346756e64696e67001e047c547279696e6720746f2066756e642077697468207a65726f20746f6b656e7378496e73756666696369656e7442616c616e6365466f725472616e73666572001f04b443616e6e6f742077697468647261773a20696e73756666696369656e74206275646765742062616c616e63652e048c44697363757373696f6e206d6f64756c6520707265646566696e6564206572726f7273ad090c5070616c6c65745f776f726b696e675f67726f7570186572726f7273144572726f720804540004490001803c41726974686d657469634572726f72000004c8556e65787065637465642061726974686d65746963206572726f7220286f766572666c6f77202f20756e646572666c6f7729605374616b6542616c616e636543616e6e6f7442655a65726f0001049850726f7669646564207374616b652062616c616e63652063616e6e6f74206265207a65726f2e4c4f70656e696e67446f65734e6f7445786973740002045c4f70656e696e6720646f6573206e6f742065786973742e6443616e6e6f74486972654d756c7469706c654c656164657273000304bc43616e6e6f742066696c6c206f70656e696e672077697468206d756c7469706c65206170706c69636174696f6e732e74576f726b65724170706c69636174696f6e446f65734e6f74457869737400040488576f726b6572206170706c69636174696f6e20646f6573206e6f742065786973742e744d6178416374697665576f726b65724e756d626572457863656564656400050488576f726b696e672067726f75702073697a65206c696d69742065786365656465642e9c5375636365737366756c576f726b65724170706c69636174696f6e446f65734e6f744578697374000604b45375636365737366756c20776f726b6572206170706c69636174696f6e20646f6573206e6f742065786973742e8043616e6e6f74486972654c65616465725768656e4c6561646572457869737473000704c45468657265206973206c656164657220616c72656164792c2063616e6e6f74206869726520616e6f74686572206f6e652e4049734e6f744c6561644163636f756e740008044c4e6f742061206c656164206163636f756e742e4443757272656e744c6561644e6f745365740009046043757272656e74206c656164206973206e6f74207365742e48576f726b6572446f65734e6f744578697374000a0458576f726b657220646f6573206e6f742065786973742e4c496e76616c69644d656d6265724f726967696e000b0470496e76616c6964206f726967696e20666f722061206d656d6265722e705369676e657249734e6f74576f726b6572526f6c654163636f756e74000c04885369676e6572206973206e6f7420776f726b657220726f6c65206163636f756e742e4842656c6f774d696e696d756d5374616b6573000d04885374616b696e67206c657373207468616e20746865206c6f77657220626f756e642e7c496e73756666696369656e7442616c616e6365546f436f7665725374616b65000e0490496e73756666696369656e742062616c616e636520746f20636f766572207374616b652e884170706c69636174696f6e5374616b65446f65736e744d617463684f70656e696e67000f04d84170706c69636174696f6e207374616b65206973206c657373207468616e207265717569726564206f70656e696e67207374616b652e504f726967696e49734e6f744170706c6963616e74001004604f726967696e206973206e6f74206170706c6963616e742e3c576f726b657249734c656176696e6700110498496e76616c6964206f7065726174696f6e202d20776f726b6572206973206c656176696e672e5043616e6e6f74526577617264576974685a65726f0012046452657761726420636f756c64206e6f74206265207a65726f2e78496e76616c69645374616b696e674163636f756e74466f724d656d626572001304ac5374616b696e67206163636f756e7420646f65736e27742062656c6f6e6720746f2061206d656d6265722e5c436f6e666c6963745374616b65734f6e4163636f756e74001404b05374616b696e67206163636f756e7420636f6e7461696e7320636f6e666c696374696e67207374616b65732e44576f726b65724861734e6f5265776172640015047c576f726b657220686173206e6f20726563757272696e67207265776172642e78556e7374616b696e67506572696f644c6573735468616e4d696e696d756d001604090153706563696669656420756e7374616b696e6720706572696f64206973206c657373207468656e206d696e696d756d2073657420666f72207468652067726f75702e3c43616e6e6f745370656e645a65726f00170460496e76616c6964207370656e64696e6720616d6f756e742e74496e73756666696369656e74427564676574466f725370656e64696e67001804a449742773206e6f7420656e6f7567682062756467657420666f722074686973207370656e64696e672e584e6f4170706c69636174696f6e7350726f7669646564001904bc43616e6e6f742066696c6c206f70656e696e67202d206e6f206170706c69636174696f6e732070726f76696465642ea043616e6e6f7444656372656173655374616b6544656c7461477265617465725468616e5374616b65001a04fc43616e6e6f74206465637265617365207374616b65202d207374616b652064656c74612067726561746572207468616e20696e697469616c207374616b652e644170706c69636174696f6e734e6f74466f724f70656e696e67001b04f0547279696e6720746f2066696c6c206f70656e696e67207769746820616e206170706c69636174696f6e20666f72206f74686572206f70656e696e6764576f726b657253746f7261676556616c7565546f6f4c6f6e67001c0480576f726b65722073746f72616765207465787420697320746f6f206c6f6e672e70496e73756666696369656e74546f6b656e73466f7246756e64696e67001d04f8496e73756666696369656e7420746f6b656e7320666f722066756e64696e6720286f6e206d656d62657220636f6e74726f6c6c6572206163636f756e7429445a65726f546f6b656e7346756e64696e67001e047c547279696e6720746f2066756e642077697468207a65726f20746f6b656e7378496e73756666696369656e7442616c616e6365466f725472616e73666572001f04b443616e6e6f742077697468647261773a20696e73756666696369656e74206275646765742062616c616e63652e048c44697363757373696f6e206d6f64756c6520707265646566696e6564206572726f7273b1090c5070616c6c65745f776f726b696e675f67726f7570186572726f7273144572726f720804540004490001803c41726974686d657469634572726f72000004c8556e65787065637465642061726974686d65746963206572726f7220286f766572666c6f77202f20756e646572666c6f7729605374616b6542616c616e636543616e6e6f7442655a65726f0001049850726f7669646564207374616b652062616c616e63652063616e6e6f74206265207a65726f2e4c4f70656e696e67446f65734e6f7445786973740002045c4f70656e696e6720646f6573206e6f742065786973742e6443616e6e6f74486972654d756c7469706c654c656164657273000304bc43616e6e6f742066696c6c206f70656e696e672077697468206d756c7469706c65206170706c69636174696f6e732e74576f726b65724170706c69636174696f6e446f65734e6f74457869737400040488576f726b6572206170706c69636174696f6e20646f6573206e6f742065786973742e744d6178416374697665576f726b65724e756d626572457863656564656400050488576f726b696e672067726f75702073697a65206c696d69742065786365656465642e9c5375636365737366756c576f726b65724170706c69636174696f6e446f65734e6f744578697374000604b45375636365737366756c20776f726b6572206170706c69636174696f6e20646f6573206e6f742065786973742e8043616e6e6f74486972654c65616465725768656e4c6561646572457869737473000704c45468657265206973206c656164657220616c72656164792c2063616e6e6f74206869726520616e6f74686572206f6e652e4049734e6f744c6561644163636f756e740008044c4e6f742061206c656164206163636f756e742e4443757272656e744c6561644e6f745365740009046043757272656e74206c656164206973206e6f74207365742e48576f726b6572446f65734e6f744578697374000a0458576f726b657220646f6573206e6f742065786973742e4c496e76616c69644d656d6265724f726967696e000b0470496e76616c6964206f726967696e20666f722061206d656d6265722e705369676e657249734e6f74576f726b6572526f6c654163636f756e74000c04885369676e6572206973206e6f7420776f726b657220726f6c65206163636f756e742e4842656c6f774d696e696d756d5374616b6573000d04885374616b696e67206c657373207468616e20746865206c6f77657220626f756e642e7c496e73756666696369656e7442616c616e6365546f436f7665725374616b65000e0490496e73756666696369656e742062616c616e636520746f20636f766572207374616b652e884170706c69636174696f6e5374616b65446f65736e744d617463684f70656e696e67000f04d84170706c69636174696f6e207374616b65206973206c657373207468616e207265717569726564206f70656e696e67207374616b652e504f726967696e49734e6f744170706c6963616e74001004604f726967696e206973206e6f74206170706c6963616e742e3c576f726b657249734c656176696e6700110498496e76616c6964206f7065726174696f6e202d20776f726b6572206973206c656176696e672e5043616e6e6f74526577617264576974685a65726f0012046452657761726420636f756c64206e6f74206265207a65726f2e78496e76616c69645374616b696e674163636f756e74466f724d656d626572001304ac5374616b696e67206163636f756e7420646f65736e27742062656c6f6e6720746f2061206d656d6265722e5c436f6e666c6963745374616b65734f6e4163636f756e74001404b05374616b696e67206163636f756e7420636f6e7461696e7320636f6e666c696374696e67207374616b65732e44576f726b65724861734e6f5265776172640015047c576f726b657220686173206e6f20726563757272696e67207265776172642e78556e7374616b696e67506572696f644c6573735468616e4d696e696d756d001604090153706563696669656420756e7374616b696e6720706572696f64206973206c657373207468656e206d696e696d756d2073657420666f72207468652067726f75702e3c43616e6e6f745370656e645a65726f00170460496e76616c6964207370656e64696e6720616d6f756e742e74496e73756666696369656e74427564676574466f725370656e64696e67001804a449742773206e6f7420656e6f7567682062756467657420666f722074686973207370656e64696e672e584e6f4170706c69636174696f6e7350726f7669646564001904bc43616e6e6f742066696c6c206f70656e696e67202d206e6f206170706c69636174696f6e732070726f76696465642ea043616e6e6f7444656372656173655374616b6544656c7461477265617465725468616e5374616b65001a04fc43616e6e6f74206465637265617365207374616b65202d207374616b652064656c74612067726561746572207468616e20696e697469616c207374616b652e644170706c69636174696f6e734e6f74466f724f70656e696e67001b04f0547279696e6720746f2066696c6c206f70656e696e67207769746820616e206170706c69636174696f6e20666f72206f74686572206f70656e696e6764576f726b657253746f7261676556616c7565546f6f4c6f6e67001c0480576f726b65722073746f72616765207465787420697320746f6f206c6f6e672e70496e73756666696369656e74546f6b656e73466f7246756e64696e67001d04f8496e73756666696369656e7420746f6b656e7320666f722066756e64696e6720286f6e206d656d62657220636f6e74726f6c6c6572206163636f756e7429445a65726f546f6b656e7346756e64696e67001e047c547279696e6720746f2066756e642077697468207a65726f20746f6b656e7378496e73756666696369656e7442616c616e6365466f725472616e73666572001f04b443616e6e6f742077697468647261773a20696e73756666696369656e74206275646765742062616c616e63652e048c44697363757373696f6e206d6f64756c6520707265646566696e6564206572726f7273b5090c5070616c6c65745f776f726b696e675f67726f7570186572726f7273144572726f720804540004490001803c41726974686d657469634572726f72000004c8556e65787065637465642061726974686d65746963206572726f7220286f766572666c6f77202f20756e646572666c6f7729605374616b6542616c616e636543616e6e6f7442655a65726f0001049850726f7669646564207374616b652062616c616e63652063616e6e6f74206265207a65726f2e4c4f70656e696e67446f65734e6f7445786973740002045c4f70656e696e6720646f6573206e6f742065786973742e6443616e6e6f74486972654d756c7469706c654c656164657273000304bc43616e6e6f742066696c6c206f70656e696e672077697468206d756c7469706c65206170706c69636174696f6e732e74576f726b65724170706c69636174696f6e446f65734e6f74457869737400040488576f726b6572206170706c69636174696f6e20646f6573206e6f742065786973742e744d6178416374697665576f726b65724e756d626572457863656564656400050488576f726b696e672067726f75702073697a65206c696d69742065786365656465642e9c5375636365737366756c576f726b65724170706c69636174696f6e446f65734e6f744578697374000604b45375636365737366756c20776f726b6572206170706c69636174696f6e20646f6573206e6f742065786973742e8043616e6e6f74486972654c65616465725768656e4c6561646572457869737473000704c45468657265206973206c656164657220616c72656164792c2063616e6e6f74206869726520616e6f74686572206f6e652e4049734e6f744c6561644163636f756e740008044c4e6f742061206c656164206163636f756e742e4443757272656e744c6561644e6f745365740009046043757272656e74206c656164206973206e6f74207365742e48576f726b6572446f65734e6f744578697374000a0458576f726b657220646f6573206e6f742065786973742e4c496e76616c69644d656d6265724f726967696e000b0470496e76616c6964206f726967696e20666f722061206d656d6265722e705369676e657249734e6f74576f726b6572526f6c654163636f756e74000c04885369676e6572206973206e6f7420776f726b657220726f6c65206163636f756e742e4842656c6f774d696e696d756d5374616b6573000d04885374616b696e67206c657373207468616e20746865206c6f77657220626f756e642e7c496e73756666696369656e7442616c616e6365546f436f7665725374616b65000e0490496e73756666696369656e742062616c616e636520746f20636f766572207374616b652e884170706c69636174696f6e5374616b65446f65736e744d617463684f70656e696e67000f04d84170706c69636174696f6e207374616b65206973206c657373207468616e207265717569726564206f70656e696e67207374616b652e504f726967696e49734e6f744170706c6963616e74001004604f726967696e206973206e6f74206170706c6963616e742e3c576f726b657249734c656176696e6700110498496e76616c6964206f7065726174696f6e202d20776f726b6572206973206c656176696e672e5043616e6e6f74526577617264576974685a65726f0012046452657761726420636f756c64206e6f74206265207a65726f2e78496e76616c69645374616b696e674163636f756e74466f724d656d626572001304ac5374616b696e67206163636f756e7420646f65736e27742062656c6f6e6720746f2061206d656d6265722e5c436f6e666c6963745374616b65734f6e4163636f756e74001404b05374616b696e67206163636f756e7420636f6e7461696e7320636f6e666c696374696e67207374616b65732e44576f726b65724861734e6f5265776172640015047c576f726b657220686173206e6f20726563757272696e67207265776172642e78556e7374616b696e67506572696f644c6573735468616e4d696e696d756d001604090153706563696669656420756e7374616b696e6720706572696f64206973206c657373207468656e206d696e696d756d2073657420666f72207468652067726f75702e3c43616e6e6f745370656e645a65726f00170460496e76616c6964207370656e64696e6720616d6f756e742e74496e73756666696369656e74427564676574466f725370656e64696e67001804a449742773206e6f7420656e6f7567682062756467657420666f722074686973207370656e64696e672e584e6f4170706c69636174696f6e7350726f7669646564001904bc43616e6e6f742066696c6c206f70656e696e67202d206e6f206170706c69636174696f6e732070726f76696465642ea043616e6e6f7444656372656173655374616b6544656c7461477265617465725468616e5374616b65001a04fc43616e6e6f74206465637265617365207374616b65202d207374616b652064656c74612067726561746572207468616e20696e697469616c207374616b652e644170706c69636174696f6e734e6f74466f724f70656e696e67001b04f0547279696e6720746f2066696c6c206f70656e696e67207769746820616e206170706c69636174696f6e20666f72206f74686572206f70656e696e6764576f726b657253746f7261676556616c7565546f6f4c6f6e67001c0480576f726b65722073746f72616765207465787420697320746f6f206c6f6e672e70496e73756666696369656e74546f6b656e73466f7246756e64696e67001d04f8496e73756666696369656e7420746f6b656e7320666f722066756e64696e6720286f6e206d656d62657220636f6e74726f6c6c6572206163636f756e7429445a65726f546f6b656e7346756e64696e67001e047c547279696e6720746f2066756e642077697468207a65726f20746f6b656e7378496e73756666696369656e7442616c616e6365466f725472616e73666572001f04b443616e6e6f742077697468647261773a20696e73756666696369656e74206275646765742062616c616e63652e048c44697363757373696f6e206d6f64756c6520707265646566696e6564206572726f7273b9090c5070616c6c65745f776f726b696e675f67726f7570186572726f7273144572726f720804540004490001803c41726974686d657469634572726f72000004c8556e65787065637465642061726974686d65746963206572726f7220286f766572666c6f77202f20756e646572666c6f7729605374616b6542616c616e636543616e6e6f7442655a65726f0001049850726f7669646564207374616b652062616c616e63652063616e6e6f74206265207a65726f2e4c4f70656e696e67446f65734e6f7445786973740002045c4f70656e696e6720646f6573206e6f742065786973742e6443616e6e6f74486972654d756c7469706c654c656164657273000304bc43616e6e6f742066696c6c206f70656e696e672077697468206d756c7469706c65206170706c69636174696f6e732e74576f726b65724170706c69636174696f6e446f65734e6f74457869737400040488576f726b6572206170706c69636174696f6e20646f6573206e6f742065786973742e744d6178416374697665576f726b65724e756d626572457863656564656400050488576f726b696e672067726f75702073697a65206c696d69742065786365656465642e9c5375636365737366756c576f726b65724170706c69636174696f6e446f65734e6f744578697374000604b45375636365737366756c20776f726b6572206170706c69636174696f6e20646f6573206e6f742065786973742e8043616e6e6f74486972654c65616465725768656e4c6561646572457869737473000704c45468657265206973206c656164657220616c72656164792c2063616e6e6f74206869726520616e6f74686572206f6e652e4049734e6f744c6561644163636f756e740008044c4e6f742061206c656164206163636f756e742e4443757272656e744c6561644e6f745365740009046043757272656e74206c656164206973206e6f74207365742e48576f726b6572446f65734e6f744578697374000a0458576f726b657220646f6573206e6f742065786973742e4c496e76616c69644d656d6265724f726967696e000b0470496e76616c6964206f726967696e20666f722061206d656d6265722e705369676e657249734e6f74576f726b6572526f6c654163636f756e74000c04885369676e6572206973206e6f7420776f726b657220726f6c65206163636f756e742e4842656c6f774d696e696d756d5374616b6573000d04885374616b696e67206c657373207468616e20746865206c6f77657220626f756e642e7c496e73756666696369656e7442616c616e6365546f436f7665725374616b65000e0490496e73756666696369656e742062616c616e636520746f20636f766572207374616b652e884170706c69636174696f6e5374616b65446f65736e744d617463684f70656e696e67000f04d84170706c69636174696f6e207374616b65206973206c657373207468616e207265717569726564206f70656e696e67207374616b652e504f726967696e49734e6f744170706c6963616e74001004604f726967696e206973206e6f74206170706c6963616e742e3c576f726b657249734c656176696e6700110498496e76616c6964206f7065726174696f6e202d20776f726b6572206973206c656176696e672e5043616e6e6f74526577617264576974685a65726f0012046452657761726420636f756c64206e6f74206265207a65726f2e78496e76616c69645374616b696e674163636f756e74466f724d656d626572001304ac5374616b696e67206163636f756e7420646f65736e27742062656c6f6e6720746f2061206d656d6265722e5c436f6e666c6963745374616b65734f6e4163636f756e74001404b05374616b696e67206163636f756e7420636f6e7461696e7320636f6e666c696374696e67207374616b65732e44576f726b65724861734e6f5265776172640015047c576f726b657220686173206e6f20726563757272696e67207265776172642e78556e7374616b696e67506572696f644c6573735468616e4d696e696d756d001604090153706563696669656420756e7374616b696e6720706572696f64206973206c657373207468656e206d696e696d756d2073657420666f72207468652067726f75702e3c43616e6e6f745370656e645a65726f00170460496e76616c6964207370656e64696e6720616d6f756e742e74496e73756666696369656e74427564676574466f725370656e64696e67001804a449742773206e6f7420656e6f7567682062756467657420666f722074686973207370656e64696e672e584e6f4170706c69636174696f6e7350726f7669646564001904bc43616e6e6f742066696c6c206f70656e696e67202d206e6f206170706c69636174696f6e732070726f76696465642ea043616e6e6f7444656372656173655374616b6544656c7461477265617465725468616e5374616b65001a04fc43616e6e6f74206465637265617365207374616b65202d207374616b652064656c74612067726561746572207468616e20696e697469616c207374616b652e644170706c69636174696f6e734e6f74466f724f70656e696e67001b04f0547279696e6720746f2066696c6c206f70656e696e67207769746820616e206170706c69636174696f6e20666f72206f74686572206f70656e696e6764576f726b657253746f7261676556616c7565546f6f4c6f6e67001c0480576f726b65722073746f72616765207465787420697320746f6f206c6f6e672e70496e73756666696369656e74546f6b656e73466f7246756e64696e67001d04f8496e73756666696369656e7420746f6b656e7320666f722066756e64696e6720286f6e206d656d62657220636f6e74726f6c6c6572206163636f756e7429445a65726f546f6b656e7346756e64696e67001e047c547279696e6720746f2066756e642077697468207a65726f20746f6b656e7378496e73756666696369656e7442616c616e6365466f725472616e73666572001f04b443616e6e6f742077697468647261773a20696e73756666696369656e74206275646765742062616c616e63652e048c44697363757373696f6e206d6f64756c6520707265646566696e6564206572726f7273bd090c5070616c6c65745f776f726b696e675f67726f7570186572726f7273144572726f720804540004490001803c41726974686d657469634572726f72000004c8556e65787065637465642061726974686d65746963206572726f7220286f766572666c6f77202f20756e646572666c6f7729605374616b6542616c616e636543616e6e6f7442655a65726f0001049850726f7669646564207374616b652062616c616e63652063616e6e6f74206265207a65726f2e4c4f70656e696e67446f65734e6f7445786973740002045c4f70656e696e6720646f6573206e6f742065786973742e6443616e6e6f74486972654d756c7469706c654c656164657273000304bc43616e6e6f742066696c6c206f70656e696e672077697468206d756c7469706c65206170706c69636174696f6e732e74576f726b65724170706c69636174696f6e446f65734e6f74457869737400040488576f726b6572206170706c69636174696f6e20646f6573206e6f742065786973742e744d6178416374697665576f726b65724e756d626572457863656564656400050488576f726b696e672067726f75702073697a65206c696d69742065786365656465642e9c5375636365737366756c576f726b65724170706c69636174696f6e446f65734e6f744578697374000604b45375636365737366756c20776f726b6572206170706c69636174696f6e20646f6573206e6f742065786973742e8043616e6e6f74486972654c65616465725768656e4c6561646572457869737473000704c45468657265206973206c656164657220616c72656164792c2063616e6e6f74206869726520616e6f74686572206f6e652e4049734e6f744c6561644163636f756e740008044c4e6f742061206c656164206163636f756e742e4443757272656e744c6561644e6f745365740009046043757272656e74206c656164206973206e6f74207365742e48576f726b6572446f65734e6f744578697374000a0458576f726b657220646f6573206e6f742065786973742e4c496e76616c69644d656d6265724f726967696e000b0470496e76616c6964206f726967696e20666f722061206d656d6265722e705369676e657249734e6f74576f726b6572526f6c654163636f756e74000c04885369676e6572206973206e6f7420776f726b657220726f6c65206163636f756e742e4842656c6f774d696e696d756d5374616b6573000d04885374616b696e67206c657373207468616e20746865206c6f77657220626f756e642e7c496e73756666696369656e7442616c616e6365546f436f7665725374616b65000e0490496e73756666696369656e742062616c616e636520746f20636f766572207374616b652e884170706c69636174696f6e5374616b65446f65736e744d617463684f70656e696e67000f04d84170706c69636174696f6e207374616b65206973206c657373207468616e207265717569726564206f70656e696e67207374616b652e504f726967696e49734e6f744170706c6963616e74001004604f726967696e206973206e6f74206170706c6963616e742e3c576f726b657249734c656176696e6700110498496e76616c6964206f7065726174696f6e202d20776f726b6572206973206c656176696e672e5043616e6e6f74526577617264576974685a65726f0012046452657761726420636f756c64206e6f74206265207a65726f2e78496e76616c69645374616b696e674163636f756e74466f724d656d626572001304ac5374616b696e67206163636f756e7420646f65736e27742062656c6f6e6720746f2061206d656d6265722e5c436f6e666c6963745374616b65734f6e4163636f756e74001404b05374616b696e67206163636f756e7420636f6e7461696e7320636f6e666c696374696e67207374616b65732e44576f726b65724861734e6f5265776172640015047c576f726b657220686173206e6f20726563757272696e67207265776172642e78556e7374616b696e67506572696f644c6573735468616e4d696e696d756d001604090153706563696669656420756e7374616b696e6720706572696f64206973206c657373207468656e206d696e696d756d2073657420666f72207468652067726f75702e3c43616e6e6f745370656e645a65726f00170460496e76616c6964207370656e64696e6720616d6f756e742e74496e73756666696369656e74427564676574466f725370656e64696e67001804a449742773206e6f7420656e6f7567682062756467657420666f722074686973207370656e64696e672e584e6f4170706c69636174696f6e7350726f7669646564001904bc43616e6e6f742066696c6c206f70656e696e67202d206e6f206170706c69636174696f6e732070726f76696465642ea043616e6e6f7444656372656173655374616b6544656c7461477265617465725468616e5374616b65001a04fc43616e6e6f74206465637265617365207374616b65202d207374616b652064656c74612067726561746572207468616e20696e697469616c207374616b652e644170706c69636174696f6e734e6f74466f724f70656e696e67001b04f0547279696e6720746f2066696c6c206f70656e696e67207769746820616e206170706c69636174696f6e20666f72206f74686572206f70656e696e6764576f726b657253746f7261676556616c7565546f6f4c6f6e67001c0480576f726b65722073746f72616765207465787420697320746f6f206c6f6e672e70496e73756666696369656e74546f6b656e73466f7246756e64696e67001d04f8496e73756666696369656e7420746f6b656e7320666f722066756e64696e6720286f6e206d656d62657220636f6e74726f6c6c6572206163636f756e7429445a65726f546f6b656e7346756e64696e67001e047c547279696e6720746f2066756e642077697468207a65726f20746f6b656e7378496e73756666696369656e7442616c616e6365466f725472616e73666572001f04b443616e6e6f742077697468647261773a20696e73756666696369656e74206275646765742062616c616e63652e048c44697363757373696f6e206d6f64756c6520707265646566696e6564206572726f7273c1090c5070616c6c65745f776f726b696e675f67726f7570186572726f7273144572726f720804540004490001803c41726974686d657469634572726f72000004c8556e65787065637465642061726974686d65746963206572726f7220286f766572666c6f77202f20756e646572666c6f7729605374616b6542616c616e636543616e6e6f7442655a65726f0001049850726f7669646564207374616b652062616c616e63652063616e6e6f74206265207a65726f2e4c4f70656e696e67446f65734e6f7445786973740002045c4f70656e696e6720646f6573206e6f742065786973742e6443616e6e6f74486972654d756c7469706c654c656164657273000304bc43616e6e6f742066696c6c206f70656e696e672077697468206d756c7469706c65206170706c69636174696f6e732e74576f726b65724170706c69636174696f6e446f65734e6f74457869737400040488576f726b6572206170706c69636174696f6e20646f6573206e6f742065786973742e744d6178416374697665576f726b65724e756d626572457863656564656400050488576f726b696e672067726f75702073697a65206c696d69742065786365656465642e9c5375636365737366756c576f726b65724170706c69636174696f6e446f65734e6f744578697374000604b45375636365737366756c20776f726b6572206170706c69636174696f6e20646f6573206e6f742065786973742e8043616e6e6f74486972654c65616465725768656e4c6561646572457869737473000704c45468657265206973206c656164657220616c72656164792c2063616e6e6f74206869726520616e6f74686572206f6e652e4049734e6f744c6561644163636f756e740008044c4e6f742061206c656164206163636f756e742e4443757272656e744c6561644e6f745365740009046043757272656e74206c656164206973206e6f74207365742e48576f726b6572446f65734e6f744578697374000a0458576f726b657220646f6573206e6f742065786973742e4c496e76616c69644d656d6265724f726967696e000b0470496e76616c6964206f726967696e20666f722061206d656d6265722e705369676e657249734e6f74576f726b6572526f6c654163636f756e74000c04885369676e6572206973206e6f7420776f726b657220726f6c65206163636f756e742e4842656c6f774d696e696d756d5374616b6573000d04885374616b696e67206c657373207468616e20746865206c6f77657220626f756e642e7c496e73756666696369656e7442616c616e6365546f436f7665725374616b65000e0490496e73756666696369656e742062616c616e636520746f20636f766572207374616b652e884170706c69636174696f6e5374616b65446f65736e744d617463684f70656e696e67000f04d84170706c69636174696f6e207374616b65206973206c657373207468616e207265717569726564206f70656e696e67207374616b652e504f726967696e49734e6f744170706c6963616e74001004604f726967696e206973206e6f74206170706c6963616e742e3c576f726b657249734c656176696e6700110498496e76616c6964206f7065726174696f6e202d20776f726b6572206973206c656176696e672e5043616e6e6f74526577617264576974685a65726f0012046452657761726420636f756c64206e6f74206265207a65726f2e78496e76616c69645374616b696e674163636f756e74466f724d656d626572001304ac5374616b696e67206163636f756e7420646f65736e27742062656c6f6e6720746f2061206d656d6265722e5c436f6e666c6963745374616b65734f6e4163636f756e74001404b05374616b696e67206163636f756e7420636f6e7461696e7320636f6e666c696374696e67207374616b65732e44576f726b65724861734e6f5265776172640015047c576f726b657220686173206e6f20726563757272696e67207265776172642e78556e7374616b696e67506572696f644c6573735468616e4d696e696d756d001604090153706563696669656420756e7374616b696e6720706572696f64206973206c657373207468656e206d696e696d756d2073657420666f72207468652067726f75702e3c43616e6e6f745370656e645a65726f00170460496e76616c6964207370656e64696e6720616d6f756e742e74496e73756666696369656e74427564676574466f725370656e64696e67001804a449742773206e6f7420656e6f7567682062756467657420666f722074686973207370656e64696e672e584e6f4170706c69636174696f6e7350726f7669646564001904bc43616e6e6f742066696c6c206f70656e696e67202d206e6f206170706c69636174696f6e732070726f76696465642ea043616e6e6f7444656372656173655374616b6544656c7461477265617465725468616e5374616b65001a04fc43616e6e6f74206465637265617365207374616b65202d207374616b652064656c74612067726561746572207468616e20696e697469616c207374616b652e644170706c69636174696f6e734e6f74466f724f70656e696e67001b04f0547279696e6720746f2066696c6c206f70656e696e67207769746820616e206170706c69636174696f6e20666f72206f74686572206f70656e696e6764576f726b657253746f7261676556616c7565546f6f4c6f6e67001c0480576f726b65722073746f72616765207465787420697320746f6f206c6f6e672e70496e73756666696369656e74546f6b656e73466f7246756e64696e67001d04f8496e73756666696369656e7420746f6b656e7320666f722066756e64696e6720286f6e206d656d62657220636f6e74726f6c6c6572206163636f756e7429445a65726f546f6b656e7346756e64696e67001e047c547279696e6720746f2066756e642077697468207a65726f20746f6b656e7378496e73756666696369656e7442616c616e6365466f725472616e73666572001f04b443616e6e6f742077697468647261773a20696e73756666696369656e74206275646765742062616c616e63652e048c44697363757373696f6e206d6f64756c6520707265646566696e6564206572726f7273c5090c5070616c6c65745f776f726b696e675f67726f7570186572726f7273144572726f720804540004490001803c41726974686d657469634572726f72000004c8556e65787065637465642061726974686d65746963206572726f7220286f766572666c6f77202f20756e646572666c6f7729605374616b6542616c616e636543616e6e6f7442655a65726f0001049850726f7669646564207374616b652062616c616e63652063616e6e6f74206265207a65726f2e4c4f70656e696e67446f65734e6f7445786973740002045c4f70656e696e6720646f6573206e6f742065786973742e6443616e6e6f74486972654d756c7469706c654c656164657273000304bc43616e6e6f742066696c6c206f70656e696e672077697468206d756c7469706c65206170706c69636174696f6e732e74576f726b65724170706c69636174696f6e446f65734e6f74457869737400040488576f726b6572206170706c69636174696f6e20646f6573206e6f742065786973742e744d6178416374697665576f726b65724e756d626572457863656564656400050488576f726b696e672067726f75702073697a65206c696d69742065786365656465642e9c5375636365737366756c576f726b65724170706c69636174696f6e446f65734e6f744578697374000604b45375636365737366756c20776f726b6572206170706c69636174696f6e20646f6573206e6f742065786973742e8043616e6e6f74486972654c65616465725768656e4c6561646572457869737473000704c45468657265206973206c656164657220616c72656164792c2063616e6e6f74206869726520616e6f74686572206f6e652e4049734e6f744c6561644163636f756e740008044c4e6f742061206c656164206163636f756e742e4443757272656e744c6561644e6f745365740009046043757272656e74206c656164206973206e6f74207365742e48576f726b6572446f65734e6f744578697374000a0458576f726b657220646f6573206e6f742065786973742e4c496e76616c69644d656d6265724f726967696e000b0470496e76616c6964206f726967696e20666f722061206d656d6265722e705369676e657249734e6f74576f726b6572526f6c654163636f756e74000c04885369676e6572206973206e6f7420776f726b657220726f6c65206163636f756e742e4842656c6f774d696e696d756d5374616b6573000d04885374616b696e67206c657373207468616e20746865206c6f77657220626f756e642e7c496e73756666696369656e7442616c616e6365546f436f7665725374616b65000e0490496e73756666696369656e742062616c616e636520746f20636f766572207374616b652e884170706c69636174696f6e5374616b65446f65736e744d617463684f70656e696e67000f04d84170706c69636174696f6e207374616b65206973206c657373207468616e207265717569726564206f70656e696e67207374616b652e504f726967696e49734e6f744170706c6963616e74001004604f726967696e206973206e6f74206170706c6963616e742e3c576f726b657249734c656176696e6700110498496e76616c6964206f7065726174696f6e202d20776f726b6572206973206c656176696e672e5043616e6e6f74526577617264576974685a65726f0012046452657761726420636f756c64206e6f74206265207a65726f2e78496e76616c69645374616b696e674163636f756e74466f724d656d626572001304ac5374616b696e67206163636f756e7420646f65736e27742062656c6f6e6720746f2061206d656d6265722e5c436f6e666c6963745374616b65734f6e4163636f756e74001404b05374616b696e67206163636f756e7420636f6e7461696e7320636f6e666c696374696e67207374616b65732e44576f726b65724861734e6f5265776172640015047c576f726b657220686173206e6f20726563757272696e67207265776172642e78556e7374616b696e67506572696f644c6573735468616e4d696e696d756d001604090153706563696669656420756e7374616b696e6720706572696f64206973206c657373207468656e206d696e696d756d2073657420666f72207468652067726f75702e3c43616e6e6f745370656e645a65726f00170460496e76616c6964207370656e64696e6720616d6f756e742e74496e73756666696369656e74427564676574466f725370656e64696e67001804a449742773206e6f7420656e6f7567682062756467657420666f722074686973207370656e64696e672e584e6f4170706c69636174696f6e7350726f7669646564001904bc43616e6e6f742066696c6c206f70656e696e67202d206e6f206170706c69636174696f6e732070726f76696465642ea043616e6e6f7444656372656173655374616b6544656c7461477265617465725468616e5374616b65001a04fc43616e6e6f74206465637265617365207374616b65202d207374616b652064656c74612067726561746572207468616e20696e697469616c207374616b652e644170706c69636174696f6e734e6f74466f724f70656e696e67001b04f0547279696e6720746f2066696c6c206f70656e696e67207769746820616e206170706c69636174696f6e20666f72206f74686572206f70656e696e6764576f726b657253746f7261676556616c7565546f6f4c6f6e67001c0480576f726b65722073746f72616765207465787420697320746f6f206c6f6e672e70496e73756666696369656e74546f6b656e73466f7246756e64696e67001d04f8496e73756666696369656e7420746f6b656e7320666f722066756e64696e6720286f6e206d656d62657220636f6e74726f6c6c6572206163636f756e7429445a65726f546f6b656e7346756e64696e67001e047c547279696e6720746f2066756e642077697468207a65726f20746f6b656e7378496e73756666696369656e7442616c616e6365466f725472616e73666572001f04b443616e6e6f742077697468647261773a20696e73756666696369656e74206275646765742062616c616e63652e048c44697363757373696f6e206d6f64756c6520707265646566696e6564206572726f7273c9090c5070616c6c65745f776f726b696e675f67726f7570186572726f7273144572726f720804540004490001803c41726974686d657469634572726f72000004c8556e65787065637465642061726974686d65746963206572726f7220286f766572666c6f77202f20756e646572666c6f7729605374616b6542616c616e636543616e6e6f7442655a65726f0001049850726f7669646564207374616b652062616c616e63652063616e6e6f74206265207a65726f2e4c4f70656e696e67446f65734e6f7445786973740002045c4f70656e696e6720646f6573206e6f742065786973742e6443616e6e6f74486972654d756c7469706c654c656164657273000304bc43616e6e6f742066696c6c206f70656e696e672077697468206d756c7469706c65206170706c69636174696f6e732e74576f726b65724170706c69636174696f6e446f65734e6f74457869737400040488576f726b6572206170706c69636174696f6e20646f6573206e6f742065786973742e744d6178416374697665576f726b65724e756d626572457863656564656400050488576f726b696e672067726f75702073697a65206c696d69742065786365656465642e9c5375636365737366756c576f726b65724170706c69636174696f6e446f65734e6f744578697374000604b45375636365737366756c20776f726b6572206170706c69636174696f6e20646f6573206e6f742065786973742e8043616e6e6f74486972654c65616465725768656e4c6561646572457869737473000704c45468657265206973206c656164657220616c72656164792c2063616e6e6f74206869726520616e6f74686572206f6e652e4049734e6f744c6561644163636f756e740008044c4e6f742061206c656164206163636f756e742e4443757272656e744c6561644e6f745365740009046043757272656e74206c656164206973206e6f74207365742e48576f726b6572446f65734e6f744578697374000a0458576f726b657220646f6573206e6f742065786973742e4c496e76616c69644d656d6265724f726967696e000b0470496e76616c6964206f726967696e20666f722061206d656d6265722e705369676e657249734e6f74576f726b6572526f6c654163636f756e74000c04885369676e6572206973206e6f7420776f726b657220726f6c65206163636f756e742e4842656c6f774d696e696d756d5374616b6573000d04885374616b696e67206c657373207468616e20746865206c6f77657220626f756e642e7c496e73756666696369656e7442616c616e6365546f436f7665725374616b65000e0490496e73756666696369656e742062616c616e636520746f20636f766572207374616b652e884170706c69636174696f6e5374616b65446f65736e744d617463684f70656e696e67000f04d84170706c69636174696f6e207374616b65206973206c657373207468616e207265717569726564206f70656e696e67207374616b652e504f726967696e49734e6f744170706c6963616e74001004604f726967696e206973206e6f74206170706c6963616e742e3c576f726b657249734c656176696e6700110498496e76616c6964206f7065726174696f6e202d20776f726b6572206973206c656176696e672e5043616e6e6f74526577617264576974685a65726f0012046452657761726420636f756c64206e6f74206265207a65726f2e78496e76616c69645374616b696e674163636f756e74466f724d656d626572001304ac5374616b696e67206163636f756e7420646f65736e27742062656c6f6e6720746f2061206d656d6265722e5c436f6e666c6963745374616b65734f6e4163636f756e74001404b05374616b696e67206163636f756e7420636f6e7461696e7320636f6e666c696374696e67207374616b65732e44576f726b65724861734e6f5265776172640015047c576f726b657220686173206e6f20726563757272696e67207265776172642e78556e7374616b696e67506572696f644c6573735468616e4d696e696d756d001604090153706563696669656420756e7374616b696e6720706572696f64206973206c657373207468656e206d696e696d756d2073657420666f72207468652067726f75702e3c43616e6e6f745370656e645a65726f00170460496e76616c6964207370656e64696e6720616d6f756e742e74496e73756666696369656e74427564676574466f725370656e64696e67001804a449742773206e6f7420656e6f7567682062756467657420666f722074686973207370656e64696e672e584e6f4170706c69636174696f6e7350726f7669646564001904bc43616e6e6f742066696c6c206f70656e696e67202d206e6f206170706c69636174696f6e732070726f76696465642ea043616e6e6f7444656372656173655374616b6544656c7461477265617465725468616e5374616b65001a04fc43616e6e6f74206465637265617365207374616b65202d207374616b652064656c74612067726561746572207468616e20696e697469616c207374616b652e644170706c69636174696f6e734e6f74466f724f70656e696e67001b04f0547279696e6720746f2066696c6c206f70656e696e67207769746820616e206170706c69636174696f6e20666f72206f74686572206f70656e696e6764576f726b657253746f7261676556616c7565546f6f4c6f6e67001c0480576f726b65722073746f72616765207465787420697320746f6f206c6f6e672e70496e73756666696369656e74546f6b656e73466f7246756e64696e67001d04f8496e73756666696369656e7420746f6b656e7320666f722066756e64696e6720286f6e206d656d62657220636f6e74726f6c6c6572206163636f756e7429445a65726f546f6b656e7346756e64696e67001e047c547279696e6720746f2066756e642077697468207a65726f20746f6b656e7378496e73756666696369656e7442616c616e6365466f725472616e73666572001f04b443616e6e6f742077697468647261773a20696e73756666696369656e74206275646765742062616c616e63652e048c44697363757373696f6e206d6f64756c6520707265646566696e6564206572726f7273cd09102873705f72756e74696d651c67656e657269634c756e636865636b65645f65787472696e73696348556e636865636b656445787472696e736963101c4164647265737301001043616c6c013d04245369676e617475726501d10914457874726101dd0900040030000000d109082873705f72756e74696d65384d756c74695369676e617475726500010c1c456432353531390400a1050148656432353531393a3a5369676e61747572650000001c537232353531390400d5050148737232353531393a3a5369676e61747572650001001445636473610400d509014065636473613a3a5369676e617475726500020000d5090c1c73705f636f7265146563647361245369676e617475726500000400d90901205b75383b2036355d0000d909000003410000000800dd0900000420e109e509e909ed09f109f909fd09010a00e10910306672616d655f73797374656d28657874656e73696f6e7354636865636b5f6e6f6e5f7a65726f5f73656e64657248436865636b4e6f6e5a65726f53656e64657204045400000000e50910306672616d655f73797374656d28657874656e73696f6e7348636865636b5f737065635f76657273696f6e40436865636b5370656356657273696f6e04045400000000e90910306672616d655f73797374656d28657874656e73696f6e7340636865636b5f74785f76657273696f6e38436865636b547856657273696f6e04045400000000ed0910306672616d655f73797374656d28657874656e73696f6e7334636865636b5f67656e6573697330436865636b47656e6573697304045400000000f10910306672616d655f73797374656d28657874656e73696f6e733c636865636b5f6d6f7274616c69747938436865636b4d6f7274616c69747904045400000400f509010c4572610000f509102873705f72756e74696d651c67656e657269630c6572610c4572610001010420496d6d6f7274616c0000001c4d6f7274616c31040008000001001c4d6f7274616c32040008000002001c4d6f7274616c33040008000003001c4d6f7274616c34040008000004001c4d6f7274616c35040008000005001c4d6f7274616c36040008000006001c4d6f7274616c37040008000007001c4d6f7274616c38040008000008001c4d6f7274616c3904000800000900204d6f7274616c313004000800000a00204d6f7274616c313104000800000b00204d6f7274616c313204000800000c00204d6f7274616c313304000800000d00204d6f7274616c313404000800000e00204d6f7274616c313504000800000f00204d6f7274616c313604000800001000204d6f7274616c313704000800001100204d6f7274616c313804000800001200204d6f7274616c313904000800001300204d6f7274616c323004000800001400204d6f7274616c323104000800001500204d6f7274616c323204000800001600204d6f7274616c323304000800001700204d6f7274616c323404000800001800204d6f7274616c323504000800001900204d6f7274616c323604000800001a00204d6f7274616c323704000800001b00204d6f7274616c323804000800001c00204d6f7274616c323904000800001d00204d6f7274616c333004000800001e00204d6f7274616c333104000800001f00204d6f7274616c333204000800002000204d6f7274616c333304000800002100204d6f7274616c333404000800002200204d6f7274616c333504000800002300204d6f7274616c333604000800002400204d6f7274616c333704000800002500204d6f7274616c333804000800002600204d6f7274616c333904000800002700204d6f7274616c343004000800002800204d6f7274616c343104000800002900204d6f7274616c343204000800002a00204d6f7274616c343304000800002b00204d6f7274616c343404000800002c00204d6f7274616c343504000800002d00204d6f7274616c343604000800002e00204d6f7274616c343704000800002f00204d6f7274616c343804000800003000204d6f7274616c343904000800003100204d6f7274616c353004000800003200204d6f7274616c353104000800003300204d6f7274616c353204000800003400204d6f7274616c353304000800003500204d6f7274616c353404000800003600204d6f7274616c353504000800003700204d6f7274616c353604000800003800204d6f7274616c353704000800003900204d6f7274616c353804000800003a00204d6f7274616c353904000800003b00204d6f7274616c363004000800003c00204d6f7274616c363104000800003d00204d6f7274616c363204000800003e00204d6f7274616c363304000800003f00204d6f7274616c363404000800004000204d6f7274616c363504000800004100204d6f7274616c363604000800004200204d6f7274616c363704000800004300204d6f7274616c363804000800004400204d6f7274616c363904000800004500204d6f7274616c373004000800004600204d6f7274616c373104000800004700204d6f7274616c373204000800004800204d6f7274616c373304000800004900204d6f7274616c373404000800004a00204d6f7274616c373504000800004b00204d6f7274616c373604000800004c00204d6f7274616c373704000800004d00204d6f7274616c373804000800004e00204d6f7274616c373904000800004f00204d6f7274616c383004000800005000204d6f7274616c383104000800005100204d6f7274616c383204000800005200204d6f7274616c383304000800005300204d6f7274616c383404000800005400204d6f7274616c383504000800005500204d6f7274616c383604000800005600204d6f7274616c383704000800005700204d6f7274616c383804000800005800204d6f7274616c383904000800005900204d6f7274616c393004000800005a00204d6f7274616c393104000800005b00204d6f7274616c393204000800005c00204d6f7274616c393304000800005d00204d6f7274616c393404000800005e00204d6f7274616c393504000800005f00204d6f7274616c393604000800006000204d6f7274616c393704000800006100204d6f7274616c393804000800006200204d6f7274616c393904000800006300244d6f7274616c31303004000800006400244d6f7274616c31303104000800006500244d6f7274616c31303204000800006600244d6f7274616c31303304000800006700244d6f7274616c31303404000800006800244d6f7274616c31303504000800006900244d6f7274616c31303604000800006a00244d6f7274616c31303704000800006b00244d6f7274616c31303804000800006c00244d6f7274616c31303904000800006d00244d6f7274616c31313004000800006e00244d6f7274616c31313104000800006f00244d6f7274616c31313204000800007000244d6f7274616c31313304000800007100244d6f7274616c31313404000800007200244d6f7274616c31313504000800007300244d6f7274616c31313604000800007400244d6f7274616c31313704000800007500244d6f7274616c31313804000800007600244d6f7274616c31313904000800007700244d6f7274616c31323004000800007800244d6f7274616c31323104000800007900244d6f7274616c31323204000800007a00244d6f7274616c31323304000800007b00244d6f7274616c31323404000800007c00244d6f7274616c31323504000800007d00244d6f7274616c31323604000800007e00244d6f7274616c31323704000800007f00244d6f7274616c31323804000800008000244d6f7274616c31323904000800008100244d6f7274616c31333004000800008200244d6f7274616c31333104000800008300244d6f7274616c31333204000800008400244d6f7274616c31333304000800008500244d6f7274616c31333404000800008600244d6f7274616c31333504000800008700244d6f7274616c31333604000800008800244d6f7274616c31333704000800008900244d6f7274616c31333804000800008a00244d6f7274616c31333904000800008b00244d6f7274616c31343004000800008c00244d6f7274616c31343104000800008d00244d6f7274616c31343204000800008e00244d6f7274616c31343304000800008f00244d6f7274616c31343404000800009000244d6f7274616c31343504000800009100244d6f7274616c31343604000800009200244d6f7274616c31343704000800009300244d6f7274616c31343804000800009400244d6f7274616c31343904000800009500244d6f7274616c31353004000800009600244d6f7274616c31353104000800009700244d6f7274616c31353204000800009800244d6f7274616c31353304000800009900244d6f7274616c31353404000800009a00244d6f7274616c31353504000800009b00244d6f7274616c31353604000800009c00244d6f7274616c31353704000800009d00244d6f7274616c31353804000800009e00244d6f7274616c31353904000800009f00244d6f7274616c3136300400080000a000244d6f7274616c3136310400080000a100244d6f7274616c3136320400080000a200244d6f7274616c3136330400080000a300244d6f7274616c3136340400080000a400244d6f7274616c3136350400080000a500244d6f7274616c3136360400080000a600244d6f7274616c3136370400080000a700244d6f7274616c3136380400080000a800244d6f7274616c3136390400080000a900244d6f7274616c3137300400080000aa00244d6f7274616c3137310400080000ab00244d6f7274616c3137320400080000ac00244d6f7274616c3137330400080000ad00244d6f7274616c3137340400080000ae00244d6f7274616c3137350400080000af00244d6f7274616c3137360400080000b000244d6f7274616c3137370400080000b100244d6f7274616c3137380400080000b200244d6f7274616c3137390400080000b300244d6f7274616c3138300400080000b400244d6f7274616c3138310400080000b500244d6f7274616c3138320400080000b600244d6f7274616c3138330400080000b700244d6f7274616c3138340400080000b800244d6f7274616c3138350400080000b900244d6f7274616c3138360400080000ba00244d6f7274616c3138370400080000bb00244d6f7274616c3138380400080000bc00244d6f7274616c3138390400080000bd00244d6f7274616c3139300400080000be00244d6f7274616c3139310400080000bf00244d6f7274616c3139320400080000c000244d6f7274616c3139330400080000c100244d6f7274616c3139340400080000c200244d6f7274616c3139350400080000c300244d6f7274616c3139360400080000c400244d6f7274616c3139370400080000c500244d6f7274616c3139380400080000c600244d6f7274616c3139390400080000c700244d6f7274616c3230300400080000c800244d6f7274616c3230310400080000c900244d6f7274616c3230320400080000ca00244d6f7274616c3230330400080000cb00244d6f7274616c3230340400080000cc00244d6f7274616c3230350400080000cd00244d6f7274616c3230360400080000ce00244d6f7274616c3230370400080000cf00244d6f7274616c3230380400080000d000244d6f7274616c3230390400080000d100244d6f7274616c3231300400080000d200244d6f7274616c3231310400080000d300244d6f7274616c3231320400080000d400244d6f7274616c3231330400080000d500244d6f7274616c3231340400080000d600244d6f7274616c3231350400080000d700244d6f7274616c3231360400080000d800244d6f7274616c3231370400080000d900244d6f7274616c3231380400080000da00244d6f7274616c3231390400080000db00244d6f7274616c3232300400080000dc00244d6f7274616c3232310400080000dd00244d6f7274616c3232320400080000de00244d6f7274616c3232330400080000df00244d6f7274616c3232340400080000e000244d6f7274616c3232350400080000e100244d6f7274616c3232360400080000e200244d6f7274616c3232370400080000e300244d6f7274616c3232380400080000e400244d6f7274616c3232390400080000e500244d6f7274616c3233300400080000e600244d6f7274616c3233310400080000e700244d6f7274616c3233320400080000e800244d6f7274616c3233330400080000e900244d6f7274616c3233340400080000ea00244d6f7274616c3233350400080000eb00244d6f7274616c3233360400080000ec00244d6f7274616c3233370400080000ed00244d6f7274616c3233380400080000ee00244d6f7274616c3233390400080000ef00244d6f7274616c3234300400080000f000244d6f7274616c3234310400080000f100244d6f7274616c3234320400080000f200244d6f7274616c3234330400080000f300244d6f7274616c3234340400080000f400244d6f7274616c3234350400080000f500244d6f7274616c3234360400080000f600244d6f7274616c3234370400080000f700244d6f7274616c3234380400080000f800244d6f7274616c3234390400080000f900244d6f7274616c3235300400080000fa00244d6f7274616c3235310400080000fb00244d6f7274616c3235320400080000fc00244d6f7274616c3235330400080000fd00244d6f7274616c3235340400080000fe00244d6f7274616c3235350400080000ff0000f90910306672616d655f73797374656d28657874656e73696f6e732c636865636b5f6e6f6e636528436865636b4e6f6e636504045400000400e9030120543a3a496e6465780000fd0910306672616d655f73797374656d28657874656e73696f6e7330636865636b5f7765696768742c436865636b57656967687404045400000000010a086870616c6c65745f7472616e73616374696f6e5f7061796d656e74604368617267655472616e73616374696f6e5061796d656e7404045400000400ec013042616c616e63654f663c543e0000050a08586a6f7973747265616d5f6e6f64655f72756e74696d651c52756e74696d6500000000a41853797374656d011853797374656d401c4163636f756e7401010402000c4101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004e8205468652066756c6c206163636f756e7420696e666f726d6174696f6e20666f72206120706172746963756c6172206163636f756e742049442e3845787472696e736963436f756e74000010040004b820546f74616c2065787472696e7369637320636f756e7420666f72207468652063757272656e7420626c6f636b2e2c426c6f636b57656967687401001c180000000000000488205468652063757272656e742077656967687420666f722074686520626c6f636b2e40416c6c45787472696e736963734c656e000010040004410120546f74616c206c656e6774682028696e2062797465732920666f7220616c6c2065787472696e736963732070757420746f6765746865722c20666f72207468652063757272656e7420626c6f636b2e24426c6f636b4861736801010405102c8000000000000000000000000000000000000000000000000000000000000000000498204d6170206f6620626c6f636b206e756d6265727320746f20626c6f636b206861736865732e3445787472696e736963446174610101040510300400043d012045787472696e73696373206461746120666f72207468652063757272656e7420626c6f636b20286d61707320616e2065787472696e736963277320696e64657820746f206974732064617461292e184e756d6265720100101000000000040901205468652063757272656e7420626c6f636b206e756d626572206265696e672070726f6365737365642e205365742062792060657865637574655f626c6f636b602e28506172656e744861736801002c80000000000000000000000000000000000000000000000000000000000000000004702048617368206f66207468652070726576696f757320626c6f636b2e18446967657374010034040004f020446967657374206f66207468652063757272656e7420626c6f636b2c20616c736f2070617274206f662074686520626c6f636b206865616465722e184576656e747301004404001ca0204576656e7473206465706f736974656420666f72207468652063757272656e7420626c6f636b2e001d01204e4f54453a20546865206974656d20697320756e626f756e6420616e642073686f756c64207468657265666f7265206e657665722062652072656164206f6e20636861696e2ed020497420636f756c64206f746865727769736520696e666c6174652074686520506f562073697a65206f66206120626c6f636b2e002d01204576656e747320686176652061206c6172676520696e2d6d656d6f72792073697a652e20426f7820746865206576656e747320746f206e6f7420676f206f75742d6f662d6d656d6f7279fc206a75737420696e206361736520736f6d656f6e65207374696c6c207265616473207468656d2066726f6d2077697468696e207468652072756e74696d652e284576656e74436f756e74010010100000000004b820546865206e756d626572206f66206576656e747320696e2074686520604576656e74733c543e60206c6973742e2c4576656e74546f70696373010104022cdd030400282501204d617070696e67206265747765656e206120746f7069632028726570726573656e74656420627920543a3a486173682920616e64206120766563746f72206f6620696e646578657394206f66206576656e747320696e2074686520603c4576656e74733c543e3e60206c6973742e00510120416c6c20746f70696320766563746f727320686176652064657465726d696e69737469632073746f72616765206c6f636174696f6e7320646570656e64696e67206f6e2074686520746f7069632e2054686973450120616c6c6f7773206c696768742d636c69656e747320746f206c6576657261676520746865206368616e67657320747269652073746f7261676520747261636b696e67206d656368616e69736d20616e64e420696e2063617365206f66206368616e67657320666574636820746865206c697374206f66206576656e7473206f6620696e7465726573742e004d01205468652076616c756520686173207468652074797065206028543a3a426c6f636b4e756d6265722c204576656e74496e646578296020626563617573652069662077652075736564206f6e6c79206a7573744d012074686520604576656e74496e64657860207468656e20696e20636173652069662074686520746f70696320686173207468652073616d6520636f6e74656e7473206f6e20746865206e65787420626c6f636b0101206e6f206e6f74696669636174696f6e2077696c6c20626520747269676765726564207468757320746865206576656e74206d69676874206265206c6f73742e484c61737452756e74696d65557067726164650000e50304000455012053746f726573207468652060737065635f76657273696f6e6020616e642060737065635f6e616d6560206f66207768656e20746865206c6173742072756e74696d6520757067726164652068617070656e65642e545570677261646564546f553332526566436f756e740100980400044d012054727565206966207765206861766520757067726164656420736f207468617420607479706520526566436f756e74602069732060753332602e2046616c7365202864656661756c7429206966206e6f742e605570677261646564546f547269706c65526566436f756e740100980400085d012054727565206966207765206861766520757067726164656420736f2074686174204163636f756e74496e666f20636f6e7461696e73207468726565207479706573206f662060526566436f756e74602e2046616c736548202864656661756c7429206966206e6f742e38457865637574696f6e50686173650000d503040004882054686520657865637574696f6e207068617365206f662074686520626c6f636b2e01f10301501830426c6f636b57656967687473fd03f901c25f4e69000b00204aa9d10113ffffffffffffffff42375a1a00010b303a73a72e011366666666666666a6010b0098f73e5d0113ffffffffffffffbf01000042375a1a00010b30c2c511a3011366666666666666e6010b00204aa9d10113ffffffffffffffff01070088526a7413000000000000004042375a1a0000000004d020426c6f636b20262065787472696e7369637320776569676874733a20626173652076616c75657320616e64206c696d6974732e2c426c6f636b4c656e6774680d043000003c00000050000000500004a820546865206d6178696d756d206c656e677468206f66206120626c6f636b2028696e206279746573292e38426c6f636b48617368436f756e74101060090000045501204d6178696d756d206e756d626572206f6620626c6f636b206e756d62657220746f20626c6f636b2068617368206d617070696e677320746f206b65657020286f6c64657374207072756e6564206669727374292e20446257656967687415044040ce4b00000000000841d603000000000409012054686520776569676874206f662072756e74696d65206461746162617365206f7065726174696f6e73207468652072756e74696d652063616e20696e766f6b652e1c56657273696f6e19040103386a6f7973747265616d2d6e6f6465386a6f7973747265616d2d6e6f64650c000000d20700000000000030df6acb689907609b0400000037e397fc7c91f5e40100000040fe3ad401f8959a0600000018ef58a3b67ba77001000000d2bc9897eed08f1503000000f78b278be53f454c02000000ed99c5acb25eedf503000000cbca25e39f14238702000000687ad44ad37f03c201000000bc9d89904f5b923f0100000037c8bb1350a9a2a803000000ab3c0572291feb8b0100000002000000010484204765742074686520636861696e27732063757272656e742076657273696f6e2e28535335385072656669782d04087e0014a8205468652064657369676e61746564205353353820707265666978206f66207468697320636861696e2e0039012054686973207265706c6163657320746865202273733538466f726d6174222070726f7065727479206465636c6172656420696e2074686520636861696e20737065632e20526561736f6e20697331012074686174207468652072756e74696d652073686f756c64206b6e6f772061626f7574207468652070726566697820696e206f7264657220746f206d616b6520757365206f662069742061737020616e206964656e746966696572206f662074686520636861696e2e013104001c5574696c697479000135040174044c626174636865645f63616c6c735f6c696d69741010aa2a000004a820546865206c696d6974206f6e20746865206e756d626572206f6620626174636865642063616c6c732e01a106011042616265011042616265442845706f6368496e64657801002820000000000000000004542043757272656e742065706f636820696e6465782e2c417574686f7269746965730100a5060400046c2043757272656e742065706f636820617574686f7269746965732e2c47656e65736973536c6f740100550420000000000000000008f82054686520736c6f74206174207768696368207468652066697273742065706f63682061637475616c6c7920737461727465642e205468697320697320309020756e74696c2074686520666972737420626c6f636b206f662074686520636861696e2e2c43757272656e74536c6f740100550420000000000000000004542043757272656e7420736c6f74206e756d6265722e2852616e646f6d6e65737301000480000000000000000000000000000000000000000000000000000000000000000028b8205468652065706f63682072616e646f6d6e65737320666f7220746865202a63757272656e742a2065706f63682e002c20232053656375726974790005012054686973204d555354204e4f54206265207573656420666f722067616d626c696e672c2061732069742063616e20626520696e666c75656e6365642062792061f8206d616c6963696f75732076616c696461746f7220696e207468652073686f7274207465726d2e204974204d4159206265207573656420696e206d616e7915012063727970746f677261706869632070726f746f636f6c732c20686f77657665722c20736f206c6f6e67206173206f6e652072656d656d6265727320746861742074686973150120286c696b652065766572797468696e6720656c7365206f6e2d636861696e29206974206973207075626c69632e20466f72206578616d706c652c2069742063616e206265050120757365642077686572652061206e756d626572206973206e656564656420746861742063616e6e6f742068617665206265656e2063686f73656e20627920616e0d01206164766572736172792c20666f7220707572706f7365732073756368206173207075626c69632d636f696e207a65726f2d6b6e6f776c656467652070726f6f66732e6050656e64696e6745706f6368436f6e6669674368616e676500005d0404000461012050656e64696e672065706f636820636f6e66696775726174696f6e206368616e676520746861742077696c6c206265206170706c696564207768656e20746865206e6578742065706f636820697320656e61637465642e384e65787452616e646f6d6e657373010004800000000000000000000000000000000000000000000000000000000000000000045c204e6578742065706f63682072616e646f6d6e6573732e3c4e657874417574686f7269746965730100a50604000460204e6578742065706f636820617574686f7269746965732e305365676d656e74496e6465780100101000000000247c2052616e646f6d6e65737320756e64657220636f6e737472756374696f6e2e00f8205765206d616b6520612074726164652d6f6666206265747765656e2073746f7261676520616363657373657320616e64206c697374206c656e6774682e01012057652073746f72652074686520756e6465722d636f6e737472756374696f6e2072616e646f6d6e65737320696e207365676d656e7473206f6620757020746f942060554e4445525f434f4e535452554354494f4e5f5345474d454e545f4c454e475448602e00ec204f6e63652061207365676d656e7420726561636865732074686973206c656e6774682c20776520626567696e20746865206e657874206f6e652e090120576520726573657420616c6c207365676d656e747320616e642072657475726e20746f206030602061742074686520626567696e6e696e67206f662065766572791c2065706f63682e44556e646572436f6e737472756374696f6e0101040510b10604000415012054574f582d4e4f54453a20605365676d656e74496e6465786020697320616e20696e6372656173696e6720696e74656765722c20736f2074686973206973206f6b61792e2c496e697469616c697a65640000b90604000801012054656d706f726172792076616c75652028636c656172656420617420626c6f636b2066696e616c697a6174696f6e292077686963682069732060536f6d65601d01206966207065722d626c6f636b20696e697469616c697a6174696f6e2068617320616c7265616479206265656e2063616c6c656420666f722063757272656e7420626c6f636b2e4c417574686f7256726652616e646f6d6e6573730100cd0604001015012054686973206669656c642073686f756c6420616c7761797320626520706f70756c6174656420647572696e6720626c6f636b2070726f63657373696e6720756e6c6573731901207365636f6e6461727920706c61696e20736c6f74732061726520656e61626c65642028776869636820646f6e277420636f6e7461696e206120565246206f7574707574292e0049012049742069732073657420696e20606f6e5f66696e616c697a65602c206265666f72652069742077696c6c20636f6e7461696e207468652076616c75652066726f6d20746865206c61737420626c6f636b2e2845706f636853746172740100e103200000000000000000145d012054686520626c6f636b206e756d62657273207768656e20746865206c61737420616e642063757272656e742065706f6368206861766520737461727465642c20726573706563746976656c7920604e2d316020616e641420604e602e4901204e4f54453a20576520747261636b207468697320697320696e206f7264657220746f20616e6e6f746174652074686520626c6f636b206e756d626572207768656e206120676976656e20706f6f6c206f66590120656e74726f7079207761732066697865642028692e652e20697420776173206b6e6f776e20746f20636861696e206f6273657276657273292e2053696e63652065706f6368732061726520646566696e656420696e590120736c6f74732c207768696368206d617920626520736b69707065642c2074686520626c6f636b206e756d62657273206d6179206e6f74206c696e6520757020776974682074686520736c6f74206e756d626572732e204c6174656e657373010010100000000014d820486f77206c617465207468652063757272656e7420626c6f636b20697320636f6d706172656420746f2069747320706172656e742e001501205468697320656e74727920697320706f70756c617465642061732070617274206f6620626c6f636b20657865637574696f6e20616e6420697320636c65616e65642075701101206f6e20626c6f636b2066696e616c697a6174696f6e2e205175657279696e6720746869732073746f7261676520656e747279206f757473696465206f6620626c6f636bb020657865637574696f6e20636f6e746578742073686f756c6420616c77617973207969656c64207a65726f2e2c45706f6368436f6e6669670000d10604000861012054686520636f6e66696775726174696f6e20666f72207468652063757272656e742065706f63682e2053686f756c64206e6576657220626520604e6f6e656020617320697420697320696e697469616c697a656420696e242067656e657369732e3c4e65787445706f6368436f6e6669670000d1060400082d012054686520636f6e66696775726174696f6e20666f7220746865206e6578742065706f63682c20604e6f6e65602069662074686520636f6e6669672077696c6c206e6f74206368616e6765e82028796f752063616e2066616c6c6261636b20746f206045706f6368436f6e6669676020696e737465616420696e20746861742063617365292e34536b697070656445706f6368730100d50604002029012041206c697374206f6620746865206c6173742031303020736b69707065642065706f63687320616e642074686520636f72726573706f6e64696e672073657373696f6e20696e64657870207768656e207468652065706f63682077617320736b69707065642e0031012054686973206973206f6e6c79207573656420666f722076616c69646174696e672065717569766f636174696f6e2070726f6f66732e20416e2065717569766f636174696f6e2070726f6f663501206d75737420636f6e7461696e732061206b65792d6f776e6572736869702070726f6f6620666f72206120676976656e2073657373696f6e2c207468657265666f7265207765206e656564206139012077617920746f2074696520746f6765746865722073657373696f6e7320616e642065706f636820696e64696365732c20692e652e207765206e65656420746f2076616c69646174652074686174290120612076616c696461746f722077617320746865206f776e6572206f66206120676976656e206b6579206f6e206120676976656e2073657373696f6e2c20616e64207768617420746865b0206163746976652065706f636820696e6465782077617320647572696e6720746861742073657373696f6e2e014104000c3445706f63684475726174696f6e282058020000000000000cec2054686520616d6f756e74206f662074696d652c20696e20736c6f74732c207468617420656163682065706f63682073686f756c64206c6173742e1901204e4f54453a2043757272656e746c79206974206973206e6f7420706f737369626c6520746f206368616e6765207468652065706f6368206475726174696f6e20616674657221012074686520636861696e2068617320737461727465642e20417474656d7074696e6720746f20646f20736f2077696c6c20627269636b20626c6f636b2070726f64756374696f6e2e444578706563746564426c6f636b54696d652820701700000000000014050120546865206578706563746564206176657261676520626c6f636b2074696d6520617420776869636820424142452073686f756c64206265206372656174696e67110120626c6f636b732e2053696e636520424142452069732070726f626162696c6973746963206974206973206e6f74207472697669616c20746f20666967757265206f75740501207768617420746865206578706563746564206176657261676520626c6f636b2074696d652073686f756c64206265206261736564206f6e2074686520736c6f740901206475726174696f6e20616e642074686520736563757269747920706172616d657465722060636020287768657265206031202d20636020726570726573656e7473a0207468652070726f626162696c697479206f66206120736c6f74206265696e6720656d707479292e384d6178417574686f7269746965731010a08601000488204d6178206e756d626572206f6620617574686f72697469657320616c6c6f77656401d906022454696d657374616d70012454696d657374616d70080c4e6f7701002820000000000000000004902043757272656e742074696d6520666f72207468652063757272656e7420626c6f636b2e24446964557064617465010098040004b420446964207468652074696d657374616d7020676574207570646174656420696e207468697320626c6f636b3f0165040004344d696e696d756d506572696f642820b80b000000000000104d0120546865206d696e696d756d20706572696f64206265747765656e20626c6f636b732e204265776172652074686174207468697320697320646966666572656e7420746f20746865202a65787065637465642a5d0120706572696f6420746861742074686520626c6f636b2070726f64756374696f6e206170706172617475732070726f76696465732e20596f75722063686f73656e20636f6e73656e7375732073797374656d2077696c6c5d012067656e6572616c6c7920776f726b2077697468207468697320746f2064657465726d696e6520612073656e7369626c6520626c6f636b2074696d652e20652e672e20466f7220417572612c2069742077696c6c206265a020646f75626c65207468697320706572696f64206f6e2064656661756c742073657474696e67732e000328417574686f72736869700128417574686f72736869700418417574686f720000000400046420417574686f72206f662063757272656e7420626c6f636b2e00000000042042616c616e636573012042616c616e6365731434546f74616c49737375616e6365010018400000000000000000000000000000000004982054686520746f74616c20756e6974732069737375656420696e207468652073797374656d2e40496e61637469766549737375616e636501001840000000000000000000000000000000000409012054686520746f74616c20756e697473206f66206f75747374616e64696e672064656163746976617465642062616c616e636520696e207468652073797374656d2e1c4163636f756e74010104020014010100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000600901205468652042616c616e6365732070616c6c6574206578616d706c65206f662073746f72696e67207468652062616c616e6365206f6620616e206163636f756e742e00282023204578616d706c650034206060606e6f636f6d70696c65b02020696d706c2070616c6c65745f62616c616e6365733a3a436f6e66696720666f722052756e74696d65207b19022020202074797065204163636f756e7453746f7265203d2053746f726167654d61705368696d3c53656c663a3a4163636f756e743c52756e74696d653e2c206672616d655f73797374656d3a3a50726f76696465723c52756e74696d653e2c204163636f756e7449642c2053656c663a3a4163636f756e74446174613c42616c616e63653e3e0c20207d102060606000150120596f752063616e20616c736f2073746f7265207468652062616c616e6365206f6620616e206163636f756e7420696e20746865206053797374656d602070616c6c65742e00282023204578616d706c650034206060606e6f636f6d70696c65b02020696d706c2070616c6c65745f62616c616e6365733a3a436f6e66696720666f722052756e74696d65207b7420202074797065204163636f756e7453746f7265203d2053797374656d0c20207d102060606000510120427574207468697320636f6d657320776974682074726164656f6666732c2073746f72696e67206163636f756e742062616c616e63657320696e207468652073797374656d2070616c6c65742073746f7265736d0120606672616d655f73797374656d60206461746120616c6f6e677369646520746865206163636f756e74206461746120636f6e747261727920746f2073746f72696e67206163636f756e742062616c616e63657320696e207468652901206042616c616e636573602070616c6c65742c20776869636820757365732061206053746f726167654d61706020746f2073746f72652062616c616e6365732064617461206f6e6c792e4101204e4f54453a2054686973206973206f6e6c79207573656420696e207468652063617365207468617420746869732070616c6c6574206973207573656420746f2073746f72652062616c616e6365732e144c6f636b730101040200dd06040008b820416e79206c6971756964697479206c6f636b73206f6e20736f6d65206163636f756e742062616c616e6365732e2501204e4f54453a2053686f756c64206f6e6c79206265206163636573736564207768656e2073657474696e672c206368616e67696e6720616e642066726565696e672061206c6f636b2e2052657365727665730101040200ed06040004a4204e616d6564207265736572766573206f6e20736f6d65206163636f756e742062616c616e6365732e01690401800c484578697374656e7469616c4465706f73697418404002e50f00000000000000000000000004d420546865206d696e696d756d20616d6f756e7420726571756972656420746f206b65657020616e206163636f756e74206f70656e2e204d61784c6f636b7310103200000008f420546865206d6178696d756d206e756d626572206f66206c6f636b7320746861742073686f756c64206578697374206f6e20616e206163636f756e742edc204e6f74207374726963746c7920656e666f726365642c20627574207573656420666f722077656967687420657374696d6174696f6e2e2c4d61785265736572766573101032000000040d0120546865206d6178696d756d206e756d626572206f66206e616d656420726573657276657320746861742063616e206578697374206f6e20616e206163636f756e742e01f90605485472616e73616374696f6e5061796d656e7401485472616e73616374696f6e5061796d656e7408444e6578744665654d756c7469706c6965720100fd0640000064a7b3b6e00d0000000000000000003853746f7261676556657273696f6e0100010704000000018804604f7065726174696f6e616c4665654d756c7469706c696572080405545901204120666565206d756c6974706c69657220666f7220604f7065726174696f6e616c602065787472696e7369637320746f20636f6d7075746520227669727475616c207469702220746f20626f6f73742074686569722c20607072696f7269747960004d0120546869732076616c7565206973206d756c7469706c656420627920746865206066696e616c5f6665656020746f206f627461696e206120227669727475616c20746970222074686174206973206c61746572f420616464656420746f20612074697020636f6d706f6e656e7420696e20726567756c617220607072696f72697479602063616c63756c6174696f6e732e4d01204974206d65616e732074686174206120604e6f726d616c60207472616e73616374696f6e2063616e2066726f6e742d72756e20612073696d696c61726c792d73697a656420604f7065726174696f6e616c6041012065787472696e736963202877697468206e6f20746970292c20627920696e636c7564696e672061207469702076616c75652067726561746572207468616e20746865207669727475616c207469702e003c20606060727573742c69676e6f726540202f2f20466f7220604e6f726d616c608c206c6574207072696f72697479203d207072696f726974795f63616c6328746970293b0054202f2f20466f7220604f7065726174696f6e616c601101206c6574207669727475616c5f746970203d2028696e636c7573696f6e5f666565202b2074697029202a204f7065726174696f6e616c4665654d756c7469706c6965723bc4206c6574207072696f72697479203d207072696f726974795f63616c6328746970202b207669727475616c5f746970293b1020606060005101204e6f746520746861742073696e636520776520757365206066696e616c5f6665656020746865206d756c7469706c696572206170706c69657320616c736f20746f2074686520726567756c61722060746970605d012073656e74207769746820746865207472616e73616374696f6e2e20536f2c206e6f74206f6e6c7920646f657320746865207472616e73616374696f6e206765742061207072696f726974792062756d702062617365646101206f6e207468652060696e636c7573696f6e5f666565602c2062757420776520616c736f20616d706c6966792074686520696d70616374206f662074697073206170706c69656420746f20604f7065726174696f6e616c6038207472616e73616374696f6e732e000668456c656374696f6e50726f76696465724d756c746950686173650168456c656374696f6e50726f76696465724d756c746950686173652814526f756e64010010100100000018ac20496e7465726e616c20636f756e74657220666f7220746865206e756d626572206f6620726f756e64732e00550120546869732069732075736566756c20666f722064652d6475706c69636174696f6e206f66207472616e73616374696f6e73207375626d697474656420746f2074686520706f6f6c2c20616e642067656e6572616c6c20646961676e6f7374696373206f66207468652070616c6c65742e004d012054686973206973206d6572656c7920696e6372656d656e746564206f6e6365207065722065766572792074696d65207468617420616e20757073747265616d2060656c656374602069732063616c6c65642e3043757272656e7450686173650100a00400043c2043757272656e742070686173652e38517565756564536f6c7574696f6e000005070400043d012043757272656e74206265737420736f6c7574696f6e2c207369676e6564206f7220756e7369676e65642c2071756575656420746f2062652072657475726e65642075706f6e2060656c656374602e20536e617073686f7400000d0704000c7020536e617073686f742064617461206f662074686520726f756e642e005d01205468697320697320637265617465642061742074686520626567696e6e696e67206f6620746865207369676e656420706861736520616e6420636c65617265642075706f6e2063616c6c696e672060656c656374602e38446573697265645461726765747300001004000ccc2044657369726564206e756d626572206f66207461726765747320746f20656c65637420666f72207468697320726f756e642e00a8204f6e6c7920657869737473207768656e205b60536e617073686f74605d2069732070726573656e742e40536e617073686f744d657461646174610000410504000c9820546865206d65746164617461206f6620746865205b60526f756e64536e617073686f74605d00a8204f6e6c7920657869737473207768656e205b60536e617073686f74605d2069732070726573656e742e645369676e65645375626d697373696f6e4e657874496e646578010010100000000024010120546865206e65787420696e64657820746f2062652061737369676e656420746f20616e20696e636f6d696e67207369676e6564207375626d697373696f6e2e007501204576657279206163636570746564207375626d697373696f6e2069732061737369676e6564206120756e6971756520696e6465783b207468617420696e64657820697320626f756e6420746f207468617420706172746963756c61726501207375626d697373696f6e20666f7220746865206475726174696f6e206f662074686520656c656374696f6e2e204f6e20656c656374696f6e2066696e616c697a6174696f6e2c20746865206e65787420696e6465782069733020726573657420746f20302e0069012057652063616e2774206a7573742075736520605369676e65645375626d697373696f6e496e64696365732e6c656e2829602c206265636175736520746861742773206120626f756e646564207365743b20706173742069747359012063617061636974792c2069742077696c6c2073696d706c792073617475726174652e2057652063616e2774206a7573742069746572617465206f76657220605369676e65645375626d697373696f6e734d6170602cf4206265636175736520697465726174696f6e20697320736c6f772e20496e73746561642c2077652073746f7265207468652076616c756520686572652e5c5369676e65645375626d697373696f6e496e646963657301001d070400186d01204120736f727465642c20626f756e64656420766563746f72206f6620602873636f72652c20626c6f636b5f6e756d6265722c20696e64657829602c20776865726520656163682060696e6465786020706f696e747320746f2061782076616c756520696e20605369676e65645375626d697373696f6e73602e007101205765206e65766572206e65656420746f2070726f63657373206d6f7265207468616e20612073696e676c65207369676e6564207375626d697373696f6e20617420612074696d652e205369676e6564207375626d697373696f6e7375012063616e206265207175697465206c617267652c20736f2077652772652077696c6c696e6720746f207061792074686520636f7374206f66206d756c7469706c6520646174616261736520616363657373657320746f206163636573732101207468656d206f6e6520617420612074696d6520696e7374656164206f662072656164696e6720616e64206465636f64696e6720616c6c206f66207468656d206174206f6e63652e505369676e65645375626d697373696f6e734d61700001040510290704001c7420556e636865636b65642c207369676e656420736f6c7574696f6e732e00690120546f676574686572207769746820605375626d697373696f6e496e6469636573602c20746869732073746f726573206120626f756e64656420736574206f6620605369676e65645375626d697373696f6e7360207768696c65ec20616c6c6f77696e6720757320746f206b656570206f6e6c7920612073696e676c65206f6e6520696e206d656d6f727920617420612074696d652e0069012054776f78206e6f74653a20746865206b6579206f6620746865206d617020697320616e206175746f2d696e6372656d656e74696e6720696e6465782077686963682075736572732063616e6e6f7420696e7370656374206f72f4206166666563743b2077652073686f756c646e2774206e65656420612063727970746f67726170686963616c6c7920736563757265206861736865722e544d696e696d756d556e7472757374656453636f726500009c0400105d0120546865206d696e696d756d2073636f7265207468617420656163682027756e747275737465642720736f6c7574696f6e206d7573742061747461696e20696e206f7264657220746f20626520636f6e7369646572656428206665617369626c652e00b82043616e206265207365742076696120607365745f6d696e696d756d5f756e747275737465645f73636f7265602e016d04018c5034556e7369676e656450686173651010960000000480204475726174696f6e206f662074686520756e7369676e65642070686173652e2c5369676e656450686173651010960000000478204475726174696f6e206f6620746865207369676e65642070686173652e544265747465725369676e65645468726573686f6c64ac1000000000084d0120546865206d696e696d756d20616d6f756e74206f6620696d70726f76656d656e7420746f2074686520736f6c7574696f6e2073636f7265207468617420646566696e6573206120736f6c7574696f6e2061737820226265747465722220696e20746865205369676e65642070686173652e5c426574746572556e7369676e65645468726573686f6c64ac1020a10700084d0120546865206d696e696d756d20616d6f756e74206f6620696d70726f76656d656e7420746f2074686520736f6c7574696f6e2073636f7265207468617420646566696e6573206120736f6c7574696f6e2061738020226265747465722220696e2074686520556e7369676e65642070686173652e384f6666636861696e52657065617410101200000010b42054686520726570656174207468726573686f6c64206f6620746865206f6666636861696e20776f726b65722e00610120466f72206578616d706c652c20696620697420697320352c2074686174206d65616e732074686174206174206c65617374203520626c6f636b732077696c6c20656c61707365206265747765656e20617474656d7074738420746f207375626d69742074686520776f726b6572277320736f6c7574696f6e2e3c4d696e657254785072696f726974792820feffffffffffff7f04250120546865207072696f72697479206f662074686520756e7369676e6564207472616e73616374696f6e207375626d697474656420696e2074686520756e7369676e65642d7068617365505369676e65644d61785375626d697373696f6e731010100000001ce4204d6178696d756d206e756d626572206f66207369676e6564207375626d697373696f6e7320746861742063616e206265207175657565642e005501204974206973206265737420746f2061766f69642061646a757374696e67207468697320647572696e6720616e20656c656374696f6e2c20617320697420696d706163747320646f776e73747265616d2064617461650120737472756374757265732e20496e20706172746963756c61722c20605369676e65645375626d697373696f6e496e64696365733c543e6020697320626f756e646564206f6e20746869732076616c75652e20496620796f75f42075706461746520746869732076616c756520647572696e6720616e20656c656374696f6e2c20796f75205f6d7573745f20656e7375726520746861744d0120605369676e65645375626d697373696f6e496e64696365732e6c656e282960206973206c657373207468616e206f7220657175616c20746f20746865206e65772076616c75652e204f74686572776973652cf020617474656d70747320746f207375626d6974206e657720736f6c7574696f6e73206d617920636175736520612072756e74696d652070616e69632e3c5369676e65644d617857656967687420400b40a21f8d2e011366666666666666a61494204d6178696d756d20776569676874206f662061207369676e656420736f6c7574696f6e2e005d01204966205b60436f6e6669673a3a4d696e6572436f6e666967605d206973206265696e6720696d706c656d656e74656420746f207375626d6974207369676e656420736f6c7574696f6e7320286f757473696465206f663d0120746869732070616c6c6574292c207468656e205b604d696e6572436f6e6669673a3a736f6c7574696f6e5f776569676874605d206973207573656420746f20636f6d7061726520616761696e73743020746869732076616c75652e405369676e65644d6178526566756e647310100400000004190120546865206d6178696d756d20616d6f756e74206f6620756e636865636b656420736f6c7574696f6e7320746f20726566756e64207468652063616c6c2066656520666f722e405369676e6564526577617264426173651840aa821bce260000000000000000000000048820426173652072657761726420666f722061207369676e656420736f6c7574696f6e445369676e65644465706f736974426173651840a41a130d84010000000000000000000004902042617365206465706f73697420666f722061207369676e656420736f6c7574696f6e2e445369676e65644465706f7369744279746518406a6e190000000000000000000000000004a0205065722d62797465206465706f73697420666f722061207369676e656420736f6c7574696f6e2e4c5369676e65644465706f73697457656967687418400000000000000000000000000000000004a8205065722d776569676874206465706f73697420666f722061207369676e656420736f6c7574696f6e2e444d6178456c656374696e67566f746572731010d43000000c5d0120546865206d6178696d756d206e756d626572206f6620656c656374696e6720766f7465727320746f2070757420696e2074686520736e617073686f742e20417420746865206d6f6d656e742c20736e617073686f7473590120617265206f6e6c79206f76657220612073696e676c6520626c6f636b2c20627574206f6e6365206d756c74692d626c6f636b20656c656374696f6e732061726520696e74726f647563656420746865792077696c6c842074616b6520706c616365206f766572206d756c7469706c6520626c6f636b732e4c4d6178456c65637461626c65546172676574732d0408ffff04010120546865206d6178696d756d206e756d626572206f6620656c65637461626c65207461726765747320746f2070757420696e2074686520736e617073686f742e284d617857696e6e65727310109001000010350120546865206d6178696d756d206e756d626572206f662077696e6e65727320746861742063616e20626520656c656374656420627920746869732060456c656374696f6e50726f7669646572604020696d706c656d656e746174696f6e2e005101204e6f74653a2054686973206d75737420616c776179732062652067726561746572206f7220657175616c20746f2060543a3a4461746150726f76696465723a3a646573697265645f746172676574732829602e384d696e65724d61784c656e67746810100000360000384d696e65724d617857656967687420400b40a21f8d2e011366666666666666a600544d696e65724d6178566f746573506572566f746572101010000000003c4d696e65724d617857696e6e65727310109001000000012d07071c5374616b696e67011c5374616b696e67943856616c696461746f72436f756e740100101000000000049c2054686520696465616c206e756d626572206f66206163746976652076616c696461746f72732e544d696e696d756d56616c696461746f72436f756e740100101000000000044101204d696e696d756d206e756d626572206f66207374616b696e67207061727469636970616e7473206265666f726520656d657267656e637920636f6e646974696f6e732061726520696d706f7365642e34496e76756c6e657261626c65730100610504000c590120416e792076616c696461746f72732074686174206d6179206e6576657220626520736c6173686564206f7220666f726369626c79206b69636b65642e20497427732061205665632073696e636520746865792772654d01206561737920746f20696e697469616c697a6520616e642074686520706572666f726d616e636520686974206973206d696e696d616c2028776520657870656374206e6f206d6f7265207468616e20666f7572ac20696e76756c6e657261626c65732920616e64207265737472696374656420746f20746573746e6574732e18426f6e64656400010405000004000c0101204d61702066726f6d20616c6c206c6f636b65642022737461736822206163636f756e747320746f2074686520636f6e74726f6c6c6572206163636f756e742e00d02054574f582d4e4f54453a20534146452073696e636520604163636f756e7449646020697320612073656375726520686173682e404d696e4e6f6d696e61746f72426f6e64010018400000000000000000000000000000000004210120546865206d696e696d756d2061637469766520626f6e6420746f206265636f6d6520616e64206d61696e7461696e2074686520726f6c65206f662061206e6f6d696e61746f722e404d696e56616c696461746f72426f6e64010018400000000000000000000000000000000004210120546865206d696e696d756d2061637469766520626f6e6420746f206265636f6d6520616e64206d61696e7461696e2074686520726f6c65206f6620612076616c696461746f722e484d696e696d756d4163746976655374616b65010018400000000000000000000000000000000004110120546865206d696e696d756d20616374697665206e6f6d696e61746f72207374616b65206f6620746865206c617374207375636365737366756c20656c656374696f6e2e344d696e436f6d6d697373696f6e0100ac10000000000ce820546865206d696e696d756d20616d6f756e74206f6620636f6d6d697373696f6e20746861742076616c696461746f72732063616e207365742e00802049662073657420746f206030602c206e6f206c696d6974206578697374732e184c6564676572000104020031070400044501204d61702066726f6d20616c6c2028756e6c6f636b6564292022636f6e74726f6c6c657222206163636f756e747320746f2074686520696e666f20726567617264696e6720746865207374616b696e672e14506179656501010405005d0504000ce42057686572652074686520726577617264207061796d656e742073686f756c64206265206d6164652e204b657965642062792073746173682e00d02054574f582d4e4f54453a20534146452073696e636520604163636f756e7449646020697320612073656375726520686173682e2856616c696461746f72730101040500b00800000c450120546865206d61702066726f6d202877616e6e616265292076616c696461746f72207374617368206b657920746f2074686520707265666572656e636573206f6620746861742076616c696461746f722e00d02054574f582d4e4f54453a20534146452073696e636520604163636f756e7449646020697320612073656375726520686173682e50436f756e746572466f7256616c696461746f7273010010100000000004ac436f756e74657220666f72207468652072656c6174656420636f756e7465642073746f72616765206d6170484d617856616c696461746f7273436f756e7400001004000c310120546865206d6178696d756d2076616c696461746f7220636f756e74206265666f72652077652073746f7020616c6c6f77696e67206e65772076616c696461746f727320746f206a6f696e2e00d0205768656e20746869732076616c7565206973206e6f74207365742c206e6f206c696d6974732061726520656e666f726365642e284e6f6d696e61746f727300010405004507040048750120546865206d61702066726f6d206e6f6d696e61746f72207374617368206b657920746f207468656972206e6f6d696e6174696f6e20707265666572656e6365732c206e616d656c79207468652076616c696461746f72732074686174582074686579207769736820746f20737570706f72742e003901204e6f7465207468617420746865206b657973206f6620746869732073746f72616765206d6170206d69676874206265636f6d65206e6f6e2d6465636f6461626c6520696e2063617365207468656d01205b60436f6e6669673a3a4d61784e6f6d696e6174696f6e73605d20636f6e66696775726174696f6e206973206465637265617365642e20496e2074686973207261726520636173652c207468657365206e6f6d696e61746f7273650120617265207374696c6c206578697374656e7420696e2073746f726167652c207468656972206b657920697320636f727265637420616e64207265747269657661626c652028692e652e2060636f6e7461696e735f6b657960710120696e6469636174657320746861742074686579206578697374292c206275742074686569722076616c75652063616e6e6f74206265206465636f6465642e205468657265666f72652c20746865206e6f6e2d6465636f6461626c656d01206e6f6d696e61746f72732077696c6c206566666563746976656c79206e6f742d65786973742c20756e74696c20746865792072652d7375626d697420746865697220707265666572656e6365732073756368207468617420697401012069732077697468696e2074686520626f756e6473206f6620746865206e65776c79207365742060436f6e6669673a3a4d61784e6f6d696e6174696f6e73602e006101205468697320696d706c696573207468617420603a3a697465725f6b65797328292e636f756e7428296020616e6420603a3a6974657228292e636f756e74282960206d696768742072657475726e20646966666572656e746d012076616c75657320666f722074686973206d61702e204d6f72656f7665722c20746865206d61696e20603a3a636f756e7428296020697320616c69676e656420776974682074686520666f726d65722c206e616d656c79207468656c206e756d626572206f66206b65797320746861742065786973742e006d01204c6173746c792c20696620616e79206f6620746865206e6f6d696e61746f7273206265636f6d65206e6f6e2d6465636f6461626c652c20746865792063616e206265206368696c6c656420696d6d6564696174656c7920766961b8205b6043616c6c3a3a6368696c6c5f6f74686572605d20646973706174636861626c6520627920616e796f6e652e00d02054574f582d4e4f54453a20534146452073696e636520604163636f756e7449646020697320612073656375726520686173682e50436f756e746572466f724e6f6d696e61746f7273010010100000000004ac436f756e74657220666f72207468652072656c6174656420636f756e7465642073746f72616765206d6170484d61784e6f6d696e61746f7273436f756e7400001004000c310120546865206d6178696d756d206e6f6d696e61746f7220636f756e74206265666f72652077652073746f7020616c6c6f77696e67206e65772076616c696461746f727320746f206a6f696e2e00d0205768656e20746869732076616c7565206973206e6f74207365742c206e6f206c696d6974732061726520656e666f726365642e2843757272656e744572610000100400105c205468652063757272656e742065726120696e6465782e006501205468697320697320746865206c617465737420706c616e6e6564206572612c20646570656e64696e67206f6e20686f77207468652053657373696f6e2070616c6c657420717565756573207468652076616c696461746f7280207365742c206974206d6967687420626520616374697665206f72206e6f742e2441637469766545726100004907040010d820546865206163746976652065726120696e666f726d6174696f6e2c20697420686f6c647320696e64657820616e642073746172742e0059012054686520616374697665206572612069732074686520657261206265696e672063757272656e746c792072657761726465642e2056616c696461746f7220736574206f66207468697320657261206d757374206265ac20657175616c20746f205b6053657373696f6e496e746572666163653a3a76616c696461746f7273605d2e5445726173537461727453657373696f6e496e6465780001040510100400103101205468652073657373696f6e20696e646578206174207768696368207468652065726120737461727420666f7220746865206c6173742060484953544f52595f44455054486020657261732e006101204e6f74653a205468697320747261636b7320746865207374617274696e672073657373696f6e2028692e652e2073657373696f6e20696e646578207768656e20657261207374617274206265696e672061637469766529f020666f7220746865206572617320696e20605b43757272656e74457261202d20484953544f52595f44455054482c2043757272656e744572615d602e2c457261735374616b65727301010805054d07e80c0000001878204578706f73757265206f662076616c696461746f72206174206572612e0061012054686973206973206b65796564206669727374206279207468652065726120696e64657820746f20616c6c6f772062756c6b2064656c6574696f6e20616e64207468656e20746865207374617368206163636f756e742e00a82049732069742072656d6f7665642061667465722060484953544f52595f44455054486020657261732e4101204966207374616b657273206861736e2774206265656e20736574206f7220686173206265656e2072656d6f766564207468656e20656d707479206578706f737572652069732072657475726e65642e48457261735374616b657273436c697070656401010805054d07e80c0000002c9820436c6970706564204578706f73757265206f662076616c696461746f72206174206572612e00590120546869732069732073696d696c617220746f205b60457261735374616b657273605d20627574206e756d626572206f66206e6f6d696e61746f7273206578706f736564206973207265647563656420746f20746865dc2060543a3a4d61784e6f6d696e61746f72526577617264656450657256616c696461746f72602062696767657374207374616b6572732e1d0120284e6f74653a20746865206669656c642060746f74616c6020616e6420606f776e60206f6620746865206578706f737572652072656d61696e7320756e6368616e676564292ef42054686973206973207573656420746f206c696d69742074686520692f6f20636f737420666f7220746865206e6f6d696e61746f72207061796f75742e005d012054686973206973206b657965642066697374206279207468652065726120696e64657820746f20616c6c6f772062756c6b2064656c6574696f6e20616e64207468656e20746865207374617368206163636f756e742e00a82049732069742072656d6f7665642061667465722060484953544f52595f44455054486020657261732e4101204966207374616b657273206861736e2774206265656e20736574206f7220686173206265656e2072656d6f766564207468656e20656d707479206578706f737572652069732072657475726e65642e484572617356616c696461746f72507265667301010805054d07b00800001411012053696d696c617220746f2060457261735374616b657273602c207468697320686f6c64732074686520707265666572656e636573206f662076616c696461746f72732e0061012054686973206973206b65796564206669727374206279207468652065726120696e64657820746f20616c6c6f772062756c6b2064656c6574696f6e20616e64207468656e20746865207374617368206163636f756e742e00a82049732069742072656d6f7665642061667465722060484953544f52595f44455054486020657261732e4c4572617356616c696461746f7252657761726400010405101804000c09012054686520746f74616c2076616c696461746f7220657261207061796f757420666f7220746865206c6173742060484953544f52595f44455054486020657261732e0021012045726173207468617420686176656e27742066696e697368656420796574206f7220686173206265656e2072656d6f76656420646f65736e27742068617665207265776172642e4045726173526577617264506f696e74730101040510510714000000000008ac205265776172647320666f7220746865206c6173742060484953544f52595f44455054486020657261732e250120496620726577617264206861736e2774206265656e20736574206f7220686173206265656e2072656d6f766564207468656e2030207265776172642069732072657475726e65642e3845726173546f74616c5374616b65010104051018400000000000000000000000000000000008ec2054686520746f74616c20616d6f756e74207374616b656420666f7220746865206c6173742060484953544f52595f44455054486020657261732e1d0120496620746f74616c206861736e2774206265656e20736574206f7220686173206265656e2072656d6f766564207468656e2030207374616b652069732072657475726e65642e20466f7263654572610100b804000454204d6f6465206f662065726120666f7263696e672e4c536c6173685265776172644672616374696f6e0100ac10000000000cf8205468652070657263656e74616765206f662074686520736c617368207468617420697320646973747269627574656420746f207265706f72746572732e00e4205468652072657374206f662074686520736c61736865642076616c75652069732068616e646c6564206279207468652060536c617368602e4c43616e63656c6564536c6173685061796f757401001840000000000000000000000000000000000815012054686520616d6f756e74206f662063757272656e637920676976656e20746f207265706f7274657273206f66206120736c617368206576656e7420776869636820776173ec2063616e63656c65642062792065787472616f7264696e6172792063697263756d7374616e6365732028652e672e20676f7665726e616e6365292e40556e6170706c696564536c617368657301010405106107040004c420416c6c20756e6170706c69656420736c61736865732074686174206172652071756575656420666f72206c617465722e28426f6e646564457261730100dd0304001025012041206d617070696e672066726f6d207374696c6c2d626f6e646564206572617320746f207468652066697273742073657373696f6e20696e646578206f662074686174206572612e00c8204d75737420636f6e7461696e7320696e666f726d6174696f6e20666f72206572617320666f72207468652072616e67653abc20605b6163746976655f657261202d20626f756e64696e675f6475726174696f6e3b206163746976655f6572615d604c56616c696461746f72536c617368496e45726100010805054d076907040008450120416c6c20736c617368696e67206576656e7473206f6e2076616c696461746f72732c206d61707065642062792065726120746f20746865206869676865737420736c6173682070726f706f7274696f6e7020616e6420736c6173682076616c7565206f6620746865206572612e4c4e6f6d696e61746f72536c617368496e45726100010805054d0718040004610120416c6c20736c617368696e67206576656e7473206f6e206e6f6d696e61746f72732c206d61707065642062792065726120746f20746865206869676865737420736c6173682076616c7565206f6620746865206572612e34536c617368696e675370616e7300010405006d070400048c20536c617368696e67207370616e7320666f72207374617368206163636f756e74732e245370616e536c617368010104055d077107800000000000000000000000000000000000000000000000000000000000000000083d01205265636f72647320696e666f726d6174696f6e2061626f757420746865206d6178696d756d20736c617368206f6620612073746173682077697468696e206120736c617368696e67207370616e2cb82061732077656c6c20617320686f77206d7563682072657761726420686173206265656e2070616964206f75742e5443757272656e74506c616e6e656453657373696f6e01001010000000000ce820546865206c61737420706c616e6e65642073657373696f6e207363686564756c6564206279207468652073657373696f6e2070616c6c65742e0071012054686973206973206261736963616c6c7920696e2073796e632077697468207468652063616c6c20746f205b6070616c6c65745f73657373696f6e3a3a53657373696f6e4d616e616765723a3a6e65775f73657373696f6e605d2e4c4f6666656e64696e6756616c696461746f727301007507040024690120496e6469636573206f662076616c696461746f727320746861742068617665206f6666656e64656420696e20746865206163746976652065726120616e6420776865746865722074686579206172652063757272656e746c79282064697361626c65642e00690120546869732076616c75652073686f756c642062652061207375706572736574206f662064697361626c65642076616c696461746f72732073696e6365206e6f7420616c6c206f6666656e636573206c65616420746f2074686571012076616c696461746f72206265696e672064697361626c65642028696620746865726520776173206e6f20736c617368292e2054686973206973206e656564656420746f20747261636b207468652070657263656e74616765206f6649012076616c696461746f727320746861742068617665206f6666656e64656420696e207468652063757272656e74206572612c20656e737572696e672061206e65772065726120697320666f72636564206966750120604f6666656e64696e6756616c696461746f72735468726573686f6c646020697320726561636865642e205468652076656320697320616c77617973206b65707420736f7274656420736f20746861742077652063616e2066696e6471012077686574686572206120676976656e2076616c696461746f72206861732070726576696f75736c79206f6666656e646564207573696e672062696e617279207365617263682e204974206765747320636c6561726564207768656e38207468652065726120656e64732e384368696c6c5468726573686f6c640000650504000c510120546865207468726573686f6c6420666f72207768656e2075736572732063616e2073746172742063616c6c696e6720606368696c6c5f6f746865726020666f72206f746865722076616c696461746f7273202f5901206e6f6d696e61746f72732e20546865207468726573686f6c6420697320636f6d706172656420746f207468652061637475616c206e756d626572206f662076616c696461746f7273202f206e6f6d696e61746f72732901202860436f756e74466f722a602920696e207468652073797374656d20636f6d706172656420746f2074686520636f6e66696775726564206d61782028604d61782a436f756e7460292e01590501a81c384d61784e6f6d696e6174696f6e7310101000000004b4204d6178696d756d206e756d626572206f66206e6f6d696e6174696f6e7320706572206e6f6d696e61746f722e30486973746f72794465707468101078000000508c204e756d626572206f66206572617320746f206b65657020696e20686973746f72792e00e820466f6c6c6f77696e6720696e666f726d6174696f6e206973206b65707420666f72206572617320696e20605b63757272656e745f657261202d090120486973746f727944657074682c2063757272656e745f6572615d603a2060457261735374616b657273602c2060457261735374616b657273436c6970706564602c050120604572617356616c696461746f725072656673602c20604572617356616c696461746f72526577617264602c206045726173526577617264506f696e7473602cac206045726173546f74616c5374616b65602c206045726173537461727453657373696f6e496e646578602c8420605374616b696e674c65646765722e636c61696d65645f72657761726473602e00e4204d757374206265206d6f7265207468616e20746865206e756d626572206f6620657261732064656c617965642062792073657373696f6e2ef820492e652e2061637469766520657261206d75737420616c7761797320626520696e20686973746f72792e20492e652e20606163746976655f657261203ec42063757272656e745f657261202d20686973746f72795f646570746860206d7573742062652067756172616e746565642e001101204966206d6967726174696e6720616e206578697374696e672070616c6c65742066726f6d2073746f726167652076616c756520746f20636f6e6669672076616c75652cec20746869732073686f756c642062652073657420746f2073616d652076616c7565206f72206772656174657220617320696e2073746f726167652e001501204e6f74653a2060486973746f727944657074686020697320757365642061732074686520757070657220626f756e6420666f72207468652060426f756e646564566563601101206974656d20605374616b696e674c65646765722e636c61696d65645f72657761726473602e2053657474696e6720746869732076616c7565206c6f776572207468616ed820746865206578697374696e672076616c75652063616e206c65616420746f20696e636f6e73697374656e6369657320696e20746865150120605374616b696e674c65646765726020616e642077696c6c206e65656420746f2062652068616e646c65642070726f7065726c7920696e2061206d6967726174696f6e2ef020546865207465737420607265647563696e675f686973746f72795f64657074685f616272757074602073686f77732074686973206566666563742e3853657373696f6e735065724572611010060000000470204e756d626572206f662073657373696f6e7320706572206572612e3c426f6e64696e674475726174696f6e10107000000004e4204e756d626572206f6620657261732074686174207374616b65642066756e6473206d7573742072656d61696e20626f6e64656420666f722e48536c61736844656665724475726174696f6e10106f000000100101204e756d626572206f662065726173207468617420736c6173686573206172652064656665727265642062792c20616674657220636f6d7075746174696f6e2e000d0120546869732073686f756c64206265206c657373207468616e2074686520626f6e64696e67206475726174696f6e2e2053657420746f203020696620736c617368657315012073686f756c64206265206170706c69656420696d6d6564696174656c792c20776974686f7574206f70706f7274756e69747920666f7220696e74657276656e74696f6e2e804d61784e6f6d696e61746f72526577617264656450657256616c696461746f7210100001000010f820546865206d6178696d756d206e756d626572206f66206e6f6d696e61746f727320726577617264656420666f7220656163682076616c696461746f722e00510120466f7220656163682076616c696461746f72206f6e6c79207468652060244d61784e6f6d696e61746f72526577617264656450657256616c696461746f72602062696767657374207374616b6572732063616e390120636c61696d207468656972207265776172642e2054686973207573656420746f206c696d69742074686520692f6f20636f737420666f7220746865206e6f6d696e61746f72207061796f75742e484d6178556e6c6f636b696e674368756e6b7310102000000028050120546865206d6178696d756d206e756d626572206f662060756e6c6f636b696e6760206368756e6b732061205b605374616b696e674c6564676572605d2063616e090120686176652e204566666563746976656c792064657465726d696e657320686f77206d616e7920756e6971756520657261732061207374616b6572206d61792062653820756e626f6e64696e6720696e2e00f8204e6f74653a20604d6178556e6c6f636b696e674368756e6b736020697320757365642061732074686520757070657220626f756e6420666f722074686501012060426f756e64656456656360206974656d20605374616b696e674c65646765722e756e6c6f636b696e67602e2053657474696e6720746869732076616c75650501206c6f776572207468616e20746865206578697374696e672076616c75652063616e206c65616420746f20696e636f6e73697374656e6369657320696e20746865090120605374616b696e674c65646765726020616e642077696c6c206e65656420746f2062652068616e646c65642070726f7065726c7920696e20612072756e74696d650501206d6967726174696f6e2e20546865207465737420607265647563696e675f6d61785f756e6c6f636b696e675f6368756e6b735f616272757074602073686f7773342074686973206566666563742e017d07081c53657373696f6e011c53657373696f6e1c2856616c696461746f7273010061050400047c205468652063757272656e7420736574206f662076616c696461746f72732e3043757272656e74496e646578010010100000000004782043757272656e7420696e646578206f66207468652073657373696f6e2e345175657565644368616e676564010098040008390120547275652069662074686520756e6465726c79696e672065636f6e6f6d6963206964656e746974696573206f7220776569676874696e6720626568696e64207468652076616c696461746f7273a420686173206368616e67656420696e20746865207175657565642076616c696461746f72207365742e285175657565644b657973010081070400083d012054686520717565756564206b65797320666f7220746865206e6578742073657373696f6e2e205768656e20746865206e6578742073657373696f6e20626567696e732c207468657365206b657973e02077696c6c206265207573656420746f2064657465726d696e65207468652076616c696461746f7227732073657373696f6e206b6579732e4844697361626c656456616c696461746f7273010069050400148020496e6469636573206f662064697361626c65642076616c696461746f72732e003d01205468652076656320697320616c77617973206b65707420736f7274656420736f20746861742077652063616e2066696e642077686574686572206120676976656e2076616c696461746f722069733d012064697361626c6564207573696e672062696e617279207365617263682e204974206765747320636c6561726564207768656e20606f6e5f73657373696f6e5f656e64696e67602072657475726e73642061206e657720736574206f66206964656e7469746965732e204e6578744b657973000104050081050400049c20546865206e6578742073657373696f6e206b65797320666f7220612076616c696461746f722e204b65794f776e657200010405890700040004090120546865206f776e6572206f662061206b65792e20546865206b65792069732074686520604b657954797065496460202b2074686520656e636f646564206b65792e017d0501bc000191070928486973746f726963616c0128486973746f726963616c0848486973746f726963616c53657373696f6e73000104051095070400045d01204d617070696e672066726f6d20686973746f726963616c2073657373696f6e20696e646963657320746f2073657373696f6e2d6461746120726f6f74206861736820616e642076616c696461746f7220636f756e742e2c53746f72656452616e67650000e103040004e4205468652072616e6765206f6620686973746f726963616c2073657373696f6e732077652073746f72652e205b66697273742c206c61737429000000000a1c4772616e647061011c4772616e647061181453746174650100990704000490205374617465206f66207468652063757272656e7420617574686f72697479207365742e3450656e64696e674368616e676500009d07040004c42050656e64696e67206368616e67653a20287369676e616c65642061742c207363686564756c6564206368616e6765292e284e657874466f72636564000010040004bc206e65787420626c6f636b206e756d6265722077686572652077652063616e20666f7263652061206368616e67652e1c5374616c6c65640000e1030400049020607472756560206966207765206172652063757272656e746c79207374616c6c65642e3043757272656e745365744964010028200000000000000000085d0120546865206e756d626572206f66206368616e6765732028626f746820696e207465726d73206f66206b65797320616e6420756e6465726c79696e672065636f6e6f6d696320726573706f6e736962696c697469657329c420696e20746865202273657422206f66204772616e6470612076616c696461746f72732066726f6d2067656e657369732e30536574496453657373696f6e00010405281004002859012041206d617070696e672066726f6d206772616e6470612073657420494420746f2074686520696e646578206f6620746865202a6d6f737420726563656e742a2073657373696f6e20666f722077686963682069747368206d656d62657273207765726520726573706f6e7369626c652e0045012054686973206973206f6e6c79207573656420666f722076616c69646174696e672065717569766f636174696f6e2070726f6f66732e20416e2065717569766f636174696f6e2070726f6f66206d7573744d0120636f6e7461696e732061206b65792d6f776e6572736869702070726f6f6620666f72206120676976656e2073657373696f6e2c207468657265666f7265207765206e65656420612077617920746f20746965450120746f6765746865722073657373696f6e7320616e64204752414e44504120736574206964732c20692e652e207765206e65656420746f2076616c6964617465207468617420612076616c696461746f7241012077617320746865206f776e6572206f66206120676976656e206b6579206f6e206120676976656e2073657373696f6e2c20616e642077686174207468652061637469766520736574204944207761735420647572696e6720746861742073657373696f6e2e00b82054574f582d4e4f54453a2060536574496460206973206e6f7420756e646572207573657220636f6e74726f6c2e01890501c008384d6178417574686f7269746965731010a0860100045c204d617820417574686f72697469657320696e20757365584d6178536574496453657373696f6e456e74726965732820a00200000000000018390120546865206d6178696d756d206e756d626572206f6620656e747269657320746f206b65657020696e207468652073657420696420746f2073657373696f6e20696e646578206d617070696e672e0031012053696e6365207468652060536574496453657373696f6e60206d6170206973206f6e6c79207573656420666f722076616c69646174696e672065717569766f636174696f6e73207468697329012076616c75652073686f756c642072656c61746520746f2074686520626f6e64696e67206475726174696f6e206f66207768617465766572207374616b696e672073797374656d2069733501206265696e6720757365642028696620616e79292e2049662065717569766f636174696f6e2068616e646c696e67206973206e6f7420656e61626c6564207468656e20746869732076616c7565342063616e206265207a65726f2e01a5070b48417574686f72697479446973636f766572790148417574686f72697479446973636f7665727908104b6579730100a9070400048c204b657973206f66207468652063757272656e7420617574686f72697479207365742e204e6578744b6579730100a90704000480204b657973206f6620746865206e65787420617574686f72697479207365742e000000000c20496d4f6e6c696e650120496d4f6e6c696e651038486561727462656174416674657201001010000000002c1d012054686520626c6f636b206e756d6265722061667465722077686963682069742773206f6b20746f2073656e64206865617274626561747320696e207468652063757272656e74242073657373696f6e2e0025012041742074686520626567696e6e696e67206f6620656163682073657373696f6e20776520736574207468697320746f20612076616c756520746861742073686f756c642066616c6c350120726f7567686c7920696e20746865206d6964646c65206f66207468652073657373696f6e206475726174696f6e2e20546865206964656120697320746f206669727374207761697420666f721901207468652076616c696461746f727320746f2070726f64756365206120626c6f636b20696e207468652063757272656e742073657373696f6e2c20736f207468617420746865a820686561727462656174206c61746572206f6e2077696c6c206e6f74206265206e65636573736172792e00390120546869732076616c75652077696c6c206f6e6c79206265207573656420617320612066616c6c6261636b206966207765206661696c20746f2067657420612070726f7065722073657373696f6e2d012070726f677265737320657374696d6174652066726f6d20604e65787453657373696f6e526f746174696f6e602c2061732074686f736520657374696d617465732073686f756c642062650101206d6f7265206163637572617465207468656e207468652076616c75652077652063616c63756c61746520666f7220604865617274626561744166746572602e104b6579730100b107040004d0205468652063757272656e7420736574206f66206b6579732074686174206d61792069737375652061206865617274626561742e485265636569766564486561727462656174730001080505e103b9070400083d0120466f7220656163682073657373696f6e20696e6465782c207765206b6565702061206d617070696e67206f66206053657373696f6e496e6465786020616e64206041757468496e6465786020746fb02060577261707065724f70617175653c426f756e6465644f70617175654e6574776f726b53746174653e602e38417574686f726564426c6f636b7301010805054d0710100000000008150120466f7220656163682073657373696f6e20696e6465782c207765206b6565702061206d617070696e67206f66206056616c696461746f7249643c543e6020746f20746865c8206e756d626572206f6620626c6f636b7320617574686f7265642062792074686520676976656e20617574686f726974792e01b90501d40440556e7369676e65645072696f726974792820ffffffffffffffff10f0204120636f6e66696775726174696f6e20666f722062617365207072696f72697479206f6620756e7369676e6564207472616e73616374696f6e732e0015012054686973206973206578706f73656420736f20746861742069742063616e2062652074756e656420666f7220706172746963756c61722072756e74696d652c207768656eb4206d756c7469706c652070616c6c6574732073656e6420756e7369676e6564207472616e73616374696f6e732e01cd070d204f6666656e63657301204f6666656e6365730c1c5265706f727473000104052cd107040004490120546865207072696d61727920737472756374757265207468617420686f6c647320616c6c206f6666656e6365207265636f726473206b65796564206279207265706f7274206964656e746966696572732e58436f6e63757272656e745265706f727473496e6465780101080505d507d9030400042901204120766563746f72206f66207265706f727473206f66207468652073616d65206b696e6420746861742068617070656e6564206174207468652073616d652074696d6520736c6f742e485265706f72747342794b696e64496e64657801010405fc30040018110120456e756d65726174657320616c6c207265706f727473206f662061206b696e6420616c6f6e672077697468207468652074696d6520746865792068617070656e65642e00bc20416c6c207265706f7274732061726520736f72746564206279207468652074696d65206f66206f6666656e63652e004901204e6f74652074686174207468652061637475616c2074797065206f662074686973206d617070696e6720697320605665633c75383e602c207468697320697320626563617573652076616c756573206f66690120646966666572656e7420747970657320617265206e6f7420737570706f7274656420617420746865206d6f6d656e7420736f2077652061726520646f696e6720746865206d616e75616c2073657269616c697a6174696f6e2e0001f800000e6052616e646f6d6e657373436f6c6c656374697665466c6970016052616e646f6d6e657373436f6c6c656374697665466c6970043852616e646f6d4d6174657269616c0100d90704000c610120536572696573206f6620626c6f636b20686561646572732066726f6d20746865206c61737420383120626c6f636b73207468617420616374732061732072616e646f6d2073656564206d6174657269616c2e2054686973610120697320617272616e67656420617320612072696e672062756666657220776974682060626c6f636b5f6e756d626572202520383160206265696e672074686520696e64657820696e746f20746865206056656360206f664420746865206f6c6465737420686173682e000000000f24566f7465724c6973740124566f7465724c6973740c244c6973744e6f6465730001040500dd0704000c8020412073696e676c65206e6f64652c2077697468696e20736f6d65206261672e000501204e6f6465732073746f7265206c696e6b7320666f727761726420616e64206261636b2077697468696e207468656972207265737065637469766520626167732e4c436f756e746572466f724c6973744e6f646573010010100000000004ac436f756e74657220666f72207468652072656c6174656420636f756e7465642073746f72616765206d6170204c697374426167730001040528e10704000c642041206261672073746f72656420696e2073746f726167652e0019012053746f7265732061206042616760207374727563742c2077686963682073746f726573206865616420616e64207461696c20706f696e7465727320746f20697473656c662e01d90501010104344261675468726573686f6c647315010919210300407a10f35a00006a70ccd4a96000009ef3397fbc660000a907ccd5306d00003d9a67fb0c740000a9bfa275577b0000a6fdf73217830000034f5d91538b0000132445651494000078081001629d00000302f63c45a70000392e6f7fc7b10000f59c23c6f2bc00004ae76aafd1c80000598a64846fd50000129fb243d8e200003f22e1ac18f1000033a4844c3e000100e2e51b895710010076a2c0b0732101006789b407a3330100793ed8d7f646010078131b81815b01000c1cf38a567101004437eeb68a8801009eb56d1434a10100335e9f156abb010067c3c7a545d701003218f340e1f40100de0b230d59140200699c11f5ca350200ad50a2c4565902009ae41c471e7f0200d0244e6745a70200f984ad51f2d10200ace7a7984dff0200a118325b822f0300ffa4c76dbe620300580bfd8532990300a9afce6812d30300109ad81b95100400d9caa519f551040038df488970970400bee1727949e10400cc73401fc62f0500b304f91831830500828bffb4d9db05001235383d143a0600a5b42a473a9e060036662d09ab080700f73aeab4cb790700b87e93d707f20700ffec23c0d1710800b84b0beca2f90800c9dcae7afc89090091752ba867230a0064f1cd4f76c60a003609be76c3730b0078655fdff32b0c00a407f5a5b6ef0c0052f61be7c5bf0d00da71bb70e79c0e000de9127eed870f001477987fb7811000ebee65ef328b11001269fe325ca5120033f8428b3fd113008ba57a13fa0f15001b2b60d0ba6216000d1d37d0c3ca17006c64fa5c6b4919002622c7411de01a00045bb9245c901c00233d83f6c25b1e00c8771c79064420003013fddef64a2200aa8b6e848172240082c096c4b2bc260016a3faebb72b29008296524ae1c12b00a636a865a4812e00d0e2d4509e6d31009c0a9a2796883400e4faafb27fd53700e6e64d367e573b000e4bd66de7113f0088b17db746084300b07def72603e470034de249635b84b00d48bd57b077a5000d0bd20ef5b885500b8f0467801e85a0010f88aee139e60003892925301b066009c95e4fc8e236d00b4126d10dffe730028b43e5976487b00a08a1c7a42078300b09ab083a0428b002846b2f463029400c861a42ade4e9d0050d23d4ae630a700805101a7e1b1b10038e501b2ccdbbc002016527844b9c800388924ba9055d50070ca35a4aebce200805fb1355cfbf0008035685d241f0001a0c3dcd96b361001d07862e87e50210160e852d09f7d330190662c5816cf460110274c3340575b01804be277a22971013082b92dfc5a880180d276075a01a101b0f511592b34bb014031745f580cd701802f6cee59a4f40140ff799b521814026075607d2986350260fde999a60d590200e5e71c91d07e02c0df2575cff2a602a07fd975899ad102a067009d4cf0fe0220dc29a1321f2f0320ff526b0a5562038088caa383c29803e05683fb5c9bd203401dd75d9516100400317e39a06e5104c0b071129de1960480b48c9192b1e00480e8124aad242f05c007ca7082858205007c13c45623db0540836fe869523906c0700f81466c9d0640f09c5017d00707c0e624b301e37807c0332ac78510f10780074ca1e4ca700800d5a9eb8c8bf80800a849588ed3880900804254142c220a80a25170e826c50a00e8d5fafc5e720b801df64e00792a0c80d4fe64f923ee0c006dd038ee19be0d001e90a494209b0e0010bf570e0a860f00da6a9db0b57f1000bf64afd810891100bb5b60cd17a31200f963f3aed6ce1300d5f004766a0d1500e099770202601600103d663bdfc71700de3e2d4158461900ecdbadb2d8dc1a0045c70007e38c1c00b8bde0fc11581e00ba5c2a211a402000407de46dcb462200dea55b03136e2400aaf1f3fcfcb7260014226f63b62629006492803e8fbc2b008486a6c7fc7b2e002cf05fc09b673100da63f7ed32823400f0b13fbdb5ce3700f291c41047503b00422a1a3c3c0a3f002c24212f20004300ac9342d4b6354700cc6ed7a400af4b00c4d022773e70500020017d89f57d5500f86387cef3dc5a008c4c7f7e54926000206207f284a36600cc1e05cb49166d00b42a7a70c4f07300d43a90e278397b0038f461ec53f78200a07264b9b1318b0048c9b3d464f09300007fe998bd3b9d0010058f17921ca70000dfaf7f469cb100e80c880bd6c4bc0058bdcb7ddca0c80038d18d37a03bd50030d55bf01ca1e200704ac01a0fdef0ffffffffffffffffacd020546865206c697374206f66207468726573686f6c64732073657061726174696e672074686520766172696f757320626167732e00490120496473206172652073657061726174656420696e746f20756e736f727465642062616773206163636f7264696e6720746f2074686569722073636f72652e205468697320737065636966696573207468656101207468726573686f6c64732073657061726174696e672074686520626167732e20416e20696427732062616720697320746865206c6172676573742062616720666f722077686963682074686520696427732073636f7265b8206973206c657373207468616e206f7220657175616c20746f20697473207570706572207468726573686f6c642e006501205768656e20696473206172652069746572617465642c2068696768657220626167732061726520697465726174656420636f6d706c6574656c79206265666f7265206c6f77657220626167732e2054686973206d65616e735901207468617420697465726174696f6e206973205f73656d692d736f727465645f3a20696473206f66206869676865722073636f72652074656e6420746f20636f6d65206265666f726520696473206f66206c6f7765722d012073636f72652c206275742070656572206964732077697468696e206120706172746963756c6172206261672061726520736f7274656420696e20696e73657274696f6e206f726465722e006820232045787072657373696e672074686520636f6e7374616e74004d01205468697320636f6e7374616e74206d75737420626520736f7274656420696e207374726963746c7920696e6372656173696e67206f726465722e204475706c6963617465206974656d7320617265206e6f742c207065726d69747465642e00410120546865726520697320616e20696d706c696564207570706572206c696d6974206f66206053636f72653a3a4d4158603b20746861742076616c756520646f6573206e6f74206e65656420746f2062652101207370656369666965642077697468696e20746865206261672e20466f7220616e792074776f207468726573686f6c64206c697374732c206966206f6e6520656e647320776974683101206053636f72653a3a4d4158602c20746865206f74686572206f6e6520646f6573206e6f742c20616e64207468657920617265206f746865727769736520657175616c2c207468652074776f7c206c697374732077696c6c20626568617665206964656e746963616c6c792e003820232043616c63756c6174696f6e005501204974206973207265636f6d6d656e64656420746f2067656e65726174652074686520736574206f66207468726573686f6c647320696e20612067656f6d6574726963207365726965732c2073756368207468617441012074686572652065786973747320736f6d6520636f6e7374616e7420726174696f2073756368207468617420607468726573686f6c645b6b202b20315d203d3d20287468726573686f6c645b6b5d202ad020636f6e7374616e745f726174696f292e6d6178287468726573686f6c645b6b5d202b2031296020666f7220616c6c20606b602e005901205468652068656c7065727320696e2074686520602f7574696c732f6672616d652f67656e65726174652d6261677360206d6f64756c652063616e2073696d706c69667920746869732063616c63756c6174696f6e2e002c2023204578616d706c6573005101202d20496620604261675468726573686f6c64733a3a67657428292e69735f656d7074792829602c207468656e20616c6c20696473206172652070757420696e746f207468652073616d65206261672c20616e64b0202020697465726174696f6e206973207374726963746c7920696e20696e73657274696f6e206f726465722e6101202d20496620604261675468726573686f6c64733a3a67657428292e6c656e2829203d3d203634602c20616e6420746865207468726573686f6c6473206172652064657465726d696e6564206163636f7264696e6720746f11012020207468652070726f63656475726520676976656e2061626f76652c207468656e2074686520636f6e7374616e7420726174696f20697320657175616c20746f20322e6501202d20496620604261675468726573686f6c64733a3a67657428292e6c656e2829203d3d20323030602c20616e6420746865207468726573686f6c6473206172652064657465726d696e6564206163636f7264696e6720746f59012020207468652070726f63656475726520676976656e2061626f76652c207468656e2074686520636f6e7374616e7420726174696f20697320617070726f78696d6174656c7920657175616c20746f20312e3234382e6101202d20496620746865207468726573686f6c64206c69737420626567696e7320605b312c20322c20332c202e2e2e5d602c207468656e20616e20696420776974682073636f72652030206f7220312077696c6c2066616c6cf0202020696e746f2062616720302c20616e20696420776974682073636f726520322077696c6c2066616c6c20696e746f2062616720312c206574632e00302023204d6967726174696f6e00610120496e20746865206576656e7420746861742074686973206c6973742065766572206368616e6765732c206120636f7079206f6620746865206f6c642062616773206c697374206d7573742062652072657461696e65642e5d012057697468207468617420604c6973743a3a6d696772617465602063616e2062652063616c6c65642c2077686963682077696c6c20706572666f726d2074686520617070726f707269617465206d6967726174696f6e2e01e507101c56657374696e67011c56657374696e67081c56657374696e670001040200ed07040004d820496e666f726d6174696f6e20726567617264696e67207468652076657374696e67206f66206120676976656e206163636f756e742e3853746f7261676556657273696f6e0100f50704000c7c2053746f726167652076657273696f6e206f66207468652070616c6c65742e003101204e6577206e6574776f726b732073746172742077697468206c61746573742076657273696f6e2c2061732064657465726d696e6564206279207468652067656e65736973206275696c642e01dd0501050108444d696e5665737465645472616e736665721840aa821bce26000000000000000000000004e820546865206d696e696d756d20616d6f756e74207472616e7366657272656420746f2063616c6c20607665737465645f7472616e73666572602e4c4d617856657374696e675363686564756c657310101c0000000001f90711204d756c746973696701204d756c746973696704244d756c7469736967730001080502fd070108040004942054686520736574206f66206f70656e206d756c7469736967206f7065726174696f6e732e01e5050109010c2c4465706f736974426173651840d042de1300000000000000000000000018590120546865206261736520616d6f756e74206f662063757272656e6379206e656564656420746f207265736572766520666f72206372656174696e672061206d756c746973696720657865637574696f6e206f7220746f842073746f726520612064697370617463682063616c6c20666f72206c617465722e00010120546869732069732068656c6420666f7220616e206164646974696f6e616c2073746f72616765206974656d2077686f73652076616c75652073697a652069733101206034202b2073697a656f662828426c6f636b4e756d6265722c2042616c616e63652c204163636f756e74496429296020627974657320616e642077686f7365206b65792073697a652069738020603332202b2073697a656f66284163636f756e74496429602062797465732e344465706f736974466163746f72184040cd2d030000000000000000000000000c55012054686520616d6f756e74206f662063757272656e6379206e65656465642070657220756e6974207468726573686f6c64207768656e206372656174696e672061206d756c746973696720657865637574696f6e2e00250120546869732069732068656c6420666f7220616464696e67203332206279746573206d6f726520696e746f2061207072652d6578697374696e672073746f726167652076616c75652e384d61785369676e61746f7269657310106400000004ec20546865206d6178696d756d20616d6f756e74206f66207369676e61746f7269657320616c6c6f77656420696e20746865206d756c74697369672e010908121c436f756e63696c011c436f756e63696c2414537461676501000d082402010000000000000004742043757272656e7420636f756e63696c20766f74696e6720737461676538436f756e63696c4d656d6265727301002108040004602043757272656e7420636f756e63696c206d656d626572732843616e6469646174657300010402282d080400041101204d6170206f6620616c6c2063616e64696461746573207468617420657665722063616e6469646174656420616e6420686176656e277420756e7374616b65207965742e50416e6e6f756e63656d656e74506572696f644e72010028200000000000000000085d0120496e646578206f66207468652063757272656e742063616e64696461637920706572696f642e20497420697320696e6372656d656e74656420657665727974696d6520616e6e6f756e63656d656e7420706572696f6420207374617274732e18427564676574010018400000000000000000000000000000000004c82042756467657420666f722074686520636f756e63696c277320656c6563746564206d656d6265727320726577617264732e484e6578745265776172645061796d656e7473010010100000000004290120546865206e65787420626c6f636b20696e2077686963682074686520656c656374656420636f756e63696c206d656d62657220726577617264732077696c6c2062652070617965642e404e657874427564676574526566696c6c010010100000000004d820546865206e65787420626c6f636b20696e20776869636820746865206275646765742077696c6c20626520696e637265617365642e3c427564676574496e6372656d656e74010018400000000000000000000000000000000004d420416d6f756e74206f662062616c616e636520746f20626520726566696c6c65642065766572792062756467657420706572696f643c436f756e63696c6f725265776172640100184000000000000000000000000000000000046c20436f756e63696c6f72207265776172642070657220626c6f636b01ed0501110124684d696e4e756d6265724f66457874726143616e64696461746573101000000000080901204d696e696d756d206e756d626572206f662065787472612063616e64696461746573206e656564656420666f72207468652076616c696420656c656374696f6e2e2d01204e756d626572206f6620746f74616c2063616e6469646174657320697320657175616c20746f20636f756e63696c2073697a6520706c75732065787472612063616e646964617465732e2c436f756e63696c53697a65101003000000045420436f756e63696c206d656d62657220636f756e74444d696e43616e6469646174655374616b651840a010a012d3eb050000000000000000000490204d696e696d756d207374616b652063616e6469646174652068617320746f206c6f636b60416e6e6f756e63696e67506572696f644475726174696f6e1010805101000474204475726174696f6e206f6620616e6e6f6e63696e6720706572696f644849646c65506572696f644475726174696f6e1010801303000460204475726174696f6e206f662069646c6520706572696f6464456c65637465644d656d626572526577617264506572696f6410104038000004a020496e74657276616c20666f72206175746f6d6174696320726577617264207061796d656e74732e48427564676574526566696c6c506572696f6410104038000004ac20496e74657276616c206265747765656e206175746f6d617469632062756467657420726566696c6c732e3c43616e6469646163794c6f636b496429042063616e6469646163048c204578706f72747320636f6e7374202d2063616e646964616379206c6f636b2069642e3c436f756e63696c6f724c6f636b4964290420636f756e63696c6f048c204578706f72747320636f6e7374202d20636f756e63696c6f72206c6f636b2069642e01310813285265666572656e64756d014c496e7374616e6365315265666572656e64756d0c14537461676501003508040004682043757272656e74207265666572656e64756d2073746167652e14566f74657301010402004508e400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018510120566f746573206361737420696e20746865207265666572656e64756d2e2041206e6577207265636f726420697320616464656420746f2074686973206d6170207768656e20612075736572206361737473206134207365616c656420766f74652e0101204974206973206d6f646966696564207768656e206120757365722072657665616c732074686520766f7465277320636f6d6d69746d656e742070726f6f662e55012041207265636f72642069732066696e616c6c792072656d6f766564207768656e20746865207573657220756e7374616b65732c2077686963682063616e2068617070656e20647572696e67206120766f74696e679c207374616765206f72206166746572207468652063757272656e74206379636c6520656e64732ef82041207374616b6520666f72206120766f74652063616e2062652072657573656420696e20667574757265207265666572656e64756d206379636c65732e404163636f756e74734f707465644f757401010402007c0004f4204163636f756e74732074686174207065726d616e656e746c79206f70746564206f7574206f6620766f74696e6720696e207265666572656e64756d2e01f10501190114344d617853616c744c656e67746828202000000000000000085d01204d6178696d756d206c656e677468206f6620766f746520636f6d6d69746d656e742073616c742e20557365206c656e677468207468617420656e737572657320756e697175656e65737320666f722068617368696e675020652e672e207374643a3a7536343a3a4d41582e44566f746553746167654475726174696f6e101000e1000004b0204475726174696f6e206f6620766f74696e6720737461676520286e756d626572206f6620626c6f636b73294c52657665616c53746167654475726174696f6e101000e1000004bc204475726174696f6e206f662072657665616c696e6720737461676520286e756d626572206f6620626c6f636b7329304d696e696d756d5374616b651840a41a130d8401000000000000000000000480204d696e696d756d207374616b65206e656564656420666f7220766f74696e67505374616b696e6748616e646c65724c6f636b4964290420766f74696e67202004a4204578706f72747320636f6e7374202d207374616b696e672068616e646c6572206c6f636b2069642e014908141c4d656d6265727301284d656d6265727368697020304e6578744d656d6265724964010028200000000000000000084501204d656d626572496420746f2061737369676e20746f206e657874206d656d626572207468617420697320616464656420746f207468652072656769737472792c20616e6420697320616c736f20746865e820746f74616c206e756d626572206f66206d656d6265727320637265617465642e204d656d626572496473207374617274206174205a65726f2e384d656d626572736869704279496400010402284d08040004d0204d617070696e67206f66206d656d626572277320696420746f207468656972206d656d626572736869702070726f66696c652e504d656d6265724964427948616e646c6548617368010104022c28200000000000000000040501205265676973746572656420756e697175652068616e646c6573206861736820616e64207468656972206d617070696e6720746f207468656972206f776e65722e2c526566657272616c437574010008040004410120526566657272616c206375742070657263656e74206f6620746865206d656d626572736869702066656520746f2072656365697665206f6e20627579696e6720746865206d656d626572736869702e3c4d656d62657273686970507269636501001840aa821bce26000000000000000000000004682043757272656e74206d656d626572736869702070726963652e58496e697469616c496e7669746174696f6e436f756e74010010100000000004e820496e697469616c20696e7669746174696f6e20636f756e7420666f7220746865206e65776c7920626f75676874206d656d626572736869702e60496e697469616c496e7669746174696f6e42616c616e63650100184034c10d6713000000000000000000000004cc20496e697469616c20696e7669746174696f6e2062616c616e636520666f722074686520696e7669746564206d656d6265722e705374616b696e674163636f756e7449644d656d626572537461747573010104020051082400000000000000000004250120446f75626c65206f662061207374616b696e67206163636f756e7420696420616e64206d656d62657220696420746f2074686520636f6e6669726d6174696f6e207374617475732e01f505012901185844656661756c744d656d6265727368697050726963651840aa821bce26000000000000000000000004a0204578706f72747320636f6e7374202d2064656661756c74206d656d62657273686970206665652e64526566657272616c4375744d6178696d756d50657263656e74080432044901204578706f72747320636f6e7374202d206d6178696d756d2070657263656e742076616c7565206f6620746865206d656d626572736869702066656520666f722074686520726566657272616c206375742e7c44656661756c74496e697469616c496e7669746174696f6e42616c616e6365184034c10d6713000000000000000000000004e0204578706f72747320636f6e7374202d2064656661756c742062616c616e636520666f722074686520696e7669746564206d656d6265722e3843616e6469646174655374616b651840a41a130d84010000000000000000000004f8204578706f72747320636f6e7374202d205374616b65206e656564656420746f2063616e646964617465206173207374616b696e67206163636f756e742e4c496e76697465644d656d6265724c6f636b4964290420696e766974656d6204a0204578706f72747320636f6e7374202d20696e7669746564206d656d626572206c6f636b2069642e585374616b696e6743616e6469646174654c6f636b4964290420626f756e6473746104ac204578706f72747320636f6e7374202d207374616b696e672063616e646964617465206c6f636b2069642e0155081514466f72756d0124466f72756d5f315f31203043617465676f727942794964010104022859083d010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004cc204d61702063617465676f7279206964656e74696669657220746f20636f72726573706f6e64696e672063617465676f72792e384e65787443617465676f727949640100282000000000000000000411012043617465676f7279206964656e7469666965722076616c756520746f206265207573656420666f7220746865206e6578742043617465676f727920637265617465642e3c43617465676f7279436f756e746572010028200000000000000000049420436f756e74657220666f7220616c6c206578697374696e672063617465676f726965732e285468726561644279496401010802027d036108a4000000000000000000000000000000000000000000000000000000000000000000000000000000000004bc204d617020746872656164206964656e74696669657220746f20636f72726573706f6e64696e67207468726561642e304e657874546872656164496401002820000000000000000004090120546872656164206964656e7469666965722076616c756520746f206265207573656420666f72206e6578742054687265616420696e20746872656164427949642e284e657874506f7374496401002820000000000000000004f020506f7374206964656e7469666965722076616c756520746f206265207573656420666f7220666f72206e65787420706f737420637265617465642e4c43617465676f727942794d6f64657261746f7201010802027d037c000480204d6f64657261746f722073657420666f7220656163682043617465676f727920506f73744279496401010802027d036508150100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004ac204d617020706f7374206964656e74696669657220746f20636f72726573706f6e64696e6720706f73742e01f905015101102c506f73744465706f73697418400f7bf8720000000000000000000000000838204578706f72747320636f6e737480204465706f736974206e656564656420746f20637265617465206120706f7374345468726561644465706f73697418409e3c1c6f0000000000000000000000000488204465706f736974206e656564656420746f20637265617465206120746872656164804d617844697265637453756263617465676f72696573496e43617465676f727928200a000000000000000484204d617844697265637453756263617465676f72696573496e43617465676f7279484d6178546f74616c43617465676f7269657328202800000000000000044c204d6178546f74616c43617465676f726965730169081630436f6e737469747574696f6e0130436f6e737469747574696f6e0430436f6e737469747574696f6e01006d088000000000000000000000000000000000000000000000000000000000000000000001fd05016d0100001718426f756e74790118426f756e74791420426f756e74696573010104022871087d010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044020426f756e74792073746f726167652e4c426f756e7479436f6e747269627574696f6e7301010802028508890880000000000000000000000000000000005bf4b26c000000000000000000000000044d0120446f75626c65206d617020666f7220626f756e74792066756e64696e672e2049742073746f7265732061206d656d626572206f7220636f756e63696c2066756e64696e6720666f7220626f756e746965732e2c426f756e7479436f756e74010010100000000004b820436f756e74206f6620616c6c20626f756e7469657320746861742068617665206265656e20637265617465642e1c456e747269657300010802027d038d080400046020576f726b20656e7472792073746f72616765206d61702e28456e747279436f756e74010010100000000004c820436f756e74206f6620616c6c20776f726b20656e747269657320746861742068617665206265656e20637265617465642e010106017101105c436c6f736564436f6e747261637453697a654c696d6974101032000000044d01204578706f72747320636f6e7374202d206d617820776f726b20656e747279206e756d62657220666f72206120636c6f736564206173737572616e6365207479706520636f6e747261637420626f756e74792e4c4d696e576f726b456e7472616e745374616b651840cba9f36d00000000000000000000000004d4204578706f72747320636f6e7374202d206d696e20776f726b20656e7472616e74207374616b6520666f72206120626f756e74792e6846756e6465725374617465426c6f6174426f6e64416d6f756e7418405bf4b26c00000000000000000000000004f4204578706f72747320636f6e7374202d2066756e64657220737461746520626c6f617420626f6e6420616d6f756e7420666f72206120626f756e74792e6c43726561746f725374617465426c6f6174426f6e64416d6f756e741840b8c3df6c00000000000000000000000004f8204578706f72747320636f6e7374202d2063726561746f7220737461746520626c6f617420626f6e6420616d6f756e7420666f72206120626f756e74792e01910818404a6f7973747265616d5574696c69747901404a6f7973747265616d5574696c6974790001050601950100019508191c436f6e74656e74011c436f6e74656e74842c4368616e6e656c427949640101040228a901a10100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024566964656f42794964010104022899086c00000000000000000000000000000000000000000000000000000000344e6578744368616e6e656c4964010028200000000000000000002c4e657874566964656f496401002820000000000000000000384e6578745472616e73666572496401002820000000000000000000484e65787443757261746f7247726f75704964010028200000000000000000004043757261746f7247726f7570427949640101040228c5080c0000000028436f6d6d69746d656e7401002c80000000000000000000000000000000000000000000000000000000000000000000684368616e6e656c5374617465426c6f6174426f6e6456616c756501001840000000000000000000000000000000000425012054686520737461746520626c6f617420626f6e6420666f7220746865206368616e6e656c202868656c70732070726576656e74696e672074686520737461746520626c6f6174292e60566964656f5374617465426c6f6174426f6e6456616c7565010018400000000000000000000000000000000004190154686520737461746520626c6f617420626f6e6420666f722074686520766964656f202868656c70732070726576656e74696e672074686520737461746520626c6f6174292e444d6178436173686f7574416c6c6f776564010018400000000000000000000000000000000000444d696e436173686f7574416c6c6f776564010018400000000000000000000000000000000000584368616e6e656c436173686f757473456e61626c6564010098040000484d696e41756374696f6e4475726174696f6e01001010000000000454204d696e2061756374696f6e206475726174696f6e484d617841756374696f6e4475726174696f6e01001010000000000454204d61782061756374696f6e206475726174696f6e644d696e41756374696f6e457874656e73696f6e506572696f6401001010000000000474204d696e2061756374696f6e20657874656e73696f6e20706572696f64644d617841756374696f6e457874656e73696f6e506572696f6401001010000000000474204d61782061756374696f6e20657874656e73696f6e20706572696f64484d696e4269644c6f636b4475726174696f6e01001010000000000458204d696e20626964206c6f636b206475726174696f6e484d61784269644c6f636b4475726174696f6e01001010000000000458204d617820626964206c6f636b206475726174696f6e404d696e5374617274696e67507269636501001840000000000000000000000000000000000468204d696e2061756374696f6e2073746172696e67207072696365404d61785374617274696e67507269636501001840000000000000000000000000000000000468204d61782061756374696f6e2073746172696e67207072696365444d696e43726561746f72526f79616c74790100ac1000000000047c204d696e2063726561746f7220726f79616c74792070657263656e74616765444d617843726561746f72526f79616c74790100ac1000000000047c204d61782063726561746f7220726f79616c74792070657263656e74616765284d696e4269645374657001001840000000000000000000000000000000000454204d696e2061756374696f6e206269642073746570284d61784269645374657001001840000000000000000000000000000000000454204d61782061756374696f6e20626964207374657054506c617466726f6d46656550657263656e746167650100ac1000000000046020506c6174666f726d206665652070657263656e746167655c41756374696f6e53746172747341744d617844656c7461010010100000000004b8204d61782064656c7461206265747765656e2063757272656e7420626c6f636b20616e6420737461727473206174784f70656e41756374696f6e4269644279566964656f416e644d656d62657201010802027d03e1087000000000000000000000000000000000000000000000000000000000045c204269647320666f72206f70656e2061756374696f6e7354476c6f62616c4461696c794e6674436f756e7465720100f90130000000000000000000000000046820476c6f62616c206461696c79204e465420636f756e7465722e58476c6f62616c5765656b6c794e6674436f756e7465720100f90130000000000000000000000000046c20476c6f62616c207765656b6c79204e465420636f756e7465722e4c476c6f62616c4461696c794e66744c696d69740100f50130000000000000000000000000046020476c6f62616c206461696c79204e4654206c696d69742e50476c6f62616c5765656b6c794e66744c696d69740100f50130000000000000000000000000046420476c6f62616c207765656b6c79204e4654206c696d69742e404e66744c696d697473456e61626c656401009804000868204e4654206c696d69747320656e61626c6564206f72206e6f74a02043616e206265207570646174656420696e20666c696768742062792074686520436f756e63696c01090601a101246c4d61784e756d6265724f6643757261746f727350657247726f757010100a00000004c4204578706f72747320636f6e7374202d206d6178206e756d626572206f662063757261746f7273207065722067726f7570ac4d61784b65797350657243757261746f7247726f75705065726d697373696f6e7342794c6576656c4d6170101019000000045d01204578706f72747320636f6e7374202d206d6178206e756d626572206f66206b657973207065722063757261746f725f67726f75702e7065726d697373696f6e735f62795f6c6576656c206d617020696e7374616e6365704d61784e667441756374696f6e57686974656c6973744c656e67746810101400000004c4204578706f72747320636f6e7374202d206d6178206e66742061756374696f6e2077686974656c697374206c656e6774686844656661756c74476c6f62616c4461696c794e66744c696d6974f5013064000000000000004038000004c0204578706f72747320636f6e7374202d2064656661756c7420676c6f62616c206461696c79204e4654206c696d69742e6c44656661756c74476c6f62616c5765656b6c794e66744c696d6974f501309001000000000000c089010004c4204578706f72747320636f6e7374202d2064656661756c7420676c6f62616c207765656b6c79204e4654206c696d69742e6c44656661756c744368616e6e656c4461696c794e66744c696d6974f501300a000000000000004038000004c4204578706f72747320636f6e7374202d2064656661756c74206368616e6e656c206461696c79204e4654206c696d69742e7044656661756c744368616e6e656c5765656b6c794e66744c696d6974f501302800000000000000c089010004c8204578706f72747320636f6e7374202d2064656661756c74206368616e6e656c207765656b6c79204e4654206c696d69742e684d696e696d756d436173686f7574416c6c6f7765644c696d69741840a41a130d84010000000000000000000004a8204578706f727420636f6e7374202d206d696e20636173686f757420616c6c6f776564206c696d697473684d6178696d756d436173686f7574416c6c6f7765644c696d6974184040a640ba3e363b00000000000000000004a8204578706f727420636f6e7374202d206d617820636173686f757420616c6c6f776564206c696d69747301e5081a1c53746f72616765011c53746f726167654c4055706c6f6164696e67426c6f636b6564010098040004a020446566696e6573207768657468657220616c6c206e65772075706c6f61647320626c6f636b65641042616773010104029502e90848000000000000000000000000000000000000044820426167732073746f72616765206d61702e4c4e65787453746f726167654275636b6574496401002820000000000000000004ac2053746f72616765206275636b657420696420636f756e7465722e20537461727473206174207a65726f2e404e657874446174614f626a656374496401002820000000000000000004a02044617461206f626a65637420696420636f756e7465722e20537461727473206174207a65726f2e4453746f726167654275636b6574427949640001040228f508040004442053746f72616765206275636b6574732e24426c61636b6c69737401010402fd087c00048020426c61636b6c69737465642064617461206f626a656374206861736865732e5043757272656e74426c61636b6c69737453697a65010028200000000000000000047820426c61636b6c69737420636f6c6c656374696f6e20636f756e7465722e60446174614f626a6563745065724d65676162797465466565010018400000000000000000000000000000000004b02053697a652062617365642070726963696e67206f66206e6577206f626a656374732075706c6f616465642e6453746f726167654275636b6574735065724261674c696d6974010010100000000004a0202253746f72616765206275636b657473207065722062616722206e756d626572206c696d69742e68566f75636865724d61784f626a6563747353697a654c696d697401002820000000000000000004f820224d6178206f626a656374732073697a6520666f7220612073746f72616765206275636b657420766f756368657222206e756d626572206c696d69742e70566f75636865724d61784f626a656374734e756d6265724c696d697401002820000000000000000004050120224d6178206f626a65637473206e756d62657220666f7220612073746f7261676520206275636b657420766f756368657222206e756d626572206c696d69742e74446174614f626a6563745374617465426c6f6174426f6e6456616c756501001840000000000000000000000000000000000439012054686520737461746520626c6f617420626f6e6420666f72207468652064617461206f626a65637473202868656c70732070726576656e74696e672074686520737461746520626c6f6174292e6844796e616d69634261674372656174696f6e506f6c696369657301010402b102010914000000000004c82044796e616d69634261674372656174696f6e506f6c6963792062792062616720747970652073746f72616765206d61702e3c446174614f626a6563747342794964010108020209090d096c00000000000000000000000000000000000000000000000000000004b0202744617461206f626a6563747320666f722062616773272073746f7261676520646f75626c65206d61702e784e657874446973747269627574696f6e4275636b657446616d696c79496401002820000000000000000004dc20446973747269627574696f6e206275636b65742066616d696c7920696420636f756e7465722e20537461727473206174207a65726f2e70446973747269627574696f6e4275636b657446616d696c794279496401010402281109200000000000000000047820446973747269627574696f6e206275636b65742066616d696c6965732e80446973747269627574696f6e4275636b6574427946616d696c7949644279496401010802027d0315093000000000000000000000000004a82027446973747269627574696f6e206275636b6574272073746f7261676520646f75626c65206d61702e78446973747269627574696f6e4275636b657446616d696c794e756d62657201002820000000000000000004f020546f74616c206e756d626572206f6620646973747269627574696f6e206275636b65742066616d696c69657320696e207468652073797374656d2e78446973747269627574696f6e4275636b6574735065724261674c696d6974010010100000000004b42022446973747269627574696f6e206275636b657473207065722062616722206e756d626572206c696d69742e013906018d022c48426c61636b6c69737453697a654c696d69742820e803000000000000040501204578706f72747320636f6e7374202d206d6178696d756d2073697a65206f662074686520226861736820626c61636b6c6973742220636f6c6c656374696f6e2e5c4d696e53746f726167654275636b65747350657242616710100300000004ec204578706f72747320636f6e7374202d206d696e696d756d206e756d626572206f662073746f72616765206275636b65747320706572206261672e5c4d617853746f726167654275636b65747350657242616710100d00000004ec204578706f72747320636f6e7374202d206d6178696d756d206e756d626572206f662073746f72616765206275636b65747320706572206261672e704d696e446973747269627574696f6e4275636b657473506572426167101001000000040101204578706f72747320636f6e7374202d206d696e696d756d206e756d626572206f6620646973747269627574696f6e206275636b65747320706572206261672e704d6178446973747269627574696f6e4275636b657473506572426167101033000000040101204578706f72747320636f6e7374202d206d6178696d756d206e756d626572206f6620646973747269627574696f6e206275636b65747320706572206261672eb444656661756c744d656d62657244796e616d69634261674e756d6265724f6653746f726167654275636b657473101005000000085101204578706f72747320636f6e7374202d207468652064656661756c742064796e616d696320626167206372656174696f6e20706f6c69637920666f72206d656d62657273202873746f72616765206275636b657424206e756d626572292eb844656661756c744368616e6e656c44796e616d69634261674e756d6265724f6653746f726167654275636b657473101005000000085501204578706f72747320636f6e7374202d207468652064656661756c742064796e616d696320626167206372656174696f6e20706f6c69637920666f72206368616e6e656c73202873746f72616765206275636b657424206e756d626572292e844d6178446973747269627574696f6e4275636b657446616d696c794e756d6265722820c80000000000000004fc204578706f72747320636f6e7374202d206d617820616c6c6f77656420646973747269627574696f6e206275636b65742066616d696c79206e756d6265722ec84d61784e756d6265724f6650656e64696e67496e7669746174696f6e73506572446973747269627574696f6e4275636b6574101014000000042d01204578706f72747320636f6e7374202d206d6178206e756d626572206f662070656e64696e6720696e7669746174696f6e732070657220646973747269627574696f6e206275636b65742ea44d61784e756d6265724f664f70657261746f7273506572446973747269627574696f6e4275636b6574101014000000040501204578706f72747320636f6e7374202d206d6178206e756d626572206f66206f70657261746f72732070657220646973747269627574696f6e206275636b65742e444d6178446174614f626a65637453697a652820000000000f00000004bc204578706f72747320636f6e7374202d206d61782064617461206f626a6563742073697a6520696e2062797465732e0121091b3050726f6a656374546f6b656e0114546f6b656e386c4163636f756e74496e666f4279546f6b656e416e644d656d62657201010802027d032509b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000041d0120446f75626c65206d617020546f6b656e49642078204d656d6265724964203d3e204163636f756e744461746120666f72206d616e6167696e67206163636f756e74206461746134546f6b656e496e666f4279496401010402284d094101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004dc206d617020546f6b656e4964203d3e20546f6b656e4461746120746f20726574726965766520746f6b656e20696e666f726d6174696f6e2c4e657874546f6b656e4964010028200000000000000000043c20546f6b656e204964206e6f6e636524426c6f6174426f6e64010018400000000000000000000000000000000004b820426c6f617420426f6e642076616c7565207573656420647572696e67206163636f756e74206372656174696f6e3c4d696e53616c654475726174696f6e01001010000000000484204d696e696d756d206475726174696f6e206f66206120746f6b656e2073616c655c4d696e526576656e756553706c69744475726174696f6e010010100000000004a8204d696e696d756d20726576656e75652073706c6974206475726174696f6e20636f6e73747261696e74684d696e526576656e756553706c697454696d65546f5374617274010010100000000004bc204d696e696d756d20726576656e75652073706c69742074696d6520746f20737461727420636f6e73747261696e743c53616c65506c6174666f726d4665650100d5021000000000044d0120506c6174666f726d20666565202870657263656e74616765292063686172676564206f6e20746f70206f6620656163682073616c652070757263686173652028696e204a4f592920616e64206275726e656460416d6d446561637469766174696f6e5468726573686f6c640100d502100000000004f02050657263656e74616765207468726573686f6c6420666f7220646561637469766174696e672074686520616d6d2066756e6374696f6e616c69747930416d6d4275795478466565730100d50210b80b0000048c20414d4d20627579207472616e73616374696f6e206665652070657263656e7461676534416d6d53656c6c5478466565730100d50210b80b0000049020414d4d2073656c6c207472616e73616374696f6e206665652070657263656e74616765584d6178596561726c79506174726f6e616765526174650100f90210f0490200046c204d617820706174726f6e616765207261746520616c6c6f776564504d696e416d6d536c6f7065506172616d657465720100184040420f0000000000000000000000000004bc204d696e696d756d20736c6f706520706172616d657465727320616c6c6f77656420666f7220414d4d2063757276653050616c6c657446726f7a656e010098040004582043757272656e742066726f7a656e2073746174652e013d0601c102000169091c3c50726f706f73616c73456e67696e65013850726f706f73616c456e67696e65142450726f706f73616c7301010402106d090101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000460204d61702070726f706f73616c206279206974732069642e3450726f706f73616c436f756e74010010100000000004bc20436f756e74206f6620616c6c2070726f706f73616c7320746861742068617665206265656e20637265617465642e50446973706174636861626c6543616c6c436f646501010402107909040004b4204d61702070726f706f73616c2065786563757461626c6520636f64652062792070726f706f73616c2069642e4c41637469766550726f706f73616c436f756e740100101000000000046c20436f756e74206f66206163746976652070726f706f73616c732e6c566f7465457869737473427950726f706f73616c4279566f74657201010802027d093d03040104290120446f75626c65206d617020666f722070726576656e74696e67206475706c696361746520766f7465732e2053686f756c6420626520636c65616e65642061667465722075736167652e016506012903183c43616e63656c6c6174696f6e4665651840aa821bce260000000000000000000000047901204578706f72747320636f6e7374202d2074686520666565206973206170706c696564207768656e2063616e63656c207468652070726f706f73616c2e20412066656520776f756c6420626520736c617368656420286275726e6564292e3052656a656374696f6e4665651840528d8906c20000000000000000000000084501204578706f72747320636f6e7374202d202074686520666565206973206170706c696564207768656e207468652070726f706f73616c20676574732072656a65637465642e20412066656520776f756c645420626520736c617368656420286275726e6564292e385469746c654d61784c656e67746810102800000004d0204578706f72747320636f6e7374202d20206d617820616c6c6f7765642070726f706f73616c207469746c65206c656e6774682e504465736372697074696f6e4d61784c656e6774681010b80b000004e8204578706f72747320636f6e7374202d20206d617820616c6c6f7765642070726f706f73616c206465736372697074696f6e206c656e6774682e584d617841637469766550726f706f73616c4c696d697410101400000004ec204578706f72747320636f6e7374202d20206d61782073696d756c74616e656f7573206163746976652070726f706f73616c73206e756d6265722e505374616b696e6748616e646c65724c6f636b496429042070726f706f73616c04a4204578706f72747320636f6e7374202d207374616b696e672068616e646c6572206c6f636b2069642e0181091d4c50726f706f73616c7344697363757373696f6e014850726f706f73616c44697363757373696f6e10285468726561644279496401010402288509340000000000000000000000000004bc204d617020746872656164206964656e74696669657220746f20636f72726573706f6e64696e67207468726561642e2c546872656164436f756e7401002820000000000000000004b420436f756e74206f6620616c6c207468726561647320746861742068617665206265656e20637265617465642e50506f737454687265616449644279506f7374496401010802027d03910974000000000000000000000000000000000000000000000000000000000004c4204d61702074687265616420696420616e6420706f737420696420746f20636f72726573706f6e64696e6720706f73742e24506f7374436f756e7401002820000000000000000004ac20436f756e74206f6620616c6c20706f73747320746861742068617665206265656e20637265617465642e0169060141030c404d617857686974654c69737453697a65101014000000040901204578706f72747320636f6e7374202d20617574686f72206c6973742073697a65206c696d697420666f722074686520436c6f7365642064697363757373696f6e2e2c506f73744465706f7369741840d03bda6c00000000000000000000000004a0204578706f72747320636f6e7374202d2066656520666f72206372656174696e67206120706f737430506f73744c69666554696d65101058020000043d01204578706f72747320636f6e7374202d206d6178696d756d206e756d626572206f6620626c6f636b73206265666f7265206120706f73742063616e2062652065726173656420627920616e796f6e650195091e3850726f706f73616c73436f646578013850726f706f73616c73436f64657804505468726561644964427950726f706f73616c496401010402102820000000000000000004b0204d61702070726f706f73616c20696420746f206974732064697363757373696f6e20746872656164206964016d060149036c985365744d617856616c696461746f72436f756e7450726f706f73616c506172616d65746572737109b4c0890100401901006400000064000000640000006400000001a010a012d3eb050000000000000000000200000004dc204578706f7274732027536574204d61782056616c696461746f7220436f756e74272070726f706f73616c20706172616d65746572732e8052756e74696d655570677261646550726f706f73616c506172616d65746572737109b4c0890100401901006400000064000000640000006400000001a010a012d3eb050000000000000000000200000004bc204578706f727473202752756e74696d652055706772616465272070726f706f73616c20706172616d65746572732e605369676e616c50726f706f73616c506172616d65746572737109b4c0a80000b004000064000000640000006400000064000000011068761b959700000000000000000000010000000498204578706f72747320275369676e616c272070726f706f73616c20706172616d65746572732e8046756e64696e675265717565737450726f706f73616c506172616d65746572737109b4c0a80000b00400004200000042000000640000006400000001a41a130d8401000000000000000000000100000004bc204578706f727473202746756e64696e672052657175657374272070726f706f73616c20706172616d65746572732ebc437265617465576f726b696e6747726f75704c6561644f70656e696e6750726f706f73616c506172616d65746572737109b4c0a80000b00400004200000042000000640000006400000001680abf82280f0000000000000000000001000000040501204578706f727473202743726561746520576f726b696e672047726f7570204c656164204f70656e696e67272070726f706f73616c20706172616d65746572732ea446696c6c576f726b696e6747726f75704f70656e696e6750726f706f73616c506172616d65746572737109b4c0a80000b0040000420000004200000064000000640000000134855f419407000000000000000000000100000004fc204578706f727473202746696c6c20576f726b696e672047726f7570204c656164204f70656e696e67272070726f706f73616c20706172616d65746572732ea8557064617465576f726b696e6747726f757042756467657450726f706f73616c506172616d65746572737109b4c0a80000b0040000420000004200000064000000640000000134855f419407000000000000000000000100000004ec204578706f727473202755706461746520576f726b696e672047726f757020427564676574272070726f706f73616c20706172616d65746572732ebc4465637265617365576f726b696e6747726f75704c6561645374616b6550726f706f73616c506172616d65746572737109b4c0a80000b0040000640000006400000064000000640000000134855f4194070000000000000000000001000000040501204578706f7274732027446563726561736520576f726b696e672047726f7570204c656164205374616b65272070726f706f73616c20706172616d65746572732e9c536c617368576f726b696e6747726f75704c65616450726f706f73616c506172616d65746572737109b4c0a80000b0040000420000004200000064000000640000000134855f419407000000000000000000000100000004e0204578706f7274732027536c61736820576f726b696e672047726f7570204c656164272070726f706f73616c20706172616d65746572732eac536574576f726b696e6747726f75704c65616452657761726450726f706f73616c506172616d65746572737109b4c0a80000b0040000420000004200000064000000640000000134855f419407000000000000000000000100000004f4204578706f727473202753657420576f726b696e672047726f7570204c65616420526577617264272070726f706f73616c20706172616d65746572732eac5465726d696e617465576f726b696e6747726f75704c65616450726f706f73616c506172616d65746572737109b4c0a80000b0040000420000004200000064000000640000000134855f419407000000000000000000000100000004f0204578706f72747320275465726d696e61746520576f726b696e672047726f7570204c656164272070726f706f73616c20706172616d65746572732e8c416d656e64436f6e737469747574696f6e50726f706f73616c506172616d65746572737109b4081a01004038000050000000640000003c0000005000000001680abf82280f000000000000000000000200000004c8204578706f7274732027416d656e6420436f6e737469747574696f6e272070726f706f73616c20706172616d65746572732ebc43616e63656c576f726b696e6747726f75704c6561644f70656e696e6750726f706f73616c506172616d65746572737109b4c0a80000b0040000420000004200000064000000640000000134855f4194070000000000000000000001000000040501204578706f727473202743616e63656c20576f726b696e672047726f7570204c656164204f70656e696e67272070726f706f73616c20706172616d65746572732e905365744d656d62657273686970507269636550726f706f73616c506172616d65746572737109b4c0a80000b0040000420000004200000064000000640000000134855f419407000000000000000000000100000004d0204578706f7274732027536574204d656d62657273686970205072696365272070726f706f73616c20706172616d65746572732eac536574436f756e63696c427564676574496e6372656d656e7450726f706f73616c506172616d65746572737109b44019010040190100640000006400000064000000640000000120d0ec362a2f010000000000000000000200000004f0204578706f727473206053657420436f756e63696c2042756467657420496e6372656d656e74602070726f706f73616c20706172616d65746572732e90536574436f756e63696c6f7252657761726450726f706f73616c506172616d65746572737109b480700000c0a80000640000006400000064000000640000000120d0ec362a2f0100000000000000000002000000042101204578706f727473206053657420436f756e63696c6f72205265776172642050726f706f73616c20506172616d6574657273602070726f706f73616c20706172616d65746572732eb4536574496e697469616c496e7669746174696f6e42616c616e636550726f706f73616c506172616d65746572737109b480700000b00400004200000042000000640000006400000001d0147e05511e000000000000000000000100000004f8204578706f727473206053657420496e697469616c20496e7669746174696f6e2042616c616e6365602070726f706f73616c20706172616d65746572732e90536574496e7669746174696f6e436f756e7450726f706f73616c506172616d65746572737109b4c0a80000b0040000420000004200000064000000640000000134855f419407000000000000000000000100000000c85365744d656d626572736869704c656164496e7669746174696f6e51756f746150726f706f73616c506172616d65746572737109b4c0a80000b0040000420000004200000064000000640000000134855f41940700000000000000000000010000000080536574526566657272616c43757450726f706f73616c506172616d65746572737109b4c0a80000b0040000420000004200000064000000640000000134855f419407000000000000000000000100000000785665746f50726f706f73616c50726f706f73616c506172616d65746572737109b4403800000000000064000000640000006400000064000000011068761b959700000000000000000000010000000098557064617465476c6f62616c4e66744c696d697450726f706f73616c506172616d65746572737109b480700000b00400004200000042000000640000006400000001680abf82280f000000000000000000000100000000985570646174654368616e6e656c5061796f75747350726f706f73616c506172616d65746572737109b4c0890100403800004200000064000000640000006400000001680abf82280f0000000000000000000001000000009046756e64696e675265717565737450726f706f73616c4d6178546f74616c416d6f756e741840a010a012d3eb0500000000000000000004c4204d6178696d756d20746f74616c20616d6f756e7420696e2066756e64696e6720726571756573742070726f706f73616c8446756e64696e675265717565737450726f706f73616c4d61784163636f756e747310101400000004d0204d6178206e756d626572206f66206163636f756e7473207065722066756e64696e6720726571756573742070726f706f73616ca45365744d617856616c696461746f72436f756e7450726f706f73616c4d617856616c696461746f7273101064000000041501204d617820616c6c6f776564206e756d626572206f662076616c696461746f727320696e20736574206d61782076616c696461746f7220636f756e742070726f706f73616c9853657450616c6c6574466f7a656e53746174757350726f706f73616c506172616d65746572737109b4c0a8000000000000420000004200000064000000640000000134855f4194070000000000000000000001000000000199091f44466f72756d576f726b696e6747726f75700154496e7374616e636531576f726b696e6747726f757028344e6578744f70656e696e67496401002820000000000000000004ac204e657874206964656e7469666965722076616c756520666f72206e6577206a6f62206f70656e696e672e2c4f70656e696e674279496401010402289d09290101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000480204d617073206964656e74696669657220746f206a6f62206f70656e696e672e44416374697665576f726b6572436f756e740100101000000000046420436f756e74206f662061637469766520776f726b6572732e3c4170706c69636174696f6e427949640001040228a109040004c8204d617073206964656e74696669657220746f20776f726b6572206170706c69636174696f6e206f6e206f70656e696e672e444e6578744170706c69636174696f6e496401002820000000000000000004c8204e657874206964656e7469666965722076616c756520666f72206e657720776f726b6572206170706c69636174696f6e2e304e657874576f726b657249640100282000000000000000000488204e657874206964656e74696669657220666f722061206e657720776f726b65722e28576f726b6572427949640001040228a509040004a4204d617073206964656e74696669657220746f20636f72726573706f6e64696e6720776f726b65722e2c43757272656e744c656164000028040004502043757272656e742067726f7570206c6561642e18427564676574010018400000000000000000000000000000000004782042756467657420666f722074686520776f726b696e672067726f75702e38537461747573546578744861736801002c800000000000000000000000000000000000000000000000000000000000000000044820537461747573207465787420686173682e01710601710318504d6178576f726b65724e756d6265724c696d697410101e0000000838204578706f72747320636f6e73749c204d61782073696d756c74616e656f75732061637469766520776f726b6572206e756d6265722e5c4d696e556e7374616b696e67506572696f644c696d697410100065040004ac20446566696e6573206d696e20756e7374616b696e6720706572696f6420696e207468652067726f75702e5c4d696e696d756d4170706c69636174696f6e5374616b6518404835261a08030000000000000000000004d4204d696e696d756d207374616b6520726571756972656420666f72206170706c79696e6720696e746f20616e206f70656e696e672e484c65616465724f70656e696e675374616b651840680abf82280f00000000000000000000048c205374616b65206e656564656420746f2063726561746520616e206f70656e696e672e30526577617264506572696f6410104a38000004d420446566696e65732074686520706572696f6420657665727920776f726b65722067657473207061696420696e20626c6f636b732e505374616b696e6748616e646c65724c6f636b496429042077672d666f72756d0464205374616b696e672068616e646c6572206c6f636b2069642e01a909204c53746f72616765576f726b696e6747726f75700154496e7374616e636532576f726b696e6747726f757028344e6578744f70656e696e67496401002820000000000000000004ac204e657874206964656e7469666965722076616c756520666f72206e6577206a6f62206f70656e696e672e2c4f70656e696e674279496401010402289d09290101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000480204d617073206964656e74696669657220746f206a6f62206f70656e696e672e44416374697665576f726b6572436f756e740100101000000000046420436f756e74206f662061637469766520776f726b6572732e3c4170706c69636174696f6e427949640001040228a109040004c8204d617073206964656e74696669657220746f20776f726b6572206170706c69636174696f6e206f6e206f70656e696e672e444e6578744170706c69636174696f6e496401002820000000000000000004c8204e657874206964656e7469666965722076616c756520666f72206e657720776f726b6572206170706c69636174696f6e2e304e657874576f726b657249640100282000000000000000000488204e657874206964656e74696669657220666f722061206e657720776f726b65722e28576f726b6572427949640001040228a509040004a4204d617073206964656e74696669657220746f20636f72726573706f6e64696e6720776f726b65722e2c43757272656e744c656164000028040004502043757272656e742067726f7570206c6561642e18427564676574010018400000000000000000000000000000000004782042756467657420666f722074686520776f726b696e672067726f75702e38537461747573546578744861736801002c800000000000000000000000000000000000000000000000000000000000000000044820537461747573207465787420686173682e01750601950318504d6178576f726b65724e756d6265724c696d69741010320000000838204578706f72747320636f6e73749c204d61782073696d756c74616e656f75732061637469766520776f726b6572206e756d6265722e5c4d696e556e7374616b696e67506572696f644c696d697410100065040004ac20446566696e6573206d696e20756e7374616b696e6720706572696f6420696e207468652067726f75702e5c4d696e696d756d4170706c69636174696f6e5374616b6518404835261a08030000000000000000000004d4204d696e696d756d207374616b6520726571756972656420666f72206170706c79696e6720696e746f20616e206f70656e696e672e484c65616465724f70656e696e675374616b651840680abf82280f00000000000000000000048c205374616b65206e656564656420746f2063726561746520616e206f70656e696e672e30526577617264506572696f6410105438000004d420446566696e65732074686520706572696f6420657665727920776f726b65722067657473207061696420696e20626c6f636b732e505374616b696e6748616e646c65724c6f636b496429042077672d73746f72670464205374616b696e672068616e646c6572206c6f636b2069642e01ad09214c436f6e74656e74576f726b696e6747726f75700154496e7374616e636533576f726b696e6747726f757028344e6578744f70656e696e67496401002820000000000000000004ac204e657874206964656e7469666965722076616c756520666f72206e6577206a6f62206f70656e696e672e2c4f70656e696e674279496401010402289d09290101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000480204d617073206964656e74696669657220746f206a6f62206f70656e696e672e44416374697665576f726b6572436f756e740100101000000000046420436f756e74206f662061637469766520776f726b6572732e3c4170706c69636174696f6e427949640001040228a109040004c8204d617073206964656e74696669657220746f20776f726b6572206170706c69636174696f6e206f6e206f70656e696e672e444e6578744170706c69636174696f6e496401002820000000000000000004c8204e657874206964656e7469666965722076616c756520666f72206e657720776f726b6572206170706c69636174696f6e2e304e657874576f726b657249640100282000000000000000000488204e657874206964656e74696669657220666f722061206e657720776f726b65722e28576f726b6572427949640001040228a509040004a4204d617073206964656e74696669657220746f20636f72726573706f6e64696e6720776f726b65722e2c43757272656e744c656164000028040004502043757272656e742067726f7570206c6561642e18427564676574010018400000000000000000000000000000000004782042756467657420666f722074686520776f726b696e672067726f75702e38537461747573546578744861736801002c800000000000000000000000000000000000000000000000000000000000000000044820537461747573207465787420686173682e017906019d0318504d6178576f726b65724e756d6265724c696d697410101e0000000838204578706f72747320636f6e73749c204d61782073696d756c74616e656f75732061637469766520776f726b6572206e756d6265722e5c4d696e556e7374616b696e67506572696f644c696d697410100065040004ac20446566696e6573206d696e20756e7374616b696e6720706572696f6420696e207468652067726f75702e5c4d696e696d756d4170706c69636174696f6e5374616b6518404835261a08030000000000000000000004d4204d696e696d756d207374616b6520726571756972656420666f72206170706c79696e6720696e746f20616e206f70656e696e672e484c65616465724f70656e696e675374616b651840680abf82280f00000000000000000000048c205374616b65206e656564656420746f2063726561746520616e206f70656e696e672e30526577617264506572696f6410105e38000004d420446566696e65732074686520706572696f6420657665727920776f726b65722067657473207061696420696e20626c6f636b732e505374616b696e6748616e646c65724c6f636b496429042077672d636f6e74740464205374616b696e672068616e646c6572206c6f636b2069642e01b109226c4f7065726174696f6e73576f726b696e6747726f7570416c7068610154496e7374616e636534576f726b696e6747726f757028344e6578744f70656e696e67496401002820000000000000000004ac204e657874206964656e7469666965722076616c756520666f72206e6577206a6f62206f70656e696e672e2c4f70656e696e674279496401010402289d09290101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000480204d617073206964656e74696669657220746f206a6f62206f70656e696e672e44416374697665576f726b6572436f756e740100101000000000046420436f756e74206f662061637469766520776f726b6572732e3c4170706c69636174696f6e427949640001040228a109040004c8204d617073206964656e74696669657220746f20776f726b6572206170706c69636174696f6e206f6e206f70656e696e672e444e6578744170706c69636174696f6e496401002820000000000000000004c8204e657874206964656e7469666965722076616c756520666f72206e657720776f726b6572206170706c69636174696f6e2e304e657874576f726b657249640100282000000000000000000488204e657874206964656e74696669657220666f722061206e657720776f726b65722e28576f726b6572427949640001040228a509040004a4204d617073206964656e74696669657220746f20636f72726573706f6e64696e6720776f726b65722e2c43757272656e744c656164000028040004502043757272656e742067726f7570206c6561642e18427564676574010018400000000000000000000000000000000004782042756467657420666f722074686520776f726b696e672067726f75702e38537461747573546578744861736801002c800000000000000000000000000000000000000000000000000000000000000000044820537461747573207465787420686173682e017d0601a50318504d6178576f726b65724e756d6265724c696d697410101e0000000838204578706f72747320636f6e73749c204d61782073696d756c74616e656f75732061637469766520776f726b6572206e756d6265722e5c4d696e556e7374616b696e67506572696f644c696d697410100065040004ac20446566696e6573206d696e20756e7374616b696e6720706572696f6420696e207468652067726f75702e5c4d696e696d756d4170706c69636174696f6e5374616b6518404835261a08030000000000000000000004d4204d696e696d756d207374616b6520726571756972656420666f72206170706c79696e6720696e746f20616e206f70656e696e672e484c65616465724f70656e696e675374616b651840680abf82280f00000000000000000000048c205374616b65206e656564656420746f2063726561746520616e206f70656e696e672e30526577617264506572696f6410107c38000004d420446566696e65732074686520706572696f6420657665727920776f726b65722067657473207061696420696e20626c6f636b732e505374616b696e6748616e646c65724c6f636b496429042077672d6f706572610464205374616b696e672068616e646c6572206c6f636b2069642e01b509233c417070576f726b696e6747726f75700154496e7374616e636535576f726b696e6747726f757028344e6578744f70656e696e67496401002820000000000000000004ac204e657874206964656e7469666965722076616c756520666f72206e6577206a6f62206f70656e696e672e2c4f70656e696e674279496401010402289d09290101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000480204d617073206964656e74696669657220746f206a6f62206f70656e696e672e44416374697665576f726b6572436f756e740100101000000000046420436f756e74206f662061637469766520776f726b6572732e3c4170706c69636174696f6e427949640001040228a109040004c8204d617073206964656e74696669657220746f20776f726b6572206170706c69636174696f6e206f6e206f70656e696e672e444e6578744170706c69636174696f6e496401002820000000000000000004c8204e657874206964656e7469666965722076616c756520666f72206e657720776f726b6572206170706c69636174696f6e2e304e657874576f726b657249640100282000000000000000000488204e657874206964656e74696669657220666f722061206e657720776f726b65722e28576f726b6572427949640001040228a509040004a4204d617073206964656e74696669657220746f20636f72726573706f6e64696e6720776f726b65722e2c43757272656e744c656164000028040004502043757272656e742067726f7570206c6561642e18427564676574010018400000000000000000000000000000000004782042756467657420666f722074686520776f726b696e672067726f75702e38537461747573546578744861736801002c800000000000000000000000000000000000000000000000000000000000000000044820537461747573207465787420686173682e01810601ad0318504d6178576f726b65724e756d6265724c696d697410101e0000000838204578706f72747320636f6e73749c204d61782073696d756c74616e656f75732061637469766520776f726b6572206e756d6265722e5c4d696e556e7374616b696e67506572696f644c696d697410100065040004ac20446566696e6573206d696e20756e7374616b696e6720706572696f6420696e207468652067726f75702e5c4d696e696d756d4170706c69636174696f6e5374616b6518404835261a08030000000000000000000004d4204d696e696d756d207374616b6520726571756972656420666f72206170706c79696e6720696e746f20616e206f70656e696e672e484c65616465724f70656e696e675374616b651840680abf82280f00000000000000000000048c205374616b65206e656564656420746f2063726561746520616e206f70656e696e672e30526577617264506572696f6410107238000004d420446566696e65732074686520706572696f6420657665727920776f726b65722067657473207061696420696e20626c6f636b732e505374616b696e6748616e646c65724c6f636b496429042077672d6170706c690464205374616b696e672068616e646c6572206c6f636b2069642e01b90924584d656d62657273686970576f726b696e6747726f75700154496e7374616e636536576f726b696e6747726f757028344e6578744f70656e696e67496401002820000000000000000004ac204e657874206964656e7469666965722076616c756520666f72206e6577206a6f62206f70656e696e672e2c4f70656e696e674279496401010402289d09290101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000480204d617073206964656e74696669657220746f206a6f62206f70656e696e672e44416374697665576f726b6572436f756e740100101000000000046420436f756e74206f662061637469766520776f726b6572732e3c4170706c69636174696f6e427949640001040228a109040004c8204d617073206964656e74696669657220746f20776f726b6572206170706c69636174696f6e206f6e206f70656e696e672e444e6578744170706c69636174696f6e496401002820000000000000000004c8204e657874206964656e7469666965722076616c756520666f72206e657720776f726b6572206170706c69636174696f6e2e304e657874576f726b657249640100282000000000000000000488204e657874206964656e74696669657220666f722061206e657720776f726b65722e28576f726b6572427949640001040228a509040004a4204d617073206964656e74696669657220746f20636f72726573706f6e64696e6720776f726b65722e2c43757272656e744c656164000028040004502043757272656e742067726f7570206c6561642e18427564676574010018400000000000000000000000000000000004782042756467657420666f722074686520776f726b696e672067726f75702e38537461747573546578744861736801002c800000000000000000000000000000000000000000000000000000000000000000044820537461747573207465787420686173682e01850601b50318504d6178576f726b65724e756d6265724c696d697410101e0000000838204578706f72747320636f6e73749c204d61782073696d756c74616e656f75732061637469766520776f726b6572206e756d6265722e5c4d696e556e7374616b696e67506572696f644c696d697410100065040004ac20446566696e6573206d696e20756e7374616b696e6720706572696f6420696e207468652067726f75702e5c4d696e696d756d4170706c69636174696f6e5374616b6518404835261a08030000000000000000000004d4204d696e696d756d207374616b6520726571756972656420666f72206170706c79696e6720696e746f20616e206f70656e696e672e484c65616465724f70656e696e675374616b651840680abf82280f00000000000000000000048c205374616b65206e656564656420746f2063726561746520616e206f70656e696e672e30526577617264506572696f6410106838000004d420446566696e65732074686520706572696f6420657665727920776f726b65722067657473207061696420696e20626c6f636b732e505374616b696e6748616e646c65724c6f636b496429042077672d6d656d62720464205374616b696e672068616e646c6572206c6f636b2069642e01bd0925684f7065726174696f6e73576f726b696e6747726f7570426574610154496e7374616e636537576f726b696e6747726f757028344e6578744f70656e696e67496401002820000000000000000004ac204e657874206964656e7469666965722076616c756520666f72206e6577206a6f62206f70656e696e672e2c4f70656e696e674279496401010402289d09290101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000480204d617073206964656e74696669657220746f206a6f62206f70656e696e672e44416374697665576f726b6572436f756e740100101000000000046420436f756e74206f662061637469766520776f726b6572732e3c4170706c69636174696f6e427949640001040228a109040004c8204d617073206964656e74696669657220746f20776f726b6572206170706c69636174696f6e206f6e206f70656e696e672e444e6578744170706c69636174696f6e496401002820000000000000000004c8204e657874206964656e7469666965722076616c756520666f72206e657720776f726b6572206170706c69636174696f6e2e304e657874576f726b657249640100282000000000000000000488204e657874206964656e74696669657220666f722061206e657720776f726b65722e28576f726b6572427949640001040228a509040004a4204d617073206964656e74696669657220746f20636f72726573706f6e64696e6720776f726b65722e2c43757272656e744c656164000028040004502043757272656e742067726f7570206c6561642e18427564676574010018400000000000000000000000000000000004782042756467657420666f722074686520776f726b696e672067726f75702e38537461747573546578744861736801002c800000000000000000000000000000000000000000000000000000000000000000044820537461747573207465787420686173682e01890601bd0318504d6178576f726b65724e756d6265724c696d697410101e0000000838204578706f72747320636f6e73749c204d61782073696d756c74616e656f75732061637469766520776f726b6572206e756d6265722e5c4d696e556e7374616b696e67506572696f644c696d697410100065040004ac20446566696e6573206d696e20756e7374616b696e6720706572696f6420696e207468652067726f75702e5c4d696e696d756d4170706c69636174696f6e5374616b6518404835261a08030000000000000000000004d4204d696e696d756d207374616b6520726571756972656420666f72206170706c79696e6720696e746f20616e206f70656e696e672e484c65616465724f70656e696e675374616b651840680abf82280f00000000000000000000048c205374616b65206e656564656420746f2063726561746520616e206f70656e696e672e30526577617264506572696f6410108638000004d420446566696e65732074686520706572696f6420657665727920776f726b65722067657473207061696420696e20626c6f636b732e505374616b696e6748616e646c65724c6f636b496429042077672d6f706572620464205374616b696e672068616e646c6572206c6f636b2069642e01c109266c4f7065726174696f6e73576f726b696e6747726f757047616d6d610154496e7374616e636538576f726b696e6747726f757028344e6578744f70656e696e67496401002820000000000000000004ac204e657874206964656e7469666965722076616c756520666f72206e6577206a6f62206f70656e696e672e2c4f70656e696e674279496401010402289d09290101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000480204d617073206964656e74696669657220746f206a6f62206f70656e696e672e44416374697665576f726b6572436f756e740100101000000000046420436f756e74206f662061637469766520776f726b6572732e3c4170706c69636174696f6e427949640001040228a109040004c8204d617073206964656e74696669657220746f20776f726b6572206170706c69636174696f6e206f6e206f70656e696e672e444e6578744170706c69636174696f6e496401002820000000000000000004c8204e657874206964656e7469666965722076616c756520666f72206e657720776f726b6572206170706c69636174696f6e2e304e657874576f726b657249640100282000000000000000000488204e657874206964656e74696669657220666f722061206e657720776f726b65722e28576f726b6572427949640001040228a509040004a4204d617073206964656e74696669657220746f20636f72726573706f6e64696e6720776f726b65722e2c43757272656e744c656164000028040004502043757272656e742067726f7570206c6561642e18427564676574010018400000000000000000000000000000000004782042756467657420666f722074686520776f726b696e672067726f75702e38537461747573546578744861736801002c800000000000000000000000000000000000000000000000000000000000000000044820537461747573207465787420686173682e018d0601c50318504d6178576f726b65724e756d6265724c696d697410101e0000000838204578706f72747320636f6e73749c204d61782073696d756c74616e656f75732061637469766520776f726b6572206e756d6265722e5c4d696e556e7374616b696e67506572696f644c696d697410100065040004ac20446566696e6573206d696e20756e7374616b696e6720706572696f6420696e207468652067726f75702e5c4d696e696d756d4170706c69636174696f6e5374616b6518404835261a08030000000000000000000004d4204d696e696d756d207374616b6520726571756972656420666f72206170706c79696e6720696e746f20616e206f70656e696e672e484c65616465724f70656e696e675374616b651840680abf82280f00000000000000000000048c205374616b65206e656564656420746f2063726561746520616e206f70656e696e672e30526577617264506572696f6410109038000004d420446566696e65732074686520706572696f6420657665727920776f726b65722067657473207061696420696e20626c6f636b732e505374616b696e6748616e646c65724c6f636b496429042077672d6f706572670464205374616b696e672068616e646c6572206c6f636b2069642e01c5092760446973747269627574696f6e576f726b696e6747726f75700154496e7374616e636539576f726b696e6747726f757028344e6578744f70656e696e67496401002820000000000000000004ac204e657874206964656e7469666965722076616c756520666f72206e6577206a6f62206f70656e696e672e2c4f70656e696e674279496401010402289d09290101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000480204d617073206964656e74696669657220746f206a6f62206f70656e696e672e44416374697665576f726b6572436f756e740100101000000000046420436f756e74206f662061637469766520776f726b6572732e3c4170706c69636174696f6e427949640001040228a109040004c8204d617073206964656e74696669657220746f20776f726b6572206170706c69636174696f6e206f6e206f70656e696e672e444e6578744170706c69636174696f6e496401002820000000000000000004c8204e657874206964656e7469666965722076616c756520666f72206e657720776f726b6572206170706c69636174696f6e2e304e657874576f726b657249640100282000000000000000000488204e657874206964656e74696669657220666f722061206e657720776f726b65722e28576f726b6572427949640001040228a509040004a4204d617073206964656e74696669657220746f20636f72726573706f6e64696e6720776f726b65722e2c43757272656e744c656164000028040004502043757272656e742067726f7570206c6561642e18427564676574010018400000000000000000000000000000000004782042756467657420666f722074686520776f726b696e672067726f75702e38537461747573546578744861736801002c800000000000000000000000000000000000000000000000000000000000000000044820537461747573207465787420686173682e01910601cd0318504d6178576f726b65724e756d6265724c696d69741010320000000838204578706f72747320636f6e73749c204d61782073696d756c74616e656f75732061637469766520776f726b6572206e756d6265722e5c4d696e556e7374616b696e67506572696f644c696d697410100065040004ac20446566696e6573206d696e20756e7374616b696e6720706572696f6420696e207468652067726f75702e5c4d696e696d756d4170706c69636174696f6e5374616b6518404835261a08030000000000000000000004d4204d696e696d756d207374616b6520726571756972656420666f72206170706c79696e6720696e746f20616e206f70656e696e672e484c65616465724f70656e696e675374616b651840680abf82280f00000000000000000000048c205374616b65206e656564656420746f2063726561746520616e206f70656e696e672e30526577617264506572696f6410109a38000004d420446566696e65732074686520706572696f6420657665727920776f726b65722067657473207061696420696e20626c6f636b732e505374616b696e6748616e646c65724c6f636b496429042077672d64697374720464205374616b696e672068616e646c6572206c6f636b2069642e01c90928cd09042048436865636b4e6f6e5a65726f53656e646572e1097c40436865636b5370656356657273696f6ee5091038436865636b547856657273696f6ee9091030436865636b47656e65736973ed092c38436865636b4d6f7274616c697479f1092c28436865636b4e6f6e6365f9097c2c436865636b576569676874fd097c604368617267655472616e73616374696f6e5061796d656e74010a7c050a","id":"1"} \ No newline at end of file diff --git a/query-node/codegen/package.json b/query-node/codegen/package.json index 1422c75a1a..35c015a327 100644 --- a/query-node/codegen/package.json +++ b/query-node/codegen/package.json @@ -10,7 +10,7 @@ "bn.js": "^5.2.0" }, "dependencies": { - "@joystream/hydra-cli": "5.0.0-alpha.4", - "@joystream/hydra-typegen": "5.0.0-alpha.4" + "@joystream/hydra-cli": "5.0.0-alpha.8", + "@joystream/hydra-typegen": "5.0.0-alpha.8" } } diff --git a/query-node/codegen/yarn.lock b/query-node/codegen/yarn.lock index 4c61b60f32..a78c0a65d2 100644 --- a/query-node/codegen/yarn.lock +++ b/query-node/codegen/yarn.lock @@ -2,14 +2,6 @@ # yarn lockfile v1 -"@ampproject/remapping@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.2.0.tgz#56c133824780de3174aed5ab6834f3026790154d" - integrity sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w== - dependencies: - "@jridgewell/gen-mapping" "^0.1.0" - "@jridgewell/trace-mapping" "^0.3.9" - "@apollo/protobufjs@1.2.2": version "1.2.2" resolved "https://registry.yarnpkg.com/@apollo/protobufjs/-/protobufjs-1.2.2.tgz#4bd92cd7701ccaef6d517cdb75af2755f049f87c" @@ -125,39 +117,6 @@ dependencies: "@babel/highlight" "^7.16.0" -"@babel/code-frame@^7.18.6", "@babel/code-frame@^7.21.4": - version "7.21.4" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.21.4.tgz#d0fa9e4413aca81f2b23b9442797bda1826edb39" - integrity sha512-LYvhNKfwWSPpocw8GI7gpK2nq3HSDuEPC/uSYaALSJu9xjsalaaYFOq0Pwt5KmVqwEbZlDu81aLXwBOmD/Fv9g== - dependencies: - "@babel/highlight" "^7.18.6" - -"@babel/compat-data@^7.21.4": - version "7.21.4" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.21.4.tgz#457ffe647c480dff59c2be092fc3acf71195c87f" - integrity sha512-/DYyDpeCfaVinT40FPGdkkb+lYSKvsVuMjDAG7jPOWWiM1ibOaB9CXJAlc4d1QpP/U2q2P9jbrSlClKSErd55g== - -"@babel/core@^7.18.5": - version "7.21.4" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.21.4.tgz#c6dc73242507b8e2a27fd13a9c1814f9fa34a659" - integrity sha512-qt/YV149Jman/6AfmlxJ04LMIu8bMoyl3RB91yTFrxQmgbrSvQMy7cI8Q62FHx1t8wJ8B5fu0UDoLwHAhUo1QA== - dependencies: - "@ampproject/remapping" "^2.2.0" - "@babel/code-frame" "^7.21.4" - "@babel/generator" "^7.21.4" - "@babel/helper-compilation-targets" "^7.21.4" - "@babel/helper-module-transforms" "^7.21.2" - "@babel/helpers" "^7.21.0" - "@babel/parser" "^7.21.4" - "@babel/template" "^7.20.7" - "@babel/traverse" "^7.21.4" - "@babel/types" "^7.21.4" - convert-source-map "^1.7.0" - debug "^4.1.0" - gensync "^1.0.0-beta.2" - json5 "^2.2.2" - semver "^6.3.0" - "@babel/generator@^7.16.0": version "7.16.0" resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.16.0.tgz#d40f3d1d5075e62d3500bccb67f3daa8a95265b2" @@ -167,16 +126,6 @@ jsesc "^2.5.1" source-map "^0.5.0" -"@babel/generator@^7.21.4": - version "7.21.4" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.21.4.tgz#64a94b7448989f421f919d5239ef553b37bb26bc" - integrity sha512-NieM3pVIYW2SwGzKoqfPrQsf4xGs9M9AIG3ThppsSRmO+m7eQhmI6amajKMUeIO37wFfsvnvcxQFx6x6iqxDnA== - dependencies: - "@babel/types" "^7.21.4" - "@jridgewell/gen-mapping" "^0.3.2" - "@jridgewell/trace-mapping" "^0.3.17" - jsesc "^2.5.1" - "@babel/helper-annotate-as-pure@^7.15.4": version "7.16.0" resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.0.tgz#9a1f0ebcda53d9a2d00108c4ceace6a5d5f1f08d" @@ -184,22 +133,6 @@ dependencies: "@babel/types" "^7.16.0" -"@babel/helper-compilation-targets@^7.21.4": - version "7.21.4" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.21.4.tgz#770cd1ce0889097ceacb99418ee6934ef0572656" - integrity sha512-Fa0tTuOXZ1iL8IeDFUWCzjZcn+sJGd9RZdH9esYVjEejGmzf+FFYQpMi/kZUk2kPy/q1H3/GPw7np8qar/stfg== - dependencies: - "@babel/compat-data" "^7.21.4" - "@babel/helper-validator-option" "^7.21.0" - browserslist "^4.21.3" - lru-cache "^5.1.1" - semver "^6.3.0" - -"@babel/helper-environment-visitor@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz#0c0cee9b35d2ca190478756865bb3528422f51be" - integrity sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg== - "@babel/helper-function-name@^7.16.0": version "7.16.0" resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.16.0.tgz#b7dd0797d00bbfee4f07e9c4ea5b0e30c8bb1481" @@ -209,14 +142,6 @@ "@babel/template" "^7.16.0" "@babel/types" "^7.16.0" -"@babel/helper-function-name@^7.21.0": - version "7.21.0" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.21.0.tgz#d552829b10ea9f120969304023cd0645fa00b1b4" - integrity sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg== - dependencies: - "@babel/template" "^7.20.7" - "@babel/types" "^7.21.0" - "@babel/helper-get-function-arity@^7.16.0": version "7.16.0" resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.0.tgz#0088c7486b29a9cb5d948b1a1de46db66e089cfa" @@ -231,13 +156,6 @@ dependencies: "@babel/types" "^7.16.0" -"@babel/helper-hoist-variables@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz#d4d2c8fb4baeaa5c68b99cc8245c56554f926678" - integrity sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q== - dependencies: - "@babel/types" "^7.18.6" - "@babel/helper-module-imports@^7.0.0", "@babel/helper-module-imports@^7.15.4": version "7.16.0" resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.16.0.tgz#90538e60b672ecf1b448f5f4f5433d37e79a3ec3" @@ -245,34 +163,6 @@ dependencies: "@babel/types" "^7.16.0" -"@babel/helper-module-imports@^7.18.6": - version "7.21.4" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.21.4.tgz#ac88b2f76093637489e718a90cec6cf8a9b029af" - integrity sha512-orajc5T2PsRYUN3ZryCEFeMDYwyw09c/pZeaQEZPH0MpKzSvn3e0uXsDBu3k03VI+9DBiRo+l22BfKTpKwa/Wg== - dependencies: - "@babel/types" "^7.21.4" - -"@babel/helper-module-transforms@^7.21.2": - version "7.21.2" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.21.2.tgz#160caafa4978ac8c00ac66636cb0fa37b024e2d2" - integrity sha512-79yj2AR4U/Oqq/WOV7Lx6hUjau1Zfo4cI+JLAVYeMV5XIlbOhmjEk5ulbTc9fMpmlojzZHkUUxAiK+UKn+hNQQ== - dependencies: - "@babel/helper-environment-visitor" "^7.18.9" - "@babel/helper-module-imports" "^7.18.6" - "@babel/helper-simple-access" "^7.20.2" - "@babel/helper-split-export-declaration" "^7.18.6" - "@babel/helper-validator-identifier" "^7.19.1" - "@babel/template" "^7.20.7" - "@babel/traverse" "^7.21.2" - "@babel/types" "^7.21.2" - -"@babel/helper-simple-access@^7.20.2": - version "7.20.2" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz#0ab452687fe0c2cfb1e2b9e0015de07fc2d62dd9" - integrity sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA== - dependencies: - "@babel/types" "^7.20.2" - "@babel/helper-split-export-declaration@^7.16.0": version "7.16.0" resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.0.tgz#29672f43663e936df370aaeb22beddb3baec7438" @@ -280,42 +170,11 @@ dependencies: "@babel/types" "^7.16.0" -"@babel/helper-split-export-declaration@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz#7367949bc75b20c6d5a5d4a97bba2824ae8ef075" - integrity sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA== - dependencies: - "@babel/types" "^7.18.6" - -"@babel/helper-string-parser@^7.19.4": - version "7.19.4" - resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz#38d3acb654b4701a9b77fb0615a96f775c3a9e63" - integrity sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw== - "@babel/helper-validator-identifier@^7.14.5", "@babel/helper-validator-identifier@^7.15.7": version "7.15.7" resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz#220df993bfe904a4a6b02ab4f3385a5ebf6e2389" integrity sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w== -"@babel/helper-validator-identifier@^7.18.6", "@babel/helper-validator-identifier@^7.19.1": - version "7.19.1" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz#7eea834cf32901ffdc1a7ee555e2f9c27e249ca2" - integrity sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w== - -"@babel/helper-validator-option@^7.21.0": - version "7.21.0" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.21.0.tgz#8224c7e13ace4bafdc4004da2cf064ef42673180" - integrity sha512-rmL/B8/f0mKS2baE9ZpyTcTavvEuWhTTW8amjzXNvYG4AwBsqTLikfXsEofsJEfKHf+HQVQbFOHy6o+4cnC/fQ== - -"@babel/helpers@^7.21.0": - version "7.21.0" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.21.0.tgz#9dd184fb5599862037917cdc9eecb84577dc4e7e" - integrity sha512-XXve0CBtOW0pd7MRzzmoyuSj0e3SEzj8pgyFxnTT1NJZL38BD1MK7yYrm8yefRPIDvNNe14xR4FdbHwpInD4rA== - dependencies: - "@babel/template" "^7.20.7" - "@babel/traverse" "^7.21.0" - "@babel/types" "^7.21.0" - "@babel/highlight@^7.14.5": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.14.5.tgz#6861a52f03966405001f6aa534a01a24d99e8cd9" @@ -334,36 +193,11 @@ chalk "^2.0.0" js-tokens "^4.0.0" -"@babel/highlight@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.18.6.tgz#81158601e93e2563795adcbfbdf5d64be3f2ecdf" - integrity sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g== - dependencies: - "@babel/helper-validator-identifier" "^7.18.6" - chalk "^2.0.0" - js-tokens "^4.0.0" - "@babel/parser@^7.16.0": version "7.16.2" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.16.2.tgz#3723cd5c8d8773eef96ce57ea1d9b7faaccd12ac" integrity sha512-RUVpT0G2h6rOZwqLDTrKk7ksNv7YpAilTnYe1/Q+eDjxEceRMKVWbCsX7t8h6C1qCFi/1Y8WZjcEPBAFG27GPw== -"@babel/parser@^7.20.7", "@babel/parser@^7.21.4": - version "7.21.4" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.21.4.tgz#94003fdfc520bbe2875d4ae557b43ddb6d880f17" - integrity sha512-alVJj7k7zIxqBZ7BTRhz0IqJFxW1VJbm6N8JbcYhQ186df9ZBPbZBmWSqAMXwHGsCJdYks7z/voa3ibiS5bCIw== - -"@babel/register@^7.17.7": - version "7.21.0" - resolved "https://registry.yarnpkg.com/@babel/register/-/register-7.21.0.tgz#c97bf56c2472e063774f31d344c592ebdcefa132" - integrity sha512-9nKsPmYDi5DidAqJaQooxIhsLJiNMkGr8ypQ8Uic7cIox7UCDsM7HuUGxdGT7mSDTYbqzIdsOWzfBton/YJrMw== - dependencies: - clone-deep "^4.0.1" - find-cache-dir "^2.0.0" - make-dir "^2.1.0" - pirates "^4.0.5" - source-map-support "^0.5.16" - "@babel/runtime@^7.1.2", "@babel/runtime@^7.15.4", "@babel/runtime@^7.6.3", "@babel/runtime@^7.7.2", "@babel/runtime@^7.8.7", "@babel/runtime@^7.9.2": version "7.16.0" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.16.0.tgz#e27b977f2e2088ba24748bf99b5e1dece64e4f0b" @@ -371,13 +205,6 @@ dependencies: regenerator-runtime "^0.13.4" -"@babel/runtime@^7.18.3": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.18.6.tgz#6a1ef59f838debd670421f8c7f2cbb8da9751580" - integrity sha512-t9wi7/AW6XtKahAe20Yw0/mMljKq0B1r2fPdvaAdV/KPDZewFXdaaa6K7lxmZBZ8FBNpCiAT6iHPmd6QO9bKfQ== - dependencies: - regenerator-runtime "^0.13.4" - "@babel/template@^7.16.0": version "7.16.0" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.16.0.tgz#d16a35ebf4cd74e202083356fab21dd89363ddd6" @@ -387,15 +214,6 @@ "@babel/parser" "^7.16.0" "@babel/types" "^7.16.0" -"@babel/template@^7.20.7": - version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.20.7.tgz#a15090c2839a83b02aa996c0b4994005841fd5a8" - integrity sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw== - dependencies: - "@babel/code-frame" "^7.18.6" - "@babel/parser" "^7.20.7" - "@babel/types" "^7.20.7" - "@babel/traverse@^7.0.0": version "7.16.0" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.16.0.tgz#965df6c6bfc0a958c1e739284d3c9fa4a6e3c45b" @@ -411,22 +229,6 @@ debug "^4.1.0" globals "^11.1.0" -"@babel/traverse@^7.21.0", "@babel/traverse@^7.21.2", "@babel/traverse@^7.21.4": - version "7.21.4" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.21.4.tgz#a836aca7b116634e97a6ed99976236b3282c9d36" - integrity sha512-eyKrRHKdyZxqDm+fV1iqL9UAHMoIg0nDaGqfIOd8rKH17m5snv7Gn4qgjBoFfLz9APvjFU/ICT00NVCv1Epp8Q== - dependencies: - "@babel/code-frame" "^7.21.4" - "@babel/generator" "^7.21.4" - "@babel/helper-environment-visitor" "^7.18.9" - "@babel/helper-function-name" "^7.21.0" - "@babel/helper-hoist-variables" "^7.18.6" - "@babel/helper-split-export-declaration" "^7.18.6" - "@babel/parser" "^7.21.4" - "@babel/types" "^7.21.4" - debug "^4.1.0" - globals "^11.1.0" - "@babel/types@^7.16.0": version "7.16.0" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.16.0.tgz#db3b313804f96aadd0b776c4823e127ad67289ba" @@ -435,15 +237,6 @@ "@babel/helper-validator-identifier" "^7.15.7" to-fast-properties "^2.0.0" -"@babel/types@^7.18.6", "@babel/types@^7.20.2", "@babel/types@^7.20.7", "@babel/types@^7.21.0", "@babel/types@^7.21.2", "@babel/types@^7.21.4": - version "7.21.4" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.21.4.tgz#2d5d6bb7908699b3b416409ffd3b5daa25b030d4" - integrity sha512-rU2oY501qDxE8Pyo7i/Orqma4ziCOrby0/9mvbDUGEfvZjb279Nk9k19e2fiCxHbRRpY2ZyrgW1eq22mvmOIzA== - dependencies: - "@babel/helper-string-parser" "^7.19.4" - "@babel/helper-validator-identifier" "^7.19.1" - to-fast-properties "^2.0.0" - "@emotion/is-prop-valid@^0.8.1": version "0.8.8" resolved "https://registry.yarnpkg.com/@emotion/is-prop-valid/-/is-prop-valid-0.8.8.tgz#db28b1c4368a259b60a97311d6a952d4fd01ac1a" @@ -506,10 +299,10 @@ resolved "https://registry.yarnpkg.com/@josephg/resolvable/-/resolvable-1.0.1.tgz#69bc4db754d79e1a2f17a650d3466e038d94a5eb" integrity sha512-CtzORUwWTTOTqfVtHaKRJ0I1kNQd1bpn3sUh8I3nJDVY+5/M/Oe1DnEWzPQvqq/xPIIkzzzIP7mfCoAjFRvDhg== -"@joystream/hydra-cli@5.0.0-alpha.4": - version "5.0.0-alpha.4" - resolved "https://registry.yarnpkg.com/@joystream/hydra-cli/-/hydra-cli-5.0.0-alpha.4.tgz#becc91b15ddb80cd4e31da006be59ab61dd4bfd1" - integrity sha512-mCG1WjPypMR9UTd6nbxzYuMIuxzFKB3X6FdHUK1orw1hmOxvgIjNJK7pdzmcwjhffBWnxUWwONXlSk0AbEp/1A== +"@joystream/hydra-cli@5.0.0-alpha.8": + version "5.0.0-alpha.8" + resolved "https://registry.yarnpkg.com/@joystream/hydra-cli/-/hydra-cli-5.0.0-alpha.8.tgz#9a2ae55e531e4c5cf3567134bab19423290383a8" + integrity sha512-6LUeC8kmVInn+3MsMQ7VZ7QCZ6UpZPg09kR6N/eQ9O7e5n8y3DmBtCM7RwoEwtV443cg7NGG3rqLT3qFpj73Kw== dependencies: "@inquirer/input" "^0.0.13-alpha.0" "@inquirer/password" "^0.0.12-alpha.0" @@ -542,16 +335,16 @@ pluralize "^8.0.0" tslib "1.11.2" -"@joystream/hydra-typegen@5.0.0-alpha.4": - version "5.0.0-alpha.4" - resolved "https://registry.yarnpkg.com/@joystream/hydra-typegen/-/hydra-typegen-5.0.0-alpha.4.tgz#f87457f243cbd05245250c8e4f45a67d2be7228c" - integrity sha512-IMtpWyrtlrwrDSkZSjJOj8vx5gcFh92JXBiKLNMkRJuGxvxmNWnIhbMImve1pnCEhHsNKppxEMG/u7IWHPHqEg== +"@joystream/hydra-typegen@5.0.0-alpha.8": + version "5.0.0-alpha.8" + resolved "https://registry.yarnpkg.com/@joystream/hydra-typegen/-/hydra-typegen-5.0.0-alpha.8.tgz#04600d68298ff2bb242bbe1a3e7453aeb3bbe710" + integrity sha512-145K0cpnSXb6vd7Zv78EIhE5XZfKIr7caRtPYDxdbWVyWL1qmAAQLRwck17DUSWoCeZLx+yNbYzkuH/3d/Of8Q== dependencies: "@oclif/command" "^1.8.0" "@oclif/config" "^1" "@oclif/errors" "^1.3.3" - "@polkadot/api" "8.9.1" - "@polkadot/typegen" "8.9.1" + "@polkadot/api" "10.1.4" + "@polkadot/typegen" "10.1.4" debug "^4.3.1" figlet "^1.5.2" handlebars "^4.7.6" @@ -622,55 +415,15 @@ typeorm-typedi-extensions "^0.4.1" typescript "^4.4" -"@jridgewell/gen-mapping@^0.1.0": - version "0.1.1" - resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz#e5d2e450306a9491e3bd77e323e38d7aff315996" - integrity sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w== - dependencies: - "@jridgewell/set-array" "^1.0.0" - "@jridgewell/sourcemap-codec" "^1.4.10" - -"@jridgewell/gen-mapping@^0.3.2": - version "0.3.2" - resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz#c1aedc61e853f2bb9f5dfe6d4442d3b565b253b9" - integrity sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A== - dependencies: - "@jridgewell/set-array" "^1.0.1" - "@jridgewell/sourcemap-codec" "^1.4.10" - "@jridgewell/trace-mapping" "^0.3.9" - -"@jridgewell/resolve-uri@3.1.0": - version "3.1.0" - resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz#2203b118c157721addfe69d47b70465463066d78" - integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w== - -"@jridgewell/set-array@^1.0.0", "@jridgewell/set-array@^1.0.1": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" - integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== - -"@jridgewell/sourcemap-codec@1.4.14", "@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== - -"@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.9": - version "0.3.17" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz#793041277af9073b0951a7fe0f0d8c4c98c36985" - integrity sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g== - dependencies: - "@jridgewell/resolve-uri" "3.1.0" - "@jridgewell/sourcemap-codec" "1.4.14" - -"@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.3.0": + version "1.3.0" + resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.3.0.tgz#085fd70f6d7d9d109671090ccae1d3bec62554a1" + integrity sha512-ilHEACi9DwqJB0pw7kv+Apvh50jiiSyR/cQ3y4W7lOR5mhvn/50FLUfsnfJz0BDZtl/RR16kXvptiv6q1msYZg== -"@noble/secp256k1@1.6.0": - version "1.6.0" - resolved "https://registry.yarnpkg.com/@noble/secp256k1/-/secp256k1-1.6.0.tgz#602afbbfcfb7e169210469b697365ef740d7e930" - integrity sha512-DWSsg8zMHOYMYBqIQi96BQuthZrp98LCeMNcUOaffCIVYQ5yxDbNikLF+H7jEnmNNmXbtVic46iCuVWzar+MgA== +"@noble/secp256k1@1.7.1": + 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" @@ -808,353 +561,351 @@ resolved "https://registry.yarnpkg.com/@oclif/screen/-/screen-1.0.4.tgz#b740f68609dfae8aa71c3a6cab15d816407ba493" integrity sha512-60CHpq+eqnTxLZQ4PGHYNwUX572hgpMHGPtTWMjdTMsAvlm69lZV/4ly6O3sAYkomo4NggGcomrDpBe34rxUqw== -"@polkadot/api-augment@8.9.1": - version "8.9.1" - resolved "https://registry.yarnpkg.com/@polkadot/api-augment/-/api-augment-8.9.1.tgz#25b0997ccf3d1df4641123e0d9ec29e8fb03ef62" - integrity sha512-yobYURNgoZcZD3QJmE34n3ZcEEUtsiivquckxjJMXnHJv3zahMyJh75tCNAXjzWn+e+SqKTVlgCpLXYlC1HJPQ== - dependencies: - "@babel/runtime" "^7.18.3" - "@polkadot/api-base" "8.9.1" - "@polkadot/rpc-augment" "8.9.1" - "@polkadot/types" "8.9.1" - "@polkadot/types-augment" "8.9.1" - "@polkadot/types-codec" "8.9.1" - "@polkadot/util" "^9.5.1" - -"@polkadot/api-base@8.9.1": - version "8.9.1" - resolved "https://registry.yarnpkg.com/@polkadot/api-base/-/api-base-8.9.1.tgz#e0013bbb8e72678a4eecdfb880854b2e30c840d5" - integrity sha512-2OpS9ArZSuUu9vg2Y5DdK7r1iB1Bjx9e+6qerPGry8um+jI+EsHJESylw5OUrR2DxvtW3Ilrk4YvYpQPa9OB4w== - dependencies: - "@babel/runtime" "^7.18.3" - "@polkadot/rpc-core" "8.9.1" - "@polkadot/types" "8.9.1" - "@polkadot/util" "^9.5.1" - rxjs "^7.5.5" - -"@polkadot/api-derive@8.9.1": - version "8.9.1" - resolved "https://registry.yarnpkg.com/@polkadot/api-derive/-/api-derive-8.9.1.tgz#d701c98db27b86dceac6d3e737f0cab4f9731045" - integrity sha512-zOuNK1tApg3iEC5N4yiOTaMKUykk4tkNU1htcnotOxflgdhYUi22l0JuCrEtrnG6TE2ZH8z1VQA/jK0MbLfC3A== - dependencies: - "@babel/runtime" "^7.18.3" - "@polkadot/api" "8.9.1" - "@polkadot/api-augment" "8.9.1" - "@polkadot/api-base" "8.9.1" - "@polkadot/rpc-core" "8.9.1" - "@polkadot/types" "8.9.1" - "@polkadot/types-codec" "8.9.1" - "@polkadot/util" "^9.5.1" - "@polkadot/util-crypto" "^9.5.1" - rxjs "^7.5.5" - -"@polkadot/api@8.9.1": - version "8.9.1" - resolved "https://registry.yarnpkg.com/@polkadot/api/-/api-8.9.1.tgz#c35c5d583845a5d67edfa8c3579bad143f65bcd6" - integrity sha512-UwQ5hWPHruqnBO2hriaPhGaOwaWZx9MVECWFJzVs0ZuhKDge9jyBp+JXud/Ly/+8VbeokYUB0DSZG/gTAO5+vg== - dependencies: - "@babel/runtime" "^7.18.3" - "@polkadot/api-augment" "8.9.1" - "@polkadot/api-base" "8.9.1" - "@polkadot/api-derive" "8.9.1" - "@polkadot/keyring" "^9.5.1" - "@polkadot/rpc-augment" "8.9.1" - "@polkadot/rpc-core" "8.9.1" - "@polkadot/rpc-provider" "8.9.1" - "@polkadot/types" "8.9.1" - "@polkadot/types-augment" "8.9.1" - "@polkadot/types-codec" "8.9.1" - "@polkadot/types-create" "8.9.1" - "@polkadot/types-known" "8.9.1" - "@polkadot/util" "^9.5.1" - "@polkadot/util-crypto" "^9.5.1" - eventemitter3 "^4.0.7" - rxjs "^7.5.5" - -"@polkadot/keyring@^9.5.1": - version "9.6.2" - resolved "https://registry.yarnpkg.com/@polkadot/keyring/-/keyring-9.6.2.tgz#8f413b81ed293c7cb5938a85259e4f6381581749" - integrity sha512-xcFx0m01G4jcYqEPJQQqF7Dn62x180G4TXaBR4iOTrjvNwmxx4PgIXN2DodHezb1dJLNSE0lu89OasID/dNNxA== - dependencies: - "@babel/runtime" "^7.18.3" - "@polkadot/util" "9.6.2" - "@polkadot/util-crypto" "9.6.2" - -"@polkadot/networks@9.6.2", "@polkadot/networks@^9.5.1": - version "9.6.2" - resolved "https://registry.yarnpkg.com/@polkadot/networks/-/networks-9.6.2.tgz#0011683682d74d265005b3169023384cd65fb89b" - integrity sha512-zTQkZGRSvgrj/XH1vUz1y1kZOhxT9qUn3T1BfMclbSBdyb+ugI+KLZhYffzfbl1YkQPyrR4MTpueHK40SjGaHg== - dependencies: - "@babel/runtime" "^7.18.3" - "@polkadot/util" "9.6.2" - "@substrate/ss58-registry" "^1.22.0" - -"@polkadot/rpc-augment@8.9.1": - version "8.9.1" - resolved "https://registry.yarnpkg.com/@polkadot/rpc-augment/-/rpc-augment-8.9.1.tgz#644061c68a9a2abe7f3574ab74b10652acae5707" - integrity sha512-6TtZPVjvjcPy3w4lmcNu3MTU1h2YLkZBVNwUZFnZPhALc9qBy9ZcvkMODLPfD+mj+i8Fcfn4b7Ypj+sNqXFxUQ== - dependencies: - "@babel/runtime" "^7.18.3" - "@polkadot/rpc-core" "8.9.1" - "@polkadot/types" "8.9.1" - "@polkadot/types-codec" "8.9.1" - "@polkadot/util" "^9.5.1" - -"@polkadot/rpc-core@8.9.1": - version "8.9.1" - resolved "https://registry.yarnpkg.com/@polkadot/rpc-core/-/rpc-core-8.9.1.tgz#79392d2a1d1d5e93549cd0f7fae7f0d71a6fb79d" - integrity sha512-+mAkpxIX2kIovnIIf8uxqjXqPA/7LaeysfIPi8VGrVB3IqvLEaT2rWtCMRSFkBEZwYI7vP7PrAw9co6MMkXlUw== - dependencies: - "@babel/runtime" "^7.18.3" - "@polkadot/rpc-augment" "8.9.1" - "@polkadot/rpc-provider" "8.9.1" - "@polkadot/types" "8.9.1" - "@polkadot/util" "^9.5.1" - rxjs "^7.5.5" - -"@polkadot/rpc-provider@8.9.1": - version "8.9.1" - resolved "https://registry.yarnpkg.com/@polkadot/rpc-provider/-/rpc-provider-8.9.1.tgz#1e6e8e6218bb0fe59dd673acb9198bf12acf6625" - integrity sha512-XunL29pi464VB6AJGuvVzTnCtk4y5KBwgBIC/S4YMdqi+l2ujXZOFM2WBnbiV+YhB7FEXmbYR8NsKAe/DSb85A== - dependencies: - "@babel/runtime" "^7.18.3" - "@polkadot/keyring" "^9.5.1" - "@polkadot/types" "8.9.1" - "@polkadot/types-support" "8.9.1" - "@polkadot/util" "^9.5.1" - "@polkadot/util-crypto" "^9.5.1" - "@polkadot/x-fetch" "^9.5.1" - "@polkadot/x-global" "^9.5.1" - "@polkadot/x-ws" "^9.5.1" - "@substrate/connect" "0.7.6" - eventemitter3 "^4.0.7" - mock-socket "^9.1.5" - nock "^13.2.6" - -"@polkadot/typegen@8.9.1": - version "8.9.1" - resolved "https://registry.yarnpkg.com/@polkadot/typegen/-/typegen-8.9.1.tgz#a2070bac928f20af6a2da0706a16ce5ff090573e" - integrity sha512-mqcJdjV4xKrJ3YVb/y7kqnD35E5pWwEq66TVC/JP/sukoUwCGOGOfQ6BJZHJAhFRuJoRAnRHUjSM6Ixz8hWEdg== - dependencies: - "@babel/core" "^7.18.5" - "@babel/register" "^7.17.7" - "@babel/runtime" "^7.18.3" - "@polkadot/api" "8.9.1" - "@polkadot/api-augment" "8.9.1" - "@polkadot/rpc-augment" "8.9.1" - "@polkadot/rpc-provider" "8.9.1" - "@polkadot/types" "8.9.1" - "@polkadot/types-augment" "8.9.1" - "@polkadot/types-codec" "8.9.1" - "@polkadot/types-create" "8.9.1" - "@polkadot/types-support" "8.9.1" - "@polkadot/util" "^9.5.1" - "@polkadot/x-ws" "^9.5.1" +"@polkadot/api-augment@10.1.4": + version "10.1.4" + resolved "https://registry.yarnpkg.com/@polkadot/api-augment/-/api-augment-10.1.4.tgz#50ce31b7a72885ae466f0b76c0e9dceb4dd9c168" + integrity sha512-E8XTVKF85sL+awUEVkzbpfH2LrvWe/StINGu4ZCOhPrlw53F/pT8Uvnv3rpDM214pXNkVZSX0JneaKGYCqPzAw== + dependencies: + "@polkadot/api-base" "10.1.4" + "@polkadot/rpc-augment" "10.1.4" + "@polkadot/types" "10.1.4" + "@polkadot/types-augment" "10.1.4" + "@polkadot/types-codec" "10.1.4" + "@polkadot/util" "^11.1.1" + tslib "^2.5.0" + +"@polkadot/api-base@10.1.4": + version "10.1.4" + resolved "https://registry.yarnpkg.com/@polkadot/api-base/-/api-base-10.1.4.tgz#71b885c6e27cfdfc0c745c08e9bd43e27eabe104" + integrity sha512-FuQ98EoFfSlal2aGjAPyktA+zf/UPl4rz5CZoEXbFS7l9V7IkM6v1xGKHb6bQz2rJCnBjwizMxIEn0+5btB0fA== + dependencies: + "@polkadot/rpc-core" "10.1.4" + "@polkadot/types" "10.1.4" + "@polkadot/util" "^11.1.1" + rxjs "^7.8.0" + tslib "^2.5.0" + +"@polkadot/api-derive@10.1.4": + version "10.1.4" + resolved "https://registry.yarnpkg.com/@polkadot/api-derive/-/api-derive-10.1.4.tgz#c0d1b6ba3f4618fbf1a91c98a7860b33f18ff08a" + integrity sha512-aHLelYSrpBM4rVm1BUUJa/B0VZz98eQWtFkEr/2HS4auS8V1OPQHzcWN/HQhDxwW3JLXP/Q15DRGkfZJv31cOg== + dependencies: + "@polkadot/api" "10.1.4" + "@polkadot/api-augment" "10.1.4" + "@polkadot/api-base" "10.1.4" + "@polkadot/rpc-core" "10.1.4" + "@polkadot/types" "10.1.4" + "@polkadot/types-codec" "10.1.4" + "@polkadot/util" "^11.1.1" + "@polkadot/util-crypto" "^11.1.1" + rxjs "^7.8.0" + tslib "^2.5.0" + +"@polkadot/api@10.1.4": + version "10.1.4" + resolved "https://registry.yarnpkg.com/@polkadot/api/-/api-10.1.4.tgz#7d31e76092c63c8dd178146933df4853a646590c" + integrity sha512-kN/KUuCAZx4iZ/iL0IIbpcyizdHny7+vT2ED01DO+J/yty0m/U6gUH4X+cmULrLe977SwJbwWV86tmkm2WWNkA== + dependencies: + "@polkadot/api-augment" "10.1.4" + "@polkadot/api-base" "10.1.4" + "@polkadot/api-derive" "10.1.4" + "@polkadot/keyring" "^11.1.1" + "@polkadot/rpc-augment" "10.1.4" + "@polkadot/rpc-core" "10.1.4" + "@polkadot/rpc-provider" "10.1.4" + "@polkadot/types" "10.1.4" + "@polkadot/types-augment" "10.1.4" + "@polkadot/types-codec" "10.1.4" + "@polkadot/types-create" "10.1.4" + "@polkadot/types-known" "10.1.4" + "@polkadot/util" "^11.1.1" + "@polkadot/util-crypto" "^11.1.1" + eventemitter3 "^5.0.0" + rxjs "^7.8.0" + tslib "^2.5.0" + +"@polkadot/keyring@^11.1.1": + version "11.1.3" + resolved "https://registry.yarnpkg.com/@polkadot/keyring/-/keyring-11.1.3.tgz#8718f14996ecdb389acffc6ecbe7deb8a2d74b5f" + integrity sha512-bzGz1cWDYK7MWhp0630W6KOwTC/wsvKKHBvWxReMT7iQwFHeLn5AemUOveqIPxF+esd/UfdN5aFDHApjYcyZsg== + dependencies: + "@polkadot/util" "11.1.3" + "@polkadot/util-crypto" "11.1.3" + tslib "^2.5.0" + +"@polkadot/networks@11.1.3", "@polkadot/networks@^11.1.1": + version "11.1.3" + resolved "https://registry.yarnpkg.com/@polkadot/networks/-/networks-11.1.3.tgz#e113c98269328267962c2047dccca4d2790cc8a5" + integrity sha512-goLpX9SswAGGeh1jXB79wHEfWOF5rLIItMHYalujBmhQVxyAqbxP2tzQqPQXDLcnkWbgwkyYGLXaDD72GBqHZw== + dependencies: + "@polkadot/util" "11.1.3" + "@substrate/ss58-registry" "^1.39.0" + tslib "^2.5.0" + +"@polkadot/rpc-augment@10.1.4": + version "10.1.4" + resolved "https://registry.yarnpkg.com/@polkadot/rpc-augment/-/rpc-augment-10.1.4.tgz#300bab3746635cbb7013309ecfd6d567f67b9bc2" + integrity sha512-cwenrMXqGjXtUVYtTAISn/CZ9JYgqISiGZXlrUCPXz73/ZHPkcLYYPbXgeswquaDLm6jiU3H7dwtviRRpaRX8A== + dependencies: + "@polkadot/rpc-core" "10.1.4" + "@polkadot/types" "10.1.4" + "@polkadot/types-codec" "10.1.4" + "@polkadot/util" "^11.1.1" + tslib "^2.5.0" + +"@polkadot/rpc-core@10.1.4": + version "10.1.4" + resolved "https://registry.yarnpkg.com/@polkadot/rpc-core/-/rpc-core-10.1.4.tgz#4cb6b935afd3f3c32260266a34a617e8240ab148" + integrity sha512-pNSsJkhm2o+SlJrsD3B6PpsJKieVlPZLN4Sw1rXLRkqTiwqrNdxrHEjjPKQonVN2VC+n/X2S83rTkX+cPUCxBw== + dependencies: + "@polkadot/rpc-augment" "10.1.4" + "@polkadot/rpc-provider" "10.1.4" + "@polkadot/types" "10.1.4" + "@polkadot/util" "^11.1.1" + rxjs "^7.8.0" + tslib "^2.5.0" + +"@polkadot/rpc-provider@10.1.4": + version "10.1.4" + resolved "https://registry.yarnpkg.com/@polkadot/rpc-provider/-/rpc-provider-10.1.4.tgz#633d6b394acd6ddcd430f78e1b0e5d777570bba2" + integrity sha512-GW2HrOAtqyjaJsMZ4VaubAoIt9/URZY+0rOnem9ivvJpqd0mMC2DcS0+0fJVXJXmOaz5W6thedgcHOHhulC6/Q== + dependencies: + "@polkadot/keyring" "^11.1.1" + "@polkadot/types" "10.1.4" + "@polkadot/types-support" "10.1.4" + "@polkadot/util" "^11.1.1" + "@polkadot/util-crypto" "^11.1.1" + "@polkadot/x-fetch" "^11.1.1" + "@polkadot/x-global" "^11.1.1" + "@polkadot/x-ws" "^11.1.1" + eventemitter3 "^5.0.0" + mock-socket "^9.2.1" + nock "^13.3.0" + tslib "^2.5.0" + optionalDependencies: + "@substrate/connect" "0.7.21" + +"@polkadot/typegen@10.1.4": + version "10.1.4" + resolved "https://registry.yarnpkg.com/@polkadot/typegen/-/typegen-10.1.4.tgz#3c507e7e6a46d9b4a1d99a72704fa1aac862c6b7" + integrity sha512-voW4YazoXPpW3zwfNb5dcHwYCLeobBEuSW8lXIZhtxhqjhECm23x/Z7ZuUZZ0c7Sstur1wrOptwzeqLVHHbMXw== + dependencies: + "@polkadot/api" "10.1.4" + "@polkadot/api-augment" "10.1.4" + "@polkadot/rpc-augment" "10.1.4" + "@polkadot/rpc-provider" "10.1.4" + "@polkadot/types" "10.1.4" + "@polkadot/types-augment" "10.1.4" + "@polkadot/types-codec" "10.1.4" + "@polkadot/types-create" "10.1.4" + "@polkadot/types-support" "10.1.4" + "@polkadot/util" "^11.1.1" + "@polkadot/util-crypto" "^11.1.1" + "@polkadot/x-ws" "^11.1.1" handlebars "^4.7.7" - websocket "^1.0.34" - yargs "^17.5.1" - -"@polkadot/types-augment@8.9.1": - version "8.9.1" - resolved "https://registry.yarnpkg.com/@polkadot/types-augment/-/types-augment-8.9.1.tgz#ff4880471eba038f8b28e412b7d8d1f500d46cf9" - integrity sha512-kfSioIpB8krtNgIANN8QCik+uBFmxGACEq84oxiqbKc2BfTXzcqQ7jkmslXeEqb9IsQ9rpaa3fkvyoLQNLqXgA== - dependencies: - "@babel/runtime" "^7.18.3" - "@polkadot/types" "8.9.1" - "@polkadot/types-codec" "8.9.1" - "@polkadot/util" "^9.5.1" - -"@polkadot/types-codec@8.9.1": - version "8.9.1" - resolved "https://registry.yarnpkg.com/@polkadot/types-codec/-/types-codec-8.9.1.tgz#8fbf3ade7a87b716937b7f37fd43b8a46ba12c4d" - integrity sha512-bboHpTwvHooTdITsmJ5IqAyZDuONZaVs6xC3iRbE9SIHD4kUpivlTc+Rvk91EcQclFo5IUKvNrX4BrOx8Y/YnQ== - dependencies: - "@babel/runtime" "^7.18.3" - "@polkadot/util" "^9.5.1" - -"@polkadot/types-create@8.9.1": - version "8.9.1" - resolved "https://registry.yarnpkg.com/@polkadot/types-create/-/types-create-8.9.1.tgz#ed365812b522fcc7984aa24cf7cbeeb0cdf20e34" - integrity sha512-q7er671QXYcmG4gkZvtKpES7QV013w36s8VT947aT3GDzlGZDQQKNKpELyi7K1sgWjQyrL3/0cTKhP8taAjWPQ== - dependencies: - "@babel/runtime" "^7.18.3" - "@polkadot/types-codec" "8.9.1" - "@polkadot/util" "^9.5.1" - -"@polkadot/types-known@8.9.1": - version "8.9.1" - resolved "https://registry.yarnpkg.com/@polkadot/types-known/-/types-known-8.9.1.tgz#019ab25b048f157659cf6141c3d8483c28af0123" - integrity sha512-y5Fvo7TM9DjM/CNQbQsR78O5LP3CuBbQY90yA2APwqZNn/dilTxWIGrxtPzTG9QCZJyhMN+EZdKUo51brKRI/g== - dependencies: - "@babel/runtime" "^7.18.3" - "@polkadot/networks" "^9.5.1" - "@polkadot/types" "8.9.1" - "@polkadot/types-codec" "8.9.1" - "@polkadot/types-create" "8.9.1" - "@polkadot/util" "^9.5.1" - -"@polkadot/types-support@8.9.1": - version "8.9.1" - resolved "https://registry.yarnpkg.com/@polkadot/types-support/-/types-support-8.9.1.tgz#84d023945feddc15f60b8cb1a36abe2edfed4a23" - integrity sha512-t3HJc8o68LWvhEy63PRZQxCL4T7sSsrLm7+rpkfeJAEC1DXeFF85FwE2U+YKa3+Z3NuMv2e4DV2jnIZe9XRtHQ== - dependencies: - "@babel/runtime" "^7.18.3" - "@polkadot/util" "^9.5.1" - -"@polkadot/types@8.9.1": - version "8.9.1" - resolved "https://registry.yarnpkg.com/@polkadot/types/-/types-8.9.1.tgz#e5bf1cef79d8c305faa8691c62dd3d4be9baed53" - integrity sha512-h43/aPzk+ta0MzzGQz3DiGtearttHxZr08xOdtU5GctI6u9MXm0n0w74clciLpIGu5CI+QxYN3oQ8/5WXTukMw== - dependencies: - "@babel/runtime" "^7.18.3" - "@polkadot/keyring" "^9.5.1" - "@polkadot/types-augment" "8.9.1" - "@polkadot/types-codec" "8.9.1" - "@polkadot/types-create" "8.9.1" - "@polkadot/util" "^9.5.1" - "@polkadot/util-crypto" "^9.5.1" - rxjs "^7.5.5" - -"@polkadot/util-crypto@9.6.2", "@polkadot/util-crypto@^9.5.1": - version "9.6.2" - resolved "https://registry.yarnpkg.com/@polkadot/util-crypto/-/util-crypto-9.6.2.tgz#643d6118df8f4a6873855522166c47a76eb2aec1" - integrity sha512-ptr4RnVevjW5Sel3JjLJUaT1YmG04zeof4hddJJuQ/H8S/WIkv4uRgT9lkjw54U/DB+qS44XO/uIGMlR7BtLQg== - dependencies: - "@babel/runtime" "^7.18.3" - "@noble/hashes" "1.1.2" - "@noble/secp256k1" "1.6.0" - "@polkadot/networks" "9.6.2" - "@polkadot/util" "9.6.2" - "@polkadot/wasm-crypto" "^6.1.5" - "@polkadot/x-bigint" "9.6.2" - "@polkadot/x-randomvalues" "9.6.2" + tslib "^2.5.0" + yargs "^17.7.1" + +"@polkadot/types-augment@10.1.4": + version "10.1.4" + resolved "https://registry.yarnpkg.com/@polkadot/types-augment/-/types-augment-10.1.4.tgz#398ebd2c44ca39eca5a6be60af685be86d5e0de8" + integrity sha512-dWfTpxtHyvWXOrcGbKeEWWs57D3nHrxAUorV/K57KdyPJ/CZOZtxrWBDET4lCFk6v0xnL/cheU3gZa+k+3RggQ== + dependencies: + "@polkadot/types" "10.1.4" + "@polkadot/types-codec" "10.1.4" + "@polkadot/util" "^11.1.1" + tslib "^2.5.0" + +"@polkadot/types-codec@10.1.4": + version "10.1.4" + resolved "https://registry.yarnpkg.com/@polkadot/types-codec/-/types-codec-10.1.4.tgz#9ad20ba69224dabc7402e6de63d894b0c24f8ff0" + integrity sha512-/n1XUsYlVUkoFm3r/Jc8x6omTQix9xRXPM0fMIQQmEKICwMUkmGiJJQyPbwodIp7Rbq1E0MvBmVkgxx1TTURjw== + dependencies: + "@polkadot/util" "^11.1.1" + "@polkadot/x-bigint" "^11.1.1" + tslib "^2.5.0" + +"@polkadot/types-create@10.1.4": + version "10.1.4" + resolved "https://registry.yarnpkg.com/@polkadot/types-create/-/types-create-10.1.4.tgz#6b5e803b183430694039e256e47aa4e105609d5f" + integrity sha512-0tG8o4AMWsTK80S3UybTw5Ix2zSAIU1rc4Se/HZvRjZApvAQ3K/Xj1JMT//Gsjp2DvsJ10+ukAp+bqKDVA7WGA== + dependencies: + "@polkadot/types-codec" "10.1.4" + "@polkadot/util" "^11.1.1" + tslib "^2.5.0" + +"@polkadot/types-known@10.1.4": + version "10.1.4" + resolved "https://registry.yarnpkg.com/@polkadot/types-known/-/types-known-10.1.4.tgz#fd7d64f4ea36fc8ca04b867e30ad66b65e138fc7" + integrity sha512-RVSubFjjiNiPvgx9XeyFPge0/Q7PAMzBa5HoSkl7j+CRFLanKrU0DPeMClx/GqftDGS/9pWiaXvTc0FxIVsj4Q== + dependencies: + "@polkadot/networks" "^11.1.1" + "@polkadot/types" "10.1.4" + "@polkadot/types-codec" "10.1.4" + "@polkadot/types-create" "10.1.4" + "@polkadot/util" "^11.1.1" + tslib "^2.5.0" + +"@polkadot/types-support@10.1.4": + version "10.1.4" + resolved "https://registry.yarnpkg.com/@polkadot/types-support/-/types-support-10.1.4.tgz#ede3423751fa733f413272b326b2d62ec26c0bc3" + integrity sha512-03YoJ6TY9WCtQ1Ki3OsdR1O18ckDz+fux1uqXfC+yDv6A4h3bnNpohSBmRxlDVSkcINZMFQ3s4oSBy4zL9L1Ag== + dependencies: + "@polkadot/util" "^11.1.1" + tslib "^2.5.0" + +"@polkadot/types@10.1.4": + version "10.1.4" + resolved "https://registry.yarnpkg.com/@polkadot/types/-/types-10.1.4.tgz#764ed1b86d9409dca28b29e78f6667069e072d2f" + integrity sha512-ituklPjRZnAdUyznQnAKsdPKohvpF34+9EbtOFBjZ7pmpRMsB6OCfwqexiIAef9iFhRoeEXflV5PIkoaYVPBBQ== + dependencies: + "@polkadot/keyring" "^11.1.1" + "@polkadot/types-augment" "10.1.4" + "@polkadot/types-codec" "10.1.4" + "@polkadot/types-create" "10.1.4" + "@polkadot/util" "^11.1.1" + "@polkadot/util-crypto" "^11.1.1" + rxjs "^7.8.0" + tslib "^2.5.0" + +"@polkadot/util-crypto@11.1.3", "@polkadot/util-crypto@^11.1.1": + version "11.1.3" + resolved "https://registry.yarnpkg.com/@polkadot/util-crypto/-/util-crypto-11.1.3.tgz#c3b166f8f8934a2139c8cfb31af50dae53a9d985" + integrity sha512-hjH1y6jXQuceJ2NWx7+ei0sR4A7t844XwlNquPxZX3kQbQS+1t6tO4Eo3/95JhPsEaJOXduus02cYEF6gteEYQ== + dependencies: + "@noble/hashes" "1.3.0" + "@noble/secp256k1" "1.7.1" + "@polkadot/networks" "11.1.3" + "@polkadot/util" "11.1.3" + "@polkadot/wasm-crypto" "^7.0.3" + "@polkadot/x-bigint" "11.1.3" + "@polkadot/x-randomvalues" "11.1.3" "@scure/base" "1.1.1" - ed2curve "^0.3.0" + tslib "^2.5.0" tweetnacl "^1.0.3" -"@polkadot/util@9.6.2", "@polkadot/util@^9.5.1": - version "9.6.2" - resolved "https://registry.yarnpkg.com/@polkadot/util/-/util-9.6.2.tgz#ad011b04f941bf7ce62babfd8ea32180ed985caf" - integrity sha512-ebK46kEsXfzqUgaPVbVOZepHtVJR2qd9FHTLBPcoXR601y6IuqCHkp0hMkrD3Cdi5AWAd0a7h84c1/Oj5q3SnA== - dependencies: - "@babel/runtime" "^7.18.3" - "@polkadot/x-bigint" "9.6.2" - "@polkadot/x-global" "9.6.2" - "@polkadot/x-textdecoder" "9.6.2" - "@polkadot/x-textencoder" "9.6.2" - "@types/bn.js" "^5.1.0" - bn.js "^5.2.1" - ip-regex "^4.3.0" - -"@polkadot/wasm-bridge@6.1.5": - version "6.1.5" - resolved "https://registry.yarnpkg.com/@polkadot/wasm-bridge/-/wasm-bridge-6.1.5.tgz#f77e3605eb30ac199a8d3a6357affb35f81f983a" - integrity sha512-nqxhJQTjw5P3yEY1Cd9g86GvpY/PHD3h74dszaBOg5GVPE53G18AKehb5I8daSpOHVKsItKK1n8xstxZTVI0Hg== - dependencies: - "@babel/runtime" "^7.18.3" - -"@polkadot/wasm-crypto-asmjs@6.1.5": - version "6.1.5" - resolved "https://registry.yarnpkg.com/@polkadot/wasm-crypto-asmjs/-/wasm-crypto-asmjs-6.1.5.tgz#2446159502fc3966cdcc4a9560494e037bdec3ab" - integrity sha512-GsVIe+fjJ2sHfrjtqSLV0tP6nClF/7/QXZd+BAWomVMCVcR35OIrkNK2giDzlCqaTP+MiCb/UF3phrU4wsHV4Q== - dependencies: - "@babel/runtime" "^7.18.3" - -"@polkadot/wasm-crypto-init@6.1.5": - version "6.1.5" - resolved "https://registry.yarnpkg.com/@polkadot/wasm-crypto-init/-/wasm-crypto-init-6.1.5.tgz#86756bc85bffced837778c2c2d35dab69adfb8f5" - integrity sha512-VkBNc4cEkQ9YWAKLGW2ve2HV56GBHii3Xy4QYV+8OFYiOUbBMDVmuAvjlCjxiwa8nUxLzgCIz0HqqUx2YzxkhQ== - dependencies: - "@babel/runtime" "^7.18.3" - "@polkadot/wasm-bridge" "6.1.5" - "@polkadot/wasm-crypto-asmjs" "6.1.5" - "@polkadot/wasm-crypto-wasm" "6.1.5" - -"@polkadot/wasm-crypto-wasm@6.1.5": - version "6.1.5" - resolved "https://registry.yarnpkg.com/@polkadot/wasm-crypto-wasm/-/wasm-crypto-wasm-6.1.5.tgz#1a694958b8aedf1908d0abf4d30a95e68219cef8" - integrity sha512-YKriV8xUnnNVCykB0c1r0JEQgGPmgPMsEfHLzKhUeE415vkj3UcfcgXuOXVSEXKqgeoCLkvlY5OL3yb3Fg+Xbw== - dependencies: - "@babel/runtime" "^7.18.3" - "@polkadot/wasm-util" "6.1.5" - -"@polkadot/wasm-crypto@^6.1.5": - version "6.1.5" - resolved "https://registry.yarnpkg.com/@polkadot/wasm-crypto/-/wasm-crypto-6.1.5.tgz#a7f60ebf81297a460fa1e97f71c4db6c91d49639" - integrity sha512-P4MIVE0RJm+Ar0qbOFFtEvA9fkrcmu4KI929k/XiWOqqKuLogwNjZcZiWZYLG7pDIXeHciAy65nIUpV2nr0D+Q== - dependencies: - "@babel/runtime" "^7.18.3" - "@polkadot/wasm-bridge" "6.1.5" - "@polkadot/wasm-crypto-asmjs" "6.1.5" - "@polkadot/wasm-crypto-init" "6.1.5" - "@polkadot/wasm-crypto-wasm" "6.1.5" - "@polkadot/wasm-util" "6.1.5" - -"@polkadot/wasm-util@6.1.5": - version "6.1.5" - resolved "https://registry.yarnpkg.com/@polkadot/wasm-util/-/wasm-util-6.1.5.tgz#4dcd4a32d706e18a40c2de65813abad1b4cbf730" - integrity sha512-5OH31mz8/Ly50fNOQ6eGFcO8OtLLyTvaoJPqUmcdl6OI+1+8GLoZMoXyRdrhWjftqQFxiJnwvlpqq6VdNVDg6g== - dependencies: - "@babel/runtime" "^7.18.3" - -"@polkadot/x-bigint@9.6.2": - version "9.6.2" - resolved "https://registry.yarnpkg.com/@polkadot/x-bigint/-/x-bigint-9.6.2.tgz#1fa6038395fd488b7c0051113813de9a645a208b" - integrity sha512-p2PAx5uJM4zGhbDCEMiFbeOndP8bnzdEdvB4aP17o4AQ8iHM/TrhiOMD7xYeUtMpc0TP+Z6X0ZRqsAt4jBzoRg== - dependencies: - "@babel/runtime" "^7.18.3" - "@polkadot/x-global" "9.6.2" - -"@polkadot/x-fetch@^9.5.1": - version "9.6.2" - resolved "https://registry.yarnpkg.com/@polkadot/x-fetch/-/x-fetch-9.6.2.tgz#709019626a5618805516bbdd3701e26781b3e849" - integrity sha512-nTZOzpmgj+f5KxRcZxValpgnAc2xxefY84XaF3XKcQQBfQrN+/Kssfl5VjAoCGfBSpVVzXs/4/cN0oee5BldMQ== - dependencies: - "@babel/runtime" "^7.18.3" - "@polkadot/x-global" "9.6.2" - "@types/node-fetch" "^2.6.2" - node-fetch "^2.6.7" - -"@polkadot/x-global@9.6.2", "@polkadot/x-global@^9.5.1": - version "9.6.2" - resolved "https://registry.yarnpkg.com/@polkadot/x-global/-/x-global-9.6.2.tgz#caf4a140fe9902a2649c029db43b5424b85cdde8" - integrity sha512-cbrNeMK6vPEWh2EbLU+hUOERkOAToZ7o2wYYS+ZNdunvUFL9wERB9Uj6JQDAebGD3ZCNHEpMbj6U1WEffiwq9A== - dependencies: - "@babel/runtime" "^7.18.3" - -"@polkadot/x-randomvalues@9.6.2": - version "9.6.2" - resolved "https://registry.yarnpkg.com/@polkadot/x-randomvalues/-/x-randomvalues-9.6.2.tgz#8555710235f649c14ea28c25919bed6c0e4202bb" - integrity sha512-GuyTYTkKK6MLPcfWX3rKRze3nUYjdRYWK1PKscslRp0Qq4LBTkroqlE7SMTt8Bh7DYH+0fWN2CmHGdv2oEUq9A== - dependencies: - "@babel/runtime" "^7.18.3" - "@polkadot/x-global" "9.6.2" - -"@polkadot/x-textdecoder@9.6.2": - version "9.6.2" - resolved "https://registry.yarnpkg.com/@polkadot/x-textdecoder/-/x-textdecoder-9.6.2.tgz#d2e10e96ce2c89fcb3f020bea09e2943dc55a11a" - integrity sha512-nWd2sWU7vjUON4FSd6B2aSYmgkooYf1V+kjTPs8uV/PN6KMc6qJInrt4U1vnOvM8wX5+4gvLDs72AVxnFmVRAA== - dependencies: - "@babel/runtime" "^7.18.3" - "@polkadot/x-global" "9.6.2" - -"@polkadot/x-textencoder@9.6.2": - version "9.6.2" - resolved "https://registry.yarnpkg.com/@polkadot/x-textencoder/-/x-textencoder-9.6.2.tgz#e0d3c37094bc19dd55ee3f0659a5a6b69ef43b91" - integrity sha512-T+ZsR2cVJxmpN6VB4u3BoWCg3fUlXHPNGCZSGXZdH2+dljIQl6MXqe+mHd5jknGvyBWCrJ0ijqoSOtLeP88MhA== - dependencies: - "@babel/runtime" "^7.18.3" - "@polkadot/x-global" "9.6.2" - -"@polkadot/x-ws@^9.5.1": - version "9.6.2" - resolved "https://registry.yarnpkg.com/@polkadot/x-ws/-/x-ws-9.6.2.tgz#ad6ba74968a3714647c1eaefdd2af9196e0df54c" - integrity sha512-DT10DqFzM2PGe+0tmClgF5G7biM/akVpAQ9JGIdwV8PxWFWjxbhRasndPfVZEmCi2o8KIVlP6m1qovfS2PdbHA== +"@polkadot/util@11.1.3", "@polkadot/util@^11.1.1": + version "11.1.3" + resolved "https://registry.yarnpkg.com/@polkadot/util/-/util-11.1.3.tgz#dcdc4504f7c31e6104e7970903d8c1998f3858ef" + integrity sha512-Gsqzv1/fSoypS5tnJkM+NJQeT7O4iYlSniubUJnaZVOKsIbueTS1bMQ1y3/h8ISxbKBtICW5cZ6zCej6Q/jC3w== dependencies: - "@babel/runtime" "^7.18.3" - "@polkadot/x-global" "9.6.2" - "@types/websocket" "^1.0.5" - websocket "^1.0.34" + "@polkadot/x-bigint" "11.1.3" + "@polkadot/x-global" "11.1.3" + "@polkadot/x-textdecoder" "11.1.3" + "@polkadot/x-textencoder" "11.1.3" + "@types/bn.js" "^5.1.1" + bn.js "^5.2.1" + tslib "^2.5.0" + +"@polkadot/wasm-bridge@7.3.2": + version "7.3.2" + resolved "https://registry.yarnpkg.com/@polkadot/wasm-bridge/-/wasm-bridge-7.3.2.tgz#e1b01906b19e06cbca3d94f10f5666f2ae0baadc" + integrity sha512-AJEXChcf/nKXd5Q/YLEV5dXQMle3UNT7jcXYmIffZAo/KI394a+/24PaISyQjoNC0fkzS1Q8T5pnGGHmXiVz2g== + dependencies: + "@polkadot/wasm-util" "7.3.2" + tslib "^2.6.2" + +"@polkadot/wasm-crypto-asmjs@7.3.2": + version "7.3.2" + resolved "https://registry.yarnpkg.com/@polkadot/wasm-crypto-asmjs/-/wasm-crypto-asmjs-7.3.2.tgz#c6d41bc4b48b5359d57a24ca3066d239f2d70a34" + integrity sha512-QP5eiUqUFur/2UoF2KKKYJcesc71fXhQFLT3D4ZjG28Mfk2ZPI0QNRUfpcxVQmIUpV5USHg4geCBNuCYsMm20Q== + dependencies: + tslib "^2.6.2" + +"@polkadot/wasm-crypto-init@7.3.2": + version "7.3.2" + resolved "https://registry.yarnpkg.com/@polkadot/wasm-crypto-init/-/wasm-crypto-init-7.3.2.tgz#7e1fe79ba978fb0a4a0f74a92d976299d38bc4b8" + integrity sha512-FPq73zGmvZtnuJaFV44brze3Lkrki3b4PebxCy9Fplw8nTmisKo9Xxtfew08r0njyYh+uiJRAxPCXadkC9sc8g== + dependencies: + "@polkadot/wasm-bridge" "7.3.2" + "@polkadot/wasm-crypto-asmjs" "7.3.2" + "@polkadot/wasm-crypto-wasm" "7.3.2" + "@polkadot/wasm-util" "7.3.2" + tslib "^2.6.2" + +"@polkadot/wasm-crypto-wasm@7.3.2": + version "7.3.2" + resolved "https://registry.yarnpkg.com/@polkadot/wasm-crypto-wasm/-/wasm-crypto-wasm-7.3.2.tgz#44e08ed5cf6499ce4a3aa7247071a5d01f6a74f4" + integrity sha512-15wd0EMv9IXs5Abp1ZKpKKAVyZPhATIAHfKsyoWCEFDLSOA0/K0QGOxzrAlsrdUkiKZOq7uzSIgIDgW8okx2Mw== + dependencies: + "@polkadot/wasm-util" "7.3.2" + tslib "^2.6.2" + +"@polkadot/wasm-crypto@^7.0.3": + version "7.3.2" + resolved "https://registry.yarnpkg.com/@polkadot/wasm-crypto/-/wasm-crypto-7.3.2.tgz#61bbcd9e591500705c8c591e6aff7654bdc8afc9" + integrity sha512-+neIDLSJ6jjVXsjyZ5oLSv16oIpwp+PxFqTUaZdZDoA2EyFRQB8pP7+qLsMNk+WJuhuJ4qXil/7XiOnZYZ+wxw== + dependencies: + "@polkadot/wasm-bridge" "7.3.2" + "@polkadot/wasm-crypto-asmjs" "7.3.2" + "@polkadot/wasm-crypto-init" "7.3.2" + "@polkadot/wasm-crypto-wasm" "7.3.2" + "@polkadot/wasm-util" "7.3.2" + tslib "^2.6.2" + +"@polkadot/wasm-util@7.3.2": + version "7.3.2" + resolved "https://registry.yarnpkg.com/@polkadot/wasm-util/-/wasm-util-7.3.2.tgz#4fe6370d2b029679b41a5c02cd7ebf42f9b28de1" + integrity sha512-bmD+Dxo1lTZyZNxbyPE380wd82QsX+43mgCm40boyKrRppXEyQmWT98v/Poc7chLuskYb6X8IQ6lvvK2bGR4Tg== + dependencies: + tslib "^2.6.2" + +"@polkadot/x-bigint@11.1.3", "@polkadot/x-bigint@^11.1.1": + version "11.1.3" + resolved "https://registry.yarnpkg.com/@polkadot/x-bigint/-/x-bigint-11.1.3.tgz#37b09a12a9ed6df704e047e261f1b8b2ac978497" + integrity sha512-fRUUHfW9VFsXT7sLUUY7gSu8v+PvzNLRwvjnp+Ly8vFx9LTLuVGFCi+mpysuRTaPpqZZJlzBJ3fST7xTGh67Pg== + dependencies: + "@polkadot/x-global" "11.1.3" + tslib "^2.5.0" + +"@polkadot/x-fetch@^11.1.1": + version "11.1.3" + resolved "https://registry.yarnpkg.com/@polkadot/x-fetch/-/x-fetch-11.1.3.tgz#e39df53fc7fb6399d3883b45d03f6ef7f265a7f9" + integrity sha512-+Z0RxxsN7+l2ZmmDdHqOo0kgqvjXJ1bw8CwTVnq3t9nPgZKn2pC3Fq3xdj/sRWiLuf/UhgCxKfYfMmt5ek4kIg== + dependencies: + "@polkadot/x-global" "11.1.3" + node-fetch "^3.3.1" + tslib "^2.5.0" + +"@polkadot/x-global@11.1.3", "@polkadot/x-global@^11.1.1": + version "11.1.3" + resolved "https://registry.yarnpkg.com/@polkadot/x-global/-/x-global-11.1.3.tgz#4086694f52373fea63910b62da999bf0981d7d86" + integrity sha512-R3aqtIjgzFHJ3TyX6wavhp+59oLbZiqczIHkaas/nJe21+SVARqFmIII6BwS7ty7+8Uu4fHliA9re+ZSUp+rwg== + dependencies: + tslib "^2.5.0" + +"@polkadot/x-randomvalues@11.1.3": + version "11.1.3" + resolved "https://registry.yarnpkg.com/@polkadot/x-randomvalues/-/x-randomvalues-11.1.3.tgz#48dde21012aa4eef3bd00d46f545861727fb6618" + integrity sha512-kZjbRgxokMR9UTodZQKs6s3C/Q2YgeizcxpDCghM/VdvQUE8OVBGNzduF7SvBvQyg2Qbg8jMcSxXOY7UgcOWSg== + dependencies: + "@polkadot/x-global" "11.1.3" + tslib "^2.5.0" + +"@polkadot/x-textdecoder@11.1.3": + version "11.1.3" + resolved "https://registry.yarnpkg.com/@polkadot/x-textdecoder/-/x-textdecoder-11.1.3.tgz#1d1e2aa86e47587393a6acb74a086ab97d62058d" + integrity sha512-NhOjuXVfYRMw9l0VhCtZOtcWefZth58p5KpVOrFyJZd12fTsoMO5/746K7QoAjWRrLQTJ/LHCEKCtWww0LwVPw== + dependencies: + "@polkadot/x-global" "11.1.3" + tslib "^2.5.0" + +"@polkadot/x-textencoder@11.1.3": + version "11.1.3" + resolved "https://registry.yarnpkg.com/@polkadot/x-textencoder/-/x-textencoder-11.1.3.tgz#ba7621b636dcfa6ca4ab6176a6a52eef15904a72" + integrity sha512-7DmqjlPN8aQexLUKwoHeadihpUnW8hjpXEru+aEDxjgq9XIxPvb++NeBK+Mra9RzzZRuiT/K5z16HlwKN//ewg== + dependencies: + "@polkadot/x-global" "11.1.3" + tslib "^2.5.0" + +"@polkadot/x-ws@^11.1.1": + version "11.1.3" + resolved "https://registry.yarnpkg.com/@polkadot/x-ws/-/x-ws-11.1.3.tgz#5a759bcbbbdceeecca53bcc74170e52cd3ca774b" + integrity sha512-omNU2mIVX997HiHm2YxEdJdyCFnv+oTyKWZd0+FdS47rdfhVwD+H9/bS+rtQ9lIqfhODdGmw3fG//gq1KpYJcw== + dependencies: + "@polkadot/x-global" "11.1.3" + tslib "^2.5.0" + ws "^8.13.0" "@protobufjs/aspromise@^1.1.1", "@protobufjs/aspromise@^1.1.2": version "1.1.2" @@ -1270,33 +1021,24 @@ resolved "https://registry.yarnpkg.com/@sqltools/formatter/-/formatter-1.2.3.tgz#1185726610acc37317ddab11c3c7f9066966bd20" integrity sha512-O3uyB/JbkAEMZaP3YqyHH7TMnex7tWyCbCI4EfJdOCoN6HIhqdJBWTM6aCCiWQ/5f5wxjgU735QAIpJbjDvmzg== -"@substrate/connect-extension-protocol@^1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@substrate/connect-extension-protocol/-/connect-extension-protocol-1.0.0.tgz#d452beda84b3ebfcf0e88592a4695e729a91e858" - integrity sha512-nFVuKdp71hMd/MGlllAOh+a2hAqt8m6J2G0aSsS/RcALZexxF9jodbFc62ni8RDtJboeOfXAHhenYOANvJKPIg== +"@substrate/connect-extension-protocol@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@substrate/connect-extension-protocol/-/connect-extension-protocol-1.0.1.tgz#fa5738039586c648013caa6a0c95c43265dbe77d" + integrity sha512-161JhCC1csjH3GE5mPLEd7HbWtwNSPJBg3p1Ksz9SFlTzj/bgEwudiRN2y5i0MoLGCIJRYKyKGMxVnd29PzNjg== -"@substrate/connect@0.7.6": - version "0.7.6" - resolved "https://registry.yarnpkg.com/@substrate/connect/-/connect-0.7.6.tgz#4b1cca6bf9c0e8be93f6f6a4eeb6684993f5dc18" - integrity sha512-PHizR91CbjC5bzUwgYUZJrbOyoraCS1QqoxkFHteZ/0vkXDKyuzoixobDaITJqq6wSTeM8ZSjuOn9u/3q7F5+A== +"@substrate/connect@0.7.21": + version "0.7.21" + resolved "https://registry.yarnpkg.com/@substrate/connect/-/connect-0.7.21.tgz#26bba45380d1b6df42a3bdd3843afc99126810ec" + integrity sha512-mn0SeWpNwvEY+hEoLunIg854cku1wMy6mgktxUGsdEH7m8u86LQ1hXwFC6gHbaRhG0KGMCblzY4askN4yf057w== dependencies: - "@substrate/connect-extension-protocol" "^1.0.0" - "@substrate/smoldot-light" "0.6.19" + "@substrate/connect-extension-protocol" "^1.0.1" eventemitter3 "^4.0.7" + smoldot "1.0.0" -"@substrate/smoldot-light@0.6.19": - version "0.6.19" - resolved "https://registry.yarnpkg.com/@substrate/smoldot-light/-/smoldot-light-0.6.19.tgz#13e897ca9839aecb0dac4ce079ff1cca1dc54cc0" - integrity sha512-Xi+v1cdURhTwx7NH+9fa1U9m7VGP61GvB6qwev9HrZXlGbQiUIvySxPlH/LMsq3mwgiRYkokPhcaZEHufY7Urg== - dependencies: - buffer "^6.0.1" - pako "^2.0.4" - websocket "^1.0.32" - -"@substrate/ss58-registry@^1.22.0": - version "1.23.0" - resolved "https://registry.yarnpkg.com/@substrate/ss58-registry/-/ss58-registry-1.23.0.tgz#6212bf871a882da98799f8dc51de0944d4152b88" - integrity sha512-LuQje7n48GXSsp1aGI6UEmNVtlh7OzQ6CN1Hd9VGUrshADwMB0lRZ5bxnffmqDR4vVugI7h0NN0AONhIW1eHGg== +"@substrate/ss58-registry@^1.39.0": + version "1.46.0" + resolved "https://registry.yarnpkg.com/@substrate/ss58-registry/-/ss58-registry-1.46.0.tgz#bfe3e6a30d39929f57ecc178acde4e74a773e2b6" + integrity sha512-rBvWnlrBeFTd5LVG7oX3rOHzR16yqyffOFHKmUiVcblpXI3D89CXOvAljW9tWlA1H/2/FegaZnHPhdObPsvi+w== "@types/accepts@*", "@types/accepts@^1.3.5": version "1.3.5" @@ -1310,7 +1052,7 @@ resolved "https://registry.yarnpkg.com/@types/app-root-path/-/app-root-path-1.2.4.tgz#a78b703282b32ac54de768f5512ecc3569919dc7" integrity sha1-p4twMoKzKsVN52j1US7MNWmRncc= -"@types/bn.js@^4.11.6", "@types/bn.js@^5.1.0": +"@types/bn.js@^4.11.6", "@types/bn.js@^5.1.0", "@types/bn.js@^5.1.1": version "5.1.0" resolved "https://registry.yarnpkg.com/@types/bn.js/-/bn.js-5.1.0.tgz#32c5d271503a12653c62cf4d2b45e6eab8cebc68" integrity sha512-QSSVYj7pYFN49kW77o2s9xTCwZ8F2xLbjLLSEVh8D2F4JUhZtPAGOFLTD+ffqksBx/u4cE/KImFjyhqCjn/LIA== @@ -1557,14 +1299,6 @@ resolved "https://registry.yarnpkg.com/@types/node-emoji/-/node-emoji-1.8.1.tgz#689cb74fdf6e84309bcafce93a135dfecd01de3f" integrity sha512-0fRfA90FWm6KJfw6P9QGyo0HDTCmthZ7cWaBQndITlaWLTZ6njRyKwrwpzpg+n6kBXBIGKeUHEQuBx7bphGJkA== -"@types/node-fetch@^2.6.2": - version "2.6.2" - resolved "https://registry.yarnpkg.com/@types/node-fetch/-/node-fetch-2.6.2.tgz#d1a9c5fd049d9415dce61571557104dec3ec81da" - integrity sha512-DHqhlq5jeESLy19TYhLakJ07kNumXWjcDdxXsLUMJZ6ue8VZJj4kLPQVE/2mdHh3xZziNF1xppu5lwmS53HR+A== - dependencies: - "@types/node" "*" - form-data "^3.0.0" - "@types/node@*": version "16.10.3" resolved "https://registry.yarnpkg.com/@types/node/-/node-16.10.3.tgz#7a8f2838603ea314d1d22bb3171d899e15c57bd5" @@ -1673,13 +1407,6 @@ resolved "https://registry.yarnpkg.com/@types/validator/-/validator-10.11.3.tgz#945799bef24a953c5bc02011ca8ad79331a3ef25" integrity sha512-GKF2VnEkMmEeEGvoo03ocrP9ySMuX1ypKazIYMlsjfslfBMhOAtC5dmEWKdJioW4lJN7MZRS88kalTsVClyQ9w== -"@types/websocket@^1.0.5": - version "1.0.5" - resolved "https://registry.yarnpkg.com/@types/websocket/-/websocket-1.0.5.tgz#3fb80ed8e07f88e51961211cd3682a3a4a81569c" - integrity sha512-NbsqiNX9CnEfC1Z0Vf4mE1SgAJ07JnRYcNex7AJ9zAVzmiGHmjKFEk7O4TJIsgv2B1sLEb6owKFZrACwdYngsQ== - dependencies: - "@types/node" "*" - "@types/ws@^6.0.3": version "6.0.4" resolved "https://registry.yarnpkg.com/@types/ws/-/ws-6.0.4.tgz#7797707c8acce8f76d8c34b370d4645b70421ff1" @@ -2044,11 +1771,6 @@ async-retry@^1.2.1: dependencies: retry "0.13.1" -asynckit@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" - integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= - 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" @@ -2162,16 +1884,6 @@ browser-fingerprint@0.0.1: resolved "https://registry.yarnpkg.com/browser-fingerprint/-/browser-fingerprint-0.0.1.tgz#8df3cdca25bf7d5b3542d61545d730053fce604a" integrity sha1-jfPNyiW/fVs1QtYVRdcwBT/OYEo= -browserslist@^4.21.3: - version "4.21.5" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.5.tgz#75c5dae60063ee641f977e00edd3cfb2fb7af6a7" - integrity sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w== - dependencies: - caniuse-lite "^1.0.30001449" - electron-to-chromium "^1.4.284" - node-releases "^2.0.8" - update-browserslist-db "^1.0.10" - buffer-from@^1.0.0, buffer-from@^1.1.0: version "1.1.2" resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" @@ -2182,7 +1894,7 @@ buffer-writer@2.0.0: resolved "https://registry.yarnpkg.com/buffer-writer/-/buffer-writer-2.0.0.tgz#ce7eb81a38f7829db09c873f2fbb792c0c98ec04" integrity sha512-a7ZpuTZU1TRtnwyCNW3I5dc0wWNC3VR9S++Ewyk2HHZdrO3CQJqSpd+95Us590V6AL7JqUAH2IwZ/398PmNFgw== -buffer@^6.0.1, buffer@^6.0.3: +buffer@^6.0.3: version "6.0.3" resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6" integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA== @@ -2190,13 +1902,6 @@ buffer@^6.0.1, buffer@^6.0.3: base64-js "^1.3.1" ieee754 "^1.2.1" -bufferutil@^4.0.1: - version "4.0.4" - resolved "https://registry.yarnpkg.com/bufferutil/-/bufferutil-4.0.4.tgz#ab81373d313a6ead0d734e98c448c722734ae7bb" - integrity sha512-VNxjXUCrF3LvbLgwfkTb5LsFvk6pGIn7OBb9x+3o+iJ6mKw0JTUp4chBFc88hi1aspeZGeZG9jAIbpFYPQSLZw== - dependencies: - node-gyp-build "^4.2.0" - busboy@^0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/busboy/-/busboy-0.3.1.tgz#170899274c5bf38aae27d5c62b71268cd585fd1b" @@ -2247,11 +1952,6 @@ camelize@^1.0.0: resolved "https://registry.yarnpkg.com/camelize/-/camelize-1.0.0.tgz#164a5483e630fa4321e5af07020e531831b2609b" integrity sha1-FkpUg+Yw+kMh5a8HAg5TGDGyYJs= -caniuse-lite@^1.0.30001449: - version "1.0.30001474" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001474.tgz#13b6fe301a831fe666cce8ca4ef89352334133d5" - integrity sha512-iaIZ8gVrWfemh5DG3T9/YqarVZoYf0r188IjaGwx68j4Pf0SGY6CQkmJUIE+NZHkkecQGohzXmBGEwWDr9aM3Q== - cardinal@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/cardinal/-/cardinal-2.1.1.tgz#7cc1055d822d212954d07b085dea251cc7bc5505" @@ -2464,15 +2164,6 @@ cliui@^8.0.1: strip-ansi "^6.0.1" wrap-ansi "^7.0.0" -clone-deep@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387" - integrity sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ== - dependencies: - is-plain-object "^2.0.4" - kind-of "^6.0.2" - shallow-clone "^3.0.0" - clone@^1.0.2: version "1.0.4" resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" @@ -2538,23 +2229,11 @@ colors@^1.1.2, colors@^1.3.3: resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78" integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA== -combined-stream@^1.0.8: - version "1.0.8" - resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" - integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== - dependencies: - delayed-stream "~1.0.0" - commander@^2.18.0, commander@^2.20.3: 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== -commondir@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" - integrity sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg== - concat-map@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" @@ -2572,11 +2251,6 @@ content-type@^1.0.4, content-type@~1.0.4: resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== -convert-source-map@^1.7.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.9.0.tgz#7faae62353fb4213366d0ca98358d22e8368b05f" - integrity sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A== - cookie-signature@1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" @@ -2732,13 +2406,10 @@ cuid@^1.3.8: core-js "^1.1.1" node-fingerprint "0.0.2" -d@1, d@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/d/-/d-1.0.1.tgz#8698095372d58dbee346ffd0c7093f99f8f9eb5a" - integrity sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA== - dependencies: - es5-ext "^0.10.50" - type "^1.0.1" +data-uri-to-buffer@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz#d8feb2b2881e6a4f58c2e08acfd0e2834e26222e" + integrity sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A== dataloader@^1.4.0: version "1.4.0" @@ -2755,7 +2426,7 @@ date-fns@^2.28.0: resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.28.0.tgz#9570d656f5fc13143e50c975a3b6bbeb46cd08b2" integrity sha512-8d35hViGYx/QH0icHYCeLmsLmMUheMmTyV9Fcm6gvNwdw31yXXH+O85sOBJ+OLnLQMKZowvpKb6FgMIQjcpvQw== -debug@2.6.9, debug@^2.2.0: +debug@2.6.9: version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== @@ -2810,11 +2481,6 @@ define-properties@^1.1.3: dependencies: object-keys "^1.0.12" -delayed-stream@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" - integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= - depd@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" @@ -2879,13 +2545,6 @@ duplexer@^0.1.1: resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.2.tgz#3abe43aef3835f8ae077d136ddce0f276b0400e6" integrity sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg== -ed2curve@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/ed2curve/-/ed2curve-0.3.0.tgz#322b575152a45305429d546b071823a93129a05d" - integrity sha512-8w2fmmq3hv9rCrcI7g9hms2pMunQr1JINfcjwR9tAyZqhtyaMN991lF/ZfHfr5tzZQ8c7y7aBgZbjfbd0fjFwQ== - dependencies: - tweetnacl "1.x.x" - ee-first@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" @@ -2896,11 +2555,6 @@ ejs@^2.6.1: resolved "https://registry.yarnpkg.com/ejs/-/ejs-2.7.4.tgz#48661287573dcc53e366c7a1ae52c3a120eec9ba" integrity sha512-7vmuyh5+kuUyJKePhQfRQBhXV5Ce+RnaeeQArKu1EAMpL3WbgMt5WG6uQZpEVvYSSsxMXRKOewtDk9RaTKXRlA== -electron-to-chromium@^1.4.284: - version "1.4.353" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.353.tgz#20e9cb4c83a08e35b3314d3fa8988764c105e6b7" - integrity sha512-IdJVpMHJoBT/nn0GQ02wPfbhogDVpd1ud95lP//FTf5l35wzxKJwibB4HBdY7Q+xKPA1nkZ0UDLOMyRj5U5IAQ== - elegant-spinner@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/elegant-spinner/-/elegant-spinner-1.0.1.tgz#db043521c95d7e303fd8f345bedc3349cfb0729e" @@ -2999,32 +2653,6 @@ es-to-primitive@^1.2.1: is-date-object "^1.0.1" is-symbol "^1.0.2" -es5-ext@^0.10.35, es5-ext@^0.10.50: - version "0.10.53" - resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.53.tgz#93c5a3acfdbef275220ad72644ad02ee18368de1" - integrity sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q== - dependencies: - es6-iterator "~2.0.3" - es6-symbol "~3.1.3" - next-tick "~1.0.0" - -es6-iterator@~2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7" - integrity sha1-p96IkUGgWpSwhUQDstCg+/qY87c= - dependencies: - d "1" - es5-ext "^0.10.35" - es6-symbol "^3.1.1" - -es6-symbol@^3.1.1, es6-symbol@~3.1.3: - version "3.1.3" - resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.3.tgz#bad5d3c1bcdac28269f4cb331e431c78ac705d18" - integrity sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA== - dependencies: - d "^1.0.1" - ext "^1.1.2" - escalade@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" @@ -3065,6 +2693,11 @@ eventemitter3@^4.0.7: resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== +eventemitter3@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-5.0.1.tgz#53f5ffd0a492ac800721bb42c66b841de96423c4" + integrity sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA== + execa@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" @@ -3150,13 +2783,6 @@ express@^4.0.0, express@^4.16.3, express@^4.17.1: utils-merge "1.0.1" vary "~1.1.2" -ext@^1.1.2: - version "1.6.0" - resolved "https://registry.yarnpkg.com/ext/-/ext-1.6.0.tgz#3871d50641e874cc172e2b53f919842d19db4c52" - integrity sha512-sdBImtzkq2HpkdRLtlLWDa6w4DX22ijZLKx8BMPUuKe1c5lbN6xwQDQCxSfxBQnHZ13ls/FH0MQZx/q/gr6FQg== - dependencies: - type "^2.5.0" - extract-stack@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/extract-stack/-/extract-stack-2.0.0.tgz#11367bc865bfcd9bc0db3123e5edb57786f11f9b" @@ -3190,6 +2816,14 @@ fastq@^1.6.0: dependencies: reusify "^1.0.4" +fetch-blob@^3.1.2, fetch-blob@^3.1.4: + version "3.2.0" + resolved "https://registry.yarnpkg.com/fetch-blob/-/fetch-blob-3.2.0.tgz#f09b8d4bbd45adc6f0c20b7e787e793e309dcce9" + integrity sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ== + dependencies: + node-domexception "^1.0.0" + web-streams-polyfill "^3.0.3" + figlet@^1.5.2: version "1.5.2" resolved "https://registry.yarnpkg.com/figlet/-/figlet-1.5.2.tgz#dda34ff233c9a48e36fcff6741aeb5bafe49b634" @@ -3242,15 +2876,6 @@ finalhandler@~1.1.2: statuses "~1.5.0" unpipe "~1.0.0" -find-cache-dir@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-2.1.0.tgz#8d0f94cd13fe43c6c7c261a0d86115ca918c05f7" - integrity sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ== - dependencies: - commondir "^1.0.1" - make-dir "^2.0.0" - pkg-dir "^3.0.0" - find-up@^1.0.0: version "1.1.2" resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" @@ -3278,14 +2903,12 @@ for-each@^0.3.3: dependencies: is-callable "^1.1.3" -form-data@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-3.0.1.tgz#ebd53791b78356a99af9a300d4282c4d5eb9755f" - integrity sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg== +formdata-polyfill@^4.0.10: + version "4.0.10" + resolved "https://registry.yarnpkg.com/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz#24807c31c9d402e002ab3d8c720144ceb8848423" + integrity sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g== dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.8" - mime-types "^2.1.12" + fetch-blob "^3.1.2" forwarded@0.2.0: version "0.2.0" @@ -3339,11 +2962,6 @@ function-bind@^1.1.1: resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== -gensync@^1.0.0-beta.2: - version "1.0.0-beta.2" - resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" - integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== - get-caller-file@^1.0.1: version "1.0.3" resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a" @@ -3898,11 +3516,6 @@ invert-kv@^2.0.0: resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-2.0.0.tgz#7393f5afa59ec9ff5f67a27620d11c226e3eec02" integrity sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA== -ip-regex@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-4.3.0.tgz#687275ab0f57fa76978ff8f4dddc8a23d5990db5" - integrity sha512-B9ZWJxHHOHUhUjCPrMpLD4xEq35bUTClHM1S6CBU5ixQnkZmwipwgc96vAd7AAGM9TGHvJR+Uss+/Ak6UphK+Q== - ipaddr.js@1.9.1: version "1.9.1" resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" @@ -4017,13 +3630,6 @@ is-plain-object@3.0.0: dependencies: isobject "^4.0.0" -is-plain-object@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" - integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== - dependencies: - isobject "^3.0.1" - is-promise@^2.1.0: version "2.2.2" resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.2.2.tgz#39ab959ccbf9a774cf079f7b40c7a26f763135f1" @@ -4071,11 +3677,6 @@ is-symbol@^1.0.2, is-symbol@^1.0.3: dependencies: has-symbols "^1.0.2" -is-typedarray@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" - integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= - is-utf8@^0.2.0: version "0.2.1" resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" @@ -4115,11 +3716,6 @@ isexe@^2.0.0: resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= -isobject@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" - integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg== - isobject@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/isobject/-/isobject-4.0.0.tgz#3f1c9155e73b192022a80819bacd0343711697b0" @@ -4190,11 +3786,6 @@ json-stringify-safe@^5.0.1: resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA== -json5@^2.2.2: - version "2.2.3" - resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" - integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== - jsonfile@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" @@ -4226,11 +3817,6 @@ keycode@^2.1.9: resolved "https://registry.yarnpkg.com/keycode/-/keycode-2.2.0.tgz#3d0af56dc7b8b8e5cba8d0a97f107204eec22b04" integrity sha1-PQr1bce4uOXLqNCpfxByBO7CKwQ= -kind-of@^6.0.2: - version "6.0.3" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" - integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== - lcid@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835" @@ -4516,13 +4102,6 @@ loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.2.0, loose-envify@^1.3 dependencies: js-tokens "^3.0.0 || ^4.0.0" -lru-cache@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" - integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== - dependencies: - yallist "^3.0.2" - lru-cache@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" @@ -4530,14 +4109,6 @@ lru-cache@^6.0.0: dependencies: yallist "^4.0.0" -make-dir@^2.0.0, make-dir@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" - integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA== - dependencies: - pify "^4.0.1" - semver "^5.6.0" - make-error@^1.1.1: version "1.3.6" resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" @@ -4641,7 +4212,7 @@ mime-db@1.50.0: resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.50.0.tgz#abd4ac94e98d3c0e185016c67ab45d5fde40c11f" integrity sha512-9tMZCDlYHqeERXEHO9f/hKfNXhre5dK2eE/krIvUjZbS2KPcqGDfNShIWS1uW9XOTKQKqK6qbeOci18rbfW77A== -mime-types@^2.1.12, mime-types@~2.1.24: +mime-types@~2.1.24: version "2.1.33" resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.33.tgz#1fa12a904472fafd068e48d9e8401f74d3f70edb" integrity sha512-plLElXp7pRDd0bNZHw+nMd52vRYjLwQjygaNg7ddJ2uJtTlmnTCjWuPKxVu6//AdaRuME84SvLW91sIkBqGT0g== @@ -4694,10 +4265,10 @@ mkdirp@^1.0.4: resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== -mock-socket@^9.1.5: - version "9.1.5" - resolved "https://registry.yarnpkg.com/mock-socket/-/mock-socket-9.1.5.tgz#2c4e44922ad556843b6dfe09d14ed8041fa2cdeb" - integrity sha512-3DeNIcsQixWHHKk6NdoBhWI4t1VMj5/HzfnI1rE/pLl5qKx7+gd4DNA07ehTaZ6MoUU053si6Hd+YtiM/tQZfg== +mock-socket@^9.2.1: + version "9.3.1" + resolved "https://registry.yarnpkg.com/mock-socket/-/mock-socket-9.3.1.tgz#24fb00c2f573c84812aa4a24181bb025de80cc8e" + integrity sha512-qxBgB7Qa2sEQgHFjj0dSigq7fX4k6Saisd5Nelwp2q8mlbAFh5dHV9JTTlF8viYJLSSWgMCZFUom8PJcMNBoJw== ms@2.0.0: version "2.0.0" @@ -4753,26 +4324,25 @@ neo-async@^2.6.0: resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== -next-tick@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.0.0.tgz#ca86d1fe8828169b0120208e3dc8424b9db8342c" - integrity sha1-yobR/ogoFpsBICCOPchCS524NCw= - nice-try@^1.0.4: version "1.0.5" resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== -nock@^13.2.6: - version "13.2.7" - resolved "https://registry.yarnpkg.com/nock/-/nock-13.2.7.tgz#c93933b61df42f4f4b3a07fde946a4e209c0c168" - integrity sha512-R6NUw7RIPtKwgK7jskuKoEi4VFMqIHtV2Uu9K/Uegc4TA5cqe+oNMYslZcUmnVNQCTG6wcSqUBaGTDd7sq5srg== +nock@^13.3.0: + version "13.5.4" + resolved "https://registry.yarnpkg.com/nock/-/nock-13.5.4.tgz#8918f0addc70a63736170fef7106a9721e0dc479" + integrity sha512-yAyTfdeNJGGBFxWdzSKCBYxs5FxLbCg5X5Q4ets974hcQzG1+qCxvIyOo4j2Ry6MUlhWVMX4OoYDefAIIwupjw== dependencies: debug "^4.1.0" json-stringify-safe "^5.0.1" - lodash "^4.17.21" propagate "^2.0.0" +node-domexception@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/node-domexception/-/node-domexception-1.0.0.tgz#6888db46a1f71c0b76b3f7555016b63fe64766e5" + integrity sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ== + node-emoji@^1.10.0: version "1.11.0" resolved "https://registry.yarnpkg.com/node-emoji/-/node-emoji-1.11.0.tgz#69a0150e6946e2f115e9d7ea4df7971e2628301c" @@ -4800,28 +4370,20 @@ node-fetch@^2.6.1: dependencies: whatwg-url "^5.0.0" -node-fetch@^2.6.7: - version "2.6.7" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad" - integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ== +node-fetch@^3.3.1: + version "3.3.2" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-3.3.2.tgz#d1e889bacdf733b4ff3b2b243eb7a12866a0b78b" + integrity sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA== dependencies: - whatwg-url "^5.0.0" + data-uri-to-buffer "^4.0.0" + fetch-blob "^3.1.4" + formdata-polyfill "^4.0.10" node-fingerprint@0.0.2: version "0.0.2" resolved "https://registry.yarnpkg.com/node-fingerprint/-/node-fingerprint-0.0.2.tgz#31cbabeb71a67ae7dd5a7dc042e51c3c75868501" integrity sha1-Mcur63GmeufdWn3AQuUcPHWGhQE= -node-gyp-build@^4.2.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.3.0.tgz#9f256b03e5826150be39c764bf51e993946d71a3" - integrity sha512-iWjXZvmboq0ja1pUGULQBexmxq8CV4xBhX7VDOTbL7ZR4FOowwY/VOtRxBN/yKxmdGoIp4j5ysNT4u3S2pDQ3Q== - -node-releases@^2.0.8: - version "2.0.10" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.10.tgz#c311ebae3b6a148c89b1813fd7c4d3c024ef537f" - integrity sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w== - noms@0.0.0: version "0.0.0" resolved "https://registry.yarnpkg.com/noms/-/noms-0.0.0.tgz#da8ebd9f3af9d6760919b27d9cdc8092a7332859" @@ -5242,11 +4804,6 @@ pgtools@^0.3.1: pg-connection-string "^2.4.0" yargs "^5.0.0" -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.2.3: version "2.3.0" resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.0.tgz#f1f061de8f6a4bf022892e2d128234fb98302972" @@ -5274,18 +4831,6 @@ pinkie@^2.0.0: resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA= -pirates@^4.0.5: - version "4.0.5" - resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.5.tgz#feec352ea5c3268fb23a37c702ab1699f35a5f3b" - integrity sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ== - -pkg-dir@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3" - integrity sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw== - dependencies: - find-up "^3.0.0" - pluralize@^8.0.0: version "8.0.0" resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-8.0.0.tgz#1a6fa16a38d12a1901e0320fa017051c539ce3b1" @@ -5807,10 +5352,10 @@ rxjs@^6.3.3, rxjs@^6.5.1: dependencies: tslib "^1.9.0" -rxjs@^7.5.5: - version "7.5.5" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.5.5.tgz#2ebad89af0f560f460ad5cc4213219e1f7dd4e9f" - integrity sha512-sy+H0pQofO95VDmFLzyaw9xNJU4KTRSwQIGM6+iG3SypAtCiLDzpeG8sJrNCWn2Up9km+KhkvTdbkrdy+yzZdw== +rxjs@^7.8.0: + version "7.8.1" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.8.1.tgz#6f6f3d99ea8044291efd92e7c7fcf562c4057543" + integrity sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg== dependencies: tslib "^2.1.0" @@ -5847,16 +5392,11 @@ seamless-immutable@^7.0.1: resolved "https://registry.yarnpkg.com/seamless-immutable/-/seamless-immutable-7.1.4.tgz#6e9536def083ddc4dea0207d722e0e80d0f372f8" integrity sha512-XiUO1QP4ki4E2PHegiGAlu6r82o5A+6tRh7IkGGTVg/h+UoeX4nFBeCGPOhb4CYjvkqsfm/TUtvOMYC1xmV30A== -"semver@2 || 3 || 4 || 5", semver@^5.5.0, semver@^5.6.0: +"semver@2 || 3 || 4 || 5", semver@^5.5.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== - semver@^7.0.0, semver@^7.3.2: version "7.3.5" resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7" @@ -5916,13 +5456,6 @@ sha.js@^2.4.11: inherits "^2.0.1" safe-buffer "^5.0.1" -shallow-clone@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-3.0.1.tgz#8f2981ad92531f55035b01fb230769a40e02efa3" - integrity sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA== - dependencies: - kind-of "^6.0.2" - shallowequal@^1.0.1: version "1.1.0" resolved "https://registry.yarnpkg.com/shallowequal/-/shallowequal-1.1.0.tgz#188d521de95b9087404fd4dcb68b13df0ae4e7f8" @@ -5983,13 +5516,13 @@ slice-ansi@0.0.4: resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-0.0.4.tgz#edbf8903f66f7ce2f8eafd6ceed65e264c831b35" integrity sha1-7b+JA/ZvfOL46v1s7tZeJkyDGzU= -source-map-support@^0.5.16: - version "0.5.21" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" - integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== +smoldot@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/smoldot/-/smoldot-1.0.0.tgz#438ddb9903fed28f24e52c4c0fb56f0b479209d7" + integrity sha512-3/y/poD7j42NL6Z/Gp4OLm1qx8svyy255XQ5xRkjv9+O50RT0SeEmnBZmEbVmi1w6WmamPjt8URdzfN7xxgK9Q== dependencies: - buffer-from "^1.0.0" - source-map "^0.6.0" + pako "^2.0.4" + ws "^8.8.1" source-map-support@^0.5.6: version "0.5.20" @@ -6390,6 +5923,11 @@ tslib@^2.0.1, tslib@^2.3.1: resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.0.tgz#7cecaa7f073ce680a05847aa77be941098f36dc3" integrity sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ== +tslib@^2.5.0, tslib@^2.6.2: + version "2.6.2" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae" + integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== + tunnel-agent@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" @@ -6397,7 +5935,7 @@ tunnel-agent@^0.6.0: dependencies: safe-buffer "^5.0.1" -tweetnacl@1.x.x, tweetnacl@^1.0.3: +tweetnacl@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-1.0.3.tgz#ac0af71680458d8a6378d0d0d050ab1407d35596" integrity sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw== @@ -6441,23 +5979,6 @@ type-is@^1.6.16, type-is@~1.6.17, type-is@~1.6.18: media-typer "0.3.0" mime-types "~2.1.24" -type@^1.0.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/type/-/type-1.2.0.tgz#848dd7698dafa3e54a6c479e759c4bc3f18847a0" - integrity sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg== - -type@^2.5.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/type/-/type-2.5.0.tgz#0a2e78c2e77907b252abe5f298c1b01c63f0db3d" - integrity sha512-180WMDQaIMm3+7hGXWf12GtdniDEy7nYcyFMKJn/eZz/6tSLXrUN9V0wKSbMjej0I1WHWbpREDEKHtqPQa9NNw== - -typedarray-to-buffer@^3.1.5: - version "3.1.5" - resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" - integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== - dependencies: - is-typedarray "^1.0.0" - typedi@^0.8.0: version "0.8.0" resolved "https://registry.yarnpkg.com/typedi/-/typedi-0.8.0.tgz#d8e203bd1d41a96e2b0a5c6295147d74b2b2d03e" @@ -6559,21 +6080,6 @@ untildify@^4.0.0: resolved "https://registry.yarnpkg.com/untildify/-/untildify-4.0.0.tgz#2bc947b953652487e4600949fb091e3ae8cd919b" integrity sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw== -update-browserslist-db@^1.0.10: - version "1.0.10" - resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz#0f54b876545726f17d00cd9a2561e6dade943ff3" - integrity sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ== - dependencies: - escalade "^3.1.1" - picocolors "^1.0.0" - -utf-8-validate@^5.0.2: - version "5.0.6" - resolved "https://registry.yarnpkg.com/utf-8-validate/-/utf-8-validate-5.0.6.tgz#e1b3e0a5cc8648a3b44c1799fbb170d1aaaffe80" - integrity sha512-hoY0gOf9EkCw+nimK21FVKHUIG1BMqSiRwxB/q3A9yKZOrOI99PP77BxmarDqWz6rG3vVYiBWfhG8z2Tl+7fZA== - dependencies: - node-gyp-build "^4.2.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" @@ -6652,6 +6158,11 @@ wcwidth@^1.0.1: dependencies: defaults "^1.0.3" +web-streams-polyfill@^3.0.3: + version "3.3.3" + resolved "https://registry.yarnpkg.com/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz#2073b91a2fdb1fbfbd401e7de0ac9f8214cecb4b" + integrity sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw== + webidl-conversions@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" @@ -6676,18 +6187,6 @@ webpack-bundle-analyzer@^3.3.2: opener "^1.5.1" ws "^6.0.0" -websocket@^1.0.32, websocket@^1.0.34: - version "1.0.34" - resolved "https://registry.yarnpkg.com/websocket/-/websocket-1.0.34.tgz#2bdc2602c08bf2c82253b730655c0ef7dcab3111" - integrity sha512-PRDso2sGwF6kM75QykIesBijKSVceR6jL2G8NGYyq2XrItNC2P5/qL5XeR056GhA+Ly7JMFvJb9I312mJfmqnQ== - dependencies: - bufferutil "^4.0.1" - debug "^2.2.0" - es5-ext "^0.10.50" - typedarray-to-buffer "^3.1.5" - utf-8-validate "^5.0.2" - yaeti "^0.0.6" - whatwg-fetch@>=0.10.0: version "3.6.2" resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-3.6.2.tgz#dced24f37f2624ed0281725d51d0e2e3fe677f8c" @@ -6816,6 +6315,11 @@ ws@^6.0.0: dependencies: async-limiter "~1.0.0" +ws@^8.13.0, ws@^8.8.1: + version "8.16.0" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.16.0.tgz#d1cd774f36fbc07165066a60e40323eab6446fd4" + integrity sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ== + ws@^8.2.2: version "8.2.3" resolved "https://registry.yarnpkg.com/ws/-/ws-8.2.3.tgz#63a56456db1b04367d0b721a0b80cae6d8becbba" @@ -6862,16 +6366,6 @@ y18n@^5.0.5: resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== -yaeti@^0.0.6: - version "0.0.6" - resolved "https://registry.yarnpkg.com/yaeti/-/yaeti-0.0.6.tgz#f26f484d72684cf42bedfb76970aa1608fbf9577" - integrity sha1-8m9ITXJoTPQr7ft2lwqhYI+/lXc= - -yallist@^3.0.2: - version "3.1.1" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" - integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== - yallist@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" @@ -6974,10 +6468,10 @@ yargs@^17.3.1: y18n "^5.0.5" yargs-parser "^21.0.0" -yargs@^17.5.1: - version "17.7.1" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.1.tgz#34a77645201d1a8fc5213ace787c220eabbd0967" - integrity sha512-cwiTb08Xuv5fqF4AovYacTFNxk62th7LKJ6BL9IGUpTJrWoU7/7WdQGTP2SjKf1dUNBGzDd28p/Yfs/GI6JrLw== +yargs@^17.7.1: + version "17.7.2" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269" + integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w== dependencies: cliui "^8.0.1" escalade "^3.1.1" diff --git a/query-node/graphql-server-tsconfig.json b/query-node/graphql-server-tsconfig.json new file mode 100644 index 0000000000..bbf877f2b1 --- /dev/null +++ b/query-node/graphql-server-tsconfig.json @@ -0,0 +1,28 @@ +{ + "compilerOptions": { + "allowSyntheticDefaultImports": true, + "skipLibCheck": true, + "outDir": "./dist", + "lib": ["dom", "es5", "es6", "es7", "esnext"], + "target": "es5", + "module": "commonjs", + "moduleResolution": "node", + "emitDecoratorMetadata": true, + "experimentalDecorators": true, + "sourceMap": true, + "keyofStringsOnly": true, + "ignoreDeprecations": "5.0", + "noImplicitAny": true, + "noImplicitReturns": true, + "noImplicitThis": true, + "noUnusedLocals": false, + "strict": true, + "strictNullChecks": true, + "types": ["isomorphic-fetch", "node"], + "esModuleInterop": true, + "declaration": true, + "useUnknownInCatchVariables": false + }, + "include": ["src/**/*", "db/**/*", "model/**/*"], + "exclude": ["node_modules/**/*", "generated/**/*", "tools/**/*"] +} diff --git a/query-node/manifest.yml b/query-node/manifest.yml index b9ccd2921d..653c6047d1 100644 --- a/query-node/manifest.yml +++ b/query-node/manifest.yml @@ -95,7 +95,9 @@ typegen: - content.VideoUpdated - content.VideoDeleted - content.ChannelDeleted + # Deprecated in runtime spec version 2002 (nara), but still required for QN processing from genesis block - content.ChannelDeletedByModerator + # Deprecated in runtime spec version 2002 (nara), but still required for QN processing from genesis block - content.VideoDeletedByModerator - content.ChannelAssetsDeletedByModerator - content.VideoAssetsDeletedByModerator diff --git a/query-node/mappings/package.json b/query-node/mappings/package.json index 2449553194..f84b910fa8 100644 --- a/query-node/mappings/package.json +++ b/query-node/mappings/package.json @@ -1,6 +1,6 @@ { "name": "query-node-mappings", - "version": "1.9.0", + "version": "2.2.0", "description": "Mappings for hydra-processor", "main": "lib/src/index.js", "license": "MIT", @@ -17,16 +17,16 @@ }, "dependencies": { "@apollo/client": "^3.2.5", - "@joystream/hydra-common": "5.0.0-alpha.4", - "@joystream/hydra-db-utils": "5.0.0-alpha.4", + "@joystream/hydra-common": "5.0.0-alpha.8", + "@joystream/hydra-db-utils": "5.0.0-alpha.8", "@joystream/js": "^1.8.0", "@joystream/warthog": "^2.41.9", - "@polkadot/types": "8.9.1" + "@polkadot/types": "10.1.4" }, "devDependencies": { "eslint-plugin-local-rules": "2.0.0", "prettier": "^2.2.1", "ts-node": "^10.2.1", - "typescript": "^4.4.3" + "typescript": "^5.0.2" } } diff --git a/query-node/mappings/src/content/channel.ts b/query-node/mappings/src/content/channel.ts index dd73c967e0..82144e260b 100644 --- a/query-node/mappings/src/content/channel.ts +++ b/query-node/mappings/src/content/channel.ts @@ -61,7 +61,6 @@ import { convertChannelOwnerToMemberOrCuratorGroup, convertContentActor, getChannelOrFail, - mapAgentPermission, processAppActionMetadata, processChannelMetadata, u8aToBytes, @@ -72,13 +71,14 @@ import { generateAppActionCommitment } from '@joystream/js/utils' import { DecodedMetadataObject } from '@joystream/metadata-protobuf/types' import { BaseModel } from '@joystream/warthog' import { AccountId32, Balance } from '@polkadot/types/interfaces' -import { PalletContentIterableEnumsChannelActionPermission } from '@polkadot/types/lookup' +import { PalletContentIterableEnumsChannelActionPermission as PalletContentIterableEnumsChannelActionPermission_V1001 } from '../../generated/types/1001/types-lookup' +import { PalletContentIterableEnumsChannelActionPermission as PalletContentIterableEnumsChannelActionPermission_V2002 } from '../../generated/types/2002/types-lookup' import BN from 'bn.js' import { Content_ChannelAgentRemarkedEvent_V1001 as ChannelAgentRemarkedEvent_V1001, Content_ChannelAssetsDeletedByModeratorEvent_V1001 as ChannelAssetsDeletedByModeratorEvent_V1001, Content_ChannelAssetsRemovedEvent_V1001 as ChannelAssetsRemovedEvent_V1001, - Content_ChannelCreatedEvent_V1001 as ChannelCreatedEvent_V1001, + Content_ChannelCreatedEvent_V1001 as ChannelCreatedEvent, Content_ChannelDeletedByModeratorEvent_V1001 as ChannelDeletedByModeratorEvent_V1001, Content_ChannelDeletedEvent_V1001 as ChannelDeletedEvent_V1001, Content_ChannelFundsWithdrawnEvent_V1001 as ChannelFundsWithdrawnEvent_V1001, @@ -86,15 +86,16 @@ import { Content_ChannelPayoutsUpdatedEvent_V2001 as ChannelPayoutsUpdatedEvent_V2001, Content_ChannelRewardClaimedAndWithdrawnEvent_V1001 as ChannelRewardClaimedAndWithdrawnEvent_V1001, Content_ChannelRewardUpdatedEvent_V2001 as ChannelRewardUpdatedEvent_V2001, - Content_ChannelUpdatedEvent_V1001 as ChannelUpdatedEvent_V1001, + Content_ChannelUpdatedEvent_V1001 as ChannelUpdatedEvent, Content_ChannelVisibilitySetByModeratorEvent_V1001 as ChannelVisibilitySetByModeratorEvent_V1001, } from '../../generated/types' export async function content_ChannelCreated(ctx: EventContext & StoreContext): Promise { - const { store, event } = ctx + const { store, event, block } = ctx + // read event data const [channelId, { owner, dataObjects, channelStateBloatBond }, channelCreationParameters, rewardAccount] = - new ChannelCreatedEvent_V1001(event).params + new ChannelCreatedEvent(event).params // prepare channel owner (handles fields `ownerMember` and `ownerCuratorGroup`) const channelOwner = await convertChannelOwnerToMemberOrCuratorGroup(store, owner) @@ -156,8 +157,9 @@ export async function content_ChannelCreated(ctx: EventContext & StoreContext): export async function content_ChannelUpdated(ctx: EventContext & StoreContext): Promise { const { store, event } = ctx + // read event data - const [, channelId, channelUpdateParameters, newDataObjects] = new ChannelUpdatedEvent_V1001(event).params + const [, channelId, channelUpdateParameters, newDataObjects] = new ChannelUpdatedEvent(event).params // load channel const channel = await getChannelOrFail(store, channelId.toString()) @@ -344,7 +346,12 @@ export async function content_ChannelAgentRemarked(ctx: EventContext & StoreCont async function updateChannelAgentsPermissions( store: DatabaseManager, channel: Channel, - collaboratorsPermissions: BTreeMap> + collaboratorsPermissions: BTreeMap< + u64, + BTreeSet< + PalletContentIterableEnumsChannelActionPermission_V1001 | PalletContentIterableEnumsChannelActionPermission_V2002 + > + > ) { // safest way to update permission is to delete existing and creating new ones @@ -361,7 +368,9 @@ async function updateChannelAgentsPermissions( const collaborator = new Collaborator({ channel: new Channel({ id: channel.id.toString() }), member: new Membership({ id: memberId.toString() }), - permissions: Array.from(permissions).map(mapAgentPermission), + permissions: Array.from(permissions).map((permissions) => { + return permissions.toString() + }), }) await store.save(collaborator) diff --git a/query-node/mappings/src/content/curatorGroup.ts b/query-node/mappings/src/content/curatorGroup.ts index 99db9ccf64..a3d27dfcfb 100644 --- a/query-node/mappings/src/content/curatorGroup.ts +++ b/query-node/mappings/src/content/curatorGroup.ts @@ -5,10 +5,11 @@ import { DatabaseManager, EventContext, StoreContext } from '@joystream/hydra-co import { BTreeSet } from '@polkadot/types' import { Curator, CuratorAgentPermissions, CuratorGroup } from 'query-node/dist/model' import { getById, getByIdOrFail, logger } from '../common' -import { mapAgentPermission } from './utils' // Joystream types -import { PalletContentIterableEnumsChannelActionPermission } from '@polkadot/types/lookup' +import { PalletContentIterableEnumsChannelActionPermission as PalletContentIterableEnumsChannelActionPermission_V1001 } from '../../generated/types/1001/types-lookup' +import { PalletContentIterableEnumsChannelActionPermission as PalletContentIterableEnumsChannelActionPermission_V2002 } from '../../generated/types/2002/types-lookup' import { + Content_CuratorAddedEvent_V2002 as CuratorAddedEvent_V2002, Content_CuratorAddedEvent_V1001 as CuratorAddedEvent_V1001, Content_CuratorGroupCreatedEvent_V1001 as CuratorGroupCreatedEvent_V1001, Content_CuratorGroupStatusSetEvent_V1001 as CuratorGroupStatusSetEvent_V1001, @@ -67,9 +68,14 @@ export async function content_CuratorGroupStatusSet({ store, event }: EventConte logger.info('Curator group status has been set', { id: curatorGroupId, isActive }) } -export async function content_CuratorAdded({ store, event }: EventContext & StoreContext): Promise { +export async function content_CuratorAdded({ store, event, block }: EventContext & StoreContext): Promise { // read event data - const [curatorGroupId, curatorId, permissions] = new CuratorAddedEvent_V1001(event).params + const { specVersion } = block.runtimeVersion + + const [curatorGroupId, curatorId, permissions] = + parseInt(specVersion.toString()) < 2002 + ? new CuratorAddedEvent_V1001(event).params + : new CuratorAddedEvent_V2002(event).params // load curator group const curatorGroup = await getByIdOrFail(store, CuratorGroup, curatorGroupId.toString(), ['curators']) @@ -108,7 +114,9 @@ async function updateCuratorAgentPermissions( store: DatabaseManager, curatorGroup: CuratorGroup, curator: Curator, - permissions?: BTreeSet + permissions?: BTreeSet< + PalletContentIterableEnumsChannelActionPermission_V1001 | PalletContentIterableEnumsChannelActionPermission_V2002 + > ) { // safest way to update permission is to delete existing and creating new ones @@ -129,7 +137,9 @@ async function updateCuratorAgentPermissions( const curatorAgentPermissions = new CuratorAgentPermissions({ curatorGroup: new CuratorGroup({ id: curatorGroup.id.toString() }), curator: new Curator({ id: curator.id.toString() }), - permissions: permissionsArray.map(mapAgentPermission), + permissions: permissionsArray.map((permissions) => { + return permissions.toString() + }), }) await store.save(curatorAgentPermissions) diff --git a/query-node/mappings/src/membership.ts b/query-node/mappings/src/membership.ts index 727148c6f0..6be036bd45 100644 --- a/query-node/mappings/src/membership.ts +++ b/query-node/mappings/src/membership.ts @@ -450,7 +450,9 @@ export async function members_InvitesTransferred({ store, event }: EventContext export async function members_MemberInvited({ store, event, block }: EventContext & StoreContext): Promise { const { specVersion } = block.runtimeVersion const [memberId, inviteMembershipParameters, maybeInvitedMemberBalance] = - specVersion === 2001 ? new MemberInvitedEvent_V2001(event).params : new MemberInvitedEvent_V1001(event).params + parseInt(specVersion.toString()) === 1001 + ? new MemberInvitedEvent_V1001(event).params + : new MemberInvitedEvent_V2001(event).params const entryMethod = new MembershipEntryInvited() const invitedMember = await createNewMemberFromParams(store, memberId, entryMethod, inviteMembershipParameters, 0) @@ -612,7 +614,9 @@ export async function members_MemberRemarked(ctx: EventContext & StoreContext): const { event, store, block } = ctx const { specVersion } = block.runtimeVersion const [memberId, metadataBytes, payment] = - specVersion === 2001 ? new MemberRemarkedEvent_V2001(event).params : new MemberRemarkedEvent_V1001(event).params + parseInt(specVersion.toString()) >= 2001 + ? new MemberRemarkedEvent_V2001(event).params + : new MemberRemarkedEvent_V1001(event).params const member = await getMembershipById(store, memberId) const metadata = deserializeMetadata(MemberRemarked, metadataBytes) diff --git a/query-node/mappings/src/proposals.ts b/query-node/mappings/src/proposals.ts index 9aa81ce0a7..811e0b1824 100644 --- a/query-node/mappings/src/proposals.ts +++ b/query-node/mappings/src/proposals.ts @@ -3,7 +3,6 @@ eslint-disable @typescript-eslint/naming-convention */ import { DatabaseManager, EventContext, StoreContext, SubstrateEvent } from '@joystream/hydra-common' import { Bytes } from '@polkadot/types' -import { PalletProposalsCodexProposalDetails as RuntimeProposalDetails } from '@polkadot/types/lookup' import { blake2AsHex } from '@polkadot/util-crypto' import BN from 'bn.js' import { @@ -57,18 +56,11 @@ import { SlashWorkingGroupLeadProposalDetails, TerminateWorkingGroupLeadProposalDetails, UpdateChannelPayoutsProposalDetails, + UpdatePalletFrozenStatusProposalDetails, UpdateGlobalNftLimitProposalDetails, UpdateWorkingGroupBudgetProposalDetails, VetoProposalDetails, } from 'query-node/dist/model' -import { - ProposalsEngine_ProposalCancelledEvent_V1001 as ProposalCancelledEvent_V1001, - ProposalsCodex_ProposalCreatedEvent_V1001 as ProposalCreatedEvent_V1001, - ProposalsEngine_ProposalDecisionMadeEvent_V1001 as ProposalDecisionMadeEvent_V1001, - ProposalsEngine_ProposalExecutedEvent_V1001 as ProposalExecutedEvent_V1001, - ProposalsEngine_ProposalStatusUpdatedEvent_V1001 as ProposalStatusUpdatedEvent_V1001, - ProposalsEngine_VotedEvent_V1001 as ProposalVotedEvent_V1001, -} from '../generated/types' import { INT32MAX, asBN, @@ -81,8 +73,22 @@ import { unwrap, whenDef, } from './common' +import { + ProposalsCodex_ProposalCreatedEvent_V1001 as ProposalCreatedEvent_V1001, + ProposalsCodex_ProposalCreatedEvent_V2002 as ProposalCreatedEvent_V2002, + ProposalsEngine_ProposalCancelledEvent_V1001 as ProposalCancelledEvent_V1001, + ProposalsEngine_ProposalDecisionMadeEvent_V1001 as ProposalDecisionMadeEvent_V1001, + ProposalsEngine_ProposalExecutedEvent_V1001 as ProposalExecutedEvent_V1001, + ProposalsEngine_ProposalStatusUpdatedEvent_V1001 as ProposalStatusUpdatedEvent_V1001, + ProposalsEngine_VotedEvent_V1001 as ProposalVotedEvent_V1001, +} from '../generated/types' +import { PalletProposalsCodexProposalDetails as RuntimeProposalDetails_V1001 } from '../generated/types/1001/types-lookup' +import { PalletProposalsCodexProposalDetails as RuntimeProposalDetails_V2002 } from '../generated/types/2002/types-lookup' + import { createWorkingGroupOpeningMetadata } from './workingGroups' +type RuntimeProposalDetails = RuntimeProposalDetails_V1001 | RuntimeProposalDetails_V2002 + async function getProposal(store: DatabaseManager, id: string) { return getByIdOrFail(store, Proposal, id) } @@ -103,7 +109,7 @@ async function getOrCreateRuntimeWasmBytecode(store: DatabaseManager, bytecode: async function parseProposalDetails( event: SubstrateEvent, store: DatabaseManager, - proposalDetails: RuntimeProposalDetails + proposalDetails: RuntimeProposalDetails_V1001 | RuntimeProposalDetails_V2002 ): Promise { const eventTime = new Date(event.blockTimestamp) @@ -311,6 +317,12 @@ async function parseProposalDetails( details.newWeeklyNftLimit = specificDetails[1].toNumber() } return details + } else if ((proposalDetails as RuntimeProposalDetails_V2002).isSetPalletFozenStatus) { + const details = new UpdatePalletFrozenStatusProposalDetails() + const [frozen, pallet] = (proposalDetails as RuntimeProposalDetails_V2002).asSetPalletFozenStatus + details.frozen = frozen.isTrue + details.pallet = pallet.toString() + return details } else { unimplementedError(`Unsupported proposal details type: ${proposalDetails.type}`) } @@ -342,9 +354,17 @@ async function handleRuntimeUpgradeProposalExecution(event: SubstrateEvent, stor ) } -export async function proposalsCodex_ProposalCreated({ store, event }: EventContext & StoreContext): Promise { +export async function proposalsCodex_ProposalCreated({ + store, + event, + block, +}: EventContext & StoreContext): Promise { + const specVersion = block.runtimeVersion.specVersion const [proposalId, generalProposalParameters, runtimeProposalDetails, proposalThreadId] = - new ProposalCreatedEvent_V1001(event).params + parseInt(specVersion.toString()) >= 2002 + ? new ProposalCreatedEvent_V2002(event).params + : new ProposalCreatedEvent_V1001(event).params + const eventTime = new Date(event.blockTimestamp) const proposalDetails = await parseProposalDetails(event, store, runtimeProposalDetails) diff --git a/query-node/package.json b/query-node/package.json index 22a2aadbb6..7a956205f7 100644 --- a/query-node/package.json +++ b/query-node/package.json @@ -1,6 +1,6 @@ { "name": "query-node-root", - "version": "1.9.0", + "version": "2.2.0", "description": "GraphQL server and mappings. Generated with ♥ by Hydra-CLI", "scripts": { "build": "./build.sh", @@ -39,7 +39,7 @@ "author": "", "license": "ISC", "dependencies": { - "@joystream/hydra-processor": "5.0.0-alpha.4", + "@joystream/hydra-processor": "5.0.0-alpha.8", "@types/bn.js": "^5.1.0", "bn.js": "^5.2.1", "pm2": "^5.3.0", diff --git a/query-node/schemas/proposals.graphql b/query-node/schemas/proposals.graphql index 7bb4725562..499888906a 100644 --- a/query-node/schemas/proposals.graphql +++ b/query-node/schemas/proposals.graphql @@ -332,6 +332,17 @@ type UpdateChannelPayoutsProposalDetails @variant { payloadHash: String } +type UpdatePalletFrozenStatusProposalDetails @variant { + """ + New frozen status for pallet + """ + frozen: Boolean! + """ + The pallet to update frozen status on + """ + pallet: String! +} + type UpdateGlobalNftLimitProposalDetails @variant { "New daily NFT limit set in the proposal (if any)" newDailyNftLimit: Int @@ -363,4 +374,5 @@ union ProposalDetails = | SetReferralCutProposalDetails | VetoProposalDetails | UpdateChannelPayoutsProposalDetails + | UpdatePalletFrozenStatusProposalDetails | UpdateGlobalNftLimitProposalDetails diff --git a/runtime-modules/bounty/Cargo.toml b/runtime-modules/bounty/Cargo.toml index 6a255273f9..b5063500d4 100644 --- a/runtime-modules/bounty/Cargo.toml +++ b/runtime-modules/bounty/Cargo.toml @@ -8,28 +8,28 @@ edition = '2018' serde = { version = "1.0.101", optional = true, features = ["derive"] } codec = { package = 'parity-scale-codec', version = '3.1.2', default-features = false, features = ['derive'] } scale-info = { version = "2.1.1", default-features = false, features = ["derive"] } -sp-arithmetic = { package = 'sp-arithmetic', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -sp-std = { package = 'sp-std', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -frame-support = { package = 'frame-support', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -frame-system = { package = 'frame-system', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -balances = { package = 'pallet-balances', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -sp-runtime = { package = 'sp-runtime', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} +sp-arithmetic = { package = 'sp-arithmetic', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +sp-std = { package = 'sp-std', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +frame-support = { package = 'frame-support', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +frame-system = { package = 'frame-system', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +balances = { package = 'pallet-balances', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +sp-runtime = { package = 'sp-runtime', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} common = { package = 'pallet-common', default-features = false, path = '../common'} staking-handler = { package = 'pallet-staking-handler', default-features = false, path = '../staking-handler'} static_assertions = "1.1.0" # Benchmarking -frame-benchmarking = { package = 'frame-benchmarking', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522', optional = true} +frame-benchmarking = { package = 'frame-benchmarking', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9', optional = true} council = { package = 'pallet-council', default-features = false, path = '../council'} referendum = { package = 'pallet-referendum', default-features = false, path = '../referendum'} membership = { package = 'pallet-membership', default-features = false, path = '../membership'} -sp-core = { package = 'sp-core', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} +sp-core = { package = 'sp-core', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} [dev-dependencies] -pallet-timestamp = { package = 'pallet-timestamp', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -sp-io = { package = 'sp-io', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -sp-core = { package = 'sp-core', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -sp-runtime = { package = 'sp-runtime', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} +pallet-timestamp = { package = 'pallet-timestamp', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +sp-io = { package = 'sp-io', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +sp-core = { package = 'sp-core', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +sp-runtime = { package = 'sp-runtime', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} membership = { package = 'pallet-membership', default-features = false, path = '../membership'} council = { package = 'pallet-council', default-features = false, path = '../council'} staking-handler = { package = 'pallet-staking-handler', default-features = false, path = '../staking-handler'} @@ -38,10 +38,10 @@ staking-handler = { package = 'pallet-staking-handler', default-features = false default = ['std'] runtime-benchmarks = [ "common/runtime-benchmarks", - "frame-benchmarking", + "frame-benchmarking/runtime-benchmarks", "sp-runtime/runtime-benchmarks", "council/runtime-benchmarks", - "membership/runtime-benchmarks" + "membership/runtime-benchmarks", ] std = [ @@ -58,4 +58,6 @@ std = [ 'referendum/std', 'council/std', 'staking-handler/std', -] \ No newline at end of file + 'frame-benchmarking?/std', +] +try-runtime = [ "frame-support/try-runtime"] \ No newline at end of file diff --git a/runtime-modules/bounty/src/actors.rs b/runtime-modules/bounty/src/actors.rs index b914fc6253..c58fbe0af2 100644 --- a/runtime-modules/bounty/src/actors.rs +++ b/runtime-modules/bounty/src/actors.rs @@ -27,7 +27,7 @@ pub(crate) enum BountyActorManager { impl BountyActorManager { // Construct BountyActor by extrinsic origin and optional member_id. pub(crate) fn ensure_bounty_actor_manager( - origin: T::Origin, + origin: T::RuntimeOrigin, actor: BountyActor>, ) -> Result, DispatchError> { match actor { diff --git a/runtime-modules/bounty/src/benchmarking.rs b/runtime-modules/bounty/src/benchmarking.rs index 784956bf9f..eecd81d4c6 100644 --- a/runtime-modules/bounty/src/benchmarking.rs +++ b/runtime-modules/bounty/src/benchmarking.rs @@ -8,7 +8,7 @@ use crate::{ use balances::Pallet as Balances; use common::council::CouncilBudgetManager; use core::convert::TryInto; -use frame_benchmarking::{account, benchmarks}; +use frame_benchmarking::v1::{account, benchmarks}; use frame_support::storage::{StorageDoubleMap, StorageMap, StorageValue}; use frame_support::traits::{Currency, Get, OnFinalize, OnInitialize}; use frame_system::Pallet as System; @@ -36,23 +36,23 @@ pub fn run_to_block(target_block: T::BlockNumber) { } } -fn assert_last_event(generic_event: ::Event) { +fn assert_last_event(generic_event: ::RuntimeEvent) { let events = System::::events(); - let system_event: ::Event = generic_event.into(); + let system_event: ::RuntimeEvent = generic_event.into(); // compare to the last event record let EventRecord { event, .. } = &events[events.len() - 1]; assert_eq!(event, &system_event); } -fn assert_was_fired(generic_event: ::Event) { +fn assert_was_fired(generic_event: ::RuntimeEvent) { let events = System::::events(); - let system_event: ::Event = generic_event.into(); + let system_event: ::RuntimeEvent = generic_event.into(); assert!(events.iter().any(|ev| ev.event == system_event)); } fn get_byte(num: u128, byte_number: u8) -> u8 { - ((num & (0xff << (8 * byte_number))) >> (8 * byte_number) as u8) + ((num & (0xff << (8 * byte_number))) >> (8 * byte_number)) .try_into() .unwrap() } diff --git a/runtime-modules/bounty/src/lib.rs b/runtime-modules/bounty/src/lib.rs index 05d407da38..94d9ee1b27 100644 --- a/runtime-modules/bounty/src/lib.rs +++ b/runtime-modules/bounty/src/lib.rs @@ -121,7 +121,7 @@ use sp_runtime::{Perbill, SaturatedConversion}; use sp_std::clone::Clone; use sp_std::collections::{btree_map::BTreeMap, btree_set::BTreeSet}; use sp_std::convert::{TryFrom, TryInto}; -use sp_std::vec::Vec; +use sp_std::{vec, vec::Vec}; use staking_handler::StakingHandler; /// Main pallet-bounty trait. @@ -129,7 +129,7 @@ pub trait Config: frame_system::Config + balances::Config + common::membership::MembershipTypes { /// Events - type Event: From> + Into<::Event>; + type RuntimeEvent: From> + Into<::RuntimeEvent>; /// The bounty's module id, used for deriving its sovereign account ID. type ModuleId: Get; @@ -141,7 +141,7 @@ pub trait Config: /// providers controller id for a member. type Membership: StakingAccountValidator + MembershipInfoProvider - + MemberOriginValidator, Self::AccountId>; + + MemberOriginValidator, Self::AccountId>; /// Weight information for extrinsics in this pallet. type WeightInfo: WeightInfo; @@ -912,7 +912,7 @@ decl_error! { decl_module! { /// Bounty pallet Substrate Module - pub struct Module for enum Call where origin: T::Origin { + pub struct Module for enum Call where origin: T::RuntimeOrigin { /// Predefined errors type Error = Error; @@ -1675,7 +1675,7 @@ decl_module! { ) { let _ = BountyActorManager::::ensure_bounty_actor_manager(origin, contributor.clone())?; ensure!( - BountyContributions::::contains_key(&bounty_id, &contributor), + BountyContributions::::contains_key(bounty_id, &contributor), Error::::InvalidContributorActorSpecified, ); @@ -1813,7 +1813,7 @@ impl Module { bounty_funder_manager.transfer_funds_from_bounty_account(*bounty_id, withdrawal_amount); - >::remove(&bounty_id, &funder); + >::remove(bounty_id, &funder); Self::deposit_event(RawEvent::FunderStateBloatBondWithdrawn( *bounty_id, @@ -1834,7 +1834,7 @@ impl Module { .transfer_funds_from_bounty_account(*bounty_id, funding.funder_state_bloat_bond_amount); //Remove contribution from - >::remove(&bounty_id, &funder); + >::remove(bounty_id, &funder); Self::deposit_event(RawEvent::FunderStateBloatBondWithdrawn( *bounty_id, @@ -1930,7 +1930,7 @@ impl Module { } fn ensure_switch_oracle_actors( - origin: T::Origin, + origin: T::RuntimeOrigin, current_oracle: BountyActor>, new_oracle: BountyActor>, ) -> Result>, DispatchError> { @@ -2036,11 +2036,11 @@ impl Module { funder: &BountyActor>, ) -> Result, DispatchError> { ensure!( - >::contains_key(&bounty_id, &funder), + >::contains_key(bounty_id, funder), Error::::NoBountyContributionFound, ); - let funding = >::get(&bounty_id, &funder); + let funding = >::get(bounty_id, funder); Ok(funding) } @@ -2146,10 +2146,10 @@ impl Module { //Check if is the first time a funder is contributiong //returns Contribution - match >::contains_key(&bounty_id, &funder) { + match >::contains_key(bounty_id, funder) { //Adds funds to an existing amount, is_first_contribution will be set to false true => ( - Self::contribution_by_bounty_by_actor(bounty_id, &funder), + Self::contribution_by_bounty_by_actor(bounty_id, funder), adjusted_amount, adjusted_amount, ), @@ -2382,3 +2382,10 @@ impl Module { ) } } + +impl frame_support::traits::Hooks for Pallet { + #[cfg(feature = "try-runtime")] + fn try_state(_: T::BlockNumber) -> Result<(), &'static str> { + Ok(()) + } +} diff --git a/runtime-modules/bounty/src/tests/fixtures.rs b/runtime-modules/bounty/src/tests/fixtures.rs index ab3ecdc3b0..94a25ee088 100644 --- a/runtime-modules/bounty/src/tests/fixtures.rs +++ b/runtime-modules/bounty/src/tests/fixtures.rs @@ -1,4 +1,4 @@ -use super::mocks::{Balances, Bounty, Event, System, Test}; +use super::mocks::{Balances, Bounty, RuntimeEvent, System, Test}; use crate::{ AssuranceContractType, BountyActor, BountyCreationParameters, BountyMilestone, BountyRecord, ClosedContractWhitelist, Config, Entry, FundingType, OracleJudgmentOf, RawEvent, @@ -41,7 +41,7 @@ pub fn increase_total_balance_issuance_using_account_id(account_id: u128, balanc } pub fn increase_account_balance(account_id: &u128, balance: u64) { - let _ = Balances::deposit_creating(&account_id, balance); + let _ = Balances::deposit_creating(account_id, balance); } pub fn get_funder_state_bloat_bond_amount() -> u64 { @@ -65,7 +65,7 @@ impl EventFixture { OracleJudgmentOf, >, ) { - let converted_event = Event::Bounty(expected_raw_event); + let converted_event = RuntimeEvent::Bounty(expected_raw_event); Self::assert_last_global_event(converted_event) } @@ -81,12 +81,12 @@ impl EventFixture { OracleJudgmentOf, >, ) { - let converted_event = Event::Bounty(expected_raw_event); + let converted_event = RuntimeEvent::Bounty(expected_raw_event); Self::contains_global_event(converted_event) } - pub fn assert_last_global_event(expected_event: Event) { + pub fn assert_last_global_event(expected_event: RuntimeEvent) { let expected_event = EventRecord { phase: Phase::Initialization, event: expected_event, @@ -96,7 +96,7 @@ impl EventFixture { assert_eq!(System::events().pop().unwrap(), expected_event); } - fn contains_global_event(expected_event: Event) { + fn contains_global_event(expected_event: RuntimeEvent) { let expected_event = EventRecord { phase: Phase::Initialization, event: expected_event, @@ -263,7 +263,7 @@ impl CreateBountyFixture { if actual_result.is_ok() { assert_eq!(next_bounty_count_value, Bounty::bounty_count()); - assert!(>::contains_key(&bounty_id)); + assert!(>::contains_key(bounty_id)); let expected_milestone = match self.expected_milestone.clone() { Some(milestone) => milestone, @@ -284,7 +284,7 @@ impl CreateBountyFixture { assert_eq!(expected_bounty, Bounty::bounties(bounty_id)); } else { assert_eq!(next_bounty_count_value - 1, Bounty::bounty_count()); - assert!(!>::contains_key(&bounty_id)); + assert!(!>::contains_key(bounty_id)); } } } @@ -341,8 +341,8 @@ impl FundBountyFixture { let actual_result = Bounty::fund_bounty( self.origin.clone().into(), self.funder.clone(), - self.bounty_id.clone(), - self.amount.clone(), + self.bounty_id, + self.amount, ); assert_eq!(actual_result, expected_result); @@ -410,7 +410,7 @@ impl WithdrawFundingFixture { let actual_result = Bounty::withdraw_funding( self.origin.clone().into(), self.funder.clone(), - self.bounty_id.clone(), + self.bounty_id, ); assert_eq!(actual_result, expected_result); @@ -482,7 +482,7 @@ impl AnnounceWorkEntryFixture { assert_eq!(next_entry_count_value, Bounty::entry_count()); assert!(>::contains_key( self.bounty_id, - &entry_id + entry_id )); let expected_entry = Entry:: { @@ -504,7 +504,7 @@ impl AnnounceWorkEntryFixture { assert_eq!(next_entry_count_value - 1, Bounty::entry_count()); assert!(!>::contains_key( self.bounty_id, - &entry_id + entry_id )); assert_eq!( @@ -773,7 +773,7 @@ impl WithdrawEntrantStakeFixture { if actual_result.is_ok() { assert!(!>::contains_key( self.bounty_id, - &self.entry_id + self.entry_id )); if >::contains_key(self.bounty_id) { @@ -806,7 +806,7 @@ impl WithdrawOracleRewardFixture { pub fn call_and_assert(&self, expected_result: DispatchResult) { let actual_result = - Bounty::withdraw_oracle_reward(self.origin.clone().into(), self.bounty_id.clone()); + Bounty::withdraw_oracle_reward(self.origin.clone().into(), self.bounty_id); assert_eq!(actual_result, expected_result); } diff --git a/runtime-modules/bounty/src/tests/mocks.rs b/runtime-modules/bounty/src/tests/mocks.rs index 13dc144106..3c960c309c 100644 --- a/runtime-modules/bounty/src/tests/mocks.rs +++ b/runtime-modules/bounty/src/tests/mocks.rs @@ -1,7 +1,7 @@ #![cfg(test)] use frame_support::dispatch::{DispatchError, DispatchResult}; -use frame_support::traits::{ConstU32, Currency, EnsureOneOf, LockIdentifier}; +use frame_support::traits::{ConstU32, Currency, EitherOfDiverse, LockIdentifier}; use frame_support::{ensure, parameter_types, PalletId}; use frame_system::{ensure_signed, EnsureRoot, EnsureSigned}; use sp_core::H256; @@ -51,8 +51,8 @@ impl frame_system::Config for Test { type BaseCallFilter = frame_support::traits::Everything; type BlockWeights = (); type BlockLength = (); - type Origin = Origin; - type Call = Call; + type RuntimeOrigin = RuntimeOrigin; + type RuntimeCall = RuntimeCall; type Index = u64; type BlockNumber = u64; type Hash = H256; @@ -60,7 +60,7 @@ impl frame_system::Config for Test { type AccountId = u128; type Lookup = IdentityLookup; type Header = Header; - type Event = Event; + type RuntimeEvent = RuntimeEvent; type BlockHashCount = BlockHashCount; type DbWeight = (); type Version = (); @@ -75,7 +75,7 @@ impl frame_system::Config for Test { } impl Config for Test { - type Event = Event; + type RuntimeEvent = RuntimeEvent; type ModuleId = BountyModuleId; type BountyId = u64; type Membership = (); @@ -145,9 +145,9 @@ impl common::membership::MembershipTypes for Test { type ActorId = u64; } -impl common::membership::MemberOriginValidator for () { +impl common::membership::MemberOriginValidator for () { fn ensure_member_controller_account_origin( - origin: Origin, + origin: RuntimeOrigin, member_id: u64, ) -> Result { let sender = ensure_signed(origin)?; @@ -184,7 +184,7 @@ impl pallet_timestamp::Config for Test { } impl membership::Config for Test { - type Event = Event; + type RuntimeEvent = RuntimeEvent; type DefaultMembershipPrice = DefaultMembershipPrice; type ReferralCutMaximumPercent = ReferralCutMaximumPercent; type WorkingGroup = Wg; @@ -224,13 +224,15 @@ impl common::working_group::WorkingGroupBudgetHandler for Wg { impl common::working_group::WorkingGroupAuthenticator for Wg { fn ensure_worker_origin( - _origin: ::Origin, + _origin: ::RuntimeOrigin, _worker_id: &::ActorId, ) -> DispatchResult { unimplemented!(); } - fn ensure_leader_origin(_origin: ::Origin) -> DispatchResult { + fn ensure_leader_origin( + _origin: ::RuntimeOrigin, + ) -> DispatchResult { unimplemented!() } @@ -274,7 +276,7 @@ parameter_types! { impl balances::Config for Test { type Balance = u64; type DustRemoval = (); - type Event = Event; + type RuntimeEvent = RuntimeEvent; type ExistentialDeposit = ExistentialDeposit; type AccountStore = System; type MaxReserves = ConstU32<2>; @@ -300,7 +302,7 @@ parameter_types! { pub type ReferendumInstance = referendum::Instance1; impl council::Config for Test { - type Event = Event; + type RuntimeEvent = RuntimeEvent; type Referendum = referendum::Pallet; type MinNumberOfExtraCandidates = MinNumberOfExtraCandidates; type CouncilSize = CouncilSize; @@ -328,10 +330,11 @@ parameter_types! { } impl referendum::Config for Test { - type Event = Event; + type RuntimeEvent = RuntimeEvent; type MaxSaltLength = MaxSaltLength; type StakingHandler = staking_handler::StakingManager; - type ManagerOrigin = EnsureOneOf, EnsureRoot>; + type ManagerOrigin = + EitherOfDiverse, EnsureRoot>; type VotePower = u64; type VoteStageDuration = VoteStageDuration; type RevealStageDuration = RevealStageDuration; @@ -357,7 +360,7 @@ impl referendum::Config for Test { .iter() .map(|item| referendum::OptionResult { option_id: item.option_id, - vote_power: item.vote_power.into(), + vote_power: item.vote_power, }) .collect(); as council::ReferendumConnection>::recieve_referendum_results( diff --git a/runtime-modules/bounty/src/tests/mod.rs b/runtime-modules/bounty/src/tests/mod.rs index 4a095bad87..3d8865e794 100644 --- a/runtime-modules/bounty/src/tests/mod.rs +++ b/runtime-modules/bounty/src/tests/mod.rs @@ -538,11 +538,11 @@ fn terminate_bounty_by_creator_succeeds() { EventFixture::contains_crate_event(RawEvent::BountyRemoved(bounty_id)); assert!(!>::contains_key( - &bounty_id, + bounty_id, BountyActor::Member(member_id) )); - assert!(!>::contains_key(&bounty_id)); + assert!(!>::contains_key(bounty_id)); }); } @@ -588,7 +588,7 @@ fn terminate_bounty_w_oracle_reward_funding_expired_succeeds() { BountyActor::Council, )); - assert!(>::contains_key(&bounty_id)); + assert!(>::contains_key(bounty_id)); let bounty = Bounty::ensure_bounty_exists(&bounty_id).unwrap(); assert_eq!( Bounty::get_bounty_stage(&bounty), @@ -637,11 +637,11 @@ fn terminate_bounty_wo_oracle_reward_funding_expired_succeeds() { EventFixture::contains_crate_event(RawEvent::BountyRemoved(bounty_id)); assert!(!>::contains_key( - &bounty_id, + bounty_id, BountyActor::Council )); - assert!(!>::contains_key(&bounty_id)); + assert!(!>::contains_key(bounty_id)); }); } @@ -688,7 +688,7 @@ fn terminate_bounty_w_oracle_reward_wo_funds_funding_succeeds() { BountyActor::Council, )); - assert!(>::contains_key(&bounty_id)); + assert!(>::contains_key(bounty_id)); let bounty = Bounty::ensure_bounty_exists(&bounty_id).unwrap(); assert_eq!( @@ -740,11 +740,11 @@ fn terminate_bounty_wo_oracle_reward_wo_funds_funding_succeeds() { EventFixture::contains_crate_event(RawEvent::BountyRemoved(bounty_id)); assert!(!>::contains_key( - &bounty_id, + bounty_id, BountyActor::Council )); - assert!(!>::contains_key(&bounty_id)); + assert!(!>::contains_key(bounty_id)); }); } @@ -802,7 +802,7 @@ fn terminate_bounty_w_oracle_reward_w_funds_funding_succeeds() { BountyActor::Council, )); - assert!(>::contains_key(&bounty_id)); + assert!(>::contains_key(bounty_id)); let bounty = Bounty::ensure_bounty_exists(&bounty_id).unwrap(); assert_eq!( @@ -864,7 +864,7 @@ fn terminate_bounty_wo_oracle_reward_w_funds_funding_succeeds() { BountyActor::Council, )); - assert!(>::contains_key(&bounty_id)); + assert!(>::contains_key(bounty_id)); let bounty = Bounty::ensure_bounty_exists(&bounty_id).unwrap(); assert_eq!( @@ -1242,7 +1242,7 @@ fn terminate_bounty_fails_with_invalid_stage() { SubmitJudgmentFixture::default() .with_bounty_id(bounty_id) - .with_judgment(judgment.clone()) + .with_judgment(judgment) .call_and_assert(Ok(())); TerminateBountyFixture::default().call_and_assert(Err( @@ -1734,7 +1734,7 @@ fn fund_bounty_fails_with_invalid_stage() { SubmitJudgmentFixture::default() .with_bounty_id(bounty_id) - .with_judgment(judgment.clone()) + .with_judgment(judgment) .call_and_assert(Ok(())); FundBountyFixture::default() @@ -2100,7 +2100,7 @@ fn end_working_period_invalid_stage_fails() { SubmitJudgmentFixture::default() .with_bounty_id(bounty_id) - .with_judgment(judgment.clone()) + .with_judgment(judgment) .call_and_assert(Ok(())); EndWorkPeriodFixture::default() @@ -2236,7 +2236,7 @@ fn withdraw_funding_member_with_failed_bounty_with_no_removal() { get_funder_state_bloat_bond_amount(), )); - assert!(>::contains_key(&bounty_id)); + assert!(>::contains_key(bounty_id)); }); } @@ -2298,7 +2298,7 @@ fn withdraw_funding_council_with_failed_bounty_with_no_removal() { get_funder_state_bloat_bond_amount(), )); - assert!(>::contains_key(&bounty_id)); + assert!(>::contains_key(bounty_id)); }); } @@ -2363,11 +2363,11 @@ fn withdraw_funding_member_with_failed_bounty_with_removal() { EventFixture::assert_last_crate_event(RawEvent::BountyRemoved(bounty_id)); assert!(!>::contains_key( - &bounty_id, + bounty_id, BountyActor::Member(member_id) )); - assert!(!>::contains_key(&bounty_id)); + assert!(!>::contains_key(bounty_id)); }); } @@ -2846,7 +2846,7 @@ fn withdraw_funding_state_bloat_bond_with_successful_bounty_with_no_removal() { get_funder_state_bloat_bond_amount(), )); - assert!(>::contains_key(&bounty_id)); + assert!(>::contains_key(bounty_id)); }); } @@ -2997,16 +2997,16 @@ fn withdraw_funding_state_bloat_bond_with_successful_bounty_removal() { EventFixture::assert_last_crate_event(RawEvent::BountyRemoved(bounty_id)); assert!(!>::contains_key( - &bounty_id, + bounty_id, BountyActor::Member(funder_member_id) )); assert!(!>::contains_key( - &bounty_id, + bounty_id, BountyActor::Council )); - assert!(!>::contains_key(&bounty_id)); + assert!(!>::contains_key(bounty_id)); }); } @@ -3306,7 +3306,7 @@ fn announce_work_entry_fails_with_invalid_stage() { SubmitJudgmentFixture::default() .with_bounty_id(bounty_id) - .with_judgment(judgment.clone()) + .with_judgment(judgment) .call_and_assert(Ok(())); AnnounceWorkEntryFixture::default().call_and_assert(Err( @@ -3670,7 +3670,7 @@ fn submit_work_fails_with_invalid_stage() { SubmitJudgmentFixture::default() .with_bounty_id(bounty_id) - .with_judgment(judgment.clone()) + .with_judgment(judgment) .call_and_assert(Ok(())); SubmitWorkFixture::default() @@ -3803,7 +3803,7 @@ fn submit_judgment_by_member_succeeded() { .with_origin(RawOrigin::Signed(work_account_id_1)) .with_member_id(work_member_id_1) .with_entry_id(entry_id_1) - .with_work_data(work_data.clone()) + .with_work_data(work_data) .call_and_assert(Ok(())); EndWorkPeriodFixture::default() @@ -3916,7 +3916,7 @@ fn submit_judgment_by_council_succeeded_with_complex_judgment() { .with_origin(RawOrigin::Signed(worker_account_id_1)) .with_member_id(worker_member_id_1) .with_entry_id(entry_id_1) - .with_work_data(work_data.clone()) + .with_work_data(work_data) .call_and_assert(Ok(())); let worker_member_id_2 = 2; @@ -3937,7 +3937,7 @@ fn submit_judgment_by_council_succeeded_with_complex_judgment() { .with_origin(RawOrigin::Signed(worker_account_id_2)) .with_member_id(worker_member_id_2) .with_entry_id(entry_id_2) - .with_work_data(work_data.clone()) + .with_work_data(work_data) .call_and_assert(Ok(())); let worker_member_id_3 = 3; @@ -4116,7 +4116,7 @@ fn submit_judgment_by_member_succeeded_with_complex_judgment() { .with_origin(RawOrigin::Signed(worker_account_id_1)) .with_member_id(worker_member_id_1) .with_entry_id(entry_id_1) - .with_work_data(work_data.clone()) + .with_work_data(work_data) .call_and_assert(Ok(())); let worker_member_id_2 = 2; @@ -4137,7 +4137,7 @@ fn submit_judgment_by_member_succeeded_with_complex_judgment() { .with_origin(RawOrigin::Signed(worker_account_id_2)) .with_member_id(worker_member_id_2) .with_entry_id(entry_id_2) - .with_work_data(work_data.clone()) + .with_work_data(work_data) .call_and_assert(Ok(())); let worker_member_id_3 = 3; @@ -4323,7 +4323,7 @@ fn submit_judgment_dont_return_cherry_on_unsuccessful_bounty() { .with_origin(RawOrigin::Signed(worker_account_id)) .with_member_id(worker_member_id) .with_entry_id(entry_id) - .with_work_data(work_data.clone()) + .with_work_data(work_data) .call_and_assert(Ok(())); EndWorkPeriodFixture::default() @@ -4623,7 +4623,7 @@ fn submit_judgment_fails_with_invalid_stage() { SubmitJudgmentFixture::default() .with_bounty_id(bounty_id) - .with_judgment(judgment.clone()) + .with_judgment(judgment) .call_and_assert(Ok(())); SubmitJudgmentFixture::default().call_and_assert(Err( @@ -4687,7 +4687,7 @@ fn submit_judgment_fails_with_invalid_judgment() { .with_origin(RawOrigin::Signed(account_id)) .with_member_id(member_id) .with_entry_id(entry_id) - .with_work_data(work_data.clone()) + .with_work_data(work_data) .call_and_assert(Ok(())); EndWorkPeriodFixture::default() @@ -5311,7 +5311,7 @@ fn withdraw_entrant_stake_succeeds_after_terminating_in_working_period() { worker_account_id_2, )); - assert!(Bounties::::contains_key(&bounty_id)); + assert!(Bounties::::contains_key(bounty_id)); }); } @@ -5450,7 +5450,7 @@ fn withdraw_entrant_stake_succeeds_after_terminating_in_judging_period() { entry_id_2, worker_account_id_2, )); - assert!(Bounties::::contains_key(&bounty_id)); + assert!(Bounties::::contains_key(bounty_id)); }); } @@ -5594,7 +5594,7 @@ fn withdraw_entrant_stake_succeeds_after_judging() { entry_id_2, worker_account_id_2, )); - assert!(Bounties::::contains_key(&bounty_id)); + assert!(Bounties::::contains_key(bounty_id)); }); } @@ -5867,11 +5867,11 @@ fn withdraw_oracle_reward_cancelled_bounty_succeeds() { BountyActor::Council, )); - assert!(>::contains_key(&bounty_id)); + assert!(>::contains_key(bounty_id)); WithdrawOracleRewardFixture::default().call_and_assert(Ok(())); - assert!(!>::contains_key(&bounty_id)); + assert!(!>::contains_key(bounty_id)); EventFixture::contains_crate_event(RawEvent::BountyOracleRewardWithdrawal( bounty_id, @@ -5888,11 +5888,11 @@ fn withdraw_oracle_reward_cancelled_bounty_succeeds() { EventFixture::assert_last_crate_event(RawEvent::BountyRemoved(bounty_id)); assert!(!>::contains_key( - &bounty_id, + bounty_id, BountyActor::Council )); - assert!(!>::contains_key(&bounty_id)); + assert!(!>::contains_key(bounty_id)); }); } @@ -5972,7 +5972,7 @@ fn withdraw_oracle_reward_successful_bounty_succeeds() { WithdrawOracleRewardFixture::default().call_and_assert(Ok(())); - assert!(!>::contains_key(&bounty_id)); + assert!(!>::contains_key(bounty_id)); EventFixture::contains_crate_event(RawEvent::BountyOracleRewardWithdrawal( bounty_id, @@ -5989,11 +5989,11 @@ fn withdraw_oracle_reward_successful_bounty_succeeds() { EventFixture::assert_last_crate_event(RawEvent::BountyRemoved(bounty_id)); assert!(!>::contains_key( - &bounty_id, + bounty_id, BountyActor::Council )); - assert!(!>::contains_key(&bounty_id)); + assert!(!>::contains_key(bounty_id)); }); } @@ -6036,7 +6036,7 @@ fn withdraw_oracle_reward_failed_bounty_succeeds() { .with_origin(RawOrigin::Signed(oracle_account_id)) .call_and_assert(Ok(())); - assert!(!>::contains_key(&bounty_id)); + assert!(!>::contains_key(bounty_id)); EventFixture::contains_crate_event(RawEvent::BountyOracleRewardWithdrawal( bounty_id, @@ -6053,11 +6053,11 @@ fn withdraw_oracle_reward_failed_bounty_succeeds() { EventFixture::assert_last_crate_event(RawEvent::BountyRemoved(bounty_id)); assert!(!>::contains_key( - &bounty_id, + bounty_id, BountyActor::Council )); - assert!(!>::contains_key(&bounty_id)); + assert!(!>::contains_key(bounty_id)); }); } diff --git a/runtime-modules/bounty/src/weights.rs b/runtime-modules/bounty/src/weights.rs index 8a7af6c603..e6052f7a5d 100644 --- a/runtime-modules/bounty/src/weights.rs +++ b/runtime-modules/bounty/src/weights.rs @@ -18,22 +18,21 @@ //! Autogenerated weights for bounty //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-10-20, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("dev"), DB CACHE: 1024 +//! DATE: 2023-11-07, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("prod-test"), DB CACHE: 1024 // Executed Command: -// ./../target/release/joystream-node +// ./scripts/../target/release/joystream-node // benchmark // pallet -// --base-path=/mnt/disks/local-ssd/ // --pallet=bounty // --extrinsic=* -// --chain=dev +// --chain=prod-test // --steps=50 // --repeat=20 // --execution=wasm -// --template=./../devops/joystream-pallet-weight-template.hbs -// --output=./../runtime-modules/bounty/src/weights.rs +// --template=./scripts/../devops/joystream-pallet-weight-template.hbs +// --output=./scripts/../runtime-modules/bounty/src/weights.rs #![cfg_attr(rustfmt, rustfmt_skip)] #![allow(unused_parens)] @@ -83,415 +82,700 @@ pub trait WeightInfo { pub struct SubstrateWeight(PhantomData); impl WeightInfo for SubstrateWeight { // Storage: Membership MembershipById (r:50 w:0) + // Proof: Membership MembershipById (max_values: None, max_size: Some(125), added: 2600, mode: MaxEncodedLen) // Storage: Council Budget (r:1 w:1) + // Proof: Council Budget (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) // Storage: Bounty BountyCount (r:1 w:1) + // Proof: Bounty BountyCount (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) // Storage: System Account (r:1 w:1) + // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) // Storage: Bounty Bounties (r:0 w:1) + // Proof: Bounty Bounties (max_values: None, max_size: Some(540), added: 3015, mode: MaxEncodedLen) + /// The range of component `i` is `[1, 100]`. + /// The range of component `j` is `[1, 50]`. fn create_bounty_by_council(i: u32, j: u32, ) -> Weight { - (66_826_000 as Weight) - // Standard Error: 3_000 - .saturating_add((594_000 as Weight).saturating_mul(i as Weight)) - // Standard Error: 8_000 - .saturating_add((5_110_000 as Weight).saturating_mul(j as Weight)) - .saturating_add(T::DbWeight::get().reads(3 as Weight)) - .saturating_add(T::DbWeight::get().reads((1 as Weight).saturating_mul(j as Weight))) - .saturating_add(T::DbWeight::get().writes(4 as Weight)) + // Proof Size summary in bytes: + // Measured: `463 + j * (134 ±0)` + // Estimated: `7573 + j * (2600 ±0)` + // Minimum execution time: 138_654 nanoseconds. + Weight::from_parts(51_643_462, 0u64) + .saturating_add(Weight::from_parts(0, 7573)) + // Standard Error: 5_598 + .saturating_add(Weight::from_parts(874_845, 0u64).saturating_mul(i.into())) + // Standard Error: 11_335 + .saturating_add(Weight::from_parts(4_144_602, 0u64).saturating_mul(j.into())) + .saturating_add(T::DbWeight::get().reads(3_u64)) + .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(j.into()))) + .saturating_add(T::DbWeight::get().writes(4_u64)) + .saturating_add(Weight::from_parts(0, 2600).saturating_mul(j.into())) } // Storage: Membership MembershipById (r:51 w:0) + // Proof: Membership MembershipById (max_values: None, max_size: Some(125), added: 2600, mode: MaxEncodedLen) // Storage: System Account (r:2 w:2) + // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) // Storage: Bounty BountyCount (r:1 w:1) + // Proof: Bounty BountyCount (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) // Storage: Bounty Bounties (r:0 w:1) + // Proof: Bounty Bounties (max_values: None, max_size: Some(540), added: 3015, mode: MaxEncodedLen) + /// The range of component `i` is `[1, 100]`. + /// The range of component `j` is `[1, 50]`. fn create_bounty_by_member(i: u32, j: u32, ) -> Weight { - (67_970_000 as Weight) - // Standard Error: 4_000 - .saturating_add((671_000 as Weight).saturating_mul(i as Weight)) - // Standard Error: 10_000 - .saturating_add((5_173_000 as Weight).saturating_mul(j as Weight)) - .saturating_add(T::DbWeight::get().reads(4 as Weight)) - .saturating_add(T::DbWeight::get().reads((1 as Weight).saturating_mul(j as Weight))) - .saturating_add(T::DbWeight::get().writes(4 as Weight)) + // Proof Size summary in bytes: + // Measured: `437 + j * (136 ±0)` + // Estimated: `11275 + j * (2600 ±0)` + // Minimum execution time: 144_759 nanoseconds. + Weight::from_parts(64_907_990, 0u64) + .saturating_add(Weight::from_parts(0, 11275)) + // Standard Error: 5_174 + .saturating_add(Weight::from_parts(816_534, 0u64).saturating_mul(i.into())) + // Standard Error: 10_476 + .saturating_add(Weight::from_parts(4_016_529, 0u64).saturating_mul(j.into())) + .saturating_add(T::DbWeight::get().reads(4_u64)) + .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(j.into()))) + .saturating_add(T::DbWeight::get().writes(4_u64)) + .saturating_add(Weight::from_parts(0, 2600).saturating_mul(j.into())) } // Storage: Bounty Bounties (r:1 w:1) + // Proof: Bounty Bounties (max_values: None, max_size: Some(540), added: 3015, mode: MaxEncodedLen) // Storage: Bounty BountyContributions (r:1 w:0) + // Proof: Bounty BountyContributions (max_values: None, max_size: Some(81), added: 2556, mode: MaxEncodedLen) // Storage: System Account (r:1 w:1) + // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) // Storage: Council Budget (r:1 w:1) + // Proof: Council Budget (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) fn terminate_bounty_w_oracle_reward_funding_expired() -> Weight { - (56_590_000 as Weight) - .saturating_add(T::DbWeight::get().reads(4 as Weight)) - .saturating_add(T::DbWeight::get().writes(3 as Weight)) + // Proof Size summary in bytes: + // Measured: `556` + // Estimated: `12645` + // Minimum execution time: 53_725 nanoseconds. + Weight::from_parts(54_982_000, 0u64) + .saturating_add(Weight::from_parts(0, 12645)) + .saturating_add(T::DbWeight::get().reads(4_u64)) + .saturating_add(T::DbWeight::get().writes(3_u64)) } // Storage: Bounty Bounties (r:1 w:1) + // Proof: Bounty Bounties (max_values: None, max_size: Some(540), added: 3015, mode: MaxEncodedLen) // Storage: Bounty BountyContributions (r:1 w:0) + // Proof: Bounty BountyContributions (max_values: None, max_size: Some(81), added: 2556, mode: MaxEncodedLen) // Storage: System Account (r:1 w:1) + // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) // Storage: Council Budget (r:1 w:1) + // Proof: Council Budget (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) fn terminate_bounty_wo_oracle_reward_funding_expired() -> Weight { - (83_450_000 as Weight) - .saturating_add(T::DbWeight::get().reads(4 as Weight)) - .saturating_add(T::DbWeight::get().writes(3 as Weight)) + // Proof Size summary in bytes: + // Measured: `556` + // Estimated: `12645` + // Minimum execution time: 79_024 nanoseconds. + Weight::from_parts(80_811_000, 0u64) + .saturating_add(Weight::from_parts(0, 12645)) + .saturating_add(T::DbWeight::get().reads(4_u64)) + .saturating_add(T::DbWeight::get().writes(3_u64)) } // Storage: Bounty Bounties (r:1 w:1) + // Proof: Bounty Bounties (max_values: None, max_size: Some(540), added: 3015, mode: MaxEncodedLen) // Storage: Bounty BountyContributions (r:1 w:0) + // Proof: Bounty BountyContributions (max_values: None, max_size: Some(81), added: 2556, mode: MaxEncodedLen) // Storage: System Account (r:1 w:1) + // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) // Storage: Council Budget (r:1 w:1) + // Proof: Council Budget (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) fn terminate_bounty_w_oracle_reward_wo_funds_funding() -> Weight { - (56_290_000 as Weight) - .saturating_add(T::DbWeight::get().reads(4 as Weight)) - .saturating_add(T::DbWeight::get().writes(3 as Weight)) + // Proof Size summary in bytes: + // Measured: `556` + // Estimated: `12645` + // Minimum execution time: 52_424 nanoseconds. + Weight::from_parts(54_699_000, 0u64) + .saturating_add(Weight::from_parts(0, 12645)) + .saturating_add(T::DbWeight::get().reads(4_u64)) + .saturating_add(T::DbWeight::get().writes(3_u64)) } // Storage: Bounty Bounties (r:1 w:1) + // Proof: Bounty Bounties (max_values: None, max_size: Some(540), added: 3015, mode: MaxEncodedLen) // Storage: Bounty BountyContributions (r:1 w:0) + // Proof: Bounty BountyContributions (max_values: None, max_size: Some(81), added: 2556, mode: MaxEncodedLen) // Storage: System Account (r:1 w:1) + // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) // Storage: Council Budget (r:1 w:1) + // Proof: Council Budget (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) fn terminate_bounty_wo_oracle_reward_wo_funds_funding() -> Weight { - (83_020_000 as Weight) - .saturating_add(T::DbWeight::get().reads(4 as Weight)) - .saturating_add(T::DbWeight::get().writes(3 as Weight)) + // Proof Size summary in bytes: + // Measured: `556` + // Estimated: `12645` + // Minimum execution time: 77_880 nanoseconds. + Weight::from_parts(79_960_000, 0u64) + .saturating_add(Weight::from_parts(0, 12645)) + .saturating_add(T::DbWeight::get().reads(4_u64)) + .saturating_add(T::DbWeight::get().writes(3_u64)) } // Storage: Bounty Bounties (r:1 w:1) + // Proof: Bounty Bounties (max_values: None, max_size: Some(540), added: 3015, mode: MaxEncodedLen) // Storage: Bounty BountyContributions (r:2 w:0) + // Proof: Bounty BountyContributions (max_values: None, max_size: Some(81), added: 2556, mode: MaxEncodedLen) fn terminate_bounty_w_oracle_reward_w_funds_funding() -> Weight { - (31_990_000 as Weight) - .saturating_add(T::DbWeight::get().reads(3 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + // Proof Size summary in bytes: + // Measured: `283` + // Estimated: `10107` + // Minimum execution time: 30_301 nanoseconds. + Weight::from_parts(31_510_000, 0u64) + .saturating_add(Weight::from_parts(0, 10107)) + .saturating_add(T::DbWeight::get().reads(3_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) } // Storage: Bounty Bounties (r:1 w:1) + // Proof: Bounty Bounties (max_values: None, max_size: Some(540), added: 3015, mode: MaxEncodedLen) // Storage: Bounty BountyContributions (r:2 w:0) + // Proof: Bounty BountyContributions (max_values: None, max_size: Some(81), added: 2556, mode: MaxEncodedLen) fn terminate_bounty_wo_oracle_reward_w_funds_funding() -> Weight { - (38_500_000 as Weight) - .saturating_add(T::DbWeight::get().reads(3 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + // Proof Size summary in bytes: + // Measured: `283` + // Estimated: `10107` + // Minimum execution time: 36_277 nanoseconds. + Weight::from_parts(37_335_000, 0u64) + .saturating_add(Weight::from_parts(0, 10107)) + .saturating_add(T::DbWeight::get().reads(3_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) } // Storage: Bounty Bounties (r:1 w:1) + // Proof: Bounty Bounties (max_values: None, max_size: Some(540), added: 3015, mode: MaxEncodedLen) // Storage: Bounty BountyContributions (r:2 w:0) + // Proof: Bounty BountyContributions (max_values: None, max_size: Some(81), added: 2556, mode: MaxEncodedLen) fn terminate_bounty_work_or_judging_period() -> Weight { - (31_911_000 as Weight) - .saturating_add(T::DbWeight::get().reads(3 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + // Proof Size summary in bytes: + // Measured: `274` + // Estimated: `10107` + // Minimum execution time: 30_836 nanoseconds. + Weight::from_parts(31_856_000, 0u64) + .saturating_add(Weight::from_parts(0, 10107)) + .saturating_add(T::DbWeight::get().reads(3_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) } // Storage: Membership MembershipById (r:1 w:0) + // Proof: Membership MembershipById (max_values: None, max_size: Some(125), added: 2600, mode: MaxEncodedLen) // Storage: Bounty Bounties (r:1 w:1) + // Proof: Bounty Bounties (max_values: None, max_size: Some(540), added: 3015, mode: MaxEncodedLen) // Storage: Bounty BountyContributions (r:1 w:1) + // Proof: Bounty BountyContributions (max_values: None, max_size: Some(81), added: 2556, mode: MaxEncodedLen) // Storage: System Account (r:2 w:2) + // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) fn fund_bounty_by_member() -> Weight { - (69_380_000 as Weight) - .saturating_add(T::DbWeight::get().reads(5 as Weight)) - .saturating_add(T::DbWeight::get().writes(4 as Weight)) + // Proof Size summary in bytes: + // Measured: `672` + // Estimated: `17337` + // Minimum execution time: 64_504 nanoseconds. + Weight::from_parts(66_865_000, 0u64) + .saturating_add(Weight::from_parts(0, 17337)) + .saturating_add(T::DbWeight::get().reads(5_u64)) + .saturating_add(T::DbWeight::get().writes(4_u64)) } // Storage: Bounty Bounties (r:1 w:1) + // Proof: Bounty Bounties (max_values: None, max_size: Some(540), added: 3015, mode: MaxEncodedLen) // Storage: Bounty BountyContributions (r:1 w:1) + // Proof: Bounty BountyContributions (max_values: None, max_size: Some(81), added: 2556, mode: MaxEncodedLen) // Storage: Council Budget (r:1 w:1) + // Proof: Council Budget (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) // Storage: System Account (r:1 w:1) + // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) fn fund_bounty_by_council() -> Weight { - (58_100_000 as Weight) - .saturating_add(T::DbWeight::get().reads(4 as Weight)) - .saturating_add(T::DbWeight::get().writes(4 as Weight)) + // Proof Size summary in bytes: + // Measured: `552` + // Estimated: `12645` + // Minimum execution time: 54_523 nanoseconds. + Weight::from_parts(56_836_000, 0u64) + .saturating_add(Weight::from_parts(0, 12645)) + .saturating_add(T::DbWeight::get().reads(4_u64)) + .saturating_add(T::DbWeight::get().writes(4_u64)) } // Storage: Membership MembershipById (r:1 w:0) + // Proof: Membership MembershipById (max_values: None, max_size: Some(125), added: 2600, mode: MaxEncodedLen) // Storage: Bounty Bounties (r:1 w:0) + // Proof: Bounty Bounties (max_values: None, max_size: Some(540), added: 3015, mode: MaxEncodedLen) // Storage: Bounty BountyContributions (r:1 w:1) + // Proof: Bounty BountyContributions (max_values: None, max_size: Some(81), added: 2556, mode: MaxEncodedLen) // Storage: System Account (r:2 w:2) + // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) fn withdraw_funding_by_member() -> Weight { - (65_930_000 as Weight) - .saturating_add(T::DbWeight::get().reads(5 as Weight)) - .saturating_add(T::DbWeight::get().writes(3 as Weight)) + // Proof Size summary in bytes: + // Measured: `779` + // Estimated: `17337` + // Minimum execution time: 61_590 nanoseconds. + Weight::from_parts(62_901_000, 0u64) + .saturating_add(Weight::from_parts(0, 17337)) + .saturating_add(T::DbWeight::get().reads(5_u64)) + .saturating_add(T::DbWeight::get().writes(3_u64)) } // Storage: Bounty Bounties (r:1 w:0) + // Proof: Bounty Bounties (max_values: None, max_size: Some(540), added: 3015, mode: MaxEncodedLen) // Storage: Bounty BountyContributions (r:1 w:1) + // Proof: Bounty BountyContributions (max_values: None, max_size: Some(81), added: 2556, mode: MaxEncodedLen) // Storage: System Account (r:1 w:1) + // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) // Storage: Council Budget (r:1 w:1) + // Proof: Council Budget (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) fn withdraw_funding_by_council() -> Weight { - (57_700_000 as Weight) - .saturating_add(T::DbWeight::get().reads(4 as Weight)) - .saturating_add(T::DbWeight::get().writes(3 as Weight)) + // Proof Size summary in bytes: + // Measured: `651` + // Estimated: `12645` + // Minimum execution time: 53_361 nanoseconds. + Weight::from_parts(54_542_000, 0u64) + .saturating_add(Weight::from_parts(0, 12645)) + .saturating_add(T::DbWeight::get().reads(4_u64)) + .saturating_add(T::DbWeight::get().writes(3_u64)) } // Storage: Membership MembershipById (r:1 w:0) + // Proof: Membership MembershipById (max_values: None, max_size: Some(125), added: 2600, mode: MaxEncodedLen) // Storage: Bounty Bounties (r:1 w:1) + // Proof: Bounty Bounties (max_values: None, max_size: Some(540), added: 3015, mode: MaxEncodedLen) // Storage: Membership StakingAccountIdMemberStatus (r:1 w:0) + // Proof: Membership StakingAccountIdMemberStatus (max_values: None, max_size: Some(57), added: 2532, mode: MaxEncodedLen) // Storage: Balances Locks (r:1 w:1) + // Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) // Storage: System Account (r:1 w:1) + // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) // Storage: Bounty EntryCount (r:1 w:1) + // Proof: Bounty EntryCount (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) // Storage: Bounty Entries (r:0 w:1) + // Proof: Bounty Entries (max_values: None, max_size: Some(93), added: 2568, mode: MaxEncodedLen) + /// The range of component `i` is `[1, 100]`. + /// The range of component `j` is `[1, 50]`. fn announce_work_entry(i: u32, j: u32, ) -> Weight { - (64_714_000 as Weight) - // Standard Error: 4_000 - .saturating_add((791_000 as Weight).saturating_mul(i as Weight)) - // Standard Error: 10_000 - .saturating_add((350_000 as Weight).saturating_mul(j as Weight)) - .saturating_add(T::DbWeight::get().reads(6 as Weight)) - .saturating_add(T::DbWeight::get().writes(5 as Weight)) + // Proof Size summary in bytes: + // Measured: `971 + j * (36 ±0)` + // Estimated: `20963` + // Minimum execution time: 89_964 nanoseconds. + Weight::from_parts(64_402_725, 0u64) + .saturating_add(Weight::from_parts(0, 20963)) + // Standard Error: 4_005 + .saturating_add(Weight::from_parts(1_118_500, 0u64).saturating_mul(i.into())) + // Standard Error: 8_110 + .saturating_add(Weight::from_parts(493_718, 0u64).saturating_mul(j.into())) + .saturating_add(T::DbWeight::get().reads(6_u64)) + .saturating_add(T::DbWeight::get().writes(5_u64)) } // Storage: Membership MembershipById (r:1 w:0) + // Proof: Membership MembershipById (max_values: None, max_size: Some(125), added: 2600, mode: MaxEncodedLen) // Storage: Bounty Bounties (r:1 w:0) + // Proof: Bounty Bounties (max_values: None, max_size: Some(540), added: 3015, mode: MaxEncodedLen) // Storage: Bounty Entries (r:1 w:1) + // Proof: Bounty Entries (max_values: None, max_size: Some(93), added: 2568, mode: MaxEncodedLen) + /// The range of component `i` is `[0, 100]`. fn submit_work(i: u32, ) -> Weight { - (35_985_000 as Weight) - // Standard Error: 1_000 - .saturating_add((722_000 as Weight).saturating_mul(i as Weight)) - .saturating_add(T::DbWeight::get().reads(3 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + // Proof Size summary in bytes: + // Measured: `601` + // Estimated: `11153` + // Minimum execution time: 31_355 nanoseconds. + Weight::from_parts(33_495_985, 0u64) + .saturating_add(Weight::from_parts(0, 11153)) + // Standard Error: 1_008 + .saturating_add(Weight::from_parts(1_029_281, 0u64).saturating_mul(i.into())) + .saturating_add(T::DbWeight::get().reads(3_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) } // Storage: Bounty Bounties (r:1 w:1) + // Proof: Bounty Bounties (max_values: None, max_size: Some(540), added: 3015, mode: MaxEncodedLen) // Storage: Bounty Entries (r:40 w:40) + // Proof: Bounty Entries (max_values: None, max_size: Some(93), added: 2568, mode: MaxEncodedLen) // Storage: Membership MembershipById (r:40 w:0) + // Proof: Membership MembershipById (max_values: None, max_size: Some(125), added: 2600, mode: MaxEncodedLen) // Storage: System Account (r:41 w:41) + // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) // Storage: Council Budget (r:1 w:1) + // Proof: Council Budget (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) // Storage: Balances Locks (r:40 w:40) - fn submit_oracle_judgment_by_council(j: u32, k: u32, w: u32, r: u32, ) -> Weight { - (0 as Weight) - // Standard Error: 13_000 - .saturating_add((886_000 as Weight).saturating_mul(j as Weight)) - // Standard Error: 13_000 - .saturating_add((824_000 as Weight).saturating_mul(k as Weight)) - // Standard Error: 95_000 - .saturating_add((60_240_000 as Weight).saturating_mul(w as Weight)) - // Standard Error: 95_000 - .saturating_add((76_631_000 as Weight).saturating_mul(r as Weight)) - .saturating_add(T::DbWeight::get().reads(3 as Weight)) - .saturating_add(T::DbWeight::get().reads((4 as Weight).saturating_mul(w as Weight))) - .saturating_add(T::DbWeight::get().reads((4 as Weight).saturating_mul(r as Weight))) - .saturating_add(T::DbWeight::get().writes(3 as Weight)) - .saturating_add(T::DbWeight::get().writes((3 as Weight).saturating_mul(w as Weight))) - .saturating_add(T::DbWeight::get().writes((3 as Weight).saturating_mul(r as Weight))) + // Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) + /// The range of component `j` is `[0, 100]`. + /// The range of component `k` is `[0, 100]`. + /// The range of component `w` is `[1, 20]`. + /// The range of component `r` is `[1, 20]`. + fn submit_oracle_judgment_by_council(_j: u32, _k: u32, w: u32, r: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `925 + w * (448 ±0) + r * (448 ±0)` + // Estimated: `12069 + w * (11545 ±0) + r * (11545 ±0)` + // Minimum execution time: 1_316_105 nanoseconds. + Weight::from_parts(1_332_780_000, 0u64) + .saturating_add(Weight::from_parts(0, 12069)) + // Standard Error: 383_858 + .saturating_add(Weight::from_parts(32_338_905, 0u64).saturating_mul(w.into())) + // Standard Error: 383_858 + .saturating_add(Weight::from_parts(46_161_433, 0u64).saturating_mul(r.into())) + .saturating_add(T::DbWeight::get().reads(3_u64)) + .saturating_add(T::DbWeight::get().reads((4_u64).saturating_mul(w.into()))) + .saturating_add(T::DbWeight::get().reads((4_u64).saturating_mul(r.into()))) + .saturating_add(T::DbWeight::get().writes(3_u64)) + .saturating_add(T::DbWeight::get().writes((3_u64).saturating_mul(w.into()))) + .saturating_add(T::DbWeight::get().writes((3_u64).saturating_mul(r.into()))) + .saturating_add(Weight::from_parts(0, 11545).saturating_mul(w.into())) + .saturating_add(Weight::from_parts(0, 11545).saturating_mul(r.into())) } // Storage: Bounty Bounties (r:1 w:1) + // Proof: Bounty Bounties (max_values: None, max_size: Some(540), added: 3015, mode: MaxEncodedLen) // Storage: Membership MembershipById (r:40 w:0) + // Proof: Membership MembershipById (max_values: None, max_size: Some(125), added: 2600, mode: MaxEncodedLen) // Storage: Bounty Entries (r:39 w:39) + // Proof: Bounty Entries (max_values: None, max_size: Some(93), added: 2568, mode: MaxEncodedLen) // Storage: System Account (r:40 w:40) + // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) // Storage: Council Budget (r:1 w:1) + // Proof: Council Budget (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) // Storage: Balances Locks (r:39 w:39) - fn submit_oracle_judgment_by_member(j: u32, k: u32, w: u32, r: u32, ) -> Weight { - (0 as Weight) - // Standard Error: 25_000 - .saturating_add((970_000 as Weight).saturating_mul(j as Weight)) - // Standard Error: 25_000 - .saturating_add((1_037_000 as Weight).saturating_mul(k as Weight)) - // Standard Error: 176_000 - .saturating_add((60_734_000 as Weight).saturating_mul(w as Weight)) - // Standard Error: 189_000 - .saturating_add((75_651_000 as Weight).saturating_mul(r as Weight)) - .saturating_add(T::DbWeight::get().reads(4 as Weight)) - .saturating_add(T::DbWeight::get().reads((4 as Weight).saturating_mul(w as Weight))) - .saturating_add(T::DbWeight::get().reads((4 as Weight).saturating_mul(r as Weight))) - .saturating_add(T::DbWeight::get().writes(3 as Weight)) - .saturating_add(T::DbWeight::get().writes((3 as Weight).saturating_mul(w as Weight))) - .saturating_add(T::DbWeight::get().writes((3 as Weight).saturating_mul(r as Weight))) + // Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) + /// The range of component `j` is `[0, 100]`. + /// The range of component `k` is `[0, 100]`. + /// The range of component `w` is `[1, 20]`. + /// The range of component `r` is `[1, 19]`. + fn submit_oracle_judgment_by_member(_j: u32, _k: u32, w: u32, r: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `1021 + w * (451 ±0) + r * (451 ±0)` + // Estimated: `14669 + w * (11545 ±0) + r * (11545 ±0)` + // Minimum execution time: 1_314_309 nanoseconds. + Weight::from_parts(1_323_110_000, 0u64) + .saturating_add(Weight::from_parts(0, 14669)) + // Standard Error: 377_565 + .saturating_add(Weight::from_parts(32_533_236, 0u64).saturating_mul(w.into())) + // Standard Error: 397_751 + .saturating_add(Weight::from_parts(45_506_372, 0u64).saturating_mul(r.into())) + .saturating_add(T::DbWeight::get().reads(4_u64)) + .saturating_add(T::DbWeight::get().reads((4_u64).saturating_mul(w.into()))) + .saturating_add(T::DbWeight::get().reads((4_u64).saturating_mul(r.into()))) + .saturating_add(T::DbWeight::get().writes(3_u64)) + .saturating_add(T::DbWeight::get().writes((3_u64).saturating_mul(w.into()))) + .saturating_add(T::DbWeight::get().writes((3_u64).saturating_mul(r.into()))) + .saturating_add(Weight::from_parts(0, 11545).saturating_mul(w.into())) + .saturating_add(Weight::from_parts(0, 11545).saturating_mul(r.into())) } // Storage: Bounty Bounties (r:1 w:1) + // Proof: Bounty Bounties (max_values: None, max_size: Some(540), added: 3015, mode: MaxEncodedLen) fn switch_oracle_to_council_by_council_successful() -> Weight { - (25_029_000 as Weight) - .saturating_add(T::DbWeight::get().reads(1 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + // Proof Size summary in bytes: + // Measured: `184` + // Estimated: `4005` + // Minimum execution time: 23_303 nanoseconds. + Weight::from_parts(23_995_000, 0u64) + .saturating_add(Weight::from_parts(0, 4005)) + .saturating_add(T::DbWeight::get().reads(1_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) } // Storage: Bounty Bounties (r:1 w:1) + // Proof: Bounty Bounties (max_values: None, max_size: Some(540), added: 3015, mode: MaxEncodedLen) // Storage: Membership MembershipById (r:1 w:0) + // Proof: Membership MembershipById (max_values: None, max_size: Some(125), added: 2600, mode: MaxEncodedLen) fn switch_oracle_to_member_by_oracle_council() -> Weight { - (29_030_000 as Weight) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + // Proof Size summary in bytes: + // Measured: `429` + // Estimated: `7595` + // Minimum execution time: 27_947 nanoseconds. + Weight::from_parts(29_431_000, 0u64) + .saturating_add(Weight::from_parts(0, 7595)) + .saturating_add(T::DbWeight::get().reads(2_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) } // Storage: Bounty Bounties (r:1 w:1) + // Proof: Bounty Bounties (max_values: None, max_size: Some(540), added: 3015, mode: MaxEncodedLen) // Storage: Membership MembershipById (r:1 w:0) + // Proof: Membership MembershipById (max_values: None, max_size: Some(125), added: 2600, mode: MaxEncodedLen) fn switch_oracle_to_member_by_council() -> Weight { - (30_520_000 as Weight) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + // Proof Size summary in bytes: + // Measured: `474` + // Estimated: `7595` + // Minimum execution time: 29_965 nanoseconds. + Weight::from_parts(31_340_000, 0u64) + .saturating_add(Weight::from_parts(0, 7595)) + .saturating_add(T::DbWeight::get().reads(2_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) } // Storage: Bounty Bounties (r:1 w:1) + // Proof: Bounty Bounties (max_values: None, max_size: Some(540), added: 3015, mode: MaxEncodedLen) // Storage: Membership MembershipById (r:2 w:0) + // Proof: Membership MembershipById (max_values: None, max_size: Some(125), added: 2600, mode: MaxEncodedLen) fn switch_oracle_to_member_by_oracle_member() -> Weight { - (34_780_000 as Weight) - .saturating_add(T::DbWeight::get().reads(3 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + // Proof Size summary in bytes: + // Measured: `573` + // Estimated: `10195` + // Minimum execution time: 32_491 nanoseconds. + Weight::from_parts(34_407_000, 0u64) + .saturating_add(Weight::from_parts(0, 10195)) + .saturating_add(T::DbWeight::get().reads(3_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) } // Storage: Bounty Bounties (r:1 w:1) + // Proof: Bounty Bounties (max_values: None, max_size: Some(540), added: 3015, mode: MaxEncodedLen) // Storage: Membership MembershipById (r:1 w:0) + // Proof: Membership MembershipById (max_values: None, max_size: Some(125), added: 2600, mode: MaxEncodedLen) fn switch_oracle_to_council_by_oracle_member() -> Weight { - (29_320_000 as Weight) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + // Proof Size summary in bytes: + // Measured: `437` + // Estimated: `7595` + // Minimum execution time: 28_201 nanoseconds. + Weight::from_parts(29_106_000, 0u64) + .saturating_add(Weight::from_parts(0, 7595)) + .saturating_add(T::DbWeight::get().reads(2_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) } // Storage: Bounty Bounties (r:1 w:1) + // Proof: Bounty Bounties (max_values: None, max_size: Some(540), added: 3015, mode: MaxEncodedLen) // Storage: Membership MembershipById (r:1 w:0) + // Proof: Membership MembershipById (max_values: None, max_size: Some(125), added: 2600, mode: MaxEncodedLen) fn end_working_period() -> Weight { - (30_200_000 as Weight) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + // Proof Size summary in bytes: + // Measured: `558` + // Estimated: `7595` + // Minimum execution time: 30_820 nanoseconds. + Weight::from_parts(31_591_000, 0u64) + .saturating_add(Weight::from_parts(0, 7595)) + .saturating_add(T::DbWeight::get().reads(2_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) } // Storage: Membership MembershipById (r:1 w:0) + // Proof: Membership MembershipById (max_values: None, max_size: Some(125), added: 2600, mode: MaxEncodedLen) // Storage: Bounty Bounties (r:1 w:1) + // Proof: Bounty Bounties (max_values: None, max_size: Some(540), added: 3015, mode: MaxEncodedLen) // Storage: Bounty Entries (r:1 w:1) + // Proof: Bounty Entries (max_values: None, max_size: Some(93), added: 2568, mode: MaxEncodedLen) // Storage: Balances Locks (r:1 w:1) + // Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) // Storage: System Account (r:1 w:1) + // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) fn withdraw_entrant_stake() -> Weight { - (52_629_000 as Weight) - .saturating_add(T::DbWeight::get().reads(5 as Weight)) - .saturating_add(T::DbWeight::get().writes(4 as Weight)) + // Proof Size summary in bytes: + // Measured: `863` + // Estimated: `19510` + // Minimum execution time: 51_729 nanoseconds. + Weight::from_parts(53_741_000, 0u64) + .saturating_add(Weight::from_parts(0, 19510)) + .saturating_add(T::DbWeight::get().reads(5_u64)) + .saturating_add(T::DbWeight::get().writes(4_u64)) } // Storage: Bounty Bounties (r:1 w:0) + // Proof: Bounty Bounties (max_values: None, max_size: Some(540), added: 3015, mode: MaxEncodedLen) // Storage: Bounty BountyContributions (r:1 w:1) + // Proof: Bounty BountyContributions (max_values: None, max_size: Some(81), added: 2556, mode: MaxEncodedLen) // Storage: System Account (r:1 w:1) + // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) // Storage: Council Budget (r:1 w:1) + // Proof: Council Budget (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) fn withdraw_funding_state_bloat_bond_by_council() -> Weight { - (56_640_000 as Weight) - .saturating_add(T::DbWeight::get().reads(4 as Weight)) - .saturating_add(T::DbWeight::get().writes(3 as Weight)) + // Proof Size summary in bytes: + // Measured: `674` + // Estimated: `12645` + // Minimum execution time: 53_978 nanoseconds. + Weight::from_parts(55_805_000, 0u64) + .saturating_add(Weight::from_parts(0, 12645)) + .saturating_add(T::DbWeight::get().reads(4_u64)) + .saturating_add(T::DbWeight::get().writes(3_u64)) } // Storage: Membership MembershipById (r:1 w:0) + // Proof: Membership MembershipById (max_values: None, max_size: Some(125), added: 2600, mode: MaxEncodedLen) // Storage: Bounty Bounties (r:1 w:0) + // Proof: Bounty Bounties (max_values: None, max_size: Some(540), added: 3015, mode: MaxEncodedLen) // Storage: Bounty BountyContributions (r:1 w:1) + // Proof: Bounty BountyContributions (max_values: None, max_size: Some(81), added: 2556, mode: MaxEncodedLen) // Storage: System Account (r:2 w:2) + // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) fn withdraw_funding_state_bloat_bond_by_member() -> Weight { - (65_190_000 as Weight) - .saturating_add(T::DbWeight::get().reads(5 as Weight)) - .saturating_add(T::DbWeight::get().writes(3 as Weight)) + // Proof Size summary in bytes: + // Measured: `907` + // Estimated: `17337` + // Minimum execution time: 63_546 nanoseconds. + Weight::from_parts(65_000_000, 0u64) + .saturating_add(Weight::from_parts(0, 17337)) + .saturating_add(T::DbWeight::get().reads(5_u64)) + .saturating_add(T::DbWeight::get().writes(3_u64)) } // Storage: Bounty Bounties (r:1 w:1) + // Proof: Bounty Bounties (max_values: None, max_size: Some(540), added: 3015, mode: MaxEncodedLen) // Storage: System Account (r:1 w:1) + // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) // Storage: Council Budget (r:1 w:1) + // Proof: Council Budget (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) // Storage: Bounty BountyContributions (r:1 w:0) + // Proof: Bounty BountyContributions (max_values: None, max_size: Some(81), added: 2556, mode: MaxEncodedLen) fn withdraw_oracle_reward_by_oracle_council() -> Weight { - (85_380_000 as Weight) - .saturating_add(T::DbWeight::get().reads(4 as Weight)) - .saturating_add(T::DbWeight::get().writes(3 as Weight)) + // Proof Size summary in bytes: + // Measured: `547` + // Estimated: `12645` + // Minimum execution time: 79_578 nanoseconds. + Weight::from_parts(81_114_000, 0u64) + .saturating_add(Weight::from_parts(0, 12645)) + .saturating_add(T::DbWeight::get().reads(4_u64)) + .saturating_add(T::DbWeight::get().writes(3_u64)) } // Storage: Bounty Bounties (r:1 w:1) + // Proof: Bounty Bounties (max_values: None, max_size: Some(540), added: 3015, mode: MaxEncodedLen) // Storage: Membership MembershipById (r:1 w:0) + // Proof: Membership MembershipById (max_values: None, max_size: Some(125), added: 2600, mode: MaxEncodedLen) // Storage: System Account (r:2 w:2) + // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) // Storage: Bounty BountyContributions (r:1 w:0) + // Proof: Bounty BountyContributions (max_values: None, max_size: Some(81), added: 2556, mode: MaxEncodedLen) // Storage: Council Budget (r:1 w:1) + // Proof: Council Budget (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) fn withdraw_oracle_reward_by_oracle_member() -> Weight { - (99_320_000 as Weight) - .saturating_add(T::DbWeight::get().reads(6 as Weight)) - .saturating_add(T::DbWeight::get().writes(4 as Weight)) + // Proof Size summary in bytes: + // Measured: `948` + // Estimated: `18838` + // Minimum execution time: 92_605 nanoseconds. + Weight::from_parts(96_708_000, 0u64) + .saturating_add(Weight::from_parts(0, 18838)) + .saturating_add(T::DbWeight::get().reads(6_u64)) + .saturating_add(T::DbWeight::get().writes(4_u64)) } // Storage: Membership MembershipById (r:1 w:0) + // Proof: Membership MembershipById (max_values: None, max_size: Some(125), added: 2600, mode: MaxEncodedLen) // Storage: Bounty Entries (r:1 w:0) + // Proof: Bounty Entries (max_values: None, max_size: Some(93), added: 2568, mode: MaxEncodedLen) + /// The range of component `i` is `[0, 100]`. fn entrant_remark(i: u32, ) -> Weight { - (24_192_000 as Weight) - // Standard Error: 1_000 - .saturating_add((735_000 as Weight).saturating_mul(i as Weight)) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) + // Proof Size summary in bytes: + // Measured: `492` + // Estimated: `7148` + // Minimum execution time: 24_701 nanoseconds. + Weight::from_parts(25_962_303, 0u64) + .saturating_add(Weight::from_parts(0, 7148)) + // Standard Error: 1_391 + .saturating_add(Weight::from_parts(1_041_490, 0u64).saturating_mul(i.into())) + .saturating_add(T::DbWeight::get().reads(2_u64)) } // Storage: Membership MembershipById (r:1 w:0) + // Proof: Membership MembershipById (max_values: None, max_size: Some(125), added: 2600, mode: MaxEncodedLen) // Storage: Bounty BountyContributions (r:1 w:0) + // Proof: Bounty BountyContributions (max_values: None, max_size: Some(81), added: 2556, mode: MaxEncodedLen) + /// The range of component `i` is `[0, 100]`. fn contributor_remark(i: u32, ) -> Weight { - (23_858_000 as Weight) - // Standard Error: 0 - .saturating_add((664_000 as Weight).saturating_mul(i as Weight)) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) + // Proof Size summary in bytes: + // Measured: `422` + // Estimated: `7136` + // Minimum execution time: 23_161 nanoseconds. + Weight::from_parts(24_937_057, 0u64) + .saturating_add(Weight::from_parts(0, 7136)) + // Standard Error: 1_388 + .saturating_add(Weight::from_parts(759_737, 0u64).saturating_mul(i.into())) + .saturating_add(T::DbWeight::get().reads(2_u64)) } // Storage: Bounty Bounties (r:1 w:0) + // Proof: Bounty Bounties (max_values: None, max_size: Some(540), added: 3015, mode: MaxEncodedLen) + /// The range of component `i` is `[0, 100]`. fn oracle_remark(i: u32, ) -> Weight { - (19_514_000 as Weight) - // Standard Error: 5_000 - .saturating_add((672_000 as Weight).saturating_mul(i as Weight)) - .saturating_add(T::DbWeight::get().reads(1 as Weight)) + // Proof Size summary in bytes: + // Measured: `204` + // Estimated: `4005` + // Minimum execution time: 17_701 nanoseconds. + Weight::from_parts(18_490_515, 0u64) + .saturating_add(Weight::from_parts(0, 4005)) + // Standard Error: 1_979 + .saturating_add(Weight::from_parts(775_222, 0u64).saturating_mul(i.into())) + .saturating_add(T::DbWeight::get().reads(1_u64)) } // Storage: Bounty Bounties (r:1 w:0) + // Proof: Bounty Bounties (max_values: None, max_size: Some(540), added: 3015, mode: MaxEncodedLen) + /// The range of component `i` is `[0, 100]`. fn creator_remark(i: u32, ) -> Weight { - (19_577_000 as Weight) - // Standard Error: 5_000 - .saturating_add((671_000 as Weight).saturating_mul(i as Weight)) - .saturating_add(T::DbWeight::get().reads(1 as Weight)) + // Proof Size summary in bytes: + // Measured: `204` + // Estimated: `4005` + // Minimum execution time: 17_857 nanoseconds. + Weight::from_parts(18_872_211, 0u64) + .saturating_add(Weight::from_parts(0, 4005)) + // Standard Error: 1_591 + .saturating_add(Weight::from_parts(763_705, 0u64).saturating_mul(i.into())) + .saturating_add(T::DbWeight::get().reads(1_u64)) } } // Default implementation for tests impl WeightInfo for () { fn create_bounty_by_council(i: u32, j: u32, ) -> Weight { - 0 + Weight::from_parts(0, 0) } fn create_bounty_by_member(i: u32, j: u32, ) -> Weight { - 0 + Weight::from_parts(0, 0) } fn terminate_bounty_w_oracle_reward_funding_expired() -> Weight { - 0 + Weight::from_parts(0, 0) } fn terminate_bounty_wo_oracle_reward_funding_expired() -> Weight { - 0 + Weight::from_parts(0, 0) } fn terminate_bounty_w_oracle_reward_wo_funds_funding() -> Weight { - 0 + Weight::from_parts(0, 0) } fn terminate_bounty_wo_oracle_reward_wo_funds_funding() -> Weight { - 0 + Weight::from_parts(0, 0) } fn terminate_bounty_w_oracle_reward_w_funds_funding() -> Weight { - 0 + Weight::from_parts(0, 0) } fn terminate_bounty_wo_oracle_reward_w_funds_funding() -> Weight { - 0 + Weight::from_parts(0, 0) } fn terminate_bounty_work_or_judging_period() -> Weight { - 0 + Weight::from_parts(0, 0) } fn fund_bounty_by_member() -> Weight { - 0 + Weight::from_parts(0, 0) } fn fund_bounty_by_council() -> Weight { - 0 + Weight::from_parts(0, 0) } fn withdraw_funding_by_member() -> Weight { - 0 + Weight::from_parts(0, 0) } fn withdraw_funding_by_council() -> Weight { - 0 + Weight::from_parts(0, 0) } fn announce_work_entry(i: u32, j: u32, ) -> Weight { - 0 + Weight::from_parts(0, 0) } fn submit_work(i: u32, ) -> Weight { - 0 + Weight::from_parts(0, 0) } - fn submit_oracle_judgment_by_council(j: u32, k: u32, w: u32, r: u32, ) -> Weight { - 0 + fn submit_oracle_judgment_by_council(_j: u32, _k: u32, w: u32, r: u32, ) -> Weight { + Weight::from_parts(0, 0) } - fn submit_oracle_judgment_by_member(j: u32, k: u32, w: u32, r: u32, ) -> Weight { - 0 + fn submit_oracle_judgment_by_member(_j: u32, _k: u32, w: u32, r: u32, ) -> Weight { + Weight::from_parts(0, 0) } fn switch_oracle_to_council_by_council_successful() -> Weight { - 0 + Weight::from_parts(0, 0) } fn switch_oracle_to_member_by_oracle_council() -> Weight { - 0 + Weight::from_parts(0, 0) } fn switch_oracle_to_member_by_council() -> Weight { - 0 + Weight::from_parts(0, 0) } fn switch_oracle_to_member_by_oracle_member() -> Weight { - 0 + Weight::from_parts(0, 0) } fn switch_oracle_to_council_by_oracle_member() -> Weight { - 0 + Weight::from_parts(0, 0) } fn end_working_period() -> Weight { - 0 + Weight::from_parts(0, 0) } fn withdraw_entrant_stake() -> Weight { - 0 + Weight::from_parts(0, 0) } fn withdraw_funding_state_bloat_bond_by_council() -> Weight { - 0 + Weight::from_parts(0, 0) } fn withdraw_funding_state_bloat_bond_by_member() -> Weight { - 0 + Weight::from_parts(0, 0) } fn withdraw_oracle_reward_by_oracle_council() -> Weight { - 0 + Weight::from_parts(0, 0) } fn withdraw_oracle_reward_by_oracle_member() -> Weight { - 0 + Weight::from_parts(0, 0) } fn entrant_remark(i: u32, ) -> Weight { - 0 + Weight::from_parts(0, 0) } fn contributor_remark(i: u32, ) -> Weight { - 0 + Weight::from_parts(0, 0) } fn oracle_remark(i: u32, ) -> Weight { - 0 + Weight::from_parts(0, 0) } fn creator_remark(i: u32, ) -> Weight { - 0 + Weight::from_parts(0, 0) } } diff --git a/runtime-modules/common/Cargo.toml b/runtime-modules/common/Cargo.toml index 089b08c436..970a4e774a 100644 --- a/runtime-modules/common/Cargo.toml +++ b/runtime-modules/common/Cargo.toml @@ -6,17 +6,24 @@ edition = '2018' [dependencies] serde = { version = "1.0.101", optional = true, features = ["derive"] } -strum = {version = "0.19", optional = true} -strum_macros = {version = "0.19", optional = true} -codec = { package = 'parity-scale-codec', version = '3.1.2', default-features = false, features = ['derive'] } -scale-info = { version = "2.1.1", default-features = false, features = ["derive"] } -sp-runtime = { package = 'sp-runtime', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -frame-support = { package = 'frame-support', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -frame-system = { package = 'frame-system', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -pallet-timestamp = { package = 'pallet-timestamp', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -sp-arithmetic = { package = 'sp-arithmetic', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -balances = { package = 'pallet-balances', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -sp-std = { package = 'sp-std', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} +strum = { version = "0.19", optional = true } +strum_macros = { version = "0.19", optional = true } +codec = { package = 'parity-scale-codec', version = '3.1.2', default-features = false, features = [ + 'derive', +] } +scale-info = { version = "2.1.1", default-features = false, features = [ + "derive", +] } +sp-runtime = { package = 'sp-runtime', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9' } +frame-support = { package = 'frame-support', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9' } +frame-system = { package = 'frame-system', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9' } +pallet-timestamp = { package = 'pallet-timestamp', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9' } +sp-arithmetic = { package = 'sp-arithmetic', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9' } +balances = { package = 'pallet-balances', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9' } +sp-std = { package = 'sp-std', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9' } + +[dev-dependencies] +parameterized = { version = "1.1.0" } [features] default = ['std'] diff --git a/runtime-modules/common/src/lib.rs b/runtime-modules/common/src/lib.rs index 71c370a3ed..50ab030336 100644 --- a/runtime-modules/common/src/lib.rs +++ b/runtime-modules/common/src/lib.rs @@ -6,7 +6,6 @@ deny(clippy::panic_in_result_fn), deny(clippy::unwrap_used), deny(clippy::expect_used), - deny(clippy::indexing_slicing), deny(clippy::integer_arithmetic), deny(clippy::match_on_vec_items), deny(clippy::unreachable) @@ -20,6 +19,7 @@ pub mod locks; pub mod membership; pub mod merkle_tree; pub mod no_panic; +pub mod numerical; pub mod storage; pub mod working_group; @@ -69,6 +69,13 @@ pub trait StorageOwnership { + PartialEq; } +/// Defines which pallets can be frozen for the `SetPalletFozenStatus` proposal +#[cfg_attr(feature = "std", derive(Serialize, Deserialize))] +#[derive(Encode, Decode, Clone, Copy, PartialEq, Debug, Eq, TypeInfo)] +pub enum FreezablePallet { + ProjectToken, +} + /// Defines time in both block number and substrate time abstraction. #[cfg_attr(feature = "std", derive(Serialize, Deserialize))] #[derive(Clone, Encode, Decode, PartialEq, Eq, Debug, Default)] diff --git a/runtime-modules/common/src/numerical.rs b/runtime-modules/common/src/numerical.rs new file mode 100644 index 0000000000..dd494bff9e --- /dev/null +++ b/runtime-modules/common/src/numerical.rs @@ -0,0 +1,241 @@ +use core::ops::Div; + +use sp_arithmetic::traits::{AtLeast32BitUnsigned, CheckedAdd, CheckedMul, CheckedNeg, CheckedSub}; +use sp_runtime::{ + traits::{One, Saturating}, + FixedPointNumber, FixedU128, PerThing, Permill, Perquintill, +}; + +// order of the Tylor series expansion +const ORDER: usize = 20; + +// does not work with 100% interest +fn natural_log_1_plus_x(interest: Permill) -> Perquintill { + // ref: https://www.wolframalpha.com/input?i=taylor+series+for+ln%281%2Bx%29 + // ln(1 + x) is approx x - x^2/2 + x^3/3 - x^4/4 + x^5/5 + let mut terms = [Perquintill::zero(); ORDER]; + let x = Perquintill::from_parts( + (interest.deconstruct() as u64).saturating_mul(1_000_000_000_000u64), + ); + + (1..ORDER).for_each(|i| { + let num = x.saturating_pow(i); + let den = i as u32; + terms[i] = num.div(den); + }); + + // sum all odd indices terms first + let mut result = Perquintill::zero(); + for el in terms.iter().skip(1).step_by(2) { + result = result.saturating_add(*el); + } + // subtract all even indices terms + for el in terms.iter().step_by(2) { + result = result.saturating_sub(*el); + } + + result +} + +fn one_plus_interest_pow_frac(interest: Permill, exp: Perquintill) -> FixedU128 { + // ref: https://www.wolframalpha.com/input?i=taylor+series+%281+%2B+r%29%5Ex+with+r+in+%5B0%2C1%29+and+x+in+%5B0%2C1%5D+with+respect+to+x + let log_term = natural_log_1_plus_x(interest); + let x = exp; + let xlog = x.saturating_mul(log_term); + + let mut series_result = Perquintill::zero(); + let mut den = 1u32; + for i in 1..ORDER { + den = (i as u32).saturating_mul(den); + let term = xlog.saturating_pow(i).div(den); + series_result = series_result.saturating_add(term); + } + + FixedU128::saturating_from_rational(series_result.deconstruct() as u128, Perquintill::ACCURACY) + .saturating_add(FixedU128::one()) +} + +/// The approximation is computed as follows: +/// the `exponent` is decomposed into its `exponent = integer + fractional` +/// from `integer` we compute `x = (1 + interest/100)^integer` +/// from `fractional` we compute `y = (1 + interest/100)^fractional` using the following taylor series +/// expansion up to order `ORDER`: +/// `(1 + r)^f = 1 + f*log(1+r) + [f*log(1+r)]^2/2! + [f*log(1+r)]^3/3! + ... + [f*log(1+r)]^ORDER/ORDER!` +/// the result is `x * y` +/// +/// # Arguments +/// +/// * `interest` - `Permill` for the interest rate +/// * `exponent` - `FixedU128` for the exponent +/// +/// # Returns +/// +/// Approximation of (1+`interest`)^`exponent` +/// +pub fn one_plus_interest_pow_fixed(interest: Permill, exp: FixedU128) -> FixedU128 { + let one_plus_interest_base = FixedU128::saturating_from_rational( + interest.deconstruct() as u128, + Permill::ACCURACY as u128, + ) + .saturating_add(FixedU128::one()); + + let exp_int = exp.trunc().into_inner().div(FixedU128::DIV) as usize; + let exp_frac = Perquintill::from_parts(exp.frac().into_inner() as u64); + + let base_pow_int = one_plus_interest_base.saturating_pow(exp_int); + let base_pow_frac = one_plus_interest_pow_frac(interest, exp_frac); + + base_pow_int.mul(base_pow_frac) +} + +// computes integral of integral at + b dt from x to y = a (y^2/2 - x^2/2) + b (y - x) +pub fn amm_eval_inner< + Number: CheckedAdd + CheckedSub + CheckedMul + CheckedNeg + AtLeast32BitUnsigned + Copy, +>( + x: Number, + y: Number, + a: Number, + b: Number, +) -> Option { + if x == y { + return Some(Number::zero()); + } + let lower_bound = y.min(x); + let upper_bound = y.max(x); + let upper_bound_sq = upper_bound.checked_mul(&upper_bound); + let lower_bound_sq = lower_bound.checked_mul(&lower_bound); + let first_term_coeff = a.div(2u32.into()); + + // squared diff between two Option: upper_bound_sq - lower_bound_sq + let diff_sq = upper_bound_sq.and_then(|upper_| lower_bound_sq.map(|lower_| upper_.sub(lower_))); + let diff = upper_bound.sub(lower_bound); + let first_term = diff_sq.and_then(|diff_sq| diff_sq.checked_mul(&first_term_coeff)); + let second_term = diff.checked_mul(&b); + + first_term + .and_then(|first_term_| { + second_term.map(|second_term_| first_term_.checked_add(&second_term_)) + }) + .flatten() +} + +#[cfg(test)] +mod numerical_tests { + use parameterized::parameterized; + use sp_runtime::traits::Zero; + + use super::*; + + #[parameterized( + input = { + (5u128, 10u128, 2u128, 4u128), // x < y + (10u128, 5u128, 2u128, 4u128), // x > y + (10u128, 10u128, 2u128, 4u128), // x = y + (u128::MAX - 1, u128::MAX , 2u128, 4u128), // overflow + (u128::MAX, u128::MAX , 2u128, 4u128), // x = y = u128::MAX + (10u128, 10u128, 0u128, 0u128), // a = b = 0 + (10u128, 5u128, u128::MAX, u128::MAX), // overflow + (10u128, 10u128, u128::MAX, u128::MAX), // zero + (10u128, 5u128, 5u128, 2u128), // a = odd + }, + expected = { + Some(95), + Some(95), + Some(0), + None, + Some(0), + Some(0), + None, + Some(0), + Some(160) + + } + )] + fn amm_eval_inner_base_test(input: (u128, u128, u128, u128), expected: Option) { + let (x, y, a, b) = input; + + let result = amm_eval_inner(x, y, a, b); + + assert_eq!(result, expected); + } + + #[test] + fn log_approximation_is_accurate_up_to_14_dec_places() { + let expected = Perquintill::from_float(0.139761942375158f64); // https://www.wolframalpha.com/input?i=ln%281+%2B+0.15%29 + let actual = natural_log_1_plus_x(Permill::from_percent(15)); + // quintillion = 1e18 + assert_eq!( + actual.deconstruct().div(10_000), + expected.deconstruct().div(10_000) + ) + } + + #[test] + fn log_approximation_is_accurate_with_zero() { + let expected = Perquintill::zero(); + let actual = natural_log_1_plus_x(Permill::zero()); + assert_eq!(actual, expected) + } + + #[test] + fn interest_computation_is_accurate_up_to_15_dec_places() { + let expected = FixedU128::from_float(1.02118558583419f64); //https://www.wolframalpha.com/input?i=0.0211856&assumption=%22ClashPrefs%22+-%3E+%7B%22Math%22%7D + let actual = + one_plus_interest_pow_frac(Permill::from_percent(15), Perquintill::from_percent(15)); + assert_eq!( + actual.into_inner().div(10_000), + expected.into_inner().div(10_000) + ) + } + + #[test] + fn interest_computation_is_accurate_with_zero_interest() { + let expected = FixedU128::one(); //(1 + 0)^x = 1 + let actual = one_plus_interest_pow_frac(Permill::zero(), Perquintill::from_percent(15)); + assert_eq!(actual, expected) + } + + #[test] + fn one_plus_interest_pow_fixed_works_with_zero_interest() { + let expected = FixedU128::one(); // (1 + 0)^x = 1 + let actual = one_plus_interest_pow_fixed(Permill::zero(), FixedU128::from_float(1.15f64)); + assert_eq!(expected, actual) + } + + #[test] + fn one_plus_interest_pow_fixed_works_with_zero_exponent() { + let expected = FixedU128::one(); // a^0 = 1 + let actual = one_plus_interest_pow_fixed(Permill::from_percent(10), FixedU128::zero()); + assert_eq!(expected, actual) + } + + #[test] + fn one_plus_interest_pow_fixed_works_with_int_exp() { + let expected = FixedU128::from_float(1.404928f64); + let actual = + one_plus_interest_pow_fixed(Permill::from_percent(12), FixedU128::from_float(3.00f64)); + assert_eq!(expected, actual) + } + + #[test] + fn one_plus_interest_pow_fixed_accurate_with_frac_exp_16_dec_places() { + let expected = FixedU128::from_float(1.026408276205842713427f64); + let actual = + one_plus_interest_pow_fixed(Permill::from_percent(12), FixedU128::from_float(0.23f64)); + assert_eq!( + expected.into_inner().div(1000), + actual.into_inner().div(1000) + ) + } + + #[test] + fn one_plus_interest_pow_fixed_accurate_up_to_16_dec() { + let expected = FixedU128::from_float(1.478434805499594623f64); + let actual = + one_plus_interest_pow_fixed(Permill::from_percent(12), FixedU128::from_float(3.45f64)); + assert_eq!( + expected.into_inner().div(1000), + actual.into_inner().div(1000) + ) + } +} diff --git a/runtime-modules/common/src/origin.rs b/runtime-modules/common/src/origin.rs index 5d1e296490..aeaa16b642 100644 --- a/runtime-modules/common/src/origin.rs +++ b/runtime-modules/common/src/origin.rs @@ -6,21 +6,21 @@ pub trait ActorOriginValidator { fn ensure_actor_origin(origin: Origin, actor_id: ActorId) -> Result; } -// TODO: delete when T::Origin will support the clone() -/// Multiplies the T::Origin. +// TODO: delete when T::RuntimeOrigin will support the clone() +/// Multiplies the T::RuntimeOrigin. /// In our current substrate version frame_system::Origin doesn't support clone(), /// but it will be supported in latest up-to-date substrate version. -pub fn double_origin(origin: T::Origin) -> (T::Origin, T::Origin) { - let coerced_origin = origin.into().ok().unwrap_or(RawOrigin::None); +// pub fn double_origin(origin: T::RuntimeOrigin) -> (T::RuntimeOrigin, T::RuntimeOrigin) { +// let coerced_origin = origin.into().ok().unwrap_or(RawOrigin::None); - let (cloned_origin1, cloned_origin2) = match coerced_origin { - RawOrigin::None => (RawOrigin::None, RawOrigin::None), - RawOrigin::Root => (RawOrigin::Root, RawOrigin::Root), - RawOrigin::Signed(account_id) => ( - RawOrigin::Signed(account_id.clone()), - RawOrigin::Signed(account_id), - ), - }; +// let (cloned_origin1, cloned_origin2) = match coerced_origin { +// RawOrigin::None => (RawOrigin::None, RawOrigin::None), +// RawOrigin::Root => (RawOrigin::Root, RawOrigin::Root), +// RawOrigin::Signed(account_id) => ( +// RawOrigin::Signed(account_id.clone()), +// RawOrigin::Signed(account_id), +// ), +// }; - (cloned_origin1.into(), cloned_origin2.into()) -} +// (cloned_origin1.into(), cloned_origin2.into()) +// } diff --git a/runtime-modules/common/src/working_group.rs b/runtime-modules/common/src/working_group.rs index f4ab702aab..ca94fa801b 100644 --- a/runtime-modules/common/src/working_group.rs +++ b/runtime-modules/common/src/working_group.rs @@ -50,10 +50,10 @@ pub use iterable_enums::WorkingGroup; /// Working group interface to work with its members - workers and leaders. pub trait WorkingGroupAuthenticator { /// Validate origin for the worker. - fn ensure_worker_origin(origin: T::Origin, worker_id: &T::ActorId) -> DispatchResult; + fn ensure_worker_origin(origin: T::RuntimeOrigin, worker_id: &T::ActorId) -> DispatchResult; /// Validate origin for the active leader. - fn ensure_leader_origin(origin: T::Origin) -> DispatchResult; + fn ensure_leader_origin(origin: T::RuntimeOrigin) -> DispatchResult; /// Get member ID of the current leader. fn get_leader_member_id() -> Option; diff --git a/runtime-modules/constitution/Cargo.toml b/runtime-modules/constitution/Cargo.toml index 6310cb5500..662c06dc7c 100644 --- a/runtime-modules/constitution/Cargo.toml +++ b/runtime-modules/constitution/Cargo.toml @@ -8,22 +8,22 @@ edition = '2018' serde = { version = "1.0.101", optional = true, features = ["derive"] } codec = { package = 'parity-scale-codec', version = '3.1.2', default-features = false, features = ['derive'] } scale-info = { version = "2.1.2", default-features = false, features = ["derive"] } -sp-std = { package = 'sp-std', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -frame-support = { package = 'frame-support', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -frame_system = { package = 'frame-system', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -sp-runtime = { package = 'sp-runtime', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -frame-benchmarking = { package = 'frame-benchmarking', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522', optional = true} -pallet-balances = { package = 'pallet-balances', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522', optional = true } +sp-std = { package = 'sp-std', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +frame-support = { package = 'frame-support', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +frame_system = { package = 'frame-system', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +sp-runtime = { package = 'sp-runtime', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +frame-benchmarking = { package = 'frame-benchmarking', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9', optional = true} +pallet-balances = { package = 'pallet-balances', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9', optional = true } common = { package = 'pallet-common', default-features = false, path = '../common'} [dev-dependencies] -sp-io = { package = 'sp-io', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -sp-core = { package = 'sp-core', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} +sp-io = { package = 'sp-io', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +sp-core = { package = 'sp-core', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} [features] default = ['std'] runtime-benchmarks = [ - "frame-benchmarking", + "frame-benchmarking/runtime-benchmarks", "common/runtime-benchmarks", ] std = [ @@ -36,4 +36,6 @@ std = [ 'scale-info/std', 'pallet-balances/std', 'common/std', -] \ No newline at end of file + 'frame-benchmarking?/std', +] +try-runtime = [ "frame-support/try-runtime"] \ No newline at end of file diff --git a/runtime-modules/constitution/src/benchmarking.rs b/runtime-modules/constitution/src/benchmarking.rs index 0ffb0c969b..4706ac125e 100644 --- a/runtime-modules/constitution/src/benchmarking.rs +++ b/runtime-modules/constitution/src/benchmarking.rs @@ -1,15 +1,15 @@ #![cfg(feature = "runtime-benchmarks")] use crate::{Call, Config, ConstitutionInfo, Event, Module as Pallet}; -use frame_benchmarking::benchmarks; +use frame_benchmarking::v1::benchmarks; use frame_system::Pallet as System; use frame_system::{EventRecord, RawOrigin}; use sp_runtime::traits::Hash; use sp_std::vec; -fn assert_last_event(generic_event: ::Event) { +fn assert_last_event(generic_event: ::RuntimeEvent) { let events = System::::events(); - let system_event: ::Event = generic_event.into(); + let system_event: ::RuntimeEvent = generic_event.into(); // compare to the last event record let EventRecord { event, .. } = &events[events.len() - 1]; assert_eq!(event, &system_event); diff --git a/runtime-modules/constitution/src/lib.rs b/runtime-modules/constitution/src/lib.rs index bec977ca3c..e399dbbd1d 100644 --- a/runtime-modules/constitution/src/lib.rs +++ b/runtime-modules/constitution/src/lib.rs @@ -38,12 +38,12 @@ use scale_info::TypeInfo; use serde::{Deserialize, Serialize}; use sp_runtime::traits::Hash; use sp_runtime::SaturatedConversion; -use sp_std::vec::Vec; +use sp_std::{vec, vec::Vec}; type WeightInfoConstitution = ::WeightInfo; pub trait Config: frame_system::Config { - type Event: From> + Into<::Event>; + type RuntimeEvent: From> + Into<::RuntimeEvent>; /// Weight information for extrinsics in this pallet. type WeightInfo: WeightInfo; @@ -74,7 +74,7 @@ decl_event! { } decl_module! { - pub struct Module for enum Call where origin: T::Origin { + pub struct Module for enum Call where origin: T::RuntimeOrigin { fn deposit_event() = default; /// Sets the current constitution hash. Requires root origin. @@ -103,3 +103,10 @@ decl_module! { } } } + +impl frame_support::traits::Hooks for Pallet { + #[cfg(feature = "try-runtime")] + fn try_state(_: T::BlockNumber) -> Result<(), &'static str> { + Ok(()) + } +} diff --git a/runtime-modules/constitution/src/tests/mocks.rs b/runtime-modules/constitution/src/tests/mocks.rs index 59608d0a27..b6fb3b05d1 100644 --- a/runtime-modules/constitution/src/tests/mocks.rs +++ b/runtime-modules/constitution/src/tests/mocks.rs @@ -36,8 +36,8 @@ impl frame_system::Config for Test { type BlockWeights = (); type BlockLength = (); type DbWeight = (); - type Origin = Origin; - type Call = Call; + type RuntimeOrigin = RuntimeOrigin; + type RuntimeCall = RuntimeCall; type Index = u64; type BlockNumber = u64; type Hash = H256; @@ -45,7 +45,7 @@ impl frame_system::Config for Test { type AccountId = u64; type Lookup = IdentityLookup; type Header = Header; - type Event = Event; + type RuntimeEvent = RuntimeEvent; type BlockHashCount = ConstU64<250>; type Version = (); type PalletInfo = PalletInfo; @@ -59,7 +59,7 @@ impl frame_system::Config for Test { } impl Config for Test { - type Event = Event; + type RuntimeEvent = RuntimeEvent; type WeightInfo = (); } diff --git a/runtime-modules/constitution/src/tests/mod.rs b/runtime-modules/constitution/src/tests/mod.rs index 18c2c98562..59a5302f1f 100644 --- a/runtime-modules/constitution/src/tests/mod.rs +++ b/runtime-modules/constitution/src/tests/mod.rs @@ -25,12 +25,12 @@ fn run_to_block(n: u64) { pub struct EventFixture; impl EventFixture { pub fn assert_last_crate_event(expected_raw_event: Event) { - let converted_event = mocks::Event::Constitution(expected_raw_event); + let converted_event = mocks::RuntimeEvent::Constitution(expected_raw_event); Self::assert_last_global_event(converted_event) } - pub fn assert_last_global_event(expected_event: mocks::Event) { + pub fn assert_last_global_event(expected_event: mocks::RuntimeEvent) { let expected_event = EventRecord { phase: Phase::Initialization, event: expected_event, diff --git a/runtime-modules/constitution/src/weights.rs b/runtime-modules/constitution/src/weights.rs index 4ee8681b0a..30f63bfd2c 100644 --- a/runtime-modules/constitution/src/weights.rs +++ b/runtime-modules/constitution/src/weights.rs @@ -18,22 +18,21 @@ //! Autogenerated weights for pallet_constitution //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-10-20, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("dev"), DB CACHE: 1024 +//! DATE: 2023-11-06, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("prod-test"), DB CACHE: 1024 // Executed Command: -// ./../target/release/joystream-node +// ./scripts/../target/release/joystream-node // benchmark // pallet -// --base-path=/mnt/disks/local-ssd/ // --pallet=pallet_constitution // --extrinsic=* -// --chain=dev +// --chain=prod-test // --steps=50 // --repeat=20 // --execution=wasm -// --template=./../devops/joystream-pallet-weight-template.hbs -// --output=./../runtime-modules/constitution/src/weights.rs +// --template=./scripts/../devops/joystream-pallet-weight-template.hbs +// --output=./scripts/../runtime-modules/constitution/src/weights.rs #![cfg_attr(rustfmt, rustfmt_skip)] #![allow(unused_parens)] @@ -52,17 +51,24 @@ pub trait WeightInfo { pub struct SubstrateWeight(PhantomData); impl WeightInfo for SubstrateWeight { // Storage: Constitution Constitution (r:0 w:1) + // Proof: Constitution Constitution (max_values: Some(1), max_size: Some(32), added: 527, mode: MaxEncodedLen) + /// The range of component `i` is `[1, 50000]`. fn amend_constitution(i: u32, ) -> Weight { - (31_909_000 as Weight) - // Standard Error: 0 - .saturating_add((2_000 as Weight).saturating_mul(i as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 11_635 nanoseconds. + Weight::from_parts(11_991_083, 0u64) + .saturating_add(Weight::from_parts(0, 0)) + // Standard Error: 1 + .saturating_add(Weight::from_parts(1_923, 0u64).saturating_mul(i.into())) + .saturating_add(T::DbWeight::get().writes(1_u64)) } } // Default implementation for tests impl WeightInfo for () { fn amend_constitution(i: u32, ) -> Weight { - 0 + Weight::from_parts(0, 0) } } diff --git a/runtime-modules/content/Cargo.toml b/runtime-modules/content/Cargo.toml index 96db37aaea..a503b2b603 100755 --- a/runtime-modules/content/Cargo.toml +++ b/runtime-modules/content/Cargo.toml @@ -5,11 +5,11 @@ authors = ['Joystream contributors'] edition = '2018' [dependencies] -sp-std = { package = 'sp-std', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -sp-runtime = { package = 'sp-runtime', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -frame-support = { package = 'frame-support', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -frame-system = { package = 'frame-system', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -sp-arithmetic = { package = 'sp-arithmetic', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} +sp-std = { package = 'sp-std', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +sp-runtime = { package = 'sp-runtime', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +frame-support = { package = 'frame-support', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +frame-system = { package = 'frame-system', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +sp-arithmetic = { package = 'sp-arithmetic', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} codec = { package = 'parity-scale-codec', version = '3.1.2', default-features = false, features = ['derive'] } scale-info = { version = "2.1.2", default-features = false, features = ["derive"] } serde = {version = '1.0.101', features = ['derive'], optional = true} @@ -18,19 +18,22 @@ strum_macros = {version = "0.19", optional = true} common = { package = 'pallet-common', default-features = false, path = '../common'} storage = { package = 'pallet-storage', default-features = false, path = '../storage'} membership = { package = 'pallet-membership', default-features = false, path = '../membership'} -balances = { package = 'pallet-balances', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} +balances = { package = 'pallet-balances', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} project-token = { package = 'pallet-project-token', default-features = false, path = '../project-token'} varaint-count = { version = '1.1.0', package = 'variant_count' } # Benchmarking -frame-benchmarking = { package = 'frame-benchmarking', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522', optional = true} +frame-benchmarking = { package = 'frame-benchmarking', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9', optional = true} working-group = { package = 'pallet-working-group', default-features = false, path = '../working-group', optional = true} -sp-core = { package = 'sp-core', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} +sp-core = { package = 'sp-core', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} + +# util +log = { version = "0.4.17", default-features = false } [dev-dependencies] -sp-io = { package = 'sp-io', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -pallet-timestamp = { package = 'pallet-timestamp', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -randomness-collective-flip = { package = 'pallet-randomness-collective-flip', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} +sp-io = { package = 'sp-io', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +pallet-timestamp = { package = 'pallet-timestamp', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +randomness-collective-flip = { package = 'pallet-insecure-randomness-collective-flip', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} staking-handler = { package = 'pallet-staking-handler', default-features = false, path = '../staking-handler'} working-group = { package = 'pallet-working-group', default-features = false, path = '../working-group'} derive-fixture = { package = 'derive-fixture', default-features = false, path = '../support/derive-fixture'} @@ -40,7 +43,7 @@ derive-new = "0.5" [features] default = ['std'] runtime-benchmarks = [ - "frame-benchmarking", + "frame-benchmarking/runtime-benchmarks", "sp-runtime/runtime-benchmarks", "membership/runtime-benchmarks", "storage/runtime-benchmarks", @@ -63,4 +66,6 @@ std = [ 'membership/std', 'project-token/std', 'scale-info/std', + 'frame-benchmarking?/std', ] +try-runtime = [ "frame-support/try-runtime"] \ No newline at end of file diff --git a/runtime-modules/content/src/benchmarks/benchmarking.rs b/runtime-modules/content/src/benchmarks/benchmarking.rs index bd414d29ab..0068061e98 100644 --- a/runtime-modules/content/src/benchmarks/benchmarking.rs +++ b/runtime-modules/content/src/benchmarks/benchmarking.rs @@ -14,7 +14,7 @@ use common::{ merkle_tree::helpers::{build_merkle_path_helper, generate_merkle_root_helper}, BudgetManager, }; -use frame_benchmarking::{benchmarks, Zero}; +use frame_benchmarking::v1::{benchmarks, Zero}; use frame_support::{ storage::StorageMap, traits::{Currency, Get}, @@ -84,13 +84,13 @@ benchmarks! { verify { let channel_id: T::ChannelId = One::one(); - assert!(ChannelById::::contains_key(&channel_id)); + assert!(ChannelById::::contains_key(channel_id)); let channel = ChannelById::::get(channel_id); let channel_acc = ContentTreasury::::account_for_channel(channel_id); assert_last_event::( - ::Event::from( + ::RuntimeEvent::from( Event::::ChannelCreated( channel_id, channel, @@ -178,10 +178,10 @@ benchmarks! { origin, actor, channel_id, update_params.clone()) verify { - assert!(ChannelById::::contains_key(&channel_id)); + assert!(ChannelById::::contains_key(channel_id)); assert_last_event::( - ::Event::from( + ::RuntimeEvent::from( Event::::ChannelUpdated( actor, channel_id, @@ -248,10 +248,10 @@ benchmarks! { origin, actor, channel_id, update_params.clone()) verify { - assert!(ChannelById::::contains_key(&channel_id)); + assert!(ChannelById::::contains_key(channel_id)); assert_last_event::( - ::Event::from( + ::RuntimeEvent::from( Event::::ChannelUpdated( actor, channel_id, @@ -288,7 +288,7 @@ benchmarks! { verify { assert_last_event::( - ::Event::from( + ::RuntimeEvent::from( Event::::ChannelDeleted( actor, channel_id @@ -325,7 +325,7 @@ benchmarks! { verify { assert_last_event::( - ::Event::from( + ::RuntimeEvent::from( Event::::ChannelPrivilegeLevelUpdated( channel_id, privilege_level, @@ -363,7 +363,7 @@ benchmarks! { verify { assert_last_event::( - ::Event::from( + ::RuntimeEvent::from( Event::::ChannelPausedFeaturesUpdatedByModerator( actor, channel_id, @@ -414,7 +414,7 @@ benchmarks! { rationale.clone()) verify { assert_last_event::( - ::Event::from( + ::RuntimeEvent::from( Event::::ChannelAssetsDeletedByModerator( actor, channel_id, @@ -424,49 +424,6 @@ benchmarks! { ).into()); } - delete_channel_as_moderator{ - - let a in 1 .. T::MaxNumberOfAssetsPerChannel::get(); //max objs number - - let b in (T::MinStorageBucketsPerBag::get()) .. (T::MaxStorageBucketsPerBag::get()); - - let c in (T::MinDistributionBucketsPerBag::get()) .. (T::MaxDistributionBucketsPerBag::get()); - - let d in 1 .. MAX_KILOBYTES_METADATA; //max kilobytes for rationale - - let ( - channel_id, - group_id, - lead_account_id, - curator_id, - curator_account_id - ) = - setup_worst_case_scenario_curator_channel::(a, b, c, true).unwrap(); - - let origin = RawOrigin::Signed(curator_account_id); - let actor = ContentActor::Curator(group_id, curator_id); - let channel_bag_witness = channel_bag_witness::(channel_id)?; - let rationale = vec![1u8].repeat((d * 1000) as usize); - - set_all_channel_paused_features::(channel_id); - }: _ (origin, - actor, - channel_id, - channel_bag_witness, - a.into(), - rationale.clone()) - verify { - - assert_last_event::( - ::Event::from( - Event::::ChannelDeletedByModerator( - actor, - channel_id, - rationale - ) - ).into()); - } - set_channel_visibility_as_moderator{ let a in 1 .. MAX_KILOBYTES_METADATA; //max kilobytes for rationale @@ -495,7 +452,7 @@ benchmarks! { verify { assert_last_event::( - ::Event::from( + ::RuntimeEvent::from( Event::::ChannelVisibilitySetByModerator( actor, channel_id, @@ -542,7 +499,7 @@ benchmarks! { verify { assert_last_event::( - ::Event::from( + ::RuntimeEvent::from( Event::::VideoAssetsDeletedByModerator( actor, video_id, @@ -553,69 +510,6 @@ benchmarks! { ).into()); } - delete_video_as_moderator_with_assets { - - let a in 1 .. T::MaxNumberOfAssetsPerVideo::get(); //max objs number - - let b in (T::MinStorageBucketsPerBag::get()) .. (T::MaxStorageBucketsPerBag::get()); - - let c in 1 .. MAX_KILOBYTES_METADATA; //max kilobytes for rationale - - let rationale = vec![1u8].repeat((c * 1000) as usize); - let (video_id, (curator_acc_id, actor, channel_id, _)) = - setup_worst_case_scenario_mutable_video::(Some(a), b)?; - - set_all_channel_paused_features::(channel_id); - }: delete_video_as_moderator ( - RawOrigin::Signed(curator_acc_id), - actor, - video_id, - Some(b), - a.into(), - rationale.clone()) - verify { - - assert_last_event::( - ::Event::from( - Event::::VideoDeletedByModerator( - actor, - video_id, - rationale, - ) - ).into()); - } - - delete_video_as_moderator_without_assets { - let a in 1 .. MAX_KILOBYTES_METADATA; //max kilobytes for rationale - - let (video_id, (curator_acc_id, actor, channel_id, _)) = - setup_worst_case_scenario_mutable_video::( - None, - T::MaxStorageBucketsPerBag::get() - )?; - - let rationale = vec![1u8].repeat((a * 1000) as usize); - - set_all_channel_paused_features::(channel_id); - }: delete_video_as_moderator ( - RawOrigin::Signed(curator_acc_id), - actor, - video_id, - None, - 0, - rationale.clone()) - verify { - - assert_last_event::( - ::Event::from( - Event::::VideoDeletedByModerator( - actor, - video_id, - rationale, - ) - ).into()); - } - set_video_visibility_as_moderator{ let a in 1 .. MAX_KILOBYTES_METADATA; //max kilobytes for rationale @@ -640,7 +534,7 @@ benchmarks! { verify { assert_last_event::( - ::Event::from( + ::RuntimeEvent::from( Event::::VideoVisibilitySetByModerator( actor, video_id, @@ -657,7 +551,7 @@ benchmarks! { */ create_curator_group { - let a in 0 .. (T::MaxKeysPerCuratorGroupPermissionsByLevelMap::get() as u32); + let a in 0 .. T::MaxKeysPerCuratorGroupPermissionsByLevelMap::get(); let (_, lead_account) = insert_content_leader::(); let group_id = Pallet::::next_curator_group_id(); @@ -673,14 +567,14 @@ benchmarks! { let group = Pallet::::curator_group_by_id(group_id); assert!(group == CuratorGroupRecord::try_create::(true, &permissions_by_level).unwrap()); assert_last_event::( - ::Event::from( + ::RuntimeEvent::from( Event::::CuratorGroupCreated(group_id) ).into() ); } update_curator_group_permissions { - let a in 0 .. (T::MaxKeysPerCuratorGroupPermissionsByLevelMap::get() as u32); + let a in 0 .. T::MaxKeysPerCuratorGroupPermissionsByLevelMap::get(); let (_, lead_account) = insert_content_leader::(); let group_id = setup_worst_case_curator_group_with_curators::( @@ -698,7 +592,7 @@ benchmarks! { let group = Pallet::::curator_group_by_id(group_id); assert_eq!(group.get_permissions_by_level(), permissions_by_level); assert_last_event::( - ::Event::from( + ::RuntimeEvent::from( Event::::CuratorGroupPermissionsUpdated( group_id, permissions_by_level @@ -723,7 +617,7 @@ benchmarks! { let group = Pallet::::curator_group_by_id(group_id); assert!(!group.is_active()); assert_last_event::( - ::Event::from( + ::RuntimeEvent::from( Event::::CuratorGroupStatusSet(group_id, false) ).into() ); @@ -751,7 +645,7 @@ benchmarks! { Some(permissions.clone()) ); assert_last_event::( - ::Event::from( + ::RuntimeEvent::from( Event::::CuratorAdded(group_id, curator_id, permissions) ).into() ); @@ -773,7 +667,7 @@ benchmarks! { let group = Pallet::::curator_group_by_id(group_id); assert!(group.get_curators().get(&curator_id).is_none()); assert_last_event::( - ::Event::from( + ::RuntimeEvent::from( Event::::CuratorRemoved(group_id, curator_id) ).into() ); @@ -818,7 +712,7 @@ benchmarks! { assert_eq!(BTreeSet::from(video.data_objects), expected_asset_ids); assert_eq!(video.video_state_bloat_bond.amount, Pallet::::video_state_bloat_bond_value()); assert_last_event::( - ::Event::from( + ::RuntimeEvent::from( Event::::VideoCreated( actor, channel_id, @@ -879,7 +773,7 @@ benchmarks! { assert_eq!(BTreeSet::from(video.data_objects), expected_asset_ids); assert_eq!(video.video_state_bloat_bond.amount, Pallet::::video_state_bloat_bond_value()); assert_last_event::( - ::Event::from( + ::RuntimeEvent::from( Event::::VideoCreated( actor, channel_id, @@ -930,7 +824,7 @@ benchmarks! { assert_eq!(BTreeSet::from(video.data_objects), existing_asset_ids); assert!(video.nft_status.is_none()); assert_last_event::( - ::Event::from( + ::RuntimeEvent::from( Event::::VideoUpdated( actor, video_id, @@ -997,7 +891,7 @@ benchmarks! { assert!(video.nft_status.is_none()); assert_eq!(BTreeSet::from(video.data_objects), expected_asset_ids); assert_last_event::( - ::Event::from( + ::RuntimeEvent::from( Event::::VideoUpdated( actor, video_id, @@ -1061,7 +955,7 @@ benchmarks! { _ => panic!("Unexpected video nft transactional status") } assert_last_event::( - ::Event::from( + ::RuntimeEvent::from( Event::::VideoUpdated( actor, video_id, @@ -1141,7 +1035,7 @@ benchmarks! { _ => panic!("Unexpected video nft transactional status") } assert_last_event::( - ::Event::from( + ::RuntimeEvent::from( Event::::VideoUpdated( actor, video_id, @@ -1171,7 +1065,7 @@ benchmarks! { ) verify { assert!(Pallet::::ensure_video_exists(&video_id).is_err()); assert_last_event::( - ::Event::from( + ::RuntimeEvent::from( Event::::VideoDeleted( actor, video_id @@ -1199,7 +1093,7 @@ benchmarks! { ) verify { assert!(Pallet::::ensure_video_exists(&video_id).is_err()); assert_last_event::( - ::Event::from( + ::RuntimeEvent::from( Event::::VideoDeleted( actor, video_id @@ -1215,7 +1109,7 @@ benchmarks! { */ initialize_channel_transfer { - let a in 0 .. (T::MaxNumberOfCollaboratorsPerChannel::get() as u32); + let a in 0 .. T::MaxNumberOfCollaboratorsPerChannel::get(); let (_, new_owner_id) = member_funded_account::(); let new_owner = ChannelOwner::Member(new_owner_id); let new_collaborators = worst_case_scenario_collaborators::( @@ -1253,7 +1147,7 @@ benchmarks! { ChannelTransferStatus::PendingTransfer(pending_transfer.clone()) ); assert_last_event::( - ::Event::from( + ::RuntimeEvent::from( Event::::InitializedChannelTransfer( channel_id, actor, @@ -1277,7 +1171,7 @@ benchmarks! { let channel = Pallet::::channel_by_id(channel_id); assert!(channel.transfer_status == ChannelTransferStatus::NoActiveTransfer); assert_last_event::( - ::Event::from( + ::RuntimeEvent::from( Event::::CancelChannelTransfer( channel_id, actor, @@ -1287,7 +1181,7 @@ benchmarks! { } accept_channel_transfer_curator_to_curator { - let a in 0 .. (T::MaxNumberOfCollaboratorsPerChannel::get() as u32); + let a in 0 .. T::MaxNumberOfCollaboratorsPerChannel::get(); let (channel_id, group_id, lead_account_id, _, _) = setup_worst_case_scenario_curator_channel_all_max::(false)?; @@ -1329,7 +1223,7 @@ benchmarks! { assert!(channel.transfer_status == ChannelTransferStatus::NoActiveTransfer); assert_eq!(channel.owner, new_owner); assert_last_event::( - ::Event::from( + ::RuntimeEvent::from( Event::::ChannelTransferAccepted( channel_id, witness @@ -1339,7 +1233,7 @@ benchmarks! { } accept_channel_transfer_member_to_curator { - let a in 0 .. (T::MaxNumberOfCollaboratorsPerChannel::get() as u32); + let a in 0 .. T::MaxNumberOfCollaboratorsPerChannel::get(); let (channel_id, member_id, member_account_id, content_lead_acc_id) = setup_worst_case_scenario_member_channel_all_max::(false)?; @@ -1382,7 +1276,7 @@ benchmarks! { assert!(channel.transfer_status == ChannelTransferStatus::NoActiveTransfer); assert_eq!(channel.owner, new_owner); assert_last_event::( - ::Event::from( + ::RuntimeEvent::from( Event::::ChannelTransferAccepted( channel_id, witness @@ -1392,7 +1286,7 @@ benchmarks! { } accept_channel_transfer_member_to_member { - let a in 0 .. (T::MaxNumberOfCollaboratorsPerChannel::get() as u32); + let a in 0 .. T::MaxNumberOfCollaboratorsPerChannel::get(); let (channel_id, member_id, member_account_id, content_lead_acc_id) = setup_worst_case_scenario_member_channel_all_max::(false)?; @@ -1430,7 +1324,7 @@ benchmarks! { assert!(channel.transfer_status == ChannelTransferStatus::NoActiveTransfer); assert_eq!(channel.owner, new_owner); assert_last_event::( - ::Event::from( + ::RuntimeEvent::from( Event::::ChannelTransferAccepted( channel_id, witness @@ -1472,19 +1366,19 @@ benchmarks! { next_sale_id: 0, sale: None, transfer_policy: params.transfer_policy.into(), - symbol: params.symbol, patronage_info: PatronageData::, T::BlockNumber> { - rate: BlockRate::from_yearly_rate(params.patronage_rate, T::BlocksPerYear::get()), + rate: params.patronage_rate, unclaimed_patronage_tally_amount: Zero::zero(), last_unclaimed_patronage_tally_block: execution_block }, accounts_number: a as u64, revenue_split_rate: params.revenue_split_rate, revenue_split: RevenueSplitStateOf::::Inactive, - next_revenue_split_id: 0 + next_revenue_split_id: 0, + amm_curve: None, }); assert_last_event::( - ::Event::from( + ::RuntimeEvent::from( Event::::CreatorTokenIssued( actor, channel_id, @@ -1495,7 +1389,7 @@ benchmarks! { } creator_token_issuer_transfer { - let a in 1 .. MAX_CRT_ISSUER_TRANSFER_OUTPUTS; + let a in 1 .. ::MaxOutputs::get(); let b in 1 .. MAX_KILOBYTES_METADATA; let (channel_id, group_id, lead_acc_id, curator_id, curator_acc_id) = @@ -1543,11 +1437,11 @@ benchmarks! { } // Check event emitted assert_last_event::( - ::Event::from( + ::RuntimeEvent::from( project_token::Event::::TokenAmountTransferredByIssuer( token_id, curator_member_id, - Transfers(outputs.0 + Transfers(outputs .iter() .map(|(member_id, payment)| (Validated::NonExisting(*member_id), payment.clone().into()) @@ -1583,7 +1477,7 @@ benchmarks! { assert_eq!(token.transfer_policy, TransferPolicy::Permissionless); // Check event emitted assert_last_event::( - ::Event::from( + ::RuntimeEvent::from( project_token::Event::::TransferPolicyChangedToPermissionless( token_id ) @@ -1611,7 +1505,7 @@ benchmarks! { assert_eq!(channel.creator_token_id, None); // Check event emitted assert_last_event::( - ::Event::from( + ::RuntimeEvent::from( project_token::Event::::TokenDeissued(token_id) ).into() ); @@ -1663,7 +1557,7 @@ benchmarks! { assert!(owner_acc_data.split_staking_status.is_some()); // Check event emitted assert_last_event::( - ::Event::from( + ::RuntimeEvent::from( project_token::Event::::TokenSaleInitialized( token_id, token.next_sale_id - 1, @@ -1708,7 +1602,7 @@ benchmarks! { assert_eq!(token.sale.as_ref().unwrap().duration, new_duration.unwrap()); // Check event emitted assert_last_event::( - ::Event::from( + ::RuntimeEvent::from( project_token::Event::::UpcomingTokenSaleUpdated( token_id, sale_id, @@ -1764,7 +1658,7 @@ benchmarks! { assert_eq!(council_budget_post, council_budget_pre + funds_collected); // Check event emitted assert_last_event::( - ::Event::from( + ::RuntimeEvent::from( project_token::Event::::TokenSaleFinalized( token_id, sale_id, @@ -1775,6 +1669,70 @@ benchmarks! { ); } + activate_amm { + let (channel_id, group_id, lead_acc_id, curator_id, curator_acc_id) = + setup_worst_case_scenario_curator_channel_all_max::(false)?; + let curator_member_id = curator_member_id::(curator_id); + let origin = RawOrigin::Signed(curator_acc_id.clone()); + let actor = ContentActor::Curator(group_id, curator_id); + let token_id = + issue_creator_token_with_worst_case_scenario_owner::( + curator_acc_id, + actor, + channel_id, + curator_member_id + )?; + let slope = 10_000_000u32.into(); + let intercept = 100u32.into(); + let params = AmmParams{ slope, intercept }; + // No pausable feature prevents this + set_all_channel_paused_features::(channel_id); + }: _( + origin, + actor, + channel_id, + params + ) + verify { + let token = project_token::Pallet::::token_info_by_id(token_id); + assert_eq!( + token.amm_curve.unwrap(), + AmmCurve { + slope, + intercept, + provided_supply: 0u32.into(), + } + ) + } + + deactivate_amm { + let (channel_id, group_id, _, curator_id, curator_acc_id) = + setup_worst_case_scenario_curator_channel_all_max::(false)?; + let curator_member_id = curator_member_id::(curator_id); + let origin = RawOrigin::Signed(curator_acc_id.clone()); + let actor = ContentActor::Curator(group_id, curator_id); + let token_id = + issue_creator_token_with_worst_case_scenario_owner::( + curator_acc_id.clone(), + actor, + channel_id, + curator_member_id + )?; + // No pausable feature prevents this + call_activate_amm::(curator_acc_id, actor, channel_id); + set_all_channel_paused_features::(channel_id); + }: _( + origin, + actor, + channel_id + ) + verify { + let token = project_token::Pallet::::token_info_by_id(token_id); + assert!( + token.amm_curve.is_none(), + ) + } + issue_revenue_split { let (channel_id, group_id, lead_acc_id, curator_id, curator_acc_id) = setup_worst_case_scenario_curator_channel_all_max::(false)?; @@ -1813,7 +1771,7 @@ benchmarks! { assert_eq!(council_budget_post, council_budget_pre + withdrawn); // Check event emitted assert_past_event::( - ::Event::from( + ::RuntimeEvent::from( project_token::Event::::RevenueSplitIssued( token_id, start, @@ -1867,7 +1825,7 @@ benchmarks! { assert_eq!(owner_acc_balance_post, owner_acc_balance_pre + withdrawn); // Check event emitted assert_past_event::( - ::Event::from( + ::RuntimeEvent::from( project_token::Event::::RevenueSplitIssued( token_id, start, @@ -1947,7 +1905,7 @@ benchmarks! { assert_eq!(channel_balance_post, channel_balance_pre + leftovers); // Check event emitted assert_last_event::( - ::Event::from( + ::RuntimeEvent::from( project_token::Event::::RevenueSplitFinalized( token_id, channel_acc, @@ -1979,7 +1937,7 @@ benchmarks! { }: _(origin, actor, channel_id, target_rate) verify { let current_block = frame_system::Pallet::::block_number(); - let new_block_rate = BlockRate::from_yearly_rate(target_rate, T::BlocksPerYear::get()); + let new_block_rate = target_rate; assert!(TokenInfoById::::contains_key(token_id)); let token = project_token::Pallet::::token_info_by_id(token_id); assert_eq!(token.patronage_info.rate, new_block_rate); @@ -1991,10 +1949,10 @@ benchmarks! { ); // Check event emitted assert_last_event::( - ::Event::from( + ::RuntimeEvent::from( project_token::Event::::PatronageRateDecreasedTo( token_id, - new_block_rate.to_yearly_rate_representation(T::BlocksPerYear::get()) + new_block_rate ), ).into(), ); @@ -2037,7 +1995,7 @@ benchmarks! { assert_lt!(expected_claim - actually_claimed, deficiency_margin); // Check event emitted assert_last_event::( - ::Event::from( + ::RuntimeEvent::from( project_token::Event::::PatronageCreditClaimed( token_id, actually_claimed, @@ -2196,94 +2154,6 @@ benchmarks! { ); } - // Worst case scenario: - // - channel belonging to a member with max number of collaborators and max agent permissions - // - channel has all feature paused except the necessary for the extr. to succeed to maximize permission validation complexity - claim_and_withdraw_member_channel_reward { - let h in 1 .. MAX_MERKLE_PROOF_HASHES; - - let cumulative_reward_claimed: BalanceOf = Pallet::::min_cashout_allowed(); - let payments = create_pull_payments_with_reward::(2u32.pow(h), cumulative_reward_claimed); - let commitment = generate_merkle_root_helper::(&payments).pop().unwrap(); - let proof = build_merkle_path_helper::(&payments, 0); - let (channel_id, member_id, member_account_id, lead_account_id) = - setup_worst_case_scenario_member_channel_all_max::(false)?; - let lead_origin = RawOrigin::Signed(lead_account_id); - let origin = RawOrigin::Signed(member_account_id.clone()); - - set_all_channel_paused_features_except::(channel_id, vec![ - PausableChannelFeature::CreatorCashout, - PausableChannelFeature::ChannelFundsTransfer, - ]); - - Pallet::::update_channel_payouts( - RawOrigin::Root.into(), - UpdateChannelPayoutsParameters:: { - commitment: Some(commitment), - ..Default::default() - }, - member_account_id.clone() - )?; - - let actor = ContentActor::Member(member_id); - let balances_pre = Balances::::usable_balance(member_account_id.clone()); - let item = payments[0]; - T::CouncilBudgetManager::set_budget(cumulative_reward_claimed + T::ExistentialDeposit::get()); - }: claim_and_withdraw_channel_reward(origin, actor, proof, item) - verify { - assert_eq!( - Pallet::::channel_by_id(channel_id).cumulative_reward_claimed, - item.cumulative_reward_earned - ); - assert_eq!( - Balances::::usable_balance(member_account_id), - cumulative_reward_claimed + balances_pre, - ); - } - - // Worst case scenario: - // - curator channel belonging to a group with max number curator and max curator permissions - // - channel has all feature paused except the necessary for the extr. to succeed to maximize permission validation complexity - claim_and_withdraw_curator_channel_reward { - let h in 1 .. MAX_MERKLE_PROOF_HASHES; - - let cumulative_reward_claimed: BalanceOf = Pallet::::min_cashout_allowed(); - let payments = create_pull_payments_with_reward::(2u32.pow(h), cumulative_reward_claimed); - let commitment = generate_merkle_root_helper::(&payments).pop().unwrap(); - let proof = build_merkle_path_helper::(&payments, 0); - let (channel_id, group_id, lead_account_id, _, _) = - setup_worst_case_scenario_curator_channel_all_max::(false)?; - let origin = RawOrigin::Signed(lead_account_id.clone()); - - set_all_channel_paused_features_except::(channel_id, vec![ - PausableChannelFeature::CreatorCashout, - PausableChannelFeature::ChannelFundsTransfer, - ]); - - Pallet::::update_channel_payouts( - RawOrigin::Root.into(), - UpdateChannelPayoutsParameters:: { - commitment: Some(commitment), - ..Default::default() - }, - lead_account_id - )?; - - let actor = ContentActor::Lead; - let item = payments[0]; - T::CouncilBudgetManager::set_budget(cumulative_reward_claimed + T::ExistentialDeposit::get()); - }: claim_and_withdraw_channel_reward(origin, actor, proof, item) - verify { - assert_eq!( - Pallet::::channel_by_id(channel_id).cumulative_reward_claimed, - item.cumulative_reward_earned - ); - assert_eq!( - T::CouncilBudgetManager::get_budget(), - cumulative_reward_claimed + T::ExistentialDeposit::get(), - ); - } - // ================================================================================ // ============================ NFT - BASIC ====================================== // ================================================================================ @@ -3291,7 +3161,7 @@ benchmarks! { }: _(origin, channel_id, msg.clone()) verify { assert_last_event::( - ::Event::from( + ::RuntimeEvent::from( Event::::ChannelOwnerRemarked( channel_id, msg @@ -3324,7 +3194,7 @@ benchmarks! { }: _(origin, actor, channel_id, msg.clone()) verify { assert_last_event::( - ::Event::from( + ::RuntimeEvent::from( Event::::ChannelAgentRemarked( actor, channel_id, @@ -3373,7 +3243,7 @@ benchmarks! { }: _(origin, nft_owner_actor, video_id, msg.clone()) verify { assert_last_event::( - ::Event::from( + ::RuntimeEvent::from( Event::::NftOwnerRemarked( nft_owner_actor, video_id, @@ -3416,6 +3286,50 @@ benchmarks! { new_video_bloat_bond ); } + + // ================================================================================ + // ============================== PROJECT TOKEN ISSUER REMARKS ================================= + // ================================================================================ + + // WORST CASE SCENARIO + // STATE COMPLEXITY + // - curator owned channel + // - channel-owning curator group has max number of permissions per level + // - curator number is max + // - curator has max number of agent permissions + // - channel has max size: + // - all feature paused (except necessary ones for extr to succeed) + // - max channel assets + // - max collaborators + // INPUT COMPLEXITY + // - remark message byte-length: b + creator_token_issuer_remark { + let b in 1 .. MAX_KILOBYTES_METADATA; + let (channel_id, group_id, lead_acc_id, curator_id, curator_acc_id) = + setup_worst_case_scenario_curator_channel_all_max::(false)?; + let curator_member_id = curator_member_id::(curator_id); + let origin = RawOrigin::Signed(curator_acc_id.clone()); + let actor = ContentActor::Curator(group_id, curator_id); + let msg = vec![1u8].repeat((b * 1000) as usize); + let token_id = + issue_creator_token_with_worst_case_scenario_owner::( + curator_acc_id, + actor, + channel_id, + curator_member_id + )?; + }: _(origin, actor, channel_id, msg.clone()) + verify { + assert_last_event::( + ::RuntimeEvent::from( + Event::::CreatorTokenIssuerRemarked( + channel_id, + token_id, + msg + ) + ).into() + ); + } } #[cfg(test)] @@ -3472,13 +3386,6 @@ pub mod tests { }); } - #[test] - fn delete_channel_as_moderator() { - with_default_mock_builder(|| { - assert_ok!(Content::test_benchmark_delete_channel_as_moderator()); - }); - } - #[test] fn set_channel_visibility_as_moderator() { with_default_mock_builder(|| { @@ -3493,20 +3400,6 @@ pub mod tests { }); } - #[test] - fn delete_video_as_moderator_with_assets() { - with_default_mock_builder(|| { - assert_ok!(Content::test_benchmark_delete_video_as_moderator_with_assets()); - }); - } - - #[test] - fn delete_video_as_moderator_without_assets() { - with_default_mock_builder(|| { - assert_ok!(Content::test_benchmark_delete_video_as_moderator_without_assets()); - }); - } - #[test] fn set_video_visibility_as_moderator() { with_default_mock_builder(|| { @@ -3682,13 +3575,6 @@ pub mod tests { }) } - #[test] - fn claim_channel_and_withdraw_member_channel_reward() { - with_default_mock_builder(|| { - assert_ok!(Content::test_benchmark_claim_and_withdraw_member_channel_reward()); - }) - } - #[test] fn issue_nft() { with_default_mock_builder(|| { @@ -3696,13 +3582,6 @@ pub mod tests { }) } - #[test] - fn claim_channel_and_withdraw_curator_channel_reward() { - with_default_mock_builder(|| { - assert_ok!(Content::test_benchmark_claim_and_withdraw_curator_channel_reward()); - }) - } - #[test] fn destroy_nft() { with_default_mock_builder(|| { @@ -3954,4 +3833,25 @@ pub mod tests { assert_ok!(Content::test_benchmark_claim_creator_token_patronage_credit()); }); } + + #[test] + fn activate_amm() { + with_default_mock_builder(|| { + assert_ok!(Content::test_benchmark_activate_amm()); + }); + } + + #[test] + fn deactivate_amm() { + with_default_mock_builder(|| { + assert_ok!(Content::test_benchmark_deactivate_amm()); + }); + } + + #[test] + fn creator_token_issuer_remark() { + with_default_mock_builder(|| { + assert_ok!(Content::test_benchmark_creator_token_issuer_remark()); + }); + } } diff --git a/runtime-modules/content/src/benchmarks/mod.rs b/runtime-modules/content/src/benchmarks/mod.rs index b34475d392..ae78bccef1 100644 --- a/runtime-modules/content/src/benchmarks/mod.rs +++ b/runtime-modules/content/src/benchmarks/mod.rs @@ -13,7 +13,7 @@ use crate::{ use balances::Pallet as Balances; use common::{working_group::WorkingGroupAuthenticator, MembershipTypes}; -use frame_benchmarking::account; +use frame_benchmarking::v1::account; use frame_support::{ dispatch::DispatchError, storage::{StorageDoubleMap, StorageMap, StorageValue}, @@ -79,7 +79,6 @@ const MAX_KILOBYTES_METADATA: u32 = 100; // Creator tokens const MAX_CRT_INITIAL_ALLOCATION_MEMBERS: u32 = 1024; -const MAX_CRT_ISSUER_TRANSFER_OUTPUTS: u32 = 1024; const DEFAULT_CRT_OWNER_ISSUANCE: u32 = 1_000_000_000; const DEFAULT_CRT_SALE_CAP_PER_MEMBER: u32 = 1_000_000; const DEFAULT_CRT_SALE_PRICE: u32 = 500_000_000; @@ -87,7 +86,7 @@ const DEFAULT_CRT_SALE_UPPER_BOUND: u32 = DEFAULT_CRT_OWNER_ISSUANCE; const DEFAULT_CRT_REVENUE_SPLIT_RATE: Permill = Permill::from_percent(50); const DEFAULT_CRT_PATRONAGE_RATE: YearlyRate = YearlyRate(Permill::from_percent(10)); -const CHANNEL_AGENT_PERMISSIONS: [ChannelActionPermission; 21] = [ +const CHANNEL_AGENT_PERMISSIONS: [ChannelActionPermission; 22] = [ ChannelActionPermission::UpdateChannelMetadata, ChannelActionPermission::ManageNonVideoChannelAssets, ChannelActionPermission::ManageChannelCollaborators, @@ -109,9 +108,10 @@ const CHANNEL_AGENT_PERMISSIONS: [ChannelActionPermission; 21] = [ ChannelActionPermission::ReduceCreatorTokenPatronageRate, ChannelActionPermission::ManageRevenueSplits, ChannelActionPermission::DeissueCreatorToken, + ChannelActionPermission::AmmControl, ]; -const CONTENT_MODERATION_ACTIONS: [ContentModerationAction; 15] = [ +const CONTENT_MODERATION_ACTIONS: [ContentModerationAction; 13] = [ ContentModerationAction::HideVideo, ContentModerationAction::HideChannel, ContentModerationAction::ChangeChannelFeatureStatus( @@ -125,8 +125,6 @@ const CONTENT_MODERATION_ACTIONS: [ContentModerationAction; 15] = [ ContentModerationAction::ChangeChannelFeatureStatus( PausableChannelFeature::CreatorTokenIssuance, ), - ContentModerationAction::DeleteVideo, - ContentModerationAction::DeleteChannel, ContentModerationAction::DeleteVideoAssets(true), ContentModerationAction::DeleteVideoAssets(false), ContentModerationAction::DeleteNonVideoChannelAssets, @@ -198,7 +196,7 @@ impl RuntimeConfig for T where { } -fn get_signed_account_id(account_id: u64) -> T::Origin +fn get_signed_account_id(account_id: u64) -> T::RuntimeOrigin where T::AccountId: CreateAccountId, T: Config, @@ -206,12 +204,12 @@ where RawOrigin::Signed(T::AccountId::create_account_id(account_id)).into() } -fn assert_last_event(expected_event: ::Event) { +fn assert_last_event(expected_event: ::RuntimeEvent) { assert_past_event::(expected_event, 0); } fn assert_past_event( - expected_event: ::Event, + expected_event: ::RuntimeEvent, index_from_last: u32, ) { let events = System::::events(); @@ -220,26 +218,10 @@ fn assert_past_event( assert_eq!(event, &expected_event); } -fn get_byte(num: u64, byte_number: u8) -> u8 { - ((num & (0xff << (8 * byte_number))) >> (8 * byte_number)) as u8 -} - // Method to generate a distintic valid handle // for a membership. For each index. fn handle_from_id(id: u64) -> Vec { - let min_handle_length = 1; - - let mut handle = vec![]; - - for i in 0..16 { - handle.push(get_byte(id, i)); - } - - while handle.len() < (min_handle_length as usize) { - handle.push(0u8); - } - - handle + id.to_be_bytes().to_vec() } fn apply_on_opening_helper, I: Instance>( @@ -274,7 +256,7 @@ fn apply_on_opening_helper, I: Instance>( } fn add_and_apply_opening, I: Instance>( - add_opening_origin: &T::Origin, + add_opening_origin: &T::RuntimeOrigin, applicant_account_id: &T::AccountId, applicant_member_id: &T::MemberId, job_opening_type: &OpeningType, @@ -288,7 +270,7 @@ fn add_and_apply_opening, I: Instance>( } fn add_opening_helper, I: Instance>( - add_opening_origin: &T::Origin, + add_opening_origin: &T::RuntimeOrigin, job_opening_type: &OpeningType, ) -> OpeningId { working_group::Module::::add_opening( @@ -327,7 +309,7 @@ where let worker_id = working_group::NextWorkerId::::get(); let (opening_id, application_id) = add_and_apply_opening::( - &T::Origin::from(RawOrigin::Signed(leader_acc.clone())), + &T::RuntimeOrigin::from(RawOrigin::Signed(leader_acc.clone())), &account_id, &member_id, &OpeningType::Regular, @@ -367,7 +349,7 @@ where let account_id = change_member_account::(member_id, acc_id); let (opening_id, application_id) = add_and_apply_opening::( - &T::Origin::from(RawOrigin::Root), + &T::RuntimeOrigin::from(RawOrigin::Root), &account_id, &member_id, &OpeningType::Leader, @@ -510,7 +492,7 @@ fn set_dyn_bag_creation_storage_bucket_numbers( { let storage_wg_leader_signed = RawOrigin::Signed(lead_account_id); Storage::::update_number_of_storage_buckets_in_dynamic_bag_creation_policy( - T::Origin::from(storage_wg_leader_signed), + T::RuntimeOrigin::from(storage_wg_leader_signed), bag_type, storage_bucket_number, ) @@ -526,7 +508,7 @@ fn update_families_in_dynamic_bag_creation_policy( { let storage_wg_leader_signed = RawOrigin::Signed(lead_account_id); Storage::::update_families_in_dynamic_bag_creation_policy( - T::Origin::from(storage_wg_leader_signed), + T::RuntimeOrigin::from(storage_wg_leader_signed), bag_type, families, ) @@ -542,7 +524,7 @@ fn set_storage_buckets_voucher_max_limits( { let storage_wg_leader_signed = RawOrigin::Signed(lead_account_id); Storage::::update_storage_buckets_voucher_max_limits( - T::Origin::from(storage_wg_leader_signed), + T::RuntimeOrigin::from(storage_wg_leader_signed), voucher_objects_size_limit, voucher_objs_number_limit, ) @@ -556,7 +538,7 @@ where // Set storage bucket in the dynamic bag creation policy to zero. let storage_wg_leader_signed = RawOrigin::Signed(lead_account_id); Storage::::create_storage_bucket( - T::Origin::from(storage_wg_leader_signed), + T::RuntimeOrigin::from(storage_wg_leader_signed), None, accepting_bags, storage_bucket_objs_size_limit::(), @@ -581,7 +563,7 @@ where .next_distribution_bucket_index; Storage::::create_distribution_bucket( - T::Origin::from(storage_wg_leader_signed.clone()), + T::RuntimeOrigin::from(storage_wg_leader_signed.clone()), distribution_bucket_family_id, true, ) @@ -609,8 +591,10 @@ where let db_family_id = Storage::::next_distribution_bucket_family_id(); - Storage::::create_distribution_bucket_family(T::Origin::from(distribution_wg_leader_signed)) - .unwrap(); + Storage::::create_distribution_bucket_family(T::RuntimeOrigin::from( + distribution_wg_leader_signed, + )) + .unwrap(); ( db_family_id, @@ -1233,10 +1217,8 @@ fn create_token_issuance_params( initial_allocation: BTreeMap>, ) -> TokenIssuanceParametersOf { let transfer_policy_commit = ::Hashing::hash_of(b"commitment"); - let token_symbol = ::Hashing::hash_of(b"CRT"); TokenIssuanceParametersOf:: { initial_allocation, - symbol: token_symbol, transfer_policy: TransferPolicyParamsOf::::Permissioned(WhitelistParamsOf:: { commitment: transfer_policy_commit, payload: Some(SingleDataObjectUploadParams { @@ -1251,6 +1233,7 @@ fn create_token_issuance_params( }), patronage_rate: DEFAULT_CRT_PATRONAGE_RATE, revenue_split_rate: DEFAULT_CRT_REVENUE_SPLIT_RATE, + metadata: vec![], } } @@ -1364,22 +1347,21 @@ fn worst_case_scenario_token_sale_params( fn worst_case_scenario_issuer_transfer_outputs( num: u32, -) -> TransfersWithVestingOf +) -> TransferWithVestingOutputsOf where T::AccountId: CreateAccountId, { - Transfers( - (0..num) - .map(|_| { - let (_, member_id) = member_funded_account::(); - let payment = PaymentWithVestingOf:: { - amount: 100u32.into(), - vesting_schedule: Some(default_vesting_schedule_params::()), - }; - (member_id, payment) - }) - .collect(), - ) + let _outputs = (0..num) + .map(|_| { + let (_, member_id) = member_funded_account::(); + let payment = PaymentWithVestingOf:: { + amount: 100u32.into(), + vesting_schedule: Some(default_vesting_schedule_params::()), + }; + (member_id, payment) + }) + .collect::>(); + _outputs.try_into().unwrap() } pub fn run_to_block(target_block: T::BlockNumber) { @@ -1654,7 +1636,7 @@ fn add_english_auction_bid( video_id: T::VideoId, ) -> BalanceOf { let bid_amount = nft_buy_now_price::() - Pallet::::min_bid_step(); - let origin: T::Origin = RawOrigin::Signed(sender).into(); + let origin: T::RuntimeOrigin = RawOrigin::Signed(sender).into(); Pallet::::make_english_auction_bid(origin, participant_id, video_id, bid_amount).unwrap(); bid_amount } @@ -1665,7 +1647,7 @@ fn add_open_auction_bid( video_id: T::VideoId, ) -> OpenAuctionBid { let bid_amount = nft_buy_now_price::() - 1u32.into(); - let origin: T::Origin = RawOrigin::Signed(sender).into(); + let origin: T::RuntimeOrigin = RawOrigin::Signed(sender).into(); Pallet::::make_open_auction_bid(origin, participant_id, video_id, bid_amount).unwrap(); Pallet::::open_auction_bid_by_video_and_member(video_id, participant_id) } @@ -1676,3 +1658,15 @@ where { set_all_channel_paused_features_except::(channel_id, vec![]); } + +fn call_activate_amm( + sender: T::AccountId, + actor: ContentActor, + channel_id: T::ChannelId, +) { + let params = AmmParams { + slope: 10_000_000u32.into(), + intercept: 100u32.into(), + }; + Pallet::::activate_amm(RawOrigin::Signed(sender).into(), actor, channel_id, params).unwrap() +} diff --git a/runtime-modules/content/src/errors.rs b/runtime-modules/content/src/errors.rs index dde915efb0..27422e6366 100644 --- a/runtime-modules/content/src/errors.rs +++ b/runtime-modules/content/src/errors.rs @@ -409,5 +409,8 @@ decl_error! { /// Channel Transfers are blocked during token sales ChannelTransfersBlockedDuringTokenSales, + + /// Channel Transfers are blocked during active AMM + ChannelTransfersBlockedDuringActiveAmm } } diff --git a/runtime-modules/content/src/lib.rs b/runtime-modules/content/src/lib.rs index 5f9544e6bb..9c8e592b8a 100644 --- a/runtime-modules/content/src/lib.rs +++ b/runtime-modules/content/src/lib.rs @@ -27,6 +27,7 @@ mod tests; mod benchmarks; mod errors; +pub mod migrations; mod nft; mod permissions; mod types; @@ -35,8 +36,8 @@ pub mod weights; use core::marker::PhantomData; use project_token::traits::PalletToken; use project_token::types::{ - JoyBalanceOf, TokenIssuanceParametersOf, TokenSaleParamsOf, TransfersWithVestingOf, - UploadContextOf, YearlyRate, + AmmParamsOf, JoyBalanceOf, TokenIssuanceParametersOf, TokenSaleParamsOf, + TransferWithVestingOutputsOf, UploadContextOf, YearlyRate, }; use sp_std::vec; pub use weights::WeightInfo; @@ -71,7 +72,7 @@ use frame_support::{ decl_event, decl_module, decl_storage, dispatch::{DispatchError, DispatchResult}, ensure, - traits::{Currency, ExistenceRequirement, Get}, + traits::{Currency, ExistenceRequirement, Get, StorageVersion}, PalletId, Parameter, }; @@ -90,6 +91,14 @@ use sp_std::{borrow::ToOwned, collections::btree_set::BTreeSet, vec::Vec}; type WeightInfoContent = ::WeightInfo; +/// The log target of this pallet. +pub const LOG_TARGET: &str = "runtime::content"; + +// Nara release. enum variants removed: +// - ContentModerationAction::DeleteVideo +// - ContentModerationAction::DeleteChannel +const CURRENT_STORAGE_VERSION: StorageVersion = StorageVersion::new(1); + /// Module configuration trait for Content Directory Module pub trait Config: frame_system::Config @@ -104,7 +113,7 @@ pub trait Config: type WeightInfo: WeightInfo; /// The overarching event type. - type Event: From> + Into<::Event>; + type RuntimeEvent: From> + Into<::RuntimeEvent>; /// Type of identifier for Videos type VideoId: NumericIdentifier; @@ -184,7 +193,8 @@ pub trait Config: Self::BlockNumber, TokenSaleParamsOf, UploadContextOf, - TransfersWithVestingOf, + TransferWithVestingOutputsOf, + AmmParamsOf, >; /// Minimum cashout allowed limit @@ -294,7 +304,6 @@ decl_storage! { generate_storage_info /// NFT limits enabled or not /// Can be updated in flight by the Council pub NftLimitsEnabled get(fn nft_limits_enabled) config(): bool; - } add_extra_genesis { build(|_| { @@ -310,7 +319,7 @@ decl_storage! { generate_storage_info } decl_module! { - pub struct Module for enum Call where origin: T::Origin { + pub struct Module for enum Call where origin: T::RuntimeOrigin { /// Predefined errors type Error = Error; @@ -333,15 +342,15 @@ decl_module! { /// Exports const - default global weekly NFT limit. const DefaultGlobalWeeklyNftLimit: LimitPerPeriod = - T::DefaultGlobalDailyNftLimit::get(); + T::DefaultGlobalWeeklyNftLimit::get(); /// Exports const - default channel daily NFT limit. const DefaultChannelDailyNftLimit: LimitPerPeriod = - T::DefaultGlobalDailyNftLimit::get(); + T::DefaultChannelDailyNftLimit::get(); /// Exports const - default channel weekly NFT limit. const DefaultChannelWeeklyNftLimit: LimitPerPeriod = - T::DefaultGlobalDailyNftLimit::get(); + T::DefaultChannelWeeklyNftLimit::get(); /// Export const - min cashout allowed limits const MinimumCashoutAllowedLimit: BalanceOf = T::MinimumCashoutAllowedLimit::get(); @@ -970,48 +979,6 @@ decl_module! { Self::deposit_event(RawEvent::ChannelAssetsDeletedByModerator(actor, channel_id, assets_to_remove, rationale)); } - // extrinsics for channel deletion as moderator - #[weight = Module::::delete_channel_as_moderator_weight(channel_bag_witness, num_objects_to_delete, rationale)] - pub fn delete_channel_as_moderator( - origin, - actor: ContentActor, - channel_id: T::ChannelId, - channel_bag_witness: ChannelBagWitness, - num_objects_to_delete: u64, - rationale: Vec, - ) -> DispatchResult { - - let sender = ensure_signed(origin)?; - - // check that channel exists - let channel = Self::ensure_channel_exists(&channel_id)?; - - // verify channel bag witness - Self::verify_channel_bag_witness(channel_id, &channel_bag_witness)?; - - // Permissions check - let actions_to_perform = vec![ContentModerationAction::DeleteChannel]; - ensure_actor_authorized_to_perform_moderation_actions::(&sender, &actor, &actions_to_perform, channel.privilege_level)?; - - // check that channel videos are 0 - ensure!(channel.num_videos == 0, Error::::ChannelContainsVideos); - - // ensure channel bag exists and num_objects_to_delete is valid - Self::ensure_channel_bag_can_be_dropped(channel_id, num_objects_to_delete)?; - - // try to remove the channel, slash the bloat bond - Self::try_to_perform_channel_deletion(&sender, channel_id, channel, true)?; - - // - // == MUTATION SAFE == - // - - // deposit event - Self::deposit_event(RawEvent::ChannelDeletedByModerator(actor, channel_id, rationale)); - - Ok(()) - } - /// Extrinsic for setting channel visibility status (hidden/visible) by moderator /// /// @@ -1303,7 +1270,7 @@ decl_module! { ChannelById::::mutate(channel_id, |channel| { Self::increment_nft_counters(channel); }); - VideoById::::mutate(&video_id, |video| video.nft_status = nft_status); + VideoById::::mutate(video_id, |video| video.nft_status = nft_status); } Self::deposit_event(RawEvent::VideoUpdated(actor, video_id, params, new_data_objects_ids)); @@ -1434,55 +1401,6 @@ decl_module! { Self::deposit_event(RawEvent::VideoAssetsDeletedByModerator(actor, video_id, assets_to_remove, is_nft, rationale)); } - /// - /// - /// ## Weight - /// `O (A + B + C)` where: - /// - `A` is the value of `num_objects_to_delete` - /// - `B` is the value of `storage_buckets_num_witness` - /// - `C` is the size of `rationale` in kilobytes - /// - DB: - /// - `O(A + B)` - from the the generated weights - /// # - #[weight = Module::::delete_video_as_moderator_weight(num_objects_to_delete, storage_buckets_num_witness, rationale)] - pub fn delete_video_as_moderator( - origin, - actor: ContentActor, - video_id: T::VideoId, - storage_buckets_num_witness: Option, - num_objects_to_delete: u64, - rationale: Vec, - ) { - let sender = ensure_signed(origin)?; - - // check that video exists - let video = Self::ensure_video_exists(&video_id)?; - - // get information regarding channel - let channel_id = video.in_channel; - let channel = Self::get_channel_from_video(&video); - - // Permissions check - let actions_to_perform = vec![ContentModerationAction::DeleteVideo]; - ensure_actor_authorized_to_perform_moderation_actions::(&sender, &actor, &actions_to_perform, channel.privilege_level)?; - - // ensure video can be removed - Self::ensure_video_can_be_removed(&video)?; - - // ensure provided num_objects_to_delete is valid - Self::ensure_valid_video_num_objects_to_delete(&video, num_objects_to_delete)?; - - - // Try removing the video, slash the bloat bond - Self::try_to_perform_video_deletion(&sender, channel_id, video_id, &video, true, storage_buckets_num_witness)?; - - // - // == MUTATION SAFE == - // - - Self::deposit_event(RawEvent::VideoDeletedByModerator(actor, video_id, rationale)); - } - /// Extrinsic for video visibility status (hidden/visible) setting by moderator /// /// @@ -1749,54 +1667,6 @@ decl_module! { new_video_state_bloat_bond)); } - /// Claim and withdraw reward in JOY from channel account - /// - /// - /// - /// ## Weight - /// `O (H)` where: - /// - `H` is the lenght of the provided merkle `proof` - /// - DB: - /// - O(1) - /// # - #[weight = - WeightInfoContent::::claim_and_withdraw_member_channel_reward(proof.len() as u32) - .max(WeightInfoContent::::claim_and_withdraw_curator_channel_reward( - proof.len() as u32 - ))] - pub fn claim_and_withdraw_channel_reward( - origin, - actor: ContentActor, - proof: Vec>, - item: PullPayment - ) -> DispatchResult { - let (channel, reward_account, amount) = - Self::ensure_can_claim_channel_reward(&origin, &actor, &item, &proof)?; - - // Ensure withdrawals are not paused - channel.ensure_feature_not_paused::(PausableChannelFeature::ChannelFundsTransfer)?; - - ensure_actor_authorized_to_withdraw_from_channel::(origin, &actor, &channel)?; - - let destination = Self::channel_funds_destination(&channel)?; - - // - // == MUTATION_SAFE == - // - Self::execute_channel_reward_claim(item.channel_id, &reward_account, amount); - // This call should (and is assumed to) never fail: - Self::execute_channel_balance_withdrawal(&reward_account, &destination, amount)?; - - Self::deposit_event(RawEvent::ChannelRewardClaimedAndWithdrawn( - actor, - item.channel_id, - amount, - destination, - )); - - Ok(()) - } - /// Issue NFT /// /// @@ -2539,7 +2409,7 @@ decl_module! { Self::withdraw_bid_payment(&participant_account_id, old_bid.amount)?; // remove - OpenAuctionBidByVideoAndMember::::remove(&video_id, &participant_id); + OpenAuctionBidByVideoAndMember::::remove(video_id, participant_id); // Trigger event Self::deposit_event(RawEvent::AuctionBidCanceled(participant_id, video_id)); @@ -3076,6 +2946,11 @@ decl_module! { T::ProjectToken::is_sale_unscheduled(token_id), Error::::ChannelTransfersBlockedDuringTokenSales, ); + + ensure!( + !T::ProjectToken::is_amm_active(token_id), + Error::::ChannelTransfersBlockedDuringActiveAmm + ); } // @@ -3083,7 +2958,7 @@ decl_module! { // ChannelById::::mutate( - &channel_id, + channel_id, |channel| channel.transfer_status = ChannelTransferStatus::PendingTransfer(pending_transfer.clone()) ); @@ -3118,7 +2993,7 @@ decl_module! { if channel.transfer_status.is_pending() { ChannelById::::mutate( - &channel_id, + channel_id, |channel| { channel.transfer_status = ChannelTransferStatus::NoActiveTransfer; }); @@ -3170,7 +3045,7 @@ decl_module! { Self::pay_for_channel_swap(&channel.owner, &new_owner, commitment_params.price)?; } - ChannelById::::mutate(&channel_id, |channel| { + ChannelById::::mutate(channel_id, |channel| { channel.transfer_status = ChannelTransferStatus::NoActiveTransfer; channel.owner = new_owner; channel.collaborators = new_collaborators; @@ -3295,7 +3170,7 @@ decl_module! { // == MUTATION SAFE == // - ChannelById::::mutate(&channel_id, |channel| { + ChannelById::::mutate(channel_id, |channel| { channel.creator_token_id = Some(token_id); }); @@ -3420,14 +3295,14 @@ decl_module! { /// - `O(A)` - from the the generated weights /// # #[weight = WeightInfoContent::::creator_token_issuer_transfer( - outputs.0.len() as u32, + outputs.len() as u32, to_kb(metadata.len() as u32) )] pub fn creator_token_issuer_transfer( origin, actor: ContentActor, channel_id: T::ChannelId, - outputs: TransfersWithVestingOf, + outputs: TransferWithVestingOutputsOf, metadata: Vec ) { let channel = Self::ensure_channel_exists(&channel_id)?; @@ -3753,10 +3628,105 @@ decl_module! { // == MUTATION SAFE == // - ChannelById::::mutate(&channel_id, |channel| { + ChannelById::::mutate(channel_id, |channel| { channel.creator_token_id = None; }); } + + /// Activate Amm functionality for token + #[weight = WeightInfoContent::::activate_amm()] + pub fn activate_amm( + origin, + actor: ContentActor, + channel_id: T::ChannelId, + params: AmmParamsOf, + ) { + let channel = Self::ensure_channel_exists(&channel_id)?; + + channel.ensure_has_no_active_transfer::()?; + + // Ensure token was issued + let token_id = channel.ensure_creator_token_issued::()?; + + // Permissions check + ensure_actor_authorized_to_activate_amm::( + origin, + &actor, + &channel + )?; + + // Retrieve member_id based on actor + let member_id = get_member_id_of_actor::(&actor)?; + + // Call to ProjectToken + T::ProjectToken::activate_amm( + token_id, + member_id, + params, + )?; + + } + + /// Deactivate Amm functionality for token + #[weight = WeightInfoContent::::deactivate_amm()] + pub fn deactivate_amm( + origin, + actor: ContentActor, + channel_id: T::ChannelId, + ) { + let channel = Self::ensure_channel_exists(&channel_id)?; + + // Ensure token was issued + let token_id = channel.ensure_creator_token_issued::()?; + + // Permissions check + ensure_actor_authorized_to_deactivate_amm::( + origin, + &actor, + &channel + )?; + + // Retrieve member_id based on actor + let member_id = get_member_id_of_actor::(&actor)?; + + // Call to ProjectToken + T::ProjectToken::deactivate_amm( + token_id, + member_id, + )?; + + } + + /// Allow crt issuer to update metadata for an existing token + #[weight = WeightInfoContent::::creator_token_issuer_remark(to_kb(remark.len() as u32))] + pub fn creator_token_issuer_remark( + origin, + actor: ContentActor, + channel_id: T::ChannelId, + remark: Vec, + ) { + let channel = Self::ensure_channel_exists(&channel_id)?; + + // Ensure token was issued + let token_id = channel.ensure_creator_token_issued::()?; + + // Permissions check + let _ = ensure_actor_authorized_to_issue_creator_token::( + origin, + &actor, + &channel + )?; + + // == MUTATION SAFE == + + Self::deposit_event(RawEvent::CreatorTokenIssuerRemarked( + channel_id, + token_id, + remark, + )); + } + + type StorageVersion = CURRENT_STORAGE_VERSION; } } @@ -4321,7 +4291,7 @@ impl Module { } fn ensure_can_claim_channel_reward( - origin: &T::Origin, + origin: &T::RuntimeOrigin, actor: &ContentActor, item: &PullPayment, proof: &[ProofElement], @@ -4385,7 +4355,7 @@ impl Module { amount: BalanceOf, ) { T::CouncilBudgetManager::withdraw(reward_account, amount); - ChannelById::::mutate(&channel_id, |channel| { + ChannelById::::mutate(channel_id, |channel| { channel.cumulative_reward_claimed = channel.cumulative_reward_claimed.saturating_add(amount) }); @@ -4552,10 +4522,10 @@ impl Module { let a = (*num_objects_to_delete) as u32; //channel_bag_witness storage_buckets_num - let b = (*channel_bag_witness).storage_buckets_num; + let b = channel_bag_witness.storage_buckets_num; //channel_bag_witness distribution_buckets_num - let c = (*channel_bag_witness).distribution_buckets_num; + let c = channel_bag_witness.distribution_buckets_num; WeightInfoContent::::delete_channel(a, b, c) } @@ -4721,26 +4691,6 @@ impl Module { WeightInfoContent::::delete_channel_assets_as_moderator(a, b, c) } - // Calculates weight for delete_channel_as_moderator extrinsic. - fn delete_channel_as_moderator_weight( - channel_bag_witness: &ChannelBagWitness, - num_objects_to_delete: &u64, - rationale: &Vec, - ) -> Weight { - //num_objects_to_delete - let a = (*num_objects_to_delete) as u32; - - //channel_bag_witness storage_buckets_num - let b = (*channel_bag_witness).storage_buckets_num; - - //channel_bag_witness distribution_buckets_num - let c = (*channel_bag_witness).distribution_buckets_num; - - //rationale - let d = to_kb((*rationale).len() as u32); - WeightInfoContent::::delete_channel_as_moderator(a, b, c, d) - } - // Calculates weight for set_channel_visibility_as_moderator extrinsic. fn set_channel_visibility_as_moderator_weight(rationale: &Vec) -> Weight { let a = to_kb((*rationale).len() as u32); @@ -4773,31 +4723,6 @@ impl Module { WeightInfoContent::::delete_video_assets_as_moderator(a, b, c) } - // Calculates weight for delete_video_as_moderator extrinsic. - fn delete_video_as_moderator_weight( - num_objects_to_delete: &u64, - storage_buckets_num_witness: &Option, - rationale: &Vec, - ) -> Weight { - if (*num_objects_to_delete) > 0 { - //assets_to_remove - let a = (*num_objects_to_delete) as u32; - - //storage_buckets_num_witness storage_buckets_num - let b = storage_buckets_num_witness.map_or(0, |v| v); - - //rationale - let c = to_kb((*rationale).len() as u32); - - WeightInfoContent::::delete_video_as_moderator_with_assets(a, b, c) - } else { - //rationale - let a = to_kb((*rationale).len() as u32); - - WeightInfoContent::::delete_video_as_moderator_without_assets(a) - } - } - // Calculates weight for accept_channel_transfer extrinsic. fn accept_channel_transfer_weight(collaborators_len: u32) -> Weight { WeightInfoContent::::accept_channel_transfer_curator_to_curator(collaborators_len) @@ -4865,7 +4790,6 @@ decl_event!( VideoStateBloatBondValueUpdated(Balance), ChannelAssetsRemoved(ContentActor, ChannelId, BTreeSet, Channel), ChannelDeleted(ContentActor, ChannelId), - ChannelDeletedByModerator(ContentActor, ChannelId, Vec /* rationale */), ChannelVisibilitySetByModerator( ContentActor, ChannelId, @@ -4903,7 +4827,6 @@ decl_event!( BTreeSet, ), VideoDeleted(ContentActor, VideoId), - VideoDeletedByModerator(ContentActor, VideoId, Vec /* rationale */), VideoVisibilitySetByModerator(ContentActor, VideoId, bool, Vec /* rationale */), VideoAssetsDeletedByModerator( ContentActor, @@ -4954,7 +4877,16 @@ decl_event!( GlobalNftLimitUpdated(NftLimitPeriod, u64), ChannelNftLimitUpdated(ContentActor, NftLimitPeriod, ChannelId, u64), ToggledNftLimits(bool), + // Creator tokens CreatorTokenIssued(ContentActor, ChannelId, TokenId), + CreatorTokenIssuerRemarked(ChannelId, TokenId, Vec), } ); + +impl frame_support::traits::Hooks for Pallet { + #[cfg(feature = "try-runtime")] + fn try_state(_: T::BlockNumber) -> Result<(), &'static str> { + Ok(()) + } +} diff --git a/runtime-modules/content/src/migrations.rs b/runtime-modules/content/src/migrations.rs new file mode 100644 index 0000000000..b1eb83bb18 --- /dev/null +++ b/runtime-modules/content/src/migrations.rs @@ -0,0 +1,219 @@ +// Migrations for Content Pallet + +use super::*; +use frame_support::{parameter_types, traits::OnRuntimeUpgrade, BoundedBTreeMap, BoundedBTreeSet}; + +#[cfg(feature = "try-runtime")] +use frame_support::ensure; + +// syntactic sugar for logging. +#[macro_export] +macro_rules! log { + ($level:tt, $patter:expr $(, $values:expr)* $(,)?) => { + log::$level!( + target: $crate::LOG_TARGET, + concat!("[{:?}] 📹 ", $patter), >::block_number() $(, $values)* + ) + }; +} + +pub mod nara { + use super::*; + use frame_support::pallet_prelude::*; + + // Proc macro (EnumIter) clippy::integer_arithmetic disable hack + #[allow(clippy::integer_arithmetic)] + mod iterable_enums { + use super::PausableChannelFeature; + use codec::{Decode, Encode, MaxEncodedLen}; + use scale_info::TypeInfo; + use varaint_count::VariantCount; + #[derive( + Encode, + Decode, + Clone, + PartialEq, + Eq, + Debug, + PartialOrd, + Ord, + TypeInfo, + VariantCount, + MaxEncodedLen, + )] + pub enum ContentModerationActionV0 { + HideVideo, + HideChannel, + ChangeChannelFeatureStatus(PausableChannelFeature), + DeleteVideo, + DeleteChannel, + DeleteVideoAssets(bool), + DeleteNonVideoChannelAssets, + UpdateChannelNftLimits, + } + } + parameter_types! { + MaxCuratorPermissionsPerLevelV0: u32 = (iterable_enums::ContentModerationActionV0::VARIANT_COUNT as u32) + // ChangeChannelFeatureStatus can contain all possible PausableChannelFeature variants + .saturating_add((PausableChannelFeature::VARIANT_COUNT as u32).saturating_sub(1)) + // DeleteVideoAssets can contain `true` or `false` + .saturating_add(1); + } + + #[derive(Encode, Decode, Eq, PartialEq, Clone, Debug, TypeInfo, MaxEncodedLen)] + struct CuratorGroupRecordV0 { + /// Map from CuratorId to curator's ChannelAgentPermissions + pub curators: CuratorGroupCuratorsMap, + + /// When `false`, curator in a given group is forbidden to act + pub active: bool, + + // Group's moderation permissions (by channel's privilage level) + pub permissions_by_level: ModerationPermissionsByLevel, + } + + type CuratorGroupV0 = + CuratorGroupRecordV0, StoredModerationPermissionsByLevelV0>; + + type StoredCuratorModerationPermissionsV0 = + BoundedBTreeSet; + + type StoredModerationPermissionsByLevelV0 = BoundedBTreeMap< + ::ChannelPrivilegeLevel, + StoredCuratorModerationPermissionsV0, + ::MaxKeysPerCuratorGroupPermissionsByLevelMap, + >; + + // #[frame_support::storage_alias] + // type CuratorGroupByIdV0 = StorageMap< + // Pallet, + // Blake2_128Concat, + // ::CuratorGroupId, + // CuratorGroupV0, + // >; + + pub struct MigrateToV1(sp_std::marker::PhantomData); + impl OnRuntimeUpgrade for MigrateToV1 { + #[cfg(feature = "try-runtime")] + fn pre_upgrade() -> Result, &'static str> { + let onchain = Pallet::::on_chain_storage_version(); + + ensure!(onchain < 1, "this migration can be deleted"); + + // using storage alias CuratorGroupByIdV0 was not working. + // most likely wrong prefix is getting used, since even iterating over keys return 0 count. + // So we use the new map but only iterate over keys to avoid decode errors. (if decode fails the item is skipped) + let group_count: usize = CuratorGroupById::::iter_keys().count(); + log!(info, "Number of curator groups pre_upgrade {}", group_count); + + Ok(group_count.to_be_bytes().to_vec()) + } + + fn on_runtime_upgrade() -> Weight { + let onchain = Pallet::::on_chain_storage_version(); + let current = Pallet::::current_storage_version(); + + if onchain > 0 { + return T::DbWeight::get().reads(1); + } + + use iterable_enums::ContentModerationActionV0; + + >::translate_values( + |old_value: CuratorGroupV0| -> Option> { + log!(info, "Migrating group {:?}", old_value); + let mut permissions_by_level = ModerationPermissionsByLevel::::new(); + old_value + .permissions_by_level + .iter() + .for_each(|(level, permissions)| { + log!(info, "level: {:?}, permissions: {:?}", level, permissions); + let mut permissions_v1 = BTreeSet::new(); + permissions.iter().for_each(|action| match action { + ContentModerationActionV0::HideVideo => { + permissions_v1.insert(ContentModerationAction::HideVideo); + } + ContentModerationActionV0::HideChannel => { + permissions_v1.insert(ContentModerationAction::HideChannel); + } + ContentModerationActionV0::ChangeChannelFeatureStatus(feature) => { + permissions_v1.insert( + ContentModerationAction::ChangeChannelFeatureStatus( + *feature, + ), + ); + } + ContentModerationActionV0::DeleteVideoAssets(b) => { + permissions_v1 + .insert(ContentModerationAction::DeleteVideoAssets(*b)); + } + ContentModerationActionV0::DeleteNonVideoChannelAssets => { + permissions_v1.insert( + ContentModerationAction::DeleteNonVideoChannelAssets, + ); + } + ContentModerationActionV0::UpdateChannelNftLimits => { + permissions_v1 + .insert(ContentModerationAction::UpdateChannelNftLimits); + } + ContentModerationActionV0::DeleteVideo => {} + ContentModerationActionV0::DeleteChannel => {} + }); + permissions_by_level.insert(*level, permissions_v1); + }); + let mut group_created_successfully = false; + let mut group = CuratorGroupRecord::try_create::( + old_value.active, + &permissions_by_level, + ) + .map_or_else( + |_err| Default::default(), + |v| { + group_created_successfully = true; + v + }, + ); + if !group_created_successfully { + // The group will be dropped + log!(warn, "Failed to create a group"); + return None; + } + old_value.curators.into_iter().for_each(|(k, v)| { + let result = group.try_add_curator::(k, &v); + if result.is_err() { + log!(warn, "Failed to add curator to group"); + } + }); + Some(group) + }, + ); + + current.put::>(); + + ::BlockWeights::get().max_block + } + + #[cfg(feature = "try-runtime")] + fn post_upgrade(state: Vec) -> Result<(), &'static str> { + let onchain = Pallet::::on_chain_storage_version(); + ensure!(onchain < 2, "this migration needs to be removed"); + ensure!(onchain == 1, "this migration needs to be run"); + let group_count = CuratorGroupById::::iter().count(); + log!( + info, + "Number of curator groups post_upgrade {}", + group_count + ); + let pre_upgrade_group_count = usize::from_be_bytes(state.try_into().unwrap()); + ensure!( + pre_upgrade_group_count == group_count, + "group counts differ post_upgrade" + ); + log!(info, "Curator Groups after migration"); + CuratorGroupById::::iter().for_each(|group| { + log!(info, "{:?}", group); + }); + Ok(()) + } + } +} diff --git a/runtime-modules/content/src/permissions/curator_group.rs b/runtime-modules/content/src/permissions/curator_group.rs index 01b574fb79..adb5523502 100644 --- a/runtime-modules/content/src/permissions/curator_group.rs +++ b/runtime-modules/content/src/permissions/curator_group.rs @@ -39,12 +39,6 @@ pub mod iterable_enums { // - `set_channel_paused_features_as_moderator` - each change of `PausableChannelFeature` `x` requires permissions // for executing `ChangeChannelFeatureStatus(x)` action ChangeChannelFeatureStatus(PausableChannelFeature), - // Related extrinsics: - // - `delete_video_as_moderator` - DeleteVideo, - // Related extrinsics: - // - `delete_channel_as_moderator` - DeleteChannel, // DeleteVideoAssets(is_video_nft_status_set) // Related extrinsics: // - `delete_video_assets_as_moderator` - deletion of assets belonging to a video which has an NFT issued @@ -77,11 +71,9 @@ pub mod iterable_enums { pub enum PausableChannelFeature { // Affects: // -`withdraw_from_channel_balance` - // -`claim_and_withdraw_channel_reward` ChannelFundsTransfer, // Affects: // - `claim_channel_reward` - // - `claim_and_withdraw_channel_reward` CreatorCashout, // Affects: // - `issue_nft` diff --git a/runtime-modules/content/src/permissions/mod.rs b/runtime-modules/content/src/permissions/mod.rs index e41ba60b75..9a2049242a 100644 --- a/runtime-modules/content/src/permissions/mod.rs +++ b/runtime-modules/content/src/permissions/mod.rs @@ -372,7 +372,7 @@ pub fn ensure_actor_has_channel_permissions( ContentActor::Lead => ensure_channel_is_owned_by_curators::(channel).map(|_| None), ContentActor::Curator(curator_group_id, curator_id) => { ensure_channel_is_owned_by_curator_group::(channel, curator_group_id)?; - let group = Module::::curator_group_by_id(&curator_group_id); + let group = Module::::curator_group_by_id(curator_group_id); let agent_permissions = group.get_existing_group_member_channel_agent_permissions::(curator_id)?; ensure_agent_has_required_permissions::(agent_permissions, required_permissions)?; @@ -414,7 +414,7 @@ fn ensure_agent_has_required_permissions( /// Ensure actor can manage nft pub fn ensure_actor_authorized_to_manage_nft( - origin: T::Origin, + origin: T::RuntimeOrigin, actor: &ContentActor, nft_owner: &NftOwner, in_channel: T::ChannelId, @@ -436,7 +436,7 @@ pub fn ensure_actor_authorized_to_manage_nft( // Ensure actor can manage categories pub fn ensure_actor_authorized_to_manage_categories( - origin: T::Origin, + origin: T::RuntimeOrigin, actor: &ContentActor, ) -> DispatchResult { // Only lead and curators can manage categories @@ -465,7 +465,7 @@ pub fn actor_to_channel_owner( // authorize actor and claim payment pub fn ensure_actor_authorized_to_claim_payment( - origin: T::Origin, + origin: T::RuntimeOrigin, actor: &ContentActor, channel: &Channel, ) -> Result, DispatchError> { @@ -479,7 +479,7 @@ pub fn ensure_actor_authorized_to_claim_payment( } pub fn ensure_actor_authorized_to_withdraw_from_channel( - origin: T::Origin, + origin: T::RuntimeOrigin, actor: &ContentActor, channel: &Channel, ) -> Result, DispatchError> { @@ -530,7 +530,7 @@ pub fn ensure_actor_authorized_to_perform_moderation_actions( match actor { ContentActor::Lead => Ok(()), ContentActor::Curator(curator_group_id, ..) => { - let group = Module::::curator_group_by_id(&curator_group_id); + let group = Module::::curator_group_by_id(curator_group_id); group.ensure_group_member_can_perform_moderation_actions::( actions, channel_privilege_level, @@ -545,7 +545,7 @@ pub fn ensure_actor_authorized_to_perform_moderation_actions( // start Transfer channel check. pub fn ensure_actor_authorized_to_transfer_channel( - origin: T::Origin, + origin: T::RuntimeOrigin, actor: &ContentActor, channel: &Channel, ) -> Result, DispatchError> { @@ -560,7 +560,7 @@ pub fn ensure_actor_authorized_to_transfer_channel( // cancel Transfer channel check. pub fn ensure_actor_authorized_to_cancel_channel_transfer( - origin: T::Origin, + origin: T::RuntimeOrigin, actor: &ContentActor, channel: &Channel, ) -> Result, DispatchError> { @@ -575,7 +575,7 @@ pub fn ensure_actor_authorized_to_cancel_channel_transfer( // Council reward pub fn ensure_actor_authorized_to_claim_council_reward( - origin: T::Origin, + origin: T::RuntimeOrigin, owner: &ChannelOwner, ) -> DispatchResult { let sender = ensure_signed(origin)?; @@ -600,7 +600,7 @@ pub fn ensure_no_channel_transfers(channel: &Channel) -> DispatchR // Nft limits pub fn ensure_actor_authorized_to_update_channel_nft_limits( - origin: T::Origin, + origin: T::RuntimeOrigin, actor: &ContentActor, channel: &Channel, ) -> DispatchResult { @@ -626,7 +626,7 @@ pub fn get_member_id_of_actor( } pub fn ensure_actor_authorized_to_issue_creator_token( - origin: T::Origin, + origin: T::RuntimeOrigin, actor: &ContentActor, channel: &Channel, ) -> Result { @@ -637,7 +637,7 @@ pub fn ensure_actor_authorized_to_issue_creator_token( } pub fn ensure_actor_authorized_to_claim_creator_token_patronage( - origin: T::Origin, + origin: T::RuntimeOrigin, actor: &ContentActor, channel: &Channel, ) -> Result { @@ -648,7 +648,7 @@ pub fn ensure_actor_authorized_to_claim_creator_token_patronage( } pub fn ensure_actor_authorized_to_init_and_manage_creator_token_sale( - origin: T::Origin, + origin: T::RuntimeOrigin, actor: &ContentActor, channel: &Channel, ) -> Result<(T::AccountId, Option), DispatchError> { @@ -660,7 +660,7 @@ pub fn ensure_actor_authorized_to_init_and_manage_creator_token_sale( } pub fn ensure_actor_authorized_to_perform_creator_token_issuer_transfer( - origin: T::Origin, + origin: T::RuntimeOrigin, actor: &ContentActor, channel: &Channel, ) -> Result { @@ -671,7 +671,7 @@ pub fn ensure_actor_authorized_to_perform_creator_token_issuer_transfer( - origin: T::Origin, + origin: T::RuntimeOrigin, actor: &ContentActor, channel: &Channel, ) -> Result { @@ -682,7 +682,7 @@ pub fn ensure_actor_authorized_to_make_creator_token_permissionless( } pub fn ensure_actor_authorized_to_reduce_creator_token_patronage_rate( - origin: T::Origin, + origin: T::RuntimeOrigin, actor: &ContentActor, channel: &Channel, ) -> Result { @@ -693,7 +693,7 @@ pub fn ensure_actor_authorized_to_reduce_creator_token_patronage_rate } pub fn ensure_actor_authorized_to_manage_revenue_splits( - origin: T::Origin, + origin: T::RuntimeOrigin, actor: &ContentActor, channel: &Channel, ) -> Result { @@ -704,7 +704,7 @@ pub fn ensure_actor_authorized_to_manage_revenue_splits( } pub fn ensure_actor_authorized_to_deissue_creator_token( - origin: T::Origin, + origin: T::RuntimeOrigin, actor: &ContentActor, channel: &Channel, ) -> Result { @@ -713,3 +713,25 @@ pub fn ensure_actor_authorized_to_deissue_creator_token( ensure_actor_has_channel_permissions::(&sender, actor, channel, &required_permissions)?; Ok(sender) } + +pub fn ensure_actor_authorized_to_activate_amm( + origin: T::RuntimeOrigin, + actor: &ContentActor, + channel: &Channel, +) -> Result { + let sender = ensure_signed(origin)?; + let required_permissions = vec![ChannelActionPermission::AmmControl]; + ensure_actor_has_channel_permissions::(&sender, actor, channel, &required_permissions)?; + Ok(sender) +} + +pub fn ensure_actor_authorized_to_deactivate_amm( + origin: T::RuntimeOrigin, + actor: &ContentActor, + channel: &Channel, +) -> Result { + let sender = ensure_signed(origin)?; + let required_permissions = vec![ChannelActionPermission::AmmControl]; + ensure_actor_has_channel_permissions::(&sender, actor, channel, &required_permissions)?; + Ok(sender) +} diff --git a/runtime-modules/content/src/tests/channels.rs b/runtime-modules/content/src/tests/channels.rs index e8ce556df8..60e7f58166 100644 --- a/runtime-modules/content/src/tests/channels.rs +++ b/runtime-modules/content/src/tests/channels.rs @@ -598,9 +598,7 @@ fn unsuccessful_channel_update_with_invalid_objects_id_to_remove() { UpdateChannelFixture::default() .with_sender(DEFAULT_MEMBER_ACCOUNT_ID) .with_actor(ContentActor::Member(DEFAULT_MEMBER_ID)) - .with_assets_to_remove( - ((DATA_OBJECTS_NUMBER as u64)..(2 * DATA_OBJECTS_NUMBER as u64)).collect(), - ) + .with_assets_to_remove((DATA_OBJECTS_NUMBER..(2 * DATA_OBJECTS_NUMBER)).collect()) .call_and_assert(Err( Error::::AssetsToRemoveBeyondEntityAssetsSet.into() )); @@ -1155,280 +1153,6 @@ fn successful_channel_deletion_with_bloat_bonds_repaid_to_correct_accounts() { ////////////////////// Channel moderation actions ///////////////////// /////////////////////////////////////////////////////////////////////// -// Channel deletion - -#[test] -fn unsuccessful_moderation_action_channel_deletion_by_actors_with_auth_failure() { - with_default_mock_builder(|| { - run_to_block(1); - - create_initial_storage_buckets_helper(); - increase_account_balance_helper(DEFAULT_MEMBER_ACCOUNT_ID, INITIAL_BALANCE); - create_default_member_owned_channel(); - - let curator_group_id = curators::create_curator_group(BTreeMap::new()); - - // Member - invalid sender - DeleteChannelAsModeratorFixture::default() - .with_sender(UNAUTHORIZED_MEMBER_ACCOUNT_ID) - .with_actor(ContentActor::Member(DEFAULT_MEMBER_ID)) - .call_and_assert(Err(Error::::MemberAuthFailed.into())); - - // Curator - invalid sender - DeleteChannelAsModeratorFixture::default() - .with_sender(UNAUTHORIZED_CURATOR_ACCOUNT_ID) - .with_actor(ContentActor::Curator(curator_group_id, DEFAULT_CURATOR_ID)) - .call_and_assert(Err(Error::::CuratorAuthFailed.into())); - - // Curator - not in group - DeleteChannelAsModeratorFixture::default() - .with_sender(DEFAULT_CURATOR_ACCOUNT_ID) - .with_actor(ContentActor::Curator(curator_group_id, DEFAULT_CURATOR_ID)) - .call_and_assert(Err( - Error::::CuratorIsNotAMemberOfGivenCuratorGroup.into() - )); - - // Lead - invalid sender - DeleteChannelAsModeratorFixture::default() - .with_sender(UNAUTHORIZED_LEAD_ACCOUNT_ID) - .with_actor(ContentActor::Lead) - .call_and_assert(Err(Error::::LeadAuthFailed.into())); - }) -} - -#[test] -fn unsuccessful_moderation_action_channel_deletion_by_member() { - with_default_mock_builder(|| { - run_to_block(1); - - create_initial_storage_buckets_helper(); - increase_account_balance_helper(DEFAULT_MEMBER_ACCOUNT_ID, INITIAL_BALANCE); - create_default_member_owned_channel(); - - DeleteChannelAsModeratorFixture::default() - .with_sender(DEFAULT_MEMBER_ACCOUNT_ID) - .with_actor(ContentActor::Member(DEFAULT_MEMBER_ID)) - .call_and_assert(Err(Error::::ActorNotAuthorized.into())); - }) -} - -#[test] -fn unsuccessful_moderation_action_channel_deletion_by_curator_without_permissions() { - with_default_mock_builder(|| { - run_to_block(1); - - create_initial_storage_buckets_helper(); - increase_account_balance_helper(DEFAULT_MEMBER_ACCOUNT_ID, INITIAL_BALANCE); - CreateChannelFixture::default() - .with_default_storage_buckets() - .call_and_assert(Ok(())); - - let group_id = curators::add_curator_to_new_group(DEFAULT_CURATOR_ID, &[]); - - DeleteChannelAsModeratorFixture::default() - .with_sender(DEFAULT_CURATOR_ACCOUNT_ID) - .with_actor(ContentActor::Curator(group_id, DEFAULT_CURATOR_ID)) - .with_num_objects_to_delete(0) - .call_and_assert(Err(Error::::CuratorModerationActionNotAllowed.into())); - }) -} - -#[test] -fn unsuccessful_moderation_action_non_existing_channel_deletion() { - with_default_mock_builder(|| { - run_to_block(1); - - let group_id = curators::add_curator_to_new_group_with_permissions( - DEFAULT_CURATOR_ID, - BTreeMap::from_iter(vec![( - 0, - BTreeSet::from_iter(vec![ContentModerationAction::DeleteChannel]), - )]), - ); - - // As curator - DeleteChannelAsModeratorFixture::default() - .with_sender(DEFAULT_CURATOR_ACCOUNT_ID) - .with_actor(ContentActor::Curator(group_id, DEFAULT_CURATOR_ID)) - .call_and_assert(Err(Error::::ChannelDoesNotExist.into())); - - // As lead - DeleteChannelAsModeratorFixture::default() - .call_and_assert(Err(Error::::ChannelDoesNotExist.into())); - }) -} - -#[test] -fn unsuccessful_moderation_action_channel_with_videos_deletion() { - with_default_mock_builder(|| { - run_to_block(1); - - create_initial_storage_buckets_helper(); - increase_account_balance_helper(DEFAULT_MEMBER_ACCOUNT_ID, INITIAL_BALANCE); - create_default_member_owned_channel_with_video(); - - let group_id = curators::add_curator_to_new_group_with_permissions( - DEFAULT_CURATOR_ID, - BTreeMap::from_iter(vec![( - 0, - BTreeSet::from_iter(vec![ContentModerationAction::DeleteChannel]), - )]), - ); - - // As curator - DeleteChannelAsModeratorFixture::default() - .with_sender(DEFAULT_CURATOR_ACCOUNT_ID) - .with_actor(ContentActor::Curator(group_id, DEFAULT_CURATOR_ID)) - .call_and_assert(Err(Error::::ChannelContainsVideos.into())); - - // As lead - DeleteChannelAsModeratorFixture::default() - .call_and_assert(Err(Error::::ChannelContainsVideos.into())); - }) -} - -#[test] -fn unsuccessful_moderation_action_channel_deletion_with_invalid_num_objects_to_delete() { - with_default_mock_builder(|| { - run_to_block(1); - - create_initial_storage_buckets_helper(); - increase_account_balance_helper(DEFAULT_MEMBER_ACCOUNT_ID, INITIAL_BALANCE); - create_default_member_owned_channel(); - - let group_id = curators::add_curator_to_new_group_with_permissions( - DEFAULT_CURATOR_ID, - BTreeMap::from_iter(vec![( - 0, - BTreeSet::from_iter(vec![ContentModerationAction::DeleteChannel]), - )]), - ); - - // As curator - DeleteChannelAsModeratorFixture::default() - .with_sender(DEFAULT_CURATOR_ACCOUNT_ID) - .with_actor(ContentActor::Curator(group_id, DEFAULT_CURATOR_ID)) - .with_num_objects_to_delete(DATA_OBJECTS_NUMBER as u64 - 1) - .call_and_assert(Err(Error::::InvalidBagSizeSpecified.into())); - // As lead - DeleteChannelAsModeratorFixture::default() - .with_num_objects_to_delete(DATA_OBJECTS_NUMBER as u64 - 1) - .call_and_assert(Err(Error::::InvalidBagSizeSpecified.into())); - }) -} - -#[test] -fn unsuccessful_moderation_action_channel_deletion_and_invalid_channel_bag_witness() { - with_default_mock_builder(|| { - ContentTest::with_member_channel().setup(); - - curators::add_curator_to_new_group_with_permissions( - DEFAULT_CURATOR_ID, - BTreeMap::from_iter(vec![( - 0, - BTreeSet::from_iter(vec![ContentModerationAction::DeleteChannel]), - )]), - ); - - let invalid_witness = ChannelBagWitness { - storage_buckets_num: 0, - distribution_buckets_num: 0, - }; - - DeleteChannelAsModeratorFixture::default() - .with_channel_bag_witness(invalid_witness) - .call_and_assert(Err(Error::::InvalidChannelBagWitnessProvided.into())); - }) -} - -#[test] -fn successful_moderation_action_channel_deletion_by_curator() { - with_default_mock_builder(|| { - run_to_block(1); - - create_initial_storage_buckets_helper(); - increase_account_balance_helper(DEFAULT_MEMBER_ACCOUNT_ID, INITIAL_BALANCE); - - let channel_state_bloat_bond = ed(); - UpdateChannelStateBloatBondFixture::default() - .with_channel_state_bloat_bond(channel_state_bloat_bond) - .call_and_assert(Ok(())); - - CreateChannelFixture::default() - .with_default_storage_buckets() - .with_expected_channel_state_bloat_bond(channel_state_bloat_bond) - .call_and_assert(Ok(())); - - let group_id = curators::add_curator_to_new_group_with_permissions( - DEFAULT_CURATOR_ID, - BTreeMap::from_iter(vec![( - 0, - BTreeSet::from_iter(vec![ContentModerationAction::DeleteChannel]), - )]), - ); - - DeleteChannelAsModeratorFixture::default() - .with_sender(DEFAULT_CURATOR_ACCOUNT_ID) - .with_num_objects_to_delete(0) - .with_actor(ContentActor::Curator(group_id, DEFAULT_CURATOR_ID)) - .call_and_assert(Ok(())); - }) -} - -#[test] -fn successful_moderation_action_channel_with_assets_deletion_by_curator() { - with_default_mock_builder(|| { - run_to_block(1); - - create_initial_storage_buckets_helper(); - increase_account_balance_helper(DEFAULT_MEMBER_ACCOUNT_ID, INITIAL_BALANCE); - create_default_member_owned_channel(); - - let group_id = curators::add_curator_to_new_group_with_permissions( - DEFAULT_CURATOR_ID, - BTreeMap::from_iter(vec![( - 0, - BTreeSet::from_iter(vec![ContentModerationAction::DeleteChannel]), - )]), - ); - - DeleteChannelAsModeratorFixture::default() - .with_sender(DEFAULT_CURATOR_ACCOUNT_ID) - .with_actor(ContentActor::Curator(group_id, DEFAULT_CURATOR_ID)) - .call_and_assert(Ok(())); - }) -} - -#[test] -fn successful_moderation_action_channel_deletion_by_lead() { - with_default_mock_builder(|| { - run_to_block(1); - - create_initial_storage_buckets_helper(); - increase_account_balance_helper(DEFAULT_MEMBER_ACCOUNT_ID, INITIAL_BALANCE); - CreateChannelFixture::default() - .with_default_storage_buckets() - .call_and_assert(Ok(())); - - DeleteChannelAsModeratorFixture::default() - .with_num_objects_to_delete(0) - .call_and_assert(Ok(())); - }) -} - -#[test] -fn successful_moderation_action_channel_with_assets_deletion_by_lead() { - with_default_mock_builder(|| { - run_to_block(1); - - create_initial_storage_buckets_helper(); - increase_account_balance_helper(DEFAULT_MEMBER_ACCOUNT_ID, INITIAL_BALANCE); - create_default_member_owned_channel(); - - DeleteChannelAsModeratorFixture::default().call_and_assert(Ok(())); - }) -} - // Channel visibility status #[test] @@ -2035,7 +1759,7 @@ fn video_nft_cannot_be_issued_when_channel_video_nft_issuance_paused() { // Try to issue nft for existing video as owner assert_eq!( Content::issue_nft( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), ContentActor::Member(DEFAULT_MEMBER_ID), VideoId::one(), nft_params.clone() @@ -2045,7 +1769,7 @@ fn video_nft_cannot_be_issued_when_channel_video_nft_issuance_paused() { // Try to issue nft for existing video as collaborator assert_eq!( Content::issue_nft( - Origin::signed(COLLABORATOR_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(COLLABORATOR_MEMBER_ACCOUNT_ID), ContentActor::Member(COLLABORATOR_MEMBER_ID), VideoId::one(), nft_params.clone() diff --git a/runtime-modules/content/src/tests/creator_tokens.rs b/runtime-modules/content/src/tests/creator_tokens.rs index 3d015ee968..9735cecce2 100644 --- a/runtime-modules/content/src/tests/creator_tokens.rs +++ b/runtime-modules/content/src/tests/creator_tokens.rs @@ -1,4 +1,6 @@ +mod activate_amm; mod claim_patronage_credit; +mod deactivate_amm; mod deissue; mod finalize_creator_token_sale; mod finalize_revenue_split; diff --git a/runtime-modules/content/src/tests/creator_tokens/activate_amm.rs b/runtime-modules/content/src/tests/creator_tokens/activate_amm.rs new file mode 100644 index 0000000000..5fcbe324ab --- /dev/null +++ b/runtime-modules/content/src/tests/creator_tokens/activate_amm.rs @@ -0,0 +1,171 @@ +#![cfg(test)] +use crate::tests::fixtures::*; +use crate::tests::mock::*; +use crate::*; +use frame_support::assert_ok; +use frame_system::RawOrigin; +use project_token::Error as ProjectTokenError; + +#[test] +fn unsuccessful_activate_amm_non_existing_channel() { + with_default_mock_builder(|| { + run_to_block(1); + + ActivateAmmFixture::default() + .call_and_assert(Err(Error::::ChannelDoesNotExist.into())); + }) +} + +#[test] +fn unsuccessful_activate_amm_token_not_issued() { + with_default_mock_builder(|| { + ContentTest::with_member_channel().setup(); + ActivateAmmFixture::default() + .call_and_assert(Err(Error::::CreatorTokenNotIssued.into())); + }) +} + +// Member channel + +#[test] +fn unsuccessful_activate_member_channel_creator_token_amm_by_collaborator_without_permissions() { + with_default_mock_builder(|| { + ContentTest::with_member_channel() + .with_all_agent_permissions_except(&[ChannelActionPermission::AmmControl]) + .setup(); + IssueCreatorTokenFixture::default().call_and_assert(Ok(())); + + ActivateAmmFixture::default() + .with_sender(COLLABORATOR_MEMBER_ACCOUNT_ID) + .with_actor(ContentActor::Member(COLLABORATOR_MEMBER_ID)) + .call_and_assert(Err( + Error::::ChannelAgentInsufficientPermissions.into() + )); + }) +} + +#[test] +fn successful_activate_member_channel_creator_token_amm_by_collaborator() { + with_default_mock_builder(|| { + ContentTest::with_member_channel() + .with_agent_permissions(&[ChannelActionPermission::AmmControl]) + .setup(); + IssueCreatorTokenFixture::default() + .with_initial_allocation_to(COLLABORATOR_MEMBER_ID) + .call_and_assert(Ok(())); + ActivateAmmFixture::default() + .with_sender(COLLABORATOR_MEMBER_ACCOUNT_ID) + .with_actor(ContentActor::Member(COLLABORATOR_MEMBER_ID)) + .call_and_assert(Ok(())); + }) +} + +#[test] +fn successful_activate_member_channel_creator_token_amm_by_owner() { + with_default_mock_builder(|| { + ContentTest::with_member_channel().setup(); + IssueCreatorTokenFixture::default().call_and_assert(Ok(())); + ActivateAmmFixture::default().call_and_assert(Ok(())); + }) +} + +// Curator channel + +#[test] +fn unsuccessful_activate_curator_channel_creator_token_amm_by_curator_without_permissions() { + with_default_mock_builder(|| { + ContentTest::with_curator_channel() + .with_all_agent_permissions_except(&[ChannelActionPermission::AmmControl]) + .setup(); + IssueCreatorTokenFixture::default() + .with_sender(LEAD_ACCOUNT_ID) + .with_actor(ContentActor::Lead) + .call_and_assert(Ok(())); + ActivateAmmFixture::default() + .with_sender(DEFAULT_CURATOR_ACCOUNT_ID) + .with_actor(default_curator_actor()) + .call_and_assert(Err( + Error::::ChannelAgentInsufficientPermissions.into() + )); + }) +} + +#[test] +fn successful_activate_curator_channel_creator_token_amm_by_curator() { + with_default_mock_builder(|| { + ContentTest::with_curator_channel() + .with_agent_permissions(&[ChannelActionPermission::AmmControl]) + .setup(); + IssueCreatorTokenFixture::default() + .with_sender(LEAD_ACCOUNT_ID) + .with_actor(ContentActor::Lead) + .with_initial_allocation_to(DEFAULT_CURATOR_MEMBER_ID) + .call_and_assert(Ok(())); + ActivateAmmFixture::default() + .with_sender(DEFAULT_CURATOR_ACCOUNT_ID) + .with_actor(default_curator_actor()) + .call_and_assert(Ok(())); + }) +} + +#[test] +fn successful_activate_curator_channel_creator_token_amm_by_lead() { + with_default_mock_builder(|| { + ContentTest::with_curator_channel().setup(); + IssueCreatorTokenFixture::default() + .with_sender(LEAD_ACCOUNT_ID) + .with_actor(ContentActor::Lead) + .with_initial_allocation_to(LEAD_MEMBER_ID) + .call_and_assert(Ok(())); + ActivateAmmFixture::default() + .with_sender(LEAD_ACCOUNT_ID) + .with_actor(ContentActor::Lead) + .call_and_assert(Ok(())); + }) +} + +#[test] +fn unsuccessful_activate_curator_channel_creator_token_amm_with_ongoing_transfer() { + with_default_mock_builder(|| { + ContentTest::with_curator_channel().setup(); + IssueCreatorTokenFixture::default() + .with_sender(LEAD_ACCOUNT_ID) + .with_actor(ContentActor::Lead) + .with_initial_allocation_to(LEAD_MEMBER_ID) + .call_and_assert(Ok(())); + InitializeChannelTransferFixture::default() + .with_sender(LEAD_ACCOUNT_ID) + .with_actor(ContentActor::Lead) + .call_and_assert(Ok(())); + + ActivateAmmFixture::default() + .with_sender(LEAD_ACCOUNT_ID) + .with_actor(ContentActor::Lead) + .call_and_assert(Err(Error::::InvalidChannelTransferStatus.into())); + }) +} + +#[test] +fn unsuccessful_activate_member_channel_creator_token_amm_with_ongoing_transfer() { + with_default_mock_builder(|| { + ContentTest::with_member_channel().setup(); + IssueCreatorTokenFixture::default() + .with_initial_allocation_to(LEAD_MEMBER_ID) + .call_and_assert(Ok(())); + InitializeChannelTransferFixture::default().call_and_assert(Ok(())); + + ActivateAmmFixture::default() + .call_and_assert(Err(Error::::InvalidChannelTransferStatus.into())); + }) +} + +#[test] +fn unsuccessful_activate_creator_token_amm_with_frozen_pallet() { + with_default_mock_builder(|| { + ContentTest::with_member_channel().setup(); + IssueCreatorTokenFixture::default().call_and_assert(Ok(())); + assert_ok!(Token::set_frozen_status(RawOrigin::Root.into(), true)); + ActivateAmmFixture::default() + .call_and_assert(Err(ProjectTokenError::::PalletFrozen.into())); + }) +} diff --git a/runtime-modules/content/src/tests/creator_tokens/claim_patronage_credit.rs b/runtime-modules/content/src/tests/creator_tokens/claim_patronage_credit.rs index a61f3c37a2..85256ca385 100644 --- a/runtime-modules/content/src/tests/creator_tokens/claim_patronage_credit.rs +++ b/runtime-modules/content/src/tests/creator_tokens/claim_patronage_credit.rs @@ -1,4 +1,7 @@ #![cfg(test)] +use frame_support::assert_ok; +use frame_system::RawOrigin; + use crate::tests::fixtures::*; use crate::tests::mock::*; use crate::*; @@ -93,3 +96,18 @@ fn claim_creator_token_patronage_credit_fails_during_trasfer() { .call_and_assert(Err(Error::::InvalidChannelTransferStatus.into())); }) } + +#[test] +fn claim_member_channel_creator_token_patronage_credit_by_owner_fails_on_frozen_pallet() { + with_default_mock_builder(|| { + ContentTest::with_member_channel().setup(); + IssueCreatorTokenFixture::default().call_and_assert(Ok(())); + + assert_ok!(Token::set_frozen_status(RawOrigin::Root.into(), true)); + ClaimCreatorTokenPatronageCreditFixture::default() + .call_and_assert(Err(project_token::Error::::PalletFrozen.into())); + + assert_ok!(Token::set_frozen_status(RawOrigin::Root.into(), false)); + ClaimCreatorTokenPatronageCreditFixture::default().call_and_assert(Ok(())); + }) +} diff --git a/runtime-modules/content/src/tests/creator_tokens/deactivate_amm.rs b/runtime-modules/content/src/tests/creator_tokens/deactivate_amm.rs new file mode 100644 index 0000000000..f7f5b352a1 --- /dev/null +++ b/runtime-modules/content/src/tests/creator_tokens/deactivate_amm.rs @@ -0,0 +1,152 @@ +#![cfg(test)] +use crate::tests::fixtures::*; +use crate::tests::mock::*; +use crate::*; +use frame_support::assert_ok; +use frame_system::RawOrigin; +use project_token::Error as ProjectTokenError; + +#[test] +fn unsuccessful_deactivate_amm_non_existing_channel() { + with_default_mock_builder(|| { + run_to_block(1); + + DeactivateAmmFixture::default() + .call_and_assert(Err(Error::::ChannelDoesNotExist.into())); + }) +} + +#[test] +fn unsuccessful_deactivate_amm_token_not_issued() { + with_default_mock_builder(|| { + ContentTest::with_member_channel().setup(); + DeactivateAmmFixture::default() + .call_and_assert(Err(Error::::CreatorTokenNotIssued.into())); + }) +} + +// Member channel +#[test] +fn unsuccessful_deactivate_member_channel_creator_token_amm_by_collaborator_without_permissions() { + with_default_mock_builder(|| { + ContentTest::with_member_channel() + .with_all_agent_permissions_except(&[ChannelActionPermission::AmmControl]) + .setup(); + IssueCreatorTokenFixture::default().call_and_assert(Ok(())); + + ActivateAmmFixture::default().call_and_assert(Ok(())); + + DeactivateAmmFixture::default() + .with_sender(COLLABORATOR_MEMBER_ACCOUNT_ID) + .with_actor(ContentActor::Member(COLLABORATOR_MEMBER_ID)) + .call_and_assert(Err( + Error::::ChannelAgentInsufficientPermissions.into() + )); + }) +} + +#[test] +fn successful_deactivate_member_channel_creator_token_amm_by_collaborator() { + with_default_mock_builder(|| { + ContentTest::with_member_channel() + .with_agent_permissions(&[ChannelActionPermission::AmmControl]) + .setup(); + IssueCreatorTokenFixture::default() + .with_initial_allocation_to(COLLABORATOR_MEMBER_ID) + .call_and_assert(Ok(())); + ActivateAmmFixture::default().call_and_assert(Ok(())); + DeactivateAmmFixture::default() + .with_sender(COLLABORATOR_MEMBER_ACCOUNT_ID) + .with_actor(ContentActor::Member(COLLABORATOR_MEMBER_ID)) + .call_and_assert(Ok(())); + }) +} + +#[test] +fn successful_deactivate_member_channel_creator_token_amm_by_owner() { + with_default_mock_builder(|| { + ContentTest::with_member_channel().setup(); + IssueCreatorTokenFixture::default().call_and_assert(Ok(())); + ActivateAmmFixture::default().call_and_assert(Ok(())); + DeactivateAmmFixture::default().call_and_assert(Ok(())); + }) +} + +// Curator channel + +#[test] +fn unsuccessful_deactivate_curator_channel_creator_token_amm_by_curator_without_permissions() { + with_default_mock_builder(|| { + ContentTest::with_curator_channel() + .with_all_agent_permissions_except(&[ChannelActionPermission::AmmControl]) + .setup(); + IssueCreatorTokenFixture::default() + .with_sender(LEAD_ACCOUNT_ID) + .with_actor(ContentActor::Lead) + .call_and_assert(Ok(())); + ActivateAmmFixture::default() + .with_sender(LEAD_ACCOUNT_ID) + .with_actor(ContentActor::Lead) + .call_and_assert(Ok(())); + DeactivateAmmFixture::default() + .with_sender(DEFAULT_CURATOR_ACCOUNT_ID) + .with_actor(default_curator_actor()) + .call_and_assert(Err( + Error::::ChannelAgentInsufficientPermissions.into() + )); + }) +} + +#[test] +fn successful_deactivate_curator_channel_creator_token_amm_by_curator() { + with_default_mock_builder(|| { + ContentTest::with_curator_channel() + .with_agent_permissions(&[ChannelActionPermission::AmmControl]) + .setup(); + IssueCreatorTokenFixture::default() + .with_sender(LEAD_ACCOUNT_ID) + .with_actor(ContentActor::Lead) + .with_initial_allocation_to(DEFAULT_CURATOR_MEMBER_ID) + .call_and_assert(Ok(())); + ActivateAmmFixture::default() + .with_sender(LEAD_ACCOUNT_ID) + .with_actor(ContentActor::Lead) + .call_and_assert(Ok(())); + DeactivateAmmFixture::default() + .with_sender(DEFAULT_CURATOR_ACCOUNT_ID) + .with_actor(default_curator_actor()) + .call_and_assert(Ok(())); + }) +} + +#[test] +fn successful_deactivate_curator_channel_creator_token_amm_by_lead() { + with_default_mock_builder(|| { + ContentTest::with_curator_channel().setup(); + IssueCreatorTokenFixture::default() + .with_sender(LEAD_ACCOUNT_ID) + .with_actor(ContentActor::Lead) + .with_initial_allocation_to(LEAD_MEMBER_ID) + .call_and_assert(Ok(())); + ActivateAmmFixture::default() + .with_sender(LEAD_ACCOUNT_ID) + .with_actor(ContentActor::Lead) + .call_and_assert(Ok(())); + DeactivateAmmFixture::default() + .with_sender(LEAD_ACCOUNT_ID) + .with_actor(ContentActor::Lead) + .call_and_assert(Ok(())); + }) +} + +#[test] +fn unsuccessful_deactivate_creator_token_amm_with_frozen_pallet() { + with_default_mock_builder(|| { + ContentTest::with_member_channel().setup(); + IssueCreatorTokenFixture::default().call_and_assert(Ok(())); + ActivateAmmFixture::default().call_and_assert(Ok(())); + assert_ok!(Token::set_frozen_status(RawOrigin::Root.into(), true)); + DeactivateAmmFixture::default() + .call_and_assert(Err(ProjectTokenError::::PalletFrozen.into())); + }) +} diff --git a/runtime-modules/content/src/tests/creator_tokens/deissue.rs b/runtime-modules/content/src/tests/creator_tokens/deissue.rs index d196909de6..3ddf9c888f 100644 --- a/runtime-modules/content/src/tests/creator_tokens/deissue.rs +++ b/runtime-modules/content/src/tests/creator_tokens/deissue.rs @@ -4,6 +4,9 @@ use crate::tests::fixtures::*; use crate::tests::mock::*; use crate::*; use frame_support::assert_noop; +use frame_support::assert_ok; +use frame_system::RawOrigin; +use project_token::Error as ProjectTokenError; use std::collections::BTreeMap; #[test] @@ -131,7 +134,7 @@ fn deissue_token_fails_during_transfer() { assert_noop!( Content::deissue_creator_token( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), ContentActor::Member(DEFAULT_MEMBER_ID), 1u64, ), @@ -139,3 +142,20 @@ fn deissue_token_fails_during_transfer() { ); }) } + +#[test] +fn deissue_member_channel_creator_token_by_owner_fails_with_frozen_pallet() { + with_default_mock_builder(|| { + ContentTest::with_member_channel().setup(); + IssueCreatorTokenFixture::default() + .with_initial_allocation(BTreeMap::new()) + .call_and_assert(Ok(())); + + assert_ok!(Token::set_frozen_status(RawOrigin::Root.into(), true)); + DeissueCreatorTokenFixture::default() + .call_and_assert(Err(ProjectTokenError::::PalletFrozen.into())); + + assert_ok!(Token::set_frozen_status(RawOrigin::Root.into(), false)); + DeissueCreatorTokenFixture::default().call_and_assert(Ok(())); + }) +} diff --git a/runtime-modules/content/src/tests/creator_tokens/finalize_creator_token_sale.rs b/runtime-modules/content/src/tests/creator_tokens/finalize_creator_token_sale.rs index 37555cdf8e..7cd6a477e7 100644 --- a/runtime-modules/content/src/tests/creator_tokens/finalize_creator_token_sale.rs +++ b/runtime-modules/content/src/tests/creator_tokens/finalize_creator_token_sale.rs @@ -3,6 +3,8 @@ use crate::tests::fixtures::*; use crate::tests::mock::*; use crate::*; use common::BudgetManager; +use frame_support::{assert_noop, assert_ok}; +use frame_system::RawOrigin; fn purchase_tokens_on_sale(amount: u64) { let existential_deposit: u64 = ::ExistentialDeposit::get().into(); @@ -11,7 +13,7 @@ fn purchase_tokens_on_sale(amount: u64) { existential_deposit + DEFAULT_CREATOR_TOKEN_SALE_UNIT_PRICE * amount, ); project_token::Module::::purchase_tokens_on_sale( - Origin::signed(SECOND_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(SECOND_MEMBER_ACCOUNT_ID), project_token::Module::::next_token_id() - 1, SECOND_MEMBER_ID, amount, @@ -213,3 +215,56 @@ fn successful_finalize_curator_channel_creator_token_sale_by_lead() { ); }) } + +#[test] +fn purchase_tokens_on_sale_fails_on_frozen_pallet() { + with_default_mock_builder(|| { + ContentTest::with_member_channel().setup(); + IssueCreatorTokenFixture::default().call_and_assert(Ok(())); + InitCreatorTokenSaleFixture::default().call_and_assert(Ok(())); + + let amount = DEFAULT_CREATOR_TOKEN_ISSUANCE - 1; + let existential_deposit: u64 = ::ExistentialDeposit::get().into(); + increase_account_balance_helper( + SECOND_MEMBER_ACCOUNT_ID, + existential_deposit + DEFAULT_CREATOR_TOKEN_SALE_UNIT_PRICE * amount, + ); + + assert_ok!(Token::set_frozen_status(RawOrigin::Root.into(), true)); + assert_noop!( + project_token::Module::::purchase_tokens_on_sale( + RuntimeOrigin::signed(SECOND_MEMBER_ACCOUNT_ID), + project_token::Module::::next_token_id() - 1, + SECOND_MEMBER_ID, + amount, + ), + project_token::Error::::PalletFrozen + ); + + assert_ok!(Token::set_frozen_status(RawOrigin::Root.into(), false)); + assert_ok!(project_token::Module::::purchase_tokens_on_sale( + RuntimeOrigin::signed(SECOND_MEMBER_ACCOUNT_ID), + project_token::Module::::next_token_id() - 1, + SECOND_MEMBER_ID, + amount, + )); + }) +} + +#[test] +fn finalize_member_channel_creator_token_sale_by_owner_fails_on_frozen_pallet() { + with_default_mock_builder(|| { + ContentTest::with_member_channel().setup(); + IssueCreatorTokenFixture::default().call_and_assert(Ok(())); + InitCreatorTokenSaleFixture::default().call_and_assert(Ok(())); + purchase_tokens_on_sale(DEFAULT_CREATOR_TOKEN_ISSUANCE - 1); + run_to_block(1 + DEFAULT_CREATOR_TOKEN_SALE_DURATION); + + assert_ok!(Token::set_frozen_status(RawOrigin::Root.into(), true)); + FinalizeCreatorTokenSaleFixture::default() + .call_and_assert(Err(project_token::Error::::PalletFrozen.into())); + + assert_ok!(Token::set_frozen_status(RawOrigin::Root.into(), false)); + FinalizeCreatorTokenSaleFixture::default().call_and_assert(Ok(())); + }) +} diff --git a/runtime-modules/content/src/tests/creator_tokens/finalize_revenue_split.rs b/runtime-modules/content/src/tests/creator_tokens/finalize_revenue_split.rs index 8fbd9be761..48af14a204 100644 --- a/runtime-modules/content/src/tests/creator_tokens/finalize_revenue_split.rs +++ b/runtime-modules/content/src/tests/creator_tokens/finalize_revenue_split.rs @@ -2,6 +2,9 @@ use crate::tests::fixtures::*; use crate::tests::mock::*; use crate::*; +use frame_support::assert_ok; +use frame_system::RawOrigin; +use project_token::Error as ProjectTokenError; use project_token::Module as Token; #[test] @@ -151,3 +154,32 @@ fn successful_finalize_curator_channel_revenue_split_by_lead() { .call_and_assert(Ok(())); }) } + +#[test] +fn finalize_member_channel_revenue_split_by_owner_fails_on_frozen_pallet() { + with_default_mock_builder(|| { + ContentTest::with_member_channel().setup(); + IssueCreatorTokenFixture::default().call_and_assert(Ok(())); + increase_account_balance_helper( + ContentTreasury::::account_for_channel(ChannelId::one()), + DEFAULT_PAYOUT_EARNED, + ); + IssueRevenueSplitFixture::default().call_and_assert(Ok(())); + run_to_block( + 1 + Token::::min_revenue_split_time_to_start() + DEFAULT_REVENUE_SPLIT_DURATION, + ); + + assert_ok!(Token::::set_frozen_status( + RawOrigin::Root.into(), + true + )); + FinalizeRevenueSplitFixture::default() + .call_and_assert(Err(ProjectTokenError::::PalletFrozen.into())); + + assert_ok!(Token::::set_frozen_status( + RawOrigin::Root.into(), + false + )); + FinalizeRevenueSplitFixture::default().call_and_assert(Ok(())); + }) +} diff --git a/runtime-modules/content/src/tests/creator_tokens/init_token_sale.rs b/runtime-modules/content/src/tests/creator_tokens/init_token_sale.rs index c0a5f47042..8f82a1a1f8 100644 --- a/runtime-modules/content/src/tests/creator_tokens/init_token_sale.rs +++ b/runtime-modules/content/src/tests/creator_tokens/init_token_sale.rs @@ -3,6 +3,8 @@ use crate::tests::fixtures::*; use crate::tests::mock::*; use crate::*; use frame_support::assert_noop; +use frame_support::assert_ok; +use frame_system::RawOrigin; #[test] fn unsuccessful_init_creator_token_sale_non_existing_channel() { @@ -131,7 +133,7 @@ fn init_token_sale_fails_during_channel_transfer() { assert_noop!( Content::init_creator_token_sale( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), ContentActor::Member(DEFAULT_MEMBER_ID), 1u64, TokenSaleParamsOf:: { @@ -148,3 +150,18 @@ fn init_token_sale_fails_during_channel_transfer() { ); }) } + +#[test] +fn init_member_channel_creator_token_sale_by_owner_fails_on_frozen_pallet() { + with_default_mock_builder(|| { + ContentTest::with_member_channel().setup(); + IssueCreatorTokenFixture::default().call_and_assert(Ok(())); + + assert_ok!(Token::set_frozen_status(RawOrigin::Root.into(), true)); + InitCreatorTokenSaleFixture::default() + .call_and_assert(Err(project_token::Error::::PalletFrozen.into())); + + assert_ok!(Token::set_frozen_status(RawOrigin::Root.into(), false)); + InitCreatorTokenSaleFixture::default().call_and_assert(Ok(())); + }) +} diff --git a/runtime-modules/content/src/tests/creator_tokens/issue.rs b/runtime-modules/content/src/tests/creator_tokens/issue.rs index 3a5ba90c03..8fcca11beb 100644 --- a/runtime-modules/content/src/tests/creator_tokens/issue.rs +++ b/runtime-modules/content/src/tests/creator_tokens/issue.rs @@ -3,6 +3,10 @@ use crate::tests::fixtures::*; use crate::tests::mock::*; use crate::*; use frame_support::assert_noop; +use frame_support::assert_ok; +use frame_system::RawOrigin; + +use project_token::Error as ProjectTokenError; #[test] fn unsuccessful_issue_creator_token_non_existing_channel() { @@ -113,7 +117,7 @@ fn issue_token_fails_during_transfer() { assert_noop!( Content::issue_creator_token( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), ContentActor::Member(DEFAULT_MEMBER_ID), 1u64, TokenIssuanceParametersOf::::default(), @@ -133,3 +137,17 @@ fn issue_token_fails_with_creator_token_issuance_feature_paused() { .call_and_assert(Err(Error::::ChannelFeaturePaused.into())); }) } + +#[test] +fn issue_token_fails_with_frozen_pallet() { + with_default_mock_builder(|| { + ContentTest::with_member_channel().setup(); + + assert_ok!(Token::set_frozen_status(RawOrigin::Root.into(), true)); + IssueCreatorTokenFixture::default() + .call_and_assert(Err(ProjectTokenError::::PalletFrozen.into())); + + assert_ok!(Token::set_frozen_status(RawOrigin::Root.into(), false)); + IssueCreatorTokenFixture::default().call_and_assert(Ok(())); + }) +} diff --git a/runtime-modules/content/src/tests/creator_tokens/issue_revenue_split.rs b/runtime-modules/content/src/tests/creator_tokens/issue_revenue_split.rs index 979a9a2fb6..ea6470268c 100644 --- a/runtime-modules/content/src/tests/creator_tokens/issue_revenue_split.rs +++ b/runtime-modules/content/src/tests/creator_tokens/issue_revenue_split.rs @@ -2,6 +2,8 @@ use crate::tests::fixtures::*; use crate::tests::mock::*; use crate::*; +use frame_support::assert_ok; +use frame_system::RawOrigin; use sp_arithmetic::PerThing; #[test] @@ -224,3 +226,22 @@ fn issue_revenue_split_leftover_funds_sent_to_council_budget() { ) }) } + +#[test] +fn successful_issue_member_channel_revenue_split_by_owner_fails_on_frozen_pallet() { + with_default_mock_builder(|| { + ContentTest::with_member_channel().setup(); + IssueCreatorTokenFixture::default().call_and_assert(Ok(())); + increase_account_balance_helper( + ContentTreasury::::account_for_channel(ChannelId::one()), + DEFAULT_PAYOUT_EARNED, + ); + + assert_ok!(Token::set_frozen_status(RawOrigin::Root.into(), true)); + IssueRevenueSplitFixture::default() + .call_and_assert(Err(project_token::Error::::PalletFrozen.into())); + + assert_ok!(Token::set_frozen_status(RawOrigin::Root.into(), false)); + IssueRevenueSplitFixture::default().call_and_assert(Ok(())); + }) +} diff --git a/runtime-modules/content/src/tests/creator_tokens/issuer_transfer.rs b/runtime-modules/content/src/tests/creator_tokens/issuer_transfer.rs index 14cf5f20d1..a7b99536df 100644 --- a/runtime-modules/content/src/tests/creator_tokens/issuer_transfer.rs +++ b/runtime-modules/content/src/tests/creator_tokens/issuer_transfer.rs @@ -3,7 +3,9 @@ use crate::tests::fixtures::*; use crate::tests::mock::*; use crate::*; use frame_support::assert_noop; -use project_token::types::{PaymentWithVestingOf, Transfers}; +use frame_support::assert_ok; +use frame_system::RawOrigin; +use project_token::types::PaymentWithVesting; #[test] fn unsuccessful_creator_token_issuer_transfer_non_existing_channel() { @@ -128,27 +130,40 @@ fn unsuccessful_curator_channel_creator_token_issuer_transfer_during_transfer() InitializeChannelTransferFixture::default() .with_new_member_channel_owner(THIRD_MEMBER_ID) .call_and_assert(Ok(())); + let outputs = vec![( + SECOND_MEMBER_ID, + PaymentWithVesting { + amount: DEFAULT_ISSUER_TRANSFER_AMOUNT, + vesting_schedule: None, + }, + )] + .try_into() + .unwrap(); assert_noop!( Content::creator_token_issuer_transfer( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), ContentActor::Member(DEFAULT_MEMBER_ID), 1u64, - Transfers( - [( - SECOND_MEMBER_ID, - PaymentWithVestingOf:: { - amount: DEFAULT_ISSUER_TRANSFER_AMOUNT, - vesting_schedule: None, - }, - )] - .iter() - .cloned() - .collect(), - ), + outputs, vec![] ), Error::::InvalidChannelTransferStatus, ); }) } + +#[test] +fn member_channel_creator_token_issuer_transfer_by_owner_fails_on_frozen_pallet() { + with_default_mock_builder(|| { + ContentTest::with_member_channel().setup(); + IssueCreatorTokenFixture::default().call_and_assert(Ok(())); + + assert_ok!(Token::set_frozen_status(RawOrigin::Root.into(), true)); + CreatorTokenIssuerTransferFixture::default() + .call_and_assert(Err(project_token::Error::::PalletFrozen.into())); + + assert_ok!(Token::set_frozen_status(RawOrigin::Root.into(), false)); + CreatorTokenIssuerTransferFixture::default().call_and_assert(Ok(())); + }) +} diff --git a/runtime-modules/content/src/tests/creator_tokens/make_permissionless.rs b/runtime-modules/content/src/tests/creator_tokens/make_permissionless.rs index 2d1934778b..219d362b61 100644 --- a/runtime-modules/content/src/tests/creator_tokens/make_permissionless.rs +++ b/runtime-modules/content/src/tests/creator_tokens/make_permissionless.rs @@ -3,6 +3,8 @@ use crate::tests::fixtures::*; use crate::tests::mock::*; use crate::*; use frame_support::assert_noop; +use frame_support::assert_ok; +use frame_system::RawOrigin; use project_token::types::{TransferPolicyParamsOf, WhitelistParamsOf}; #[test] @@ -157,7 +159,7 @@ fn make_creator_token_permissionless_fails_during_transfer() { assert_noop!( Content::make_creator_token_permissionless( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), ContentActor::Member(DEFAULT_MEMBER_ID), 1u64, ), @@ -165,3 +167,25 @@ fn make_creator_token_permissionless_fails_during_transfer() { ); }) } + +#[test] +fn make_member_channel_creator_token_permissionless_by_owner_fails_on_frozen_pallet() { + with_default_mock_builder(|| { + ContentTest::with_member_channel().setup(); + IssueCreatorTokenFixture::default() + .with_transfer_policy(TransferPolicyParamsOf::::Permissioned( + WhitelistParamsOf:: { + commitment: Hashing::hash(b"commitment"), + payload: None, + }, + )) + .call_and_assert(Ok(())); + + assert_ok!(Token::set_frozen_status(RawOrigin::Root.into(), true)); + MakeCreatorTokenPermissionlessFixture::default() + .call_and_assert(Err(project_token::Error::::PalletFrozen.into())); + + assert_ok!(Token::set_frozen_status(RawOrigin::Root.into(), false)); + MakeCreatorTokenPermissionlessFixture::default().call_and_assert(Ok(())); + }) +} diff --git a/runtime-modules/content/src/tests/creator_tokens/reduce_patronage_rate.rs b/runtime-modules/content/src/tests/creator_tokens/reduce_patronage_rate.rs index cb18a5ecaf..01d07b861c 100644 --- a/runtime-modules/content/src/tests/creator_tokens/reduce_patronage_rate.rs +++ b/runtime-modules/content/src/tests/creator_tokens/reduce_patronage_rate.rs @@ -2,6 +2,9 @@ use crate::tests::fixtures::*; use crate::tests::mock::*; use crate::*; +use frame_support::assert_ok; +use frame_system::RawOrigin; +use project_token::Error as ProjectTokenError; #[test] fn unsuccessful_reduce_creator_token_patronage_rate_non_existing_channel() { @@ -131,3 +134,18 @@ fn reduce_creator_token_patronage_rate_fails_during_transfer() { .call_and_assert(Err(Error::::InvalidChannelTransferStatus.into())); }) } + +#[test] +fn reduce_member_channel_creator_token_patronage_rate_by_owner_fails_on_frozen_pallet() { + with_default_mock_builder(|| { + ContentTest::with_member_channel().setup(); + IssueCreatorTokenFixture::default().call_and_assert(Ok(())); + + assert_ok!(Token::set_frozen_status(RawOrigin::Root.into(), true)); + ReduceCreatorTokenPatronageRateFixture::default() + .call_and_assert(Err(ProjectTokenError::::PalletFrozen.into())); + + assert_ok!(Token::set_frozen_status(RawOrigin::Root.into(), false)); + ReduceCreatorTokenPatronageRateFixture::default().call_and_assert(Ok(())); + }) +} diff --git a/runtime-modules/content/src/tests/creator_tokens/update_upcoming_sale.rs b/runtime-modules/content/src/tests/creator_tokens/update_upcoming_sale.rs index fe876c5bb6..4c64800b6e 100644 --- a/runtime-modules/content/src/tests/creator_tokens/update_upcoming_sale.rs +++ b/runtime-modules/content/src/tests/creator_tokens/update_upcoming_sale.rs @@ -2,6 +2,8 @@ use crate::tests::fixtures::*; use crate::tests::mock::*; use crate::*; +use frame_support::assert_ok; +use frame_system::RawOrigin; #[test] fn unsuccessful_update_creator_token_sale_non_existing_channel() { @@ -181,3 +183,21 @@ fn successful_update_upcoming_curator_channel_creator_token_sale_by_lead() { .call_and_assert(Ok(())); }) } + +#[test] +fn update_upcoming_member_channel_creator_token_sale_by_owner_fails_on_frozen_pallet() { + with_default_mock_builder(|| { + ContentTest::with_member_channel().setup(); + IssueCreatorTokenFixture::default().call_and_assert(Ok(())); + InitCreatorTokenSaleFixture::default() + .with_start_block(100) + .call_and_assert(Ok(())); + + assert_ok!(Token::set_frozen_status(RawOrigin::Root.into(), true)); + UpdateUpcomingCreatorTokenSaleFixture::default() + .call_and_assert(Err(project_token::Error::::PalletFrozen.into())); + + assert_ok!(Token::set_frozen_status(RawOrigin::Root.into(), false)); + UpdateUpcomingCreatorTokenSaleFixture::default().call_and_assert(Ok(())); + }) +} diff --git a/runtime-modules/content/src/tests/curators.rs b/runtime-modules/content/src/tests/curators.rs index 96b5be053f..900220d8ca 100644 --- a/runtime-modules/content/src/tests/curators.rs +++ b/runtime-modules/content/src/tests/curators.rs @@ -4,7 +4,7 @@ use std::collections::BTreeMap; use std::iter::FromIterator; use super::fixtures::*; -use super::mock::{CuratorGroupId, CuratorId, Event, *}; +use super::mock::{CuratorGroupId, CuratorId, RuntimeEvent, *}; use crate::*; use frame_support::{assert_err, assert_ok}; @@ -24,7 +24,7 @@ pub fn add_curator_to_new_group( ) -> CuratorGroupId { let curator_group_id = create_curator_group(BTreeMap::new()); assert_ok!(Content::add_curator_to_group( - Origin::signed(LEAD_ACCOUNT_ID), + RuntimeOrigin::signed(LEAD_ACCOUNT_ID), curator_group_id, curator_id, curator_agent_permissions.iter().cloned().collect() @@ -38,7 +38,7 @@ pub fn add_curator_to_new_group_with_permissions( ) -> CuratorGroupId { let curator_group_id = create_curator_group(permissions); assert_ok!(Content::add_curator_to_group( - Origin::signed(LEAD_ACCOUNT_ID), + RuntimeOrigin::signed(LEAD_ACCOUNT_ID), curator_group_id, curator_id, BTreeSet::new() @@ -58,14 +58,14 @@ fn curator_group_management() { // Activate group assert_ok!(Content::set_curator_group_status( - Origin::signed(LEAD_ACCOUNT_ID), + RuntimeOrigin::signed(LEAD_ACCOUNT_ID), curator_group_id, true )); assert_eq!( System::events().last().unwrap().event, - Event::Content(RawEvent::CuratorGroupStatusSet(curator_group_id, true)) + RuntimeEvent::Content(RawEvent::CuratorGroupStatusSet(curator_group_id, true)) ); let group = Content::curator_group_by_id(curator_group_id); @@ -77,7 +77,7 @@ fn curator_group_management() { 0, BTreeSet::from_iter(vec![ ContentModerationAction::HideVideo, - ContentModerationAction::DeleteVideo, + ContentModerationAction::HideChannel, ]), ), ( @@ -98,8 +98,6 @@ fn curator_group_management() { ( 2, BTreeSet::from_iter(vec![ - ContentModerationAction::DeleteVideo, - ContentModerationAction::DeleteChannel, ContentModerationAction::HideChannel, ContentModerationAction::HideVideo, ContentModerationAction::ChangeChannelFeatureStatus( @@ -129,7 +127,7 @@ fn curator_group_management() { // Update group permissions assert_ok!(Content::update_curator_group_permissions( - Origin::signed(LEAD_ACCOUNT_ID), + RuntimeOrigin::signed(LEAD_ACCOUNT_ID), curator_group_id, permissions.clone() )); @@ -137,7 +135,7 @@ fn curator_group_management() { // Check CuratorGroupPermissionsUpdated event assert_eq!( System::events().last().unwrap().event, - Event::Content(RawEvent::CuratorGroupPermissionsUpdated( + RuntimeEvent::Content(RawEvent::CuratorGroupPermissionsUpdated( curator_group_id, permissions.clone() )) @@ -162,7 +160,7 @@ fn curator_group_management() { // Cannot add non curators into group assert_err!( Content::add_curator_to_group( - Origin::signed(LEAD_ACCOUNT_ID), + RuntimeOrigin::signed(LEAD_ACCOUNT_ID), curator_group_id, DEFAULT_MEMBER_ID, // not a curator, BTreeSet::new() @@ -172,7 +170,7 @@ fn curator_group_management() { // Add curator to group assert_ok!(Content::add_curator_to_group( - Origin::signed(LEAD_ACCOUNT_ID), + RuntimeOrigin::signed(LEAD_ACCOUNT_ID), curator_group_id, DEFAULT_CURATOR_ID, BTreeSet::new() @@ -180,7 +178,7 @@ fn curator_group_management() { assert_eq!( System::events().last().unwrap().event, - Event::Content(RawEvent::CuratorAdded( + RuntimeEvent::Content(RawEvent::CuratorAdded( curator_group_id, DEFAULT_CURATOR_ID, BTreeSet::new() @@ -194,7 +192,7 @@ fn curator_group_management() { // Cannot add same curator again assert_err!( Content::add_curator_to_group( - Origin::signed(LEAD_ACCOUNT_ID), + RuntimeOrigin::signed(LEAD_ACCOUNT_ID), curator_group_id, DEFAULT_CURATOR_ID, BTreeSet::new() @@ -205,7 +203,7 @@ fn curator_group_management() { // Cannot remove curator if not in group assert_err!( Content::remove_curator_from_group( - Origin::signed(LEAD_ACCOUNT_ID), + RuntimeOrigin::signed(LEAD_ACCOUNT_ID), curator_group_id, MEMBERS_COUNT + 1 // not a curator ), @@ -214,14 +212,14 @@ fn curator_group_management() { // Remove curator from group assert_ok!(Content::remove_curator_from_group( - Origin::signed(LEAD_ACCOUNT_ID), + RuntimeOrigin::signed(LEAD_ACCOUNT_ID), curator_group_id, DEFAULT_CURATOR_ID )); assert_eq!( System::events().last().unwrap().event, - Event::Content(RawEvent::CuratorRemoved( + RuntimeEvent::Content(RawEvent::CuratorRemoved( curator_group_id, DEFAULT_CURATOR_ID )) @@ -233,7 +231,7 @@ fn curator_group_management() { // Already removed cannot remove again assert_err!( Content::remove_curator_from_group( - Origin::signed(LEAD_ACCOUNT_ID), + RuntimeOrigin::signed(LEAD_ACCOUNT_ID), curator_group_id, DEFAULT_CURATOR_ID ), @@ -281,7 +279,7 @@ fn unsuccessful_curator_group_permissions_update_with_max_permissions_by_level_m // Update group permissions assert_eq!( Content::update_curator_group_permissions( - Origin::signed(LEAD_ACCOUNT_ID), + RuntimeOrigin::signed(LEAD_ACCOUNT_ID), group_id, permissions ), diff --git a/runtime-modules/content/src/tests/fixtures.rs b/runtime-modules/content/src/tests/fixtures.rs index 1cef0b734c..b006421710 100644 --- a/runtime-modules/content/src/tests/fixtures.rs +++ b/runtime-modules/content/src/tests/fixtures.rs @@ -4,7 +4,7 @@ use derive_new::new; use super::curators; // Importing mock event as MetaEvent to avoid name clash with Event from crate::* glob import -pub use super::mock::Event as MetaEvent; +pub use super::mock::RuntimeEvent as MetaEvent; use super::mock::*; use crate::*; use common::{ @@ -19,12 +19,11 @@ use frame_support::{ }; use frame_system::RawOrigin; use project_token::types::TransferPolicyParamsOf; -use project_token::types::{ - PaymentWithVestingOf, TokenAllocationOf, TokenIssuanceParametersOf, Transfers, -}; +use project_token::types::{TokenAllocationOf, TokenIssuanceParametersOf}; use sp_core::U256; use sp_runtime::Permill; use sp_std::collections::btree_map::BTreeMap; +use sp_std::convert::TryFrom; use sp_std::iter::FromIterator; use sp_std::iter::{IntoIterator, Iterator}; use staking_handler::StakingHandler; @@ -86,7 +85,7 @@ impl CreateCuratorGroupFixture { pub fn call_and_assert(&self, expected_result: DispatchResult) -> Option { let new_group_id = Content::next_curator_group_id(); let actual_result = Content::create_curator_group( - Origin::signed(self.sender), + RuntimeOrigin::signed(self.sender), self.is_active, self.permissions.clone(), ); @@ -230,7 +229,7 @@ impl CreateChannelFixture { } pub fn call_and_assert(&self, expected_result: DispatchResult) { - let origin = Origin::signed(self.sender); + let origin = RuntimeOrigin::signed(self.sender); let balance_pre = self.get_balance(); let channel_id = Content::next_channel_id(); let channel_bag_id = Content::bag_id_for_channel(&channel_id); @@ -245,7 +244,7 @@ impl CreateChannelFixture { if actual_result.is_ok() { // ensure channel is on chain - assert!(ChannelById::::contains_key(&channel_id)); + assert!(ChannelById::::contains_key(channel_id)); // channel counter increased assert_eq!( @@ -312,7 +311,7 @@ impl CreateChannelFixture { ) }, self.params.clone(), - channel_account.clone() + channel_account )) ); @@ -335,7 +334,7 @@ impl CreateChannelFixture { assert_eq!(balance_post, balance_pre); assert_eq!(beg_obj_id, end_obj_id); assert!(!storage::Bags::::contains_key(&channel_bag_id)); - assert!(!ChannelById::::contains_key(&channel_id)); + assert!(!ChannelById::::contains_key(channel_id)); assert_eq!(NextChannelId::::get(), channel_id); } } @@ -468,7 +467,7 @@ impl CreateVideoFixture { } pub fn call(self) { - let origin = Origin::signed(self.sender); + let origin = RuntimeOrigin::signed(self.sender); assert_ok!(Content::create_video( origin, self.actor, @@ -478,7 +477,7 @@ impl CreateVideoFixture { } pub fn call_and_assert(&self, expected_result: DispatchResult) { - let origin = Origin::signed(self.sender); + let origin = RuntimeOrigin::signed(self.sender); let balance_pre = self.get_balance(); let module_balance_pre = ContentTreasury::::usable_balance(); let channel_balance_pre = Balances::::usable_balance( @@ -501,7 +500,7 @@ impl CreateVideoFixture { assert_eq!(actual_result, expected_result); if actual_result.is_ok() { - assert!(VideoById::::contains_key(&video_id)); + assert!(VideoById::::contains_key(video_id)); assert_eq!( Content::next_video_id(), @@ -547,7 +546,7 @@ impl CreateVideoFixture { })); } } else { - assert!(!VideoById::::contains_key(&video_id)); + assert!(!VideoById::::contains_key(video_id)); assert_eq!(Content::next_video_id(), video_id); @@ -669,7 +668,7 @@ impl UpdateChannelFixture { } pub fn call_and_assert(&self, expected_result: DispatchResult) { - let origin = Origin::signed(self.sender); + let origin = RuntimeOrigin::signed(self.sender); let balance_pre = Balances::::usable_balance(self.sender); let channel_pre = Content::channel_by_id(&self.channel_id); let bag_id_for_channel = Content::bag_id_for_channel(&self.channel_id); @@ -799,7 +798,7 @@ impl UpdateChannelPrivilegeLevelFixture { } pub fn call_and_assert(&self, expected_result: DispatchResult) { - let origin = Origin::signed(self.sender); + let origin = RuntimeOrigin::signed(self.sender); let channel_pre = Content::channel_by_id(&self.channel_id); let actual_result = Content::update_channel_privilege_level(origin, self.channel_id, self.privilege_level); @@ -938,7 +937,7 @@ impl UpdateVideoFixture { } pub fn call_and_assert(&self, expected_result: DispatchResult) { - let origin = Origin::signed(self.sender); + let origin = RuntimeOrigin::signed(self.sender); let balance_pre = Balances::::free_balance(self.sender); let video_pre = Content::video_by_id(&self.video_id); let bag_id_for_channel = Content::bag_id_for_channel(&video_pre.in_channel); @@ -1077,7 +1076,7 @@ impl DeleteChannelAssetsAsModeratorFixture { } pub fn call_and_assert(&self, expected_result: DispatchResult) { - let origin = Origin::signed(self.sender); + let origin = RuntimeOrigin::signed(self.sender); let balance_pre = Balances::::usable_balance(self.sender); let channel_pre = Content::channel_by_id(&self.channel_id); let bag_id_for_channel = Content::bag_id_for_channel(&self.channel_id); @@ -1211,7 +1210,7 @@ pub trait ChannelDeletion { self.expected_event_on_success() ); - assert!(!>::contains_key(&self.get_channel_id())); + assert!(!>::contains_key(self.get_channel_id())); assert!(!channel_objects_ids.iter().any(|id| { storage::DataObjectsById::::contains_key(&bag_id_for_channel, id) })); @@ -1247,7 +1246,7 @@ impl DeleteChannelFixture { actor: ContentActor::Member(DEFAULT_MEMBER_ID), channel_id: ChannelId::one(), channel_bag_witness: channel_bag_witness(ChannelId::one()), - num_objects_to_delete: DATA_OBJECTS_NUMBER as u64, + num_objects_to_delete: DATA_OBJECTS_NUMBER, } } @@ -1294,7 +1293,7 @@ impl ChannelDeletion for DeleteChannelFixture { fn execute_call(&self) -> DispatchResult { Content::delete_channel( - Origin::signed(self.sender), + RuntimeOrigin::signed(self.sender), self.actor, self.channel_id, self.channel_bag_witness.clone(), @@ -1320,97 +1319,6 @@ impl ChannelDeletion for DeleteChannelFixture { } } -pub struct DeleteChannelAsModeratorFixture { - sender: AccountId, - actor: ContentActor, - channel_id: ChannelId, - channel_bag_witness: ChannelBagWitness, - num_objects_to_delete: u64, - rationale: Vec, -} - -impl DeleteChannelAsModeratorFixture { - pub fn default() -> Self { - Self { - sender: LEAD_ACCOUNT_ID, - actor: ContentActor::Lead, - channel_id: ChannelId::one(), - channel_bag_witness: channel_bag_witness(ChannelId::one()), - num_objects_to_delete: DATA_OBJECTS_NUMBER as u64, - rationale: b"rationale".to_vec(), - } - } - - pub fn with_sender(self, sender: AccountId) -> Self { - Self { sender, ..self } - } - - pub fn with_actor(self, actor: ContentActor) -> Self { - Self { actor, ..self } - } - - pub fn with_num_objects_to_delete(self, num_objects_to_delete: u64) -> Self { - Self { - num_objects_to_delete, - ..self - } - } - - pub fn with_channel_bag_witness(self, channel_bag_witness: ChannelBagWitness) -> Self { - Self { - channel_bag_witness, - ..self - } - } -} - -impl ChannelDeletion for DeleteChannelAsModeratorFixture { - fn get_sender(&self) -> &AccountId { - &self.sender - } - fn get_channel_id(&self) -> &ChannelId { - &self.channel_id - } - fn get_actor(&self) -> &ContentActor { - &self.actor - } - fn get_num_objects_to_delete(&self) -> u64 { - self.num_objects_to_delete - } - - fn execute_call(&self) -> DispatchResult { - Content::delete_channel_as_moderator( - Origin::signed(self.sender), - self.actor, - self.channel_id, - self.channel_bag_witness.clone(), - self.num_objects_to_delete, - self.rationale.clone(), - ) - } - - fn expected_event_on_success(&self) -> MetaEvent { - MetaEvent::Content(RawEvent::ChannelDeletedByModerator( - self.actor, - self.channel_id, - self.rationale.clone(), - )) - } - - fn on_success_extra( - &self, - _channel_pre: Channel, - bloat_bond_reciever_balance_pre: BalanceOf, - bloat_bond_reciever_balance_post: BalanceOf, - _data_obj_state_bloat_bond: BalanceOf, - ) { - assert_eq!( - bloat_bond_reciever_balance_post, - bloat_bond_reciever_balance_pre - ); - } -} - pub struct SetChannelPausedFeaturesAsModeratorFixture { sender: AccountId, actor: ContentActor, @@ -1453,10 +1361,10 @@ impl SetChannelPausedFeaturesAsModeratorFixture { } pub fn call_and_assert(&self, expected_result: DispatchResult) { - let channel_pre = ChannelById::::get(&self.channel_id); + let channel_pre = ChannelById::::get(self.channel_id); let actual_result = Content::set_channel_paused_features_as_moderator( - Origin::signed(self.sender), + RuntimeOrigin::signed(self.sender), self.actor, self.channel_id, self.new_paused_features.clone(), @@ -1465,7 +1373,7 @@ impl SetChannelPausedFeaturesAsModeratorFixture { assert_eq!(actual_result, expected_result); - let channel_post = ChannelById::::get(&self.channel_id); + let channel_post = ChannelById::::get(self.channel_id); if actual_result.is_ok() { assert_eq!(channel_post.paused_features, self.new_paused_features); @@ -1517,7 +1425,7 @@ impl SetChannelVisibilityAsModeratorFixture { pub fn call_and_assert(&self, expected_result: DispatchResult) { let actual_result = Content::set_channel_visibility_as_moderator( - Origin::signed(self.sender), + RuntimeOrigin::signed(self.sender), self.actor, self.channel_id, self.is_hidden, @@ -1573,7 +1481,7 @@ impl SetVideoVisibilityAsModeratorFixture { pub fn call_and_assert(&self, expected_result: DispatchResult) { let actual_result = Content::set_video_visibility_as_moderator( - Origin::signed(self.sender), + RuntimeOrigin::signed(self.sender), self.actor, self.video_id, self.is_hidden, @@ -1644,7 +1552,7 @@ impl DeleteVideoAssetsAsModeratorFixture { } pub fn call_and_assert(&self, expected_result: DispatchResult) { - let origin = Origin::signed(self.sender); + let origin = RuntimeOrigin::signed(self.sender); let balance_pre = Balances::::usable_balance(self.sender); let video_pre = Content::video_by_id(&self.video_id); let bag_id_for_channel = Content::bag_id_for_channel(&video_pre.in_channel); @@ -1739,7 +1647,7 @@ pub trait VideoDeletion { fn call_and_assert(&self, expected_result: DispatchResult) { let storage_root_pre = storage_root(StateVersion::V1); - let video_pre = >::get(&self.get_video_id()); + let video_pre = >::get(self.get_video_id()); let video_bloat_bond_reciever = video_pre .video_state_bloat_bond .get_recipient(self.get_sender()); @@ -1864,7 +1772,7 @@ impl VideoDeletion for DeleteVideoFixture { fn execute_call(&self) -> DispatchResult { Content::delete_video( - Origin::signed(self.sender), + RuntimeOrigin::signed(self.sender), self.actor, self.video_id, self.num_objects_to_delete, @@ -1890,92 +1798,8 @@ impl VideoDeletion for DeleteVideoFixture { } } -pub struct DeleteVideoAsModeratorFixture { - sender: AccountId, - actor: ContentActor, - video_id: VideoId, - storage_buckets_num_witness: Option, - num_objects_to_delete: u64, - rationale: Vec, -} - -impl DeleteVideoAsModeratorFixture { - pub fn default() -> Self { - Self { - sender: LEAD_ACCOUNT_ID, - actor: ContentActor::Lead, - video_id: VideoId::one(), - storage_buckets_num_witness: Some(storage_buckets_num_witness(ChannelId::one())), - num_objects_to_delete: DATA_OBJECTS_NUMBER, - rationale: b"rationale".to_vec(), - } - } - - pub fn with_sender(self, sender: AccountId) -> Self { - Self { sender, ..self } - } - - pub fn with_actor(self, actor: ContentActor) -> Self { - Self { actor, ..self } - } - - pub fn with_storage_buckets_num_witness( - self, - storage_buckets_num_witness: Option, - ) -> Self { - Self { - storage_buckets_num_witness, - ..self - } - } -} - -impl VideoDeletion for DeleteVideoAsModeratorFixture { - fn get_sender(&self) -> &AccountId { - &self.sender - } - fn get_video_id(&self) -> &VideoId { - &self.video_id - } - fn get_actor(&self) -> &ContentActor { - &self.actor - } - - fn execute_call(&self) -> DispatchResult { - Content::delete_video_as_moderator( - Origin::signed(self.sender), - self.actor, - self.video_id, - self.storage_buckets_num_witness, - self.num_objects_to_delete, - self.rationale.clone(), - ) - } - - fn expected_event_on_success(&self) -> MetaEvent { - MetaEvent::Content(RawEvent::VideoDeletedByModerator( - self.actor, - self.video_id, - self.rationale.clone(), - )) - } - - fn on_success_extra( - &self, - _video_pre: Video, - bloat_bond_reciever_balance_pre: BalanceOf, - bloat_bond_reciever_balance_post: BalanceOf, - _data_obj_state_bloat_bond: BalanceOf, - ) { - assert_eq!( - bloat_bond_reciever_balance_post, - bloat_bond_reciever_balance_pre - ); - } -} - pub struct UpdateChannelPayoutsFixture { - origin: Origin, + origin: RuntimeOrigin, params: UpdateChannelPayoutsParameters, uploader_account: ::AccountId, } @@ -1993,13 +1817,13 @@ pub struct UpdateChannelPayoutsFixtureStateSnapshot { impl UpdateChannelPayoutsFixture { pub fn default() -> Self { Self { - origin: Origin::root(), + origin: RuntimeOrigin::root(), params: UpdateChannelPayoutsParameters::::default(), uploader_account: DEFAULT_MEMBER_ACCOUNT_ID, } } - pub fn with_origin(self, origin: Origin) -> Self { + pub fn with_origin(self, origin: RuntimeOrigin) -> Self { Self { origin, ..self } } @@ -2067,7 +1891,7 @@ impl UpdateChannelPayoutsFixture { .payload .as_ref() .map(|_| snapshot_pre.next_object_id), - self.uploader_account.clone() + self.uploader_account )) ); if let Some(commitment) = self.params.commitment { @@ -2137,7 +1961,7 @@ impl UpdateChannelPayoutsFixture { let actual_result = Content::update_channel_payouts( self.origin.clone(), self.params.clone(), - self.uploader_account.clone(), + self.uploader_account, ); let snapshot_post = self.get_state_snapshot(); @@ -2189,7 +2013,7 @@ impl ClaimChannelRewardFixture { } pub fn call_and_assert(&self, expected_result: DispatchResult) { - let origin = Origin::signed(self.sender); + let origin = RuntimeOrigin::signed(self.sender); let channel_pre = Content::channel_by_id(self.item.channel_id); let channel_balance_pre = channel_reward_account_balance(self.item.channel_id); let council_budget_pre = ::CouncilBudgetManager::get_budget(); @@ -2288,7 +2112,7 @@ impl WithdrawFromChannelBalanceFixture { } pub fn call_and_assert(&self, expected_result: DispatchResult) { - let origin = Origin::signed(self.sender); + let origin = RuntimeOrigin::signed(self.sender); let channel_pre = Content::channel_by_id(self.channel_id); let channel_balance_pre = channel_reward_account_balance(self.channel_id); @@ -2344,130 +2168,6 @@ impl WithdrawFromChannelBalanceFixture { } } -pub struct ClaimAndWithdrawChannelRewardFixture { - sender: AccountId, - actor: ContentActor, - payments: Vec>, - item: PullPayment, -} - -impl ClaimAndWithdrawChannelRewardFixture { - pub fn default() -> Self { - Self { - sender: DEFAULT_MEMBER_ACCOUNT_ID, - actor: ContentActor::Member(DEFAULT_MEMBER_ID), - payments: create_some_pull_payments_helper(), - item: PullPayment:: { - channel_id: ChannelId::one(), - cumulative_reward_earned: DEFAULT_PAYOUT_CLAIMED, - reason: Hashing::hash_of(&b"reason".to_vec()), - }, - } - } - - pub fn with_sender(self, sender: AccountId) -> Self { - Self { sender, ..self } - } - - pub fn with_actor(self, actor: ContentActor) -> Self { - Self { actor, ..self } - } - - pub fn with_payments(self, payments: Vec>) -> Self { - Self { payments, ..self } - } - - pub fn with_item(self, item: PullPayment) -> Self { - Self { item, ..self } - } - - fn balance_of( - dest: &ChannelFundsDestination<::AccountId>, - ) -> BalanceOf { - match dest { - ChannelFundsDestination::AccountId(account_id) => { - Balances::::usable_balance(account_id) - } - ChannelFundsDestination::CouncilBudget => { - ::CouncilBudgetManager::get_budget() - } - } - } - - pub fn call_and_assert(&self, expected_result: DispatchResult) { - let origin = Origin::signed(self.sender); - let channel_pre = Content::channel_by_id(&self.item.channel_id); - let channel_balance_pre = channel_reward_account_balance(self.item.channel_id); - let expected_dest = match channel_pre.owner { - ChannelOwner::Member(member_id) => { - ChannelFundsDestination::<::AccountId>::AccountId( - TestMemberships::controller_account_id(member_id).unwrap_or_default(), - ) - } - ChannelOwner::CuratorGroup(..) => { - ChannelFundsDestination::<::AccountId>::CouncilBudget - } - }; - let dest_balance_pre = Self::balance_of(&expected_dest); - let council_budget_pre = ::CouncilBudgetManager::get_budget(); - - let proof = if self.payments.is_empty() { - vec![] - } else { - build_merkle_path_helper::(&self.payments, DEFAULT_PROOF_INDEX) - }; - - let actual_result = - Content::claim_and_withdraw_channel_reward(origin, self.actor, proof, self.item); - - let channel_post = Content::channel_by_id(&self.item.channel_id); - let channel_balance_post = channel_reward_account_balance(self.item.channel_id); - let dest_balance_post = Self::balance_of(&expected_dest); - let council_budget_post = ::CouncilBudgetManager::get_budget(); - - assert_eq!(actual_result, expected_result); - - let amount_claimed = self - .item - .cumulative_reward_earned - .saturating_sub(channel_pre.cumulative_reward_claimed); - - if actual_result.is_ok() { - assert_eq!( - channel_post.cumulative_reward_claimed, - self.item.cumulative_reward_earned - ); - assert_eq!( - (dest_balance_post, council_budget_post), - match expected_dest { - // Funds are first claimed from, then withdrawn into the council budget - ChannelFundsDestination::CouncilBudget => - (dest_balance_pre, council_budget_pre), - // Funds are taken from council budget and withdrawn into an account - _ => ( - dest_balance_pre.saturating_add(amount_claimed), - council_budget_pre.saturating_sub(amount_claimed) - ), - } - ); - assert_eq!( - System::events().last().unwrap().event, - MetaEvent::Content(RawEvent::ChannelRewardClaimedAndWithdrawn( - self.actor, - self.item.channel_id, - amount_claimed, - expected_dest, - )) - ); - } else { - assert_eq!(council_budget_post, council_budget_pre); - assert_eq!(channel_balance_post, channel_balance_pre); - assert_eq!(dest_balance_post, dest_balance_pre); - assert_eq!(channel_post, channel_pre); - } - } -} - pub struct IssueCreatorTokenFixture { sender: AccountId, actor: ContentActor, @@ -2482,7 +2182,6 @@ impl IssueCreatorTokenFixture { actor: ContentActor::Member(DEFAULT_MEMBER_ID), channel_id: ChannelId::one(), params: TokenIssuanceParametersOf:: { - symbol: Hashing::hash_of(b"CRT"), patronage_rate: DEFAULT_PATRONAGE_RATE, revenue_split_rate: DEFAULT_SPLIT_RATE, ..Default::default() @@ -2542,7 +2241,7 @@ impl IssueCreatorTokenFixture { } pub fn call_and_assert(&self, expected_result: DispatchResult) { - let origin = Origin::signed(self.sender); + let origin = RuntimeOrigin::signed(self.sender); let expected_token_id = project_token::Module::::next_token_id(); let channel_pre = Content::channel_by_id(self.channel_id); @@ -2619,7 +2318,7 @@ impl InitCreatorTokenSaleFixture { } pub fn call_and_assert(&self, expected_result: DispatchResult) { - let origin = Origin::signed(self.sender); + let origin = RuntimeOrigin::signed(self.sender); let actual_result = Content::init_creator_token_sale( origin, @@ -2664,7 +2363,7 @@ impl UpdateUpcomingCreatorTokenSaleFixture { } pub fn call_and_assert(&self, expected_result: DispatchResult) { - let origin = Origin::signed(self.sender); + let origin = RuntimeOrigin::signed(self.sender); let actual_result = Content::update_upcoming_creator_token_sale( origin, @@ -2686,28 +2385,25 @@ pub struct CreatorTokenIssuerTransferFixture { sender: AccountId, actor: ContentActor, channel_id: ChannelId, - outputs: TransfersWithVestingOf, + outputs: TransferWithVestingOutputsOf, metadata: Vec, } impl CreatorTokenIssuerTransferFixture { pub fn default() -> Self { + let outputs = TransferWithVestingOutputsOf::::try_from( + vec![(SECOND_MEMBER_ID, DEFAULT_ISSUER_TRANSFER_AMOUNT)] + .into_iter() + .map(|(member, amount)| (member, amount.into())) + .collect::>(), + ) + .ok() + .unwrap(); Self { sender: DEFAULT_MEMBER_ACCOUNT_ID, actor: ContentActor::Member(DEFAULT_MEMBER_ID), channel_id: ChannelId::one(), - outputs: Transfers( - [( - SECOND_MEMBER_ID, - PaymentWithVestingOf:: { - amount: DEFAULT_ISSUER_TRANSFER_AMOUNT, - vesting_schedule: None, - }, - )] - .iter() - .cloned() - .collect(), - ), + outputs, metadata: b"metadata".to_vec(), } } @@ -2721,7 +2417,7 @@ impl CreatorTokenIssuerTransferFixture { } pub fn call_and_assert(&self, expected_result: DispatchResult) { - let origin = Origin::signed(self.sender); + let origin = RuntimeOrigin::signed(self.sender); let actual_result = Content::creator_token_issuer_transfer( origin, @@ -2769,7 +2465,7 @@ impl ReduceCreatorTokenPatronageRateFixture { } pub fn call_and_assert(&self, expected_result: DispatchResult) { - let origin = Origin::signed(self.sender); + let origin = RuntimeOrigin::signed(self.sender); let actual_result = Content::reduce_creator_token_patronage_rate_to( origin, @@ -2810,7 +2506,7 @@ impl ClaimCreatorTokenPatronageCreditFixture { } pub fn call_and_assert(&self, expected_result: DispatchResult) { - let origin = Origin::signed(self.sender); + let origin = RuntimeOrigin::signed(self.sender); let actual_result = Content::claim_creator_token_patronage_credit(origin, self.actor, self.channel_id); @@ -2847,7 +2543,7 @@ impl MakeCreatorTokenPermissionlessFixture { } pub fn call_and_assert(&self, expected_result: DispatchResult) { - let origin = Origin::signed(self.sender); + let origin = RuntimeOrigin::signed(self.sender); let actual_result = Content::make_creator_token_permissionless(origin, self.actor, self.channel_id); @@ -2895,7 +2591,7 @@ impl IssueRevenueSplitFixture { } pub fn call_and_assert(&self, expected_result: DispatchResult) { - let origin = Origin::signed(self.sender); + let origin = RuntimeOrigin::signed(self.sender); let actual_result = Content::issue_revenue_split( origin, @@ -2937,7 +2633,7 @@ impl FinalizeRevenueSplitFixture { } pub fn call_and_assert(&self, expected_result: DispatchResult) { - let origin = Origin::signed(self.sender); + let origin = RuntimeOrigin::signed(self.sender); let actual_result = Content::finalize_revenue_split(origin, self.actor, self.channel_id); @@ -2949,6 +2645,83 @@ impl FinalizeRevenueSplitFixture { } } +pub struct ActivateAmmFixture { + sender: AccountId, + actor: ContentActor, + channel_id: ChannelId, + params: AmmParamsOf, +} + +impl ActivateAmmFixture { + pub fn default() -> Self { + Self { + sender: DEFAULT_MEMBER_ACCOUNT_ID, + actor: ContentActor::Member(DEFAULT_MEMBER_ID), + channel_id: ChannelId::one(), + params: AmmParamsOf:: { + slope: 10_000_000u32.into(), + intercept: Zero::zero(), + }, + } + } + + pub fn with_sender(self, sender: AccountId) -> Self { + Self { sender, ..self } + } + + pub fn with_actor(self, actor: ContentActor) -> Self { + Self { actor, ..self } + } + + pub fn call_and_assert(&self, expected_result: DispatchResult) { + let origin = RuntimeOrigin::signed(self.sender); + + let actual_result = + Content::activate_amm(origin, self.actor, self.channel_id, self.params.clone()); + + if expected_result.is_ok() { + assert_ok!(actual_result); + } else { + assert_noop!(actual_result, expected_result.err().unwrap()); + } + } +} +pub struct DeactivateAmmFixture { + sender: AccountId, + actor: ContentActor, + channel_id: ChannelId, +} + +impl DeactivateAmmFixture { + pub fn default() -> Self { + Self { + sender: DEFAULT_MEMBER_ACCOUNT_ID, + actor: ContentActor::Member(DEFAULT_MEMBER_ID), + channel_id: ChannelId::one(), + } + } + + pub fn with_sender(self, sender: AccountId) -> Self { + Self { sender, ..self } + } + + pub fn with_actor(self, actor: ContentActor) -> Self { + Self { actor, ..self } + } + + pub fn call_and_assert(&self, expected_result: DispatchResult) { + let origin = RuntimeOrigin::signed(self.sender); + + let actual_result = Content::deactivate_amm(origin, self.actor, self.channel_id); + + if expected_result.is_ok() { + assert_ok!(actual_result); + } else { + assert_noop!(actual_result, expected_result.err().unwrap()); + } + } +} + pub struct FinalizeCreatorTokenSaleFixture { sender: AccountId, actor: ContentActor, @@ -2973,7 +2746,7 @@ impl FinalizeCreatorTokenSaleFixture { } pub fn call_and_assert(&self, expected_result: DispatchResult) { - let origin = Origin::signed(self.sender); + let origin = RuntimeOrigin::signed(self.sender); let council_budget_pre = ::CouncilBudgetManager::get_budget(); let channel = Content::channel_by_id(self.channel_id); @@ -3032,7 +2805,7 @@ impl UpdateChannelStateBloatBondFixture { } pub fn call_and_assert(&self, expected_result: DispatchResult) { - let origin = Origin::signed(self.sender); + let origin = RuntimeOrigin::signed(self.sender); let channel_state_bloat_bond_pre = Content::channel_state_bloat_bond_value(); let actual_result = @@ -3083,7 +2856,7 @@ impl UpdateVideoStateBloatBondFixture { } pub fn call_and_assert(&self, expected_result: DispatchResult) { - let origin = Origin::signed(self.sender); + let origin = RuntimeOrigin::signed(self.sender); let video_state_bloat_bond_pre = Content::video_state_bloat_bond_value(); let actual_result = @@ -3130,7 +2903,7 @@ impl DeissueCreatorTokenFixture { } pub fn call_and_assert(&self, expected_result: DispatchResult) { - let origin = Origin::signed(self.sender); + let origin = RuntimeOrigin::signed(self.sender); let channel_pre = Content::channel_by_id(self.channel_id); @@ -3456,7 +3229,7 @@ impl IssueNftFixture { let video_pre = Content::video_by_id(self.video_id); let actual_result = Content::issue_nft( - Origin::signed(self.sender), + RuntimeOrigin::signed(self.sender), self.actor, self.video_id, self.params.clone(), @@ -3564,7 +3337,7 @@ impl StartOpenAuctionFixture { let video_pre = Content::video_by_id(self.video_id); let actual_result = Content::start_open_auction( - Origin::signed(self.sender), + RuntimeOrigin::signed(self.sender), self.actor, self.video_id, self.params.clone(), @@ -3676,7 +3449,7 @@ impl StartEnglishAuctionFixture { let video_pre = Content::video_by_id(self.video_id); let actual_result = Content::start_english_auction( - Origin::signed(self.sender), + RuntimeOrigin::signed(self.sender), self.actor, self.video_id, self.params.clone(), @@ -3762,7 +3535,7 @@ impl OfferNftFixture { let video_pre = Content::video_by_id(self.video_id); let actual_result = Content::offer_nft( - Origin::signed(self.sender), + RuntimeOrigin::signed(self.sender), self.video_id, self.actor, self.to, @@ -3866,7 +3639,7 @@ impl MakeOpenAuctionBidFixture { let bid_pre = Content::open_auction_bid_by_video_and_member(self.video_id, self.member_id); let actual_result = Content::make_open_auction_bid( - Origin::signed(self.sender), + RuntimeOrigin::signed(self.sender), self.member_id, self.video_id, self.bid, @@ -3983,7 +3756,7 @@ impl PickOpenAuctionWinnerFixture { let snapshot_pre = Self::create_auction_state_snapshot(self); let actual_result = Content::pick_open_auction_winner( - Origin::signed(self.sender), + RuntimeOrigin::signed(self.sender), self.actor, self.video_id, self.winner_id, @@ -4055,7 +3828,7 @@ impl NftOwnerRemarkFixture { pub fn call_and_assert(&self, expected_result: DispatchResult) { let actual_result = Content::nft_owner_remark( - Origin::signed(self.sender), + RuntimeOrigin::signed(self.sender), self.actor, self.video_id, self.msg.clone(), @@ -4107,8 +3880,11 @@ impl DestroyNftFixture { pub fn call_and_assert(&self, expected_result: DispatchResult) { let video_pre = Content::video_by_id(self.video_id); - let actual_result = - Content::destroy_nft(Origin::signed(self.sender), self.actor, self.video_id); + let actual_result = Content::destroy_nft( + RuntimeOrigin::signed(self.sender), + self.actor, + self.video_id, + ); let video_post = Content::video_by_id(self.video_id); @@ -4163,7 +3939,7 @@ impl ChannelAgentRemarkFixture { pub fn call_and_assert(&self, expected_result: DispatchResult) { let actual_result = Content::channel_agent_remark( - Origin::signed(self.sender), + RuntimeOrigin::signed(self.sender), self.actor, self.channel_id, self.msg.clone(), @@ -4302,7 +4078,7 @@ impl SellNftFixture { let video_pre = Content::video_by_id(self.video_id); let actual_result = Content::sell_nft( - Origin::signed(self.sender), + RuntimeOrigin::signed(self.sender), self.video_id, self.actor, self.price, @@ -4382,7 +4158,11 @@ impl CancelAuctionFixture { AuctionType::Open => Content::cancel_open_auction, }; - let actual_result = call(Origin::signed(self.sender), self.actor, self.video_id); + let actual_result = call( + RuntimeOrigin::signed(self.sender), + self.actor, + self.video_id, + ); assert_eq!(actual_result, expected_result); @@ -4441,8 +4221,11 @@ impl CancelOfferFixture { pub fn call_and_assert(&self, expected_result: DispatchResult) { let video_pre = Content::video_by_id(self.video_id); - let actual_result = - Content::cancel_offer(Origin::signed(self.sender), self.actor, self.video_id); + let actual_result = Content::cancel_offer( + RuntimeOrigin::signed(self.sender), + self.actor, + self.video_id, + ); assert_eq!(actual_result, expected_result); @@ -4501,8 +4284,11 @@ impl CancelBuyNowFixture { pub fn call_and_assert(&self, expected_result: DispatchResult) { let video_pre = Content::video_by_id(self.video_id); - let actual_result = - Content::cancel_buy_now(Origin::signed(self.sender), self.actor, self.video_id); + let actual_result = Content::cancel_buy_now( + RuntimeOrigin::signed(self.sender), + self.actor, + self.video_id, + ); assert_eq!(actual_result, expected_result); @@ -4564,7 +4350,7 @@ impl UpdateBuyNowPriceFixture { let video_pre = Content::video_by_id(self.video_id); let actual_result = Content::update_buy_now_price( - Origin::signed(self.sender), + RuntimeOrigin::signed(self.sender), self.actor, self.video_id, self.price, @@ -4922,7 +4708,7 @@ pub fn set_dynamic_bag_creation_policy_for_storage_numbers(storage_bucket_number // Set storage bucket in the dynamic bag creation policy to zero. assert_eq!( Storage::::update_number_of_storage_buckets_in_dynamic_bag_creation_policy( - Origin::signed(STORAGE_WG_LEADER_ACCOUNT_ID), + RuntimeOrigin::signed(STORAGE_WG_LEADER_ACCOUNT_ID), DynamicBagType::Channel, storage_bucket_number, ), @@ -4930,7 +4716,7 @@ pub fn set_dynamic_bag_creation_policy_for_storage_numbers(storage_bucket_number ); assert_eq!( Storage::::update_number_of_storage_buckets_in_dynamic_bag_creation_policy( - Origin::signed(STORAGE_WG_LEADER_ACCOUNT_ID), + RuntimeOrigin::signed(STORAGE_WG_LEADER_ACCOUNT_ID), DynamicBagType::Member, storage_bucket_number, ), @@ -4941,7 +4727,7 @@ pub fn create_initial_storage_buckets_helper() -> StorageBucketId { // first set limits assert_eq!( Storage::::update_storage_buckets_voucher_max_limits( - Origin::signed(STORAGE_WG_LEADER_ACCOUNT_ID), + RuntimeOrigin::signed(STORAGE_WG_LEADER_ACCOUNT_ID), VOUCHER_OBJECTS_SIZE_LIMIT, VOUCHER_OBJECTS_NUMBER_LIMIT, ), @@ -4955,7 +4741,7 @@ pub fn create_initial_storage_buckets_helper() -> StorageBucketId { // create bucket(s) assert_eq!( Storage::::create_storage_bucket( - Origin::signed(STORAGE_WG_LEADER_ACCOUNT_ID), + RuntimeOrigin::signed(STORAGE_WG_LEADER_ACCOUNT_ID), None, STORAGE_BUCKET_ACCEPTING_BAGS, STORAGE_BUCKET_OBJECTS_SIZE_LIMIT, @@ -4970,7 +4756,7 @@ pub fn create_initial_storage_buckets_helper() -> StorageBucketId { pub fn set_data_object_state_bloat_bond(state_bloat_bond: u64) { assert_eq!( Storage::::update_data_object_state_bloat_bond( - Origin::signed(STORAGE_WG_LEADER_ACCOUNT_ID), + RuntimeOrigin::signed(STORAGE_WG_LEADER_ACCOUNT_ID), state_bloat_bond ), Ok(()) @@ -4983,7 +4769,7 @@ pub fn create_default_member_owned_channel_with_video_with_nft() -> (ChannelId, create_default_member_owned_channel_with_video(); // Issue nft assert_ok!(Content::issue_nft( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), ContentActor::Member(DEFAULT_MEMBER_ID), video_id, NftIssuanceParameters:: { @@ -5616,10 +5402,6 @@ pub fn run_all_fixtures_with_contexts(contexts: Vec) { .with_sender(sender) .with_actor(actor) .call_and_assert(expected_err); - ClaimAndWithdrawChannelRewardFixture::default() - .with_sender(sender) - .with_actor(actor) - .call_and_assert(expected_err); IssueCreatorTokenFixture::default() .with_sender(sender) .with_actor(actor) @@ -5794,7 +5576,7 @@ pub fn set_invitation_lock( amount: BalanceOf, ) { ::InvitedMemberStakingHandler::lock_with_reasons( - &who, + who, amount, WithdrawReasons::except(WithdrawReasons::TRANSACTION_PAYMENT), ); @@ -5804,5 +5586,5 @@ pub fn set_staking_candidate_lock( who: &::AccountId, amount: BalanceOf, ) { - ::StakingCandidateStakingHandler::lock(&who, amount); + ::StakingCandidateStakingHandler::lock(who, amount); } diff --git a/runtime-modules/content/src/tests/merkle.rs b/runtime-modules/content/src/tests/merkle.rs index 96c94b83d9..eeae314cc4 100644 --- a/runtime-modules/content/src/tests/merkle.rs +++ b/runtime-modules/content/src/tests/merkle.rs @@ -553,351 +553,6 @@ fn unsuccessful_channel_balance_withdrawal_with_fund_transfer_feature_paused() { }) } -/// Claim&Withdraw - -#[test] -fn unsuccessful_claim_and_withdraw_with_unsufficient_cashout() { - with_default_mock_builder(|| { - ContentTest::with_member_channel().setup(); - - let item = PullPayment:: { - channel_id: ChannelId::one(), - cumulative_reward_earned: Content::min_cashout_allowed() - 1, - reason: Hashing::hash_of(&b"reason".to_vec()), - }; - ClaimAndWithdrawChannelRewardFixture::default() - .with_payments(vec![item]) - .with_item(item) - .call_and_assert(Err(Error::::CashoutAmountBelowMinimumAmount.into())) - }) -} - -#[test] -fn unsuccessful_claim_and_withdraw_with_reward_limit_exceeded() { - with_default_mock_builder(|| { - ContentTest::with_member_channel().setup(); - - let item = PullPayment:: { - channel_id: ChannelId::one(), - cumulative_reward_earned: Content::max_cashout_allowed() + 1, - reason: Hashing::hash_of(&b"reason".to_vec()), - }; - ClaimAndWithdrawChannelRewardFixture::default() - .with_payments(vec![item]) - .with_item(item) - .call_and_assert(Err(Error::::CashoutAmountExceedsMaximumAmount.into())) - }) -} - -#[test] -fn unsuccessful_claim_and_withdraw_with_invalid_channel_id() { - with_default_mock_builder(|| { - ContentTest::with_member_channel().setup(); - - let item = PullPayment:: { - channel_id: ChannelId::zero(), - cumulative_reward_earned: BalanceOf::::one(), - reason: Hashing::hash_of(&b"reason".to_vec()), - }; - ClaimAndWithdrawChannelRewardFixture::default() - .with_payments(vec![item]) - .with_item(item) - .call_and_assert(Err(Error::::ChannelDoesNotExist.into())) - }) -} - -#[test] -fn unsuccessful_claim_and_withdraw_with_invalid_claim() { - with_default_mock_builder(|| { - ContentTest::with_member_channel() - .with_claimable_reward() - .setup(); - - ::CouncilBudgetManager::set_budget(DEFAULT_PAYOUT_CLAIMED + 1); - - let item = PullPayment:: { - channel_id: ChannelId::one(), - cumulative_reward_earned: (DEFAULT_PAYOUT_CLAIMED + 1), - reason: Hashing::hash_of(&b"reason".to_vec()), - }; - ClaimAndWithdrawChannelRewardFixture::default() - .with_item(item) - .call_and_assert(Err(Error::::PaymentProofVerificationFailed.into())) - }) -} - -#[test] -fn unsuccessful_claim_and_withdraw_with_empty_proof() { - with_default_mock_builder(|| { - ContentTest::with_member_channel() - .with_claimable_reward() - .setup(); - - let item = PullPayment:: { - channel_id: ChannelId::one(), - cumulative_reward_earned: DEFAULT_PAYOUT_CLAIMED, - reason: Hashing::hash_of(&b"reason".to_vec()), - }; - ClaimAndWithdrawChannelRewardFixture::default() - .with_item(item) - .with_payments(vec![]) - .call_and_assert(Err(Error::::PaymentProofVerificationFailed.into())) - }) -} - -#[test] -fn unsuccessful_claim_and_withdraw_with_no_commitment() { - with_default_mock_builder(|| { - ContentTest::with_member_channel().setup(); - ::CouncilBudgetManager::set_budget(DEFAULT_PAYOUT_CLAIMED); - - ClaimAndWithdrawChannelRewardFixture::default() - .call_and_assert(Err(Error::::PaymentProofVerificationFailed.into())) - }) -} - -#[test] -fn unsuccessful_claim_and_withdraw_cashouts_disabled() { - with_default_mock_builder(|| { - ContentTest::with_member_channel() - .with_claimable_reward() - .setup(); - - UpdateChannelPayoutsFixture::default() - .with_channel_cashouts_enabled(Some(false)) - .call_and_assert(Ok(())); - - ClaimAndWithdrawChannelRewardFixture::default() - .call_and_assert(Err(Error::::ChannelCashoutsDisabled.into())); - }) -} - -#[test] -fn unsuccessful_claim_and_withdraw_double_spend() { - with_default_mock_builder(|| { - ContentTest::with_member_channel() - .with_claimable_reward() - .setup(); - - ClaimAndWithdrawChannelRewardFixture::default().call_and_assert(Ok(())); - - // claim and withdraw - ClaimAndWithdrawChannelRewardFixture::default() - .call_and_assert(Err(Error::::CashoutAmountBelowMinimumAmount.into())); - - // claim only - ClaimChannelRewardFixture::default() - .call_and_assert(Err(Error::::CashoutAmountBelowMinimumAmount.into())); - - // withdraw only - WithdrawFromChannelBalanceFixture::default().call_and_assert(Err( - Error::::WithdrawalAmountExceedsChannelAccountWithdrawableBalance.into(), - )) - }) -} - -#[test] -fn unsuccessful_claim_and_withdraw_insufficient_council_budget() { - with_default_mock_builder(|| { - ContentTest::with_member_channel() - .with_claimable_reward() - .setup(); - ::CouncilBudgetManager::set_budget(DEFAULT_PAYOUT_CLAIMED - 1); - - ClaimAndWithdrawChannelRewardFixture::default() - .call_and_assert(Err(Error::::InsufficientCouncilBudget.into())); - }) -} - -#[test] -fn successful_multiple_claims_and_withdrawals_when_reward_updated() { - with_default_mock_builder(|| { - ContentTest::with_member_channel().setup(); - let payments = create_some_pull_payments_helper(); - update_commit_value_with_payments_helper(&payments); - ::CouncilBudgetManager::set_budget(DEFAULT_PAYOUT_CLAIMED * 2); - - ClaimAndWithdrawChannelRewardFixture::default() - .with_payments(payments) - .call_and_assert(Ok(())); - - let payments2 = create_some_pull_payments_helper_with_rewards(DEFAULT_PAYOUT_EARNED * 2); - update_commit_value_with_payments_helper(&payments2); - - ClaimAndWithdrawChannelRewardFixture::default() - .with_payments(payments2.clone()) - .with_item(payments2[DEFAULT_PROOF_INDEX]) - .call_and_assert(Ok(())); - }) -} - -#[test] -fn unsuccessful_member_channel_claim_and_withdraw_by_collaborator_without_claim_permissions() { - with_default_mock_builder(|| { - ContentTest::with_member_channel() - .with_all_agent_permissions_except(&[ChannelActionPermission::ClaimChannelReward]) - .setup(); - ClaimAndWithdrawChannelRewardFixture::default() - .with_sender(COLLABORATOR_MEMBER_ACCOUNT_ID) - .with_actor(ContentActor::Member(COLLABORATOR_MEMBER_ID)) - .call_and_assert(Err( - Error::::ChannelAgentInsufficientPermissions.into() - )); - }) -} - -#[test] -fn unsuccessful_member_channel_claim_and_withdraw_by_collaborator_without_withdrawal_permissions() { - with_default_mock_builder(|| { - ContentTest::with_member_channel() - .with_all_agent_permissions_except(&[ - ChannelActionPermission::WithdrawFromChannelBalance, - ]) - .with_claimable_reward() - .setup(); - ClaimAndWithdrawChannelRewardFixture::default() - .with_sender(COLLABORATOR_MEMBER_ACCOUNT_ID) - .with_actor(ContentActor::Member(COLLABORATOR_MEMBER_ID)) - .call_and_assert(Err( - Error::::ChannelAgentInsufficientPermissions.into() - )); - }) -} - -#[test] -fn claim_and_withdraw_fails_during_channel_transfer() { - with_default_mock_builder(|| { - ContentTest::with_member_channel() - .with_claimable_reward() - .setup(); - - InitializeChannelTransferFixture::default() - .with_new_member_channel_owner(SECOND_MEMBER_ID) - .call_and_assert(Ok(())); - - ClaimAndWithdrawChannelRewardFixture::default() - .call_and_assert(Err(Error::::InvalidChannelTransferStatus.into())); - }) -} - -#[test] -fn unsuccessful_member_claim_and_withdraw_with_cashout_feature_paused() { - with_default_mock_builder(|| { - let channel_id = Content::next_channel_id(); - ContentTest::with_member_channel() - .with_claimable_reward() - .setup(); - pause_channel_feature(channel_id, PausableChannelFeature::CreatorCashout); - - ClaimAndWithdrawChannelRewardFixture::default() - .call_and_assert(Err(Error::::ChannelFeaturePaused.into())); - }) -} - -#[test] -fn unsuccessful_member_claim_and_withdraw_with_transfer_fund_feature_paused() { - with_default_mock_builder(|| { - let channel_id = Content::next_channel_id(); - ContentTest::with_member_channel() - .with_claimable_reward() - .setup(); - pause_channel_feature(channel_id, PausableChannelFeature::ChannelFundsTransfer); - - ClaimAndWithdrawChannelRewardFixture::default() - .call_and_assert(Err(Error::::ChannelFeaturePaused.into())); - }) -} - -#[test] -fn successful_member_channel_claim_and_withdraw_by_collaborator() { - with_default_mock_builder(|| { - ContentTest::with_member_channel() - .with_agent_permissions(&[ - ChannelActionPermission::WithdrawFromChannelBalance, - ChannelActionPermission::ClaimChannelReward, - ]) - .with_claimable_reward() - .setup(); - ClaimAndWithdrawChannelRewardFixture::default() - .with_sender(COLLABORATOR_MEMBER_ACCOUNT_ID) - .with_actor(ContentActor::Member(COLLABORATOR_MEMBER_ID)) - .call_and_assert(Ok(())); - }) -} - -#[test] -fn successful_member_channel_claim_and_withdraw_by_owner() { - with_default_mock_builder(|| { - ContentTest::with_member_channel() - .with_claimable_reward() - .setup(); - ClaimAndWithdrawChannelRewardFixture::default().call_and_assert(Ok(())); - }) -} - -#[test] -fn unsuccessful_curator_channel_claim_and_withdraw_by_curator_without_cliam_permissions() { - with_default_mock_builder(|| { - ContentTest::with_curator_channel() - .with_all_agent_permissions_except(&[ChannelActionPermission::ClaimChannelReward]) - .setup(); - ClaimAndWithdrawChannelRewardFixture::default() - .with_sender(DEFAULT_CURATOR_ACCOUNT_ID) - .with_actor(default_curator_actor()) - .call_and_assert(Err( - Error::::ChannelAgentInsufficientPermissions.into() - )); - }) -} - -#[test] -fn unsuccessful_curator_channel_claim_and_withdraw_by_curator_without_withdrawal_permissions() { - with_default_mock_builder(|| { - ContentTest::with_curator_channel() - .with_all_agent_permissions_except(&[ - ChannelActionPermission::WithdrawFromChannelBalance, - ]) - .with_claimable_reward() - .setup(); - ClaimAndWithdrawChannelRewardFixture::default() - .with_sender(DEFAULT_CURATOR_ACCOUNT_ID) - .with_actor(default_curator_actor()) - .call_and_assert(Err( - Error::::ChannelAgentInsufficientPermissions.into() - )); - }) -} - -#[test] -fn successful_curator_channel_claim_and_withdraw_by_curator() { - with_default_mock_builder(|| { - ContentTest::with_curator_channel() - .with_agent_permissions(&[ - ChannelActionPermission::WithdrawFromChannelBalance, - ChannelActionPermission::ClaimChannelReward, - ]) - .with_claimable_reward() - .setup(); - ClaimAndWithdrawChannelRewardFixture::default() - .with_sender(DEFAULT_CURATOR_ACCOUNT_ID) - .with_actor(default_curator_actor()) - .call_and_assert(Ok(())); - }) -} - -#[test] -fn successful_curator_channel_claim_and_withdraw_by_lead() { - with_default_mock_builder(|| { - ContentTest::with_curator_channel() - .with_claimable_reward() - .setup(); - ClaimAndWithdrawChannelRewardFixture::default() - .with_sender(LEAD_ACCOUNT_ID) - .with_actor(ContentActor::Lead) - .call_and_assert(Ok(())); - }) -} - // Channel payouts update #[test] @@ -908,11 +563,11 @@ fn unsuccessfull_channel_payouts_update_with_invalid_origin() { increase_account_balance_helper(LEAD_ACCOUNT_ID, INITIAL_BALANCE); UpdateChannelPayoutsFixture::default() - .with_origin(Origin::signed(LEAD_ACCOUNT_ID)) + .with_origin(RuntimeOrigin::signed(LEAD_ACCOUNT_ID)) .call_and_assert(Err(DispatchError::BadOrigin)); UpdateChannelPayoutsFixture::default() - .with_origin(Origin::none()) + .with_origin(RuntimeOrigin::none()) .call_and_assert(Err(DispatchError::BadOrigin)); }) } diff --git a/runtime-modules/content/src/tests/metaprotocol.rs b/runtime-modules/content/src/tests/metaprotocol.rs index 1b33a548ff..581f84fab4 100644 --- a/runtime-modules/content/src/tests/metaprotocol.rs +++ b/runtime-modules/content/src/tests/metaprotocol.rs @@ -20,7 +20,7 @@ fn successful_agent_remark() { let msg = b"test".to_vec(); assert_ok!(Content::channel_agent_remark( - Origin::signed(COLLABORATOR_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(COLLABORATOR_MEMBER_ACCOUNT_ID), ContentActor::Member(COLLABORATOR_MEMBER_ID), channel_id, msg @@ -42,7 +42,7 @@ fn unsuccessful_agent_remark_with_invalid_channel_id() { assert_err!( Content::channel_agent_remark( - Origin::signed(COLLABORATOR_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(COLLABORATOR_MEMBER_ACCOUNT_ID), ContentActor::Member(COLLABORATOR_MEMBER_ID), invalid_channel_id, msg @@ -66,7 +66,7 @@ fn unsuccessful_agent_remark_with_invalid_account_id() { assert_err!( Content::channel_agent_remark( - Origin::signed(UNAUTHORIZED_COLLABORATOR_MEMBER_ACCOUNT_ID + 1), + RuntimeOrigin::signed(UNAUTHORIZED_COLLABORATOR_MEMBER_ACCOUNT_ID + 1), ContentActor::Member(COLLABORATOR_MEMBER_ID), channel_id, msg @@ -90,7 +90,7 @@ fn unsuccessful_agent_remark_with_invalid_member_id() { assert_err!( Content::channel_agent_remark( - Origin::signed(COLLABORATOR_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(COLLABORATOR_MEMBER_ACCOUNT_ID), ContentActor::Member(UNAUTHORIZED_COLLABORATOR_MEMBER_ID), channel_id, msg @@ -114,7 +114,7 @@ fn unsuccessful_agent_remark_by_non_agent() { assert_err!( Content::channel_agent_remark( - Origin::signed(UNAUTHORIZED_COLLABORATOR_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(UNAUTHORIZED_COLLABORATOR_MEMBER_ACCOUNT_ID), ContentActor::Member(UNAUTHORIZED_COLLABORATOR_MEMBER_ID), channel_id, msg @@ -138,7 +138,7 @@ fn unsuccessful_owner_remark_with_invalid_channel_id() { assert_err!( Content::channel_owner_remark( - Origin::signed(UNAUTHORIZED_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(UNAUTHORIZED_MEMBER_ACCOUNT_ID), invalid_channel_id, msg ), @@ -161,7 +161,7 @@ fn unsuccessful_owner_remark_with_invalid_account_id() { assert_err!( Content::channel_owner_remark( - Origin::signed(UNAUTHORIZED_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(UNAUTHORIZED_MEMBER_ACCOUNT_ID), channel_id, msg ), @@ -184,7 +184,7 @@ fn unsuccessful_owner_remark_by_non_owner() { assert_err!( Content::channel_owner_remark( - Origin::signed(UNAUTHORIZED_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(UNAUTHORIZED_MEMBER_ACCOUNT_ID), channel_id, msg ), @@ -205,7 +205,7 @@ fn unsuccessful_curator_channel_owner_remark_by_unauthorized_curator() { assert_err!( Content::channel_owner_remark( - Origin::signed(UNAUTHORIZED_CURATOR_ACCOUNT_ID), + RuntimeOrigin::signed(UNAUTHORIZED_CURATOR_ACCOUNT_ID), channel_id, msg ), @@ -228,7 +228,7 @@ fn unsuccessful_nft_owner_remark_with_nft_not_issued() { assert_err!( Content::nft_owner_remark( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), ContentActor::Member(DEFAULT_MEMBER_ID), video_id, msg @@ -247,7 +247,7 @@ fn issue_and_sell_nft() { // Issue nft assert_ok!(Content::issue_nft( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), ContentActor::Member(DEFAULT_MEMBER_ID), video_id, NftIssuanceParameters::::default(), @@ -258,7 +258,7 @@ fn issue_and_sell_nft() { // Sell nft assert_ok!(Content::sell_nft( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), video_id, ContentActor::Member(DEFAULT_MEMBER_ID), DEFAULT_NFT_PRICE, @@ -266,7 +266,7 @@ fn issue_and_sell_nft() { // Buy nft assert_ok!(Content::buy_nft( - Origin::signed(SECOND_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(SECOND_MEMBER_ACCOUNT_ID), video_id, SECOND_MEMBER_ID, DEFAULT_NFT_PRICE, @@ -284,7 +284,7 @@ fn successful_nft_owner_remark() { issue_and_sell_nft(); assert_ok!(Content::nft_owner_remark( - Origin::signed(SECOND_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(SECOND_MEMBER_ACCOUNT_ID), ContentActor::Member(SECOND_MEMBER_ID), video_id, msg @@ -304,7 +304,7 @@ fn unsuccessful_nft_owner_with_invalid_video_id() { assert_err!( Content::nft_owner_remark( - Origin::signed(SECOND_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(SECOND_MEMBER_ACCOUNT_ID), ContentActor::Member(SECOND_MEMBER_ID), invalid_video_id, msg @@ -326,7 +326,7 @@ fn unsuccessful_nft_owner_by_non_authorized_actor() { assert_err!( Content::nft_owner_remark( - Origin::signed(UNAUTHORIZED_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(UNAUTHORIZED_MEMBER_ACCOUNT_ID), ContentActor::Member(UNAUTHORIZED_MEMBER_ID), video_id, msg @@ -348,7 +348,7 @@ fn unsuccessful_nft_owner_with_invalid_acount() { assert_err!( Content::nft_owner_remark( - Origin::signed(UNAUTHORIZED_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(UNAUTHORIZED_MEMBER_ACCOUNT_ID), ContentActor::Member(SECOND_MEMBER_ID), video_id, msg @@ -370,7 +370,7 @@ fn successful_nft_remark_during_transfer() { .call_and_assert(Ok(())); assert_ok!(Content::nft_owner_remark( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), ContentActor::Member(DEFAULT_MEMBER_ID), 1u64, b"test".to_vec(), @@ -389,7 +389,7 @@ fn successful_channel_owner_remark_during_transfer() { .call_and_assert(Ok(())); assert_ok!(Content::channel_owner_remark( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), 1u64, b"test".to_vec(), )); @@ -411,7 +411,7 @@ fn successful_channel_agent_remark_during_transfer() { .call_and_assert(Ok(())); assert_ok!(Content::channel_agent_remark( - Origin::signed(COLLABORATOR_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(COLLABORATOR_MEMBER_ACCOUNT_ID), ContentActor::Member(COLLABORATOR_MEMBER_ID), 1u64, b"test".to_vec(), diff --git a/runtime-modules/content/src/tests/mock.rs b/runtime-modules/content/src/tests/mock.rs index 89c1503019..a9e6db6075 100644 --- a/runtime-modules/content/src/tests/mock.rs +++ b/runtime-modules/content/src/tests/mock.rs @@ -11,7 +11,7 @@ pub use membership::WeightInfo; use sp_core::{H256, U256}; use sp_runtime::{ testing::Header, - traits::{BlakeTwo256, Convert, IdentityLookup}, + traits::{BlakeTwo256, IdentityLookup}, Perbill, Permill, }; use sp_std::cell::RefCell; @@ -131,7 +131,7 @@ pub const DEFAULT_CREATOR_TOKEN_ISSUANCE: u64 = 1_000_000_000; pub const DEFAULT_CREATOR_TOKEN_SALE_UNIT_PRICE: u64 = 10; pub const DEFAULT_CREATOR_TOKEN_SALE_DURATION: u64 = 100; pub const DEFAULT_ISSUER_TRANSFER_AMOUNT: u64 = 1_000_000; -pub const DEFAULT_PATRONAGE_RATE: YearlyRate = YearlyRate(Permill::from_percent(1)); +pub const DEFAULT_PATRONAGE_RATE: YearlyRate = YearlyRate(Permill::from_percent(10)); pub const DEFAULT_REVENUE_SPLIT_DURATION: u64 = 1000; pub const DEFAULT_SPLIT_RATE: Permill = Permill::from_percent(10); @@ -170,8 +170,8 @@ impl frame_system::Config for Test { type BlockWeights = (); type BlockLength = (); type DbWeight = (); - type Origin = Origin; - type Call = Call; + type RuntimeOrigin = RuntimeOrigin; + type RuntimeCall = RuntimeCall; type Index = u64; type BlockNumber = u64; type Hash = H256; @@ -179,7 +179,7 @@ impl frame_system::Config for Test { type AccountId = U256; type Lookup = IdentityLookup; type Header = Header; - type Event = Event; + type RuntimeEvent = RuntimeEvent; type BlockHashCount = ConstU64<250>; type Version = (); type PalletInfo = PalletInfo; @@ -202,7 +202,7 @@ impl pallet_timestamp::Config for Test { impl balances::Config for Test { type Balance = u64; type DustRemoval = (); - type Event = Event; + type RuntimeEvent = RuntimeEvent; type ExistentialDeposit = ExistentialDeposit; type AccountStore = System; type MaxLocks = (); @@ -231,16 +231,11 @@ impl ContentActorAuthenticator for Test { type CuratorGroupId = u64; fn validate_member_id(member_id: &Self::MemberId) -> bool { - if Membership::membership(member_id).is_some() + Membership::membership(member_id).is_some() || MEMBER_IDS.contains(member_id) || COLABORATOR_IDS.contains(member_id) || CURATOR_IDS.contains(member_id) || LEAD_MEMBER_ID == *member_id - { - true - } else { - false - } } fn get_leader_member_id() -> Option { @@ -248,7 +243,7 @@ impl ContentActorAuthenticator for Test { } fn get_curator_member_id(curator_id: &Self::CuratorId) -> Option { - ContentWorkingGroup::get_worker_member_id(curator_id).or_else(|| match *curator_id { + ContentWorkingGroup::get_worker_member_id(curator_id).or(match *curator_id { DEFAULT_CURATOR_ID => Some(DEFAULT_CURATOR_MEMBER_ID), UNAUTHORIZED_CURATOR_ID => Some(UNAUTHORIZED_CURATOR_MEMBER_ID), _ => None, @@ -316,7 +311,7 @@ pub const DEFAULT_DISTRIBUTION_PROVIDER_ID: u64 = 12; pub const ANOTHER_DISTRIBUTION_PROVIDER_ID: u64 = 13; impl storage::Config for Test { - type Event = Event; + type RuntimeEvent = RuntimeEvent; type DataObjectId = u64; type StorageBucketId = u64; type DistributionBucketIndex = u64; @@ -380,7 +375,7 @@ impl Config for Test { type WeightInfo = (); /// The overarching event type. - type Event = Event; + type RuntimeEvent = RuntimeEvent; /// Type of identifier for Videos type VideoId = u64; @@ -485,7 +480,7 @@ impl common::council::CouncilBudgetManager for CouncilBudgetManager { pub type StorageWorkingGroupInstance = working_group::Instance2; impl working_group::Config for Test { - type Event = Event; + type RuntimeEvent = RuntimeEvent; type MaxWorkerNumberLimit = MaxWorkerNumberLimit; type StakingAccountValidator = membership::Module; type StakingHandler = staking_handler::StakingManager; @@ -500,7 +495,7 @@ impl working_group::Config for Test { pub type DistributionWorkingGroupInstance = working_group::Instance9; impl working_group::Config for Test { - type Event = Event; + type RuntimeEvent = RuntimeEvent; type MaxWorkerNumberLimit = MaxWorkerNumberLimit; type StakingAccountValidator = membership::Module; type StakingHandler = staking_handler::StakingManager; @@ -516,7 +511,7 @@ impl working_group::Config for Test { pub type ContentWorkingGroupInstance = working_group::Instance3; impl working_group::Config for Test { - type Event = Event; + type RuntimeEvent = RuntimeEvent; type MaxWorkerNumberLimit = MaxWorkerNumberLimit; type StakingAccountValidator = membership::Module; type StakingHandler = staking_handler::StakingManager; @@ -528,9 +523,9 @@ impl working_group::Config for Test { type LeaderOpeningStake = LeaderOpeningStake; } -impl common::membership::MemberOriginValidator for () { +impl common::membership::MemberOriginValidator for () { fn ensure_member_controller_account_origin( - origin: Origin, + origin: RuntimeOrigin, member_id: u64, ) -> Result { let account_id = ensure_signed(origin).unwrap(); @@ -542,8 +537,8 @@ impl common::membership::MemberOriginValidator for () { } fn is_member_controller_account(member_id: &u64, account_id: &U256) -> bool { - return Membership::is_member_controller_account(member_id, account_id) - || TestMemberships::is_member_controller_account(member_id, account_id); + Membership::is_member_controller_account(member_id, account_id) + || TestMemberships::is_member_controller_account(member_id, account_id) } } thread_local! { @@ -758,7 +753,7 @@ parameter_types! { } impl membership::Config for Test { - type Event = Event; + type RuntimeEvent = RuntimeEvent; type DefaultMembershipPrice = DefaultMembershipPrice; type ReferralCutMaximumPercent = ReferralCutMaximumPercent; type WorkingGroup = Wg; @@ -797,13 +792,15 @@ impl common::working_group::WorkingGroupBudgetHandler for Wg { impl common::working_group::WorkingGroupAuthenticator for Wg { fn ensure_worker_origin( - _origin: ::Origin, + _origin: ::RuntimeOrigin, _worker_id: &::ActorId, ) -> DispatchResult { unimplemented!() } - fn ensure_leader_origin(_origin: ::Origin) -> DispatchResult { + fn ensure_leader_origin( + _origin: ::RuntimeOrigin, + ) -> DispatchResult { unimplemented!() } @@ -882,9 +879,9 @@ impl MembershipInfoProvider for TestMemberships { } // Mock MemberOriginValidator impl. -impl MemberOriginValidator for TestMemberships { +impl MemberOriginValidator for TestMemberships { fn ensure_member_controller_account_origin( - origin: Origin, + origin: RuntimeOrigin, member_id: u64, ) -> Result { let sender = ensure_signed(origin)?; @@ -897,9 +894,9 @@ impl MemberOriginValidator for TestMemberships { fn is_member_controller_account(member_id: &u64, account_id: &U256) -> bool { Membership::is_member_controller_account(member_id, account_id) - || MEMBER_IDS.contains(&member_id) - || COLABORATOR_IDS.contains(&member_id) - || CURATOR_IDS.contains(&member_id) + || MEMBER_IDS.contains(member_id) + || COLABORATOR_IDS.contains(member_id) + || CURATOR_IDS.contains(member_id) || LEAD_MEMBER_ID == *member_id } } @@ -911,7 +908,7 @@ pub struct DistributionWG; impl common::working_group::WorkingGroupAuthenticator for StorageWG { fn ensure_worker_origin( - origin: ::Origin, + origin: ::RuntimeOrigin, _worker_id: &::ActorId, ) -> DispatchResult { let account_id = ensure_signed(origin)?; @@ -922,7 +919,9 @@ impl common::working_group::WorkingGroupAuthenticator for StorageWG { Ok(()) } - fn ensure_leader_origin(origin: ::Origin) -> DispatchResult { + fn ensure_leader_origin( + origin: ::RuntimeOrigin, + ) -> DispatchResult { let account_id = ensure_signed(origin)?; ensure!( account_id == STORAGE_WG_LEADER_ACCOUNT_ID, @@ -971,7 +970,7 @@ impl common::working_group::WorkingGroupAuthenticator for StorageWG { impl common::working_group::WorkingGroupAuthenticator for DistributionWG { fn ensure_worker_origin( - origin: ::Origin, + origin: ::RuntimeOrigin, _worker_id: &::ActorId, ) -> DispatchResult { let account_id = ensure_signed(origin)?; @@ -982,7 +981,9 @@ impl common::working_group::WorkingGroupAuthenticator for DistributionWG { Ok(()) } - fn ensure_leader_origin(origin: ::Origin) -> DispatchResult { + fn ensure_leader_origin( + origin: ::RuntimeOrigin, + ) -> DispatchResult { let account_id = ensure_signed(origin)?; ensure!( account_id == DISTRIBUTION_WG_LEADER_ACCOUNT_ID, @@ -1064,13 +1065,13 @@ parameter_types! { pub const TokenModuleId: PalletId = PalletId(*b"m__Token"); pub const MaxVestingSchedulesPerAccountPerToken: u32 = 3; pub const BlocksPerYear: u32 = 5259487; // blocks every 6s + pub const MaxOutputs: u32 = 256; } impl project_token::Config for Test { - type Event = Event; + type RuntimeEvent = RuntimeEvent; type Balance = u64; type TokenId = u64; - type BlockNumberToBalance = Block2Balance; type DataObjectStorage = storage::Module; type ModuleId = TokenModuleId; type JoyExistentialDeposit = ExistentialDeposit; @@ -1078,17 +1079,10 @@ impl project_token::Config for Test { type BlocksPerYear = BlocksPerYear; type MemberOriginValidator = TestMemberships; type MembershipInfoProvider = TestMemberships; + type MaxOutputs = MaxOutputs; type WeightInfo = (); } -pub struct Block2Balance {} - -impl Convert for Block2Balance { - fn convert(block: u64) -> u64 { - block - } -} - pub(crate) fn set_default_nft_limits() { let limit = 1000; let channel_id = 1; diff --git a/runtime-modules/content/src/tests/nft/accept_incoming_offer.rs b/runtime-modules/content/src/tests/nft/accept_incoming_offer.rs index 64afc94e3c..c5b233c645 100644 --- a/runtime-modules/content/src/tests/nft/accept_incoming_offer.rs +++ b/runtime-modules/content/src/tests/nft/accept_incoming_offer.rs @@ -17,7 +17,7 @@ fn accept_incoming_offer() { // Issue nft assert_ok!(Content::issue_nft( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), ContentActor::Member(DEFAULT_MEMBER_ID), video_id, NftIssuanceParameters::::default(), @@ -25,7 +25,7 @@ fn accept_incoming_offer() { // Offer nft assert_ok!(Content::offer_nft( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), video_id, ContentActor::Member(DEFAULT_MEMBER_ID), SECOND_MEMBER_ID, @@ -34,7 +34,7 @@ fn accept_incoming_offer() { // Accept nft offer assert_ok!(Content::accept_incoming_offer( - Origin::signed(SECOND_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(SECOND_MEMBER_ACCOUNT_ID), video_id, None )); @@ -66,7 +66,7 @@ fn accept_incoming_offer_video_does_not_exist() { // Make an attempt to accept incoming nft offer if corresponding video does not exist let accept_incoming_offer_result = Content::accept_incoming_offer( - Origin::signed(SECOND_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(SECOND_MEMBER_ACCOUNT_ID), video_id, None, ); @@ -92,7 +92,7 @@ fn accept_incoming_offer_nft_not_issued() { // Make an attempt to accept incoming nft offer if corresponding nft is not issued yet let accept_incoming_offer_result = Content::accept_incoming_offer( - Origin::signed(SECOND_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(SECOND_MEMBER_ACCOUNT_ID), video_id, None, ); @@ -115,7 +115,7 @@ fn accept_incoming_offer_auth_failed() { // Issue nft assert_ok!(Content::issue_nft( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), ContentActor::Member(DEFAULT_MEMBER_ID), video_id, NftIssuanceParameters::::default(), @@ -123,7 +123,7 @@ fn accept_incoming_offer_auth_failed() { // Offer nft assert_ok!(Content::offer_nft( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), video_id, ContentActor::Member(DEFAULT_MEMBER_ID), SECOND_MEMBER_ID, @@ -132,7 +132,7 @@ fn accept_incoming_offer_auth_failed() { // Make an attempt to accept incoming nft offer providing wrong credentials let accept_incoming_offer_result = Content::accept_incoming_offer( - Origin::signed(UNAUTHORIZED_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(UNAUTHORIZED_MEMBER_ACCOUNT_ID), video_id, None, ); @@ -158,7 +158,7 @@ fn accept_incoming_offer_no_incoming_offers() { // Issue nft assert_ok!(Content::issue_nft( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), ContentActor::Member(DEFAULT_MEMBER_ID), video_id, NftIssuanceParameters::::default(), @@ -166,7 +166,7 @@ fn accept_incoming_offer_no_incoming_offers() { // Make an attempt to accept incoming nft offer if there is no incoming transfers let accept_incoming_offer_result = Content::accept_incoming_offer( - Origin::signed(SECOND_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(SECOND_MEMBER_ACCOUNT_ID), video_id, None, ); @@ -196,7 +196,7 @@ fn accept_incoming_offer_ok_with_nft_member_owner_correctly_credited() { let platform_fee = Content::platform_fee_percentage().mul_floor(DEFAULT_NFT_PRICE); assert_ok!(Content::accept_incoming_offer( - Origin::signed(SECOND_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(SECOND_MEMBER_ACCOUNT_ID), VideoId::one(), Some(DEFAULT_NFT_PRICE) )); @@ -224,7 +224,7 @@ fn accept_incoming_offer_reward_account_ok_with_owner_channel_account_correctly_ let platform_fee = Content::platform_fee_percentage().mul_floor(DEFAULT_NFT_PRICE); assert_ok!(Content::accept_incoming_offer( - Origin::signed(SECOND_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(SECOND_MEMBER_ACCOUNT_ID), VideoId::one(), Some(DEFAULT_NFT_PRICE) )); @@ -245,7 +245,7 @@ fn accept_incoming_offer_insufficient_balance() { // Offer nft assert_ok!(Content::offer_nft( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), video_id, ContentActor::Member(DEFAULT_MEMBER_ID), SECOND_MEMBER_ID, @@ -256,7 +256,7 @@ fn accept_incoming_offer_insufficient_balance() { increase_account_balance_helper(SECOND_MEMBER_ACCOUNT_ID, ed() + DEFAULT_NFT_PRICE - 1); assert_noop!( Content::accept_incoming_offer( - Origin::signed(SECOND_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(SECOND_MEMBER_ACCOUNT_ID), video_id, Some(DEFAULT_NFT_PRICE), ), @@ -277,7 +277,7 @@ fn accept_incoming_offer_fails_during_channel_transfer() { assert_noop!( Content::accept_incoming_offer( - Origin::signed(SECOND_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(SECOND_MEMBER_ACCOUNT_ID), VideoId::one(), None ), @@ -296,7 +296,7 @@ fn accept_incoming_offer_fails_with_invalid_witness_price_provided() { assert_noop!( Content::accept_incoming_offer( - Origin::signed(SECOND_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(SECOND_MEMBER_ACCOUNT_ID), VideoId::one(), Some(DEFAULT_NFT_PRICE - 1) ), @@ -305,7 +305,7 @@ fn accept_incoming_offer_fails_with_invalid_witness_price_provided() { assert_noop!( Content::accept_incoming_offer( - Origin::signed(SECOND_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(SECOND_MEMBER_ACCOUNT_ID), VideoId::one(), None ), @@ -328,7 +328,7 @@ fn accept_incoming_offer_fails_when_trying_to_use_locked_balance() { assert_noop!( Content::accept_incoming_offer( - Origin::signed(SECOND_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(SECOND_MEMBER_ACCOUNT_ID), VideoId::one(), Some(DEFAULT_NFT_PRICE) ), diff --git a/runtime-modules/content/src/tests/nft/buy_nft.rs b/runtime-modules/content/src/tests/nft/buy_nft.rs index 525a08b916..f0409054f4 100644 --- a/runtime-modules/content/src/tests/nft/buy_nft.rs +++ b/runtime-modules/content/src/tests/nft/buy_nft.rs @@ -26,7 +26,7 @@ fn buy_nft_ok_with_proper_royalty_accounting_normal_case() { .call_and_assert(Ok(())); assert_ok!(Content::buy_nft( - Origin::signed(SECOND_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(SECOND_MEMBER_ACCOUNT_ID), VideoId::one(), SECOND_MEMBER_ID, DEFAULT_NFT_PRICE, @@ -70,7 +70,7 @@ fn buy_nft_ok_with_proper_royalty_accounting_edge_case() { .call_and_assert(Ok(())); assert_ok!(Content::buy_nft( - Origin::signed(SECOND_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(SECOND_MEMBER_ACCOUNT_ID), VideoId::one(), SECOND_MEMBER_ID, DEFAULT_NFT_PRICE, @@ -107,7 +107,7 @@ fn buy_nft() { // Issue nft assert_ok!(Content::issue_nft( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), ContentActor::Member(DEFAULT_MEMBER_ID), video_id, NftIssuanceParameters::::default(), @@ -121,7 +121,7 @@ fn buy_nft() { // Sell nft assert_ok!(Content::sell_nft( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), video_id, ContentActor::Member(DEFAULT_MEMBER_ID), DEFAULT_NFT_PRICE, @@ -129,7 +129,7 @@ fn buy_nft() { // Buy nft assert_ok!(Content::buy_nft( - Origin::signed(SECOND_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(SECOND_MEMBER_ACCOUNT_ID), video_id, SECOND_MEMBER_ID, DEFAULT_NFT_PRICE, @@ -178,7 +178,7 @@ fn buy_nft_video_does_not_exist() { // Make an attempt to buy nft which corresponding video does not exist yet let buy_nft_result = Content::buy_nft( - Origin::signed(SECOND_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(SECOND_MEMBER_ACCOUNT_ID), video_id, SECOND_MEMBER_ID, DEFAULT_NFT_PRICE, @@ -207,7 +207,7 @@ fn buy_nft_not_issued() { // Make an attempt to buy nft which is not issued yet let buy_nft_result = Content::buy_nft( - Origin::signed(SECOND_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(SECOND_MEMBER_ACCOUNT_ID), video_id, SECOND_MEMBER_ID, DEFAULT_NFT_PRICE, @@ -233,7 +233,7 @@ fn buy_nft_auth_failed() { // Issue nft assert_ok!(Content::issue_nft( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), ContentActor::Member(DEFAULT_MEMBER_ID), video_id, NftIssuanceParameters::::default(), @@ -241,7 +241,7 @@ fn buy_nft_auth_failed() { // Sell nft assert_ok!(Content::sell_nft( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), video_id, ContentActor::Member(DEFAULT_MEMBER_ID), DEFAULT_NFT_PRICE, @@ -249,7 +249,7 @@ fn buy_nft_auth_failed() { // Make an attempt to buy nft with wrong credentials let buy_nft_result = Content::buy_nft( - Origin::signed(UNAUTHORIZED_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(UNAUTHORIZED_MEMBER_ACCOUNT_ID), video_id, SECOND_MEMBER_ID, DEFAULT_NFT_PRICE, @@ -274,7 +274,7 @@ fn buy_nft_not_in_buy_now_state() { // Issue nft assert_ok!(Content::issue_nft( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), ContentActor::Member(DEFAULT_MEMBER_ID), video_id, NftIssuanceParameters::::default(), @@ -282,7 +282,7 @@ fn buy_nft_not_in_buy_now_state() { // Make an attempt to buy nft which is not in BuyNow state let buy_nft_result = Content::buy_nft( - Origin::signed(SECOND_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(SECOND_MEMBER_ACCOUNT_ID), video_id, SECOND_MEMBER_ID, DEFAULT_NFT_PRICE, @@ -302,7 +302,7 @@ fn buy_nft_insufficient_balance() { // Sell nft assert_ok!(Content::sell_nft( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), video_id, ContentActor::Member(DEFAULT_MEMBER_ID), DEFAULT_NFT_PRICE, @@ -312,7 +312,7 @@ fn buy_nft_insufficient_balance() { increase_account_balance_helper(SECOND_MEMBER_ACCOUNT_ID, ed() + DEFAULT_NFT_PRICE - 1); assert_noop!( Content::buy_nft( - Origin::signed(SECOND_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(SECOND_MEMBER_ACCOUNT_ID), video_id, SECOND_MEMBER_ID, DEFAULT_NFT_PRICE, @@ -342,7 +342,7 @@ fn buy_nft_fails_with_invalid_witness_price_provided() { // Issue nft assert_ok!(Content::issue_nft( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), ContentActor::Member(DEFAULT_MEMBER_ID), video_id, NftIssuanceParameters:: { @@ -361,7 +361,7 @@ fn buy_nft_fails_with_invalid_witness_price_provided() { // Seller races to set the price to 0 assert_ok!(Content::update_buy_now_price( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), ContentActor::Member(DEFAULT_MEMBER_ID), video_id, 0, @@ -369,7 +369,7 @@ fn buy_nft_fails_with_invalid_witness_price_provided() { // Attempt to buy NFT with witness_price protection let buy_nft_result = Content::buy_nft( - Origin::signed(SECOND_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(SECOND_MEMBER_ACCOUNT_ID), video_id, SECOND_MEMBER_ID, DEFAULT_NFT_PRICE, @@ -397,7 +397,7 @@ fn buy_now_ok_with_nft_owner_member_correctly_credited() { let platform_fee = Content::platform_fee_percentage().mul_floor(DEFAULT_NFT_PRICE); assert_ok!(Content::buy_nft( - Origin::signed(SECOND_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(SECOND_MEMBER_ACCOUNT_ID), VideoId::one(), SECOND_MEMBER_ID, DEFAULT_NFT_PRICE, @@ -424,7 +424,7 @@ fn buy_now_ok_with_nft_owner_channel_correctly_credited() { let platform_fee = Content::platform_fee_percentage().mul_floor(DEFAULT_NFT_PRICE); assert_ok!(Content::buy_nft( - Origin::signed(SECOND_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(SECOND_MEMBER_ACCOUNT_ID), video_id, SECOND_MEMBER_ID, DEFAULT_NFT_PRICE, @@ -450,7 +450,7 @@ fn buy_nft_fails_during_channel_transfer() { assert_noop!( Content::buy_nft( - Origin::signed(SECOND_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(SECOND_MEMBER_ACCOUNT_ID), VideoId::one(), SECOND_MEMBER_ID, BalanceOf::::zero(), @@ -474,7 +474,7 @@ fn buy_nft_fails_when_trying_to_use_locked_balance() { assert_noop!( Content::buy_nft( - Origin::signed(SECOND_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(SECOND_MEMBER_ACCOUNT_ID), VideoId::one(), SECOND_MEMBER_ID, DEFAULT_NFT_PRICE, diff --git a/runtime-modules/content/src/tests/nft/cancel_buy_now.rs b/runtime-modules/content/src/tests/nft/cancel_buy_now.rs index b7e89841bb..aa1626135b 100644 --- a/runtime-modules/content/src/tests/nft/cancel_buy_now.rs +++ b/runtime-modules/content/src/tests/nft/cancel_buy_now.rs @@ -18,7 +18,7 @@ fn cancel_buy_now() { // Issue nft assert_ok!(Content::issue_nft( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), ContentActor::Member(DEFAULT_MEMBER_ID), video_id, NftIssuanceParameters::::default(), @@ -28,7 +28,7 @@ fn cancel_buy_now() { // Sell nft assert_ok!(Content::sell_nft( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), video_id, ContentActor::Member(DEFAULT_MEMBER_ID), DEFAULT_NFT_PRICE, @@ -36,7 +36,7 @@ fn cancel_buy_now() { // Cancel buy now assert_ok!(Content::cancel_buy_now( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), ContentActor::Member(DEFAULT_MEMBER_ID), video_id, )); @@ -70,7 +70,7 @@ fn cancel_buy_now_video_does_not_exist() { // Make an attempt to cancel buy now which corresponding video does not exist yet let cancel_buy_now_result = Content::cancel_buy_now( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), ContentActor::Member(DEFAULT_MEMBER_ID), video_id, ); @@ -94,7 +94,7 @@ fn cancel_buy_now_not_issued() { // Make an attempt to cancel buy now for nft which is not issued yet let cancel_buy_now_result = Content::cancel_buy_now( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), ContentActor::Member(DEFAULT_MEMBER_ID), video_id, ); @@ -118,7 +118,7 @@ fn cancel_buy_now_auth_failed() { // Issue nft assert_ok!(Content::issue_nft( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), ContentActor::Member(DEFAULT_MEMBER_ID), video_id, NftIssuanceParameters::::default(), @@ -126,7 +126,7 @@ fn cancel_buy_now_auth_failed() { // Sell nft assert_ok!(Content::sell_nft( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), video_id, ContentActor::Member(DEFAULT_MEMBER_ID), DEFAULT_NFT_PRICE, @@ -134,7 +134,7 @@ fn cancel_buy_now_auth_failed() { // Make an attempt to cancel buy now with wrong credentials let cancel_buy_now_result = Content::cancel_buy_now( - Origin::signed(UNAUTHORIZED_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(UNAUTHORIZED_MEMBER_ACCOUNT_ID), ContentActor::Member(DEFAULT_MEMBER_ID), video_id, ); @@ -158,7 +158,7 @@ fn cancel_buy_now_not_authorized() { // Issue nft assert_ok!(Content::issue_nft( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), ContentActor::Member(DEFAULT_MEMBER_ID), video_id, NftIssuanceParameters::::default(), @@ -166,7 +166,7 @@ fn cancel_buy_now_not_authorized() { // Sell nft assert_ok!(Content::sell_nft( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), video_id, ContentActor::Member(DEFAULT_MEMBER_ID), DEFAULT_NFT_PRICE, @@ -174,7 +174,7 @@ fn cancel_buy_now_not_authorized() { // Make an attempt to cancel buy now if actor is not authorized let cancel_buy_now_result = Content::cancel_buy_now( - Origin::signed(SECOND_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(SECOND_MEMBER_ACCOUNT_ID), ContentActor::Member(SECOND_MEMBER_ID), video_id, ); @@ -198,7 +198,7 @@ fn cancel_buy_now_not_in_auction_state() { // Issue nft assert_ok!(Content::issue_nft( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), ContentActor::Member(DEFAULT_MEMBER_ID), video_id, NftIssuanceParameters::::default(), @@ -206,7 +206,7 @@ fn cancel_buy_now_not_in_auction_state() { // Make an attempt to cancel buy now if there is no pending one let cancel_buy_now_result = Content::cancel_buy_now( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), ContentActor::Member(DEFAULT_MEMBER_ID), video_id, ); @@ -229,7 +229,7 @@ fn cancel_buy_now_fails_during_channel_transfer() { assert_noop!( Content::cancel_buy_now( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), ContentActor::Member(DEFAULT_MEMBER_ID), 1u64, ), diff --git a/runtime-modules/content/src/tests/nft/cancel_nft_auction.rs b/runtime-modules/content/src/tests/nft/cancel_nft_auction.rs index ee8f43ac8f..89f47ab19a 100644 --- a/runtime-modules/content/src/tests/nft/cancel_nft_auction.rs +++ b/runtime-modules/content/src/tests/nft/cancel_nft_auction.rs @@ -19,7 +19,7 @@ fn cancel_nft_auction() { // Issue nft assert_ok!(Content::issue_nft( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), ContentActor::Member(DEFAULT_MEMBER_ID), video_id, NftIssuanceParameters::::default(), @@ -27,7 +27,7 @@ fn cancel_nft_auction() { // Start nft auction assert_ok!(Content::start_open_auction( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), ContentActor::Member(DEFAULT_MEMBER_ID), video_id, get_open_auction_params() @@ -35,7 +35,7 @@ fn cancel_nft_auction() { // Cancel nft auction assert_ok!(Content::cancel_open_auction( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), ContentActor::Member(DEFAULT_MEMBER_ID), video_id, )); @@ -69,7 +69,7 @@ fn cancel_nft_auction_video_does_not_exist() { // Make an attempt to cancel nft auction which corresponding video does not exist yet let cancel_nft_auction_result = Content::cancel_open_auction( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), ContentActor::Member(DEFAULT_MEMBER_ID), video_id, ); @@ -93,7 +93,7 @@ fn cancel_nft_auction_not_issued() { // Make an attempt to cancel nft auction for nft which is not issued yet let cancel_nft_auction_result = Content::cancel_open_auction( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), ContentActor::Member(DEFAULT_MEMBER_ID), video_id, ); @@ -117,7 +117,7 @@ fn cancel_nft_auction_auth_failed() { // Issue nft assert_ok!(Content::issue_nft( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), ContentActor::Member(DEFAULT_MEMBER_ID), video_id, NftIssuanceParameters::::default(), @@ -125,7 +125,7 @@ fn cancel_nft_auction_auth_failed() { // Start nft auction assert_ok!(Content::start_open_auction( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), ContentActor::Member(DEFAULT_MEMBER_ID), video_id, get_open_auction_params() @@ -133,7 +133,7 @@ fn cancel_nft_auction_auth_failed() { // Make an attempt to cancel nft auction with wrong credentials let cancel_nft_auction_result = Content::cancel_open_auction( - Origin::signed(UNAUTHORIZED_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(UNAUTHORIZED_MEMBER_ACCOUNT_ID), ContentActor::Member(DEFAULT_MEMBER_ID), video_id, ); @@ -157,7 +157,7 @@ fn cancel_nft_auction_not_authorized() { // Issue nft assert_ok!(Content::issue_nft( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), ContentActor::Member(DEFAULT_MEMBER_ID), video_id, NftIssuanceParameters::::default(), @@ -165,7 +165,7 @@ fn cancel_nft_auction_not_authorized() { // Start nft auction assert_ok!(Content::start_open_auction( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), ContentActor::Member(DEFAULT_MEMBER_ID), video_id, get_open_auction_params() @@ -173,7 +173,7 @@ fn cancel_nft_auction_not_authorized() { // Make an attempt to cancel nft auction if actor is not authorized let cancel_nft_auction_result = Content::cancel_open_auction( - Origin::signed(SECOND_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(SECOND_MEMBER_ACCOUNT_ID), ContentActor::Member(SECOND_MEMBER_ID), video_id, ); @@ -197,7 +197,7 @@ fn cancel_nft_auction_not_in_auction_state() { // Issue nft assert_ok!(Content::issue_nft( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), ContentActor::Member(DEFAULT_MEMBER_ID), video_id, NftIssuanceParameters::::default(), @@ -205,7 +205,7 @@ fn cancel_nft_auction_not_in_auction_state() { // Make an attempt to cancel nft auction if there is no pending one let cancel_nft_auction_result = Content::cancel_open_auction( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), ContentActor::Member(DEFAULT_MEMBER_ID), video_id, ); @@ -232,7 +232,7 @@ fn cancel_nft_auction_english_auction_with_bids() { // Issue nft assert_ok!(Content::issue_nft( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), ContentActor::Member(DEFAULT_MEMBER_ID), video_id, NftIssuanceParameters::::default(), @@ -250,7 +250,7 @@ fn cancel_nft_auction_english_auction_with_bids() { // Start nft auction assert_ok!(Content::start_english_auction( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), ContentActor::Member(DEFAULT_MEMBER_ID), video_id, auction_params @@ -263,7 +263,7 @@ fn cancel_nft_auction_english_auction_with_bids() { // Make an english auction bid assert_ok!(Content::make_english_auction_bid( - Origin::signed(SECOND_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(SECOND_MEMBER_ACCOUNT_ID), SECOND_MEMBER_ID, video_id, bid, @@ -271,7 +271,7 @@ fn cancel_nft_auction_english_auction_with_bids() { // Make an attempt to cancel an english auction which already contains a bid let cancel_nft_auction_result = Content::cancel_english_auction( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), ContentActor::Member(DEFAULT_MEMBER_ID), video_id, ); @@ -297,7 +297,7 @@ fn cancel_open_auction_fails_during_channel_transfer() { assert_noop!( Content::cancel_open_auction( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), ContentActor::Member(DEFAULT_MEMBER_ID), 1u64, ), @@ -319,7 +319,7 @@ fn cancel_english_auction_fails_during_channel_transfer() { assert_noop!( Content::cancel_english_auction( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), ContentActor::Member(DEFAULT_MEMBER_ID), 1u64, ), diff --git a/runtime-modules/content/src/tests/nft/cancel_offer.rs b/runtime-modules/content/src/tests/nft/cancel_offer.rs index d5a2f2184e..ee8232f12a 100644 --- a/runtime-modules/content/src/tests/nft/cancel_offer.rs +++ b/runtime-modules/content/src/tests/nft/cancel_offer.rs @@ -18,7 +18,7 @@ fn cancel_offer() { // Issue nft assert_ok!(Content::issue_nft( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), ContentActor::Member(DEFAULT_MEMBER_ID), video_id, NftIssuanceParameters::::default(), @@ -26,7 +26,7 @@ fn cancel_offer() { // Offer nft assert_ok!(Content::offer_nft( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), video_id, ContentActor::Member(DEFAULT_MEMBER_ID), SECOND_MEMBER_ID, @@ -35,7 +35,7 @@ fn cancel_offer() { // Cancel offer assert_ok!(Content::cancel_offer( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), ContentActor::Member(DEFAULT_MEMBER_ID), video_id, )); @@ -69,7 +69,7 @@ fn cancel_offer_video_does_not_exist() { // Make an attempt to cancel offer which corresponding video does not exist yet let cancel_offer_result = Content::cancel_offer( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), ContentActor::Member(DEFAULT_MEMBER_ID), video_id, ); @@ -93,7 +93,7 @@ fn cancel_offer_not_issued() { // Make an attempt to cancel offer for nft which is not issued yet let cancel_offer_result = Content::cancel_offer( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), ContentActor::Member(DEFAULT_MEMBER_ID), video_id, ); @@ -117,7 +117,7 @@ fn cancel_offer_auth_failed() { // Issue nft assert_ok!(Content::issue_nft( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), ContentActor::Member(DEFAULT_MEMBER_ID), video_id, NftIssuanceParameters::::default(), @@ -125,7 +125,7 @@ fn cancel_offer_auth_failed() { // Offer nft assert_ok!(Content::offer_nft( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), video_id, ContentActor::Member(DEFAULT_MEMBER_ID), SECOND_MEMBER_ID, @@ -134,7 +134,7 @@ fn cancel_offer_auth_failed() { // Make an attempt to cancel offer with wrong credentials let cancel_offer_result = Content::cancel_offer( - Origin::signed(UNAUTHORIZED_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(UNAUTHORIZED_MEMBER_ACCOUNT_ID), ContentActor::Member(DEFAULT_MEMBER_ID), video_id, ); @@ -158,7 +158,7 @@ fn cancel_offer_not_authorized() { // Issue nft assert_ok!(Content::issue_nft( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), ContentActor::Member(DEFAULT_MEMBER_ID), video_id, NftIssuanceParameters::::default(), @@ -166,7 +166,7 @@ fn cancel_offer_not_authorized() { // Offer nft assert_ok!(Content::offer_nft( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), video_id, ContentActor::Member(DEFAULT_MEMBER_ID), SECOND_MEMBER_ID, @@ -175,7 +175,7 @@ fn cancel_offer_not_authorized() { // Make an attempt to cancel offer if actor is not authorized let cancel_offer_result = Content::cancel_offer( - Origin::signed(SECOND_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(SECOND_MEMBER_ACCOUNT_ID), ContentActor::Member(SECOND_MEMBER_ID), video_id, ); @@ -199,7 +199,7 @@ fn cancel_offer_not_in_auction_state() { // Issue nft assert_ok!(Content::issue_nft( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), ContentActor::Member(DEFAULT_MEMBER_ID), video_id, NftIssuanceParameters::::default(), @@ -207,7 +207,7 @@ fn cancel_offer_not_in_auction_state() { // Make an attempt to cancel offer if there is no pending one let cancel_offer_result = Content::cancel_offer( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), ContentActor::Member(DEFAULT_MEMBER_ID), video_id, ); @@ -230,7 +230,7 @@ fn cancel_nft_offer_fails_during_channel_transfer() { assert_noop!( Content::cancel_offer( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), ContentActor::Member(DEFAULT_MEMBER_ID), 1u64, ), diff --git a/runtime-modules/content/src/tests/nft/cancel_open_auction_bid.rs b/runtime-modules/content/src/tests/nft/cancel_open_auction_bid.rs index e5e7013fe5..abce3488cf 100644 --- a/runtime-modules/content/src/tests/nft/cancel_open_auction_bid.rs +++ b/runtime-modules/content/src/tests/nft/cancel_open_auction_bid.rs @@ -13,7 +13,7 @@ fn setup_open_auction_scenario() { // Issue nft assert_ok!(Content::issue_nft( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), ContentActor::Member(DEFAULT_MEMBER_ID), video_id, NftIssuanceParameters::::default(), @@ -29,7 +29,7 @@ fn setup_open_auction_scenario() { // Start nft auction assert_ok!(Content::start_open_auction( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), ContentActor::Member(DEFAULT_MEMBER_ID), video_id, auction_params, @@ -47,7 +47,7 @@ fn setup_open_auction_scenario_with_bid() { // Make nft auction bid assert_ok!(Content::make_open_auction_bid( - Origin::signed(SECOND_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(SECOND_MEMBER_ACCOUNT_ID), SECOND_MEMBER_ID, video_id, bid, @@ -76,7 +76,7 @@ fn cancel_open_auction_bid() { // Cancel auction bid assert_ok!(Content::cancel_open_auction_bid( - Origin::signed(SECOND_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(SECOND_MEMBER_ACCOUNT_ID), SECOND_MEMBER_ID, video_id, )); @@ -107,7 +107,7 @@ fn cancel_open_auction_bid_lock_duration_did_not_expire() { // Make an attempt to cancel open auction bid if lock duration did not expire let cancel_open_auction_bid_result = Content::cancel_open_auction_bid( - Origin::signed(SECOND_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(SECOND_MEMBER_ACCOUNT_ID), SECOND_MEMBER_ID, video_id, ); @@ -135,7 +135,7 @@ fn cancel_open_auction_bid_auth_failed() { // Make an attempt to cancel open auction bid with wrong credentials let cancel_open_auction_bid_result = Content::cancel_open_auction_bid( - Origin::signed(UNAUTHORIZED_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(UNAUTHORIZED_MEMBER_ACCOUNT_ID), SECOND_MEMBER_ID, video_id, ); @@ -158,7 +158,7 @@ fn cancel_open_auction_bid_video_does_not_exist() { // Make an attempt to cancel open auction bid which corresponding video does not exist let cancel_open_auction_bid_result = Content::cancel_open_auction_bid( - Origin::signed(SECOND_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(SECOND_MEMBER_ACCOUNT_ID), SECOND_MEMBER_ID, video_id, ); @@ -185,7 +185,7 @@ fn cancel_open_auction_bid_nft_is_not_issued() { // Make an attempt to cancel open auction bid for nft which is not issued yet let cancel_open_auction_bid_result = Content::cancel_open_auction_bid( - Origin::signed(SECOND_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(SECOND_MEMBER_ACCOUNT_ID), SECOND_MEMBER_ID, video_id, ); @@ -213,7 +213,7 @@ fn cancel_open_auction_bid_last_bid_does_not_exist() { // Make an attempt to cancel open auction bid if it does not exist let cancel_open_auction_bid_result = Content::cancel_open_auction_bid( - Origin::signed(SECOND_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(SECOND_MEMBER_ACCOUNT_ID), SECOND_MEMBER_ID, video_id, ); @@ -241,7 +241,7 @@ fn cancel_open_auction_fails_for_with_non_bidder() { // Make an attempt to cancel open auction bid if actor is not a last bidder let cancel_open_auction_bid_result = Content::cancel_open_auction_bid( - Origin::signed(UNAUTHORIZED_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(UNAUTHORIZED_MEMBER_ACCOUNT_ID), UNAUTHORIZED_MEMBER_ID, video_id, ); @@ -267,14 +267,14 @@ fn cancel_open_auction_bid_ok_for_expired_auction() { let bid = Content::min_starting_price(); assert_ok!(Content::make_open_auction_bid( - Origin::signed(THIRD_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(THIRD_MEMBER_ACCOUNT_ID), THIRD_MEMBER_ID, video_id, bid, )); assert_ok!(Content::pick_open_auction_winner( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), ContentActor::Member(DEFAULT_MEMBER_ID), video_id, THIRD_MEMBER_ID, @@ -283,7 +283,7 @@ fn cancel_open_auction_bid_ok_for_expired_auction() { // Attempt OK: auction closed assert_ok!(Content::cancel_open_auction_bid( - Origin::signed(SECOND_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(SECOND_MEMBER_ACCOUNT_ID), SECOND_MEMBER_ID, video_id, )); @@ -306,7 +306,7 @@ fn cancel_open_auction_bid_fails_during_transfer() { assert_noop!( Content::cancel_open_auction_bid( - Origin::signed(SECOND_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(SECOND_MEMBER_ACCOUNT_ID), SECOND_MEMBER_ID, VideoId::one(), ), diff --git a/runtime-modules/content/src/tests/nft/claim_won_english_auction.rs b/runtime-modules/content/src/tests/nft/claim_won_english_auction.rs index aeeed4e891..981fb19f13 100644 --- a/runtime-modules/content/src/tests/nft/claim_won_english_auction.rs +++ b/runtime-modules/content/src/tests/nft/claim_won_english_auction.rs @@ -14,7 +14,7 @@ fn settle_english_auction() { // Issue nft assert_ok!(Content::issue_nft( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), ContentActor::Member(DEFAULT_MEMBER_ID), video_id, NftIssuanceParameters::::default(), @@ -32,7 +32,7 @@ fn settle_english_auction() { // Start nft auction assert_ok!(Content::start_english_auction( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), ContentActor::Member(DEFAULT_MEMBER_ID), video_id, auction_params, @@ -48,7 +48,7 @@ fn settle_english_auction() { // Make nft auction bid assert_ok!(Content::make_english_auction_bid( - Origin::signed(SECOND_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(SECOND_MEMBER_ACCOUNT_ID), SECOND_MEMBER_ID, video_id, bid, @@ -62,7 +62,7 @@ fn settle_english_auction() { // Claim won english auction assert_ok!(Content::settle_english_auction( - Origin::signed(SECOND_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(SECOND_MEMBER_ACCOUNT_ID), video_id, )); @@ -106,7 +106,7 @@ fn settle_english_auction_cannot_be_completed() { // Issue nft assert_ok!(Content::issue_nft( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), ContentActor::Member(DEFAULT_MEMBER_ID), video_id, NftIssuanceParameters::::default(), @@ -124,7 +124,7 @@ fn settle_english_auction_cannot_be_completed() { // Start nft auction assert_ok!(Content::start_english_auction( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), ContentActor::Member(DEFAULT_MEMBER_ID), video_id, auction_params, @@ -137,15 +137,17 @@ fn settle_english_auction_cannot_be_completed() { // Make nft auction bid assert_ok!(Content::make_english_auction_bid( - Origin::signed(SECOND_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(SECOND_MEMBER_ACCOUNT_ID), SECOND_MEMBER_ID, video_id, bid, )); // Make an attempt to claim won english auction if it did not expire yet - let settle_english_auction_result = - Content::settle_english_auction(Origin::signed(SECOND_MEMBER_ACCOUNT_ID), video_id); + let settle_english_auction_result = Content::settle_english_auction( + RuntimeOrigin::signed(SECOND_MEMBER_ACCOUNT_ID), + video_id, + ); // Failure checked assert_err!( @@ -164,8 +166,10 @@ fn settle_english_auction_video_does_not_exist() { let video_id = NextVideoId::::get(); // Make an attempt to claim won english auction which corresponding video does not exist - let settle_english_auction_result = - Content::settle_english_auction(Origin::signed(SECOND_MEMBER_ACCOUNT_ID), video_id); + let settle_english_auction_result = Content::settle_english_auction( + RuntimeOrigin::signed(SECOND_MEMBER_ACCOUNT_ID), + video_id, + ); // Failure checked assert_err!( @@ -188,8 +192,10 @@ fn settle_english_auction_nft_is_not_issued() { create_default_member_owned_channel_with_video(); // Make an attempt to claim won english auction for nft which is not issued yet - let settle_english_auction_result = - Content::settle_english_auction(Origin::signed(SECOND_MEMBER_ACCOUNT_ID), video_id); + let settle_english_auction_result = Content::settle_english_auction( + RuntimeOrigin::signed(SECOND_MEMBER_ACCOUNT_ID), + video_id, + ); // Failure checked assert_err!( @@ -213,15 +219,17 @@ fn settle_english_auction_not_in_auction_state() { // Issue nft assert_ok!(Content::issue_nft( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), ContentActor::Member(DEFAULT_MEMBER_ID), video_id, NftIssuanceParameters::::default(), )); // Make an attempt to claim won english auction for nft which is not in auction state - let settle_english_auction_result = - Content::settle_english_auction(Origin::signed(SECOND_MEMBER_ACCOUNT_ID), video_id); + let settle_english_auction_result = Content::settle_english_auction( + RuntimeOrigin::signed(SECOND_MEMBER_ACCOUNT_ID), + video_id, + ); // Failure checked assert_err!( @@ -245,7 +253,7 @@ fn settle_english_auction_is_not_english_auction_type() { // Issue nft assert_ok!(Content::issue_nft( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), ContentActor::Member(DEFAULT_MEMBER_ID), video_id, NftIssuanceParameters::::default(), @@ -263,7 +271,7 @@ fn settle_english_auction_is_not_english_auction_type() { // Start nft auction assert_ok!(Content::start_open_auction( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), ContentActor::Member(DEFAULT_MEMBER_ID), video_id, auction_params, @@ -276,15 +284,17 @@ fn settle_english_auction_is_not_english_auction_type() { // Make nft auction bid assert_ok!(Content::make_open_auction_bid( - Origin::signed(SECOND_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(SECOND_MEMBER_ACCOUNT_ID), SECOND_MEMBER_ID, video_id, bid, )); // Make an attempt to claim won english auction for nft which is not in english auction state - let settle_english_auction_result = - Content::settle_english_auction(Origin::signed(SECOND_MEMBER_ACCOUNT_ID), video_id); + let settle_english_auction_result = Content::settle_english_auction( + RuntimeOrigin::signed(SECOND_MEMBER_ACCOUNT_ID), + video_id, + ); // Failure checked assert_err!( @@ -308,7 +318,7 @@ fn settle_english_auction_last_bid_does_not_exist() { // Issue nft assert_ok!(Content::issue_nft( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), ContentActor::Member(DEFAULT_MEMBER_ID), video_id, NftIssuanceParameters::::default(), @@ -326,7 +336,7 @@ fn settle_english_auction_last_bid_does_not_exist() { // Start nft auction assert_ok!(Content::start_english_auction( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), ContentActor::Member(DEFAULT_MEMBER_ID), video_id, auction_params, @@ -336,8 +346,10 @@ fn settle_english_auction_last_bid_does_not_exist() { run_to_block(Content::max_auction_duration() + 1); // Make an attempt to claim won english auction if last bid does not exist - let settle_english_auction_result = - Content::settle_english_auction(Origin::signed(SECOND_MEMBER_ACCOUNT_ID), video_id); + let settle_english_auction_result = Content::settle_english_auction( + RuntimeOrigin::signed(SECOND_MEMBER_ACCOUNT_ID), + video_id, + ); // Failure checked assert_err!( @@ -356,7 +368,7 @@ fn setup_english_auction_scenario() { // Issue nft assert_ok!(Content::issue_nft( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), ContentActor::Member(DEFAULT_MEMBER_ID), video_id, NftIssuanceParameters::::default(), @@ -374,7 +386,7 @@ fn setup_english_auction_scenario() { // Start nft auction assert_ok!(Content::start_english_auction( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), ContentActor::Member(DEFAULT_MEMBER_ID), video_id, auction_params, @@ -396,7 +408,7 @@ fn settle_english_auction_ok_with_nft_claimed_by_non_winner() { // Make nft auction bid assert_ok!(Content::make_english_auction_bid( - Origin::signed(SECOND_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(SECOND_MEMBER_ACCOUNT_ID), SECOND_MEMBER_ID, video_id, bid, @@ -404,7 +416,7 @@ fn settle_english_auction_ok_with_nft_claimed_by_non_winner() { // Make nft auction bid assert_ok!(Content::make_english_auction_bid( - Origin::signed(COLLABORATOR_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(COLLABORATOR_MEMBER_ACCOUNT_ID), COLLABORATOR_MEMBER_ID, video_id, bid + Content::min_bid_step(), @@ -414,8 +426,10 @@ fn settle_english_auction_ok_with_nft_claimed_by_non_winner() { run_to_block(Content::max_auction_duration() + 1); // Make an attempt to claim won english auction if last bid does not exist - let settle_english_auction_result = - Content::settle_english_auction(Origin::signed(SECOND_MEMBER_ACCOUNT_ID), video_id); + let settle_english_auction_result = Content::settle_english_auction( + RuntimeOrigin::signed(SECOND_MEMBER_ACCOUNT_ID), + video_id, + ); // Failure checked assert_ok!(settle_english_auction_result); @@ -449,7 +463,7 @@ fn settle_english_auction_ok_with_balances_check() { // Make nft auction bid assert_ok!(Content::make_english_auction_bid( - Origin::signed(SECOND_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(SECOND_MEMBER_ACCOUNT_ID), SECOND_MEMBER_ID, video_id, bid, @@ -472,7 +486,7 @@ fn settle_english_auction_ok_with_balances_check() { // Make nft auction bid let next_bid = bid + Content::min_bid_step(); assert_ok!(Content::make_english_auction_bid( - Origin::signed(COLLABORATOR_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(COLLABORATOR_MEMBER_ACCOUNT_ID), COLLABORATOR_MEMBER_ID, video_id, next_bid, @@ -496,8 +510,10 @@ fn settle_english_auction_ok_with_balances_check() { run_to_block(Content::max_auction_duration() + 1); // Settle the auciton. - let settle_english_auction_result = - Content::settle_english_auction(Origin::signed(SECOND_MEMBER_ACCOUNT_ID), video_id); + let settle_english_auction_result = Content::settle_english_auction( + RuntimeOrigin::signed(SECOND_MEMBER_ACCOUNT_ID), + video_id, + ); // Failure checked assert_ok!(settle_english_auction_result); @@ -539,7 +555,7 @@ fn settle_english_auction_ok_with_nft_claimed_by_non_winner_and_winner_free_bala // Make nft auction bid assert_ok!(Content::make_english_auction_bid( - Origin::signed(SECOND_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(SECOND_MEMBER_ACCOUNT_ID), SECOND_MEMBER_ID, video_id, bid, @@ -548,7 +564,7 @@ fn settle_english_auction_ok_with_nft_claimed_by_non_winner_and_winner_free_bala // Make nft auction bid let new_bid = bid + Content::min_bid_step(); assert_ok!(Content::make_english_auction_bid( - Origin::signed(COLLABORATOR_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(COLLABORATOR_MEMBER_ACCOUNT_ID), COLLABORATOR_MEMBER_ID, video_id, new_bid, @@ -559,7 +575,7 @@ fn settle_english_auction_ok_with_nft_claimed_by_non_winner_and_winner_free_bala // Make an attempt to claim won english auction if last bid does not exist assert_ok!(Content::settle_english_auction( - Origin::signed(SECOND_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(SECOND_MEMBER_ACCOUNT_ID), video_id, )); @@ -582,7 +598,7 @@ fn settle_english_auction_fails_during_transfer() { ed() + Content::min_starting_price(), ); assert_ok!(Content::make_english_auction_bid( - Origin::signed(SECOND_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(SECOND_MEMBER_ACCOUNT_ID), SECOND_MEMBER_ID, VideoId::one(), Content::min_starting_price(), @@ -595,7 +611,7 @@ fn settle_english_auction_fails_during_transfer() { assert_noop!( Content::settle_english_auction( - Origin::signed(SECOND_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(SECOND_MEMBER_ACCOUNT_ID), VideoId::one() ), Error::::InvalidChannelTransferStatus, diff --git a/runtime-modules/content/src/tests/nft/destroy_nft.rs b/runtime-modules/content/src/tests/nft/destroy_nft.rs index af34d649a7..8ef236adfc 100644 --- a/runtime-modules/content/src/tests/nft/destroy_nft.rs +++ b/runtime-modules/content/src/tests/nft/destroy_nft.rs @@ -18,7 +18,7 @@ fn destroy_nft() { // Issue nft assert_ok!(Content::issue_nft( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), ContentActor::Member(DEFAULT_MEMBER_ID), video_id, NftIssuanceParameters::::default(), @@ -26,7 +26,7 @@ fn destroy_nft() { // Sell nft assert_ok!(Content::destroy_nft( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), ContentActor::Member(DEFAULT_MEMBER_ID), video_id )); @@ -54,7 +54,7 @@ fn destroy_nft_video_does_not_exist() { // Make an attempt to destroy nft which corresponding video does not exist let result = Content::destroy_nft( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), ContentActor::Member(DEFAULT_MEMBER_ID), video_id, ); @@ -78,7 +78,7 @@ fn destroy_nft_not_issued() { // Make an attempt to destrot nft which is not issued yet let result = Content::destroy_nft( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), ContentActor::Member(DEFAULT_MEMBER_ID), video_id, ); @@ -102,7 +102,7 @@ fn destroy_nft_auth_failed() { // Issue nft assert_ok!(Content::issue_nft( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), ContentActor::Member(DEFAULT_MEMBER_ID), video_id, NftIssuanceParameters::::default(), @@ -110,7 +110,7 @@ fn destroy_nft_auth_failed() { // Make an attempt to destroy nft with wrong credentials let result = Content::destroy_nft( - Origin::signed(UNAUTHORIZED_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(UNAUTHORIZED_MEMBER_ACCOUNT_ID), ContentActor::Member(DEFAULT_MEMBER_ID), video_id, ); @@ -134,7 +134,7 @@ fn destroy_nft_not_authorized() { // Issue nft assert_ok!(Content::issue_nft( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), ContentActor::Member(DEFAULT_MEMBER_ID), video_id, NftIssuanceParameters::::default(), @@ -142,7 +142,7 @@ fn destroy_nft_not_authorized() { // Make an attempt to destroy nft if actor is not authorized let result = Content::destroy_nft( - Origin::signed(UNAUTHORIZED_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(UNAUTHORIZED_MEMBER_ACCOUNT_ID), ContentActor::Member(UNAUTHORIZED_MEMBER_ID), video_id, ); @@ -166,7 +166,7 @@ fn destroy_nft_transactional_status_is_not_idle() { // Issue nft assert_ok!(Content::issue_nft( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), ContentActor::Member(DEFAULT_MEMBER_ID), video_id, NftIssuanceParameters::::default(), @@ -174,7 +174,7 @@ fn destroy_nft_transactional_status_is_not_idle() { // Offer nft assert_ok!(Content::offer_nft( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), video_id, ContentActor::Member(DEFAULT_MEMBER_ID), SECOND_MEMBER_ID, @@ -183,7 +183,7 @@ fn destroy_nft_transactional_status_is_not_idle() { // Make an attempt to destroy nft when it is already offered let result = Content::destroy_nft( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), ContentActor::Member(DEFAULT_MEMBER_ID), video_id, ); @@ -205,7 +205,7 @@ fn destroy_nft_fails_during_channel_transfer() { assert_noop!( Content::destroy_nft( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), ContentActor::Member(DEFAULT_MEMBER_ID), 1u64, ), diff --git a/runtime-modules/content/src/tests/nft/issue_nft.rs b/runtime-modules/content/src/tests/nft/issue_nft.rs index 9b2020a270..5616d31e9c 100644 --- a/runtime-modules/content/src/tests/nft/issue_nft.rs +++ b/runtime-modules/content/src/tests/nft/issue_nft.rs @@ -21,7 +21,7 @@ fn issue_nft() { // Issue nft assert_ok!(Content::issue_nft( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), ContentActor::Member(DEFAULT_MEMBER_ID), video_id, NftIssuanceParameters::::default(), @@ -55,7 +55,7 @@ fn nft_is_issued_with_open_auction_status_successfully() { // Issue nft assert_ok!(Content::issue_nft( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), ContentActor::Member(DEFAULT_MEMBER_ID), video_id, NftIssuanceParameters:: { @@ -90,7 +90,7 @@ fn issue_nft_video_does_not_exist() { // Make an attempt to issue nft for non existent video let issue_nft_result = Content::issue_nft( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), ContentActor::Member(DEFAULT_MEMBER_ID), video_id, NftIssuanceParameters::::default(), @@ -115,7 +115,7 @@ fn issue_nft_already_issued() { // Issue nft assert_ok!(Content::issue_nft( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), ContentActor::Member(DEFAULT_MEMBER_ID), video_id, NftIssuanceParameters::::default(), @@ -123,7 +123,7 @@ fn issue_nft_already_issued() { // Make an attempt to issue nft once again for the same video let issue_nft_result = Content::issue_nft( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), ContentActor::Member(DEFAULT_MEMBER_ID), video_id, NftIssuanceParameters::::default(), @@ -148,7 +148,7 @@ fn issue_nft_auth_failed() { // Make an attempt to issue nft with wrong credentials let issue_nft_result = Content::issue_nft( - Origin::signed(UNAUTHORIZED_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(UNAUTHORIZED_MEMBER_ACCOUNT_ID), ContentActor::Member(DEFAULT_MEMBER_ID), video_id, NftIssuanceParameters::::default(), @@ -173,7 +173,7 @@ fn issue_nft_actor_not_authorized() { // Make an attempt to issue nft if actor is not authorized let issue_nft_result = Content::issue_nft( - Origin::signed(UNAUTHORIZED_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(UNAUTHORIZED_MEMBER_ACCOUNT_ID), ContentActor::Member(UNAUTHORIZED_MEMBER_ID), video_id, NftIssuanceParameters::::default(), @@ -198,7 +198,7 @@ fn issue_nft_royalty_bounds_violated() { // Make an attempt to issue nft with wrong credentials let issue_nft_result = Content::issue_nft( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), ContentActor::Member(DEFAULT_MEMBER_ID), video_id, NftIssuanceParameters:: { @@ -212,7 +212,7 @@ fn issue_nft_royalty_bounds_violated() { // Make an attempt to issue nft with wrong credentials let issue_nft_result = Content::issue_nft( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), ContentActor::Member(DEFAULT_MEMBER_ID), video_id, NftIssuanceParameters:: { @@ -248,7 +248,7 @@ fn issue_nft_fails_with_invalid_open_auction_parameters() { // Make an attempt to issue nft with wrong credentials let issue_nft_result = Content::issue_nft( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), ContentActor::Member(DEFAULT_MEMBER_ID), video_id, NftIssuanceParameters:: { @@ -323,7 +323,7 @@ fn nft_test_helper_for_exceeded_limit(nft_limit_id: NftLimitId, expected_er // Issue nft assert_eq!( Content::issue_nft( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), ContentActor::Member(DEFAULT_MEMBER_ID), video_id, NftIssuanceParameters::::default(), @@ -416,12 +416,12 @@ fn test_helper_for_nft_limit_works_as_expected( Content::set_nft_limit(nft_limit_id, 1); if disable_limits { - assert_ok!(Content::toggle_nft_limits(Origin::root(), false)); + assert_ok!(Content::toggle_nft_limits(RuntimeOrigin::root(), false)); } // Issue nft 1 assert_ok!(Content::issue_nft( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), ContentActor::Member(DEFAULT_MEMBER_ID), video_id, NftIssuanceParameters::::default(), @@ -441,7 +441,7 @@ fn test_helper_for_nft_limit_works_as_expected( // Issue nft 2 assert_eq!( Content::issue_nft( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), ContentActor::Member(DEFAULT_MEMBER_ID), video_id, NftIssuanceParameters::::default(), @@ -457,7 +457,7 @@ fn test_helper_for_nft_limit_works_as_expected( if !disable_limits { // Issue nft 3 assert_ok!(Content::issue_nft( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), ContentActor::Member(DEFAULT_MEMBER_ID), video_id, NftIssuanceParameters::::default(), @@ -496,7 +496,7 @@ fn nft_counters_increment_works_as_expected() { // Issue nft 1 assert_ok!(Content::issue_nft( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), ContentActor::Member(DEFAULT_MEMBER_ID), video_id, NftIssuanceParameters::::default(), @@ -523,7 +523,7 @@ fn nft_counters_increment_works_as_expected() { let daily_period_in_blocks = nft_limit_by_id(NftLimitId::GlobalDaily).block_number_period; run_to_block(daily_period_in_blocks); assert_ok!(Content::issue_nft( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), ContentActor::Member(DEFAULT_MEMBER_ID), video_id, NftIssuanceParameters::::default(), @@ -548,7 +548,7 @@ fn issue_nft_fails_with_pending_channel_transfer() { assert_noop!( Content::issue_nft( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), ContentActor::Member(DEFAULT_MEMBER_ID), 1u64, NftIssuanceParameters::::default(), diff --git a/runtime-modules/content/src/tests/nft/make_bid.rs b/runtime-modules/content/src/tests/nft/make_bid.rs index b799a5e797..f2b71c9bf4 100644 --- a/runtime-modules/content/src/tests/nft/make_bid.rs +++ b/runtime-modules/content/src/tests/nft/make_bid.rs @@ -19,7 +19,7 @@ fn setup_open_auction_scenario() { // Issue nft assert_ok!(Content::issue_nft( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), ContentActor::Member(DEFAULT_MEMBER_ID), video_id, NftIssuanceParameters::::default(), @@ -35,7 +35,7 @@ fn setup_open_auction_scenario() { // Start nft auction assert_ok!(Content::start_open_auction( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), ContentActor::Member(DEFAULT_MEMBER_ID), video_id, auction_params, @@ -51,7 +51,7 @@ fn setup_english_auction_scenario() { // Issue nft assert_ok!(Content::issue_nft( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), ContentActor::Member(DEFAULT_MEMBER_ID), video_id, NftIssuanceParameters::::default(), @@ -69,7 +69,7 @@ fn setup_english_auction_scenario() { // Start nft auction assert_ok!(Content::start_english_auction( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), ContentActor::Member(DEFAULT_MEMBER_ID), video_id, auction_params, @@ -82,7 +82,7 @@ fn setup_open_auction_scenario_with_bid(amount: u64) { // Make an attempt to make auction bid if bid step constraint violated assert_ok!(Content::make_open_auction_bid( - Origin::signed(SECOND_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(SECOND_MEMBER_ACCOUNT_ID), SECOND_MEMBER_ID, video_id, amount, @@ -113,7 +113,7 @@ fn make_bid() { // Issue nft assert_ok!(Content::issue_nft( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), ContentActor::Member(DEFAULT_MEMBER_ID), video_id, NftIssuanceParameters::::default(), @@ -123,7 +123,7 @@ fn make_bid() { // Start nft auction assert_ok!(Content::start_open_auction( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), ContentActor::Member(DEFAULT_MEMBER_ID), video_id, auction_params, @@ -141,7 +141,7 @@ fn make_bid() { // Make nft auction bid assert_ok!(Content::make_open_auction_bid( - Origin::signed(SECOND_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(SECOND_MEMBER_ACCOUNT_ID), SECOND_MEMBER_ID, video_id, bid, @@ -187,7 +187,7 @@ fn make_bid_auth_failed() { // Issue nft assert_ok!(Content::issue_nft( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), ContentActor::Member(DEFAULT_MEMBER_ID), video_id, NftIssuanceParameters::::default(), @@ -197,7 +197,7 @@ fn make_bid_auth_failed() { // Start nft auction assert_ok!(Content::start_open_auction( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), ContentActor::Member(DEFAULT_MEMBER_ID), video_id, auction_params, @@ -210,7 +210,7 @@ fn make_bid_auth_failed() { // Make an attempt to make auction bid providing wrong credentials let make_bid_result = Content::make_open_auction_bid( - Origin::signed(UNAUTHORIZED_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(UNAUTHORIZED_MEMBER_ACCOUNT_ID), DEFAULT_MEMBER_ID, video_id, bid, @@ -231,7 +231,7 @@ fn make_bid_insufficient_balance() { // Start nft auction assert_ok!(Content::start_open_auction( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), ContentActor::Member(DEFAULT_MEMBER_ID), video_id, auction_params, @@ -243,7 +243,7 @@ fn make_bid_insufficient_balance() { increase_account_balance_helper(SECOND_MEMBER_ACCOUNT_ID, ed() + bid - 1); assert_noop!( Content::make_open_auction_bid( - Origin::signed(SECOND_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(SECOND_MEMBER_ACCOUNT_ID), SECOND_MEMBER_ID, video_id, bid, @@ -263,7 +263,7 @@ fn make_bid_locked_balance() { // Start nft auction assert_ok!(Content::start_open_auction( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), ContentActor::Member(DEFAULT_MEMBER_ID), video_id, auction_params, @@ -277,7 +277,7 @@ fn make_bid_locked_balance() { assert_noop!( Content::make_open_auction_bid( - Origin::signed(SECOND_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(SECOND_MEMBER_ACCOUNT_ID), SECOND_MEMBER_ID, video_id, bid, @@ -302,7 +302,7 @@ fn make_bid_video_does_not_exist() { // Make an attempt to make auction bid if corresponding video does not exist let make_bid_result = Content::make_open_auction_bid( - Origin::signed(SECOND_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(SECOND_MEMBER_ACCOUNT_ID), SECOND_MEMBER_ID, video_id, bid, @@ -332,7 +332,7 @@ fn make_bid_nft_is_not_issued() { // Make an attempt to make auction bid if corresponding nft is not issued yet let make_bid_result = Content::make_open_auction_bid( - Origin::signed(SECOND_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(SECOND_MEMBER_ACCOUNT_ID), SECOND_MEMBER_ID, video_id, bid, @@ -357,7 +357,7 @@ fn make_bid_nft_is_not_in_auction_state() { // Issue nft assert_ok!(Content::issue_nft( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), ContentActor::Member(DEFAULT_MEMBER_ID), video_id, NftIssuanceParameters::::default(), @@ -370,7 +370,7 @@ fn make_bid_nft_is_not_in_auction_state() { // Make an attempt to make auction bid if corresponding nft is not in auction state let make_bid_result = Content::make_open_auction_bid( - Origin::signed(SECOND_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(SECOND_MEMBER_ACCOUNT_ID), SECOND_MEMBER_ID, video_id, bid, @@ -395,7 +395,7 @@ fn make_bid_nft_auction_expired() { // Issue nft assert_ok!(Content::issue_nft( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), ContentActor::Member(DEFAULT_MEMBER_ID), video_id, NftIssuanceParameters::::default(), @@ -413,7 +413,7 @@ fn make_bid_nft_auction_expired() { // Start nft auction assert_ok!(Content::start_english_auction( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), ContentActor::Member(DEFAULT_MEMBER_ID), video_id, auction_params, @@ -430,7 +430,7 @@ fn make_bid_nft_auction_expired() { // Make an attempt to make auction bid if corresponding english nft auction is already expired let make_bid_result = Content::make_english_auction_bid( - Origin::signed(SECOND_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(SECOND_MEMBER_ACCOUNT_ID), SECOND_MEMBER_ID, video_id, bid, @@ -455,7 +455,7 @@ fn make_bid_member_is_not_allowed_to_participate() { // Issue nft assert_ok!(Content::issue_nft( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), ContentActor::Member(DEFAULT_MEMBER_ID), video_id, NftIssuanceParameters::::default(), @@ -473,7 +473,7 @@ fn make_bid_member_is_not_allowed_to_participate() { // Start nft auction assert_ok!(Content::start_open_auction( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), ContentActor::Member(DEFAULT_MEMBER_ID), video_id, auction_params, @@ -490,7 +490,7 @@ fn make_bid_member_is_not_allowed_to_participate() { // Make an attempt to make auction bid on auction with whitelist if member is not whitelisted let make_bid_result = Content::make_open_auction_bid( - Origin::signed(SECOND_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(SECOND_MEMBER_ACCOUNT_ID), SECOND_MEMBER_ID, video_id, bid, @@ -518,7 +518,7 @@ fn make_bid_starting_price_constraint_violated() { // Issue nft assert_ok!(Content::issue_nft( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), ContentActor::Member(DEFAULT_MEMBER_ID), video_id, NftIssuanceParameters::::default(), @@ -534,7 +534,7 @@ fn make_bid_starting_price_constraint_violated() { // Start nft auction assert_ok!(Content::start_open_auction( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), ContentActor::Member(DEFAULT_MEMBER_ID), video_id, auction_params, @@ -546,7 +546,7 @@ fn make_bid_starting_price_constraint_violated() { // Make an attempt to make auction bid if bid amount provided is less then auction starting price let make_bid_result = Content::make_open_auction_bid( - Origin::signed(SECOND_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(SECOND_MEMBER_ACCOUNT_ID), SECOND_MEMBER_ID, video_id, bid, @@ -579,7 +579,7 @@ fn make_bid_fails_with_lower_offer_and_locking_period_not_expired() { run_to_block(start_block + Content::min_bid_lock_duration() - 1); assert_err!( Content::make_open_auction_bid( - Origin::signed(SECOND_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(SECOND_MEMBER_ACCOUNT_ID), SECOND_MEMBER_ID, video_id, low_bid, @@ -603,7 +603,7 @@ fn make_bid_succeeds_with_higher_offer_and_locking_period_not_expired() { // attemp to lower the offer on the same block -> error assert_ok!(Content::make_open_auction_bid( - Origin::signed(SECOND_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(SECOND_MEMBER_ACCOUNT_ID), SECOND_MEMBER_ID, video_id, second_bid, @@ -628,7 +628,7 @@ fn make_bid_fails_by_insufficient_funds_for_the_next_bid() { assert_err!( Content::make_open_auction_bid( - Origin::signed(SECOND_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(SECOND_MEMBER_ACCOUNT_ID), SECOND_MEMBER_ID, video_id, new_bid, @@ -651,7 +651,7 @@ fn make_english_auction_bid_ok_with_previous_amount_unreserved_and_free_balance_ setup_english_auction_scenario(); assert_ok!(Content::make_english_auction_bid( - Origin::signed(SECOND_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(SECOND_MEMBER_ACCOUNT_ID), SECOND_MEMBER_ID, video_id, init_bid, @@ -661,7 +661,7 @@ fn make_english_auction_bid_ok_with_previous_amount_unreserved_and_free_balance_ increase_account_balance_helper(COLLABORATOR_MEMBER_ACCOUNT_ID, ed() + new_bid); assert_ok!(Content::make_english_auction_bid( - Origin::signed(COLLABORATOR_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(COLLABORATOR_MEMBER_ACCOUNT_ID), COLLABORATOR_MEMBER_ID, video_id, new_bid, @@ -692,7 +692,7 @@ fn make_english_auction_bid_ok_with_previous_amount_unreserved_and_reserved_bala setup_english_auction_scenario(); let _ = Content::make_open_auction_bid( - Origin::signed(SECOND_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(SECOND_MEMBER_ACCOUNT_ID), SECOND_MEMBER_ID, video_id, init_bid, @@ -702,7 +702,7 @@ fn make_english_auction_bid_ok_with_previous_amount_unreserved_and_reserved_bala increase_account_balance_helper(COLLABORATOR_MEMBER_ACCOUNT_ID, new_bid); let _ = Content::make_open_auction_bid( - Origin::signed(COLLABORATOR_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(COLLABORATOR_MEMBER_ACCOUNT_ID), COLLABORATOR_MEMBER_ID, video_id, new_bid, @@ -726,7 +726,7 @@ fn make_bid_succeeds_with_auction_completion_and_outstanding_bids() { setup_open_auction_scenario_with_bid(Content::min_starting_price()); assert_ok!(Content::make_open_auction_bid( - Origin::signed(SECOND_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(SECOND_MEMBER_ACCOUNT_ID), SECOND_MEMBER_ID, video_id, DEFAULT_BUY_NOW_PRICE, @@ -754,7 +754,7 @@ fn make_bid_succeeds_with_auction_completion_and_no_outstanding_bids() { setup_open_auction_scenario(); assert_ok!(Content::make_open_auction_bid( - Origin::signed(SECOND_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(SECOND_MEMBER_ACCOUNT_ID), SECOND_MEMBER_ID, video_id, DEFAULT_BUY_NOW_PRICE, @@ -782,7 +782,7 @@ fn make_bid_ok_with_open_auction_completion_and_total_balance_slashed() { setup_open_auction_scenario(); assert_ok!(Content::make_open_auction_bid( - Origin::signed(SECOND_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(SECOND_MEMBER_ACCOUNT_ID), SECOND_MEMBER_ID, video_id, DEFAULT_BUY_NOW_PRICE + 10, @@ -806,7 +806,7 @@ fn make_bid_ok_with_open_auction_completion_and_no_reserve_balance_left_for_bidd setup_open_auction_scenario(); assert_ok!(Content::make_open_auction_bid( - Origin::signed(SECOND_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(SECOND_MEMBER_ACCOUNT_ID), SECOND_MEMBER_ID, video_id, DEFAULT_BUY_NOW_PRICE + 10, @@ -834,14 +834,14 @@ fn make_bid_ok_with_english_auction_completion_with_bid_below_min_step() { .call_and_assert(Ok(())); assert_ok!(Content::make_english_auction_bid( - Origin::signed(THIRD_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(THIRD_MEMBER_ACCOUNT_ID), THIRD_MEMBER_ID, VideoId::one(), DEFAULT_BUY_NOW_PRICE - 10, )); assert_ok!(Content::make_english_auction_bid( - Origin::signed(SECOND_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(SECOND_MEMBER_ACCOUNT_ID), SECOND_MEMBER_ID, VideoId::one(), DEFAULT_BUY_NOW_PRICE, @@ -861,7 +861,7 @@ fn make_bid_ok_with_english_auction_completion_and_total_balance_slashed() { .call_and_assert(Ok(())); assert_ok!(Content::make_english_auction_bid( - Origin::signed(SECOND_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(SECOND_MEMBER_ACCOUNT_ID), SECOND_MEMBER_ID, VideoId::one(), BID_OFFER, @@ -887,7 +887,7 @@ fn make_bid_ok_with_open_auction_owner_account_increased_balance_by_correct_amou let auction_fee = Content::platform_fee_percentage().mul_floor(DEFAULT_BUY_NOW_PRICE); assert_ok!(Content::make_open_auction_bid( - Origin::signed(SECOND_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(SECOND_MEMBER_ACCOUNT_ID), SECOND_MEMBER_ID, video_id, DEFAULT_BUY_NOW_PRICE + 10, @@ -913,7 +913,7 @@ fn make_bid_ok_with_english_auction_owner_account_increased_balance_by_correct_a let auction_fee = Content::platform_fee_percentage().mul_floor(DEFAULT_BUY_NOW_PRICE); assert_ok!(Content::make_english_auction_bid( - Origin::signed(SECOND_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(SECOND_MEMBER_ACCOUNT_ID), SECOND_MEMBER_ID, video_id, DEFAULT_BUY_NOW_PRICE + 10, @@ -942,7 +942,7 @@ fn english_auction_bid_made_event_includes_prev_top_bidder() { let third_bid_amount = Content::min_bid_step() * 3; assert_ok!(Content::make_english_auction_bid( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), DEFAULT_MEMBER_ID, video_id, first_bid_amount, @@ -959,7 +959,7 @@ fn english_auction_bid_made_event_includes_prev_top_bidder() { ); assert_ok!(Content::make_english_auction_bid( - Origin::signed(SECOND_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(SECOND_MEMBER_ACCOUNT_ID), SECOND_MEMBER_ID, video_id, second_bid_amount, @@ -976,7 +976,7 @@ fn english_auction_bid_made_event_includes_prev_top_bidder() { ); assert_ok!(Content::make_english_auction_bid( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), DEFAULT_MEMBER_ID, video_id, third_bid_amount, @@ -1005,7 +1005,7 @@ fn english_auction_bid_made_completing_auction_event_with_no_previous_bidder() { increase_account_balance_helper(DEFAULT_MEMBER_ACCOUNT_ID, BIDDER_BALANCE); assert_ok!(Content::make_english_auction_bid( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), DEFAULT_MEMBER_ID, video_id, DEFAULT_BUY_NOW_PRICE, @@ -1034,7 +1034,7 @@ fn english_auction_bid_made_completing_auction_event_with_previous_bidder() { increase_account_balance_helper(SECOND_MEMBER_ACCOUNT_ID, BIDDER_BALANCE); assert_ok!(Content::make_english_auction_bid( - Origin::signed(SECOND_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(SECOND_MEMBER_ACCOUNT_ID), SECOND_MEMBER_ID, video_id, Content::min_bid_step(), @@ -1051,7 +1051,7 @@ fn english_auction_bid_made_completing_auction_event_with_previous_bidder() { ); assert_ok!(Content::make_english_auction_bid( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), DEFAULT_MEMBER_ID, video_id, DEFAULT_BUY_NOW_PRICE @@ -1081,7 +1081,7 @@ fn make_bid_with_open_auction_is_not_started() { // Issue nft assert_ok!(Content::issue_nft( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), ContentActor::Member(DEFAULT_MEMBER_ID), video_id, NftIssuanceParameters::::default(), @@ -1097,7 +1097,7 @@ fn make_bid_with_open_auction_is_not_started() { // Start nft auction assert_ok!(Content::start_open_auction( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), ContentActor::Member(DEFAULT_MEMBER_ID), video_id, auction_params, @@ -1107,7 +1107,7 @@ fn make_bid_with_open_auction_is_not_started() { let bid = Content::min_starting_price(); increase_account_balance_helper(SECOND_MEMBER_ACCOUNT_ID, ed() + bid); let make_bid_result = Content::make_open_auction_bid( - Origin::signed(SECOND_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(SECOND_MEMBER_ACCOUNT_ID), SECOND_MEMBER_ID, video_id, bid, @@ -1131,7 +1131,7 @@ fn make_bid_with_english_auction_is_not_started() { // Issue nft assert_ok!(Content::issue_nft( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), ContentActor::Member(DEFAULT_MEMBER_ID), video_id, NftIssuanceParameters::::default(), @@ -1149,7 +1149,7 @@ fn make_bid_with_english_auction_is_not_started() { // Start nft auction assert_ok!(Content::start_english_auction( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), ContentActor::Member(DEFAULT_MEMBER_ID), video_id, auction_params, @@ -1159,7 +1159,7 @@ fn make_bid_with_english_auction_is_not_started() { let bid = Content::min_starting_price(); increase_account_balance_helper(SECOND_MEMBER_ACCOUNT_ID, ed() + bid); let make_bid_result = Content::make_english_auction_bid( - Origin::signed(SECOND_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(SECOND_MEMBER_ACCOUNT_ID), SECOND_MEMBER_ID, video_id, bid, @@ -1187,7 +1187,7 @@ fn english_auction_increased_bid_works_correctly() { let bid1 = Content::min_bid_step(); assert_ok!(Content::make_english_auction_bid( - Origin::signed(SECOND_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(SECOND_MEMBER_ACCOUNT_ID), SECOND_MEMBER_ID, video_id, bid1, @@ -1199,7 +1199,7 @@ fn english_auction_increased_bid_works_correctly() { let bid2 = Content::min_bid_step() * 2; assert_ok!(Content::make_english_auction_bid( - Origin::signed(SECOND_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(SECOND_MEMBER_ACCOUNT_ID), SECOND_MEMBER_ID, video_id, bid2, @@ -1228,7 +1228,7 @@ fn open_auction_increased_bid_works_correctly() { let bid1 = Content::min_bid_step(); assert_ok!(Content::make_open_auction_bid( - Origin::signed(SECOND_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(SECOND_MEMBER_ACCOUNT_ID), SECOND_MEMBER_ID, video_id, bid1, @@ -1240,7 +1240,7 @@ fn open_auction_increased_bid_works_correctly() { let bid2 = 2 * Content::min_bid_step(); assert_ok!(Content::make_open_auction_bid( - Origin::signed(SECOND_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(SECOND_MEMBER_ACCOUNT_ID), SECOND_MEMBER_ID, video_id, bid2, @@ -1269,7 +1269,7 @@ fn open_auction_decreased_bid_works_correctly() { let bid1 = 2 * Content::min_bid_step(); assert_ok!(Content::make_open_auction_bid( - Origin::signed(SECOND_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(SECOND_MEMBER_ACCOUNT_ID), SECOND_MEMBER_ID, video_id, bid1, @@ -1283,7 +1283,7 @@ fn open_auction_decreased_bid_works_correctly() { let bid2 = Content::min_bid_step(); assert_ok!(Content::make_open_auction_bid( - Origin::signed(SECOND_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(SECOND_MEMBER_ACCOUNT_ID), SECOND_MEMBER_ID, video_id, bid2, @@ -1311,7 +1311,7 @@ fn make_open_auction_bid_fails_during_transfer() { assert_noop!( Content::make_open_auction_bid( - Origin::signed(SECOND_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(SECOND_MEMBER_ACCOUNT_ID), SECOND_MEMBER_ID, VideoId::one(), Content::min_starting_price(), @@ -1334,7 +1334,7 @@ fn make_english_auction_bid_fails_during_transfer() { assert_noop!( Content::make_english_auction_bid( - Origin::signed(SECOND_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(SECOND_MEMBER_ACCOUNT_ID), SECOND_MEMBER_ID, VideoId::one(), Content::min_starting_price(), diff --git a/runtime-modules/content/src/tests/nft/offer_nft.rs b/runtime-modules/content/src/tests/nft/offer_nft.rs index df9296d724..12bf957a82 100644 --- a/runtime-modules/content/src/tests/nft/offer_nft.rs +++ b/runtime-modules/content/src/tests/nft/offer_nft.rs @@ -18,7 +18,7 @@ fn offer_nft() { // Issue nft assert_ok!(Content::issue_nft( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), ContentActor::Member(DEFAULT_MEMBER_ID), video_id, NftIssuanceParameters::::default(), @@ -26,7 +26,7 @@ fn offer_nft() { // Offer nft assert_ok!(Content::offer_nft( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), video_id, ContentActor::Member(DEFAULT_MEMBER_ID), SECOND_MEMBER_ID, @@ -67,7 +67,7 @@ fn offer_nft_video_does_not_exist() { // Make an attempt to offer nft which corresponding video does not exist let offer_nft_result = Content::offer_nft( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), video_id, ContentActor::Member(DEFAULT_MEMBER_ID), SECOND_MEMBER_ID, @@ -93,7 +93,7 @@ fn offer_nft_not_issued() { // Make an attempt to offer nft which is not issued yet let offer_nft_result = Content::offer_nft( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), video_id, ContentActor::Member(DEFAULT_MEMBER_ID), SECOND_MEMBER_ID, @@ -119,7 +119,7 @@ fn offer_nft_auth_failed() { // Issue nft assert_ok!(Content::issue_nft( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), ContentActor::Member(DEFAULT_MEMBER_ID), video_id, NftIssuanceParameters::::default(), @@ -127,7 +127,7 @@ fn offer_nft_auth_failed() { // Make an attempt to offer nft with wrong credentials let offer_nft_result = Content::offer_nft( - Origin::signed(UNAUTHORIZED_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(UNAUTHORIZED_MEMBER_ACCOUNT_ID), video_id, ContentActor::Member(DEFAULT_MEMBER_ID), SECOND_MEMBER_ID, @@ -153,7 +153,7 @@ fn offer_nft_not_authorized() { // Issue nft assert_ok!(Content::issue_nft( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), ContentActor::Member(DEFAULT_MEMBER_ID), video_id, NftIssuanceParameters::::default(), @@ -161,7 +161,7 @@ fn offer_nft_not_authorized() { // Make an attempt to offer nft if actor is not authorized let offer_nft_result = Content::offer_nft( - Origin::signed(UNAUTHORIZED_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(UNAUTHORIZED_MEMBER_ACCOUNT_ID), video_id, ContentActor::Member(UNAUTHORIZED_MEMBER_ID), UNAUTHORIZED_MEMBER_ID, @@ -187,7 +187,7 @@ fn offer_nft_transactional_status_is_not_idle() { // Issue nft assert_ok!(Content::issue_nft( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), ContentActor::Member(DEFAULT_MEMBER_ID), video_id, NftIssuanceParameters::::default(), @@ -195,7 +195,7 @@ fn offer_nft_transactional_status_is_not_idle() { // Offer nft assert_ok!(Content::offer_nft( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), video_id, ContentActor::Member(DEFAULT_MEMBER_ID), SECOND_MEMBER_ID, @@ -204,7 +204,7 @@ fn offer_nft_transactional_status_is_not_idle() { // Make an attempt to offer nft when it is already offered let offer_nft_result = Content::offer_nft( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), video_id, ContentActor::Member(DEFAULT_MEMBER_ID), SECOND_MEMBER_ID, @@ -227,7 +227,7 @@ fn offer_nft_fails_during_channel_transfer() { assert_noop!( Content::offer_nft( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), 1u64, ContentActor::Member(DEFAULT_MEMBER_ID), SECOND_MEMBER_ID, diff --git a/runtime-modules/content/src/tests/nft/pick_open_auction_winner.rs b/runtime-modules/content/src/tests/nft/pick_open_auction_winner.rs index b8db378854..76e436e184 100644 --- a/runtime-modules/content/src/tests/nft/pick_open_auction_winner.rs +++ b/runtime-modules/content/src/tests/nft/pick_open_auction_winner.rs @@ -16,7 +16,7 @@ fn pick_open_auction_winner() { // Issue nft assert_ok!(Content::issue_nft( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), ContentActor::Member(DEFAULT_MEMBER_ID), video_id, NftIssuanceParameters::::default(), @@ -34,7 +34,7 @@ fn pick_open_auction_winner() { // Start nft auction assert_ok!(Content::start_open_auction( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), ContentActor::Member(DEFAULT_MEMBER_ID), video_id, auction_params, @@ -47,7 +47,7 @@ fn pick_open_auction_winner() { // Make nft auction bid assert_ok!(Content::make_open_auction_bid( - Origin::signed(SECOND_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(SECOND_MEMBER_ACCOUNT_ID), SECOND_MEMBER_ID, video_id, bid, @@ -55,7 +55,7 @@ fn pick_open_auction_winner() { // Pick open auction winner assert_ok!(Content::pick_open_auction_winner( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), ContentActor::Member(DEFAULT_MEMBER_ID), video_id, SECOND_MEMBER_ID, @@ -97,7 +97,7 @@ fn pick_open_auction_winner_auth_failed() { // Issue nft assert_ok!(Content::issue_nft( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), ContentActor::Member(DEFAULT_MEMBER_ID), video_id, NftIssuanceParameters::::default(), @@ -115,7 +115,7 @@ fn pick_open_auction_winner_auth_failed() { // Start nft auction assert_ok!(Content::start_open_auction( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), ContentActor::Member(DEFAULT_MEMBER_ID), video_id, auction_params, @@ -128,7 +128,7 @@ fn pick_open_auction_winner_auth_failed() { // Make nft auction bid assert_ok!(Content::make_open_auction_bid( - Origin::signed(SECOND_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(SECOND_MEMBER_ACCOUNT_ID), SECOND_MEMBER_ID, video_id, bid, @@ -139,7 +139,7 @@ fn pick_open_auction_winner_auth_failed() { // Make an attempt to pick open auction winner with wrong credentials let pick_open_auction_winner_result = Content::pick_open_auction_winner( - Origin::signed(UNAUTHORIZED_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(UNAUTHORIZED_MEMBER_ACCOUNT_ID), ContentActor::Member(SECOND_MEMBER_ID), video_id, SECOND_MEMBER_ID, @@ -168,7 +168,7 @@ fn pick_open_auction_winner_actor_not_authorized() { // Issue nft assert_ok!(Content::issue_nft( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), ContentActor::Member(DEFAULT_MEMBER_ID), video_id, NftIssuanceParameters::::default(), @@ -186,7 +186,7 @@ fn pick_open_auction_winner_actor_not_authorized() { // Start nft auction assert_ok!(Content::start_open_auction( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), ContentActor::Member(DEFAULT_MEMBER_ID), video_id, auction_params, @@ -199,7 +199,7 @@ fn pick_open_auction_winner_actor_not_authorized() { // Make nft auction bid assert_ok!(Content::make_open_auction_bid( - Origin::signed(SECOND_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(SECOND_MEMBER_ACCOUNT_ID), SECOND_MEMBER_ID, video_id, bid, @@ -210,7 +210,7 @@ fn pick_open_auction_winner_actor_not_authorized() { // Make an attempt to pick open auction winner if actor is not authorized to do this let pick_open_auction_winner_result = Content::pick_open_auction_winner( - Origin::signed(SECOND_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(SECOND_MEMBER_ACCOUNT_ID), ContentActor::Member(SECOND_MEMBER_ID), video_id, SECOND_MEMBER_ID, @@ -235,7 +235,7 @@ fn pick_open_auction_winner_video_does_not_exist() { // Make an attempt to pick open auction winner which corresponding video does not exist let pick_open_auction_winner_result = Content::pick_open_auction_winner( - Origin::signed(SECOND_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(SECOND_MEMBER_ACCOUNT_ID), ContentActor::Member(SECOND_MEMBER_ID), video_id, SECOND_MEMBER_ID, @@ -264,7 +264,7 @@ fn pick_open_auction_winner_nft_is_not_issued() { // Make an attempt to pick open auction winner for nft which is not issued yet let pick_open_auction_winner_result = Content::pick_open_auction_winner( - Origin::signed(SECOND_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(SECOND_MEMBER_ACCOUNT_ID), ContentActor::Member(SECOND_MEMBER_ID), video_id, SECOND_MEMBER_ID, @@ -293,7 +293,7 @@ fn pick_open_auction_winner_not_in_auction_state() { // Issue nft assert_ok!(Content::issue_nft( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), ContentActor::Member(DEFAULT_MEMBER_ID), video_id, NftIssuanceParameters::::default(), @@ -301,7 +301,7 @@ fn pick_open_auction_winner_not_in_auction_state() { // Make an attempt to pick open auction winner for nft which is not in auction state let pick_open_auction_winner_result = Content::pick_open_auction_winner( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), ContentActor::Member(DEFAULT_MEMBER_ID), video_id, SECOND_MEMBER_ID, @@ -330,7 +330,7 @@ fn pick_open_auction_winner_is_not_open_auction_type() { // Issue nft assert_ok!(Content::issue_nft( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), ContentActor::Member(DEFAULT_MEMBER_ID), video_id, NftIssuanceParameters::::default(), @@ -348,7 +348,7 @@ fn pick_open_auction_winner_is_not_open_auction_type() { // Start nft auction assert_ok!(Content::start_english_auction( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), ContentActor::Member(DEFAULT_MEMBER_ID), video_id, auction_params, @@ -361,7 +361,7 @@ fn pick_open_auction_winner_is_not_open_auction_type() { // Make nft auction bid assert_ok!(Content::make_english_auction_bid( - Origin::signed(SECOND_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(SECOND_MEMBER_ACCOUNT_ID), SECOND_MEMBER_ID, video_id, bid, @@ -369,7 +369,7 @@ fn pick_open_auction_winner_is_not_open_auction_type() { // Make an attempt to pick open auction winner for nft which is in english auction state let pick_open_auction_winner_result = Content::pick_open_auction_winner( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), ContentActor::Member(DEFAULT_MEMBER_ID), video_id, SECOND_MEMBER_ID, @@ -398,7 +398,7 @@ fn pick_open_auction_winner_bid_does_not_exist() { // Issue nft assert_ok!(Content::issue_nft( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), ContentActor::Member(DEFAULT_MEMBER_ID), video_id, NftIssuanceParameters::::default(), @@ -416,7 +416,7 @@ fn pick_open_auction_winner_bid_does_not_exist() { // Start nft auction assert_ok!(Content::start_open_auction( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), ContentActor::Member(DEFAULT_MEMBER_ID), video_id, auction_params, @@ -427,7 +427,7 @@ fn pick_open_auction_winner_bid_does_not_exist() { // Make an attempt to pick open auction winner if last bid does not exist let pick_open_auction_winner_result = Content::pick_open_auction_winner( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), ContentActor::Member(DEFAULT_MEMBER_ID), video_id, SECOND_MEMBER_ID, @@ -457,7 +457,7 @@ fn pick_open_auction_winner_fails_with_invalid_bid_commit() { // Issue nft assert_ok!(Content::issue_nft( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), ContentActor::Member(DEFAULT_MEMBER_ID), video_id, NftIssuanceParameters::::default(), @@ -475,7 +475,7 @@ fn pick_open_auction_winner_fails_with_invalid_bid_commit() { // Start nft auction assert_ok!(Content::start_open_auction( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), ContentActor::Member(DEFAULT_MEMBER_ID), video_id, auction_params, @@ -492,7 +492,7 @@ fn pick_open_auction_winner_fails_with_invalid_bid_commit() { // Make nft auction bid assert_ok!(Content::make_open_auction_bid( - Origin::signed(SECOND_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(SECOND_MEMBER_ACCOUNT_ID), SECOND_MEMBER_ID, video_id, high_bid, @@ -502,7 +502,7 @@ fn pick_open_auction_winner_fails_with_invalid_bid_commit() { // Attempt to race assert_ok!(Content::make_open_auction_bid( - Origin::signed(SECOND_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(SECOND_MEMBER_ACCOUNT_ID), SECOND_MEMBER_ID, video_id, low_bid, @@ -511,7 +511,7 @@ fn pick_open_auction_winner_fails_with_invalid_bid_commit() { // bid amount secured by commit assert_err!( Content::pick_open_auction_winner( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), ContentActor::Member(DEFAULT_MEMBER_ID), video_id, SECOND_MEMBER_ID, @@ -542,7 +542,7 @@ fn pick_open_auction_winner_ok_with_nft_member_owner_correctly_credited() { .call_and_assert(Ok(())); assert_ok!(Content::pick_open_auction_winner( - Origin::signed(THIRD_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(THIRD_MEMBER_ACCOUNT_ID), ContentActor::Member(THIRD_MEMBER_ID), VideoId::one(), SECOND_MEMBER_ID, @@ -572,7 +572,7 @@ fn pick_open_auction_ok_with_channel_owner_correctly_credited() { .call_and_assert(Ok(())); assert_ok!(Content::pick_open_auction_winner( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), ContentActor::Member(DEFAULT_MEMBER_ID), VideoId::one(), SECOND_MEMBER_ID, @@ -597,7 +597,7 @@ fn pick_open_auction_fails_during_channel_transfer() { assert_noop!( Content::pick_open_auction_winner( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), ContentActor::Member(DEFAULT_MEMBER_ID), 1u64, SECOND_MEMBER_ID, diff --git a/runtime-modules/content/src/tests/nft/sell_nft.rs b/runtime-modules/content/src/tests/nft/sell_nft.rs index d94e2bd3fc..7e848e58a7 100644 --- a/runtime-modules/content/src/tests/nft/sell_nft.rs +++ b/runtime-modules/content/src/tests/nft/sell_nft.rs @@ -18,14 +18,14 @@ fn sell_nft() { // Issue nft assert_ok!(Content::issue_nft( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), ContentActor::Member(DEFAULT_MEMBER_ID), video_id, NftIssuanceParameters::::default(), )); // Sell nft assert_ok!(Content::sell_nft( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), video_id, ContentActor::Member(DEFAULT_MEMBER_ID), DEFAULT_NFT_PRICE, @@ -63,7 +63,7 @@ fn sell_nft_video_does_not_exist() { // Make an attempt to sell nft which corresponding video does not exist yet let sell_nft_result = Content::sell_nft( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), video_id, ContentActor::Member(DEFAULT_MEMBER_ID), DEFAULT_NFT_PRICE, @@ -88,7 +88,7 @@ fn sell_nft_not_issued() { // Make an attempt to sell nft which is not issued yet let sell_nft_result = Content::sell_nft( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), video_id, ContentActor::Member(DEFAULT_MEMBER_ID), DEFAULT_NFT_PRICE, @@ -113,7 +113,7 @@ fn sell_nft_auth_failed() { // Issue nft assert_ok!(Content::issue_nft( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), ContentActor::Member(DEFAULT_MEMBER_ID), video_id, NftIssuanceParameters::::default(), @@ -121,7 +121,7 @@ fn sell_nft_auth_failed() { // Make an attempt to sell nft with wrong credentials let sell_nft_result = Content::sell_nft( - Origin::signed(UNAUTHORIZED_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(UNAUTHORIZED_MEMBER_ACCOUNT_ID), video_id, ContentActor::Member(DEFAULT_MEMBER_ID), DEFAULT_NFT_PRICE, @@ -146,7 +146,7 @@ fn sell_nft_not_authorized() { // Issue nft assert_ok!(Content::issue_nft( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), ContentActor::Member(DEFAULT_MEMBER_ID), video_id, NftIssuanceParameters::::default(), @@ -154,7 +154,7 @@ fn sell_nft_not_authorized() { // Make an attempt to sell nft if actor is not authorized let sell_nft_result = Content::sell_nft( - Origin::signed(UNAUTHORIZED_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(UNAUTHORIZED_MEMBER_ACCOUNT_ID), video_id, ContentActor::Member(UNAUTHORIZED_MEMBER_ID), DEFAULT_NFT_PRICE, @@ -179,7 +179,7 @@ fn sell_nft_transactional_status_is_not_idle() { // Issue nft assert_ok!(Content::issue_nft( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), ContentActor::Member(DEFAULT_MEMBER_ID), video_id, NftIssuanceParameters::::default(), @@ -187,7 +187,7 @@ fn sell_nft_transactional_status_is_not_idle() { // Offer nft assert_ok!(Content::offer_nft( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), video_id, ContentActor::Member(DEFAULT_MEMBER_ID), SECOND_MEMBER_ID, @@ -196,7 +196,7 @@ fn sell_nft_transactional_status_is_not_idle() { // Make an attempt to sell nft when it is already offered let sell_nft_result = Content::sell_nft( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), video_id, ContentActor::Member(DEFAULT_MEMBER_ID), DEFAULT_NFT_PRICE, @@ -220,7 +220,7 @@ fn sell_nft_fails_during_transfer() { assert_noop!( Content::sell_nft( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), VideoId::one(), ContentActor::Member(DEFAULT_MEMBER_ID), DEFAULT_NFT_PRICE, diff --git a/runtime-modules/content/src/tests/nft/sling_nft_back.rs b/runtime-modules/content/src/tests/nft/sling_nft_back.rs index 673db1fe51..e49b72239e 100644 --- a/runtime-modules/content/src/tests/nft/sling_nft_back.rs +++ b/runtime-modules/content/src/tests/nft/sling_nft_back.rs @@ -18,7 +18,7 @@ fn sling_nft_back() { // Issue nft assert_ok!(Content::issue_nft( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), ContentActor::Member(DEFAULT_MEMBER_ID), video_id, NftIssuanceParameters:: { @@ -38,7 +38,7 @@ fn sling_nft_back() { // Sling nft back to the original artist assert_ok!(Content::sling_nft_back( - Origin::signed(SECOND_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(SECOND_MEMBER_ACCOUNT_ID), video_id, ContentActor::Member(SECOND_MEMBER_ID), )); @@ -72,7 +72,7 @@ fn sling_nft_back_video_does_not_exist() { // Make an attempt to sling nft back which corresponding video does not exist let sling_nft_back_result = Content::sling_nft_back( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), video_id, ContentActor::Member(DEFAULT_MEMBER_ID), ); @@ -96,7 +96,7 @@ fn sling_nft_back_not_issued() { // Make an attempt to sling nft back which is not issued yet let sling_nft_back_result = Content::sling_nft_back( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), video_id, ContentActor::Member(DEFAULT_MEMBER_ID), ); @@ -125,7 +125,7 @@ fn sling_nft_back_auth_failed() { // Make an attempt to sling nft back with wrong credentials let sling_nft_back_result = Content::sling_nft_back( - Origin::signed(UNAUTHORIZED_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(UNAUTHORIZED_MEMBER_ACCOUNT_ID), video_id, ContentActor::Member(DEFAULT_MEMBER_ID), ); @@ -154,7 +154,7 @@ fn sling_nft_back_not_authorized() { // Make an attempt to sling nft back if actor is not authorized let sling_nft_back_result = Content::sling_nft_back( - Origin::signed(UNAUTHORIZED_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(UNAUTHORIZED_MEMBER_ACCOUNT_ID), video_id, ContentActor::Member(UNAUTHORIZED_MEMBER_ID), ); @@ -183,7 +183,7 @@ fn sling_nft_back_transactional_status_is_not_idle() { // Offer nft assert_ok!(Content::offer_nft( - Origin::signed(SECOND_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(SECOND_MEMBER_ACCOUNT_ID), video_id, ContentActor::Member(SECOND_MEMBER_ID), SECOND_MEMBER_ID, @@ -192,7 +192,7 @@ fn sling_nft_back_transactional_status_is_not_idle() { // Make an attempt to sling nft back when it is already offered let sling_nft_back_result = Content::sling_nft_back( - Origin::signed(SECOND_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(SECOND_MEMBER_ACCOUNT_ID), video_id, ContentActor::Member(SECOND_MEMBER_ID), ); @@ -217,7 +217,7 @@ fn sling_nft_back_fails_during_channel_transfer() { assert_noop!( Content::sling_nft_back( - Origin::signed(SECOND_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(SECOND_MEMBER_ACCOUNT_ID), 1u64, ContentActor::Member(SECOND_MEMBER_ID), ), @@ -235,7 +235,7 @@ fn sling_nft_back_fails_with_channel_owned_nft() { assert_noop!( Content::sling_nft_back( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), 1u64, ContentActor::Member(DEFAULT_MEMBER_ID), ), diff --git a/runtime-modules/content/src/tests/nft/start_nft_auction.rs b/runtime-modules/content/src/tests/nft/start_nft_auction.rs index 523f5244cf..b14baee8d4 100644 --- a/runtime-modules/content/src/tests/nft/start_nft_auction.rs +++ b/runtime-modules/content/src/tests/nft/start_nft_auction.rs @@ -21,7 +21,7 @@ fn start_open_auction() { // Issue nft assert_ok!(Content::issue_nft( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), ContentActor::Member(DEFAULT_MEMBER_ID), video_id, NftIssuanceParameters::::default(), @@ -31,7 +31,7 @@ fn start_open_auction() { // Start nft auction assert_ok!(Content::start_open_auction( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), ContentActor::Member(DEFAULT_MEMBER_ID), video_id, auction_params.clone(), @@ -73,7 +73,7 @@ fn start_nft_auction_video_does_not_exist() { // Make an attempt to start nft auction which corresponding video does not exist yet let start_nft_auction_result = Content::start_open_auction( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), ContentActor::Member(DEFAULT_MEMBER_ID), video_id, auction_params, @@ -100,7 +100,7 @@ fn start_nft_auction_not_issued() { // Make an attempt to start nft auction for nft which is not issued yet let start_nft_auction_result = Content::start_open_auction( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), ContentActor::Member(DEFAULT_MEMBER_ID), video_id, auction_params, @@ -125,7 +125,7 @@ fn start_nft_auction_auth_failed() { // Issue nft assert_ok!(Content::issue_nft( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), ContentActor::Member(DEFAULT_MEMBER_ID), video_id, NftIssuanceParameters::::default(), @@ -135,7 +135,7 @@ fn start_nft_auction_auth_failed() { // Make an attempt to start nft auction with wrong credentials let start_nft_auction_result = Content::start_open_auction( - Origin::signed(UNAUTHORIZED_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(UNAUTHORIZED_MEMBER_ACCOUNT_ID), ContentActor::Member(DEFAULT_MEMBER_ID), video_id, auction_params, @@ -160,7 +160,7 @@ fn start_nft_auction_not_authorized() { // Issue nft assert_ok!(Content::issue_nft( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), ContentActor::Member(DEFAULT_MEMBER_ID), video_id, NftIssuanceParameters::::default(), @@ -170,7 +170,7 @@ fn start_nft_auction_not_authorized() { // Make an attempt to start nft auction if actor is not authorized let start_nft_auction_result = Content::start_open_auction( - Origin::signed(UNAUTHORIZED_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(UNAUTHORIZED_MEMBER_ACCOUNT_ID), ContentActor::Member(UNAUTHORIZED_MEMBER_ID), video_id, auction_params, @@ -195,7 +195,7 @@ fn start_nft_auction_transactional_status_is_not_idle() { // Issue nft assert_ok!(Content::issue_nft( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), ContentActor::Member(DEFAULT_MEMBER_ID), video_id, NftIssuanceParameters::::default(), @@ -203,7 +203,7 @@ fn start_nft_auction_transactional_status_is_not_idle() { // Offer nft assert_ok!(Content::offer_nft( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), video_id, ContentActor::Member(DEFAULT_MEMBER_ID), SECOND_MEMBER_ID, @@ -214,7 +214,7 @@ fn start_nft_auction_transactional_status_is_not_idle() { // Make an attempt to start nft auction if nft transaction status is not idle let start_nft_auction_result = Content::start_open_auction( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), ContentActor::Member(DEFAULT_MEMBER_ID), video_id, auction_params, @@ -239,7 +239,7 @@ fn start_nft_auction_invalid_params() { // Issue nft assert_ok!(Content::issue_nft( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), ContentActor::Member(DEFAULT_MEMBER_ID), video_id, NftIssuanceParameters::::default(), @@ -255,7 +255,7 @@ fn start_nft_auction_invalid_params() { }; let start_nft_auction_result = Content::start_open_auction( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), ContentActor::Member(DEFAULT_MEMBER_ID), video_id, auction_params, @@ -277,7 +277,7 @@ fn start_nft_auction_invalid_params() { }; let start_nft_auction_result = Content::start_open_auction( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), ContentActor::Member(DEFAULT_MEMBER_ID), video_id, auction_params, @@ -300,7 +300,7 @@ fn start_nft_auction_invalid_params() { }; let start_nft_auction_result = Content::start_open_auction( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), ContentActor::Member(DEFAULT_MEMBER_ID), video_id, auction_params, @@ -323,7 +323,7 @@ fn start_nft_auction_invalid_params() { }; let start_nft_auction_result = Content::start_open_auction( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), ContentActor::Member(DEFAULT_MEMBER_ID), video_id, auction_params, @@ -348,7 +348,7 @@ fn start_nft_auction_invalid_params() { }; let start_nft_auction_result = Content::start_english_auction( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), ContentActor::Member(DEFAULT_MEMBER_ID), video_id, auction_params, @@ -373,7 +373,7 @@ fn start_nft_auction_invalid_params() { }; let start_nft_auction_result = Content::start_english_auction( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), ContentActor::Member(DEFAULT_MEMBER_ID), video_id, auction_params, @@ -398,7 +398,7 @@ fn start_nft_auction_invalid_params() { }; let start_nft_auction_result = Content::start_english_auction( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), ContentActor::Member(DEFAULT_MEMBER_ID), video_id, auction_params, @@ -423,7 +423,7 @@ fn start_nft_auction_invalid_params() { }; let start_nft_auction_result = Content::start_english_auction( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), ContentActor::Member(DEFAULT_MEMBER_ID), video_id, auction_params, @@ -447,7 +447,7 @@ fn start_nft_auction_invalid_params() { }; let start_nft_auction_result = Content::start_open_auction( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), ContentActor::Member(DEFAULT_MEMBER_ID), video_id, auction_params, @@ -469,7 +469,7 @@ fn start_nft_auction_invalid_params() { }; let start_nft_auction_result = Content::start_open_auction( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), ContentActor::Member(DEFAULT_MEMBER_ID), video_id, auction_params, @@ -496,7 +496,7 @@ fn start_nft_auction_invalid_params() { }; let start_nft_auction_result = Content::start_open_auction( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), ContentActor::Member(DEFAULT_MEMBER_ID), video_id, auction_params, @@ -525,7 +525,7 @@ fn start_eng_auction_fails_with_invalid_forward_starting() { // Issue nft assert_ok!(Content::issue_nft( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), ContentActor::Member(DEFAULT_MEMBER_ID), video_id, NftIssuanceParameters::::default(), @@ -542,7 +542,7 @@ fn start_eng_auction_fails_with_invalid_forward_starting() { }; let start_nft_auction_result = Content::start_english_auction( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), ContentActor::Member(DEFAULT_MEMBER_ID), video_id, auction_params, @@ -565,7 +565,7 @@ fn start_eng_auction_fails_with_invalid_forward_starting() { }; let start_nft_auction_result = Content::start_english_auction( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), ContentActor::Member(DEFAULT_MEMBER_ID), video_id, auction_params, @@ -591,7 +591,7 @@ fn start_open_auction_fails_during_channel_transfer() { assert_noop!( Content::start_open_auction( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), ContentActor::Member(DEFAULT_MEMBER_ID), 1u64, OpenAuctionParams::::default(), @@ -613,7 +613,7 @@ fn start_english_auction_fails_during_channel_transfer() { assert_noop!( Content::start_english_auction( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), ContentActor::Member(DEFAULT_MEMBER_ID), 1u64, EnglishAuctionParams::::default(), @@ -631,7 +631,7 @@ fn start_open_auction_fails_with_non_existing_member_in_whitelist() { IssueNftFixture::default().call_and_assert(Ok(())); assert_noop!( Content::start_open_auction( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), ContentActor::Member(DEFAULT_MEMBER_ID), 1u64, OpenAuctionParams:: { @@ -656,7 +656,7 @@ fn start_english_auction_fails_with_non_existing_member_in_whitelist() { assert_noop!( Content::start_english_auction( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), ContentActor::Member(DEFAULT_MEMBER_ID), 1u64, EnglishAuctionParams:: { diff --git a/runtime-modules/content/src/tests/nft/update_buy_now.rs b/runtime-modules/content/src/tests/nft/update_buy_now.rs index 71b5a96f88..040ae02681 100644 --- a/runtime-modules/content/src/tests/nft/update_buy_now.rs +++ b/runtime-modules/content/src/tests/nft/update_buy_now.rs @@ -19,7 +19,7 @@ fn update_buy_now_price() { // Issue nft assert_ok!(Content::issue_nft( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), ContentActor::Member(DEFAULT_MEMBER_ID), video_id, NftIssuanceParameters::::default(), @@ -29,7 +29,7 @@ fn update_buy_now_price() { // Sell nft assert_ok!(Content::sell_nft( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), video_id, ContentActor::Member(DEFAULT_MEMBER_ID), DEFAULT_NFT_PRICE, @@ -37,7 +37,7 @@ fn update_buy_now_price() { // update buy now price assert_ok!(Content::update_buy_now_price( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), ContentActor::Member(DEFAULT_MEMBER_ID), video_id, NEW_NFT_PRICE, @@ -71,7 +71,7 @@ fn update_buy_now_price_video_does_not_exist() { // Make an attempt to update buy now price which corresponding video does not exist yet let update_buy_now_price_result = Content::update_buy_now_price( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), ContentActor::Member(DEFAULT_MEMBER_ID), video_id, NEW_NFT_PRICE, @@ -99,7 +99,7 @@ fn update_buy_now_price_not_issued() { // Make an attempt to update buy now price for nft which is not issued yet let update_buy_now_price_result = Content::update_buy_now_price( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), ContentActor::Member(DEFAULT_MEMBER_ID), video_id, NEW_NFT_PRICE, @@ -124,7 +124,7 @@ fn update_buy_now_price_auth_failed() { // Issue nft assert_ok!(Content::issue_nft( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), ContentActor::Member(DEFAULT_MEMBER_ID), video_id, NftIssuanceParameters::::default(), @@ -132,7 +132,7 @@ fn update_buy_now_price_auth_failed() { // Sell nft assert_ok!(Content::sell_nft( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), video_id, ContentActor::Member(DEFAULT_MEMBER_ID), DEFAULT_NFT_PRICE, @@ -140,7 +140,7 @@ fn update_buy_now_price_auth_failed() { // Make an attempt to update buy now price with wrong credentials let update_buy_now_price_result = Content::update_buy_now_price( - Origin::signed(UNAUTHORIZED_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(UNAUTHORIZED_MEMBER_ACCOUNT_ID), ContentActor::Member(DEFAULT_MEMBER_ID), video_id, NEW_NFT_PRICE, @@ -165,7 +165,7 @@ fn update_buy_now_price_not_authorized() { // Issue nft assert_ok!(Content::issue_nft( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), ContentActor::Member(DEFAULT_MEMBER_ID), video_id, NftIssuanceParameters::::default(), @@ -173,7 +173,7 @@ fn update_buy_now_price_not_authorized() { // Sell nft assert_ok!(Content::sell_nft( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), video_id, ContentActor::Member(DEFAULT_MEMBER_ID), DEFAULT_NFT_PRICE, @@ -181,7 +181,7 @@ fn update_buy_now_price_not_authorized() { // Make an attempt to update buy now price if actor is not authorized let update_buy_now_price_result = Content::update_buy_now_price( - Origin::signed(SECOND_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(SECOND_MEMBER_ACCOUNT_ID), ContentActor::Member(SECOND_MEMBER_ID), video_id, NEW_NFT_PRICE, @@ -209,7 +209,7 @@ fn update_buy_now_price_not_in_auction_state() { // Issue nft assert_ok!(Content::issue_nft( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), ContentActor::Member(DEFAULT_MEMBER_ID), video_id, NftIssuanceParameters::::default(), @@ -217,7 +217,7 @@ fn update_buy_now_price_not_in_auction_state() { // Make an attempt to update buy now price if there is no pending one let update_buy_now_price_result = Content::update_buy_now_price( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), ContentActor::Member(DEFAULT_MEMBER_ID), video_id, NEW_NFT_PRICE, @@ -244,7 +244,7 @@ fn update_buy_now_price_fails_during_channel_transfer() { assert_noop!( Content::update_buy_now_price( - Origin::signed(DEFAULT_MEMBER_ACCOUNT_ID), + RuntimeOrigin::signed(DEFAULT_MEMBER_ACCOUNT_ID), ContentActor::Member(DEFAULT_MEMBER_ID), 1u64, Content::min_starting_price() + 1, diff --git a/runtime-modules/content/src/tests/nft/update_nft_limit.rs b/runtime-modules/content/src/tests/nft/update_nft_limit.rs index 7bebbb53ef..ac99526f14 100644 --- a/runtime-modules/content/src/tests/nft/update_nft_limit.rs +++ b/runtime-modules/content/src/tests/nft/update_nft_limit.rs @@ -163,7 +163,7 @@ fn toggle_nft_limits_ok_with_event_deposited_and_status_changed() { with_default_mock_builder(|| { run_to_block(1); // nft limits is true by chainspec configuration, changing to false.. - assert_ok!(Content::toggle_nft_limits(Origin::root(), false)); + assert_ok!(Content::toggle_nft_limits(RuntimeOrigin::root(), false)); assert_eq!( System::events().last().unwrap().event, @@ -179,7 +179,7 @@ fn toggle_nft_limits_fails_by_non_root_origin() { run_to_block(1); // nft limits is true by chainspec configuration assert_noop!( - Content::toggle_nft_limits(Origin::signed(LEAD_ACCOUNT_ID), false), + Content::toggle_nft_limits(RuntimeOrigin::signed(LEAD_ACCOUNT_ID), false), DispatchError::BadOrigin, ); }) diff --git a/runtime-modules/content/src/tests/transfers.rs b/runtime-modules/content/src/tests/transfers.rs index e2caed16fe..334a56c736 100644 --- a/runtime-modules/content/src/tests/transfers.rs +++ b/runtime-modules/content/src/tests/transfers.rs @@ -194,6 +194,20 @@ fn initialize_channel_transfer_fails_during_ongoing_token_sales() { }) } +#[test] +fn initialize_channel_transfer_fails_when_amm_is_active() { + with_default_mock_builder(|| { + ContentTest::with_member_channel().setup(); + IssueCreatorTokenFixture::default().call_and_assert(Ok(())); + ActivateAmmFixture::default().call_and_assert(Ok(())); + InitializeChannelTransferFixture::default() + .with_new_member_channel_owner(THIRD_MEMBER_ID) + .call_and_assert(Err( + Error::::ChannelTransfersBlockedDuringActiveAmm.into() + )); + }) +} + #[test] fn initialize_channel_transfer_fails_during_unfinalized_token_sales() { pub const SALE_STARTING_BLOCK: u64 = 10; diff --git a/runtime-modules/content/src/tests/videos.rs b/runtime-modules/content/src/tests/videos.rs index 3a7dc3da68..303a36d0de 100644 --- a/runtime-modules/content/src/tests/videos.rs +++ b/runtime-modules/content/src/tests/videos.rs @@ -429,7 +429,7 @@ fn unsuccessful_video_creation_due_to_bucket_having_insufficient_objects_number_ // Set storage bucket number in the dynamic bag creation policy. assert_eq!( Storage::::update_number_of_storage_buckets_in_dynamic_bag_creation_policy( - Origin::signed(STORAGE_WG_LEADER_ACCOUNT_ID), + RuntimeOrigin::signed(STORAGE_WG_LEADER_ACCOUNT_ID), DynamicBagType::Channel, 1, ), @@ -720,8 +720,8 @@ fn successful_video_update_by_member_with_assets_removal() { create_initial_storage_buckets_helper(); increase_account_balance_helper(DEFAULT_MEMBER_ACCOUNT_ID, INITIAL_BALANCE); create_default_member_owned_channel_with_video(); - let video_assets = ((DATA_OBJECTS_NUMBER as u64)..(2 * DATA_OBJECTS_NUMBER as u64 - 1)) - .collect::>(); + let video_assets = + (DATA_OBJECTS_NUMBER..(2 * DATA_OBJECTS_NUMBER - 1)).collect::>(); UpdateVideoFixture::default() .with_assets_to_remove(video_assets) @@ -737,8 +737,8 @@ fn unsuccessful_video_update_with_pending_channel_transfer() { create_initial_storage_buckets_helper(); increase_account_balance_helper(DEFAULT_MEMBER_ACCOUNT_ID, INITIAL_BALANCE); create_default_member_owned_channel_with_video(); - let video_assets = ((DATA_OBJECTS_NUMBER as u64)..(2 * DATA_OBJECTS_NUMBER as u64 - 1)) - .collect::>(); + let video_assets = + (DATA_OBJECTS_NUMBER..(2 * DATA_OBJECTS_NUMBER - 1)).collect::>(); InitializeChannelTransferFixture::default() .with_new_member_channel_owner(DEFAULT_MEMBER_ID) @@ -778,8 +778,8 @@ fn successful_video_update_by_collaborator_with_assets_removal() { create_default_member_owned_channel_with_video_with_collaborator_permissions(&[ ChannelActionPermission::ManageVideoAssets, ]); - let video_assets = ((DATA_OBJECTS_NUMBER as u64)..(2 * DATA_OBJECTS_NUMBER as u64 - 1)) - .collect::>(); + let video_assets = + (DATA_OBJECTS_NUMBER..(2 * DATA_OBJECTS_NUMBER - 1)).collect::>(); UpdateVideoFixture::default() .with_sender(COLLABORATOR_MEMBER_ACCOUNT_ID) @@ -798,8 +798,8 @@ fn successful_video_update_by_lead_with_assets_removal() { increase_account_balance_helper(DEFAULT_CURATOR_ACCOUNT_ID, INITIAL_BALANCE); increase_account_balance_helper(LEAD_ACCOUNT_ID, INITIAL_BALANCE); create_default_curator_owned_channel_with_video(DEFAULT_DATA_OBJECT_STATE_BLOAT_BOND, &[]); - let video_assets = ((DATA_OBJECTS_NUMBER as u64)..(2 * DATA_OBJECTS_NUMBER as u64 - 1)) - .collect::>(); + let video_assets = + (DATA_OBJECTS_NUMBER..(2 * DATA_OBJECTS_NUMBER - 1)).collect::>(); UpdateVideoFixture::default() .with_sender(LEAD_ACCOUNT_ID) @@ -817,8 +817,8 @@ fn successful_video_update_by_curator_with_assets_removal() { .with_agent_permissions(&[ChannelActionPermission::ManageVideoAssets]) .setup(); - let video_assets = ((DATA_OBJECTS_NUMBER as u64)..(2 * DATA_OBJECTS_NUMBER as u64 - 1)) - .collect::>(); + let video_assets = + (DATA_OBJECTS_NUMBER..(2 * DATA_OBJECTS_NUMBER - 1)).collect::>(); UpdateVideoFixture::default() .with_sender(DEFAULT_CURATOR_ACCOUNT_ID) @@ -1152,8 +1152,8 @@ fn unsuccessful_video_update_with_assets_to_remove_and_invalid_storage_buckets_n with_default_mock_builder(|| { ContentTest::with_member_channel().with_video().setup(); - let video_assets = ((DATA_OBJECTS_NUMBER as u64)..(2 * DATA_OBJECTS_NUMBER as u64 - 1)) - .collect::>(); + let video_assets = + (DATA_OBJECTS_NUMBER..(2 * DATA_OBJECTS_NUMBER - 1)).collect::>(); UpdateVideoFixture::default() .with_assets_to_remove(video_assets) @@ -1169,8 +1169,8 @@ fn unsuccessful_video_update_with_assets_to_remove_and_missing_storage_buckets_n with_default_mock_builder(|| { ContentTest::with_member_channel().with_video().setup(); - let video_assets = ((DATA_OBJECTS_NUMBER as u64)..(2 * DATA_OBJECTS_NUMBER as u64 - 1)) - .collect::>(); + let video_assets = + (DATA_OBJECTS_NUMBER..(2 * DATA_OBJECTS_NUMBER - 1)).collect::>(); UpdateVideoFixture::default() .with_assets_to_remove(video_assets) @@ -1729,207 +1729,6 @@ fn nft_test_helper_for_exceeded_limit_on_updating_video( .call_and_assert(Err(expected_error.into())); } -#[test] -fn unsuccessful_moderation_action_video_deletion_by_actors_with_auth_failure() { - with_default_mock_builder(|| { - run_to_block(1); - - create_initial_storage_buckets_helper(); - increase_account_balance_helper(DEFAULT_MEMBER_ACCOUNT_ID, INITIAL_BALANCE); - create_default_member_owned_channel_with_video(); - - let curator_group_id = curators::create_curator_group(BTreeMap::new()); - - // Member - invalid sender - DeleteVideoAsModeratorFixture::default() - .with_sender(UNAUTHORIZED_MEMBER_ACCOUNT_ID) - .with_actor(ContentActor::Member(DEFAULT_MEMBER_ID)) - .call_and_assert(Err(Error::::MemberAuthFailed.into())); - - // Curator - invalid sender - DeleteVideoAsModeratorFixture::default() - .with_sender(UNAUTHORIZED_CURATOR_ACCOUNT_ID) - .with_actor(ContentActor::Curator(curator_group_id, DEFAULT_CURATOR_ID)) - .call_and_assert(Err(Error::::CuratorAuthFailed.into())); - - // Curator - invalid group - DeleteVideoAsModeratorFixture::default() - .with_sender(DEFAULT_CURATOR_ACCOUNT_ID) - .with_actor(ContentActor::Curator(curator_group_id, DEFAULT_CURATOR_ID)) - .call_and_assert(Err( - Error::::CuratorIsNotAMemberOfGivenCuratorGroup.into() - )); - - // Lead - invalid sender - DeleteVideoAsModeratorFixture::default() - .with_sender(UNAUTHORIZED_LEAD_ACCOUNT_ID) - .with_actor(ContentActor::Lead) - .call_and_assert(Err(Error::::LeadAuthFailed.into())); - }) -} - -#[test] -fn unsuccessful_moderation_action_video_deletion_by_member() { - with_default_mock_builder(|| { - run_to_block(1); - - create_initial_storage_buckets_helper(); - increase_account_balance_helper(DEFAULT_MEMBER_ACCOUNT_ID, INITIAL_BALANCE); - create_default_member_owned_channel_with_video(); - - DeleteVideoAsModeratorFixture::default() - .with_sender(DEFAULT_MEMBER_ACCOUNT_ID) - .with_actor(ContentActor::Member(DEFAULT_MEMBER_ID)) - .call_and_assert(Err(Error::::ActorNotAuthorized.into())); - }) -} - -#[test] -fn unsuccessful_moderation_action_video_deletion_by_curator_with_no_permissions() { - with_default_mock_builder(|| { - run_to_block(1); - - create_initial_storage_buckets_helper(); - increase_account_balance_helper(DEFAULT_MEMBER_ACCOUNT_ID, INITIAL_BALANCE); - create_default_member_owned_channel_with_video(); - - let curator_group_id = curators::add_curator_to_new_group(DEFAULT_CURATOR_ID, &[]); - - DeleteVideoAsModeratorFixture::default() - .with_sender(DEFAULT_CURATOR_ACCOUNT_ID) - .with_actor(ContentActor::Curator(curator_group_id, DEFAULT_CURATOR_ID)) - .call_and_assert(Err(Error::::CuratorModerationActionNotAllowed.into())); - }) -} - -#[test] -fn unsuccessful_moderation_action_nft_video_deletion_by_curator() { - with_default_mock_builder(|| { - // Run to block one to see emitted events - run_to_block(1); - - create_initial_storage_buckets_helper(); - increase_account_balance_helper(DEFAULT_MEMBER_ACCOUNT_ID, INITIAL_BALANCE); - create_default_member_owned_channel_with_video_with_nft(); - - let curator_group_id = curators::add_curator_to_new_group_with_permissions( - DEFAULT_CURATOR_ID, - BTreeMap::from_iter(vec![( - 0, - BTreeSet::from_iter(vec![ContentModerationAction::DeleteVideo]), - )]), - ); - - DeleteVideoAsModeratorFixture::default() - .with_sender(DEFAULT_CURATOR_ACCOUNT_ID) - .with_actor(ContentActor::Curator(curator_group_id, DEFAULT_CURATOR_ID)) - .call_and_assert(Err(Error::::NftAlreadyExists.into())); - }) -} - -#[test] -fn unsuccessful_moderation_action_nft_video_deletion_by_lead() { - with_default_mock_builder(|| { - // Run to block one to see emitted events - run_to_block(1); - - create_initial_storage_buckets_helper(); - increase_account_balance_helper(DEFAULT_MEMBER_ACCOUNT_ID, INITIAL_BALANCE); - create_default_member_owned_channel_with_video_with_nft(); - - DeleteVideoAsModeratorFixture::default() - .with_sender(LEAD_ACCOUNT_ID) - .with_actor(ContentActor::Lead) - .call_and_assert(Err(Error::::NftAlreadyExists.into())); - }) -} - -#[test] -fn unsuccessful_moderation_action_video_deletion_by_curator_with_invalid_storage_buckets_num_witness( -) { - with_default_mock_builder(|| { - ContentTest::with_member_channel().with_video().setup(); - - let curator_group_id = curators::add_curator_to_new_group_with_permissions( - DEFAULT_CURATOR_ID, - BTreeMap::from_iter(vec![( - 0, - BTreeSet::from_iter(vec![ContentModerationAction::DeleteVideo]), - )]), - ); - - DeleteVideoAsModeratorFixture::default() - .with_sender(DEFAULT_CURATOR_ACCOUNT_ID) - .with_actor(ContentActor::Curator(curator_group_id, DEFAULT_CURATOR_ID)) - .with_storage_buckets_num_witness(Some(0)) - .call_and_assert(Err( - Error::::InvalidStorageBucketsNumWitnessProvided.into() - )); - }) -} - -#[test] -fn unsuccessful_moderation_action_video_deletion_by_curator_with_missing_storage_buckets_num_witness( -) { - with_default_mock_builder(|| { - ContentTest::with_member_channel().with_video().setup(); - - let curator_group_id = curators::add_curator_to_new_group_with_permissions( - DEFAULT_CURATOR_ID, - BTreeMap::from_iter(vec![( - 0, - BTreeSet::from_iter(vec![ContentModerationAction::DeleteVideo]), - )]), - ); - - DeleteVideoAsModeratorFixture::default() - .with_sender(DEFAULT_CURATOR_ACCOUNT_ID) - .with_actor(ContentActor::Curator(curator_group_id, DEFAULT_CURATOR_ID)) - .with_storage_buckets_num_witness(None) - .call_and_assert(Err(Error::::MissingStorageBucketsNumWitness.into())); - }) -} - -#[test] -fn successful_moderation_action_video_deletion_by_curator() { - with_default_mock_builder(|| { - run_to_block(1); - - create_initial_storage_buckets_helper(); - increase_account_balance_helper(DEFAULT_MEMBER_ACCOUNT_ID, INITIAL_BALANCE); - create_default_member_owned_channel_with_video(); - - let curator_group_id = curators::add_curator_to_new_group_with_permissions( - DEFAULT_CURATOR_ID, - BTreeMap::from_iter(vec![( - 0, - BTreeSet::from_iter(vec![ContentModerationAction::DeleteVideo]), - )]), - ); - - DeleteVideoAsModeratorFixture::default() - .with_sender(DEFAULT_CURATOR_ACCOUNT_ID) - .with_actor(ContentActor::Curator(curator_group_id, DEFAULT_CURATOR_ID)) - .call_and_assert(Ok(())); - }) -} - -#[test] -fn successful_moderation_action_video_deletion_by_lead() { - with_default_mock_builder(|| { - run_to_block(1); - - create_initial_storage_buckets_helper(); - increase_account_balance_helper(DEFAULT_MEMBER_ACCOUNT_ID, INITIAL_BALANCE); - create_default_member_owned_channel_with_video(); - - DeleteVideoAsModeratorFixture::default() - .with_sender(LEAD_ACCOUNT_ID) - .with_actor(ContentActor::Lead) - .call_and_assert(Ok(())); - }) -} - #[test] fn unsuccessful_moderation_action_video_visibility_change_by_actors_with_auth_failure() { with_default_mock_builder(|| { diff --git a/runtime-modules/content/src/types.rs b/runtime-modules/content/src/types.rs index 1a4bb8aaf9..4fbba459a9 100644 --- a/runtime-modules/content/src/types.rs +++ b/runtime-modules/content/src/types.rs @@ -203,10 +203,10 @@ pub mod iterable_enums { /// Allows updating channel transfer status through `update_channel_transfer_status` tx TransferChannel, /// Allows claiming channel reward through `claim_channel_reward` tx - // or `claim_and_withdraw_channel_reward` tx (provided `WithdrawFromChannelBalance` permission is also granted) + // (provided `WithdrawFromChannelBalance` permission is also granted) ClaimChannelReward, // Allows the agent to trigger channel balance withdrawal through `withdraw_from_channel_balance` tx - // or `claim_and_withdraw_channel_reward` tx (provided `ClaimChannelReward` permission is also granted). + // (provided `ClaimChannelReward` permission is also granted). // The withdrawal always goes to the channel owner member controller account (for member channels) / // the council budget (curator channels) WithdrawFromChannelBalance, @@ -238,6 +238,10 @@ pub mod iterable_enums { /// Allows deissuing a creator token (provided it has 0 supply) /// - `deissue_creator_token` DeissueCreatorToken, + /// Allow activating/deactivating the AMM functionality for a token, + /// - activate_amm + /// - deactivate_amm + AmmControl, } } diff --git a/runtime-modules/content/src/weights.rs b/runtime-modules/content/src/weights.rs index 14274298b4..96020124b9 100644 --- a/runtime-modules/content/src/weights.rs +++ b/runtime-modules/content/src/weights.rs @@ -18,22 +18,21 @@ //! Autogenerated weights for content //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-10-20, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("dev"), DB CACHE: 1024 +//! DATE: 2023-11-07, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("prod-test"), DB CACHE: 1024 // Executed Command: -// ./../target/release/joystream-node +// ./scripts/../target/release/joystream-node // benchmark // pallet -// --base-path=/mnt/disks/local-ssd/ // --pallet=content // --extrinsic=* -// --chain=dev +// --chain=prod-test // --steps=50 // --repeat=20 // --execution=wasm -// --template=./../devops/joystream-pallet-weight-template.hbs -// --output=./../runtime-modules/content/src/weights.rs +// --template=./scripts/../devops/joystream-pallet-weight-template.hbs +// --output=./scripts/../runtime-modules/content/src/weights.rs #![cfg_attr(rustfmt, rustfmt_skip)] #![allow(unused_parens)] @@ -52,11 +51,8 @@ pub trait WeightInfo { fn update_channel_privilege_level() -> Weight; fn set_channel_paused_features_as_moderator(_a: u32, ) -> Weight; fn delete_channel_assets_as_moderator(_a: u32, _b: u32, _c: u32, ) -> Weight; - fn delete_channel_as_moderator(_a: u32, _b: u32, _c: u32, _d: u32, ) -> Weight; fn set_channel_visibility_as_moderator(_a: u32, ) -> Weight; fn delete_video_assets_as_moderator(_a: u32, _b: u32, _c: u32, ) -> Weight; - fn delete_video_as_moderator_with_assets(_a: u32, _b: u32, _c: u32, ) -> Weight; - fn delete_video_as_moderator_without_assets(_a: u32, ) -> Weight; fn set_video_visibility_as_moderator(_a: u32, ) -> Weight; fn create_curator_group(_a: u32, ) -> Weight; fn update_curator_group_permissions(_a: u32, ) -> Weight; @@ -83,6 +79,8 @@ pub trait WeightInfo { fn init_creator_token_sale(_a: u32, ) -> Weight; fn update_upcoming_creator_token_sale() -> Weight; fn finalize_creator_token_sale() -> Weight; + fn activate_amm() -> Weight; + fn deactivate_amm() -> Weight; fn issue_revenue_split() -> Weight; fn issue_revenue_split_as_collaborator() -> Weight; fn finalize_revenue_split() -> Weight; @@ -92,8 +90,6 @@ pub trait WeightInfo { fn withdraw_from_curator_channel_balance() -> Weight; fn withdraw_from_member_channel_balance() -> Weight; fn claim_channel_reward(_h: u32, ) -> Weight; - fn claim_and_withdraw_member_channel_reward(_h: u32, ) -> Weight; - fn claim_and_withdraw_curator_channel_reward(_h: u32, ) -> Weight; fn issue_nft(_w: u32, _b: u32, ) -> Weight; fn destroy_nft() -> Weight; fn sling_nft_back() -> Weight; @@ -121,1348 +117,2266 @@ pub trait WeightInfo { fn nft_owner_remark(_b: u32, ) -> Weight; fn update_channel_state_bloat_bond() -> Weight; fn update_video_state_bloat_bond() -> Weight; + fn creator_token_issuer_remark(_b: u32, ) -> Weight; } /// Weights for content using the Substrate node and recommended hardware. pub struct SubstrateWeight(PhantomData); impl WeightInfo for SubstrateWeight { // Storage: Instance3WorkingGroup CurrentLead (r:1 w:0) + // Proof: Instance3WorkingGroup CurrentLead (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) // Storage: Instance3WorkingGroup WorkerById (r:1 w:0) + // Proof: Instance3WorkingGroup WorkerById (max_values: None, max_size: Some(175), added: 2650, mode: MaxEncodedLen) // Storage: Content ChannelStateBloatBondValue (r:1 w:0) + // Proof: Content ChannelStateBloatBondValue (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) // Storage: Content CuratorGroupById (r:1 w:0) - // Storage: Membership MembershipById (r:1 w:0) + // Proof: Content CuratorGroupById (max_values: None, max_size: Some(1037), added: 3512, mode: MaxEncodedLen) + // Storage: Membership MembershipById (r:10 w:0) + // Proof: Membership MembershipById (max_values: None, max_size: Some(125), added: 2600, mode: MaxEncodedLen) // Storage: Content NextChannelId (r:1 w:1) + // Proof: Content NextChannelId (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) // Storage: Storage DataObjectStateBloatBondValue (r:1 w:0) + // Proof: Storage DataObjectStateBloatBondValue (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) // Storage: Storage DataObjectPerMegabyteFee (r:1 w:0) + // Proof: Storage DataObjectPerMegabyteFee (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) // Storage: System Account (r:3 w:3) + // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) // Storage: Storage DynamicBagCreationPolicies (r:1 w:0) + // Proof: Storage DynamicBagCreationPolicies (max_values: None, max_size: Some(634), added: 3109, mode: MaxEncodedLen) // Storage: Storage StorageBucketById (r:13 w:13) + // Proof: Storage StorageBucketById (max_values: None, max_size: Some(106), added: 2581, mode: MaxEncodedLen) // Storage: Storage DistributionBucketByFamilyIdById (r:51 w:51) + // Proof: Storage DistributionBucketByFamilyIdById (max_values: None, max_size: Some(380), added: 2855, mode: MaxEncodedLen) // Storage: Storage UploadingBlocked (r:1 w:0) + // Proof: Storage UploadingBlocked (max_values: Some(1), max_size: Some(1), added: 496, mode: MaxEncodedLen) // Storage: Storage Blacklist (r:1 w:0) + // Proof: Storage Blacklist (max_values: None, max_size: Some(63), added: 2538, mode: MaxEncodedLen) // Storage: Storage Bags (r:1 w:1) + // Proof: Storage Bags (max_values: None, max_size: Some(964), added: 3439, mode: MaxEncodedLen) // Storage: Storage NextDataObjectId (r:1 w:1) + // Proof: Storage NextDataObjectId (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) // Storage: Storage DataObjectsById (r:0 w:10) + // Proof: Storage DataObjectsById (max_values: None, max_size: Some(155), added: 2630, mode: MaxEncodedLen) // Storage: Content ChannelById (r:0 w:1) + // Proof: Content ChannelById (max_values: None, max_size: Some(909), added: 3384, mode: MaxEncodedLen) + /// The range of component `a` is `[1, 10]`. + /// The range of component `b` is `[1, 13]`. + /// The range of component `c` is `[1, 51]`. + /// The range of component `d` is `[1, 10]`. + /// The range of component `e` is `[1, 100]`. fn create_channel(a: u32, b: u32, c: u32, d: u32, e: u32, ) -> Weight { - (463_947_000 as Weight) - // Standard Error: 262_000 - .saturating_add((18_010_000 as Weight).saturating_mul(a as Weight)) - // Standard Error: 227_000 - .saturating_add((31_794_000 as Weight).saturating_mul(b as Weight)) - // Standard Error: 26_000 - .saturating_add((30_073_000 as Weight).saturating_mul(c as Weight)) - // Standard Error: 262_000 - .saturating_add((15_433_000 as Weight).saturating_mul(d as Weight)) - // Standard Error: 11_000 - .saturating_add((634_000 as Weight).saturating_mul(e as Weight)) - .saturating_add(T::DbWeight::get().reads(15 as Weight)) - .saturating_add(T::DbWeight::get().reads((1 as Weight).saturating_mul(a as Weight))) - .saturating_add(T::DbWeight::get().reads((1 as Weight).saturating_mul(b as Weight))) - .saturating_add(T::DbWeight::get().reads((1 as Weight).saturating_mul(c as Weight))) - .saturating_add(T::DbWeight::get().writes(7 as Weight)) - .saturating_add(T::DbWeight::get().writes((1 as Weight).saturating_mul(b as Weight))) - .saturating_add(T::DbWeight::get().writes((1 as Weight).saturating_mul(c as Weight))) - .saturating_add(T::DbWeight::get().writes((1 as Weight).saturating_mul(d as Weight))) + // Proof Size summary in bytes: + // Measured: `2359 + a * (142 ±0) + b * (72 ±0) + c * (40 ±0)` + // Estimated: `42435 + b * (2581 ±0) + c * (2855 ±0) + a * (2600 ±0)` + // Minimum execution time: 621_507 nanoseconds. + Weight::from_parts(210_642_103, 0u64) + .saturating_add(Weight::from_parts(0, 42435)) + // Standard Error: 129_758 + .saturating_add(Weight::from_parts(8_834_085, 0u64).saturating_mul(a.into())) + // Standard Error: 98_356 + .saturating_add(Weight::from_parts(10_719_333, 0u64).saturating_mul(b.into())) + // Standard Error: 24_810 + .saturating_add(Weight::from_parts(11_224_787, 0u64).saturating_mul(c.into())) + // Standard Error: 129_758 + .saturating_add(Weight::from_parts(8_773_476, 0u64).saturating_mul(d.into())) + // Standard Error: 12_569 + .saturating_add(Weight::from_parts(1_071_440, 0u64).saturating_mul(e.into())) + .saturating_add(T::DbWeight::get().reads(15_u64)) + .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(a.into()))) + .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(b.into()))) + .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(c.into()))) + .saturating_add(T::DbWeight::get().writes(7_u64)) + .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(b.into()))) + .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(c.into()))) + .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(d.into()))) + .saturating_add(Weight::from_parts(0, 2581).saturating_mul(b.into())) + .saturating_add(Weight::from_parts(0, 2855).saturating_mul(c.into())) + .saturating_add(Weight::from_parts(0, 2600).saturating_mul(a.into())) } // Storage: Content ChannelById (r:1 w:1) + // Proof: Content ChannelById (max_values: None, max_size: Some(909), added: 3384, mode: MaxEncodedLen) // Storage: Instance3WorkingGroup WorkerById (r:1 w:0) + // Proof: Instance3WorkingGroup WorkerById (max_values: None, max_size: Some(175), added: 2650, mode: MaxEncodedLen) // Storage: Content CuratorGroupById (r:1 w:0) - // Storage: Membership MembershipById (r:1 w:0) + // Proof: Content CuratorGroupById (max_values: None, max_size: Some(1037), added: 3512, mode: MaxEncodedLen) + // Storage: Membership MembershipById (r:10 w:0) + // Proof: Membership MembershipById (max_values: None, max_size: Some(125), added: 2600, mode: MaxEncodedLen) // Storage: Storage Bags (r:1 w:1) + // Proof: Storage Bags (max_values: None, max_size: Some(964), added: 3439, mode: MaxEncodedLen) // Storage: Storage DataObjectPerMegabyteFee (r:1 w:0) + // Proof: Storage DataObjectPerMegabyteFee (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) // Storage: Storage DataObjectStateBloatBondValue (r:1 w:0) + // Proof: Storage DataObjectStateBloatBondValue (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) // Storage: Storage UploadingBlocked (r:1 w:0) + // Proof: Storage UploadingBlocked (max_values: Some(1), max_size: Some(1), added: 496, mode: MaxEncodedLen) // Storage: Storage Blacklist (r:1 w:0) + // Proof: Storage Blacklist (max_values: None, max_size: Some(63), added: 2538, mode: MaxEncodedLen) // Storage: Storage DataObjectsById (r:10 w:20) + // Proof: Storage DataObjectsById (max_values: None, max_size: Some(155), added: 2630, mode: MaxEncodedLen) // Storage: Storage StorageBucketById (r:13 w:13) + // Proof: Storage StorageBucketById (max_values: None, max_size: Some(106), added: 2581, mode: MaxEncodedLen) // Storage: System Account (r:12 w:12) + // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) // Storage: Storage NextDataObjectId (r:1 w:1) + // Proof: Storage NextDataObjectId (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) + /// The range of component `a` is `[1, 10]`. + /// The range of component `b` is `[1, 10]`. + /// The range of component `c` is `[1, 10]`. + /// The range of component `d` is `[1, 100]`. + /// The range of component `e` is `[1, 13]`. fn channel_update_with_assets(a: u32, b: u32, c: u32, d: u32, e: u32, ) -> Weight { - (604_768_000 as Weight) - // Standard Error: 191_000 - .saturating_add((18_531_000 as Weight).saturating_mul(a as Weight)) - // Standard Error: 191_000 - .saturating_add((18_335_000 as Weight).saturating_mul(b as Weight)) - // Standard Error: 191_000 - .saturating_add((70_468_000 as Weight).saturating_mul(c as Weight)) - // Standard Error: 8_000 - .saturating_add((786_000 as Weight).saturating_mul(d as Weight)) - // Standard Error: 166_000 - .saturating_add((28_887_000 as Weight).saturating_mul(e as Weight)) - .saturating_add(T::DbWeight::get().reads(11 as Weight)) - .saturating_add(T::DbWeight::get().reads((1 as Weight).saturating_mul(a as Weight))) - .saturating_add(T::DbWeight::get().reads((2 as Weight).saturating_mul(c as Weight))) - .saturating_add(T::DbWeight::get().reads((1 as Weight).saturating_mul(e as Weight))) - .saturating_add(T::DbWeight::get().writes(5 as Weight)) - .saturating_add(T::DbWeight::get().writes((1 as Weight).saturating_mul(b as Weight))) - .saturating_add(T::DbWeight::get().writes((2 as Weight).saturating_mul(c as Weight))) - .saturating_add(T::DbWeight::get().writes((1 as Weight).saturating_mul(e as Weight))) + // Proof Size summary in bytes: + // Measured: `4598 + a * (149 ±0) + c * (326 ±0) + e * (80 ±0)` + // Estimated: `35620 + c * (5233 ±0) + a * (2600 ±0) + e * (2581 ±0)` + // Minimum execution time: 706_659 nanoseconds. + Weight::from_parts(274_397_316, 0u64) + .saturating_add(Weight::from_parts(0, 35620)) + // Standard Error: 131_376 + .saturating_add(Weight::from_parts(6_835_997, 0u64).saturating_mul(a.into())) + // Standard Error: 131_376 + .saturating_add(Weight::from_parts(9_338_842, 0u64).saturating_mul(b.into())) + // Standard Error: 131_376 + .saturating_add(Weight::from_parts(28_441_008, 0u64).saturating_mul(c.into())) + // Standard Error: 12_725 + .saturating_add(Weight::from_parts(1_205_459, 0u64).saturating_mul(d.into())) + // Standard Error: 99_577 + .saturating_add(Weight::from_parts(10_265_414, 0u64).saturating_mul(e.into())) + .saturating_add(T::DbWeight::get().reads(11_u64)) + .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(a.into()))) + .saturating_add(T::DbWeight::get().reads((2_u64).saturating_mul(c.into()))) + .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(e.into()))) + .saturating_add(T::DbWeight::get().writes(5_u64)) + .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(b.into()))) + .saturating_add(T::DbWeight::get().writes((2_u64).saturating_mul(c.into()))) + .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(e.into()))) + .saturating_add(Weight::from_parts(0, 5233).saturating_mul(c.into())) + .saturating_add(Weight::from_parts(0, 2600).saturating_mul(a.into())) + .saturating_add(Weight::from_parts(0, 2581).saturating_mul(e.into())) } // Storage: Content ChannelById (r:1 w:1) + // Proof: Content ChannelById (max_values: None, max_size: Some(909), added: 3384, mode: MaxEncodedLen) // Storage: Instance3WorkingGroup WorkerById (r:1 w:0) + // Proof: Instance3WorkingGroup WorkerById (max_values: None, max_size: Some(175), added: 2650, mode: MaxEncodedLen) // Storage: Content CuratorGroupById (r:1 w:0) - // Storage: Membership MembershipById (r:1 w:0) + // Proof: Content CuratorGroupById (max_values: None, max_size: Some(1037), added: 3512, mode: MaxEncodedLen) + // Storage: Membership MembershipById (r:10 w:0) + // Proof: Membership MembershipById (max_values: None, max_size: Some(125), added: 2600, mode: MaxEncodedLen) + /// The range of component `a` is `[1, 10]`. + /// The range of component `b` is `[1, 100]`. fn channel_update_without_assets(a: u32, b: u32, ) -> Weight { - (370_489_000 as Weight) - // Standard Error: 85_000 - .saturating_add((18_862_000 as Weight).saturating_mul(a as Weight)) - // Standard Error: 4_000 - .saturating_add((706_000 as Weight).saturating_mul(b as Weight)) - .saturating_add(T::DbWeight::get().reads(3 as Weight)) - .saturating_add(T::DbWeight::get().reads((1 as Weight).saturating_mul(a as Weight))) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + // Proof Size summary in bytes: + // Measured: `3310 + a * (149 ±0)` + // Estimated: `13506 + a * (2600 ±0)` + // Minimum execution time: 238_614 nanoseconds. + Weight::from_parts(172_503_748, 0u64) + .saturating_add(Weight::from_parts(0, 13506)) + // Standard Error: 56_870 + .saturating_add(Weight::from_parts(6_948_603, 0u64).saturating_mul(a.into())) + // Standard Error: 5_484 + .saturating_add(Weight::from_parts(896_859, 0u64).saturating_mul(b.into())) + .saturating_add(T::DbWeight::get().reads(3_u64)) + .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(a.into()))) + .saturating_add(T::DbWeight::get().writes(1_u64)) + .saturating_add(Weight::from_parts(0, 2600).saturating_mul(a.into())) } // Storage: Content ChannelById (r:1 w:1) + // Proof: Content ChannelById (max_values: None, max_size: Some(909), added: 3384, mode: MaxEncodedLen) // Storage: Storage Bags (r:1 w:1) + // Proof: Storage Bags (max_values: None, max_size: Some(964), added: 3439, mode: MaxEncodedLen) // Storage: Instance3WorkingGroup WorkerById (r:1 w:0) + // Proof: Instance3WorkingGroup WorkerById (max_values: None, max_size: Some(175), added: 2650, mode: MaxEncodedLen) // Storage: Content CuratorGroupById (r:1 w:0) - // Storage: Storage DataObjectsById (r:2 w:1) + // Proof: Content CuratorGroupById (max_values: None, max_size: Some(1037), added: 3512, mode: MaxEncodedLen) + // Storage: Storage DataObjectsById (r:11 w:10) + // Proof: Storage DataObjectsById (max_values: None, max_size: Some(155), added: 2630, mode: MaxEncodedLen) // Storage: Storage StorageBucketById (r:13 w:13) + // Proof: Storage StorageBucketById (max_values: None, max_size: Some(106), added: 2581, mode: MaxEncodedLen) // Storage: Storage DistributionBucketByFamilyIdById (r:51 w:51) - // Storage: System Account (r:4 w:4) + // Proof: Storage DistributionBucketByFamilyIdById (max_values: None, max_size: Some(380), added: 2855, mode: MaxEncodedLen) + // Storage: System Account (r:13 w:13) + // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + /// The range of component `a` is `[1, 10]`. + /// The range of component `b` is `[1, 13]`. + /// The range of component `c` is `[1, 51]`. fn delete_channel(a: u32, b: u32, c: u32, ) -> Weight { - (504_219_000 as Weight) - // Standard Error: 377_000 - .saturating_add((70_080_000 as Weight).saturating_mul(a as Weight)) - // Standard Error: 329_000 - .saturating_add((26_378_000 as Weight).saturating_mul(b as Weight)) - // Standard Error: 45_000 - .saturating_add((21_866_000 as Weight).saturating_mul(c as Weight)) - .saturating_add(T::DbWeight::get().reads(8 as Weight)) - .saturating_add(T::DbWeight::get().reads((2 as Weight).saturating_mul(a as Weight))) - .saturating_add(T::DbWeight::get().reads((1 as Weight).saturating_mul(b as Weight))) - .saturating_add(T::DbWeight::get().reads((1 as Weight).saturating_mul(c as Weight))) - .saturating_add(T::DbWeight::get().writes(5 as Weight)) - .saturating_add(T::DbWeight::get().writes((2 as Weight).saturating_mul(a as Weight))) - .saturating_add(T::DbWeight::get().writes((1 as Weight).saturating_mul(b as Weight))) - .saturating_add(T::DbWeight::get().writes((1 as Weight).saturating_mul(c as Weight))) + // Proof Size summary in bytes: + // Measured: `4046 + a * (344 ±0) + b * (80 ±0) + c * (56 ±0)` + // Estimated: `31344 + b * (2581 ±0) + c * (2855 ±0) + a * (5233 ±0)` + // Minimum execution time: 614_829 nanoseconds. + Weight::from_parts(272_852_687, 0u64) + .saturating_add(Weight::from_parts(0, 31344)) + // Standard Error: 123_273 + .saturating_add(Weight::from_parts(23_838_451, 0u64).saturating_mul(a.into())) + // Standard Error: 93_322 + .saturating_add(Weight::from_parts(9_637_387, 0u64).saturating_mul(b.into())) + // Standard Error: 23_523 + .saturating_add(Weight::from_parts(7_659_910, 0u64).saturating_mul(c.into())) + .saturating_add(T::DbWeight::get().reads(8_u64)) + .saturating_add(T::DbWeight::get().reads((2_u64).saturating_mul(a.into()))) + .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(b.into()))) + .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(c.into()))) + .saturating_add(T::DbWeight::get().writes(5_u64)) + .saturating_add(T::DbWeight::get().writes((2_u64).saturating_mul(a.into()))) + .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(b.into()))) + .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(c.into()))) + .saturating_add(Weight::from_parts(0, 2581).saturating_mul(b.into())) + .saturating_add(Weight::from_parts(0, 2855).saturating_mul(c.into())) + .saturating_add(Weight::from_parts(0, 5233).saturating_mul(a.into())) } // Storage: Instance3WorkingGroup CurrentLead (r:1 w:0) + // Proof: Instance3WorkingGroup CurrentLead (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) // Storage: Instance3WorkingGroup WorkerById (r:1 w:0) + // Proof: Instance3WorkingGroup WorkerById (max_values: None, max_size: Some(175), added: 2650, mode: MaxEncodedLen) // Storage: Content ChannelById (r:1 w:1) + // Proof: Content ChannelById (max_values: None, max_size: Some(909), added: 3384, mode: MaxEncodedLen) fn update_channel_privilege_level() -> Weight { - (226_269_000 as Weight) - .saturating_add(T::DbWeight::get().reads(3 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + // Proof Size summary in bytes: + // Measured: `2020` + // Estimated: `9507` + // Minimum execution time: 102_362 nanoseconds. + Weight::from_parts(104_914_000, 0u64) + .saturating_add(Weight::from_parts(0, 9507)) + .saturating_add(T::DbWeight::get().reads(3_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) } // Storage: Content ChannelById (r:1 w:1) + // Proof: Content ChannelById (max_values: None, max_size: Some(909), added: 3384, mode: MaxEncodedLen) // Storage: Instance3WorkingGroup WorkerById (r:1 w:0) + // Proof: Instance3WorkingGroup WorkerById (max_values: None, max_size: Some(175), added: 2650, mode: MaxEncodedLen) // Storage: Content CuratorGroupById (r:1 w:0) + // Proof: Content CuratorGroupById (max_values: None, max_size: Some(1037), added: 3512, mode: MaxEncodedLen) + /// The range of component `a` is `[1, 100]`. fn set_channel_paused_features_as_moderator(a: u32, ) -> Weight { - (417_835_000 as Weight) - // Standard Error: 6_000 - .saturating_add((690_000 as Weight).saturating_mul(a as Weight)) - .saturating_add(T::DbWeight::get().reads(3 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + // Proof Size summary in bytes: + // Measured: `3013` + // Estimated: `12516` + // Minimum execution time: 177_661 nanoseconds. + Weight::from_parts(181_872_435, 0u64) + .saturating_add(Weight::from_parts(0, 12516)) + // Standard Error: 7_676 + .saturating_add(Weight::from_parts(820_023, 0u64).saturating_mul(a.into())) + .saturating_add(T::DbWeight::get().reads(3_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) } // Storage: Content ChannelById (r:1 w:1) + // Proof: Content ChannelById (max_values: None, max_size: Some(909), added: 3384, mode: MaxEncodedLen) // Storage: Instance3WorkingGroup WorkerById (r:1 w:0) + // Proof: Instance3WorkingGroup WorkerById (max_values: None, max_size: Some(175), added: 2650, mode: MaxEncodedLen) // Storage: Content CuratorGroupById (r:1 w:0) + // Proof: Content CuratorGroupById (max_values: None, max_size: Some(1037), added: 3512, mode: MaxEncodedLen) // Storage: Storage Bags (r:1 w:1) + // Proof: Storage Bags (max_values: None, max_size: Some(964), added: 3439, mode: MaxEncodedLen) // Storage: Storage DataObjectStateBloatBondValue (r:1 w:0) - // Storage: Storage DataObjectsById (r:1 w:1) + // Proof: Storage DataObjectStateBloatBondValue (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) + // Storage: Storage DataObjectsById (r:10 w:10) + // Proof: Storage DataObjectsById (max_values: None, max_size: Some(155), added: 2630, mode: MaxEncodedLen) // Storage: Storage DataObjectPerMegabyteFee (r:1 w:0) + // Proof: Storage DataObjectPerMegabyteFee (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) // Storage: Storage StorageBucketById (r:13 w:13) - // Storage: System Account (r:2 w:2) + // Proof: Storage StorageBucketById (max_values: None, max_size: Some(106), added: 2581, mode: MaxEncodedLen) + // Storage: System Account (r:11 w:11) + // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + /// The range of component `a` is `[1, 10]`. + /// The range of component `b` is `[1, 13]`. + /// The range of component `c` is `[1, 100]`. fn delete_channel_assets_as_moderator(a: u32, b: u32, c: u32, ) -> Weight { - (510_662_000 as Weight) - // Standard Error: 157_000 - .saturating_add((68_791_000 as Weight).saturating_mul(a as Weight)) - // Standard Error: 137_000 - .saturating_add((27_409_000 as Weight).saturating_mul(b as Weight)) - // Standard Error: 7_000 - .saturating_add((698_000 as Weight).saturating_mul(c as Weight)) - .saturating_add(T::DbWeight::get().reads(7 as Weight)) - .saturating_add(T::DbWeight::get().reads((2 as Weight).saturating_mul(a as Weight))) - .saturating_add(T::DbWeight::get().reads((1 as Weight).saturating_mul(b as Weight))) - .saturating_add(T::DbWeight::get().writes(3 as Weight)) - .saturating_add(T::DbWeight::get().writes((2 as Weight).saturating_mul(a as Weight))) - .saturating_add(T::DbWeight::get().writes((1 as Weight).saturating_mul(b as Weight))) - } - // Storage: Content ChannelById (r:1 w:1) - // Storage: Storage Bags (r:1 w:1) - // Storage: Instance3WorkingGroup WorkerById (r:1 w:0) - // Storage: Content CuratorGroupById (r:1 w:0) - // Storage: Storage DataObjectsById (r:2 w:1) - // Storage: Storage StorageBucketById (r:13 w:13) - // Storage: Storage DistributionBucketByFamilyIdById (r:51 w:51) - // Storage: System Account (r:3 w:3) - fn delete_channel_as_moderator(a: u32, b: u32, c: u32, d: u32, ) -> Weight { - (430_842_000 as Weight) - // Standard Error: 337_000 - .saturating_add((73_406_000 as Weight).saturating_mul(a as Weight)) - // Standard Error: 292_000 - .saturating_add((29_563_000 as Weight).saturating_mul(b as Weight)) - // Standard Error: 34_000 - .saturating_add((22_069_000 as Weight).saturating_mul(c as Weight)) - // Standard Error: 15_000 - .saturating_add((474_000 as Weight).saturating_mul(d as Weight)) - .saturating_add(T::DbWeight::get().reads(7 as Weight)) - .saturating_add(T::DbWeight::get().reads((2 as Weight).saturating_mul(a as Weight))) - .saturating_add(T::DbWeight::get().reads((1 as Weight).saturating_mul(b as Weight))) - .saturating_add(T::DbWeight::get().reads((1 as Weight).saturating_mul(c as Weight))) - .saturating_add(T::DbWeight::get().writes(4 as Weight)) - .saturating_add(T::DbWeight::get().writes((2 as Weight).saturating_mul(a as Weight))) - .saturating_add(T::DbWeight::get().writes((1 as Weight).saturating_mul(b as Weight))) - .saturating_add(T::DbWeight::get().writes((1 as Weight).saturating_mul(c as Weight))) + // Proof Size summary in bytes: + // Measured: `4498 + a * (344 ±0) + b * (80 ±0)` + // Estimated: `25520 + a * (5233 ±0) + b * (2581 ±0)` + // Minimum execution time: 501_180 nanoseconds. + Weight::from_parts(241_602_893, 0u64) + .saturating_add(Weight::from_parts(0, 25520)) + // Standard Error: 90_276 + .saturating_add(Weight::from_parts(26_858_081, 0u64).saturating_mul(a.into())) + // Standard Error: 68_344 + .saturating_add(Weight::from_parts(9_990_083, 0u64).saturating_mul(b.into())) + // Standard Error: 8_723 + .saturating_add(Weight::from_parts(1_204_366, 0u64).saturating_mul(c.into())) + .saturating_add(T::DbWeight::get().reads(7_u64)) + .saturating_add(T::DbWeight::get().reads((2_u64).saturating_mul(a.into()))) + .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(b.into()))) + .saturating_add(T::DbWeight::get().writes(3_u64)) + .saturating_add(T::DbWeight::get().writes((2_u64).saturating_mul(a.into()))) + .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(b.into()))) + .saturating_add(Weight::from_parts(0, 5233).saturating_mul(a.into())) + .saturating_add(Weight::from_parts(0, 2581).saturating_mul(b.into())) } // Storage: Content ChannelById (r:1 w:0) + // Proof: Content ChannelById (max_values: None, max_size: Some(909), added: 3384, mode: MaxEncodedLen) // Storage: Instance3WorkingGroup WorkerById (r:1 w:0) + // Proof: Instance3WorkingGroup WorkerById (max_values: None, max_size: Some(175), added: 2650, mode: MaxEncodedLen) // Storage: Content CuratorGroupById (r:1 w:0) + // Proof: Content CuratorGroupById (max_values: None, max_size: Some(1037), added: 3512, mode: MaxEncodedLen) + /// The range of component `a` is `[1, 100]`. fn set_channel_visibility_as_moderator(a: u32, ) -> Weight { - (342_786_000 as Weight) - // Standard Error: 6_000 - .saturating_add((771_000 as Weight).saturating_mul(a as Weight)) - .saturating_add(T::DbWeight::get().reads(3 as Weight)) + // Proof Size summary in bytes: + // Measured: `3019` + // Estimated: `12516` + // Minimum execution time: 144_585 nanoseconds. + Weight::from_parts(149_009_851, 0u64) + .saturating_add(Weight::from_parts(0, 12516)) + // Standard Error: 5_929 + .saturating_add(Weight::from_parts(1_047_508, 0u64).saturating_mul(a.into())) + .saturating_add(T::DbWeight::get().reads(3_u64)) } // Storage: Content VideoById (r:1 w:1) + // Proof: Content VideoById (max_values: None, max_size: Some(513), added: 2988, mode: MaxEncodedLen) // Storage: Content ChannelById (r:1 w:0) + // Proof: Content ChannelById (max_values: None, max_size: Some(909), added: 3384, mode: MaxEncodedLen) // Storage: Instance3WorkingGroup WorkerById (r:1 w:0) + // Proof: Instance3WorkingGroup WorkerById (max_values: None, max_size: Some(175), added: 2650, mode: MaxEncodedLen) // Storage: Content CuratorGroupById (r:1 w:0) + // Proof: Content CuratorGroupById (max_values: None, max_size: Some(1037), added: 3512, mode: MaxEncodedLen) // Storage: Storage Bags (r:1 w:1) + // Proof: Storage Bags (max_values: None, max_size: Some(964), added: 3439, mode: MaxEncodedLen) // Storage: Storage DataObjectStateBloatBondValue (r:1 w:0) - // Storage: Storage DataObjectsById (r:1 w:1) + // Proof: Storage DataObjectStateBloatBondValue (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) + // Storage: Storage DataObjectsById (r:20 w:20) + // Proof: Storage DataObjectsById (max_values: None, max_size: Some(155), added: 2630, mode: MaxEncodedLen) // Storage: Storage DataObjectPerMegabyteFee (r:1 w:0) + // Proof: Storage DataObjectPerMegabyteFee (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) // Storage: Storage StorageBucketById (r:13 w:13) - // Storage: System Account (r:2 w:2) + // Proof: Storage StorageBucketById (max_values: None, max_size: Some(106), added: 2581, mode: MaxEncodedLen) + // Storage: System Account (r:21 w:21) + // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + /// The range of component `a` is `[1, 20]`. + /// The range of component `b` is `[1, 13]`. + /// The range of component `c` is `[1, 100]`. fn delete_video_assets_as_moderator(a: u32, b: u32, c: u32, ) -> Weight { - (413_599_000 as Weight) - // Standard Error: 79_000 - .saturating_add((69_041_000 as Weight).saturating_mul(a as Weight)) - // Standard Error: 187_000 - .saturating_add((29_597_000 as Weight).saturating_mul(b as Weight)) - // Standard Error: 10_000 - .saturating_add((738_000 as Weight).saturating_mul(c as Weight)) - .saturating_add(T::DbWeight::get().reads(8 as Weight)) - .saturating_add(T::DbWeight::get().reads((2 as Weight).saturating_mul(a as Weight))) - .saturating_add(T::DbWeight::get().reads((1 as Weight).saturating_mul(b as Weight))) - .saturating_add(T::DbWeight::get().writes(3 as Weight)) - .saturating_add(T::DbWeight::get().writes((2 as Weight).saturating_mul(a as Weight))) - .saturating_add(T::DbWeight::get().writes((1 as Weight).saturating_mul(b as Weight))) - } - // Storage: Content VideoById (r:1 w:1) - // Storage: Content ChannelById (r:1 w:1) - // Storage: Instance3WorkingGroup WorkerById (r:1 w:0) - // Storage: Content CuratorGroupById (r:1 w:0) - // Storage: Storage Bags (r:1 w:1) - // Storage: Storage DataObjectStateBloatBondValue (r:1 w:0) - // Storage: Storage DataObjectsById (r:1 w:1) - // Storage: Storage DataObjectPerMegabyteFee (r:1 w:0) - // Storage: Storage StorageBucketById (r:13 w:13) - // Storage: System Account (r:3 w:3) - fn delete_video_as_moderator_with_assets(a: u32, b: u32, c: u32, ) -> Weight { - (505_700_000 as Weight) - // Standard Error: 77_000 - .saturating_add((67_678_000 as Weight).saturating_mul(a as Weight)) - // Standard Error: 182_000 - .saturating_add((27_205_000 as Weight).saturating_mul(b as Weight)) - // Standard Error: 10_000 - .saturating_add((703_000 as Weight).saturating_mul(c as Weight)) - .saturating_add(T::DbWeight::get().reads(9 as Weight)) - .saturating_add(T::DbWeight::get().reads((2 as Weight).saturating_mul(a as Weight))) - .saturating_add(T::DbWeight::get().reads((1 as Weight).saturating_mul(b as Weight))) - .saturating_add(T::DbWeight::get().writes(5 as Weight)) - .saturating_add(T::DbWeight::get().writes((2 as Weight).saturating_mul(a as Weight))) - .saturating_add(T::DbWeight::get().writes((1 as Weight).saturating_mul(b as Weight))) - } - // Storage: Content VideoById (r:1 w:1) - // Storage: Content ChannelById (r:1 w:1) - // Storage: Instance3WorkingGroup WorkerById (r:1 w:0) - // Storage: Content CuratorGroupById (r:1 w:0) - // Storage: System Account (r:1 w:1) - fn delete_video_as_moderator_without_assets(a: u32, ) -> Weight { - (407_427_000 as Weight) - // Standard Error: 4_000 - .saturating_add((658_000 as Weight).saturating_mul(a as Weight)) - .saturating_add(T::DbWeight::get().reads(5 as Weight)) - .saturating_add(T::DbWeight::get().writes(3 as Weight)) + // Proof Size summary in bytes: + // Measured: `5505 + a * (315 ±0) + b * (80 ±0)` + // Estimated: `29498 + a * (5233 ±0) + b * (2581 ±0)` + // Minimum execution time: 473_493 nanoseconds. + Weight::from_parts(206_085_875, 0u64) + .saturating_add(Weight::from_parts(0, 29498)) + // Standard Error: 59_275 + .saturating_add(Weight::from_parts(27_493_539, 0u64).saturating_mul(a.into())) + // Standard Error: 91_760 + .saturating_add(Weight::from_parts(10_379_672, 0u64).saturating_mul(b.into())) + // Standard Error: 11_712 + .saturating_add(Weight::from_parts(1_271_682, 0u64).saturating_mul(c.into())) + .saturating_add(T::DbWeight::get().reads(8_u64)) + .saturating_add(T::DbWeight::get().reads((2_u64).saturating_mul(a.into()))) + .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(b.into()))) + .saturating_add(T::DbWeight::get().writes(3_u64)) + .saturating_add(T::DbWeight::get().writes((2_u64).saturating_mul(a.into()))) + .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(b.into()))) + .saturating_add(Weight::from_parts(0, 5233).saturating_mul(a.into())) + .saturating_add(Weight::from_parts(0, 2581).saturating_mul(b.into())) } // Storage: Content VideoById (r:1 w:0) + // Proof: Content VideoById (max_values: None, max_size: Some(513), added: 2988, mode: MaxEncodedLen) // Storage: Content ChannelById (r:1 w:0) + // Proof: Content ChannelById (max_values: None, max_size: Some(909), added: 3384, mode: MaxEncodedLen) // Storage: Instance3WorkingGroup WorkerById (r:1 w:0) + // Proof: Instance3WorkingGroup WorkerById (max_values: None, max_size: Some(175), added: 2650, mode: MaxEncodedLen) // Storage: Content CuratorGroupById (r:1 w:0) + // Proof: Content CuratorGroupById (max_values: None, max_size: Some(1037), added: 3512, mode: MaxEncodedLen) + /// The range of component `a` is `[1, 100]`. fn set_video_visibility_as_moderator(a: u32, ) -> Weight { - (319_990_000 as Weight) - // Standard Error: 4_000 - .saturating_add((743_000 as Weight).saturating_mul(a as Weight)) - .saturating_add(T::DbWeight::get().reads(4 as Weight)) + // Proof Size summary in bytes: + // Measured: `2929` + // Estimated: `16494` + // Minimum execution time: 141_152 nanoseconds. + Weight::from_parts(141_898_728, 0u64) + .saturating_add(Weight::from_parts(0, 16494)) + // Standard Error: 6_458 + .saturating_add(Weight::from_parts(1_138_474, 0u64).saturating_mul(a.into())) + .saturating_add(T::DbWeight::get().reads(4_u64)) } // Storage: Instance3WorkingGroup CurrentLead (r:1 w:0) + // Proof: Instance3WorkingGroup CurrentLead (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) // Storage: Instance3WorkingGroup WorkerById (r:1 w:0) + // Proof: Instance3WorkingGroup WorkerById (max_values: None, max_size: Some(175), added: 2650, mode: MaxEncodedLen) // Storage: Content NextCuratorGroupId (r:1 w:1) + // Proof: Content NextCuratorGroupId (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) // Storage: Content CuratorGroupById (r:0 w:1) + // Proof: Content CuratorGroupById (max_values: None, max_size: Some(1037), added: 3512, mode: MaxEncodedLen) + /// The range of component `a` is `[0, 25]`. fn create_curator_group(a: u32, ) -> Weight { - (63_682_000 as Weight) - // Standard Error: 12_000 - .saturating_add((4_949_000 as Weight).saturating_mul(a as Weight)) - .saturating_add(T::DbWeight::get().reads(3 as Weight)) - .saturating_add(T::DbWeight::get().writes(2 as Weight)) + // Proof Size summary in bytes: + // Measured: `892` + // Estimated: `6626` + // Minimum execution time: 30_890 nanoseconds. + Weight::from_parts(35_105_666, 0u64) + .saturating_add(Weight::from_parts(0, 6626)) + // Standard Error: 6_910 + .saturating_add(Weight::from_parts(1_663_702, 0u64).saturating_mul(a.into())) + .saturating_add(T::DbWeight::get().reads(3_u64)) + .saturating_add(T::DbWeight::get().writes(2_u64)) } // Storage: Instance3WorkingGroup CurrentLead (r:1 w:0) + // Proof: Instance3WorkingGroup CurrentLead (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) // Storage: Instance3WorkingGroup WorkerById (r:1 w:0) + // Proof: Instance3WorkingGroup WorkerById (max_values: None, max_size: Some(175), added: 2650, mode: MaxEncodedLen) // Storage: Content CuratorGroupById (r:1 w:1) + // Proof: Content CuratorGroupById (max_values: None, max_size: Some(1037), added: 3512, mode: MaxEncodedLen) + /// The range of component `a` is `[0, 25]`. fn update_curator_group_permissions(a: u32, ) -> Weight { - (167_913_000 as Weight) - // Standard Error: 19_000 - .saturating_add((5_370_000 as Weight).saturating_mul(a as Weight)) - .saturating_add(T::DbWeight::get().reads(3 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + // Proof Size summary in bytes: + // Measured: `2074` + // Estimated: `9635` + // Minimum execution time: 72_903 nanoseconds. + Weight::from_parts(79_435_857, 0u64) + .saturating_add(Weight::from_parts(0, 9635)) + // Standard Error: 11_752 + .saturating_add(Weight::from_parts(1_695_007, 0u64).saturating_mul(a.into())) + .saturating_add(T::DbWeight::get().reads(3_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) } // Storage: Instance3WorkingGroup CurrentLead (r:1 w:0) + // Proof: Instance3WorkingGroup CurrentLead (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) // Storage: Instance3WorkingGroup WorkerById (r:1 w:0) + // Proof: Instance3WorkingGroup WorkerById (max_values: None, max_size: Some(175), added: 2650, mode: MaxEncodedLen) // Storage: Content CuratorGroupById (r:1 w:1) + // Proof: Content CuratorGroupById (max_values: None, max_size: Some(1037), added: 3512, mode: MaxEncodedLen) fn set_curator_group_status() -> Weight { - (172_570_000 as Weight) - .saturating_add(T::DbWeight::get().reads(3 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + // Proof Size summary in bytes: + // Measured: `2074` + // Estimated: `9635` + // Minimum execution time: 76_566 nanoseconds. + Weight::from_parts(78_548_000, 0u64) + .saturating_add(Weight::from_parts(0, 9635)) + .saturating_add(T::DbWeight::get().reads(3_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) } // Storage: Instance3WorkingGroup CurrentLead (r:1 w:0) + // Proof: Instance3WorkingGroup CurrentLead (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) // Storage: Instance3WorkingGroup WorkerById (r:2 w:0) + // Proof: Instance3WorkingGroup WorkerById (max_values: None, max_size: Some(175), added: 2650, mode: MaxEncodedLen) // Storage: Content CuratorGroupById (r:1 w:1) + // Proof: Content CuratorGroupById (max_values: None, max_size: Some(1037), added: 3512, mode: MaxEncodedLen) fn add_curator_to_group() -> Weight { - (278_010_000 as Weight) - .saturating_add(T::DbWeight::get().reads(4 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + // Proof Size summary in bytes: + // Measured: `2172` + // Estimated: `12285` + // Minimum execution time: 113_197 nanoseconds. + Weight::from_parts(115_885_000, 0u64) + .saturating_add(Weight::from_parts(0, 12285)) + .saturating_add(T::DbWeight::get().reads(4_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) } // Storage: Instance3WorkingGroup CurrentLead (r:1 w:0) + // Proof: Instance3WorkingGroup CurrentLead (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) // Storage: Instance3WorkingGroup WorkerById (r:1 w:0) + // Proof: Instance3WorkingGroup WorkerById (max_values: None, max_size: Some(175), added: 2650, mode: MaxEncodedLen) // Storage: Content CuratorGroupById (r:1 w:1) + // Proof: Content CuratorGroupById (max_values: None, max_size: Some(1037), added: 3512, mode: MaxEncodedLen) fn remove_curator_from_group() -> Weight { - (268_000_000 as Weight) - .saturating_add(T::DbWeight::get().reads(3 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + // Proof Size summary in bytes: + // Measured: `2074` + // Estimated: `9635` + // Minimum execution time: 109_267 nanoseconds. + Weight::from_parts(111_252_000, 0u64) + .saturating_add(Weight::from_parts(0, 9635)) + .saturating_add(T::DbWeight::get().reads(3_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) } // Storage: Content ChannelById (r:1 w:1) + // Proof: Content ChannelById (max_values: None, max_size: Some(909), added: 3384, mode: MaxEncodedLen) // Storage: Instance3WorkingGroup WorkerById (r:1 w:0) + // Proof: Instance3WorkingGroup WorkerById (max_values: None, max_size: Some(175), added: 2650, mode: MaxEncodedLen) // Storage: Content CuratorGroupById (r:1 w:0) + // Proof: Content CuratorGroupById (max_values: None, max_size: Some(1037), added: 3512, mode: MaxEncodedLen) // Storage: Storage Bags (r:1 w:1) + // Proof: Storage Bags (max_values: None, max_size: Some(964), added: 3439, mode: MaxEncodedLen) // Storage: Content NextVideoId (r:1 w:1) + // Proof: Content NextVideoId (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) // Storage: Content VideoStateBloatBondValue (r:1 w:0) + // Proof: Content VideoStateBloatBondValue (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) // Storage: Storage DataObjectStateBloatBondValue (r:1 w:0) + // Proof: Storage DataObjectStateBloatBondValue (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) // Storage: Storage DataObjectPerMegabyteFee (r:1 w:0) + // Proof: Storage DataObjectPerMegabyteFee (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) // Storage: System Account (r:3 w:3) + // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) // Storage: Storage UploadingBlocked (r:1 w:0) + // Proof: Storage UploadingBlocked (max_values: Some(1), max_size: Some(1), added: 496, mode: MaxEncodedLen) // Storage: Storage Blacklist (r:1 w:0) + // Proof: Storage Blacklist (max_values: None, max_size: Some(63), added: 2538, mode: MaxEncodedLen) // Storage: Storage StorageBucketById (r:13 w:13) + // Proof: Storage StorageBucketById (max_values: None, max_size: Some(106), added: 2581, mode: MaxEncodedLen) // Storage: Storage NextDataObjectId (r:1 w:1) - // Storage: Storage DataObjectsById (r:0 w:1) + // Proof: Storage NextDataObjectId (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) + // Storage: Storage DataObjectsById (r:0 w:20) + // Proof: Storage DataObjectsById (max_values: None, max_size: Some(155), added: 2630, mode: MaxEncodedLen) // Storage: Content VideoById (r:0 w:1) + // Proof: Content VideoById (max_values: None, max_size: Some(513), added: 2988, mode: MaxEncodedLen) + /// The range of component `a` is `[1, 20]`. + /// The range of component `b` is `[1, 13]`. + /// The range of component `c` is `[1, 100]`. fn create_video_without_nft(a: u32, b: u32, c: u32, ) -> Weight { - (689_869_000 as Weight) - // Standard Error: 49_000 - .saturating_add((17_798_000 as Weight).saturating_mul(a as Weight)) - // Standard Error: 115_000 - .saturating_add((27_864_000 as Weight).saturating_mul(b as Weight)) - // Standard Error: 6_000 - .saturating_add((732_000 as Weight).saturating_mul(c as Weight)) - .saturating_add(T::DbWeight::get().reads(14 as Weight)) - .saturating_add(T::DbWeight::get().reads((1 as Weight).saturating_mul(b as Weight))) - .saturating_add(T::DbWeight::get().writes(8 as Weight)) - .saturating_add(T::DbWeight::get().writes((1 as Weight).saturating_mul(a as Weight))) - .saturating_add(T::DbWeight::get().writes((1 as Weight).saturating_mul(b as Weight))) + // Proof Size summary in bytes: + // Measured: `4566 + b * (80 ±0)` + // Estimated: `39237 + b * (2581 ±0)` + // Minimum execution time: 518_627 nanoseconds. + Weight::from_parts(304_902_625, 0u64) + .saturating_add(Weight::from_parts(0, 39237)) + // Standard Error: 54_153 + .saturating_add(Weight::from_parts(8_199_620, 0u64).saturating_mul(a.into())) + // Standard Error: 83_831 + .saturating_add(Weight::from_parts(9_926_047, 0u64).saturating_mul(b.into())) + // Standard Error: 10_700 + .saturating_add(Weight::from_parts(1_050_573, 0u64).saturating_mul(c.into())) + .saturating_add(T::DbWeight::get().reads(14_u64)) + .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(b.into()))) + .saturating_add(T::DbWeight::get().writes(8_u64)) + .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(a.into()))) + .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(b.into()))) + .saturating_add(Weight::from_parts(0, 2581).saturating_mul(b.into())) } // Storage: Content ChannelById (r:1 w:1) + // Proof: Content ChannelById (max_values: None, max_size: Some(909), added: 3384, mode: MaxEncodedLen) // Storage: Instance3WorkingGroup WorkerById (r:1 w:0) + // Proof: Instance3WorkingGroup WorkerById (max_values: None, max_size: Some(175), added: 2650, mode: MaxEncodedLen) // Storage: Content CuratorGroupById (r:1 w:0) + // Proof: Content CuratorGroupById (max_values: None, max_size: Some(1037), added: 3512, mode: MaxEncodedLen) // Storage: Storage Bags (r:1 w:1) + // Proof: Storage Bags (max_values: None, max_size: Some(964), added: 3439, mode: MaxEncodedLen) // Storage: Content NextVideoId (r:1 w:1) + // Proof: Content NextVideoId (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) // Storage: Content MaxAuctionDuration (r:1 w:0) + // Proof: Content MaxAuctionDuration (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) // Storage: Content MinAuctionDuration (r:1 w:0) + // Proof: Content MinAuctionDuration (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) // Storage: Content MaxAuctionExtensionPeriod (r:1 w:0) + // Proof: Content MaxAuctionExtensionPeriod (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) // Storage: Content MinAuctionExtensionPeriod (r:1 w:0) + // Proof: Content MinAuctionExtensionPeriod (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) // Storage: Content MaxBidStep (r:1 w:0) + // Proof: Content MaxBidStep (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) // Storage: Content MinBidStep (r:1 w:0) + // Proof: Content MinBidStep (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) // Storage: Content AuctionStartsAtMaxDelta (r:1 w:0) + // Proof: Content AuctionStartsAtMaxDelta (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) // Storage: Content MinStartingPrice (r:1 w:0) + // Proof: Content MinStartingPrice (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) // Storage: Content MaxStartingPrice (r:1 w:0) + // Proof: Content MaxStartingPrice (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) // Storage: Membership MembershipById (r:21 w:0) + // Proof: Membership MembershipById (max_values: None, max_size: Some(125), added: 2600, mode: MaxEncodedLen) // Storage: Content MaxCreatorRoyalty (r:1 w:0) + // Proof: Content MaxCreatorRoyalty (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) // Storage: Content MinCreatorRoyalty (r:1 w:0) + // Proof: Content MinCreatorRoyalty (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) // Storage: Content VideoStateBloatBondValue (r:1 w:0) + // Proof: Content VideoStateBloatBondValue (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) // Storage: Storage DataObjectStateBloatBondValue (r:1 w:0) + // Proof: Storage DataObjectStateBloatBondValue (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) // Storage: Storage DataObjectPerMegabyteFee (r:1 w:0) + // Proof: Storage DataObjectPerMegabyteFee (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) // Storage: System Account (r:3 w:3) + // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) // Storage: Content NftLimitsEnabled (r:1 w:0) + // Proof: Content NftLimitsEnabled (max_values: Some(1), max_size: Some(1), added: 496, mode: MaxEncodedLen) // Storage: Content GlobalDailyNftLimit (r:1 w:0) + // Proof: Content GlobalDailyNftLimit (max_values: Some(1), max_size: Some(12), added: 507, mode: MaxEncodedLen) // Storage: Content GlobalDailyNftCounter (r:1 w:1) + // Proof: Content GlobalDailyNftCounter (max_values: Some(1), max_size: Some(12), added: 507, mode: MaxEncodedLen) // Storage: Content GlobalWeeklyNftLimit (r:1 w:0) + // Proof: Content GlobalWeeklyNftLimit (max_values: Some(1), max_size: Some(12), added: 507, mode: MaxEncodedLen) // Storage: Content GlobalWeeklyNftCounter (r:1 w:1) + // Proof: Content GlobalWeeklyNftCounter (max_values: Some(1), max_size: Some(12), added: 507, mode: MaxEncodedLen) // Storage: Storage UploadingBlocked (r:1 w:0) + // Proof: Storage UploadingBlocked (max_values: Some(1), max_size: Some(1), added: 496, mode: MaxEncodedLen) // Storage: Storage Blacklist (r:1 w:0) + // Proof: Storage Blacklist (max_values: None, max_size: Some(63), added: 2538, mode: MaxEncodedLen) // Storage: Storage StorageBucketById (r:13 w:13) + // Proof: Storage StorageBucketById (max_values: None, max_size: Some(106), added: 2581, mode: MaxEncodedLen) // Storage: Storage NextDataObjectId (r:1 w:1) - // Storage: Storage DataObjectsById (r:0 w:1) + // Proof: Storage NextDataObjectId (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) + // Storage: Storage DataObjectsById (r:0 w:20) + // Proof: Storage DataObjectsById (max_values: None, max_size: Some(155), added: 2630, mode: MaxEncodedLen) // Storage: Content VideoById (r:0 w:1) + // Proof: Content VideoById (max_values: None, max_size: Some(513), added: 2988, mode: MaxEncodedLen) + /// The range of component `a` is `[1, 20]`. + /// The range of component `b` is `[1, 13]`. + /// The range of component `c` is `[2, 20]`. + /// The range of component `d` is `[1, 100]`. fn create_video_with_nft(a: u32, b: u32, c: u32, d: u32, ) -> Weight { - (872_659_000 as Weight) - // Standard Error: 94_000 - .saturating_add((17_826_000 as Weight).saturating_mul(a as Weight)) - // Standard Error: 222_000 - .saturating_add((27_054_000 as Weight).saturating_mul(b as Weight)) - // Standard Error: 101_000 - .saturating_add((11_019_000 as Weight).saturating_mul(c as Weight)) - // Standard Error: 11_000 - .saturating_add((725_000 as Weight).saturating_mul(d as Weight)) - .saturating_add(T::DbWeight::get().reads(31 as Weight)) - .saturating_add(T::DbWeight::get().reads((1 as Weight).saturating_mul(b as Weight))) - .saturating_add(T::DbWeight::get().reads((1 as Weight).saturating_mul(c as Weight))) - .saturating_add(T::DbWeight::get().writes(10 as Weight)) - .saturating_add(T::DbWeight::get().writes((1 as Weight).saturating_mul(a as Weight))) - .saturating_add(T::DbWeight::get().writes((1 as Weight).saturating_mul(b as Weight))) + // Proof Size summary in bytes: + // Measured: `5619 + b * (80 ±0) + c * (155 ±0)` + // Estimated: `66728 + b * (2581 ±0) + c * (2600 ±0)` + // Minimum execution time: 670_976 nanoseconds. + Weight::from_parts(372_185_129, 0u64) + .saturating_add(Weight::from_parts(0, 66728)) + // Standard Error: 56_851 + .saturating_add(Weight::from_parts(8_647_209, 0u64).saturating_mul(a.into())) + // Standard Error: 87_987 + .saturating_add(Weight::from_parts(9_312_988, 0u64).saturating_mul(b.into())) + // Standard Error: 59_943 + .saturating_add(Weight::from_parts(4_355_981, 0u64).saturating_mul(c.into())) + // Standard Error: 11_239 + .saturating_add(Weight::from_parts(1_154_244, 0u64).saturating_mul(d.into())) + .saturating_add(T::DbWeight::get().reads(31_u64)) + .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(b.into()))) + .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(c.into()))) + .saturating_add(T::DbWeight::get().writes(10_u64)) + .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(a.into()))) + .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(b.into()))) + .saturating_add(Weight::from_parts(0, 2581).saturating_mul(b.into())) + .saturating_add(Weight::from_parts(0, 2600).saturating_mul(c.into())) } // Storage: Content VideoById (r:1 w:0) + // Proof: Content VideoById (max_values: None, max_size: Some(513), added: 2988, mode: MaxEncodedLen) // Storage: Content ChannelById (r:1 w:0) + // Proof: Content ChannelById (max_values: None, max_size: Some(909), added: 3384, mode: MaxEncodedLen) // Storage: Instance3WorkingGroup WorkerById (r:1 w:0) + // Proof: Instance3WorkingGroup WorkerById (max_values: None, max_size: Some(175), added: 2650, mode: MaxEncodedLen) // Storage: Content CuratorGroupById (r:1 w:0) + // Proof: Content CuratorGroupById (max_values: None, max_size: Some(1037), added: 3512, mode: MaxEncodedLen) + /// The range of component `a` is `[1, 100]`. fn update_video_without_assets_without_nft(a: u32, ) -> Weight { - (326_441_000 as Weight) - // Standard Error: 5_000 - .saturating_add((724_000 as Weight).saturating_mul(a as Weight)) - .saturating_add(T::DbWeight::get().reads(4 as Weight)) + // Proof Size summary in bytes: + // Measured: `2929` + // Estimated: `16494` + // Minimum execution time: 147_890 nanoseconds. + Weight::from_parts(151_121_300, 0u64) + .saturating_add(Weight::from_parts(0, 16494)) + // Standard Error: 6_921 + .saturating_add(Weight::from_parts(900_303, 0u64).saturating_mul(a.into())) + .saturating_add(T::DbWeight::get().reads(4_u64)) } // Storage: Content VideoById (r:1 w:1) + // Proof: Content VideoById (max_values: None, max_size: Some(513), added: 2988, mode: MaxEncodedLen) // Storage: Content ChannelById (r:1 w:0) + // Proof: Content ChannelById (max_values: None, max_size: Some(909), added: 3384, mode: MaxEncodedLen) // Storage: Instance3WorkingGroup WorkerById (r:1 w:0) + // Proof: Instance3WorkingGroup WorkerById (max_values: None, max_size: Some(175), added: 2650, mode: MaxEncodedLen) // Storage: Content CuratorGroupById (r:1 w:0) + // Proof: Content CuratorGroupById (max_values: None, max_size: Some(1037), added: 3512, mode: MaxEncodedLen) // Storage: Storage Bags (r:1 w:1) + // Proof: Storage Bags (max_values: None, max_size: Some(964), added: 3439, mode: MaxEncodedLen) // Storage: Storage DataObjectPerMegabyteFee (r:1 w:0) + // Proof: Storage DataObjectPerMegabyteFee (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) // Storage: Storage DataObjectStateBloatBondValue (r:1 w:0) + // Proof: Storage DataObjectStateBloatBondValue (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) // Storage: Storage UploadingBlocked (r:1 w:0) + // Proof: Storage UploadingBlocked (max_values: Some(1), max_size: Some(1), added: 496, mode: MaxEncodedLen) // Storage: Storage Blacklist (r:1 w:0) - // Storage: Storage DataObjectsById (r:20 w:21) + // Proof: Storage Blacklist (max_values: None, max_size: Some(63), added: 2538, mode: MaxEncodedLen) + // Storage: Storage DataObjectsById (r:20 w:40) + // Proof: Storage DataObjectsById (max_values: None, max_size: Some(155), added: 2630, mode: MaxEncodedLen) // Storage: Storage StorageBucketById (r:13 w:13) + // Proof: Storage StorageBucketById (max_values: None, max_size: Some(106), added: 2581, mode: MaxEncodedLen) // Storage: System Account (r:22 w:22) + // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) // Storage: Storage NextDataObjectId (r:1 w:1) + // Proof: Storage NextDataObjectId (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) + /// The range of component `a` is `[1, 20]`. + /// The range of component `b` is `[1, 20]`. + /// The range of component `c` is `[1, 13]`. + /// The range of component `d` is `[1, 100]`. fn update_video_with_assets_without_nft(a: u32, b: u32, c: u32, d: u32, ) -> Weight { - (578_286_000 as Weight) - // Standard Error: 90_000 - .saturating_add((17_922_000 as Weight).saturating_mul(a as Weight)) - // Standard Error: 90_000 - .saturating_add((68_366_000 as Weight).saturating_mul(b as Weight)) - // Standard Error: 214_000 - .saturating_add((26_273_000 as Weight).saturating_mul(c as Weight)) - // Standard Error: 11_000 - .saturating_add((801_000 as Weight).saturating_mul(d as Weight)) - .saturating_add(T::DbWeight::get().reads(12 as Weight)) - .saturating_add(T::DbWeight::get().reads((2 as Weight).saturating_mul(b as Weight))) - .saturating_add(T::DbWeight::get().reads((1 as Weight).saturating_mul(c as Weight))) - .saturating_add(T::DbWeight::get().writes(5 as Weight)) - .saturating_add(T::DbWeight::get().writes((1 as Weight).saturating_mul(a as Weight))) - .saturating_add(T::DbWeight::get().writes((2 as Weight).saturating_mul(b as Weight))) - .saturating_add(T::DbWeight::get().writes((1 as Weight).saturating_mul(c as Weight))) + // Proof Size summary in bytes: + // Measured: `4702 + b * (320 ±0) + c * (80 ±0)` + // Estimated: `38608 + b * (5233 ±0) + c * (2581 ±0)` + // Minimum execution time: 669_394 nanoseconds. + Weight::from_parts(271_526_325, 0u64) + .saturating_add(Weight::from_parts(0, 38608)) + // Standard Error: 71_092 + .saturating_add(Weight::from_parts(8_391_723, 0u64).saturating_mul(a.into())) + // Standard Error: 71_092 + .saturating_add(Weight::from_parts(27_487_587, 0u64).saturating_mul(b.into())) + // Standard Error: 110_028 + .saturating_add(Weight::from_parts(9_571_685, 0u64).saturating_mul(c.into())) + // Standard Error: 14_054 + .saturating_add(Weight::from_parts(1_079_699, 0u64).saturating_mul(d.into())) + .saturating_add(T::DbWeight::get().reads(12_u64)) + .saturating_add(T::DbWeight::get().reads((2_u64).saturating_mul(b.into()))) + .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(c.into()))) + .saturating_add(T::DbWeight::get().writes(5_u64)) + .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(a.into()))) + .saturating_add(T::DbWeight::get().writes((2_u64).saturating_mul(b.into()))) + .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(c.into()))) + .saturating_add(Weight::from_parts(0, 5233).saturating_mul(b.into())) + .saturating_add(Weight::from_parts(0, 2581).saturating_mul(c.into())) } // Storage: Content VideoById (r:1 w:1) + // Proof: Content VideoById (max_values: None, max_size: Some(513), added: 2988, mode: MaxEncodedLen) // Storage: Content ChannelById (r:1 w:1) + // Proof: Content ChannelById (max_values: None, max_size: Some(909), added: 3384, mode: MaxEncodedLen) // Storage: Instance3WorkingGroup WorkerById (r:1 w:0) + // Proof: Instance3WorkingGroup WorkerById (max_values: None, max_size: Some(175), added: 2650, mode: MaxEncodedLen) // Storage: Content CuratorGroupById (r:1 w:0) + // Proof: Content CuratorGroupById (max_values: None, max_size: Some(1037), added: 3512, mode: MaxEncodedLen) // Storage: Content MaxAuctionDuration (r:1 w:0) + // Proof: Content MaxAuctionDuration (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) // Storage: Content MinAuctionDuration (r:1 w:0) + // Proof: Content MinAuctionDuration (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) // Storage: Content MaxAuctionExtensionPeriod (r:1 w:0) + // Proof: Content MaxAuctionExtensionPeriod (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) // Storage: Content MinAuctionExtensionPeriod (r:1 w:0) + // Proof: Content MinAuctionExtensionPeriod (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) // Storage: Content MaxBidStep (r:1 w:0) + // Proof: Content MaxBidStep (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) // Storage: Content MinBidStep (r:1 w:0) + // Proof: Content MinBidStep (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) // Storage: Content AuctionStartsAtMaxDelta (r:1 w:0) + // Proof: Content AuctionStartsAtMaxDelta (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) // Storage: Content MinStartingPrice (r:1 w:0) + // Proof: Content MinStartingPrice (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) // Storage: Content MaxStartingPrice (r:1 w:0) - // Storage: Membership MembershipById (r:3 w:0) + // Proof: Content MaxStartingPrice (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) + // Storage: Membership MembershipById (r:21 w:0) + // Proof: Membership MembershipById (max_values: None, max_size: Some(125), added: 2600, mode: MaxEncodedLen) // Storage: Content MaxCreatorRoyalty (r:1 w:0) + // Proof: Content MaxCreatorRoyalty (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) // Storage: Content MinCreatorRoyalty (r:1 w:0) + // Proof: Content MinCreatorRoyalty (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) // Storage: Content NftLimitsEnabled (r:1 w:0) + // Proof: Content NftLimitsEnabled (max_values: Some(1), max_size: Some(1), added: 496, mode: MaxEncodedLen) // Storage: Content GlobalDailyNftLimit (r:1 w:0) + // Proof: Content GlobalDailyNftLimit (max_values: Some(1), max_size: Some(12), added: 507, mode: MaxEncodedLen) // Storage: Content GlobalDailyNftCounter (r:1 w:1) + // Proof: Content GlobalDailyNftCounter (max_values: Some(1), max_size: Some(12), added: 507, mode: MaxEncodedLen) // Storage: Content GlobalWeeklyNftLimit (r:1 w:0) + // Proof: Content GlobalWeeklyNftLimit (max_values: Some(1), max_size: Some(12), added: 507, mode: MaxEncodedLen) // Storage: Content GlobalWeeklyNftCounter (r:1 w:1) + // Proof: Content GlobalWeeklyNftCounter (max_values: Some(1), max_size: Some(12), added: 507, mode: MaxEncodedLen) + /// The range of component `a` is `[2, 20]`. + /// The range of component `b` is `[1, 100]`. fn update_video_without_assets_with_nft(a: u32, b: u32, ) -> Weight { - (554_456_000 as Weight) - // Standard Error: 59_000 - .saturating_add((10_494_000 as Weight).saturating_mul(a as Weight)) - // Standard Error: 7_000 - .saturating_add((697_000 as Weight).saturating_mul(b as Weight)) - .saturating_add(T::DbWeight::get().reads(21 as Weight)) - .saturating_add(T::DbWeight::get().reads((1 as Weight).saturating_mul(a as Weight))) - .saturating_add(T::DbWeight::get().writes(4 as Weight)) + // Proof Size summary in bytes: + // Measured: `4209 + a * (168 ±0)` + // Estimated: `43985 + a * (2600 ±0)` + // Minimum execution time: 324_563 nanoseconds. + Weight::from_parts(255_631_839, 0u64) + .saturating_add(Weight::from_parts(0, 43985)) + // Standard Error: 39_769 + .saturating_add(Weight::from_parts(3_596_179, 0u64).saturating_mul(a.into())) + // Standard Error: 7_446 + .saturating_add(Weight::from_parts(884_691, 0u64).saturating_mul(b.into())) + .saturating_add(T::DbWeight::get().reads(21_u64)) + .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(a.into()))) + .saturating_add(T::DbWeight::get().writes(4_u64)) + .saturating_add(Weight::from_parts(0, 2600).saturating_mul(a.into())) } // Storage: Content VideoById (r:1 w:1) + // Proof: Content VideoById (max_values: None, max_size: Some(513), added: 2988, mode: MaxEncodedLen) // Storage: Content ChannelById (r:1 w:1) + // Proof: Content ChannelById (max_values: None, max_size: Some(909), added: 3384, mode: MaxEncodedLen) // Storage: Instance3WorkingGroup WorkerById (r:1 w:0) + // Proof: Instance3WorkingGroup WorkerById (max_values: None, max_size: Some(175), added: 2650, mode: MaxEncodedLen) // Storage: Content CuratorGroupById (r:1 w:0) + // Proof: Content CuratorGroupById (max_values: None, max_size: Some(1037), added: 3512, mode: MaxEncodedLen) // Storage: Storage Bags (r:1 w:1) + // Proof: Storage Bags (max_values: None, max_size: Some(964), added: 3439, mode: MaxEncodedLen) // Storage: Content MaxAuctionDuration (r:1 w:0) + // Proof: Content MaxAuctionDuration (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) // Storage: Content MinAuctionDuration (r:1 w:0) + // Proof: Content MinAuctionDuration (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) // Storage: Content MaxAuctionExtensionPeriod (r:1 w:0) + // Proof: Content MaxAuctionExtensionPeriod (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) // Storage: Content MinAuctionExtensionPeriod (r:1 w:0) + // Proof: Content MinAuctionExtensionPeriod (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) // Storage: Content MaxBidStep (r:1 w:0) + // Proof: Content MaxBidStep (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) // Storage: Content MinBidStep (r:1 w:0) + // Proof: Content MinBidStep (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) // Storage: Content AuctionStartsAtMaxDelta (r:1 w:0) + // Proof: Content AuctionStartsAtMaxDelta (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) // Storage: Content MinStartingPrice (r:1 w:0) + // Proof: Content MinStartingPrice (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) // Storage: Content MaxStartingPrice (r:1 w:0) + // Proof: Content MaxStartingPrice (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) // Storage: Membership MembershipById (r:21 w:0) + // Proof: Membership MembershipById (max_values: None, max_size: Some(125), added: 2600, mode: MaxEncodedLen) // Storage: Content MaxCreatorRoyalty (r:1 w:0) + // Proof: Content MaxCreatorRoyalty (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) // Storage: Content MinCreatorRoyalty (r:1 w:0) + // Proof: Content MinCreatorRoyalty (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) // Storage: Content NftLimitsEnabled (r:1 w:0) + // Proof: Content NftLimitsEnabled (max_values: Some(1), max_size: Some(1), added: 496, mode: MaxEncodedLen) // Storage: Content GlobalDailyNftLimit (r:1 w:0) + // Proof: Content GlobalDailyNftLimit (max_values: Some(1), max_size: Some(12), added: 507, mode: MaxEncodedLen) // Storage: Content GlobalDailyNftCounter (r:1 w:1) + // Proof: Content GlobalDailyNftCounter (max_values: Some(1), max_size: Some(12), added: 507, mode: MaxEncodedLen) // Storage: Content GlobalWeeklyNftLimit (r:1 w:0) + // Proof: Content GlobalWeeklyNftLimit (max_values: Some(1), max_size: Some(12), added: 507, mode: MaxEncodedLen) // Storage: Content GlobalWeeklyNftCounter (r:1 w:1) + // Proof: Content GlobalWeeklyNftCounter (max_values: Some(1), max_size: Some(12), added: 507, mode: MaxEncodedLen) // Storage: Storage DataObjectPerMegabyteFee (r:1 w:0) + // Proof: Storage DataObjectPerMegabyteFee (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) // Storage: Storage DataObjectStateBloatBondValue (r:1 w:0) + // Proof: Storage DataObjectStateBloatBondValue (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) // Storage: Storage UploadingBlocked (r:1 w:0) + // Proof: Storage UploadingBlocked (max_values: Some(1), max_size: Some(1), added: 496, mode: MaxEncodedLen) // Storage: Storage Blacklist (r:1 w:0) - // Storage: Storage DataObjectsById (r:20 w:21) + // Proof: Storage Blacklist (max_values: None, max_size: Some(63), added: 2538, mode: MaxEncodedLen) + // Storage: Storage DataObjectsById (r:20 w:40) + // Proof: Storage DataObjectsById (max_values: None, max_size: Some(155), added: 2630, mode: MaxEncodedLen) // Storage: Storage StorageBucketById (r:13 w:13) + // Proof: Storage StorageBucketById (max_values: None, max_size: Some(106), added: 2581, mode: MaxEncodedLen) // Storage: System Account (r:22 w:22) + // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) // Storage: Storage NextDataObjectId (r:1 w:1) + // Proof: Storage NextDataObjectId (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) + /// The range of component `a` is `[1, 20]`. + /// The range of component `b` is `[1, 20]`. + /// The range of component `c` is `[1, 13]`. + /// The range of component `d` is `[2, 20]`. + /// The range of component `e` is `[1, 100]`. fn update_video_with_assets_with_nft(a: u32, b: u32, c: u32, d: u32, e: u32, ) -> Weight { - (811_555_000 as Weight) - // Standard Error: 93_000 - .saturating_add((18_513_000 as Weight).saturating_mul(a as Weight)) - // Standard Error: 93_000 - .saturating_add((68_356_000 as Weight).saturating_mul(b as Weight)) - // Standard Error: 223_000 - .saturating_add((24_790_000 as Weight).saturating_mul(c as Weight)) - // Standard Error: 100_000 - .saturating_add((10_167_000 as Weight).saturating_mul(d as Weight)) - // Standard Error: 11_000 - .saturating_add((870_000 as Weight).saturating_mul(e as Weight)) - .saturating_add(T::DbWeight::get().reads(29 as Weight)) - .saturating_add(T::DbWeight::get().reads((2 as Weight).saturating_mul(b as Weight))) - .saturating_add(T::DbWeight::get().reads((1 as Weight).saturating_mul(c as Weight))) - .saturating_add(T::DbWeight::get().reads((1 as Weight).saturating_mul(d as Weight))) - .saturating_add(T::DbWeight::get().writes(8 as Weight)) - .saturating_add(T::DbWeight::get().writes((1 as Weight).saturating_mul(a as Weight))) - .saturating_add(T::DbWeight::get().writes((2 as Weight).saturating_mul(b as Weight))) - .saturating_add(T::DbWeight::get().writes((1 as Weight).saturating_mul(c as Weight))) + // Proof Size summary in bytes: + // Measured: `5136 + b * (368 ±0) + c * (80 ±0) + d * (178 ±0)` + // Estimated: `66099 + d * (2600 ±0) + c * (2581 ±0) + b * (5233 ±0)` + // Minimum execution time: 847_640 nanoseconds. + Weight::from_parts(379_887_257, 0u64) + .saturating_add(Weight::from_parts(0, 66099)) + // Standard Error: 62_389 + .saturating_add(Weight::from_parts(8_145_008, 0u64).saturating_mul(a.into())) + // Standard Error: 62_389 + .saturating_add(Weight::from_parts(27_219_296, 0u64).saturating_mul(b.into())) + // Standard Error: 96_540 + .saturating_add(Weight::from_parts(9_747_243, 0u64).saturating_mul(c.into())) + // Standard Error: 65_778 + .saturating_add(Weight::from_parts(3_637_190, 0u64).saturating_mul(d.into())) + // Standard Error: 12_338 + .saturating_add(Weight::from_parts(1_099_004, 0u64).saturating_mul(e.into())) + .saturating_add(T::DbWeight::get().reads(29_u64)) + .saturating_add(T::DbWeight::get().reads((2_u64).saturating_mul(b.into()))) + .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(c.into()))) + .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(d.into()))) + .saturating_add(T::DbWeight::get().writes(8_u64)) + .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(a.into()))) + .saturating_add(T::DbWeight::get().writes((2_u64).saturating_mul(b.into()))) + .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(c.into()))) + .saturating_add(Weight::from_parts(0, 2600).saturating_mul(d.into())) + .saturating_add(Weight::from_parts(0, 2581).saturating_mul(c.into())) + .saturating_add(Weight::from_parts(0, 5233).saturating_mul(b.into())) } // Storage: Content VideoById (r:1 w:1) + // Proof: Content VideoById (max_values: None, max_size: Some(513), added: 2988, mode: MaxEncodedLen) // Storage: Content ChannelById (r:1 w:1) + // Proof: Content ChannelById (max_values: None, max_size: Some(909), added: 3384, mode: MaxEncodedLen) // Storage: Instance3WorkingGroup WorkerById (r:1 w:0) + // Proof: Instance3WorkingGroup WorkerById (max_values: None, max_size: Some(175), added: 2650, mode: MaxEncodedLen) // Storage: Content CuratorGroupById (r:1 w:0) + // Proof: Content CuratorGroupById (max_values: None, max_size: Some(1037), added: 3512, mode: MaxEncodedLen) // Storage: System Account (r:2 w:2) + // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) fn delete_video_without_assets() -> Weight { - (429_170_000 as Weight) - .saturating_add(T::DbWeight::get().reads(6 as Weight)) - .saturating_add(T::DbWeight::get().writes(4 as Weight)) + // Proof Size summary in bytes: + // Measured: `3181` + // Estimated: `22690` + // Minimum execution time: 186_314 nanoseconds. + Weight::from_parts(188_955_000, 0u64) + .saturating_add(Weight::from_parts(0, 22690)) + .saturating_add(T::DbWeight::get().reads(6_u64)) + .saturating_add(T::DbWeight::get().writes(4_u64)) } // Storage: Content VideoById (r:1 w:1) + // Proof: Content VideoById (max_values: None, max_size: Some(513), added: 2988, mode: MaxEncodedLen) // Storage: Content ChannelById (r:1 w:1) + // Proof: Content ChannelById (max_values: None, max_size: Some(909), added: 3384, mode: MaxEncodedLen) // Storage: Instance3WorkingGroup WorkerById (r:1 w:0) + // Proof: Instance3WorkingGroup WorkerById (max_values: None, max_size: Some(175), added: 2650, mode: MaxEncodedLen) // Storage: Content CuratorGroupById (r:1 w:0) + // Proof: Content CuratorGroupById (max_values: None, max_size: Some(1037), added: 3512, mode: MaxEncodedLen) // Storage: Storage Bags (r:1 w:1) + // Proof: Storage Bags (max_values: None, max_size: Some(964), added: 3439, mode: MaxEncodedLen) // Storage: Storage DataObjectStateBloatBondValue (r:1 w:0) - // Storage: Storage DataObjectsById (r:1 w:1) + // Proof: Storage DataObjectStateBloatBondValue (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) + // Storage: Storage DataObjectsById (r:20 w:20) + // Proof: Storage DataObjectsById (max_values: None, max_size: Some(155), added: 2630, mode: MaxEncodedLen) // Storage: Storage DataObjectPerMegabyteFee (r:1 w:0) + // Proof: Storage DataObjectPerMegabyteFee (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) // Storage: Storage StorageBucketById (r:13 w:13) - // Storage: System Account (r:4 w:4) + // Proof: Storage StorageBucketById (max_values: None, max_size: Some(106), added: 2581, mode: MaxEncodedLen) + // Storage: System Account (r:23 w:23) + // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + /// The range of component `a` is `[1, 20]`. + /// The range of component `b` is `[1, 13]`. fn delete_video_with_assets(a: u32, b: u32, ) -> Weight { - (519_265_000 as Weight) - // Standard Error: 78_000 - .saturating_add((68_055_000 as Weight).saturating_mul(a as Weight)) - // Standard Error: 166_000 - .saturating_add((27_069_000 as Weight).saturating_mul(b as Weight)) - .saturating_add(T::DbWeight::get().reads(10 as Weight)) - .saturating_add(T::DbWeight::get().reads((2 as Weight).saturating_mul(a as Weight))) - .saturating_add(T::DbWeight::get().reads((1 as Weight).saturating_mul(b as Weight))) - .saturating_add(T::DbWeight::get().writes(6 as Weight)) - .saturating_add(T::DbWeight::get().writes((2 as Weight).saturating_mul(a as Weight))) - .saturating_add(T::DbWeight::get().writes((1 as Weight).saturating_mul(b as Weight))) + // Proof Size summary in bytes: + // Measured: `5002 + a * (322 ±0) + b * (80 ±0)` + // Estimated: `34704 + a * (5233 ±0) + b * (2581 ±0)` + // Minimum execution time: 398_783 nanoseconds. + Weight::from_parts(251_688_024, 0u64) + .saturating_add(Weight::from_parts(0, 34704)) + // Standard Error: 40_952 + .saturating_add(Weight::from_parts(27_665_540, 0u64).saturating_mul(a.into())) + // Standard Error: 63_418 + .saturating_add(Weight::from_parts(9_685_015, 0u64).saturating_mul(b.into())) + .saturating_add(T::DbWeight::get().reads(10_u64)) + .saturating_add(T::DbWeight::get().reads((2_u64).saturating_mul(a.into()))) + .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(b.into()))) + .saturating_add(T::DbWeight::get().writes(6_u64)) + .saturating_add(T::DbWeight::get().writes((2_u64).saturating_mul(a.into()))) + .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(b.into()))) + .saturating_add(Weight::from_parts(0, 5233).saturating_mul(a.into())) + .saturating_add(Weight::from_parts(0, 2581).saturating_mul(b.into())) } // Storage: Content ChannelById (r:1 w:1) + // Proof: Content ChannelById (max_values: None, max_size: Some(909), added: 3384, mode: MaxEncodedLen) // Storage: Instance3WorkingGroup WorkerById (r:1 w:0) + // Proof: Instance3WorkingGroup WorkerById (max_values: None, max_size: Some(175), added: 2650, mode: MaxEncodedLen) // Storage: Content CuratorGroupById (r:1 w:0) - // Storage: Membership MembershipById (r:1 w:0) + // Proof: Content CuratorGroupById (max_values: None, max_size: Some(1037), added: 3512, mode: MaxEncodedLen) + // Storage: Membership MembershipById (r:11 w:0) + // Proof: Membership MembershipById (max_values: None, max_size: Some(125), added: 2600, mode: MaxEncodedLen) // Storage: Content NextTransferId (r:1 w:1) + // Proof: Content NextTransferId (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) + /// The range of component `a` is `[0, 10]`. fn initialize_channel_transfer(a: u32, ) -> Weight { - (380_990_000 as Weight) - // Standard Error: 163_000 - .saturating_add((19_090_000 as Weight).saturating_mul(a as Weight)) - .saturating_add(T::DbWeight::get().reads(5 as Weight)) - .saturating_add(T::DbWeight::get().reads((1 as Weight).saturating_mul(a as Weight))) - .saturating_add(T::DbWeight::get().writes(2 as Weight)) + // Proof Size summary in bytes: + // Measured: `3509 + a * (168 ±0)` + // Estimated: `17599 + a * (2600 ±0)` + // Minimum execution time: 169_955 nanoseconds. + Weight::from_parts(181_056_369, 0u64) + .saturating_add(Weight::from_parts(0, 17599)) + // Standard Error: 43_897 + .saturating_add(Weight::from_parts(6_581_646, 0u64).saturating_mul(a.into())) + .saturating_add(T::DbWeight::get().reads(5_u64)) + .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(a.into()))) + .saturating_add(T::DbWeight::get().writes(2_u64)) + .saturating_add(Weight::from_parts(0, 2600).saturating_mul(a.into())) } // Storage: Content ChannelById (r:1 w:1) + // Proof: Content ChannelById (max_values: None, max_size: Some(909), added: 3384, mode: MaxEncodedLen) // Storage: Instance3WorkingGroup WorkerById (r:1 w:0) + // Proof: Instance3WorkingGroup WorkerById (max_values: None, max_size: Some(175), added: 2650, mode: MaxEncodedLen) // Storage: Content CuratorGroupById (r:1 w:0) + // Proof: Content CuratorGroupById (max_values: None, max_size: Some(1037), added: 3512, mode: MaxEncodedLen) fn cancel_channel_transfer() -> Weight { - (407_910_000 as Weight) - .saturating_add(T::DbWeight::get().reads(3 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + // Proof Size summary in bytes: + // Measured: `3019` + // Estimated: `12516` + // Minimum execution time: 173_502 nanoseconds. + Weight::from_parts(176_190_000, 0u64) + .saturating_add(Weight::from_parts(0, 12516)) + .saturating_add(T::DbWeight::get().reads(3_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) } // Storage: Content ChannelById (r:1 w:1) + // Proof: Content ChannelById (max_values: None, max_size: Some(909), added: 3384, mode: MaxEncodedLen) // Storage: Instance3WorkingGroup CurrentLead (r:1 w:0) + // Proof: Instance3WorkingGroup CurrentLead (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) // Storage: Instance3WorkingGroup WorkerById (r:1 w:0) + // Proof: Instance3WorkingGroup WorkerById (max_values: None, max_size: Some(175), added: 2650, mode: MaxEncodedLen) // Storage: Instance3WorkingGroup Budget (r:1 w:0) + // Proof: Instance3WorkingGroup Budget (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) + /// The range of component `a` is `[0, 10]`. fn accept_channel_transfer_curator_to_curator(a: u32, ) -> Weight { - (166_319_000 as Weight) - // Standard Error: 122_000 - .saturating_add((12_662_000 as Weight).saturating_mul(a as Weight)) - .saturating_add(T::DbWeight::get().reads(4 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + // Proof Size summary in bytes: + // Measured: `1746 + a * (31 ±0)` + // Estimated: `11008` + // Minimum execution time: 83_362 nanoseconds. + Weight::from_parts(89_156_811, 0u64) + .saturating_add(Weight::from_parts(0, 11008)) + // Standard Error: 31_984 + .saturating_add(Weight::from_parts(5_035_968, 0u64).saturating_mul(a.into())) + .saturating_add(T::DbWeight::get().reads(4_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) } // Storage: Content ChannelById (r:1 w:1) + // Proof: Content ChannelById (max_values: None, max_size: Some(909), added: 3384, mode: MaxEncodedLen) // Storage: Instance3WorkingGroup CurrentLead (r:1 w:0) + // Proof: Instance3WorkingGroup CurrentLead (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) // Storage: Instance3WorkingGroup WorkerById (r:1 w:0) + // Proof: Instance3WorkingGroup WorkerById (max_values: None, max_size: Some(175), added: 2650, mode: MaxEncodedLen) // Storage: Instance3WorkingGroup Budget (r:1 w:1) + // Proof: Instance3WorkingGroup Budget (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) // Storage: Membership MembershipById (r:1 w:0) + // Proof: Membership MembershipById (max_values: None, max_size: Some(125), added: 2600, mode: MaxEncodedLen) // Storage: System Account (r:1 w:1) + // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + /// The range of component `a` is `[0, 10]`. fn accept_channel_transfer_member_to_curator(a: u32, ) -> Weight { - (219_045_000 as Weight) - // Standard Error: 83_000 - .saturating_add((13_216_000 as Weight).saturating_mul(a as Weight)) - .saturating_add(T::DbWeight::get().reads(6 as Weight)) - .saturating_add(T::DbWeight::get().writes(3 as Weight)) + // Proof Size summary in bytes: + // Measured: `2744 + a * (31 ±0)` + // Estimated: `18191` + // Minimum execution time: 115_482 nanoseconds. + Weight::from_parts(122_000_521, 0u64) + .saturating_add(Weight::from_parts(0, 18191)) + // Standard Error: 34_577 + .saturating_add(Weight::from_parts(4_925_218, 0u64).saturating_mul(a.into())) + .saturating_add(T::DbWeight::get().reads(6_u64)) + .saturating_add(T::DbWeight::get().writes(3_u64)) } // Storage: Content ChannelById (r:1 w:1) + // Proof: Content ChannelById (max_values: None, max_size: Some(909), added: 3384, mode: MaxEncodedLen) // Storage: Membership MembershipById (r:2 w:0) + // Proof: Membership MembershipById (max_values: None, max_size: Some(125), added: 2600, mode: MaxEncodedLen) // Storage: System Account (r:2 w:2) + // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + /// The range of component `a` is `[0, 10]`. fn accept_channel_transfer_member_to_member(a: u32, ) -> Weight { - (229_376_000 as Weight) - // Standard Error: 135_000 - .saturating_add((14_048_000 as Weight).saturating_mul(a as Weight)) - .saturating_add(T::DbWeight::get().reads(5 as Weight)) - .saturating_add(T::DbWeight::get().writes(3 as Weight)) + // Proof Size summary in bytes: + // Measured: `2318 + a * (56 ±0)` + // Estimated: `16760` + // Minimum execution time: 112_580 nanoseconds. + Weight::from_parts(118_200_867, 0u64) + .saturating_add(Weight::from_parts(0, 16760)) + // Standard Error: 26_331 + .saturating_add(Weight::from_parts(4_878_851, 0u64).saturating_mul(a.into())) + .saturating_add(T::DbWeight::get().reads(5_u64)) + .saturating_add(T::DbWeight::get().writes(3_u64)) } // Storage: Content ChannelById (r:1 w:1) + // Proof: Content ChannelById (max_values: None, max_size: Some(909), added: 3384, mode: MaxEncodedLen) // Storage: Instance3WorkingGroup WorkerById (r:1 w:0) + // Proof: Instance3WorkingGroup WorkerById (max_values: None, max_size: Some(175), added: 2650, mode: MaxEncodedLen) // Storage: Content CuratorGroupById (r:1 w:0) + // Proof: Content CuratorGroupById (max_values: None, max_size: Some(1037), added: 3512, mode: MaxEncodedLen) + // Storage: Token PalletFrozen (r:1 w:0) + // Proof: Token PalletFrozen (max_values: Some(1), max_size: Some(1), added: 496, mode: MaxEncodedLen) // Storage: Token NextTokenId (r:1 w:1) + // Proof: Token NextTokenId (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) // Storage: Token BloatBond (r:1 w:0) - // Storage: Token SymbolsUsed (r:1 w:1) - // Storage: Membership MembershipById (r:1 w:0) + // Proof: Token BloatBond (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) + // Storage: Membership MembershipById (r:1023 w:0) + // Proof: Membership MembershipById (max_values: None, max_size: Some(125), added: 2600, mode: MaxEncodedLen) + // Storage: Token MaxYearlyPatronageRate (r:1 w:0) + // Proof: Token MaxYearlyPatronageRate (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) // Storage: System Account (r:2 w:2) - // Storage: Token AccountInfoByTokenAndMember (r:0 w:1) + // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + // Storage: Token AccountInfoByTokenAndMember (r:0 w:1023) + // Proof: Token AccountInfoByTokenAndMember (max_values: None, max_size: Some(489), added: 2964, mode: MaxEncodedLen) // Storage: Token TokenInfoById (r:0 w:1) + // Proof: Token TokenInfoById (max_values: None, max_size: Some(352), added: 2827, mode: MaxEncodedLen) + /// The range of component `a` is `[1, 1024]`. fn issue_creator_token(a: u32, ) -> Weight { - (181_375_000 as Weight) - // Standard Error: 27_000 - .saturating_add((27_453_000 as Weight).saturating_mul(a as Weight)) - .saturating_add(T::DbWeight::get().reads(8 as Weight)) - .saturating_add(T::DbWeight::get().reads((1 as Weight).saturating_mul(a as Weight))) - .saturating_add(T::DbWeight::get().writes(6 as Weight)) - .saturating_add(T::DbWeight::get().writes((1 as Weight).saturating_mul(a as Weight))) + // Proof Size summary in bytes: + // Measured: `5098 + a * (133 ±0)` + // Estimated: `25671 + a * (2600 ±0)` + // Minimum execution time: 248_966 nanoseconds. + Weight::from_parts(98_087_219, 0u64) + .saturating_add(Weight::from_parts(0, 25671)) + // Standard Error: 15_506 + .saturating_add(Weight::from_parts(10_802_152, 0u64).saturating_mul(a.into())) + .saturating_add(T::DbWeight::get().reads(9_u64)) + .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(a.into()))) + .saturating_add(T::DbWeight::get().writes(5_u64)) + .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(a.into()))) + .saturating_add(Weight::from_parts(0, 2600).saturating_mul(a.into())) } // Storage: Content ChannelById (r:1 w:0) + // Proof: Content ChannelById (max_values: None, max_size: Some(909), added: 3384, mode: MaxEncodedLen) // Storage: Instance3WorkingGroup WorkerById (r:1 w:0) + // Proof: Instance3WorkingGroup WorkerById (max_values: None, max_size: Some(175), added: 2650, mode: MaxEncodedLen) // Storage: Content CuratorGroupById (r:1 w:0) + // Proof: Content CuratorGroupById (max_values: None, max_size: Some(1037), added: 3512, mode: MaxEncodedLen) + // Storage: Token PalletFrozen (r:1 w:0) + // Proof: Token PalletFrozen (max_values: Some(1), max_size: Some(1), added: 496, mode: MaxEncodedLen) // Storage: Token TokenInfoById (r:1 w:1) - // Storage: Token AccountInfoByTokenAndMember (r:2 w:2) - // Storage: Membership MembershipById (r:1 w:0) + // Proof: Token TokenInfoById (max_values: None, max_size: Some(352), added: 2827, mode: MaxEncodedLen) + // Storage: Token AccountInfoByTokenAndMember (r:25 w:25) + // Proof: Token AccountInfoByTokenAndMember (max_values: None, max_size: Some(489), added: 2964, mode: MaxEncodedLen) + // Storage: Membership MembershipById (r:24 w:0) + // Proof: Membership MembershipById (max_values: None, max_size: Some(125), added: 2600, mode: MaxEncodedLen) // Storage: Token BloatBond (r:1 w:0) + // Proof: Token BloatBond (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) // Storage: System Account (r:2 w:2) - fn creator_token_issuer_transfer(a: u32, _b: u32, ) -> Weight { - (104_522_000 as Weight) - // Standard Error: 25_000 - .saturating_add((38_487_000 as Weight).saturating_mul(a as Weight)) - .saturating_add(T::DbWeight::get().reads(8 as Weight)) - .saturating_add(T::DbWeight::get().reads((2 as Weight).saturating_mul(a as Weight))) - .saturating_add(T::DbWeight::get().writes(4 as Weight)) - .saturating_add(T::DbWeight::get().writes((1 as Weight).saturating_mul(a as Weight))) + // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + /// The range of component `a` is `[1, 24]`. + /// The range of component `b` is `[1, 100]`. + fn creator_token_issuer_transfer(a: u32, b: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `4617 + a * (157 ±0)` + // Estimated: `30460 + a * (5564 ±0)` + // Minimum execution time: 334_671 nanoseconds. + Weight::from_parts(239_612_642, 0u64) + .saturating_add(Weight::from_parts(0, 30460)) + // Standard Error: 67_129 + .saturating_add(Weight::from_parts(12_404_421, 0u64).saturating_mul(a.into())) + // Standard Error: 15_985 + .saturating_add(Weight::from_parts(1_124_562, 0u64).saturating_mul(b.into())) + .saturating_add(T::DbWeight::get().reads(9_u64)) + .saturating_add(T::DbWeight::get().reads((2_u64).saturating_mul(a.into()))) + .saturating_add(T::DbWeight::get().writes(4_u64)) + .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(a.into()))) + .saturating_add(Weight::from_parts(0, 5564).saturating_mul(a.into())) } // Storage: Content ChannelById (r:1 w:0) + // Proof: Content ChannelById (max_values: None, max_size: Some(909), added: 3384, mode: MaxEncodedLen) // Storage: Instance3WorkingGroup WorkerById (r:1 w:0) + // Proof: Instance3WorkingGroup WorkerById (max_values: None, max_size: Some(175), added: 2650, mode: MaxEncodedLen) // Storage: Content CuratorGroupById (r:1 w:0) + // Proof: Content CuratorGroupById (max_values: None, max_size: Some(1037), added: 3512, mode: MaxEncodedLen) + // Storage: Token PalletFrozen (r:1 w:0) + // Proof: Token PalletFrozen (max_values: Some(1), max_size: Some(1), added: 496, mode: MaxEncodedLen) // Storage: Token TokenInfoById (r:1 w:1) + // Proof: Token TokenInfoById (max_values: None, max_size: Some(352), added: 2827, mode: MaxEncodedLen) fn make_creator_token_permissionless() -> Weight { - (335_571_000 as Weight) - .saturating_add(T::DbWeight::get().reads(4 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + // Proof Size summary in bytes: + // Measured: `3104` + // Estimated: `17819` + // Minimum execution time: 156_697 nanoseconds. + Weight::from_parts(160_201_000, 0u64) + .saturating_add(Weight::from_parts(0, 17819)) + .saturating_add(T::DbWeight::get().reads(5_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) } // Storage: Content ChannelById (r:1 w:1) + // Proof: Content ChannelById (max_values: None, max_size: Some(909), added: 3384, mode: MaxEncodedLen) // Storage: Instance3WorkingGroup WorkerById (r:1 w:0) + // Proof: Instance3WorkingGroup WorkerById (max_values: None, max_size: Some(175), added: 2650, mode: MaxEncodedLen) // Storage: Content CuratorGroupById (r:1 w:0) + // Proof: Content CuratorGroupById (max_values: None, max_size: Some(1037), added: 3512, mode: MaxEncodedLen) + // Storage: Token PalletFrozen (r:1 w:0) + // Proof: Token PalletFrozen (max_values: Some(1), max_size: Some(1), added: 496, mode: MaxEncodedLen) // Storage: Token TokenInfoById (r:1 w:1) - // Storage: Token SymbolsUsed (r:0 w:1) + // Proof: Token TokenInfoById (max_values: None, max_size: Some(352), added: 2827, mode: MaxEncodedLen) fn deissue_creator_token() -> Weight { - (390_060_000 as Weight) - .saturating_add(T::DbWeight::get().reads(4 as Weight)) - .saturating_add(T::DbWeight::get().writes(3 as Weight)) + // Proof Size summary in bytes: + // Measured: `3071` + // Estimated: `17819` + // Minimum execution time: 177_442 nanoseconds. + Weight::from_parts(179_188_000, 0u64) + .saturating_add(Weight::from_parts(0, 17819)) + .saturating_add(T::DbWeight::get().reads(5_u64)) + .saturating_add(T::DbWeight::get().writes(2_u64)) } // Storage: Content ChannelById (r:1 w:0) + // Proof: Content ChannelById (max_values: None, max_size: Some(909), added: 3384, mode: MaxEncodedLen) // Storage: Instance3WorkingGroup WorkerById (r:1 w:0) + // Proof: Instance3WorkingGroup WorkerById (max_values: None, max_size: Some(175), added: 2650, mode: MaxEncodedLen) // Storage: Content CuratorGroupById (r:1 w:0) + // Proof: Content CuratorGroupById (max_values: None, max_size: Some(1037), added: 3512, mode: MaxEncodedLen) + // Storage: Token PalletFrozen (r:1 w:0) + // Proof: Token PalletFrozen (max_values: Some(1), max_size: Some(1), added: 496, mode: MaxEncodedLen) // Storage: Token TokenInfoById (r:1 w:1) + // Proof: Token TokenInfoById (max_values: None, max_size: Some(352), added: 2827, mode: MaxEncodedLen) // Storage: Token MinSaleDuration (r:1 w:0) + // Proof: Token MinSaleDuration (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) // Storage: Token AccountInfoByTokenAndMember (r:1 w:1) + // Proof: Token AccountInfoByTokenAndMember (max_values: None, max_size: Some(489), added: 2964, mode: MaxEncodedLen) + /// The range of component `a` is `[1, 100]`. fn init_creator_token_sale(a: u32, ) -> Weight { - (387_903_000 as Weight) - // Standard Error: 3_000 - .saturating_add((807_000 as Weight).saturating_mul(a as Weight)) - .saturating_add(T::DbWeight::get().reads(6 as Weight)) - .saturating_add(T::DbWeight::get().writes(2 as Weight)) + // Proof Size summary in bytes: + // Measured: `3539` + // Estimated: `23262` + // Minimum execution time: 182_826 nanoseconds. + Weight::from_parts(186_191_859, 0u64) + .saturating_add(Weight::from_parts(0, 23262)) + // Standard Error: 6_934 + .saturating_add(Weight::from_parts(981_609, 0u64).saturating_mul(a.into())) + .saturating_add(T::DbWeight::get().reads(7_u64)) + .saturating_add(T::DbWeight::get().writes(2_u64)) } // Storage: Content ChannelById (r:1 w:0) + // Proof: Content ChannelById (max_values: None, max_size: Some(909), added: 3384, mode: MaxEncodedLen) // Storage: Instance3WorkingGroup WorkerById (r:1 w:0) + // Proof: Instance3WorkingGroup WorkerById (max_values: None, max_size: Some(175), added: 2650, mode: MaxEncodedLen) // Storage: Content CuratorGroupById (r:1 w:0) + // Proof: Content CuratorGroupById (max_values: None, max_size: Some(1037), added: 3512, mode: MaxEncodedLen) // Storage: Token TokenInfoById (r:1 w:1) + // Proof: Token TokenInfoById (max_values: None, max_size: Some(352), added: 2827, mode: MaxEncodedLen) + // Storage: Token PalletFrozen (r:1 w:0) + // Proof: Token PalletFrozen (max_values: Some(1), max_size: Some(1), added: 496, mode: MaxEncodedLen) // Storage: Token MinSaleDuration (r:1 w:0) + // Proof: Token MinSaleDuration (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) fn update_upcoming_creator_token_sale() -> Weight { - (362_009_000 as Weight) - .saturating_add(T::DbWeight::get().reads(5 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + // Proof Size summary in bytes: + // Measured: `3227` + // Estimated: `19308` + // Minimum execution time: 165_920 nanoseconds. + Weight::from_parts(168_120_000, 0u64) + .saturating_add(Weight::from_parts(0, 19308)) + .saturating_add(T::DbWeight::get().reads(6_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) } // Storage: Content ChannelById (r:1 w:0) + // Proof: Content ChannelById (max_values: None, max_size: Some(909), added: 3384, mode: MaxEncodedLen) // Storage: Instance3WorkingGroup WorkerById (r:1 w:0) + // Proof: Instance3WorkingGroup WorkerById (max_values: None, max_size: Some(175), added: 2650, mode: MaxEncodedLen) // Storage: Content CuratorGroupById (r:1 w:0) + // Proof: Content CuratorGroupById (max_values: None, max_size: Some(1037), added: 3512, mode: MaxEncodedLen) // Storage: Token TokenInfoById (r:1 w:1) + // Proof: Token TokenInfoById (max_values: None, max_size: Some(352), added: 2827, mode: MaxEncodedLen) + // Storage: Token PalletFrozen (r:1 w:0) + // Proof: Token PalletFrozen (max_values: Some(1), max_size: Some(1), added: 496, mode: MaxEncodedLen) // Storage: Token AccountInfoByTokenAndMember (r:1 w:1) + // Proof: Token AccountInfoByTokenAndMember (max_values: None, max_size: Some(489), added: 2964, mode: MaxEncodedLen) // Storage: Council Budget (r:1 w:1) + // Proof: Council Budget (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) fn finalize_creator_token_sale() -> Weight { - (382_379_000 as Weight) - .saturating_add(T::DbWeight::get().reads(6 as Weight)) - .saturating_add(T::DbWeight::get().writes(3 as Weight)) + // Proof Size summary in bytes: + // Measured: `3934` + // Estimated: `23274` + // Minimum execution time: 177_506 nanoseconds. + Weight::from_parts(182_103_000, 0u64) + .saturating_add(Weight::from_parts(0, 23274)) + .saturating_add(T::DbWeight::get().reads(7_u64)) + .saturating_add(T::DbWeight::get().writes(3_u64)) } // Storage: Content ChannelById (r:1 w:0) + // Proof: Content ChannelById (max_values: None, max_size: Some(909), added: 3384, mode: MaxEncodedLen) // Storage: Instance3WorkingGroup WorkerById (r:1 w:0) + // Proof: Instance3WorkingGroup WorkerById (max_values: None, max_size: Some(175), added: 2650, mode: MaxEncodedLen) // Storage: Content CuratorGroupById (r:1 w:0) + // Proof: Content CuratorGroupById (max_values: None, max_size: Some(1037), added: 3512, mode: MaxEncodedLen) + // Storage: Token TokenInfoById (r:1 w:1) + // Proof: Token TokenInfoById (max_values: None, max_size: Some(352), added: 2827, mode: MaxEncodedLen) + // Storage: Token PalletFrozen (r:1 w:0) + // Storage: Token MinAmmSlopeParameter (r:1 w:0) + // Proof: Token MinAmmSlopeParameter (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) + // Storage: System Account (r:1 w:1) + // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + fn activate_amm() -> Weight { + // Proof Size summary in bytes: + // Measured: `3205` + // Estimated: `21427` + // Minimum execution time: 188_296 nanoseconds. + Weight::from_parts(192_189_000, 0u64) + .saturating_add(Weight::from_parts(0, 21427)) + .saturating_add(T::DbWeight::get().reads(7_u64)) + .saturating_add(T::DbWeight::get().writes(2_u64)) + } + // Storage: Content ChannelById (r:1 w:0) + // Proof: Content ChannelById (max_values: None, max_size: Some(909), added: 3384, mode: MaxEncodedLen) + // Storage: Instance3WorkingGroup WorkerById (r:1 w:0) + // Proof: Instance3WorkingGroup WorkerById (max_values: None, max_size: Some(175), added: 2650, mode: MaxEncodedLen) + // Storage: Content CuratorGroupById (r:1 w:0) + // Proof: Content CuratorGroupById (max_values: None, max_size: Some(1037), added: 3512, mode: MaxEncodedLen) + // Storage: Token TokenInfoById (r:1 w:1) + // Proof: Token TokenInfoById (max_values: None, max_size: Some(352), added: 2827, mode: MaxEncodedLen) + // Storage: Token PalletFrozen (r:1 w:0) + // Storage: Token AmmDeactivationThreshold (r:1 w:0) + // Proof: Token AmmDeactivationThreshold (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + // Storage: System Account (r:1 w:0) + // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + fn deactivate_amm() -> Weight { + // Proof Size summary in bytes: + // Measured: `3359` + // Estimated: `21415` + // Minimum execution time: 164_519 nanoseconds. + Weight::from_parts(166_906_000, 0u64) + .saturating_add(Weight::from_parts(0, 21415)) + .saturating_add(T::DbWeight::get().reads(7_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) + } + // Storage: Content ChannelById (r:1 w:0) + // Proof: Content ChannelById (max_values: None, max_size: Some(909), added: 3384, mode: MaxEncodedLen) + // Storage: Instance3WorkingGroup WorkerById (r:1 w:0) + // Proof: Instance3WorkingGroup WorkerById (max_values: None, max_size: Some(175), added: 2650, mode: MaxEncodedLen) + // Storage: Content CuratorGroupById (r:1 w:0) + // Proof: Content CuratorGroupById (max_values: None, max_size: Some(1037), added: 3512, mode: MaxEncodedLen) // Storage: System Account (r:2 w:2) + // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + // Storage: Token PalletFrozen (r:1 w:0) + // Proof: Token PalletFrozen (max_values: Some(1), max_size: Some(1), added: 496, mode: MaxEncodedLen) // Storage: Token TokenInfoById (r:1 w:1) + // Proof: Token TokenInfoById (max_values: None, max_size: Some(352), added: 2827, mode: MaxEncodedLen) // Storage: Token MinRevenueSplitDuration (r:1 w:0) + // Proof: Token MinRevenueSplitDuration (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) // Storage: Token MinRevenueSplitTimeToStart (r:1 w:0) + // Proof: Token MinRevenueSplitTimeToStart (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) // Storage: Council Budget (r:1 w:1) + // Proof: Council Budget (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) fn issue_revenue_split() -> Weight { - (471_740_000 as Weight) - .saturating_add(T::DbWeight::get().reads(9 as Weight)) - .saturating_add(T::DbWeight::get().writes(4 as Weight)) + // Proof Size summary in bytes: + // Measured: `3791` + // Estimated: `28494` + // Minimum execution time: 212_646 nanoseconds. + Weight::from_parts(217_245_000, 0u64) + .saturating_add(Weight::from_parts(0, 28494)) + .saturating_add(T::DbWeight::get().reads(10_u64)) + .saturating_add(T::DbWeight::get().writes(4_u64)) } // Storage: Content ChannelById (r:1 w:0) + // Proof: Content ChannelById (max_values: None, max_size: Some(909), added: 3384, mode: MaxEncodedLen) // Storage: Membership MembershipById (r:2 w:0) + // Proof: Membership MembershipById (max_values: None, max_size: Some(125), added: 2600, mode: MaxEncodedLen) // Storage: System Account (r:3 w:3) + // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + // Storage: Token PalletFrozen (r:1 w:0) + // Proof: Token PalletFrozen (max_values: Some(1), max_size: Some(1), added: 496, mode: MaxEncodedLen) // Storage: Token TokenInfoById (r:1 w:1) + // Proof: Token TokenInfoById (max_values: None, max_size: Some(352), added: 2827, mode: MaxEncodedLen) // Storage: Token MinRevenueSplitDuration (r:1 w:0) + // Proof: Token MinRevenueSplitDuration (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) // Storage: Token MinRevenueSplitTimeToStart (r:1 w:0) + // Proof: Token MinRevenueSplitTimeToStart (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) fn issue_revenue_split_as_collaborator() -> Weight { - (286_690_000 as Weight) - .saturating_add(T::DbWeight::get().reads(9 as Weight)) - .saturating_add(T::DbWeight::get().writes(4 as Weight)) + // Proof Size summary in bytes: + // Measured: `3078` + // Estimated: `27644` + // Minimum execution time: 138_834 nanoseconds. + Weight::from_parts(140_035_000, 0u64) + .saturating_add(Weight::from_parts(0, 27644)) + .saturating_add(T::DbWeight::get().reads(10_u64)) + .saturating_add(T::DbWeight::get().writes(4_u64)) } // Storage: Content ChannelById (r:1 w:0) + // Proof: Content ChannelById (max_values: None, max_size: Some(909), added: 3384, mode: MaxEncodedLen) // Storage: Instance3WorkingGroup WorkerById (r:1 w:0) + // Proof: Instance3WorkingGroup WorkerById (max_values: None, max_size: Some(175), added: 2650, mode: MaxEncodedLen) // Storage: Content CuratorGroupById (r:1 w:0) + // Proof: Content CuratorGroupById (max_values: None, max_size: Some(1037), added: 3512, mode: MaxEncodedLen) + // Storage: Token PalletFrozen (r:1 w:0) + // Proof: Token PalletFrozen (max_values: Some(1), max_size: Some(1), added: 496, mode: MaxEncodedLen) // Storage: Token TokenInfoById (r:1 w:1) + // Proof: Token TokenInfoById (max_values: None, max_size: Some(352), added: 2827, mode: MaxEncodedLen) // Storage: System Account (r:2 w:2) + // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) fn finalize_revenue_split() -> Weight { - (401_180_000 as Weight) - .saturating_add(T::DbWeight::get().reads(6 as Weight)) - .saturating_add(T::DbWeight::get().writes(3 as Weight)) + // Proof Size summary in bytes: + // Measured: `3525` + // Estimated: `24015` + // Minimum execution time: 192_989 nanoseconds. + Weight::from_parts(197_021_000, 0u64) + .saturating_add(Weight::from_parts(0, 24015)) + .saturating_add(T::DbWeight::get().reads(7_u64)) + .saturating_add(T::DbWeight::get().writes(3_u64)) } // Storage: Content ChannelById (r:1 w:0) + // Proof: Content ChannelById (max_values: None, max_size: Some(909), added: 3384, mode: MaxEncodedLen) // Storage: Instance3WorkingGroup WorkerById (r:1 w:0) + // Proof: Instance3WorkingGroup WorkerById (max_values: None, max_size: Some(175), added: 2650, mode: MaxEncodedLen) // Storage: Content CuratorGroupById (r:1 w:0) + // Proof: Content CuratorGroupById (max_values: None, max_size: Some(1037), added: 3512, mode: MaxEncodedLen) + // Storage: Token PalletFrozen (r:1 w:0) + // Proof: Token PalletFrozen (max_values: Some(1), max_size: Some(1), added: 496, mode: MaxEncodedLen) // Storage: Token TokenInfoById (r:1 w:1) + // Proof: Token TokenInfoById (max_values: None, max_size: Some(352), added: 2827, mode: MaxEncodedLen) fn reduce_creator_token_patronage_rate_to() -> Weight { - (370_090_000 as Weight) - .saturating_add(T::DbWeight::get().reads(4 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + // Proof Size summary in bytes: + // Measured: `3104` + // Estimated: `17819` + // Minimum execution time: 183_618 nanoseconds. + Weight::from_parts(189_604_000, 0u64) + .saturating_add(Weight::from_parts(0, 17819)) + .saturating_add(T::DbWeight::get().reads(5_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) } // Storage: Content ChannelById (r:1 w:0) + // Proof: Content ChannelById (max_values: None, max_size: Some(909), added: 3384, mode: MaxEncodedLen) // Storage: Membership MembershipById (r:1 w:0) + // Proof: Membership MembershipById (max_values: None, max_size: Some(125), added: 2600, mode: MaxEncodedLen) + // Storage: Token PalletFrozen (r:1 w:0) + // Proof: Token PalletFrozen (max_values: Some(1), max_size: Some(1), added: 496, mode: MaxEncodedLen) // Storage: Token TokenInfoById (r:1 w:1) + // Proof: Token TokenInfoById (max_values: None, max_size: Some(352), added: 2827, mode: MaxEncodedLen) // Storage: Token AccountInfoByTokenAndMember (r:1 w:1) + // Proof: Token AccountInfoByTokenAndMember (max_values: None, max_size: Some(489), added: 2964, mode: MaxEncodedLen) fn claim_creator_token_patronage_credit() -> Weight { - (190_920_000 as Weight) - .saturating_add(T::DbWeight::get().reads(4 as Weight)) - .saturating_add(T::DbWeight::get().writes(2 as Weight)) + // Proof Size summary in bytes: + // Measured: `2729` + // Estimated: `17221` + // Minimum execution time: 125_352 nanoseconds. + Weight::from_parts(131_207_000, 0u64) + .saturating_add(Weight::from_parts(0, 17221)) + .saturating_add(T::DbWeight::get().reads(5_u64)) + .saturating_add(T::DbWeight::get().writes(2_u64)) } // Storage: Storage NextDataObjectId (r:1 w:1) + // Proof: Storage NextDataObjectId (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) // Storage: Storage DataObjectPerMegabyteFee (r:1 w:0) + // Proof: Storage DataObjectPerMegabyteFee (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) // Storage: Storage DataObjectStateBloatBondValue (r:1 w:0) + // Proof: Storage DataObjectStateBloatBondValue (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) // Storage: Storage Bags (r:1 w:1) + // Proof: Storage Bags (max_values: None, max_size: Some(964), added: 3439, mode: MaxEncodedLen) // Storage: Storage UploadingBlocked (r:1 w:0) + // Proof: Storage UploadingBlocked (max_values: Some(1), max_size: Some(1), added: 496, mode: MaxEncodedLen) // Storage: Storage Blacklist (r:1 w:0) + // Proof: Storage Blacklist (max_values: None, max_size: Some(63), added: 2538, mode: MaxEncodedLen) // Storage: System Account (r:2 w:2) + // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) // Storage: Storage DataObjectsById (r:0 w:1) + // Proof: Storage DataObjectsById (max_values: None, max_size: Some(155), added: 2630, mode: MaxEncodedLen) // Storage: Content ChannelCashoutsEnabled (r:0 w:1) + // Proof: Content ChannelCashoutsEnabled (max_values: Some(1), max_size: Some(1), added: 496, mode: MaxEncodedLen) // Storage: Content MaxCashoutAllowed (r:0 w:1) + // Proof: Content MaxCashoutAllowed (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) // Storage: Content MinCashoutAllowed (r:0 w:1) + // Proof: Content MinCashoutAllowed (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) // Storage: Content Commitment (r:0 w:1) + // Proof: Content Commitment (max_values: Some(1), max_size: Some(32), added: 527, mode: MaxEncodedLen) fn update_channel_payouts() -> Weight { - (138_756_000 as Weight) - .saturating_add(T::DbWeight::get().reads(8 as Weight)) - .saturating_add(T::DbWeight::get().writes(9 as Weight)) + // Proof Size summary in bytes: + // Measured: `361` + // Estimated: `20134` + // Minimum execution time: 102_178 nanoseconds. + Weight::from_parts(105_271_000, 0u64) + .saturating_add(Weight::from_parts(0, 20134)) + .saturating_add(T::DbWeight::get().reads(8_u64)) + .saturating_add(T::DbWeight::get().writes(9_u64)) } // Storage: Content ChannelById (r:1 w:0) + // Proof: Content ChannelById (max_values: None, max_size: Some(909), added: 3384, mode: MaxEncodedLen) // Storage: Instance3WorkingGroup CurrentLead (r:1 w:0) + // Proof: Instance3WorkingGroup CurrentLead (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) // Storage: Instance3WorkingGroup WorkerById (r:1 w:0) + // Proof: Instance3WorkingGroup WorkerById (max_values: None, max_size: Some(175), added: 2650, mode: MaxEncodedLen) // Storage: System Account (r:1 w:1) + // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) // Storage: Council Budget (r:1 w:1) + // Proof: Council Budget (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) fn withdraw_from_curator_channel_balance() -> Weight { - (188_400_000 as Weight) - .saturating_add(T::DbWeight::get().reads(5 as Weight)) - .saturating_add(T::DbWeight::get().writes(2 as Weight)) + // Proof Size summary in bytes: + // Measured: `2122` + // Estimated: `14601` + // Minimum execution time: 96_727 nanoseconds. + Weight::from_parts(100_273_000, 0u64) + .saturating_add(Weight::from_parts(0, 14601)) + .saturating_add(T::DbWeight::get().reads(5_u64)) + .saturating_add(T::DbWeight::get().writes(2_u64)) } // Storage: Content ChannelById (r:1 w:0) + // Proof: Content ChannelById (max_values: None, max_size: Some(909), added: 3384, mode: MaxEncodedLen) // Storage: Membership MembershipById (r:1 w:0) + // Proof: Membership MembershipById (max_values: None, max_size: Some(125), added: 2600, mode: MaxEncodedLen) // Storage: System Account (r:2 w:2) + // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) fn withdraw_from_member_channel_balance() -> Weight { - (178_320_000 as Weight) - .saturating_add(T::DbWeight::get().reads(4 as Weight)) - .saturating_add(T::DbWeight::get().writes(2 as Weight)) + // Proof Size summary in bytes: + // Measured: `2139` + // Estimated: `14160` + // Minimum execution time: 90_003 nanoseconds. + Weight::from_parts(92_632_000, 0u64) + .saturating_add(Weight::from_parts(0, 14160)) + .saturating_add(T::DbWeight::get().reads(4_u64)) + .saturating_add(T::DbWeight::get().writes(2_u64)) } // Storage: Content ChannelById (r:1 w:1) + // Proof: Content ChannelById (max_values: None, max_size: Some(909), added: 3384, mode: MaxEncodedLen) // Storage: Instance3WorkingGroup CurrentLead (r:1 w:0) + // Proof: Instance3WorkingGroup CurrentLead (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) // Storage: Instance3WorkingGroup WorkerById (r:1 w:0) + // Proof: Instance3WorkingGroup WorkerById (max_values: None, max_size: Some(175), added: 2650, mode: MaxEncodedLen) // Storage: Content ChannelCashoutsEnabled (r:1 w:0) + // Proof: Content ChannelCashoutsEnabled (max_values: Some(1), max_size: Some(1), added: 496, mode: MaxEncodedLen) // Storage: Content MaxCashoutAllowed (r:1 w:0) + // Proof: Content MaxCashoutAllowed (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) // Storage: Content MinCashoutAllowed (r:1 w:0) + // Proof: Content MinCashoutAllowed (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) // Storage: Council Budget (r:1 w:1) + // Proof: Council Budget (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) // Storage: Content Commitment (r:1 w:0) + // Proof: Content Commitment (max_values: Some(1), max_size: Some(32), added: 527, mode: MaxEncodedLen) // Storage: System Account (r:1 w:1) + // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + /// The range of component `h` is `[1, 10]`. fn claim_channel_reward(h: u32, ) -> Weight { - (156_101_000 as Weight) - // Standard Error: 56_000 - .saturating_add((951_000 as Weight).saturating_mul(h as Weight)) - .saturating_add(T::DbWeight::get().reads(9 as Weight)) - .saturating_add(T::DbWeight::get().writes(3 as Weight)) - } - // Storage: Content ChannelById (r:1 w:1) - // Storage: Membership MembershipById (r:1 w:0) - // Storage: Content ChannelCashoutsEnabled (r:1 w:0) - // Storage: Content MaxCashoutAllowed (r:1 w:0) - // Storage: Content MinCashoutAllowed (r:1 w:0) - // Storage: Council Budget (r:1 w:1) - // Storage: Content Commitment (r:1 w:0) - // Storage: System Account (r:2 w:2) - fn claim_and_withdraw_member_channel_reward(h: u32, ) -> Weight { - (300_227_000 as Weight) - // Standard Error: 100_000 - .saturating_add((1_850_000 as Weight).saturating_mul(h as Weight)) - .saturating_add(T::DbWeight::get().reads(9 as Weight)) - .saturating_add(T::DbWeight::get().writes(4 as Weight)) - } - // Storage: Content ChannelById (r:1 w:1) - // Storage: Instance3WorkingGroup CurrentLead (r:1 w:0) - // Storage: Instance3WorkingGroup WorkerById (r:1 w:0) - // Storage: Content ChannelCashoutsEnabled (r:1 w:0) - // Storage: Content MaxCashoutAllowed (r:1 w:0) - // Storage: Content MinCashoutAllowed (r:1 w:0) - // Storage: Council Budget (r:1 w:1) - // Storage: Content Commitment (r:1 w:0) - // Storage: System Account (r:1 w:1) - fn claim_and_withdraw_curator_channel_reward(h: u32, ) -> Weight { - (298_738_000 as Weight) - // Standard Error: 75_000 - .saturating_add((1_759_000 as Weight).saturating_mul(h as Weight)) - .saturating_add(T::DbWeight::get().reads(9 as Weight)) - .saturating_add(T::DbWeight::get().writes(3 as Weight)) + // Proof Size summary in bytes: + // Measured: `2245` + // Estimated: `20606` + // Minimum execution time: 127_825 nanoseconds. + Weight::from_parts(131_097_081, 0u64) + .saturating_add(Weight::from_parts(0, 20606)) + // Standard Error: 25_119 + .saturating_add(Weight::from_parts(530_487, 0u64).saturating_mul(h.into())) + .saturating_add(T::DbWeight::get().reads(9_u64)) + .saturating_add(T::DbWeight::get().writes(3_u64)) } // Storage: Content VideoById (r:1 w:1) + // Proof: Content VideoById (max_values: None, max_size: Some(513), added: 2988, mode: MaxEncodedLen) // Storage: Content ChannelById (r:1 w:1) + // Proof: Content ChannelById (max_values: None, max_size: Some(909), added: 3384, mode: MaxEncodedLen) // Storage: Instance3WorkingGroup WorkerById (r:1 w:0) + // Proof: Instance3WorkingGroup WorkerById (max_values: None, max_size: Some(175), added: 2650, mode: MaxEncodedLen) // Storage: Content CuratorGroupById (r:1 w:0) + // Proof: Content CuratorGroupById (max_values: None, max_size: Some(1037), added: 3512, mode: MaxEncodedLen) // Storage: Content MaxAuctionDuration (r:1 w:0) + // Proof: Content MaxAuctionDuration (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) // Storage: Content MinAuctionDuration (r:1 w:0) + // Proof: Content MinAuctionDuration (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) // Storage: Content MaxAuctionExtensionPeriod (r:1 w:0) + // Proof: Content MaxAuctionExtensionPeriod (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) // Storage: Content MinAuctionExtensionPeriod (r:1 w:0) + // Proof: Content MinAuctionExtensionPeriod (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) // Storage: Content MaxBidStep (r:1 w:0) + // Proof: Content MaxBidStep (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) // Storage: Content MinBidStep (r:1 w:0) + // Proof: Content MinBidStep (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) // Storage: Content AuctionStartsAtMaxDelta (r:1 w:0) + // Proof: Content AuctionStartsAtMaxDelta (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) // Storage: Content MinStartingPrice (r:1 w:0) + // Proof: Content MinStartingPrice (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) // Storage: Content MaxStartingPrice (r:1 w:0) - // Storage: Membership MembershipById (r:2 w:0) + // Proof: Content MaxStartingPrice (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) + // Storage: Membership MembershipById (r:20 w:0) + // Proof: Membership MembershipById (max_values: None, max_size: Some(125), added: 2600, mode: MaxEncodedLen) // Storage: Content MaxCreatorRoyalty (r:1 w:0) + // Proof: Content MaxCreatorRoyalty (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) // Storage: Content MinCreatorRoyalty (r:1 w:0) + // Proof: Content MinCreatorRoyalty (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) // Storage: Content NftLimitsEnabled (r:1 w:0) + // Proof: Content NftLimitsEnabled (max_values: Some(1), max_size: Some(1), added: 496, mode: MaxEncodedLen) // Storage: Content GlobalDailyNftLimit (r:1 w:0) + // Proof: Content GlobalDailyNftLimit (max_values: Some(1), max_size: Some(12), added: 507, mode: MaxEncodedLen) // Storage: Content GlobalDailyNftCounter (r:1 w:1) + // Proof: Content GlobalDailyNftCounter (max_values: Some(1), max_size: Some(12), added: 507, mode: MaxEncodedLen) // Storage: Content GlobalWeeklyNftLimit (r:1 w:0) + // Proof: Content GlobalWeeklyNftLimit (max_values: Some(1), max_size: Some(12), added: 507, mode: MaxEncodedLen) // Storage: Content GlobalWeeklyNftCounter (r:1 w:1) + // Proof: Content GlobalWeeklyNftCounter (max_values: Some(1), max_size: Some(12), added: 507, mode: MaxEncodedLen) + /// The range of component `w` is `[2, 20]`. + /// The range of component `b` is `[1, 100]`. fn issue_nft(w: u32, b: u32, ) -> Weight { - (585_229_000 as Weight) - // Standard Error: 71_000 - .saturating_add((9_833_000 as Weight).saturating_mul(w as Weight)) - // Standard Error: 8_000 - .saturating_add((491_000 as Weight).saturating_mul(b as Weight)) - .saturating_add(T::DbWeight::get().reads(20 as Weight)) - .saturating_add(T::DbWeight::get().reads((1 as Weight).saturating_mul(w as Weight))) - .saturating_add(T::DbWeight::get().writes(4 as Weight)) + // Proof Size summary in bytes: + // Measured: `4000 + w * (172 ±0)` + // Estimated: `41385 + w * (2600 ±0)` + // Minimum execution time: 317_365 nanoseconds. + Weight::from_parts(238_706_193, 0u64) + .saturating_add(Weight::from_parts(0, 41385)) + // Standard Error: 45_721 + .saturating_add(Weight::from_parts(3_892_064, 0u64).saturating_mul(w.into())) + // Standard Error: 8_561 + .saturating_add(Weight::from_parts(1_158_468, 0u64).saturating_mul(b.into())) + .saturating_add(T::DbWeight::get().reads(20_u64)) + .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(w.into()))) + .saturating_add(T::DbWeight::get().writes(4_u64)) + .saturating_add(Weight::from_parts(0, 2600).saturating_mul(w.into())) } // Storage: Content VideoById (r:1 w:1) + // Proof: Content VideoById (max_values: None, max_size: Some(513), added: 2988, mode: MaxEncodedLen) // Storage: Content ChannelById (r:1 w:0) + // Proof: Content ChannelById (max_values: None, max_size: Some(909), added: 3384, mode: MaxEncodedLen) // Storage: Instance3WorkingGroup WorkerById (r:1 w:0) + // Proof: Instance3WorkingGroup WorkerById (max_values: None, max_size: Some(175), added: 2650, mode: MaxEncodedLen) // Storage: Content CuratorGroupById (r:1 w:0) + // Proof: Content CuratorGroupById (max_values: None, max_size: Some(1037), added: 3512, mode: MaxEncodedLen) fn destroy_nft() -> Weight { - (469_109_000 as Weight) - .saturating_add(T::DbWeight::get().reads(4 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + // Proof Size summary in bytes: + // Measured: `2954` + // Estimated: `16494` + // Minimum execution time: 197_729 nanoseconds. + Weight::from_parts(201_203_000, 0u64) + .saturating_add(Weight::from_parts(0, 16494)) + .saturating_add(T::DbWeight::get().reads(4_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) } // Storage: Content VideoById (r:1 w:1) + // Proof: Content VideoById (max_values: None, max_size: Some(513), added: 2988, mode: MaxEncodedLen) // Storage: Content ChannelById (r:1 w:0) + // Proof: Content ChannelById (max_values: None, max_size: Some(909), added: 3384, mode: MaxEncodedLen) // Storage: Membership MembershipById (r:1 w:0) + // Proof: Membership MembershipById (max_values: None, max_size: Some(125), added: 2600, mode: MaxEncodedLen) fn sling_nft_back() -> Weight { - (126_850_000 as Weight) - .saturating_add(T::DbWeight::get().reads(3 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + // Proof Size summary in bytes: + // Measured: `2311` + // Estimated: `11942` + // Minimum execution time: 71_175 nanoseconds. + Weight::from_parts(73_731_000, 0u64) + .saturating_add(Weight::from_parts(0, 11942)) + .saturating_add(T::DbWeight::get().reads(3_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) } // Storage: Content VideoById (r:1 w:1) + // Proof: Content VideoById (max_values: None, max_size: Some(513), added: 2988, mode: MaxEncodedLen) // Storage: Content ChannelById (r:1 w:0) + // Proof: Content ChannelById (max_values: None, max_size: Some(909), added: 3384, mode: MaxEncodedLen) // Storage: Instance3WorkingGroup WorkerById (r:1 w:0) + // Proof: Instance3WorkingGroup WorkerById (max_values: None, max_size: Some(175), added: 2650, mode: MaxEncodedLen) // Storage: Content CuratorGroupById (r:1 w:0) + // Proof: Content CuratorGroupById (max_values: None, max_size: Some(1037), added: 3512, mode: MaxEncodedLen) // Storage: Membership MembershipById (r:1 w:0) + // Proof: Membership MembershipById (max_values: None, max_size: Some(125), added: 2600, mode: MaxEncodedLen) fn offer_nft() -> Weight { - (481_389_000 as Weight) - .saturating_add(T::DbWeight::get().reads(5 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + // Proof Size summary in bytes: + // Measured: `3844` + // Estimated: `20084` + // Minimum execution time: 207_037 nanoseconds. + Weight::from_parts(211_100_000, 0u64) + .saturating_add(Weight::from_parts(0, 20084)) + .saturating_add(T::DbWeight::get().reads(5_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) } // Storage: Content VideoById (r:1 w:1) + // Proof: Content VideoById (max_values: None, max_size: Some(513), added: 2988, mode: MaxEncodedLen) // Storage: Content ChannelById (r:1 w:0) + // Proof: Content ChannelById (max_values: None, max_size: Some(909), added: 3384, mode: MaxEncodedLen) // Storage: Instance3WorkingGroup WorkerById (r:1 w:0) + // Proof: Instance3WorkingGroup WorkerById (max_values: None, max_size: Some(175), added: 2650, mode: MaxEncodedLen) // Storage: Content CuratorGroupById (r:1 w:0) + // Proof: Content CuratorGroupById (max_values: None, max_size: Some(1037), added: 3512, mode: MaxEncodedLen) fn cancel_offer() -> Weight { - (470_080_000 as Weight) - .saturating_add(T::DbWeight::get().reads(4 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + // Proof Size summary in bytes: + // Measured: `2979` + // Estimated: `16494` + // Minimum execution time: 197_866 nanoseconds. + Weight::from_parts(202_976_000, 0u64) + .saturating_add(Weight::from_parts(0, 16494)) + .saturating_add(T::DbWeight::get().reads(4_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) } // Storage: Content VideoById (r:1 w:1) + // Proof: Content VideoById (max_values: None, max_size: Some(513), added: 2988, mode: MaxEncodedLen) // Storage: Content ChannelById (r:1 w:0) + // Proof: Content ChannelById (max_values: None, max_size: Some(909), added: 3384, mode: MaxEncodedLen) // Storage: Membership MembershipById (r:2 w:0) + // Proof: Membership MembershipById (max_values: None, max_size: Some(125), added: 2600, mode: MaxEncodedLen) // Storage: System Account (r:3 w:3) + // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) // Storage: Content PlatfromFeePercentage (r:1 w:0) + // Proof: Content PlatfromFeePercentage (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) fn accept_incoming_offer() -> Weight { - (268_660_000 as Weight) - .saturating_add(T::DbWeight::get().reads(8 as Weight)) - .saturating_add(T::DbWeight::get().writes(4 as Weight)) + // Proof Size summary in bytes: + // Measured: `3248` + // Estimated: `24830` + // Minimum execution time: 137_584 nanoseconds. + Weight::from_parts(139_591_000, 0u64) + .saturating_add(Weight::from_parts(0, 24830)) + .saturating_add(T::DbWeight::get().reads(8_u64)) + .saturating_add(T::DbWeight::get().writes(4_u64)) } // Storage: Content VideoById (r:1 w:1) + // Proof: Content VideoById (max_values: None, max_size: Some(513), added: 2988, mode: MaxEncodedLen) // Storage: Content ChannelById (r:1 w:0) + // Proof: Content ChannelById (max_values: None, max_size: Some(909), added: 3384, mode: MaxEncodedLen) // Storage: Instance3WorkingGroup WorkerById (r:1 w:0) + // Proof: Instance3WorkingGroup WorkerById (max_values: None, max_size: Some(175), added: 2650, mode: MaxEncodedLen) // Storage: Content CuratorGroupById (r:1 w:0) + // Proof: Content CuratorGroupById (max_values: None, max_size: Some(1037), added: 3512, mode: MaxEncodedLen) fn sell_nft() -> Weight { - (468_940_000 as Weight) - .saturating_add(T::DbWeight::get().reads(4 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + // Proof Size summary in bytes: + // Measured: `2954` + // Estimated: `16494` + // Minimum execution time: 197_589 nanoseconds. + Weight::from_parts(199_125_000, 0u64) + .saturating_add(Weight::from_parts(0, 16494)) + .saturating_add(T::DbWeight::get().reads(4_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) } // Storage: Content VideoById (r:1 w:1) + // Proof: Content VideoById (max_values: None, max_size: Some(513), added: 2988, mode: MaxEncodedLen) // Storage: Content ChannelById (r:1 w:0) + // Proof: Content ChannelById (max_values: None, max_size: Some(909), added: 3384, mode: MaxEncodedLen) // Storage: Instance3WorkingGroup WorkerById (r:1 w:0) + // Proof: Instance3WorkingGroup WorkerById (max_values: None, max_size: Some(175), added: 2650, mode: MaxEncodedLen) // Storage: Content CuratorGroupById (r:1 w:0) + // Proof: Content CuratorGroupById (max_values: None, max_size: Some(1037), added: 3512, mode: MaxEncodedLen) fn cancel_buy_now() -> Weight { - (477_060_000 as Weight) - .saturating_add(T::DbWeight::get().reads(4 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + // Proof Size summary in bytes: + // Measured: `2970` + // Estimated: `16494` + // Minimum execution time: 196_040 nanoseconds. + Weight::from_parts(200_571_000, 0u64) + .saturating_add(Weight::from_parts(0, 16494)) + .saturating_add(T::DbWeight::get().reads(4_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) } // Storage: Content VideoById (r:1 w:1) + // Proof: Content VideoById (max_values: None, max_size: Some(513), added: 2988, mode: MaxEncodedLen) // Storage: Content ChannelById (r:1 w:0) + // Proof: Content ChannelById (max_values: None, max_size: Some(909), added: 3384, mode: MaxEncodedLen) // Storage: Instance3WorkingGroup WorkerById (r:1 w:0) + // Proof: Instance3WorkingGroup WorkerById (max_values: None, max_size: Some(175), added: 2650, mode: MaxEncodedLen) // Storage: Content CuratorGroupById (r:1 w:0) + // Proof: Content CuratorGroupById (max_values: None, max_size: Some(1037), added: 3512, mode: MaxEncodedLen) fn update_buy_now_price() -> Weight { - (469_370_000 as Weight) - .saturating_add(T::DbWeight::get().reads(4 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + // Proof Size summary in bytes: + // Measured: `2970` + // Estimated: `16494` + // Minimum execution time: 196_526 nanoseconds. + Weight::from_parts(198_477_000, 0u64) + .saturating_add(Weight::from_parts(0, 16494)) + .saturating_add(T::DbWeight::get().reads(4_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) } // Storage: Membership MembershipById (r:2 w:0) + // Proof: Membership MembershipById (max_values: None, max_size: Some(125), added: 2600, mode: MaxEncodedLen) // Storage: Content VideoById (r:1 w:1) + // Proof: Content VideoById (max_values: None, max_size: Some(513), added: 2988, mode: MaxEncodedLen) // Storage: Content ChannelById (r:1 w:0) + // Proof: Content ChannelById (max_values: None, max_size: Some(909), added: 3384, mode: MaxEncodedLen) // Storage: System Account (r:3 w:3) + // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) // Storage: Content PlatfromFeePercentage (r:1 w:0) + // Proof: Content PlatfromFeePercentage (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) fn buy_nft() -> Weight { - (269_391_000 as Weight) - .saturating_add(T::DbWeight::get().reads(8 as Weight)) - .saturating_add(T::DbWeight::get().writes(4 as Weight)) + // Proof Size summary in bytes: + // Measured: `3239` + // Estimated: `24830` + // Minimum execution time: 136_068 nanoseconds. + Weight::from_parts(140_278_000, 0u64) + .saturating_add(Weight::from_parts(0, 24830)) + .saturating_add(T::DbWeight::get().reads(8_u64)) + .saturating_add(T::DbWeight::get().writes(4_u64)) } // Storage: Content NftLimitsEnabled (r:1 w:1) + // Proof: Content NftLimitsEnabled (max_values: Some(1), max_size: Some(1), added: 496, mode: MaxEncodedLen) fn toggle_nft_limits() -> Weight { - (37_130_000 as Weight) - .saturating_add(T::DbWeight::get().reads(1 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + // Proof Size summary in bytes: + // Measured: `546` + // Estimated: `1486` + // Minimum execution time: 17_178 nanoseconds. + Weight::from_parts(17_581_000, 0u64) + .saturating_add(Weight::from_parts(0, 1486)) + .saturating_add(T::DbWeight::get().reads(1_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) } // Storage: Content GlobalDailyNftLimit (r:1 w:1) + // Proof: Content GlobalDailyNftLimit (max_values: Some(1), max_size: Some(12), added: 507, mode: MaxEncodedLen) fn update_global_nft_limit() -> Weight { - (38_129_000 as Weight) - .saturating_add(T::DbWeight::get().reads(1 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + // Proof Size summary in bytes: + // Measured: `599` + // Estimated: `1497` + // Minimum execution time: 16_951 nanoseconds. + Weight::from_parts(17_741_000, 0u64) + .saturating_add(Weight::from_parts(0, 1497)) + .saturating_add(T::DbWeight::get().reads(1_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) } // Storage: Content ChannelById (r:1 w:1) + // Proof: Content ChannelById (max_values: None, max_size: Some(909), added: 3384, mode: MaxEncodedLen) // Storage: Instance3WorkingGroup WorkerById (r:1 w:0) + // Proof: Instance3WorkingGroup WorkerById (max_values: None, max_size: Some(175), added: 2650, mode: MaxEncodedLen) // Storage: Content CuratorGroupById (r:1 w:0) + // Proof: Content CuratorGroupById (max_values: None, max_size: Some(1037), added: 3512, mode: MaxEncodedLen) fn update_channel_nft_limit() -> Weight { - (342_840_000 as Weight) - .saturating_add(T::DbWeight::get().reads(3 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + // Proof Size summary in bytes: + // Measured: `2675` + // Estimated: `12516` + // Minimum execution time: 151_048 nanoseconds. + Weight::from_parts(153_043_000, 0u64) + .saturating_add(Weight::from_parts(0, 12516)) + .saturating_add(T::DbWeight::get().reads(3_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) } // Storage: Content VideoById (r:1 w:1) + // Proof: Content VideoById (max_values: None, max_size: Some(513), added: 2988, mode: MaxEncodedLen) // Storage: Content ChannelById (r:1 w:0) + // Proof: Content ChannelById (max_values: None, max_size: Some(909), added: 3384, mode: MaxEncodedLen) // Storage: Instance3WorkingGroup WorkerById (r:1 w:0) + // Proof: Instance3WorkingGroup WorkerById (max_values: None, max_size: Some(175), added: 2650, mode: MaxEncodedLen) // Storage: Content CuratorGroupById (r:1 w:0) + // Proof: Content CuratorGroupById (max_values: None, max_size: Some(1037), added: 3512, mode: MaxEncodedLen) // Storage: Content MaxAuctionDuration (r:1 w:0) + // Proof: Content MaxAuctionDuration (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) // Storage: Content MinAuctionDuration (r:1 w:0) + // Proof: Content MinAuctionDuration (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) // Storage: Content MaxAuctionExtensionPeriod (r:1 w:0) + // Proof: Content MaxAuctionExtensionPeriod (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) // Storage: Content MinAuctionExtensionPeriod (r:1 w:0) + // Proof: Content MinAuctionExtensionPeriod (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) // Storage: Content MaxBidStep (r:1 w:0) + // Proof: Content MaxBidStep (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) // Storage: Content MinBidStep (r:1 w:0) + // Proof: Content MinBidStep (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) // Storage: Content AuctionStartsAtMaxDelta (r:1 w:0) + // Proof: Content AuctionStartsAtMaxDelta (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) // Storage: Content MinStartingPrice (r:1 w:0) + // Proof: Content MinStartingPrice (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) // Storage: Content MaxStartingPrice (r:1 w:0) - // Storage: Membership MembershipById (r:2 w:0) + // Proof: Content MaxStartingPrice (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) + // Storage: Membership MembershipById (r:20 w:0) + // Proof: Membership MembershipById (max_values: None, max_size: Some(125), added: 2600, mode: MaxEncodedLen) + /// The range of component `w` is `[2, 20]`. fn start_english_auction(w: u32, ) -> Weight { - (548_144_000 as Weight) - // Standard Error: 55_000 - .saturating_add((11_411_000 as Weight).saturating_mul(w as Weight)) - .saturating_add(T::DbWeight::get().reads(13 as Weight)) - .saturating_add(T::DbWeight::get().reads((1 as Weight).saturating_mul(w as Weight))) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + // Proof Size summary in bytes: + // Measured: `4049 + w * (174 ±0)` + // Estimated: `30933 + w * (2600 ±0)` + // Minimum execution time: 240_536 nanoseconds. + Weight::from_parts(242_074_959, 0u64) + .saturating_add(Weight::from_parts(0, 30933)) + // Standard Error: 33_522 + .saturating_add(Weight::from_parts(4_474_357, 0u64).saturating_mul(w.into())) + .saturating_add(T::DbWeight::get().reads(13_u64)) + .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(w.into()))) + .saturating_add(T::DbWeight::get().writes(1_u64)) + .saturating_add(Weight::from_parts(0, 2600).saturating_mul(w.into())) } // Storage: Content VideoById (r:1 w:1) + // Proof: Content VideoById (max_values: None, max_size: Some(513), added: 2988, mode: MaxEncodedLen) // Storage: Content ChannelById (r:1 w:0) + // Proof: Content ChannelById (max_values: None, max_size: Some(909), added: 3384, mode: MaxEncodedLen) // Storage: Instance3WorkingGroup WorkerById (r:1 w:0) + // Proof: Instance3WorkingGroup WorkerById (max_values: None, max_size: Some(175), added: 2650, mode: MaxEncodedLen) // Storage: Content CuratorGroupById (r:1 w:0) + // Proof: Content CuratorGroupById (max_values: None, max_size: Some(1037), added: 3512, mode: MaxEncodedLen) fn cancel_english_auction() -> Weight { - (483_320_000 as Weight) - .saturating_add(T::DbWeight::get().reads(4 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + // Proof Size summary in bytes: + // Measured: `3177` + // Estimated: `16494` + // Minimum execution time: 205_981 nanoseconds. + Weight::from_parts(208_656_000, 0u64) + .saturating_add(Weight::from_parts(0, 16494)) + .saturating_add(T::DbWeight::get().reads(4_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) } // Storage: Membership MembershipById (r:3 w:0) + // Proof: Membership MembershipById (max_values: None, max_size: Some(125), added: 2600, mode: MaxEncodedLen) // Storage: Content VideoById (r:1 w:1) + // Proof: Content VideoById (max_values: None, max_size: Some(513), added: 2988, mode: MaxEncodedLen) // Storage: Content ChannelById (r:1 w:0) + // Proof: Content ChannelById (max_values: None, max_size: Some(909), added: 3384, mode: MaxEncodedLen) // Storage: System Account (r:5 w:5) + // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) // Storage: Content PlatfromFeePercentage (r:1 w:0) + // Proof: Content PlatfromFeePercentage (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) fn make_english_auction_bid() -> Weight { - (392_440_000 as Weight) - .saturating_add(T::DbWeight::get().reads(11 as Weight)) - .saturating_add(T::DbWeight::get().writes(6 as Weight)) + // Proof Size summary in bytes: + // Measured: `4152` + // Estimated: `32636` + // Minimum execution time: 184_519 nanoseconds. + Weight::from_parts(187_270_000, 0u64) + .saturating_add(Weight::from_parts(0, 32636)) + .saturating_add(T::DbWeight::get().reads(11_u64)) + .saturating_add(T::DbWeight::get().writes(6_u64)) } // Storage: Content VideoById (r:1 w:1) + // Proof: Content VideoById (max_values: None, max_size: Some(513), added: 2988, mode: MaxEncodedLen) // Storage: Content ChannelById (r:1 w:0) + // Proof: Content ChannelById (max_values: None, max_size: Some(909), added: 3384, mode: MaxEncodedLen) // Storage: Membership MembershipById (r:1 w:0) + // Proof: Membership MembershipById (max_values: None, max_size: Some(125), added: 2600, mode: MaxEncodedLen) // Storage: System Account (r:3 w:3) + // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) // Storage: Content PlatfromFeePercentage (r:1 w:0) + // Proof: Content PlatfromFeePercentage (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) fn settle_english_auction() -> Weight { - (265_260_000 as Weight) - .saturating_add(T::DbWeight::get().reads(7 as Weight)) - .saturating_add(T::DbWeight::get().writes(4 as Weight)) + // Proof Size summary in bytes: + // Measured: `3163` + // Estimated: `22230` + // Minimum execution time: 133_055 nanoseconds. + Weight::from_parts(135_605_000, 0u64) + .saturating_add(Weight::from_parts(0, 22230)) + .saturating_add(T::DbWeight::get().reads(7_u64)) + .saturating_add(T::DbWeight::get().writes(4_u64)) } // Storage: Content VideoById (r:1 w:1) + // Proof: Content VideoById (max_values: None, max_size: Some(513), added: 2988, mode: MaxEncodedLen) // Storage: Content ChannelById (r:1 w:0) + // Proof: Content ChannelById (max_values: None, max_size: Some(909), added: 3384, mode: MaxEncodedLen) // Storage: Instance3WorkingGroup WorkerById (r:1 w:0) + // Proof: Instance3WorkingGroup WorkerById (max_values: None, max_size: Some(175), added: 2650, mode: MaxEncodedLen) // Storage: Content CuratorGroupById (r:1 w:0) + // Proof: Content CuratorGroupById (max_values: None, max_size: Some(1037), added: 3512, mode: MaxEncodedLen) // Storage: Content MaxBidLockDuration (r:1 w:0) + // Proof: Content MaxBidLockDuration (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) // Storage: Content MinBidLockDuration (r:1 w:0) + // Proof: Content MinBidLockDuration (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) // Storage: Content MinStartingPrice (r:1 w:0) + // Proof: Content MinStartingPrice (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) // Storage: Content MaxStartingPrice (r:1 w:0) - // Storage: Membership MembershipById (r:2 w:0) + // Proof: Content MaxStartingPrice (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) + // Storage: Membership MembershipById (r:20 w:0) + // Proof: Membership MembershipById (max_values: None, max_size: Some(125), added: 2600, mode: MaxEncodedLen) // Storage: Content AuctionStartsAtMaxDelta (r:1 w:0) + // Proof: Content AuctionStartsAtMaxDelta (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// The range of component `w` is `[2, 20]`. fn start_open_auction(w: u32, ) -> Weight { - (519_399_000 as Weight) - // Standard Error: 53_000 - .saturating_add((11_276_000 as Weight).saturating_mul(w as Weight)) - .saturating_add(T::DbWeight::get().reads(9 as Weight)) - .saturating_add(T::DbWeight::get().reads((1 as Weight).saturating_mul(w as Weight))) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + // Proof Size summary in bytes: + // Measured: `3930 + w * (169 ±0)` + // Estimated: `24953 + w * (2600 ±0)` + // Minimum execution time: 230_058 nanoseconds. + Weight::from_parts(232_255_277, 0u64) + .saturating_add(Weight::from_parts(0, 24953)) + // Standard Error: 38_115 + .saturating_add(Weight::from_parts(4_065_389, 0u64).saturating_mul(w.into())) + .saturating_add(T::DbWeight::get().reads(9_u64)) + .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(w.into()))) + .saturating_add(T::DbWeight::get().writes(1_u64)) + .saturating_add(Weight::from_parts(0, 2600).saturating_mul(w.into())) } // Storage: Content VideoById (r:1 w:1) + // Proof: Content VideoById (max_values: None, max_size: Some(513), added: 2988, mode: MaxEncodedLen) // Storage: Content ChannelById (r:1 w:0) + // Proof: Content ChannelById (max_values: None, max_size: Some(909), added: 3384, mode: MaxEncodedLen) // Storage: Instance3WorkingGroup WorkerById (r:1 w:0) + // Proof: Instance3WorkingGroup WorkerById (max_values: None, max_size: Some(175), added: 2650, mode: MaxEncodedLen) // Storage: Content CuratorGroupById (r:1 w:0) + // Proof: Content CuratorGroupById (max_values: None, max_size: Some(1037), added: 3512, mode: MaxEncodedLen) fn cancel_open_auction() -> Weight { - (479_989_000 as Weight) - .saturating_add(T::DbWeight::get().reads(4 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + // Proof Size summary in bytes: + // Measured: `3164` + // Estimated: `16494` + // Minimum execution time: 203_611 nanoseconds. + Weight::from_parts(207_496_000, 0u64) + .saturating_add(Weight::from_parts(0, 16494)) + .saturating_add(T::DbWeight::get().reads(4_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) } // Storage: Membership MembershipById (r:1 w:0) + // Proof: Membership MembershipById (max_values: None, max_size: Some(125), added: 2600, mode: MaxEncodedLen) // Storage: Content VideoById (r:1 w:0) + // Proof: Content VideoById (max_values: None, max_size: Some(513), added: 2988, mode: MaxEncodedLen) // Storage: Content ChannelById (r:1 w:0) + // Proof: Content ChannelById (max_values: None, max_size: Some(909), added: 3384, mode: MaxEncodedLen) // Storage: Content OpenAuctionBidByVideoAndMember (r:1 w:1) + // Proof: Content OpenAuctionBidByVideoAndMember (max_values: None, max_size: Some(76), added: 2551, mode: MaxEncodedLen) // Storage: System Account (r:2 w:2) + // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) fn cancel_open_auction_bid() -> Weight { - (215_480_000 as Weight) - .saturating_add(T::DbWeight::get().reads(6 as Weight)) - .saturating_add(T::DbWeight::get().writes(3 as Weight)) + // Proof Size summary in bytes: + // Measured: `3237` + // Estimated: `21679` + // Minimum execution time: 112_443 nanoseconds. + Weight::from_parts(113_333_000, 0u64) + .saturating_add(Weight::from_parts(0, 21679)) + .saturating_add(T::DbWeight::get().reads(6_u64)) + .saturating_add(T::DbWeight::get().writes(3_u64)) } // Storage: Membership MembershipById (r:2 w:0) + // Proof: Membership MembershipById (max_values: None, max_size: Some(125), added: 2600, mode: MaxEncodedLen) // Storage: Content VideoById (r:1 w:1) + // Proof: Content VideoById (max_values: None, max_size: Some(513), added: 2988, mode: MaxEncodedLen) // Storage: Content ChannelById (r:1 w:0) + // Proof: Content ChannelById (max_values: None, max_size: Some(909), added: 3384, mode: MaxEncodedLen) // Storage: Content OpenAuctionBidByVideoAndMember (r:1 w:1) + // Proof: Content OpenAuctionBidByVideoAndMember (max_values: None, max_size: Some(76), added: 2551, mode: MaxEncodedLen) // Storage: System Account (r:3 w:3) + // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) // Storage: Content PlatfromFeePercentage (r:1 w:0) + // Proof: Content PlatfromFeePercentage (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) fn pick_open_auction_winner() -> Weight { - (294_170_000 as Weight) - .saturating_add(T::DbWeight::get().reads(9 as Weight)) - .saturating_add(T::DbWeight::get().writes(5 as Weight)) + // Proof Size summary in bytes: + // Measured: `3464` + // Estimated: `28371` + // Minimum execution time: 145_510 nanoseconds. + Weight::from_parts(147_531_000, 0u64) + .saturating_add(Weight::from_parts(0, 28371)) + .saturating_add(T::DbWeight::get().reads(9_u64)) + .saturating_add(T::DbWeight::get().writes(5_u64)) } // Storage: Membership MembershipById (r:2 w:0) + // Proof: Membership MembershipById (max_values: None, max_size: Some(125), added: 2600, mode: MaxEncodedLen) // Storage: Content OpenAuctionBidByVideoAndMember (r:1 w:0) + // Proof: Content OpenAuctionBidByVideoAndMember (max_values: None, max_size: Some(76), added: 2551, mode: MaxEncodedLen) // Storage: System Account (r:4 w:4) + // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) // Storage: Content VideoById (r:1 w:1) + // Proof: Content VideoById (max_values: None, max_size: Some(513), added: 2988, mode: MaxEncodedLen) // Storage: Content ChannelById (r:1 w:0) + // Proof: Content ChannelById (max_values: None, max_size: Some(909), added: 3384, mode: MaxEncodedLen) // Storage: Content PlatfromFeePercentage (r:1 w:0) + // Proof: Content PlatfromFeePercentage (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) fn make_open_auction_bid() -> Weight { - (353_009_000 as Weight) - .saturating_add(T::DbWeight::get().reads(10 as Weight)) - .saturating_add(T::DbWeight::get().writes(5 as Weight)) + // Proof Size summary in bytes: + // Measured: `3841` + // Estimated: `30974` + // Minimum execution time: 172_257 nanoseconds. + Weight::from_parts(174_169_000, 0u64) + .saturating_add(Weight::from_parts(0, 30974)) + .saturating_add(T::DbWeight::get().reads(10_u64)) + .saturating_add(T::DbWeight::get().writes(5_u64)) } // Storage: Content ChannelById (r:1 w:0) + // Proof: Content ChannelById (max_values: None, max_size: Some(909), added: 3384, mode: MaxEncodedLen) // Storage: Instance3WorkingGroup CurrentLead (r:1 w:0) + // Proof: Instance3WorkingGroup CurrentLead (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) // Storage: Instance3WorkingGroup WorkerById (r:1 w:0) + // Proof: Instance3WorkingGroup WorkerById (max_values: None, max_size: Some(175), added: 2650, mode: MaxEncodedLen) + /// The range of component `b` is `[1, 100]`. fn channel_owner_remark(b: u32, ) -> Weight { - (113_465_000 as Weight) - // Standard Error: 4_000 - .saturating_add((726_000 as Weight).saturating_mul(b as Weight)) - .saturating_add(T::DbWeight::get().reads(3 as Weight)) + // Proof Size summary in bytes: + // Measured: `1676` + // Estimated: `9507` + // Minimum execution time: 63_029 nanoseconds. + Weight::from_parts(62_390_366, 0u64) + .saturating_add(Weight::from_parts(0, 9507)) + // Standard Error: 3_138 + .saturating_add(Weight::from_parts(1_067_708, 0u64).saturating_mul(b.into())) + .saturating_add(T::DbWeight::get().reads(3_u64)) } // Storage: Content ChannelById (r:1 w:0) + // Proof: Content ChannelById (max_values: None, max_size: Some(909), added: 3384, mode: MaxEncodedLen) // Storage: Instance3WorkingGroup WorkerById (r:1 w:0) + // Proof: Instance3WorkingGroup WorkerById (max_values: None, max_size: Some(175), added: 2650, mode: MaxEncodedLen) // Storage: Content CuratorGroupById (r:1 w:0) + // Proof: Content CuratorGroupById (max_values: None, max_size: Some(1037), added: 3512, mode: MaxEncodedLen) + /// The range of component `b` is `[1, 100]`. fn channel_agent_remark(b: u32, ) -> Weight { - (309_636_000 as Weight) - // Standard Error: 5_000 - .saturating_add((690_000 as Weight).saturating_mul(b as Weight)) - .saturating_add(T::DbWeight::get().reads(3 as Weight)) + // Proof Size summary in bytes: + // Measured: `2675` + // Estimated: `12516` + // Minimum execution time: 131_801 nanoseconds. + Weight::from_parts(133_136_780, 0u64) + .saturating_add(Weight::from_parts(0, 12516)) + // Standard Error: 5_791 + .saturating_add(Weight::from_parts(865_718, 0u64).saturating_mul(b.into())) + .saturating_add(T::DbWeight::get().reads(3_u64)) } // Storage: Content VideoById (r:1 w:0) + // Proof: Content VideoById (max_values: None, max_size: Some(513), added: 2988, mode: MaxEncodedLen) // Storage: Instance3WorkingGroup WorkerById (r:1 w:0) + // Proof: Instance3WorkingGroup WorkerById (max_values: None, max_size: Some(175), added: 2650, mode: MaxEncodedLen) // Storage: Content CuratorGroupById (r:1 w:0) + // Proof: Content CuratorGroupById (max_values: None, max_size: Some(1037), added: 3512, mode: MaxEncodedLen) // Storage: Content ChannelById (r:1 w:0) + // Proof: Content ChannelById (max_values: None, max_size: Some(909), added: 3384, mode: MaxEncodedLen) + /// The range of component `b` is `[1, 100]`. fn nft_owner_remark(b: u32, ) -> Weight { - (433_008_000 as Weight) - // Standard Error: 5_000 - .saturating_add((712_000 as Weight).saturating_mul(b as Weight)) - .saturating_add(T::DbWeight::get().reads(4 as Weight)) + // Proof Size summary in bytes: + // Measured: `3177` + // Estimated: `16494` + // Minimum execution time: 184_111 nanoseconds. + Weight::from_parts(185_401_984, 0u64) + .saturating_add(Weight::from_parts(0, 16494)) + // Standard Error: 6_502 + .saturating_add(Weight::from_parts(873_860, 0u64).saturating_mul(b.into())) + .saturating_add(T::DbWeight::get().reads(4_u64)) } // Storage: Instance3WorkingGroup CurrentLead (r:1 w:0) + // Proof: Instance3WorkingGroup CurrentLead (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) // Storage: Instance3WorkingGroup WorkerById (r:1 w:0) + // Proof: Instance3WorkingGroup WorkerById (max_values: None, max_size: Some(175), added: 2650, mode: MaxEncodedLen) // Storage: Content ChannelStateBloatBondValue (r:0 w:1) + // Proof: Content ChannelStateBloatBondValue (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) fn update_channel_state_bloat_bond() -> Weight { - (48_800_000 as Weight) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + // Proof Size summary in bytes: + // Measured: `339` + // Estimated: `5133` + // Minimum execution time: 23_140 nanoseconds. + Weight::from_parts(23_865_000, 0u64) + .saturating_add(Weight::from_parts(0, 5133)) + .saturating_add(T::DbWeight::get().reads(2_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) } // Storage: Instance3WorkingGroup CurrentLead (r:1 w:0) + // Proof: Instance3WorkingGroup CurrentLead (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) // Storage: Instance3WorkingGroup WorkerById (r:1 w:0) + // Proof: Instance3WorkingGroup WorkerById (max_values: None, max_size: Some(175), added: 2650, mode: MaxEncodedLen) // Storage: Content VideoStateBloatBondValue (r:0 w:1) + // Proof: Content VideoStateBloatBondValue (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) fn update_video_state_bloat_bond() -> Weight { - (47_290_000 as Weight) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + // Proof Size summary in bytes: + // Measured: `339` + // Estimated: `5133` + // Minimum execution time: 22_798 nanoseconds. + Weight::from_parts(23_529_000, 0u64) + .saturating_add(Weight::from_parts(0, 5133)) + .saturating_add(T::DbWeight::get().reads(2_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) + } + // Storage: Content ChannelById (r:1 w:0) + // Proof: Content ChannelById (max_values: None, max_size: Some(909), added: 3384, mode: MaxEncodedLen) + // Storage: Instance3WorkingGroup WorkerById (r:1 w:0) + // Proof: Instance3WorkingGroup WorkerById (max_values: None, max_size: Some(175), added: 2650, mode: MaxEncodedLen) + // Storage: Content CuratorGroupById (r:1 w:0) + // Proof: Content CuratorGroupById (max_values: None, max_size: Some(1037), added: 3512, mode: MaxEncodedLen) + /// The range of component `b` is `[1, 100]`. + fn creator_token_issuer_remark(b: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `2677` + // Estimated: `12516` + // Minimum execution time: 131_458 nanoseconds. + Weight::from_parts(130_778_682, 0u64) + .saturating_add(Weight::from_parts(0, 12516)) + // Standard Error: 4_524 + .saturating_add(Weight::from_parts(1_125_689, 0u64).saturating_mul(b.into())) + .saturating_add(T::DbWeight::get().reads(3_u64)) } } // Default implementation for tests impl WeightInfo for () { fn create_channel(a: u32, b: u32, c: u32, d: u32, e: u32, ) -> Weight { - 0 + Weight::from_parts(0, 0) } fn channel_update_with_assets(a: u32, b: u32, c: u32, d: u32, e: u32, ) -> Weight { - 0 + Weight::from_parts(0, 0) } fn channel_update_without_assets(a: u32, b: u32, ) -> Weight { - 0 + Weight::from_parts(0, 0) } fn delete_channel(a: u32, b: u32, c: u32, ) -> Weight { - 0 + Weight::from_parts(0, 0) } fn update_channel_privilege_level() -> Weight { - 0 + Weight::from_parts(0, 0) } fn set_channel_paused_features_as_moderator(a: u32, ) -> Weight { - 0 + Weight::from_parts(0, 0) } fn delete_channel_assets_as_moderator(a: u32, b: u32, c: u32, ) -> Weight { - 0 - } - fn delete_channel_as_moderator(a: u32, b: u32, c: u32, d: u32, ) -> Weight { - 0 + Weight::from_parts(0, 0) } fn set_channel_visibility_as_moderator(a: u32, ) -> Weight { - 0 + Weight::from_parts(0, 0) } fn delete_video_assets_as_moderator(a: u32, b: u32, c: u32, ) -> Weight { - 0 - } - fn delete_video_as_moderator_with_assets(a: u32, b: u32, c: u32, ) -> Weight { - 0 - } - fn delete_video_as_moderator_without_assets(a: u32, ) -> Weight { - 0 + Weight::from_parts(0, 0) } fn set_video_visibility_as_moderator(a: u32, ) -> Weight { - 0 + Weight::from_parts(0, 0) } fn create_curator_group(a: u32, ) -> Weight { - 0 + Weight::from_parts(0, 0) } fn update_curator_group_permissions(a: u32, ) -> Weight { - 0 + Weight::from_parts(0, 0) } fn set_curator_group_status() -> Weight { - 0 + Weight::from_parts(0, 0) } fn add_curator_to_group() -> Weight { - 0 + Weight::from_parts(0, 0) } fn remove_curator_from_group() -> Weight { - 0 + Weight::from_parts(0, 0) } fn create_video_without_nft(a: u32, b: u32, c: u32, ) -> Weight { - 0 + Weight::from_parts(0, 0) } fn create_video_with_nft(a: u32, b: u32, c: u32, d: u32, ) -> Weight { - 0 + Weight::from_parts(0, 0) } fn update_video_without_assets_without_nft(a: u32, ) -> Weight { - 0 + Weight::from_parts(0, 0) } fn update_video_with_assets_without_nft(a: u32, b: u32, c: u32, d: u32, ) -> Weight { - 0 + Weight::from_parts(0, 0) } fn update_video_without_assets_with_nft(a: u32, b: u32, ) -> Weight { - 0 + Weight::from_parts(0, 0) } fn update_video_with_assets_with_nft(a: u32, b: u32, c: u32, d: u32, e: u32, ) -> Weight { - 0 + Weight::from_parts(0, 0) } fn delete_video_without_assets() -> Weight { - 0 + Weight::from_parts(0, 0) } fn delete_video_with_assets(a: u32, b: u32, ) -> Weight { - 0 + Weight::from_parts(0, 0) } fn initialize_channel_transfer(a: u32, ) -> Weight { - 0 + Weight::from_parts(0, 0) } fn cancel_channel_transfer() -> Weight { - 0 + Weight::from_parts(0, 0) } fn accept_channel_transfer_curator_to_curator(a: u32, ) -> Weight { - 0 + Weight::from_parts(0, 0) } fn accept_channel_transfer_member_to_curator(a: u32, ) -> Weight { - 0 + Weight::from_parts(0, 0) } fn accept_channel_transfer_member_to_member(a: u32, ) -> Weight { - 0 + Weight::from_parts(0, 0) } fn issue_creator_token(a: u32, ) -> Weight { - 0 + Weight::from_parts(0, 0) } - fn creator_token_issuer_transfer(a: u32, _b: u32, ) -> Weight { - 0 + fn creator_token_issuer_transfer(a: u32, b: u32, ) -> Weight { + Weight::from_parts(0, 0) } fn make_creator_token_permissionless() -> Weight { - 0 + Weight::from_parts(0, 0) } fn deissue_creator_token() -> Weight { - 0 + Weight::from_parts(0, 0) } fn init_creator_token_sale(a: u32, ) -> Weight { - 0 + Weight::from_parts(0, 0) } fn update_upcoming_creator_token_sale() -> Weight { - 0 + Weight::from_parts(0, 0) } fn finalize_creator_token_sale() -> Weight { - 0 + Weight::from_parts(0, 0) + } + fn activate_amm() -> Weight { + Weight::from_parts(0, 0) + } + fn deactivate_amm() -> Weight { + Weight::from_parts(0, 0) } fn issue_revenue_split() -> Weight { - 0 + Weight::from_parts(0, 0) } fn issue_revenue_split_as_collaborator() -> Weight { - 0 + Weight::from_parts(0, 0) } fn finalize_revenue_split() -> Weight { - 0 + Weight::from_parts(0, 0) } fn reduce_creator_token_patronage_rate_to() -> Weight { - 0 + Weight::from_parts(0, 0) } fn claim_creator_token_patronage_credit() -> Weight { - 0 + Weight::from_parts(0, 0) } fn update_channel_payouts() -> Weight { - 0 + Weight::from_parts(0, 0) } fn withdraw_from_curator_channel_balance() -> Weight { - 0 + Weight::from_parts(0, 0) } fn withdraw_from_member_channel_balance() -> Weight { - 0 + Weight::from_parts(0, 0) } fn claim_channel_reward(h: u32, ) -> Weight { - 0 - } - fn claim_and_withdraw_member_channel_reward(h: u32, ) -> Weight { - 0 - } - fn claim_and_withdraw_curator_channel_reward(h: u32, ) -> Weight { - 0 + Weight::from_parts(0, 0) } fn issue_nft(w: u32, b: u32, ) -> Weight { - 0 + Weight::from_parts(0, 0) } fn destroy_nft() -> Weight { - 0 + Weight::from_parts(0, 0) } fn sling_nft_back() -> Weight { - 0 + Weight::from_parts(0, 0) } fn offer_nft() -> Weight { - 0 + Weight::from_parts(0, 0) } fn cancel_offer() -> Weight { - 0 + Weight::from_parts(0, 0) } fn accept_incoming_offer() -> Weight { - 0 + Weight::from_parts(0, 0) } fn sell_nft() -> Weight { - 0 + Weight::from_parts(0, 0) } fn cancel_buy_now() -> Weight { - 0 + Weight::from_parts(0, 0) } fn update_buy_now_price() -> Weight { - 0 + Weight::from_parts(0, 0) } fn buy_nft() -> Weight { - 0 + Weight::from_parts(0, 0) } fn toggle_nft_limits() -> Weight { - 0 + Weight::from_parts(0, 0) } fn update_global_nft_limit() -> Weight { - 0 + Weight::from_parts(0, 0) } fn update_channel_nft_limit() -> Weight { - 0 + Weight::from_parts(0, 0) } fn start_english_auction(w: u32, ) -> Weight { - 0 + Weight::from_parts(0, 0) } fn cancel_english_auction() -> Weight { - 0 + Weight::from_parts(0, 0) } fn make_english_auction_bid() -> Weight { - 0 + Weight::from_parts(0, 0) } fn settle_english_auction() -> Weight { - 0 + Weight::from_parts(0, 0) } fn start_open_auction(w: u32, ) -> Weight { - 0 + Weight::from_parts(0, 0) } fn cancel_open_auction() -> Weight { - 0 + Weight::from_parts(0, 0) } fn cancel_open_auction_bid() -> Weight { - 0 + Weight::from_parts(0, 0) } fn pick_open_auction_winner() -> Weight { - 0 + Weight::from_parts(0, 0) } fn make_open_auction_bid() -> Weight { - 0 + Weight::from_parts(0, 0) } fn channel_owner_remark(b: u32, ) -> Weight { - 0 + Weight::from_parts(0, 0) } fn channel_agent_remark(b: u32, ) -> Weight { - 0 + Weight::from_parts(0, 0) } fn nft_owner_remark(b: u32, ) -> Weight { - 0 + Weight::from_parts(0, 0) } fn update_channel_state_bloat_bond() -> Weight { - 0 + Weight::from_parts(0, 0) } fn update_video_state_bloat_bond() -> Weight { - 0 + Weight::from_parts(0, 0) + } + fn creator_token_issuer_remark(b: u32, ) -> Weight { + Weight::from_parts(0, 0) } } diff --git a/runtime-modules/council/Cargo.toml b/runtime-modules/council/Cargo.toml index c063018bc6..08e403f2a1 100644 --- a/runtime-modules/council/Cargo.toml +++ b/runtime-modules/council/Cargo.toml @@ -8,32 +8,32 @@ edition = '2018' codec = { package = 'parity-scale-codec', version = '3.1.2', default-features = false, features = ['derive'] } scale-info = { version = "2.1.1", default-features = false, features = ["derive"] } serde = { version = '1.0.101', optional = true} -sp-runtime = { package = 'sp-runtime', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -sp-core = { package = 'sp-core', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -sp-arithmetic = { package = 'sp-arithmetic', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -frame-support = { package = 'frame-support', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -frame-system = { package = 'frame-system', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -sp-std = { package = 'sp-std', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} +sp-runtime = { package = 'sp-runtime', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +sp-core = { package = 'sp-core', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +sp-arithmetic = { package = 'sp-arithmetic', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +frame-support = { package = 'frame-support', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +frame-system = { package = 'frame-system', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +sp-std = { package = 'sp-std', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} common = { package = 'pallet-common', default-features = false, path = '../common'} referendum = { package = 'pallet-referendum', default-features = false, path = '../referendum'} staking-handler = { package = 'pallet-staking-handler', default-features = false, path = '../staking-handler'} -balances = { package = 'pallet-balances', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} +balances = { package = 'pallet-balances', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} #Benchmark dependencies -frame-benchmarking = { package = 'frame-benchmarking', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522', optional = true} +frame-benchmarking = { package = 'frame-benchmarking', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9', optional = true} membership = { package = 'pallet-membership', default-features = false, path = '../membership', optional = true} [dev-dependencies] -sp-io = { package = 'sp-io', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} +sp-io = { package = 'sp-io', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} rand = "0.7.3" -pallet-timestamp = { package = 'pallet-timestamp', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} +pallet-timestamp = { package = 'pallet-timestamp', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} membership = { package = 'pallet-membership', default-features = false, path = '../membership'} [features] default = ['std'] runtime-benchmarks = [ - 'frame-benchmarking', - 'membership', + 'frame-benchmarking/runtime-benchmarks', + 'membership/runtime-benchmarks', 'common/runtime-benchmarks', ] std = [ @@ -51,4 +51,6 @@ std = [ 'referendum/std', 'staking-handler/std', 'scale-info/std', -] \ No newline at end of file + 'frame-benchmarking?/std', +] +try-runtime = [ "frame-support/try-runtime"] \ No newline at end of file diff --git a/runtime-modules/council/src/benchmarking.rs b/runtime-modules/council/src/benchmarking.rs index a6999d6d5e..bb68e6727f 100644 --- a/runtime-modules/council/src/benchmarking.rs +++ b/runtime-modules/council/src/benchmarking.rs @@ -1,7 +1,7 @@ #![cfg(feature = "runtime-benchmarks")] use super::*; use balances::Pallet as Balances; -use frame_benchmarking::{account, benchmarks, Zero}; +use frame_benchmarking::v1::{account, benchmarks, Zero}; use frame_support::traits::{Currency, OnFinalize, OnInitialize}; use frame_system::EventRecord; use frame_system::Pallet as System; @@ -40,9 +40,9 @@ impl CreateAccountId for sp_core::crypto::AccountId32 { } } -fn assert_last_event(generic_event: ::Event) { +fn assert_last_event(generic_event: ::RuntimeEvent) { let events = System::::events(); - let system_event: ::Event = generic_event.into(); + let system_event: ::RuntimeEvent = generic_event.into(); assert!(!events.is_empty(), "There are no events in event queue"); @@ -51,9 +51,9 @@ fn assert_last_event(generic_event: ::Event) { assert_eq!(event, &system_event); } -fn assert_in_events(generic_event: ::Event) { +fn assert_in_events(generic_event: ::RuntimeEvent) { let events = System::::events(); - let system_event: ::Event = generic_event.into(); + let system_event: ::RuntimeEvent = generic_event.into(); assert!(!events.is_empty(), "There are no events in event queue"); diff --git a/runtime-modules/council/src/lib.rs b/runtime-modules/council/src/lib.rs index b73da9bcc7..8b686a798f 100644 --- a/runtime-modules/council/src/lib.rs +++ b/runtime-modules/council/src/lib.rs @@ -80,7 +80,7 @@ use scale_info::TypeInfo; use serde::{Deserialize, Serialize}; use sp_runtime::traits::{Hash, One, SaturatedConversion, Saturating, Zero}; use sp_std::convert::TryInto; -use sp_std::vec::Vec; +use sp_std::{vec, vec::Vec}; use staking_handler::StakingHandler; // declared modules @@ -210,7 +210,7 @@ impl pub type Balance = ::Balance; pub type VotePowerOf = <::Referendum as ReferendumManager< - ::Origin, + ::RuntimeOrigin, ::AccountId, ::MemberId, ::Hash, @@ -245,10 +245,15 @@ pub trait Config: frame_system::Config + common::membership::MembershipTypes + balances::Config { /// The overarching event type. - type Event: From> + Into<::Event>; + type RuntimeEvent: From> + Into<::RuntimeEvent>; /// Referendum used for council elections. - type Referendum: ReferendumManager; + type Referendum: ReferendumManager< + Self::RuntimeOrigin, + Self::AccountId, + Self::MemberId, + Self::Hash, + >; /// Minimum number of extra candidates needed for the valid election. /// Number of total candidates is equal to council size plus extra candidates. @@ -299,7 +304,7 @@ pub trait Config: /// Validates member id and origin combination type MemberOriginValidator: MemberOriginValidator< - Self::Origin, + Self::RuntimeOrigin, common::MemberId, Self::AccountId, >; @@ -522,10 +527,16 @@ impl From for Error { } } +impl From for Error { + fn from(err: sp_runtime::DispatchError) -> Self { + err.into() + } +} + /////////////////// Module definition and implementation /////////////////////// decl_module! { - pub struct Module for enum Call where origin: T::Origin { + pub struct Module for enum Call where origin: T::RuntimeOrigin { /// Predefined errors type Error = Error; @@ -1614,7 +1625,7 @@ impl EnsureChecks { /////////////////// Common checks ////////////////////////////////////////// fn ensure_user_membership( - origin: T::Origin, + origin: T::RuntimeOrigin, membership_id: &T::MemberId, ) -> Result> { let account_id = T::MemberOriginValidator::ensure_member_controller_account_origin( @@ -1630,7 +1641,7 @@ impl EnsureChecks { // Ensures there is no problem in announcing candidacy. fn can_announce_candidacy( - origin: T::Origin, + origin: T::RuntimeOrigin, membership_id: &T::MemberId, staking_account_id: &T::AccountId, stake: &Balance, @@ -1683,7 +1694,7 @@ impl EnsureChecks { // Ensures there is no problem in releasing old candidacy stake. fn can_release_candidacy_stake( - origin: T::Origin, + origin: T::RuntimeOrigin, membership_id: &T::MemberId, ) -> Result> { // ensure user's membership @@ -1703,7 +1714,7 @@ impl EnsureChecks { // Ensures there is no problem in withdrawing already announced candidacy. fn can_withdraw_candidacy( - origin: T::Origin, + origin: T::RuntimeOrigin, membership_id: &T::MemberId, ) -> Result<(CouncilStageAnnouncing, CandidateOf), Error> { // ensure user's membership @@ -1729,7 +1740,7 @@ impl EnsureChecks { // Ensures there is no problem in setting new note for the candidacy. fn can_set_candidacy_note( - origin: T::Origin, + origin: T::RuntimeOrigin, membership_id: &T::MemberId, ) -> Result<(), Error> { // ensure user's membership @@ -1751,28 +1762,28 @@ impl EnsureChecks { } // Ensures there is no problem in setting the budget balance. - fn can_set_budget(origin: T::Origin) -> Result<(), Error> { + fn can_set_budget(origin: T::RuntimeOrigin) -> Result<(), Error> { ensure_root(origin)?; Ok(()) } // Ensures there is no problem in planning next budget refill. - fn can_plan_budget_refill(origin: T::Origin) -> Result<(), Error> { + fn can_plan_budget_refill(origin: T::RuntimeOrigin) -> Result<(), Error> { ensure_root(origin)?; Ok(()) } // Ensures there is no problem in setting the budget increment. - fn can_set_budget_increment(origin: T::Origin) -> Result<(), Error> { + fn can_set_budget_increment(origin: T::RuntimeOrigin) -> Result<(), Error> { ensure_root(origin)?; Ok(()) } // Ensures there is no problem in setting the councilor reward. - fn can_set_councilor_reward(origin: T::Origin) -> Result<(), Error> { + fn can_set_councilor_reward(origin: T::RuntimeOrigin) -> Result<(), Error> { ensure_root(origin)?; Ok(()) @@ -1780,9 +1791,9 @@ impl EnsureChecks { } impl - CouncilOriginValidator for Module + CouncilOriginValidator for Module { - fn ensure_member_consulate(origin: T::Origin, member_id: T::MemberId) -> DispatchResult { + fn ensure_member_consulate(origin: T::RuntimeOrigin, member_id: T::MemberId) -> DispatchResult { EnsureChecks::::ensure_user_membership(origin, &member_id)?; let is_councilor = Self::council_members() @@ -1819,3 +1830,10 @@ impl common::council::CouncilBudgetManager frame_support::traits::Hooks for Pallet { + #[cfg(feature = "try-runtime")] + fn try_state(_: T::BlockNumber) -> Result<(), &'static str> { + Ok(()) + } +} diff --git a/runtime-modules/council/src/mock.rs b/runtime-modules/council/src/mock.rs index 6e249adaa4..66e17e3949 100644 --- a/runtime-modules/council/src/mock.rs +++ b/runtime-modules/council/src/mock.rs @@ -11,7 +11,7 @@ use crate::{ use frame_support::dispatch::{DispatchError, DispatchResult}; use frame_support::traits::{ - ConstU16, ConstU32, ConstU64, Currency, EnsureOneOf, Get, LockIdentifier, OnFinalize, + ConstU16, ConstU32, ConstU64, Currency, EitherOfDiverse, Get, LockIdentifier, OnFinalize, OnInitialize, WithdrawReasons, }; @@ -71,7 +71,7 @@ impl common::membership::MembershipTypes for Runtime { } impl Config for Runtime { - type Event = Event; + type RuntimeEvent = RuntimeEvent; type Referendum = referendum::Module; @@ -103,9 +103,9 @@ impl Config for Runtime { type MemberOriginValidator = (); } -impl common::membership::MemberOriginValidator for () { +impl common::membership::MemberOriginValidator for () { fn ensure_member_controller_account_origin( - origin: Origin, + origin: RuntimeOrigin, member_id: u64, ) -> Result { let account_id = ensure_signed(origin)?; @@ -157,8 +157,8 @@ impl frame_system::Config for Runtime { type BlockWeights = (); type BlockLength = (); type DbWeight = (); - type Origin = Origin; - type Call = Call; + type RuntimeOrigin = RuntimeOrigin; + type RuntimeCall = RuntimeCall; type Index = u64; type BlockNumber = u64; type Hash = H256; @@ -166,7 +166,7 @@ impl frame_system::Config for Runtime { type AccountId = u64; type Lookup = IdentityLookup; type Header = Header; - type Event = Event; + type RuntimeEvent = RuntimeEvent; type BlockHashCount = ConstU64<250>; type Version = (); type PalletInfo = PalletInfo; @@ -209,11 +209,12 @@ parameter_types! { } impl referendum::Config for Runtime { - type Event = Event; + type RuntimeEvent = RuntimeEvent; type MaxSaltLength = MaxSaltLength; - type ManagerOrigin = EnsureOneOf, EnsureRoot>; + type ManagerOrigin = + EitherOfDiverse, EnsureRoot>; type VotePower = u64; @@ -282,7 +283,7 @@ impl referendum::Config for Runtime { impl balances::Config for Runtime { type Balance = u64; type DustRemoval = (); - type Event = Event; + type RuntimeEvent = RuntimeEvent; type ExistentialDeposit = ExistentialDeposit; type AccountStore = System; type MaxLocks = (); @@ -292,7 +293,7 @@ impl balances::Config for Runtime { } impl membership::Config for Runtime { - type Event = Event; + type RuntimeEvent = RuntimeEvent; type DefaultMembershipPrice = DefaultMembershipPrice; type WorkingGroup = Wg; type WeightInfo = (); @@ -322,7 +323,7 @@ impl common::working_group::WorkingGroupBudgetHandler for Wg { impl common::working_group::WorkingGroupAuthenticator for Wg { fn ensure_worker_origin( - _origin: ::Origin, + _origin: ::RuntimeOrigin, _worker_id: &::ActorId, ) -> DispatchResult { unimplemented!(); @@ -339,7 +340,9 @@ impl common::working_group::WorkingGroupAuthenticator for Wg { unimplemented!() } - fn ensure_leader_origin(_origin: ::Origin) -> DispatchResult { + fn ensure_leader_origin( + _origin: ::RuntimeOrigin, + ) -> DispatchResult { unimplemented!() } @@ -567,9 +570,9 @@ where T::BlockNumber: From + Into, Balance: From + Into, { - pub fn mock_origin(origin: OriginType) -> T::Origin { + pub fn mock_origin(origin: OriginType) -> T::RuntimeOrigin { match origin { - OriginType::Signed(account_id) => T::Origin::from(RawOrigin::Signed(account_id)), + OriginType::Signed(account_id) => T::RuntimeOrigin::from(RawOrigin::Signed(account_id)), OriginType::Root => RawOrigin::Root.into(), //_ => panic!("not implemented"), } @@ -682,9 +685,9 @@ where T::Hash: From<::Hash> + Into<::Hash>, - T::Origin: From<::Origin> - + Into<::Origin>, - >::VotePower: + T::RuntimeOrigin: From<::RuntimeOrigin> + + Into<::RuntimeOrigin>, + >::VotePower: From + Into, T::MemberId: Into, { @@ -740,7 +743,7 @@ where OptionResult< T::MemberId, , intermediate_results: BTreeMap< u64, - >::VotePower, + >::VotePower, >, expected_update_block_number: T::BlockNumber, ) { @@ -816,14 +819,12 @@ where } pub fn check_new_council_elected_hook() { - let result = LAST_COUNCIL_ELECTED_OK.with(|value| assert!(value.borrow().0)); + LAST_COUNCIL_ELECTED_OK.with(|value| assert!(value.borrow().0)); // clear election sign LAST_COUNCIL_ELECTED_OK.with(|value| { *value.borrow_mut() = (false,); }); - - result } pub fn set_candidacy_note( @@ -850,7 +851,7 @@ where .last() .unwrap() .event, - Event::Council(RawEvent::CandidacyNoteSet( + RuntimeEvent::Council(RawEvent::CandidacyNoteSet( membership_id.into(), note.into() )), @@ -905,7 +906,7 @@ where .last() .unwrap() .event, - Event::Council(RawEvent::NewCandidate( + RuntimeEvent::Council(RawEvent::NewCandidate( member_id.into(), staking_account_id.into(), reward_account_id.into(), @@ -934,7 +935,7 @@ where .last() .unwrap() .event, - Event::Council(RawEvent::CandidacyWithdraw(member_id.into(),)), + RuntimeEvent::Council(RawEvent::CandidacyWithdraw(member_id.into(),)), ); } @@ -961,7 +962,7 @@ where .last() .unwrap() .event, - Event::Council(RawEvent::CandidacyStakeRelease(member_id.into(),)), + RuntimeEvent::Council(RawEvent::CandidacyStakeRelease(member_id.into(),)), ); } @@ -1038,7 +1039,7 @@ where .last() .unwrap() .event, - Event::Council(RawEvent::BudgetBalanceSet(amount.into())), + RuntimeEvent::Council(RawEvent::BudgetBalanceSet(amount.into())), ); } @@ -1066,7 +1067,7 @@ where assert!(frame_system::Pallet::::events() .iter() .any(|ev| ev.event - == Event::Council(RawEvent::RequestFunded( + == RuntimeEvent::Council(RawEvent::RequestFunded( funding_request.account.clone().into(), funding_request.amount.into(), )))); @@ -1112,7 +1113,7 @@ where .last() .unwrap() .event, - Event::Council(RawEvent::BudgetRefillPlanned(next_refill.into())), + RuntimeEvent::Council(RawEvent::BudgetRefillPlanned(next_refill.into())), ); } @@ -1142,7 +1143,7 @@ where .last() .unwrap() .event, - Event::Council(RawEvent::CouncilorRewardUpdated(councilor_reward.into())), + RuntimeEvent::Council(RawEvent::CouncilorRewardUpdated(councilor_reward.into())), ); } @@ -1172,7 +1173,7 @@ where .last() .unwrap() .event, - Event::Council(RawEvent::BudgetIncrementUpdated(budget_increment.into())), + RuntimeEvent::Council(RawEvent::BudgetIncrementUpdated(budget_increment.into())), ); } @@ -1472,12 +1473,12 @@ pub fn run_to_block(n: u64) { pub struct EventFixture; impl EventFixture { pub fn assert_last_crate_event(expected_raw_event: RawEvent) { - let converted_event = Event::Council(expected_raw_event); + let converted_event = RuntimeEvent::Council(expected_raw_event); Self::assert_last_global_event(converted_event) } - pub fn assert_last_global_event(expected_event: Event) { + pub fn assert_last_global_event(expected_event: RuntimeEvent) { let expected_event = EventRecord { phase: Phase::Initialization, event: expected_event, @@ -1493,7 +1494,7 @@ pub fn set_invitation_lock( amount: Balance, ) { ::InvitedMemberStakingHandler::lock_with_reasons( - &who, + who, amount, WithdrawReasons::except(WithdrawReasons::TRANSACTION_PAYMENT), ); diff --git a/runtime-modules/council/src/weights.rs b/runtime-modules/council/src/weights.rs index 3ca1dd8f73..922b1a1699 100644 --- a/runtime-modules/council/src/weights.rs +++ b/runtime-modules/council/src/weights.rs @@ -18,22 +18,21 @@ //! Autogenerated weights for council //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-10-20, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("dev"), DB CACHE: 1024 +//! DATE: 2023-11-06, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("prod-test"), DB CACHE: 1024 // Executed Command: -// ./../target/release/joystream-node +// ./scripts/../target/release/joystream-node // benchmark // pallet -// --base-path=/mnt/disks/local-ssd/ // --pallet=council // --extrinsic=* -// --chain=dev +// --chain=prod-test // --steps=50 // --repeat=20 // --execution=wasm -// --template=./../devops/joystream-pallet-weight-template.hbs -// --output=./../runtime-modules/council/src/weights.rs +// --template=./scripts/../devops/joystream-pallet-weight-template.hbs +// --output=./scripts/../runtime-modules/council/src/weights.rs #![cfg_attr(rustfmt, rustfmt_skip)] #![allow(unused_parens)] @@ -68,196 +67,336 @@ pub trait WeightInfo { pub struct SubstrateWeight(PhantomData); impl WeightInfo for SubstrateWeight { // Storage: Council BudgetIncrement (r:0 w:1) + // Proof: Council BudgetIncrement (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) fn set_budget_increment() -> Weight { - (29_210_000 as Weight) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 10_415 nanoseconds. + Weight::from_parts(11_084_000, 0u64) + .saturating_add(Weight::from_parts(0, 0)) + .saturating_add(T::DbWeight::get().writes(1_u64)) } // Storage: Council CouncilorReward (r:0 w:1) + // Proof: Council CouncilorReward (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) fn set_councilor_reward() -> Weight { - (29_330_000 as Weight) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 10_017 nanoseconds. + Weight::from_parts(10_722_000, 0u64) + .saturating_add(Weight::from_parts(0, 0)) + .saturating_add(T::DbWeight::get().writes(1_u64)) } // Storage: Council Budget (r:1 w:1) - // Storage: System Account (r:1 w:1) + // Proof: Council Budget (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) + // Storage: System Account (r:100 w:100) + // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + /// The range of component `i` is `[1, 100]`. fn funding_request(i: u32, ) -> Weight { - (18_104_000 as Weight) - // Standard Error: 13_000 - .saturating_add((69_917_000 as Weight).saturating_mul(i as Weight)) - .saturating_add(T::DbWeight::get().reads(1 as Weight)) - .saturating_add(T::DbWeight::get().reads((1 as Weight).saturating_mul(i as Weight))) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) - .saturating_add(T::DbWeight::get().writes((1 as Weight).saturating_mul(i as Weight))) + // Proof Size summary in bytes: + // Measured: `714 + i * (2 ±0)` + // Estimated: `2491 + i * (2603 ±0)` + // Minimum execution time: 41_900 nanoseconds. + Weight::from_parts(25_237_904, 0u64) + .saturating_add(Weight::from_parts(0, 2491)) + // Standard Error: 22_658 + .saturating_add(Weight::from_parts(25_536_673, 0u64).saturating_mul(i.into())) + .saturating_add(T::DbWeight::get().reads(1_u64)) + .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(i.into()))) + .saturating_add(T::DbWeight::get().writes(1_u64)) + .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(i.into()))) + .saturating_add(Weight::from_parts(0, 2603).saturating_mul(i.into())) } // Storage: Council BudgetIncrement (r:1 w:0) + // Proof: Council BudgetIncrement (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) // Storage: Council Budget (r:1 w:1) + // Proof: Council Budget (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) // Storage: Council NextBudgetRefill (r:0 w:1) + // Proof: Council NextBudgetRefill (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) fn try_process_budget_refill_budget_only() -> Weight { - (52_040_000 as Weight) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) - .saturating_add(T::DbWeight::get().writes(2 as Weight)) + // Proof Size summary in bytes: + // Measured: `276` + // Estimated: `3002` + // Minimum execution time: 17_581 nanoseconds. + Weight::from_parts(18_051_000, 0u64) + .saturating_add(Weight::from_parts(0, 3002)) + .saturating_add(T::DbWeight::get().reads(2_u64)) + .saturating_add(T::DbWeight::get().writes(2_u64)) } // Storage: Council CouncilorReward (r:1 w:0) + // Proof: Council CouncilorReward (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) // Storage: Council Budget (r:1 w:1) + // Proof: Council Budget (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) // Storage: Council CouncilMembers (r:1 w:1) + // Proof: Council CouncilMembers (max_values: Some(1), max_size: Some(325), added: 820, mode: MaxEncodedLen) // Storage: System Account (r:3 w:3) + // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) // Storage: Council NextRewardPayments (r:0 w:1) + // Proof: Council NextRewardPayments (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) fn try_process_budget_payout_council_members_only() -> Weight { - (169_890_000 as Weight) - .saturating_add(T::DbWeight::get().reads(6 as Weight)) - .saturating_add(T::DbWeight::get().writes(6 as Weight)) + // Proof Size summary in bytes: + // Measured: `1041` + // Estimated: `13611` + // Minimum execution time: 62_395 nanoseconds. + Weight::from_parts(64_398_000, 0u64) + .saturating_add(Weight::from_parts(0, 13611)) + .saturating_add(T::DbWeight::get().reads(6_u64)) + .saturating_add(T::DbWeight::get().writes(6_u64)) } // Storage: Council Stage (r:1 w:1) + // Proof: Council Stage (max_values: Some(1), max_size: Some(13), added: 508, mode: MaxEncodedLen) // Storage: Council AnnouncementPeriodNr (r:1 w:1) + // Proof: Council AnnouncementPeriodNr (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) fn try_progress_stage_idle() -> Weight { - (47_270_000 as Weight) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) - .saturating_add(T::DbWeight::get().writes(2 as Weight)) + // Proof Size summary in bytes: + // Measured: `270` + // Estimated: `2991` + // Minimum execution time: 13_881 nanoseconds. + Weight::from_parts(14_138_000, 0u64) + .saturating_add(Weight::from_parts(0, 2991)) + .saturating_add(T::DbWeight::get().reads(2_u64)) + .saturating_add(T::DbWeight::get().writes(2_u64)) } // Storage: Council Stage (r:1 w:1) + // Proof: Council Stage (max_values: Some(1), max_size: Some(13), added: 508, mode: MaxEncodedLen) // Storage: Council AnnouncementPeriodNr (r:1 w:0) + // Proof: Council AnnouncementPeriodNr (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) // Storage: Instance1Referendum Stage (r:1 w:1) + // Proof: Instance1Referendum Stage (max_values: Some(1), max_size: Some(94), added: 589, mode: MaxEncodedLen) + /// The range of component `i` is `[3, 103]`. fn try_progress_stage_announcing_start_election(i: u32, ) -> Weight { - (75_045_000 as Weight) - // Standard Error: 9_000 - .saturating_add((195_000 as Weight).saturating_mul(i as Weight)) - .saturating_add(T::DbWeight::get().reads(3 as Weight)) - .saturating_add(T::DbWeight::get().writes(2 as Weight)) + // Proof Size summary in bytes: + // Measured: `379` + // Estimated: `4570` + // Minimum execution time: 23_232 nanoseconds. + Weight::from_parts(25_655_895, 0u64) + .saturating_add(Weight::from_parts(0, 4570)) + // Standard Error: 957 + .saturating_add(Weight::from_parts(51_905, 0u64).saturating_mul(i.into())) + .saturating_add(T::DbWeight::get().reads(3_u64)) + .saturating_add(T::DbWeight::get().writes(2_u64)) } // Storage: Council Stage (r:1 w:1) + // Proof: Council Stage (max_values: Some(1), max_size: Some(13), added: 508, mode: MaxEncodedLen) // Storage: Council AnnouncementPeriodNr (r:1 w:1) + // Proof: Council AnnouncementPeriodNr (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) fn try_progress_stage_announcing_restart() -> Weight { - (53_390_000 as Weight) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) - .saturating_add(T::DbWeight::get().writes(2 as Weight)) + // Proof Size summary in bytes: + // Measured: `274` + // Estimated: `2991` + // Minimum execution time: 14_066 nanoseconds. + Weight::from_parts(14_420_000, 0u64) + .saturating_add(Weight::from_parts(0, 2991)) + .saturating_add(T::DbWeight::get().reads(2_u64)) + .saturating_add(T::DbWeight::get().writes(2_u64)) } // Storage: Membership MembershipById (r:1 w:0) + // Proof: Membership MembershipById (max_values: None, max_size: Some(125), added: 2600, mode: MaxEncodedLen) // Storage: Membership StakingAccountIdMemberStatus (r:1 w:0) + // Proof: Membership StakingAccountIdMemberStatus (max_values: None, max_size: Some(57), added: 2532, mode: MaxEncodedLen) // Storage: Balances Locks (r:1 w:1) + // Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) // Storage: Council Stage (r:1 w:1) + // Proof: Council Stage (max_values: Some(1), max_size: Some(13), added: 508, mode: MaxEncodedLen) // Storage: Council Candidates (r:1 w:1) + // Proof: Council Candidates (max_values: None, max_size: Some(161), added: 2636, mode: MaxEncodedLen) // Storage: System Account (r:1 w:1) + // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) // Storage: Council AnnouncementPeriodNr (r:1 w:0) + // Proof: Council AnnouncementPeriodNr (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) fn announce_candidacy() -> Weight { - (128_770_000 as Weight) - .saturating_add(T::DbWeight::get().reads(7 as Weight)) - .saturating_add(T::DbWeight::get().writes(4 as Weight)) + // Proof Size summary in bytes: + // Measured: `813` + // Estimated: `22086` + // Minimum execution time: 53_909 nanoseconds. + Weight::from_parts(55_662_000, 0u64) + .saturating_add(Weight::from_parts(0, 22086)) + .saturating_add(T::DbWeight::get().reads(7_u64)) + .saturating_add(T::DbWeight::get().writes(4_u64)) } // Storage: Membership MembershipById (r:1 w:0) + // Proof: Membership MembershipById (max_values: None, max_size: Some(125), added: 2600, mode: MaxEncodedLen) // Storage: Council Candidates (r:1 w:1) + // Proof: Council Candidates (max_values: None, max_size: Some(161), added: 2636, mode: MaxEncodedLen) // Storage: Council AnnouncementPeriodNr (r:1 w:0) + // Proof: Council AnnouncementPeriodNr (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) // Storage: Balances Locks (r:1 w:1) + // Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) // Storage: System Account (r:1 w:1) + // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) fn release_candidacy_stake() -> Weight { - (91_360_000 as Weight) - .saturating_add(T::DbWeight::get().reads(5 as Weight)) - .saturating_add(T::DbWeight::get().writes(3 as Weight)) + // Proof Size summary in bytes: + // Measured: `946` + // Estimated: `17066` + // Minimum execution time: 40_887 nanoseconds. + Weight::from_parts(42_267_000, 0u64) + .saturating_add(Weight::from_parts(0, 17066)) + .saturating_add(T::DbWeight::get().reads(5_u64)) + .saturating_add(T::DbWeight::get().writes(3_u64)) } // Storage: Membership MembershipById (r:1 w:0) + // Proof: Membership MembershipById (max_values: None, max_size: Some(125), added: 2600, mode: MaxEncodedLen) // Storage: Council Candidates (r:1 w:1) + // Proof: Council Candidates (max_values: None, max_size: Some(161), added: 2636, mode: MaxEncodedLen) // Storage: Council AnnouncementPeriodNr (r:1 w:0) + // Proof: Council AnnouncementPeriodNr (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) // Storage: Council Stage (r:1 w:0) + // Proof: Council Stage (max_values: Some(1), max_size: Some(13), added: 508, mode: MaxEncodedLen) + /// The range of component `i` is `[0, 100]`. fn set_candidacy_note(i: u32, ) -> Weight { - (68_023_000 as Weight) - // Standard Error: 2_000 - .saturating_add((1_744_000 as Weight).saturating_mul(i as Weight)) - .saturating_add(T::DbWeight::get().reads(4 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + // Proof Size summary in bytes: + // Measured: `680` + // Estimated: `10207` + // Minimum execution time: 28_933 nanoseconds. + Weight::from_parts(30_433_052, 0u64) + .saturating_add(Weight::from_parts(0, 10207)) + // Standard Error: 1_786 + .saturating_add(Weight::from_parts(1_947_036, 0u64).saturating_mul(i.into())) + .saturating_add(T::DbWeight::get().reads(4_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) } // Storage: Membership MembershipById (r:1 w:0) + // Proof: Membership MembershipById (max_values: None, max_size: Some(125), added: 2600, mode: MaxEncodedLen) // Storage: Council Candidates (r:1 w:1) + // Proof: Council Candidates (max_values: None, max_size: Some(161), added: 2636, mode: MaxEncodedLen) // Storage: Council Stage (r:1 w:1) + // Proof: Council Stage (max_values: Some(1), max_size: Some(13), added: 508, mode: MaxEncodedLen) // Storage: Council AnnouncementPeriodNr (r:1 w:0) + // Proof: Council AnnouncementPeriodNr (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) // Storage: Balances Locks (r:1 w:1) + // Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) // Storage: System Account (r:1 w:1) + // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) fn withdraw_candidacy() -> Weight { - (99_240_000 as Weight) - .saturating_add(T::DbWeight::get().reads(6 as Weight)) - .saturating_add(T::DbWeight::get().writes(4 as Weight)) + // Proof Size summary in bytes: + // Measured: `946` + // Estimated: `18564` + // Minimum execution time: 44_638 nanoseconds. + Weight::from_parts(45_904_000, 0u64) + .saturating_add(Weight::from_parts(0, 18564)) + .saturating_add(T::DbWeight::get().reads(6_u64)) + .saturating_add(T::DbWeight::get().writes(4_u64)) } // Storage: Council Budget (r:0 w:1) + // Proof: Council Budget (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) fn set_budget() -> Weight { - (29_330_000 as Weight) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 9_992 nanoseconds. + Weight::from_parts(10_583_000, 0u64) + .saturating_add(Weight::from_parts(0, 0)) + .saturating_add(T::DbWeight::get().writes(1_u64)) } // Storage: Council NextBudgetRefill (r:0 w:1) + // Proof: Council NextBudgetRefill (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) fn plan_budget_refill() -> Weight { - (28_589_000 as Weight) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 9_751 nanoseconds. + Weight::from_parts(10_052_000, 0u64) + .saturating_add(Weight::from_parts(0, 0)) + .saturating_add(T::DbWeight::get().writes(1_u64)) } // Storage: Membership MembershipById (r:1 w:0) + // Proof: Membership MembershipById (max_values: None, max_size: Some(125), added: 2600, mode: MaxEncodedLen) // Storage: System Account (r:1 w:1) + // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) // Storage: Council Budget (r:1 w:1) + // Proof: Council Budget (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) fn fund_council_budget() -> Weight { - (89_760_000 as Weight) - .saturating_add(T::DbWeight::get().reads(3 as Weight)) - .saturating_add(T::DbWeight::get().writes(2 as Weight)) + // Proof Size summary in bytes: + // Measured: `666` + // Estimated: `8684` + // Minimum execution time: 38_861 nanoseconds. + Weight::from_parts(40_150_000, 0u64) + .saturating_add(Weight::from_parts(0, 8684)) + .saturating_add(T::DbWeight::get().reads(3_u64)) + .saturating_add(T::DbWeight::get().writes(2_u64)) } // Storage: Membership MembershipById (r:1 w:0) + // Proof: Membership MembershipById (max_values: None, max_size: Some(125), added: 2600, mode: MaxEncodedLen) // Storage: Council Candidates (r:1 w:0) + // Proof: Council Candidates (max_values: None, max_size: Some(161), added: 2636, mode: MaxEncodedLen) // Storage: Council AnnouncementPeriodNr (r:1 w:0) + // Proof: Council AnnouncementPeriodNr (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) fn candidate_remark() -> Weight { - (51_040_000 as Weight) - .saturating_add(T::DbWeight::get().reads(3 as Weight)) + // Proof Size summary in bytes: + // Measured: `680` + // Estimated: `8709` + // Minimum execution time: 23_727 nanoseconds. + Weight::from_parts(24_301_000, 0u64) + .saturating_add(Weight::from_parts(0, 8709)) + .saturating_add(T::DbWeight::get().reads(3_u64)) } // Storage: Membership MembershipById (r:1 w:0) + // Proof: Membership MembershipById (max_values: None, max_size: Some(125), added: 2600, mode: MaxEncodedLen) // Storage: Council CouncilMembers (r:1 w:0) + // Proof: Council CouncilMembers (max_values: Some(1), max_size: Some(325), added: 820, mode: MaxEncodedLen) fn councilor_remark() -> Weight { - (49_349_000 as Weight) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) + // Proof Size summary in bytes: + // Measured: `942` + // Estimated: `5400` + // Minimum execution time: 25_106 nanoseconds. + Weight::from_parts(26_163_000, 0u64) + .saturating_add(Weight::from_parts(0, 5400)) + .saturating_add(T::DbWeight::get().reads(2_u64)) } } // Default implementation for tests impl WeightInfo for () { fn set_budget_increment() -> Weight { - 0 + Weight::from_parts(0, 0) } fn set_councilor_reward() -> Weight { - 0 + Weight::from_parts(0, 0) } fn funding_request(i: u32, ) -> Weight { - 0 + Weight::from_parts(0, 0) } fn try_process_budget_refill_budget_only() -> Weight { - 0 + Weight::from_parts(0, 0) } fn try_process_budget_payout_council_members_only() -> Weight { - 0 + Weight::from_parts(0, 0) } fn try_progress_stage_idle() -> Weight { - 0 + Weight::from_parts(0, 0) } fn try_progress_stage_announcing_start_election(i: u32, ) -> Weight { - 0 + Weight::from_parts(0, 0) } fn try_progress_stage_announcing_restart() -> Weight { - 0 + Weight::from_parts(0, 0) } fn announce_candidacy() -> Weight { - 0 + Weight::from_parts(0, 0) } fn release_candidacy_stake() -> Weight { - 0 + Weight::from_parts(0, 0) } fn set_candidacy_note(i: u32, ) -> Weight { - 0 + Weight::from_parts(0, 0) } fn withdraw_candidacy() -> Weight { - 0 + Weight::from_parts(0, 0) } fn set_budget() -> Weight { - 0 + Weight::from_parts(0, 0) } fn plan_budget_refill() -> Weight { - 0 + Weight::from_parts(0, 0) } fn fund_council_budget() -> Weight { - 0 + Weight::from_parts(0, 0) } fn candidate_remark() -> Weight { - 0 + Weight::from_parts(0, 0) } fn councilor_remark() -> Weight { - 0 + Weight::from_parts(0, 0) } } diff --git a/runtime-modules/forum/Cargo.toml b/runtime-modules/forum/Cargo.toml index 25e3bb7d41..c75da4b9f2 100755 --- a/runtime-modules/forum/Cargo.toml +++ b/runtime-modules/forum/Cargo.toml @@ -8,25 +8,25 @@ edition = '2018' serde = { version = "1.0.101", optional = true, features = ["derive"] } codec = { package = 'parity-scale-codec', version = '3.1.2', default-features = false, features = ['derive'] } scale-info = { version = "2.1.1", default-features = false, features = ["derive"] } -frame-support = { package = 'frame-support', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -frame-system = { package = 'frame-system', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -sp-arithmetic = { package = 'sp-arithmetic', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -sp-runtime = { package = 'sp-runtime', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -sp-std = { package = 'sp-std', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -pallet-timestamp = { package = 'pallet-timestamp', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} +frame-support = { package = 'frame-support', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +frame-system = { package = 'frame-system', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +sp-arithmetic = { package = 'sp-arithmetic', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +sp-runtime = { package = 'sp-runtime', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +sp-std = { package = 'sp-std', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +pallet-timestamp = { package = 'pallet-timestamp', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} common = { package = 'pallet-common', default-features = false, path = '../common'} -sp-io = { package = 'sp-io', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -balances = { package = 'pallet-balances', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} +sp-io = { package = 'sp-io', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +balances = { package = 'pallet-balances', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} # Benchmarking dependencies -frame-benchmarking = { package = 'frame-benchmarking', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522', optional = true} +frame-benchmarking = { package = 'frame-benchmarking', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9', optional = true} membership = { package = 'pallet-membership', default-features = false, path = '../membership', optional = true} working-group = { package = 'pallet-working-group', default-features = false, path = '../working-group', optional = true} staking-handler = { package = 'pallet-staking-handler', default-features = false, path = '../staking-handler', optional = true} -sp-core = { package = 'sp-core', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522', optional = true} +sp-core = { package = 'sp-core', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9', optional = true} [dev-dependencies] -sp-core = { package = 'sp-core', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} +sp-core = { package = 'sp-core', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} membership = { package = 'pallet-membership', default-features = false, path = '../membership'} working-group = { package = 'pallet-working-group', default-features = false, path = '../working-group'} staking-handler = { package = 'pallet-staking-handler', default-features = false, path = '../staking-handler'} @@ -34,9 +34,9 @@ staking-handler = { package = 'pallet-staking-handler', default-features = false [features] default = ['std'] runtime-benchmarks = [ - 'frame-benchmarking', - 'membership', - 'working-group', + 'frame-benchmarking/runtime-benchmarks', + 'membership/runtime-benchmarks', + 'working-group/runtime-benchmarks', 'staking-handler', 'sp-core', 'common/runtime-benchmarks', @@ -56,4 +56,6 @@ std = [ 'membership/std', 'working-group/std', 'scale-info/std', + 'frame-benchmarking?/std', ] +try-runtime = [ "frame-support/try-runtime"] \ No newline at end of file diff --git a/runtime-modules/forum/src/benchmarking.rs b/runtime-modules/forum/src/benchmarking.rs index 7a5a149c06..5d0a1d74da 100644 --- a/runtime-modules/forum/src/benchmarking.rs +++ b/runtime-modules/forum/src/benchmarking.rs @@ -2,7 +2,7 @@ use super::*; use balances::Pallet as Balances; use core::convert::TryInto; -use frame_benchmarking::{account, benchmarks, Zero}; +use frame_benchmarking::v1::{account, benchmarks, Zero}; use frame_support::storage::StorageMap; use frame_support::traits::Currency; use frame_system::Pallet as System; @@ -55,9 +55,9 @@ fn get_byte(num: u32, byte_number: u8) -> u8 { ((num & (0xff << (8 * byte_number))) >> (8 * byte_number)) as u8 } -fn assert_last_event(generic_event: ::Event) { +fn assert_last_event(generic_event: ::RuntimeEvent) { let events = System::::events(); - let system_event: ::Event = generic_event.into(); + let system_event: ::RuntimeEvent = generic_event.into(); // compare to the last event record let EventRecord { event, .. } = &events[events.len() - 1]; assert_eq!(event, &system_event); @@ -134,7 +134,7 @@ where let (caller_id, member_id) = member_funded_account::(id as u32); let (opening_id, application_id) = add_and_apply_opening::( - &T::Origin::from(RawOrigin::Root), + &T::RuntimeOrigin::from(RawOrigin::Root), &caller_id, &member_id, &OpeningType::Leader, @@ -159,7 +159,7 @@ where } fn add_and_apply_opening>( - add_opening_origin: &T::Origin, + add_opening_origin: &T::RuntimeOrigin, applicant_account_id: &T::AccountId, applicant_member_id: &T::MemberId, job_opening_type: &OpeningType, @@ -173,7 +173,7 @@ fn add_and_apply_opening>( - add_opening_origin: &T::Origin, + add_opening_origin: &T::RuntimeOrigin, job_opening_type: &OpeningType, ) -> OpeningId { ForumGroup::::add_opening( @@ -550,7 +550,7 @@ benchmarks! { archived: new_archival_status, num_direct_subcategories: 0, num_direct_threads: 0, - num_direct_moderators: if i == 1 { 1 } else { 0 }, + num_direct_moderators: u32::from(i == 1), parent_category_id, sticky_thread_ids: BoundedBTreeSet::default(), }; @@ -634,7 +634,7 @@ benchmarks! { archived: false, num_direct_subcategories: 0, num_direct_threads: 0, - num_direct_moderators: if i == 1 { 1 } else { 0 }, + num_direct_moderators: u32::from(i == 1), parent_category_id, sticky_thread_ids: BoundedBTreeSet::default(), }; @@ -718,7 +718,7 @@ benchmarks! { archived: false, num_direct_subcategories: 0, num_direct_threads: 0, - num_direct_moderators: if i == 1 { 1 } else { 0 }, + num_direct_moderators: u32::from(i == 1), parent_category_id, sticky_thread_ids: BoundedBTreeSet::default(), }; @@ -1115,7 +1115,7 @@ benchmarks! { let text = vec![1u8].repeat((MAX_KILOBYTES_METADATA * 1000) as usize); let thread_id = create_new_thread::( - caller_id.clone(), (lead_id as u64).saturated_into(), category_id, + caller_id.clone(), lead_id.saturated_into(), category_id, text.clone(), text ); @@ -1177,7 +1177,7 @@ benchmarks! { let text = vec![1u8].repeat((MAX_KILOBYTES_METADATA * 1000) as usize); let thread_id = create_new_thread::( - caller_id.clone(), (lead_id as u64).saturated_into(), category_id, + caller_id.clone(), lead_id.saturated_into(), category_id, text.clone(), text ); diff --git a/runtime-modules/forum/src/lib.rs b/runtime-modules/forum/src/lib.rs index 20f37e15ac..27414416dc 100755 --- a/runtime-modules/forum/src/lib.rs +++ b/runtime-modules/forum/src/lib.rs @@ -107,7 +107,7 @@ pub trait Config: + common::membership::MembershipTypes + balances::Config { - type Event: From> + Into<::Event>; + type RuntimeEvent: From> + Into<::RuntimeEvent>; type CategoryId: Parameter + Member @@ -175,7 +175,7 @@ pub trait Config: /// Validates member id and origin combination type MemberOriginValidator: MemberOriginValidator< - Self::Origin, + Self::RuntimeOrigin, common::MemberId, Self::AccountId, >; @@ -483,7 +483,7 @@ decl_event!( ); decl_module! { - pub struct Module for enum Call where origin: T::Origin { + pub struct Module for enum Call where origin: T::RuntimeOrigin { /// Predefined errors type Error = Error; @@ -1923,7 +1923,7 @@ impl Module { fn ensure_category_exists(category_id: &T::CategoryId) -> Result, Error> { ensure!( - >::contains_key(&category_id), + >::contains_key(category_id), Error::::CategoryDoesNotExist ); @@ -1938,7 +1938,7 @@ impl Module { Self::ensure_is_forum_lead_account(&account_id)?; Self::ensure_map_limits::<<::MapLimits as StorageLimits>::MaxTotalCategories>( - >::get().into() as u64, + >::get().into(), )?; // If not root, then check that we can create in parent category @@ -2030,3 +2030,10 @@ impl Module { Ok(()) } } + +impl frame_support::traits::Hooks for Pallet { + #[cfg(feature = "try-runtime")] + fn try_state(_: T::BlockNumber) -> Result<(), &'static str> { + Ok(()) + } +} diff --git a/runtime-modules/forum/src/mock.rs b/runtime-modules/forum/src/mock.rs index 36045e377a..ca59bb16cb 100644 --- a/runtime-modules/forum/src/mock.rs +++ b/runtime-modules/forum/src/mock.rs @@ -55,8 +55,8 @@ impl frame_system::Config for Runtime { type BlockWeights = (); type BlockLength = (); type DbWeight = (); - type Origin = Origin; - type Call = Call; + type RuntimeOrigin = RuntimeOrigin; + type RuntimeCall = RuntimeCall; type Index = u64; type BlockNumber = u64; type Hash = H256; @@ -64,7 +64,7 @@ impl frame_system::Config for Runtime { type AccountId = u128; type Lookup = IdentityLookup; type Header = Header; - type Event = Event; + type RuntimeEvent = RuntimeEvent; type BlockHashCount = ConstU64<250>; type Version = (); type PalletInfo = PalletInfo; @@ -87,7 +87,7 @@ impl pallet_timestamp::Config for Runtime { impl balances::Config for Runtime { type Balance = u64; type DustRemoval = (); - type Event = Event; + type RuntimeEvent = RuntimeEvent; type ExistentialDeposit = ExistentialDeposit; type AccountStore = System; type MaxLocks = (); @@ -112,7 +112,7 @@ parameter_types! { pub type ForumWorkingGroupInstance = working_group::Instance1; impl working_group::Config for Runtime { - type Event = Event; + type RuntimeEvent = RuntimeEvent; type MaxWorkerNumberLimit = MaxWorkerNumberLimit; type StakingAccountValidator = membership::Module; type StakingHandler = staking_handler::StakingManager; @@ -157,7 +157,7 @@ impl common::working_group::WorkingGroupBudgetHandler for Wg { } impl membership::Config for Runtime { - type Event = Event; + type RuntimeEvent = RuntimeEvent; type DefaultMembershipPrice = DefaultMembershipPrice; type DefaultInitialInvitationBalance = DefaultInitialInvitationBalance; type WorkingGroup = Wg; @@ -192,7 +192,7 @@ impl StorageLimits for MapLimits { } impl Config for Runtime { - type Event = Event; + type RuntimeEvent = RuntimeEvent; type CategoryId = u64; type ThreadId = u64; type PostId = u64; @@ -215,9 +215,9 @@ impl Config for Runtime { type WeightInfo = (); } -impl common::membership::MemberOriginValidator for () { +impl common::membership::MemberOriginValidator for () { fn ensure_member_controller_account_origin( - origin: Origin, + origin: RuntimeOrigin, member_id: u128, ) -> Result { let account_id = ensure_signed(origin).unwrap(); @@ -250,13 +250,15 @@ impl common::membership::MemberOriginValidator for () { impl common::working_group::WorkingGroupAuthenticator for Wg { fn ensure_worker_origin( - _origin: ::Origin, + _origin: ::RuntimeOrigin, _worker_id: &::ActorId, ) -> DispatchResult { unimplemented!() } - fn ensure_leader_origin(_origin: ::Origin) -> DispatchResult { + fn ensure_leader_origin( + _origin: ::RuntimeOrigin, + ) -> DispatchResult { unimplemented!() } @@ -311,9 +313,9 @@ pub enum OriginType { Signed(::AccountId), } -pub fn mock_origin(origin: OriginType) -> mock::Origin { +pub fn mock_origin(origin: OriginType) -> mock::RuntimeOrigin { match origin { - OriginType::Signed(account_id) => Origin::signed(account_id), + OriginType::Signed(account_id) => RuntimeOrigin::signed(account_id), } } @@ -425,7 +427,7 @@ pub fn create_category_mock( assert_eq!(TestForumModule::next_category_id(), category_id + 1); assert_eq!( System::events().last().unwrap().event, - Event::TestForumModule(RawEvent::CategoryCreated( + RuntimeEvent::TestForumModule(RawEvent::CategoryCreated( category_id, parent, title, @@ -462,7 +464,7 @@ pub fn create_thread_mock( assert_eq!(TestForumModule::next_thread_id(), thread_id + 1); assert_eq!( System::events().last().unwrap().event, - Event::TestForumModule(RawEvent::ThreadCreated( + RuntimeEvent::TestForumModule(RawEvent::ThreadCreated( category_id, thread_id, TestForumModule::next_thread_id() - 1, @@ -506,7 +508,7 @@ pub fn edit_thread_metadata_mock( if result.is_ok() { assert_eq!( System::events().last().unwrap().event, - Event::TestForumModule(RawEvent::ThreadMetadataUpdated( + RuntimeEvent::TestForumModule(RawEvent::ThreadMetadataUpdated( thread_id, forum_user_id, category_id, @@ -525,7 +527,7 @@ pub fn delete_thread_mock( thread_id: ::ThreadId, result: DispatchResult, ) { - let origin = mock::OriginType::Signed(sender.clone()); + let origin = mock::OriginType::Signed(*sender); let storage_root_pre = storage_root(StateVersion::V1); let thread = ThreadById::::get(category_id, thread_id); let bloat_bond_reciever = thread.cleanup_pay_off.get_recipient(sender); @@ -557,7 +559,7 @@ pub fn delete_thread_mock( ); assert_eq!( System::events().last().unwrap().event, - Event::TestForumModule(RawEvent::ThreadDeleted( + RuntimeEvent::TestForumModule(RawEvent::ThreadDeleted( thread_id, forum_user_id, category_id, @@ -590,7 +592,7 @@ pub fn delete_post_mock( ) { let number_of_editable_posts = >::get(category_id, thread_id).number_of_editable_posts; - let origin = mock::OriginType::Signed(sender.clone()); + let origin = mock::OriginType::Signed(*sender); let storage_root_pre = storage_root(StateVersion::V1); let post = PostById::::get(thread_id, post_id); let bloat_bond_reciever = post.cleanup_pay_off.get_recipient(sender); @@ -625,7 +627,7 @@ pub fn delete_post_mock( } assert_eq!( System::events().last().unwrap().event, - Event::TestForumModule(RawEvent::PostDeleted( + RuntimeEvent::TestForumModule(RawEvent::PostDeleted( vec![0u8], forum_user_id, deleted_posts.clone() @@ -667,7 +669,7 @@ pub fn move_thread_mock( ),); assert_eq!( System::events().last().unwrap().event, - Event::TestForumModule(RawEvent::ThreadMoved( + RuntimeEvent::TestForumModule(RawEvent::ThreadMoved( thread_id, new_category_id, PrivilegedActor::Moderator(moderator_id), @@ -706,7 +708,7 @@ pub fn create_post_mock( assert_eq!(TestForumModule::next_post_id(), post_id + 1); assert_eq!( System::events().last().unwrap().event, - Event::TestForumModule(RawEvent::PostAdded( + RuntimeEvent::TestForumModule(RawEvent::PostAdded( post_id, forum_user_id, category_id, @@ -767,7 +769,7 @@ pub fn edit_post_text_mock( assert_eq!(post.text_hash, Runtime::calculate_hash(new_text.as_slice()),); assert_eq!( System::events().last().unwrap().event, - Event::TestForumModule(RawEvent::PostTextUpdated( + RuntimeEvent::TestForumModule(RawEvent::PostTextUpdated( post_id, forum_user_id, category_id, @@ -804,7 +806,7 @@ pub fn update_category_membership_of_moderator_mock( assert_eq!( System::events().last().unwrap().event, - Event::TestForumModule(RawEvent::CategoryMembershipOfModeratorUpdated( + RuntimeEvent::TestForumModule(RawEvent::CategoryMembershipOfModeratorUpdated( moderator_id, category_id, new_value @@ -834,7 +836,7 @@ pub fn update_category_archival_status_mock( if result.is_ok() { assert_eq!( System::events().last().unwrap().event, - Event::TestForumModule(RawEvent::CategoryArchivalStatusUpdated( + RuntimeEvent::TestForumModule(RawEvent::CategoryArchivalStatusUpdated( category_id, new_archival_status, actor @@ -864,7 +866,7 @@ pub fn update_category_title_mock( if result.is_ok() { assert_eq!( System::events().last().unwrap().event, - Event::TestForumModule(RawEvent::CategoryTitleUpdated( + RuntimeEvent::TestForumModule(RawEvent::CategoryTitleUpdated( category_id, new_title_hash, actor @@ -894,7 +896,7 @@ pub fn update_category_description_mock( if result.is_ok() { assert_eq!( System::events().last().unwrap().event, - Event::TestForumModule(RawEvent::CategoryDescriptionUpdated( + RuntimeEvent::TestForumModule(RawEvent::CategoryDescriptionUpdated( category_id, new_description_hash, actor @@ -918,7 +920,7 @@ pub fn delete_category_mock( assert!(!>::contains_key(category_id)); assert_eq!( System::events().last().unwrap().event, - Event::TestForumModule(RawEvent::CategoryDeleted(category_id, moderator_id)) + RuntimeEvent::TestForumModule(RawEvent::CategoryDeleted(category_id, moderator_id)) ); } } @@ -947,7 +949,7 @@ pub fn moderate_thread_mock( assert!(!>::contains_key(category_id, thread_id)); assert_eq!( System::events().last().unwrap().event, - Event::TestForumModule(RawEvent::ThreadModerated( + RuntimeEvent::TestForumModule(RawEvent::ThreadModerated( thread_id, rationale, PrivilegedActor::Moderator(moderator_id), @@ -989,7 +991,7 @@ pub fn moderate_post_mock( assert!(!>::contains_key(thread_id, post_id)); assert_eq!( System::events().last().unwrap().event, - Event::TestForumModule(RawEvent::PostModerated( + RuntimeEvent::TestForumModule(RawEvent::PostModerated( post_id, rationale, PrivilegedActor::Moderator(moderator_id), @@ -1036,7 +1038,7 @@ pub fn set_stickied_threads_mock( ); assert_eq!( System::events().last().unwrap().event, - Event::TestForumModule(RawEvent::CategoryStickyThreadUpdate( + RuntimeEvent::TestForumModule(RawEvent::CategoryStickyThreadUpdate( category_id, stickied_ids, PrivilegedActor::Moderator(moderator_id) @@ -1094,7 +1096,7 @@ pub fn run_to_block(n: u64) { } pub fn ed() -> BalanceOf { - ExistentialDeposit::get().into() + ExistentialDeposit::get() } pub fn set_invitation_lock( @@ -1102,7 +1104,7 @@ pub fn set_invitation_lock( amount: BalanceOf, ) { ::InvitedMemberStakingHandler::lock_with_reasons( - &who, + who, amount, WithdrawReasons::except(WithdrawReasons::TRANSACTION_PAYMENT), ); @@ -1112,5 +1114,5 @@ pub fn set_staking_candidate_lock( who: &::AccountId, amount: BalanceOf, ) { - ::StakingCandidateStakingHandler::lock(&who, amount); + ::StakingCandidateStakingHandler::lock(who, amount); } diff --git a/runtime-modules/forum/src/weights.rs b/runtime-modules/forum/src/weights.rs index 2c883407f6..6a392a0b31 100644 --- a/runtime-modules/forum/src/weights.rs +++ b/runtime-modules/forum/src/weights.rs @@ -18,17 +18,16 @@ //! Autogenerated weights for forum //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-10-28, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("dev"), DB CACHE: 1024 +//! DATE: 2023-11-06, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("prod-test"), DB CACHE: 1024 // Executed Command: // ./scripts/../target/release/joystream-node // benchmark // pallet -// --base-path=/mnt/disks/local-ssd/ // --pallet=forum // --extrinsic=* -// --chain=dev +// --chain=prod-test // --steps=50 // --repeat=20 // --execution=wasm @@ -76,423 +75,720 @@ pub trait WeightInfo { pub struct SubstrateWeight(PhantomData); impl WeightInfo for SubstrateWeight { // Storage: Instance1WorkingGroup CurrentLead (r:1 w:0) + // Proof: Instance1WorkingGroup CurrentLead (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) // Storage: Instance1WorkingGroup WorkerById (r:1 w:0) + // Proof: Instance1WorkingGroup WorkerById (max_values: None, max_size: Some(175), added: 2650, mode: MaxEncodedLen) // Storage: Forum_1_1 CategoryCounter (r:1 w:1) + // Proof: Forum_1_1 CategoryCounter (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) + // Storage: Forum_1_1 CategoryById (r:6 w:2) + // Proof: Forum_1_1 CategoryById (max_values: None, max_size: Some(271), added: 2746, mode: MaxEncodedLen) // Storage: Forum_1_1 NextCategoryId (r:1 w:1) - // Storage: Forum_1_1 CategoryById (r:1 w:1) + // Proof: Forum_1_1 NextCategoryId (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) + /// The range of component `i` is `[1, 6]`. + /// The range of component `j` is `[0, 100]`. + /// The range of component `k` is `[0, 100]`. fn create_category(i: u32, j: u32, k: u32, ) -> Weight { - (22_133_000 as Weight) - // Standard Error: 344_000 - .saturating_add((8_641_000 as Weight).saturating_mul(i as Weight)) - // Standard Error: 8_000 - .saturating_add((1_503_000 as Weight).saturating_mul(j as Weight)) - // Standard Error: 8_000 - .saturating_add((1_636_000 as Weight).saturating_mul(k as Weight)) - .saturating_add(T::DbWeight::get().reads(4 as Weight)) - .saturating_add(T::DbWeight::get().reads((1 as Weight).saturating_mul(i as Weight))) - .saturating_add(T::DbWeight::get().writes(3 as Weight)) + // Proof Size summary in bytes: + // Measured: `396 + i * (118 ±0)` + // Estimated: `9109 + i * (2746 ±0)` + // Minimum execution time: 231_760 nanoseconds. + Weight::from_parts(22_530_518, 0u64) + .saturating_add(Weight::from_parts(0, 9109)) + // Standard Error: 126_071 + .saturating_add(Weight::from_parts(8_272_602, 0u64).saturating_mul(i.into())) + // Standard Error: 7_008 + .saturating_add(Weight::from_parts(1_613_429, 0u64).saturating_mul(j.into())) + // Standard Error: 7_008 + .saturating_add(Weight::from_parts(1_720_664, 0u64).saturating_mul(k.into())) + .saturating_add(T::DbWeight::get().reads(4_u64)) + .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(i.into()))) + .saturating_add(T::DbWeight::get().writes(3_u64)) + .saturating_add(Weight::from_parts(0, 2746).saturating_mul(i.into())) } // Storage: Instance1WorkingGroup CurrentLead (r:1 w:0) + // Proof: Instance1WorkingGroup CurrentLead (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) // Storage: Instance1WorkingGroup WorkerById (r:1 w:0) + // Proof: Instance1WorkingGroup WorkerById (max_values: None, max_size: Some(175), added: 2650, mode: MaxEncodedLen) // Storage: Forum_1_1 CategoryById (r:1 w:1) + // Proof: Forum_1_1 CategoryById (max_values: None, max_size: Some(271), added: 2746, mode: MaxEncodedLen) // Storage: Forum_1_1 CategoryByModerator (r:0 w:1) + // Proof: Forum_1_1 CategoryByModerator (max_values: None, max_size: Some(48), added: 2523, mode: MaxEncodedLen) fn update_category_membership_of_moderator_new() -> Weight { - (39_850_000 as Weight) - .saturating_add(T::DbWeight::get().reads(3 as Weight)) - .saturating_add(T::DbWeight::get().writes(2 as Weight)) + // Proof Size summary in bytes: + // Measured: `601` + // Estimated: `8869` + // Minimum execution time: 40_949 nanoseconds. + Weight::from_parts(42_711_000, 0u64) + .saturating_add(Weight::from_parts(0, 8869)) + .saturating_add(T::DbWeight::get().reads(3_u64)) + .saturating_add(T::DbWeight::get().writes(2_u64)) } // Storage: Instance1WorkingGroup CurrentLead (r:1 w:0) + // Proof: Instance1WorkingGroup CurrentLead (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) // Storage: Instance1WorkingGroup WorkerById (r:1 w:0) + // Proof: Instance1WorkingGroup WorkerById (max_values: None, max_size: Some(175), added: 2650, mode: MaxEncodedLen) // Storage: Forum_1_1 CategoryById (r:1 w:1) + // Proof: Forum_1_1 CategoryById (max_values: None, max_size: Some(271), added: 2746, mode: MaxEncodedLen) // Storage: Forum_1_1 CategoryByModerator (r:1 w:1) + // Proof: Forum_1_1 CategoryByModerator (max_values: None, max_size: Some(48), added: 2523, mode: MaxEncodedLen) fn update_category_membership_of_moderator_old() -> Weight { - (41_130_000 as Weight) - .saturating_add(T::DbWeight::get().reads(4 as Weight)) - .saturating_add(T::DbWeight::get().writes(2 as Weight)) + // Proof Size summary in bytes: + // Measured: `671` + // Estimated: `12382` + // Minimum execution time: 41_474 nanoseconds. + Weight::from_parts(42_355_000, 0u64) + .saturating_add(Weight::from_parts(0, 12382)) + .saturating_add(T::DbWeight::get().reads(4_u64)) + .saturating_add(T::DbWeight::get().writes(2_u64)) } // Storage: Instance1WorkingGroup CurrentLead (r:1 w:0) + // Proof: Instance1WorkingGroup CurrentLead (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) // Storage: Instance1WorkingGroup WorkerById (r:1 w:0) - // Storage: Forum_1_1 CategoryById (r:1 w:1) + // Proof: Instance1WorkingGroup WorkerById (max_values: None, max_size: Some(175), added: 2650, mode: MaxEncodedLen) + // Storage: Forum_1_1 CategoryById (r:6 w:1) + // Proof: Forum_1_1 CategoryById (max_values: None, max_size: Some(271), added: 2746, mode: MaxEncodedLen) + /// The range of component `i` is `[1, 6]`. fn update_category_archival_status_lead(i: u32, ) -> Weight { - (29_526_000 as Weight) - // Standard Error: 31_000 - .saturating_add((4_275_000 as Weight).saturating_mul(i as Weight)) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) - .saturating_add(T::DbWeight::get().reads((1 as Weight).saturating_mul(i as Weight))) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + // Proof Size summary in bytes: + // Measured: `477 + i * (119 ±0)` + // Estimated: `6123 + i * (2746 ±0)` + // Minimum execution time: 34_935 nanoseconds. + Weight::from_parts(31_958_111, 0u64) + .saturating_add(Weight::from_parts(0, 6123)) + // Standard Error: 26_221 + .saturating_add(Weight::from_parts(4_201_431, 0u64).saturating_mul(i.into())) + .saturating_add(T::DbWeight::get().reads(2_u64)) + .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(i.into()))) + .saturating_add(T::DbWeight::get().writes(1_u64)) + .saturating_add(Weight::from_parts(0, 2746).saturating_mul(i.into())) } // Storage: Instance1WorkingGroup WorkerById (r:1 w:0) - // Storage: Forum_1_1 CategoryById (r:1 w:1) - // Storage: Forum_1_1 CategoryByModerator (r:1 w:0) + // Proof: Instance1WorkingGroup WorkerById (max_values: None, max_size: Some(175), added: 2650, mode: MaxEncodedLen) + // Storage: Forum_1_1 CategoryById (r:6 w:1) + // Proof: Forum_1_1 CategoryById (max_values: None, max_size: Some(271), added: 2746, mode: MaxEncodedLen) + // Storage: Forum_1_1 CategoryByModerator (r:6 w:0) + // Proof: Forum_1_1 CategoryByModerator (max_values: None, max_size: Some(48), added: 2523, mode: MaxEncodedLen) + /// The range of component `i` is `[1, 6]`. fn update_category_archival_status_moderator(i: u32, ) -> Weight { - (27_321_000 as Weight) - // Standard Error: 42_000 - .saturating_add((7_882_000 as Weight).saturating_mul(i as Weight)) - .saturating_add(T::DbWeight::get().reads(1 as Weight)) - .saturating_add(T::DbWeight::get().reads((2 as Weight).saturating_mul(i as Weight))) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + // Proof Size summary in bytes: + // Measured: `547 + i * (119 ±0)` + // Estimated: `5620 + i * (5269 ±0)` + // Minimum execution time: 36_740 nanoseconds. + Weight::from_parts(32_603_836, 0u64) + .saturating_add(Weight::from_parts(0, 5620)) + // Standard Error: 15_368 + .saturating_add(Weight::from_parts(6_280_462, 0u64).saturating_mul(i.into())) + .saturating_add(T::DbWeight::get().reads(1_u64)) + .saturating_add(T::DbWeight::get().reads((2_u64).saturating_mul(i.into()))) + .saturating_add(T::DbWeight::get().writes(1_u64)) + .saturating_add(Weight::from_parts(0, 5269).saturating_mul(i.into())) } // Storage: Instance1WorkingGroup CurrentLead (r:1 w:0) + // Proof: Instance1WorkingGroup CurrentLead (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) // Storage: Instance1WorkingGroup WorkerById (r:1 w:0) - // Storage: Forum_1_1 CategoryById (r:1 w:1) + // Proof: Instance1WorkingGroup WorkerById (max_values: None, max_size: Some(175), added: 2650, mode: MaxEncodedLen) + // Storage: Forum_1_1 CategoryById (r:6 w:1) + // Proof: Forum_1_1 CategoryById (max_values: None, max_size: Some(271), added: 2746, mode: MaxEncodedLen) + /// The range of component `i` is `[1, 6]`. + /// The range of component `j` is `[0, 99]`. fn update_category_title_lead(i: u32, j: u32, ) -> Weight { - (28_858_000 as Weight) - // Standard Error: 110_000 - .saturating_add((4_526_000 as Weight).saturating_mul(i as Weight)) - // Standard Error: 2_000 - .saturating_add((1_260_000 as Weight).saturating_mul(j as Weight)) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) - .saturating_add(T::DbWeight::get().reads((1 as Weight).saturating_mul(i as Weight))) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + // Proof Size summary in bytes: + // Measured: `477 + i * (119 ±0)` + // Estimated: `6123 + i * (2746 ±0)` + // Minimum execution time: 56_819 nanoseconds. + Weight::from_parts(30_831_612, 0u64) + .saturating_add(Weight::from_parts(0, 6123)) + // Standard Error: 29_685 + .saturating_add(Weight::from_parts(4_476_794, 0u64).saturating_mul(i.into())) + // Standard Error: 1_662 + .saturating_add(Weight::from_parts(1_388_568, 0u64).saturating_mul(j.into())) + .saturating_add(T::DbWeight::get().reads(2_u64)) + .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(i.into()))) + .saturating_add(T::DbWeight::get().writes(1_u64)) + .saturating_add(Weight::from_parts(0, 2746).saturating_mul(i.into())) } // Storage: Instance1WorkingGroup WorkerById (r:1 w:0) - // Storage: Forum_1_1 CategoryById (r:1 w:1) - // Storage: Forum_1_1 CategoryByModerator (r:1 w:0) + // Proof: Instance1WorkingGroup WorkerById (max_values: None, max_size: Some(175), added: 2650, mode: MaxEncodedLen) + // Storage: Forum_1_1 CategoryById (r:6 w:1) + // Proof: Forum_1_1 CategoryById (max_values: None, max_size: Some(271), added: 2746, mode: MaxEncodedLen) + // Storage: Forum_1_1 CategoryByModerator (r:6 w:0) + // Proof: Forum_1_1 CategoryByModerator (max_values: None, max_size: Some(48), added: 2523, mode: MaxEncodedLen) + /// The range of component `i` is `[1, 6]`. + /// The range of component `j` is `[0, 99]`. fn update_category_title_moderator(i: u32, j: u32, ) -> Weight { - (28_478_000 as Weight) - // Standard Error: 85_000 - .saturating_add((7_917_000 as Weight).saturating_mul(i as Weight)) - // Standard Error: 1_000 - .saturating_add((1_247_000 as Weight).saturating_mul(j as Weight)) - .saturating_add(T::DbWeight::get().reads(1 as Weight)) - .saturating_add(T::DbWeight::get().reads((2 as Weight).saturating_mul(i as Weight))) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + // Proof Size summary in bytes: + // Measured: `547 + i * (119 ±0)` + // Estimated: `5620 + i * (5269 ±0)` + // Minimum execution time: 68_012 nanoseconds. + Weight::from_parts(30_283_579, 0u64) + .saturating_add(Weight::from_parts(0, 5620)) + // Standard Error: 30_940 + .saturating_add(Weight::from_parts(6_296_281, 0u64).saturating_mul(i.into())) + // Standard Error: 1_733 + .saturating_add(Weight::from_parts(1_405_211, 0u64).saturating_mul(j.into())) + .saturating_add(T::DbWeight::get().reads(1_u64)) + .saturating_add(T::DbWeight::get().reads((2_u64).saturating_mul(i.into()))) + .saturating_add(T::DbWeight::get().writes(1_u64)) + .saturating_add(Weight::from_parts(0, 5269).saturating_mul(i.into())) } // Storage: Instance1WorkingGroup CurrentLead (r:1 w:0) + // Proof: Instance1WorkingGroup CurrentLead (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) // Storage: Instance1WorkingGroup WorkerById (r:1 w:0) - // Storage: Forum_1_1 CategoryById (r:1 w:1) + // Proof: Instance1WorkingGroup WorkerById (max_values: None, max_size: Some(175), added: 2650, mode: MaxEncodedLen) + // Storage: Forum_1_1 CategoryById (r:6 w:1) + // Proof: Forum_1_1 CategoryById (max_values: None, max_size: Some(271), added: 2746, mode: MaxEncodedLen) + /// The range of component `i` is `[1, 6]`. + /// The range of component `j` is `[0, 99]`. fn update_category_description_lead(i: u32, j: u32, ) -> Weight { - (29_028_000 as Weight) - // Standard Error: 77_000 - .saturating_add((4_510_000 as Weight).saturating_mul(i as Weight)) - // Standard Error: 1_000 - .saturating_add((1_259_000 as Weight).saturating_mul(j as Weight)) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) - .saturating_add(T::DbWeight::get().reads((1 as Weight).saturating_mul(i as Weight))) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + // Proof Size summary in bytes: + // Measured: `477 + i * (119 ±0)` + // Estimated: `6123 + i * (2746 ±0)` + // Minimum execution time: 56_533 nanoseconds. + Weight::from_parts(30_874_501, 0u64) + .saturating_add(Weight::from_parts(0, 6123)) + // Standard Error: 26_601 + .saturating_add(Weight::from_parts(4_501_147, 0u64).saturating_mul(i.into())) + // Standard Error: 1_490 + .saturating_add(Weight::from_parts(1_382_130, 0u64).saturating_mul(j.into())) + .saturating_add(T::DbWeight::get().reads(2_u64)) + .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(i.into()))) + .saturating_add(T::DbWeight::get().writes(1_u64)) + .saturating_add(Weight::from_parts(0, 2746).saturating_mul(i.into())) } // Storage: Instance1WorkingGroup WorkerById (r:1 w:0) - // Storage: Forum_1_1 CategoryById (r:1 w:1) - // Storage: Forum_1_1 CategoryByModerator (r:1 w:0) + // Proof: Instance1WorkingGroup WorkerById (max_values: None, max_size: Some(175), added: 2650, mode: MaxEncodedLen) + // Storage: Forum_1_1 CategoryById (r:6 w:1) + // Proof: Forum_1_1 CategoryById (max_values: None, max_size: Some(271), added: 2746, mode: MaxEncodedLen) + // Storage: Forum_1_1 CategoryByModerator (r:6 w:0) + // Proof: Forum_1_1 CategoryByModerator (max_values: None, max_size: Some(48), added: 2523, mode: MaxEncodedLen) + /// The range of component `i` is `[1, 6]`. + /// The range of component `j` is `[0, 99]`. fn update_category_description_moderator(i: u32, j: u32, ) -> Weight { - (28_376_000 as Weight) - // Standard Error: 63_000 - .saturating_add((7_871_000 as Weight).saturating_mul(i as Weight)) - // Standard Error: 1_000 - .saturating_add((1_251_000 as Weight).saturating_mul(j as Weight)) - .saturating_add(T::DbWeight::get().reads(1 as Weight)) - .saturating_add(T::DbWeight::get().reads((2 as Weight).saturating_mul(i as Weight))) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + // Proof Size summary in bytes: + // Measured: `547 + i * (119 ±0)` + // Estimated: `5620 + i * (5269 ±0)` + // Minimum execution time: 68_230 nanoseconds. + Weight::from_parts(31_034_151, 0u64) + .saturating_add(Weight::from_parts(0, 5620)) + // Standard Error: 32_890 + .saturating_add(Weight::from_parts(6_288_805, 0u64).saturating_mul(i.into())) + // Standard Error: 1_842 + .saturating_add(Weight::from_parts(1_398_718, 0u64).saturating_mul(j.into())) + .saturating_add(T::DbWeight::get().reads(1_u64)) + .saturating_add(T::DbWeight::get().reads((2_u64).saturating_mul(i.into()))) + .saturating_add(T::DbWeight::get().writes(1_u64)) + .saturating_add(Weight::from_parts(0, 5269).saturating_mul(i.into())) } // Storage: Instance1WorkingGroup CurrentLead (r:1 w:0) + // Proof: Instance1WorkingGroup CurrentLead (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) // Storage: Instance1WorkingGroup WorkerById (r:1 w:0) - // Storage: Forum_1_1 CategoryById (r:1 w:1) + // Proof: Instance1WorkingGroup WorkerById (max_values: None, max_size: Some(175), added: 2650, mode: MaxEncodedLen) + // Storage: Forum_1_1 CategoryById (r:6 w:2) + // Proof: Forum_1_1 CategoryById (max_values: None, max_size: Some(271), added: 2746, mode: MaxEncodedLen) // Storage: Forum_1_1 CategoryCounter (r:1 w:1) + // Proof: Forum_1_1 CategoryCounter (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) + /// The range of component `i` is `[1, 6]`. fn delete_category_lead(i: u32, ) -> Weight { - (31_586_000 as Weight) - // Standard Error: 160_000 - .saturating_add((5_142_000 as Weight).saturating_mul(i as Weight)) - .saturating_add(T::DbWeight::get().reads(3 as Weight)) - .saturating_add(T::DbWeight::get().reads((1 as Weight).saturating_mul(i as Weight))) - .saturating_add(T::DbWeight::get().writes(2 as Weight)) + // Proof Size summary in bytes: + // Measured: `477 + i * (119 ±0)` + // Estimated: `7616 + i * (2746 ±0)` + // Minimum execution time: 32_882 nanoseconds. + Weight::from_parts(31_979_597, 0u64) + .saturating_add(Weight::from_parts(0, 7616)) + // Standard Error: 58_632 + .saturating_add(Weight::from_parts(5_477_733, 0u64).saturating_mul(i.into())) + .saturating_add(T::DbWeight::get().reads(3_u64)) + .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(i.into()))) + .saturating_add(T::DbWeight::get().writes(2_u64)) + .saturating_add(Weight::from_parts(0, 2746).saturating_mul(i.into())) } // Storage: Instance1WorkingGroup WorkerById (r:1 w:0) - // Storage: Forum_1_1 CategoryById (r:3 w:2) - // Storage: Forum_1_1 CategoryByModerator (r:2 w:0) + // Proof: Instance1WorkingGroup WorkerById (max_values: None, max_size: Some(175), added: 2650, mode: MaxEncodedLen) + // Storage: Forum_1_1 CategoryById (r:6 w:2) + // Proof: Forum_1_1 CategoryById (max_values: None, max_size: Some(271), added: 2746, mode: MaxEncodedLen) + // Storage: Forum_1_1 CategoryByModerator (r:5 w:0) + // Proof: Forum_1_1 CategoryByModerator (max_values: None, max_size: Some(48), added: 2523, mode: MaxEncodedLen) // Storage: Forum_1_1 CategoryCounter (r:1 w:1) + // Proof: Forum_1_1 CategoryCounter (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) + /// The range of component `i` is `[3, 6]`. fn delete_category_moderator(i: u32, ) -> Weight { - (29_291_000 as Weight) - // Standard Error: 42_000 - .saturating_add((8_080_000 as Weight).saturating_mul(i as Weight)) - .saturating_add(T::DbWeight::get().reads(1 as Weight)) - .saturating_add(T::DbWeight::get().reads((2 as Weight).saturating_mul(i as Weight))) - .saturating_add(T::DbWeight::get().writes(3 as Weight)) + // Proof Size summary in bytes: + // Measured: `546 + i * (119 ±0)` + // Estimated: `12159 + i * (3469 ±17)` + // Minimum execution time: 52_327 nanoseconds. + Weight::from_parts(36_492_933, 0u64) + .saturating_add(Weight::from_parts(0, 12159)) + // Standard Error: 30_867 + .saturating_add(Weight::from_parts(6_189_074, 0u64).saturating_mul(i.into())) + .saturating_add(T::DbWeight::get().reads(1_u64)) + .saturating_add(T::DbWeight::get().reads((2_u64).saturating_mul(i.into()))) + .saturating_add(T::DbWeight::get().writes(3_u64)) + .saturating_add(Weight::from_parts(0, 3469).saturating_mul(i.into())) } // Storage: Membership MembershipById (r:1 w:0) - // Storage: Forum_1_1 CategoryById (r:1 w:1) + // Proof: Membership MembershipById (max_values: None, max_size: Some(125), added: 2600, mode: MaxEncodedLen) + // Storage: Forum_1_1 CategoryById (r:6 w:1) + // Proof: Forum_1_1 CategoryById (max_values: None, max_size: Some(271), added: 2746, mode: MaxEncodedLen) // Storage: System Account (r:2 w:2) + // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) // Storage: Forum_1_1 NextThreadId (r:1 w:1) + // Proof: Forum_1_1 NextThreadId (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) // Storage: Forum_1_1 ThreadById (r:1 w:1) + // Proof: Forum_1_1 ThreadById (max_values: None, max_size: Some(121), added: 2596, mode: MaxEncodedLen) // Storage: Forum_1_1 NextPostId (r:1 w:1) + // Proof: Forum_1_1 NextPostId (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) // Storage: Forum_1_1 PostById (r:0 w:1) + // Proof: Forum_1_1 PostById (max_values: None, max_size: Some(149), added: 2624, mode: MaxEncodedLen) + /// The range of component `i` is `[1, 6]`. + /// The range of component `j` is `[0, 100]`. + /// The range of component `k` is `[0, 100]`. fn create_thread(i: u32, j: u32, k: u32, ) -> Weight { - (96_321_000 as Weight) - // Standard Error: 345_000 - .saturating_add((7_680_000 as Weight).saturating_mul(i as Weight)) - // Standard Error: 8_000 - .saturating_add((610_000 as Weight).saturating_mul(j as Weight)) - // Standard Error: 8_000 - .saturating_add((1_693_000 as Weight).saturating_mul(k as Weight)) - .saturating_add(T::DbWeight::get().reads(6 as Weight)) - .saturating_add(T::DbWeight::get().reads((1 as Weight).saturating_mul(i as Weight))) - .saturating_add(T::DbWeight::get().writes(7 as Weight)) + // Proof Size summary in bytes: + // Measured: `622 + i * (119 ±0)` + // Estimated: `17348 + i * (2746 ±0)` + // Minimum execution time: 228_563 nanoseconds. + Weight::from_parts(102_404_108, 0u64) + .saturating_add(Weight::from_parts(0, 17348)) + // Standard Error: 125_558 + .saturating_add(Weight::from_parts(5_739_251, 0u64).saturating_mul(i.into())) + // Standard Error: 6_979 + .saturating_add(Weight::from_parts(942_514, 0u64).saturating_mul(j.into())) + // Standard Error: 6_979 + .saturating_add(Weight::from_parts(1_955_204, 0u64).saturating_mul(k.into())) + .saturating_add(T::DbWeight::get().reads(6_u64)) + .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(i.into()))) + .saturating_add(T::DbWeight::get().writes(7_u64)) + .saturating_add(Weight::from_parts(0, 2746).saturating_mul(i.into())) } // Storage: Membership MembershipById (r:1 w:0) + // Proof: Membership MembershipById (max_values: None, max_size: Some(125), added: 2600, mode: MaxEncodedLen) // Storage: Forum_1_1 ThreadById (r:1 w:0) - // Storage: Forum_1_1 CategoryById (r:1 w:0) + // Proof: Forum_1_1 ThreadById (max_values: None, max_size: Some(121), added: 2596, mode: MaxEncodedLen) + // Storage: Forum_1_1 CategoryById (r:6 w:0) + // Proof: Forum_1_1 CategoryById (max_values: None, max_size: Some(271), added: 2746, mode: MaxEncodedLen) + /// The range of component `i` is `[1, 6]`. + /// The range of component `j` is `[0, 100]`. fn edit_thread_metadata(i: u32, j: u32, ) -> Weight { - (29_622_000 as Weight) - // Standard Error: 55_000 - .saturating_add((4_635_000 as Weight).saturating_mul(i as Weight)) - // Standard Error: 1_000 - .saturating_add((733_000 as Weight).saturating_mul(j as Weight)) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) - .saturating_add(T::DbWeight::get().reads((1 as Weight).saturating_mul(i as Weight))) + // Proof Size summary in bytes: + // Measured: `576 + i * (119 ±0)` + // Estimated: `8166 + i * (2746 ±0)` + // Minimum execution time: 56_444 nanoseconds. + Weight::from_parts(30_628_675, 0u64) + .saturating_add(Weight::from_parts(0, 8166)) + // Standard Error: 21_966 + .saturating_add(Weight::from_parts(4_503_910, 0u64).saturating_mul(i.into())) + // Standard Error: 1_215 + .saturating_add(Weight::from_parts(1_040_338, 0u64).saturating_mul(j.into())) + .saturating_add(T::DbWeight::get().reads(2_u64)) + .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(i.into()))) + .saturating_add(Weight::from_parts(0, 2746).saturating_mul(i.into())) } // Storage: Forum_1_1 ThreadById (r:1 w:1) - // Storage: Forum_1_1 CategoryById (r:1 w:1) + // Proof: Forum_1_1 ThreadById (max_values: None, max_size: Some(121), added: 2596, mode: MaxEncodedLen) + // Storage: Forum_1_1 CategoryById (r:6 w:1) + // Proof: Forum_1_1 CategoryById (max_values: None, max_size: Some(271), added: 2746, mode: MaxEncodedLen) // Storage: Membership MembershipById (r:1 w:0) + // Proof: Membership MembershipById (max_values: None, max_size: Some(125), added: 2600, mode: MaxEncodedLen) // Storage: System Account (r:2 w:2) + // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + /// The range of component `i` is `[1, 6]`. fn delete_thread(i: u32, ) -> Weight { - (66_086_000 as Weight) - // Standard Error: 57_000 - .saturating_add((4_377_000 as Weight).saturating_mul(i as Weight)) - .saturating_add(T::DbWeight::get().reads(4 as Weight)) - .saturating_add(T::DbWeight::get().reads((1 as Weight).saturating_mul(i as Weight))) - .saturating_add(T::DbWeight::get().writes(4 as Weight)) + // Proof Size summary in bytes: + // Measured: `823 + i * (119 ±0)` + // Estimated: `14362 + i * (2746 ±0)` + // Minimum execution time: 66_629 nanoseconds. + Weight::from_parts(66_527_223, 0u64) + .saturating_add(Weight::from_parts(0, 14362)) + // Standard Error: 38_981 + .saturating_add(Weight::from_parts(4_286_186, 0u64).saturating_mul(i.into())) + .saturating_add(T::DbWeight::get().reads(4_u64)) + .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(i.into()))) + .saturating_add(T::DbWeight::get().writes(4_u64)) + .saturating_add(Weight::from_parts(0, 2746).saturating_mul(i.into())) } // Storage: Instance1WorkingGroup CurrentLead (r:1 w:0) + // Proof: Instance1WorkingGroup CurrentLead (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) // Storage: Instance1WorkingGroup WorkerById (r:1 w:0) - // Storage: Forum_1_1 CategoryById (r:2 w:2) + // Proof: Instance1WorkingGroup WorkerById (max_values: None, max_size: Some(175), added: 2650, mode: MaxEncodedLen) + // Storage: Forum_1_1 CategoryById (r:6 w:2) + // Proof: Forum_1_1 CategoryById (max_values: None, max_size: Some(271), added: 2746, mode: MaxEncodedLen) // Storage: Forum_1_1 ThreadById (r:1 w:2) + // Proof: Forum_1_1 ThreadById (max_values: None, max_size: Some(121), added: 2596, mode: MaxEncodedLen) + /// The range of component `i` is `[1, 6]`. fn move_thread_to_category_lead(i: u32, ) -> Weight { - (48_374_000 as Weight) - // Standard Error: 138_000 - .saturating_add((5_455_000 as Weight).saturating_mul(i as Weight)) - .saturating_add(T::DbWeight::get().reads(4 as Weight)) - .saturating_add(T::DbWeight::get().reads((1 as Weight).saturating_mul(i as Weight))) - .saturating_add(T::DbWeight::get().writes(4 as Weight)) + // Proof Size summary in bytes: + // Measured: `627 + i * (118 ±0)` + // Estimated: `11854 + i * (2218 ±24)` + // Minimum execution time: 55_442 nanoseconds. + Weight::from_parts(49_997_594, 0u64) + .saturating_add(Weight::from_parts(0, 11854)) + // Standard Error: 56_690 + .saturating_add(Weight::from_parts(5_367_508, 0u64).saturating_mul(i.into())) + .saturating_add(T::DbWeight::get().reads(4_u64)) + .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(i.into()))) + .saturating_add(T::DbWeight::get().writes(4_u64)) + .saturating_add(Weight::from_parts(0, 2218).saturating_mul(i.into())) } // Storage: Instance1WorkingGroup WorkerById (r:1 w:0) - // Storage: Forum_1_1 CategoryById (r:2 w:2) - // Storage: Forum_1_1 CategoryByModerator (r:2 w:0) + // Proof: Instance1WorkingGroup WorkerById (max_values: None, max_size: Some(175), added: 2650, mode: MaxEncodedLen) + // Storage: Forum_1_1 CategoryById (r:7 w:2) + // Proof: Forum_1_1 CategoryById (max_values: None, max_size: Some(271), added: 2746, mode: MaxEncodedLen) + // Storage: Forum_1_1 CategoryByModerator (r:7 w:0) + // Proof: Forum_1_1 CategoryByModerator (max_values: None, max_size: Some(48), added: 2523, mode: MaxEncodedLen) // Storage: Forum_1_1 ThreadById (r:1 w:2) + // Proof: Forum_1_1 ThreadById (max_values: None, max_size: Some(121), added: 2596, mode: MaxEncodedLen) + /// The range of component `i` is `[1, 6]`. fn move_thread_to_category_moderator(i: u32, ) -> Weight { - (50_636_000 as Weight) - // Standard Error: 74_000 - .saturating_add((12_010_000 as Weight).saturating_mul(i as Weight)) - .saturating_add(T::DbWeight::get().reads(4 as Weight)) - .saturating_add(T::DbWeight::get().reads((2 as Weight).saturating_mul(i as Weight))) - .saturating_add(T::DbWeight::get().writes(4 as Weight)) + // Proof Size summary in bytes: + // Measured: `818 + i * (153 ±0)` + // Estimated: `14475 + i * (5269 ±0)` + // Minimum execution time: 65_095 nanoseconds. + Weight::from_parts(59_512_221, 0u64) + .saturating_add(Weight::from_parts(0, 14475)) + // Standard Error: 21_250 + .saturating_add(Weight::from_parts(8_291_726, 0u64).saturating_mul(i.into())) + .saturating_add(T::DbWeight::get().reads(4_u64)) + .saturating_add(T::DbWeight::get().reads((2_u64).saturating_mul(i.into()))) + .saturating_add(T::DbWeight::get().writes(4_u64)) + .saturating_add(Weight::from_parts(0, 5269).saturating_mul(i.into())) } // Storage: Instance1WorkingGroup CurrentLead (r:1 w:0) + // Proof: Instance1WorkingGroup CurrentLead (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) // Storage: Instance1WorkingGroup WorkerById (r:1 w:0) - // Storage: Forum_1_1 CategoryById (r:1 w:1) + // Proof: Instance1WorkingGroup WorkerById (max_values: None, max_size: Some(175), added: 2650, mode: MaxEncodedLen) + // Storage: Forum_1_1 CategoryById (r:6 w:1) + // Proof: Forum_1_1 CategoryById (max_values: None, max_size: Some(271), added: 2746, mode: MaxEncodedLen) // Storage: Forum_1_1 ThreadById (r:1 w:1) + // Proof: Forum_1_1 ThreadById (max_values: None, max_size: Some(121), added: 2596, mode: MaxEncodedLen) // Storage: System Account (r:1 w:1) + // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + /// The range of component `i` is `[1, 6]`. + /// The range of component `k` is `[0, 100]`. fn moderate_thread_lead(i: u32, k: u32, ) -> Weight { - (60_089_000 as Weight) - // Standard Error: 184_000 - .saturating_add((5_115_000 as Weight).saturating_mul(i as Weight)) - // Standard Error: 5_000 - .saturating_add((743_000 as Weight).saturating_mul(k as Weight)) - .saturating_add(T::DbWeight::get().reads(4 as Weight)) - .saturating_add(T::DbWeight::get().reads((1 as Weight).saturating_mul(i as Weight))) - .saturating_add(T::DbWeight::get().writes(3 as Weight)) + // Proof Size summary in bytes: + // Measured: `730 + i * (119 ±0)` + // Estimated: `13302 + i * (2746 ±0)` + // Minimum execution time: 87_254 nanoseconds. + Weight::from_parts(64_350_541, 0u64) + .saturating_add(Weight::from_parts(0, 13302)) + // Standard Error: 33_303 + .saturating_add(Weight::from_parts(4_059_025, 0u64).saturating_mul(i.into())) + // Standard Error: 1_843 + .saturating_add(Weight::from_parts(1_055_691, 0u64).saturating_mul(k.into())) + .saturating_add(T::DbWeight::get().reads(4_u64)) + .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(i.into()))) + .saturating_add(T::DbWeight::get().writes(3_u64)) + .saturating_add(Weight::from_parts(0, 2746).saturating_mul(i.into())) } // Storage: Instance1WorkingGroup WorkerById (r:1 w:0) - // Storage: Forum_1_1 CategoryById (r:1 w:1) - // Storage: Forum_1_1 CategoryByModerator (r:1 w:0) + // Proof: Instance1WorkingGroup WorkerById (max_values: None, max_size: Some(175), added: 2650, mode: MaxEncodedLen) + // Storage: Forum_1_1 CategoryById (r:6 w:1) + // Proof: Forum_1_1 CategoryById (max_values: None, max_size: Some(271), added: 2746, mode: MaxEncodedLen) + // Storage: Forum_1_1 CategoryByModerator (r:6 w:0) + // Proof: Forum_1_1 CategoryByModerator (max_values: None, max_size: Some(48), added: 2523, mode: MaxEncodedLen) // Storage: Forum_1_1 ThreadById (r:1 w:1) + // Proof: Forum_1_1 ThreadById (max_values: None, max_size: Some(121), added: 2596, mode: MaxEncodedLen) // Storage: System Account (r:1 w:1) + // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + /// The range of component `i` is `[1, 6]`. + /// The range of component `k` is `[0, 100]`. fn moderate_thread_moderator(i: u32, k: u32, ) -> Weight { - (59_169_000 as Weight) - // Standard Error: 181_000 - .saturating_add((8_646_000 as Weight).saturating_mul(i as Weight)) - // Standard Error: 5_000 - .saturating_add((740_000 as Weight).saturating_mul(k as Weight)) - .saturating_add(T::DbWeight::get().reads(3 as Weight)) - .saturating_add(T::DbWeight::get().reads((2 as Weight).saturating_mul(i as Weight))) - .saturating_add(T::DbWeight::get().writes(3 as Weight)) + // Proof Size summary in bytes: + // Measured: `803 + i * (119 ±0)` + // Estimated: `12799 + i * (5269 ±0)` + // Minimum execution time: 97_997 nanoseconds. + Weight::from_parts(65_632_588, 0u64) + .saturating_add(Weight::from_parts(0, 12799)) + // Standard Error: 40_626 + .saturating_add(Weight::from_parts(5_712_657, 0u64).saturating_mul(i.into())) + // Standard Error: 2_248 + .saturating_add(Weight::from_parts(1_054_800, 0u64).saturating_mul(k.into())) + .saturating_add(T::DbWeight::get().reads(3_u64)) + .saturating_add(T::DbWeight::get().reads((2_u64).saturating_mul(i.into()))) + .saturating_add(T::DbWeight::get().writes(3_u64)) + .saturating_add(Weight::from_parts(0, 5269).saturating_mul(i.into())) } // Storage: Membership MembershipById (r:1 w:0) + // Proof: Membership MembershipById (max_values: None, max_size: Some(125), added: 2600, mode: MaxEncodedLen) // Storage: Forum_1_1 ThreadById (r:1 w:1) - // Storage: Forum_1_1 CategoryById (r:1 w:0) + // Proof: Forum_1_1 ThreadById (max_values: None, max_size: Some(121), added: 2596, mode: MaxEncodedLen) + // Storage: Forum_1_1 CategoryById (r:6 w:0) + // Proof: Forum_1_1 CategoryById (max_values: None, max_size: Some(271), added: 2746, mode: MaxEncodedLen) // Storage: System Account (r:2 w:2) + // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) // Storage: Forum_1_1 NextPostId (r:1 w:1) + // Proof: Forum_1_1 NextPostId (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) // Storage: Forum_1_1 PostById (r:0 w:1) + // Proof: Forum_1_1 PostById (max_values: None, max_size: Some(149), added: 2624, mode: MaxEncodedLen) + /// The range of component `i` is `[1, 6]`. + /// The range of component `j` is `[0, 100]`. fn add_post(i: u32, j: u32, ) -> Weight { - (85_914_000 as Weight) - // Standard Error: 109_000 - .saturating_add((4_693_000 as Weight).saturating_mul(i as Weight)) - // Standard Error: 3_000 - .saturating_add((1_679_000 as Weight).saturating_mul(j as Weight)) - .saturating_add(T::DbWeight::get().reads(5 as Weight)) - .saturating_add(T::DbWeight::get().reads((1 as Weight).saturating_mul(i as Weight))) - .saturating_add(T::DbWeight::get().writes(5 as Weight)) + // Proof Size summary in bytes: + // Measured: `856 + i * (119 ±0)` + // Estimated: `15855 + i * (2746 ±0)` + // Minimum execution time: 106_827 nanoseconds. + Weight::from_parts(84_957_961, 0u64) + .saturating_add(Weight::from_parts(0, 15855)) + // Standard Error: 41_138 + .saturating_add(Weight::from_parts(4_102_728, 0u64).saturating_mul(i.into())) + // Standard Error: 2_277 + .saturating_add(Weight::from_parts(1_959_463, 0u64).saturating_mul(j.into())) + .saturating_add(T::DbWeight::get().reads(5_u64)) + .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(i.into()))) + .saturating_add(T::DbWeight::get().writes(5_u64)) + .saturating_add(Weight::from_parts(0, 2746).saturating_mul(i.into())) } // Storage: Membership MembershipById (r:1 w:0) + // Proof: Membership MembershipById (max_values: None, max_size: Some(125), added: 2600, mode: MaxEncodedLen) // Storage: Forum_1_1 ThreadById (r:1 w:0) + // Proof: Forum_1_1 ThreadById (max_values: None, max_size: Some(121), added: 2596, mode: MaxEncodedLen) // Storage: Forum_1_1 PostById (r:1 w:1) - // Storage: Forum_1_1 CategoryById (r:1 w:0) + // Proof: Forum_1_1 PostById (max_values: None, max_size: Some(149), added: 2624, mode: MaxEncodedLen) + // Storage: Forum_1_1 CategoryById (r:6 w:0) + // Proof: Forum_1_1 CategoryById (max_values: None, max_size: Some(271), added: 2746, mode: MaxEncodedLen) + /// The range of component `i` is `[1, 6]`. + /// The range of component `j` is `[0, 100]`. fn edit_post_text(i: u32, j: u32, ) -> Weight { - (42_885_000 as Weight) - // Standard Error: 150_000 - .saturating_add((4_682_000 as Weight).saturating_mul(i as Weight)) - // Standard Error: 4_000 - .saturating_add((1_674_000 as Weight).saturating_mul(j as Weight)) - .saturating_add(T::DbWeight::get().reads(3 as Weight)) - .saturating_add(T::DbWeight::get().reads((1 as Weight).saturating_mul(i as Weight))) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + // Proof Size summary in bytes: + // Measured: `723 + i * (119 ±0)` + // Estimated: `11780 + i * (2746 ±0)` + // Minimum execution time: 67_341 nanoseconds. + Weight::from_parts(43_890_664, 0u64) + .saturating_add(Weight::from_parts(0, 11780)) + // Standard Error: 28_226 + .saturating_add(Weight::from_parts(4_386_001, 0u64).saturating_mul(i.into())) + // Standard Error: 1_562 + .saturating_add(Weight::from_parts(1_938_387, 0u64).saturating_mul(j.into())) + .saturating_add(T::DbWeight::get().reads(3_u64)) + .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(i.into()))) + .saturating_add(T::DbWeight::get().writes(1_u64)) + .saturating_add(Weight::from_parts(0, 2746).saturating_mul(i.into())) } // Storage: Instance1WorkingGroup CurrentLead (r:1 w:0) + // Proof: Instance1WorkingGroup CurrentLead (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) // Storage: Instance1WorkingGroup WorkerById (r:1 w:0) - // Storage: Forum_1_1 CategoryById (r:1 w:0) + // Proof: Instance1WorkingGroup WorkerById (max_values: None, max_size: Some(175), added: 2650, mode: MaxEncodedLen) + // Storage: Forum_1_1 CategoryById (r:6 w:0) + // Proof: Forum_1_1 CategoryById (max_values: None, max_size: Some(271), added: 2746, mode: MaxEncodedLen) // Storage: Forum_1_1 ThreadById (r:1 w:1) + // Proof: Forum_1_1 ThreadById (max_values: None, max_size: Some(121), added: 2596, mode: MaxEncodedLen) // Storage: Forum_1_1 PostById (r:1 w:1) + // Proof: Forum_1_1 PostById (max_values: None, max_size: Some(149), added: 2624, mode: MaxEncodedLen) // Storage: System Account (r:1 w:1) + // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + /// The range of component `i` is `[1, 6]`. + /// The range of component `j` is `[0, 100]`. fn moderate_post_lead(i: u32, j: u32, ) -> Weight { - (72_664_000 as Weight) - // Standard Error: 63_000 - .saturating_add((6_328_000 as Weight).saturating_mul(i as Weight)) - // Standard Error: 1_000 - .saturating_add((727_000 as Weight).saturating_mul(j as Weight)) - .saturating_add(T::DbWeight::get().reads(5 as Weight)) - .saturating_add(T::DbWeight::get().reads((1 as Weight).saturating_mul(i as Weight))) - .saturating_add(T::DbWeight::get().writes(3 as Weight)) + // Proof Size summary in bytes: + // Measured: `910 + i * (119 ±0)` + // Estimated: `16916 + i * (2746 ±0)` + // Minimum execution time: 104_643 nanoseconds. + Weight::from_parts(76_357_270, 0u64) + .saturating_add(Weight::from_parts(0, 16916)) + // Standard Error: 30_787 + .saturating_add(Weight::from_parts(5_110_368, 0u64).saturating_mul(i.into())) + // Standard Error: 1_704 + .saturating_add(Weight::from_parts(1_049_180, 0u64).saturating_mul(j.into())) + .saturating_add(T::DbWeight::get().reads(5_u64)) + .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(i.into()))) + .saturating_add(T::DbWeight::get().writes(3_u64)) + .saturating_add(Weight::from_parts(0, 2746).saturating_mul(i.into())) } // Storage: Instance1WorkingGroup WorkerById (r:1 w:0) - // Storage: Forum_1_1 CategoryById (r:1 w:0) - // Storage: Forum_1_1 CategoryByModerator (r:1 w:0) + // Proof: Instance1WorkingGroup WorkerById (max_values: None, max_size: Some(175), added: 2650, mode: MaxEncodedLen) + // Storage: Forum_1_1 CategoryById (r:6 w:0) + // Proof: Forum_1_1 CategoryById (max_values: None, max_size: Some(271), added: 2746, mode: MaxEncodedLen) + // Storage: Forum_1_1 CategoryByModerator (r:6 w:0) + // Proof: Forum_1_1 CategoryByModerator (max_values: None, max_size: Some(48), added: 2523, mode: MaxEncodedLen) // Storage: Forum_1_1 ThreadById (r:1 w:1) + // Proof: Forum_1_1 ThreadById (max_values: None, max_size: Some(121), added: 2596, mode: MaxEncodedLen) // Storage: Forum_1_1 PostById (r:1 w:1) + // Proof: Forum_1_1 PostById (max_values: None, max_size: Some(149), added: 2624, mode: MaxEncodedLen) // Storage: System Account (r:1 w:1) + // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + /// The range of component `i` is `[1, 6]`. + /// The range of component `j` is `[0, 100]`. fn moderate_post_moderator(i: u32, j: u32, ) -> Weight { - (76_596_000 as Weight) - // Standard Error: 122_000 - .saturating_add((9_194_000 as Weight).saturating_mul(i as Weight)) - // Standard Error: 3_000 - .saturating_add((726_000 as Weight).saturating_mul(j as Weight)) - .saturating_add(T::DbWeight::get().reads(4 as Weight)) - .saturating_add(T::DbWeight::get().reads((2 as Weight).saturating_mul(i as Weight))) - .saturating_add(T::DbWeight::get().writes(3 as Weight)) + // Proof Size summary in bytes: + // Measured: `983 + i * (119 ±0)` + // Estimated: `16413 + i * (5269 ±0)` + // Minimum execution time: 116_047 nanoseconds. + Weight::from_parts(76_114_739, 0u64) + .saturating_add(Weight::from_parts(0, 16413)) + // Standard Error: 34_804 + .saturating_add(Weight::from_parts(7_002_385, 0u64).saturating_mul(i.into())) + // Standard Error: 1_926 + .saturating_add(Weight::from_parts(1_058_224, 0u64).saturating_mul(j.into())) + .saturating_add(T::DbWeight::get().reads(4_u64)) + .saturating_add(T::DbWeight::get().reads((2_u64).saturating_mul(i.into()))) + .saturating_add(T::DbWeight::get().writes(3_u64)) + .saturating_add(Weight::from_parts(0, 5269).saturating_mul(i.into())) } // Storage: Forum_1_1 ThreadById (r:1 w:1) + // Proof: Forum_1_1 ThreadById (max_values: None, max_size: Some(121), added: 2596, mode: MaxEncodedLen) // Storage: Forum_1_1 PostById (r:20 w:20) - // Storage: Forum_1_1 CategoryById (r:1 w:0) + // Proof: Forum_1_1 PostById (max_values: None, max_size: Some(149), added: 2624, mode: MaxEncodedLen) + // Storage: Forum_1_1 CategoryById (r:6 w:0) + // Proof: Forum_1_1 CategoryById (max_values: None, max_size: Some(271), added: 2746, mode: MaxEncodedLen) // Storage: Membership MembershipById (r:1 w:0) + // Proof: Membership MembershipById (max_values: None, max_size: Some(125), added: 2600, mode: MaxEncodedLen) // Storage: System Account (r:2 w:2) - fn delete_posts(i: u32, j: u32, k: u32, ) -> Weight { - (0 as Weight) - // Standard Error: 316_000 - .saturating_add((36_264_000 as Weight).saturating_mul(i as Weight)) - // Standard Error: 8_000 - .saturating_add((739_000 as Weight).saturating_mul(j as Weight)) - // Standard Error: 56_000 - .saturating_add((49_827_000 as Weight).saturating_mul(k as Weight)) - .saturating_add(T::DbWeight::get().reads(4 as Weight)) - .saturating_add(T::DbWeight::get().reads((1 as Weight).saturating_mul(i as Weight))) - .saturating_add(T::DbWeight::get().reads((1 as Weight).saturating_mul(k as Weight))) - .saturating_add(T::DbWeight::get().writes(3 as Weight)) - .saturating_add(T::DbWeight::get().writes((1 as Weight).saturating_mul(k as Weight))) + // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + /// The range of component `i` is `[1, 6]`. + /// The range of component `j` is `[0, 100]`. + /// The range of component `k` is `[1, 20]`. + fn delete_posts(i: u32, _j: u32, k: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `973 + i * (119 ±0) + k * (100 ±0)` + // Estimated: `15352 + i * (2746 ±0) + k * (2624 ±0)` + // Minimum execution time: 199_793 nanoseconds. + Weight::from_parts(204_348_000, 0u64) + .saturating_add(Weight::from_parts(0, 15352)) + // Standard Error: 443_347 + .saturating_add(Weight::from_parts(8_155_335, 0u64).saturating_mul(i.into())) + // Standard Error: 130_626 + .saturating_add(Weight::from_parts(37_699_438, 0u64).saturating_mul(k.into())) + .saturating_add(T::DbWeight::get().reads(4_u64)) + .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(i.into()))) + .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(k.into()))) + .saturating_add(T::DbWeight::get().writes(3_u64)) + .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(k.into()))) + .saturating_add(Weight::from_parts(0, 2746).saturating_mul(i.into())) + .saturating_add(Weight::from_parts(0, 2624).saturating_mul(k.into())) } // Storage: Instance1WorkingGroup CurrentLead (r:1 w:0) + // Proof: Instance1WorkingGroup CurrentLead (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) // Storage: Instance1WorkingGroup WorkerById (r:1 w:0) - // Storage: Forum_1_1 CategoryById (r:1 w:1) + // Proof: Instance1WorkingGroup WorkerById (max_values: None, max_size: Some(175), added: 2650, mode: MaxEncodedLen) + // Storage: Forum_1_1 CategoryById (r:6 w:1) + // Proof: Forum_1_1 CategoryById (max_values: None, max_size: Some(271), added: 2746, mode: MaxEncodedLen) // Storage: Forum_1_1 ThreadById (r:20 w:0) + // Proof: Forum_1_1 ThreadById (max_values: None, max_size: Some(121), added: 2596, mode: MaxEncodedLen) + /// The range of component `i` is `[1, 6]`. + /// The range of component `j` is `[0, 20]`. fn set_stickied_threads_lead(i: u32, j: u32, ) -> Weight { - (28_495_000 as Weight) - // Standard Error: 66_000 - .saturating_add((4_694_000 as Weight).saturating_mul(i as Weight)) - // Standard Error: 12_000 - .saturating_add((6_976_000 as Weight).saturating_mul(j as Weight)) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) - .saturating_add(T::DbWeight::get().reads((1 as Weight).saturating_mul(i as Weight))) - .saturating_add(T::DbWeight::get().reads((1 as Weight).saturating_mul(j as Weight))) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + // Proof Size summary in bytes: + // Measured: `552 + i * (119 ±0) + j * (71 ±0)` + // Estimated: `7113 + j * (2596 ±0) + i * (2746 ±0)` + // Minimum execution time: 55_734 nanoseconds. + Weight::from_parts(34_953_201, 0u64) + .saturating_add(Weight::from_parts(0, 7113)) + // Standard Error: 30_466 + .saturating_add(Weight::from_parts(4_094_107, 0u64).saturating_mul(i.into())) + // Standard Error: 8_232 + .saturating_add(Weight::from_parts(5_277_913, 0u64).saturating_mul(j.into())) + .saturating_add(T::DbWeight::get().reads(2_u64)) + .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(i.into()))) + .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(j.into()))) + .saturating_add(T::DbWeight::get().writes(1_u64)) + .saturating_add(Weight::from_parts(0, 2596).saturating_mul(j.into())) + .saturating_add(Weight::from_parts(0, 2746).saturating_mul(i.into())) } // Storage: Instance1WorkingGroup WorkerById (r:1 w:0) - // Storage: Forum_1_1 CategoryById (r:1 w:1) - // Storage: Forum_1_1 CategoryByModerator (r:1 w:0) + // Proof: Instance1WorkingGroup WorkerById (max_values: None, max_size: Some(175), added: 2650, mode: MaxEncodedLen) + // Storage: Forum_1_1 CategoryById (r:6 w:1) + // Proof: Forum_1_1 CategoryById (max_values: None, max_size: Some(271), added: 2746, mode: MaxEncodedLen) + // Storage: Forum_1_1 CategoryByModerator (r:6 w:0) + // Proof: Forum_1_1 CategoryByModerator (max_values: None, max_size: Some(48), added: 2523, mode: MaxEncodedLen) // Storage: Forum_1_1 ThreadById (r:20 w:0) + // Proof: Forum_1_1 ThreadById (max_values: None, max_size: Some(121), added: 2596, mode: MaxEncodedLen) + /// The range of component `i` is `[1, 6]`. + /// The range of component `j` is `[0, 20]`. fn set_stickied_threads_moderator(i: u32, j: u32, ) -> Weight { - (26_618_000 as Weight) - // Standard Error: 74_000 - .saturating_add((8_377_000 as Weight).saturating_mul(i as Weight)) - // Standard Error: 14_000 - .saturating_add((7_274_000 as Weight).saturating_mul(j as Weight)) - .saturating_add(T::DbWeight::get().reads(1 as Weight)) - .saturating_add(T::DbWeight::get().reads((2 as Weight).saturating_mul(i as Weight))) - .saturating_add(T::DbWeight::get().reads((1 as Weight).saturating_mul(j as Weight))) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + // Proof Size summary in bytes: + // Measured: `625 + i * (119 ±0) + j * (71 ±0)` + // Estimated: `6610 + j * (2596 ±0) + i * (5269 ±0)` + // Minimum execution time: 66_774 nanoseconds. + Weight::from_parts(31_061_455, 0u64) + .saturating_add(Weight::from_parts(0, 6610)) + // Standard Error: 38_063 + .saturating_add(Weight::from_parts(6_596_073, 0u64).saturating_mul(i.into())) + // Standard Error: 10_285 + .saturating_add(Weight::from_parts(5_393_637, 0u64).saturating_mul(j.into())) + .saturating_add(T::DbWeight::get().reads(1_u64)) + .saturating_add(T::DbWeight::get().reads((2_u64).saturating_mul(i.into()))) + .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(j.into()))) + .saturating_add(T::DbWeight::get().writes(1_u64)) + .saturating_add(Weight::from_parts(0, 2596).saturating_mul(j.into())) + .saturating_add(Weight::from_parts(0, 5269).saturating_mul(i.into())) } } // Default implementation for tests impl WeightInfo for () { fn create_category(i: u32, j: u32, k: u32, ) -> Weight { - 0 + Weight::from_parts(0, 0) } fn update_category_membership_of_moderator_new() -> Weight { - 0 + Weight::from_parts(0, 0) } fn update_category_membership_of_moderator_old() -> Weight { - 0 + Weight::from_parts(0, 0) } fn update_category_archival_status_lead(i: u32, ) -> Weight { - 0 + Weight::from_parts(0, 0) } fn update_category_archival_status_moderator(i: u32, ) -> Weight { - 0 + Weight::from_parts(0, 0) } fn update_category_title_lead(i: u32, j: u32, ) -> Weight { - 0 + Weight::from_parts(0, 0) } fn update_category_title_moderator(i: u32, j: u32, ) -> Weight { - 0 + Weight::from_parts(0, 0) } fn update_category_description_lead(i: u32, j: u32, ) -> Weight { - 0 + Weight::from_parts(0, 0) } fn update_category_description_moderator(i: u32, j: u32, ) -> Weight { - 0 + Weight::from_parts(0, 0) } fn delete_category_lead(i: u32, ) -> Weight { - 0 + Weight::from_parts(0, 0) } fn delete_category_moderator(i: u32, ) -> Weight { - 0 + Weight::from_parts(0, 0) } fn create_thread(i: u32, j: u32, k: u32, ) -> Weight { - 0 + Weight::from_parts(0, 0) } fn edit_thread_metadata(i: u32, j: u32, ) -> Weight { - 0 + Weight::from_parts(0, 0) } fn delete_thread(i: u32, ) -> Weight { - 0 + Weight::from_parts(0, 0) } fn move_thread_to_category_lead(i: u32, ) -> Weight { - 0 + Weight::from_parts(0, 0) } fn move_thread_to_category_moderator(i: u32, ) -> Weight { - 0 + Weight::from_parts(0, 0) } fn moderate_thread_lead(i: u32, k: u32, ) -> Weight { - 0 + Weight::from_parts(0, 0) } fn moderate_thread_moderator(i: u32, k: u32, ) -> Weight { - 0 + Weight::from_parts(0, 0) } fn add_post(i: u32, j: u32, ) -> Weight { - 0 + Weight::from_parts(0, 0) } fn edit_post_text(i: u32, j: u32, ) -> Weight { - 0 + Weight::from_parts(0, 0) } fn moderate_post_lead(i: u32, j: u32, ) -> Weight { - 0 + Weight::from_parts(0, 0) } fn moderate_post_moderator(i: u32, j: u32, ) -> Weight { - 0 + Weight::from_parts(0, 0) } - fn delete_posts(i: u32, j: u32, k: u32, ) -> Weight { - 0 + fn delete_posts(i: u32, _j: u32, k: u32, ) -> Weight { + Weight::from_parts(0, 0) } fn set_stickied_threads_lead(i: u32, j: u32, ) -> Weight { - 0 + Weight::from_parts(0, 0) } fn set_stickied_threads_moderator(i: u32, j: u32, ) -> Weight { - 0 + Weight::from_parts(0, 0) } } diff --git a/runtime-modules/membership/Cargo.toml b/runtime-modules/membership/Cargo.toml index 12fa05b0ed..03a21738b5 100644 --- a/runtime-modules/membership/Cargo.toml +++ b/runtime-modules/membership/Cargo.toml @@ -8,27 +8,27 @@ edition = '2018' serde = { version = "1.0.101", optional = true, features = ["derive"] } codec = { package = 'parity-scale-codec', version = '3.1.2', default-features = false, features = ['derive'] } scale-info = { version = "2.1.1", default-features = false, features = ["derive"] } -sp-std = { package = 'sp-std', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -frame-support = { package = 'frame-support', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -frame-system = { package = 'frame-system', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -sp-arithmetic = { package = 'sp-arithmetic', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -sp-runtime = { package = 'sp-runtime', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -pallet-timestamp = { package = 'pallet-timestamp', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -balances = { package = 'pallet-balances', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} +sp-std = { package = 'sp-std', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +frame-support = { package = 'frame-support', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +frame-system = { package = 'frame-system', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +sp-arithmetic = { package = 'sp-arithmetic', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +sp-runtime = { package = 'sp-runtime', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +pallet-timestamp = { package = 'pallet-timestamp', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +balances = { package = 'pallet-balances', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} common = { package = 'pallet-common', default-features = false, path = '../common'} staking-handler = { package = 'pallet-staking-handler', default-features = false, path = '../staking-handler'} # Benchmarking dependencies -frame-benchmarking = { package = 'frame-benchmarking', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522', optional = true} +frame-benchmarking = { package = 'frame-benchmarking', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9', optional = true} [dev-dependencies] -sp-io = { package = 'sp-io', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -sp-core = { package = 'sp-core', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} +sp-io = { package = 'sp-io', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +sp-core = { package = 'sp-core', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} # working-group = { package = 'pallet-working-group', default-features = false, path = '../working-group'} [features] default = ['std'] runtime-benchmarks = [ - 'frame-benchmarking', + 'frame-benchmarking/runtime-benchmarks', 'common/runtime-benchmarks', ] std = [ @@ -44,4 +44,6 @@ std = [ 'common/std', 'staking-handler/std', 'scale-info/std', -] \ No newline at end of file + 'frame-benchmarking?/std', +] +try-runtime = [ "frame-support/try-runtime"] \ No newline at end of file diff --git a/runtime-modules/membership/src/benchmarking.rs b/runtime-modules/membership/src/benchmarking.rs index 59d5f0b237..e50a41fd97 100644 --- a/runtime-modules/membership/src/benchmarking.rs +++ b/runtime-modules/membership/src/benchmarking.rs @@ -6,7 +6,7 @@ use crate::{ }; use balances::Pallet as Balances; use core::convert::TryInto; -use frame_benchmarking::{account, benchmarks}; +use frame_benchmarking::v1::{account, benchmarks}; use frame_support::storage::StorageMap; use frame_support::traits::Currency; use frame_system::Pallet as System; @@ -32,9 +32,9 @@ fn get_byte(num: u32, byte_number: u8) -> u8 { ((num & (0xff << (8 * byte_number))) >> (8 * byte_number)) as u8 } -fn assert_last_event(generic_event: ::Event) { +fn assert_last_event(generic_event: ::RuntimeEvent) { let events = System::::events(); - let system_event: ::Event = generic_event.into(); + let system_event: ::RuntimeEvent = generic_event.into(); // compare to the last event record let EventRecord { event, .. } = &events[events.len() - 1]; assert_eq!(event, &system_event); @@ -139,7 +139,7 @@ benchmarks! { invites, }; - assert_eq!(MemberIdByHandleHash::::get(&handle_hash), member_id); + assert_eq!(MemberIdByHandleHash::::get(handle_hash), member_id); assert_eq!(MembershipById::::get(member_id), Some(membership)); @@ -262,8 +262,8 @@ benchmarks! { let handle_updated_hash = T::Hashing::hash(&handle_updated); assert!(!MemberIdByHandleHash::::contains_key(handle_old_hash)); - assert!(MemberIdByHandleHash::::contains_key(&handle_updated_hash)); - assert_eq!(MemberIdByHandleHash::::get(&handle_updated_hash), member_id); + assert!(MemberIdByHandleHash::::contains_key(handle_updated_hash)); + assert_eq!(MemberIdByHandleHash::::get(handle_updated_hash), member_id); assert_last_event::(RawEvent::MemberProfileUpdated( member_id, @@ -501,7 +501,7 @@ benchmarks! { assert_eq!(T::WorkingGroup::get_budget(), new_wg_budget); - assert_eq!(MemberIdByHandleHash::::get(&handle_hash), invited_member_id); + assert_eq!(MemberIdByHandleHash::::get(handle_hash), invited_member_id); assert_eq!(MembershipById::::get(invited_member_id), Some(invited_membership)); @@ -555,7 +555,7 @@ benchmarks! { invites: 0, }; - assert_eq!(MemberIdByHandleHash::::get(&handle_hash), member_id); + assert_eq!(MemberIdByHandleHash::::get(handle_hash), member_id); assert_eq!(MembershipById::::get(member_id), Some(gifted_membership)); @@ -829,7 +829,7 @@ benchmarks! { invites, }; - assert_eq!(MemberIdByHandleHash::::get(&handle_hash), member_id); + assert_eq!(MemberIdByHandleHash::::get(handle_hash), member_id); assert_eq!(MembershipById::::get(member_id), Some(membership)); diff --git a/runtime-modules/membership/src/lib.rs b/runtime-modules/membership/src/lib.rs index 8d65a8512e..e5ce2cc971 100644 --- a/runtime-modules/membership/src/lib.rs +++ b/runtime-modules/membership/src/lib.rs @@ -83,7 +83,7 @@ use sp_runtime::{ SaturatedConversion, }; use sp_std::convert::TryInto; -use sp_std::vec::Vec; +use sp_std::{vec, vec::Vec}; use common::costs::{burn_from_usable, has_sufficient_balance_for_payment}; use common::membership::{MemberOriginValidator, MembershipInfoProvider}; @@ -106,7 +106,7 @@ pub trait Config: + common::membership::MembershipTypes { /// Membership module event type. - type Event: From> + Into<::Event>; + type RuntimeEvent: From> + Into<::RuntimeEvent>; /// Defines the default membership fee. type DefaultMembershipPrice: Get>; @@ -430,7 +430,7 @@ decl_event! { } decl_module! { - pub struct Module for enum Call where origin: T::Origin { + pub struct Module for enum Call where origin: T::RuntimeOrigin { /// Predefined errors type Error = Error; @@ -567,11 +567,11 @@ decl_module! { if let Some(new_handle_hash) = new_handle_hash { // remove old handle hash - >::remove(&membership.handle_hash); + >::remove(membership.handle_hash); >::insert(new_handle_hash, member_id); - >::insert(&member_id, Membership:: { + >::insert(member_id, Membership:: { handle_hash: new_handle_hash, ..membership }); @@ -649,7 +649,7 @@ decl_module! { // == MUTATION SAFE == // - >::insert(&target_member_id, Membership:: { + >::insert(target_member_id, Membership:: { verified: is_verified, ..membership }); @@ -717,13 +717,13 @@ decl_module! { // // Decrease source member invite number. - >::insert(&source_member_id, Membership:: { + >::insert(source_member_id, Membership:: { invites: source_membership.invites.saturating_sub(number_of_invites), ..source_membership }); // Increase target member invite number. - >::insert(&target_member_id, Membership:: { + >::insert(target_member_id, Membership:: { invites: target_membership.invites.saturating_add(number_of_invites), ..target_membership }); @@ -794,7 +794,7 @@ decl_module! { ); // Save the updated profile. - >::insert(¶ms.inviting_member_id, Membership:: { + >::insert(params.inviting_member_id, Membership:: { invites: membership.invites.saturating_sub(1), ..membership }); @@ -1375,7 +1375,7 @@ impl Module { // Ensure origin corresponds to the controller account of the member. fn ensure_member_controller_account_origin_signed( - origin: T::Origin, + origin: T::RuntimeOrigin, member_id: &T::MemberId, ) -> Result, Error> { // Ensure transaction is signed. @@ -1453,9 +1453,9 @@ impl common::StakingAccountValidator for Module { } } -impl MemberOriginValidator for Module { +impl MemberOriginValidator for Module { fn ensure_member_controller_account_origin( - origin: T::Origin, + origin: T::RuntimeOrigin, actor_id: T::MemberId, ) -> Result { let signer_account_id = ensure_signed(origin).map_err(|_| Error::::UnsignedOrigin)?; @@ -1479,3 +1479,10 @@ impl MembershipInfoProvider for Module { Ok(membership.controller_account) } } + +impl frame_support::traits::Hooks for Pallet { + #[cfg(feature = "try-runtime")] + fn try_state(_: T::BlockNumber) -> Result<(), &'static str> { + Ok(()) + } +} diff --git a/runtime-modules/membership/src/tests/fixtures.rs b/runtime-modules/membership/src/tests/fixtures.rs index 536bda899a..ce35085652 100644 --- a/runtime-modules/membership/src/tests/fixtures.rs +++ b/runtime-modules/membership/src/tests/fixtures.rs @@ -28,7 +28,7 @@ pub fn set_invitation_lock( amount: BalanceOf, ) { ::InvitedMemberStakingHandler::lock_with_reasons( - &who, + who, amount, WithdrawReasons::except(WithdrawReasons::TRANSACTION_PAYMENT), ); @@ -37,12 +37,12 @@ pub fn set_invitation_lock( pub struct EventFixture; impl EventFixture { pub fn assert_last_crate_event(expected_raw_event: crate::Event) { - let converted_event = Event::Membership(expected_raw_event); + let converted_event = RuntimeEvent::Membership(expected_raw_event); Self::assert_last_global_event(converted_event) } - pub fn assert_last_global_event(expected_event: Event) { + pub fn assert_last_global_event(expected_event: RuntimeEvent) { let expected_event = EventRecord { phase: Phase::Initialization, event: expected_event, @@ -142,7 +142,7 @@ pub fn get_alice_membership_parameters() -> BuyMembershipParameters { pub fn buy_default_membership_as_alice() -> DispatchResult { let params = get_alice_membership_parameters(); - Membership::buy_membership(Origin::signed(ALICE_ACCOUNT_ID), params) + Membership::buy_membership(RuntimeOrigin::signed(ALICE_ACCOUNT_ID), params) } pub fn set_alice_free_balance(balance: u64) { @@ -213,7 +213,7 @@ pub fn get_bob_gift_membership_parameters_single_account() -> GiftMembershipPara } pub fn gift_bob_membership_as_alice(params: GiftMembershipParameters) -> DispatchResult { - Membership::gift_membership(Origin::signed(ALICE_ACCOUNT_ID), params) + Membership::gift_membership(RuntimeOrigin::signed(ALICE_ACCOUNT_ID), params) } pub struct UpdateMembershipVerificationFixture { @@ -683,7 +683,7 @@ impl AddStakingAccountFixture { if actual_result.is_ok() { assert!(>::contains_key( - &self.staking_account_id, + self.staking_account_id, )); } } @@ -736,7 +736,7 @@ impl RemoveStakingAccountFixture { ); assert!(!>::contains_key( - &self.staking_account_id, + self.staking_account_id, )); } } @@ -777,7 +777,7 @@ impl ConfirmStakingAccountFixture { assert_eq!(expected_result, actual_result); if actual_result.is_ok() { - assert!(>::get(&ALICE_ACCOUNT_ID,).confirmed); + assert!(>::get(ALICE_ACCOUNT_ID,).confirmed); } } @@ -845,14 +845,14 @@ impl CreateMemberFixture { let handle_hash = ::Hashing::hash(&self.params.handle); let profile = get_membership_by_id(expected_member_id); - assert_eq!(Membership::handles(handle_hash.clone()), expected_member_id); + assert_eq!(Membership::handles(handle_hash), expected_member_id); assert_eq!(Membership::members_created(), expected_member_id + 1); assert_eq!( profile, MembershipObject { handle_hash, - root_account: self.params.root_account.clone(), - controller_account: self.params.controller_account.clone(), + root_account: self.params.root_account, + controller_account: self.params.controller_account, verified: self.params.is_founding_member, invites: Membership::initial_invitation_count() } diff --git a/runtime-modules/membership/src/tests/mock.rs b/runtime-modules/membership/src/tests/mock.rs index d18ce44ea5..523ab90a43 100644 --- a/runtime-modules/membership/src/tests/mock.rs +++ b/runtime-modules/membership/src/tests/mock.rs @@ -48,8 +48,8 @@ impl frame_system::Config for Test { type BlockWeights = (); type BlockLength = (); type DbWeight = (); - type Origin = Origin; - type Call = Call; + type RuntimeOrigin = RuntimeOrigin; + type RuntimeCall = RuntimeCall; type Index = u64; type BlockNumber = u64; type Hash = H256; @@ -57,7 +57,7 @@ impl frame_system::Config for Test { type AccountId = u64; type Lookup = IdentityLookup; type Header = Header; - type Event = Event; + type RuntimeEvent = RuntimeEvent; type BlockHashCount = ConstU64<250>; type Version = (); type PalletInfo = PalletInfo; @@ -88,7 +88,7 @@ parameter_types! { impl balances::Config for Test { type Balance = u64; type DustRemoval = (); - type Event = Event; + type RuntimeEvent = RuntimeEvent; type ExistentialDeposit = ExistentialDeposit; type AccountStore = System; type MaxLocks = (); @@ -123,9 +123,9 @@ impl LockComparator for Test { } } -impl common::membership::MemberOriginValidator for () { +impl common::membership::MemberOriginValidator for () { fn ensure_member_controller_account_origin( - origin: Origin, + origin: RuntimeOrigin, _: u64, ) -> Result { let account_id = frame_system::ensure_signed(origin)?; @@ -139,7 +139,7 @@ impl common::membership::MemberOriginValidator for () { } impl Config for Test { - type Event = Event; + type RuntimeEvent = RuntimeEvent; type DefaultMembershipPrice = DefaultMembershipPrice; type ReferralCutMaximumPercent = ReferralCutMaximumPercent; type WorkingGroup = Wg; @@ -187,10 +187,10 @@ impl common::working_group::WorkingGroupBudgetHandler for Wg { impl common::working_group::WorkingGroupAuthenticator for Wg { fn ensure_worker_origin( - origin: ::Origin, + origin: ::RuntimeOrigin, worker_id: &::ActorId, ) -> DispatchResult { - let raw_origin: Result, ::Origin> = + let raw_origin: Result, ::RuntimeOrigin> = origin.into(); if let RawOrigin::Signed(_) = raw_origin.unwrap() { @@ -204,7 +204,9 @@ impl common::working_group::WorkingGroupAuthenticator for Wg { } } - fn ensure_leader_origin(_origin: ::Origin) -> DispatchResult { + fn ensure_leader_origin( + _origin: ::RuntimeOrigin, + ) -> DispatchResult { unimplemented!() } @@ -263,18 +265,11 @@ impl } } +#[derive(Default)] pub struct TestExternalitiesBuilder { system_config: Option, } -impl Default for TestExternalitiesBuilder { - fn default() -> Self { - Self { - system_config: None, - } - } -} - impl TestExternalitiesBuilder { pub fn build(self) -> sp_io::TestExternalities { // Add system diff --git a/runtime-modules/membership/src/tests/mod.rs b/runtime-modules/membership/src/tests/mod.rs index e37d63d54b..e32f705c90 100644 --- a/runtime-modules/membership/src/tests/mod.rs +++ b/runtime-modules/membership/src/tests/mod.rs @@ -157,8 +157,8 @@ fn gift_membership_succeeds_with_same_root_and_controller() { run_to_block(starting_block); let params = get_bob_gift_membership_parameters_single_account(); - let credit_root_account = params.clone().credit_root_account; - let credit_controller_account = params.clone().credit_controller_account; + let credit_root_account = params.credit_root_account; + let credit_controller_account = params.credit_controller_account; assert_eq!(params.root_account, params.controller_account); @@ -187,12 +187,10 @@ fn gift_membership_succeeds_with_same_root_and_controller() { // usable-balance let locked_balance = params - .clone() .apply_controller_account_invitation_lock .unwrap_or_else(Zero::zero) .saturating_add( params - .clone() .apply_root_account_invitation_lock .unwrap_or_else(Zero::zero), ); @@ -302,7 +300,7 @@ fn update_profile_succeeds() { assert_ok!(buy_default_membership_as_alice()); let info = get_bob_info(); assert_ok!(Membership::update_profile( - Origin::signed(ALICE_ACCOUNT_ID), + RuntimeOrigin::signed(ALICE_ACCOUNT_ID), next_member_id, info.handle.clone(), Some(info.metadata.clone()), @@ -334,7 +332,7 @@ fn update_profile_has_no_effect_on_empty_parameters() { assert_ok!(buy_default_membership_as_alice()); assert_ok!(Membership::update_profile( - Origin::signed(ALICE_ACCOUNT_ID), + RuntimeOrigin::signed(ALICE_ACCOUNT_ID), next_member_id, None, None, @@ -361,7 +359,7 @@ fn update_profile_accounts_succeeds() { const ALICE_NEW_ACCOUNT_ID: u64 = 2; assert_ok!(Membership::update_accounts( - Origin::signed(ALICE_ACCOUNT_ID), + RuntimeOrigin::signed(ALICE_ACCOUNT_ID), ALICE_MEMBER_ID, Some(ALICE_NEW_ACCOUNT_ID), Some(ALICE_NEW_ACCOUNT_ID), @@ -386,7 +384,7 @@ fn update_accounts_has_effect_on_empty_account_parameters() { set_alice_as_initial_member(); assert_ok!(Membership::update_accounts( - Origin::signed(ALICE_ACCOUNT_ID), + RuntimeOrigin::signed(ALICE_ACCOUNT_ID), ALICE_MEMBER_ID, None, None, diff --git a/runtime-modules/membership/src/weights.rs b/runtime-modules/membership/src/weights.rs index 6078964ffd..074c408424 100644 --- a/runtime-modules/membership/src/weights.rs +++ b/runtime-modules/membership/src/weights.rs @@ -18,17 +18,16 @@ //! Autogenerated weights for membership //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-10-28, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("dev"), DB CACHE: 1024 +//! DATE: 2023-11-07, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("prod-test"), DB CACHE: 1024 // Executed Command: // ./scripts/../target/release/joystream-node // benchmark // pallet -// --base-path=/mnt/disks/local-ssd/ // --pallet=membership // --extrinsic=* -// --chain=dev +// --chain=prod-test // --steps=50 // --repeat=20 // --execution=wasm @@ -73,258 +72,438 @@ pub trait WeightInfo { pub struct SubstrateWeight(PhantomData); impl WeightInfo for SubstrateWeight { // Storage: Membership MembershipPrice (r:1 w:0) + // Proof: Membership MembershipPrice (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) // Storage: System Account (r:1 w:1) + // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) // Storage: Membership MemberIdByHandleHash (r:1 w:1) + // Proof: Membership MemberIdByHandleHash (max_values: None, max_size: Some(56), added: 2531, mode: MaxEncodedLen) // Storage: Membership InitialInvitationCount (r:1 w:0) + // Proof: Membership InitialInvitationCount (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) // Storage: Membership NextMemberId (r:1 w:1) + // Proof: Membership NextMemberId (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) // Storage: Membership MembershipById (r:0 w:1) + // Proof: Membership MembershipById (max_values: None, max_size: Some(125), added: 2600, mode: MaxEncodedLen) + /// The range of component `i` is `[0, 100]`. + /// The range of component `j` is `[0, 100]`. fn buy_membership_without_referrer(i: u32, j: u32, ) -> Weight { - (142_226_000 as Weight) - // Standard Error: 9_000 - .saturating_add((1_724_000 as Weight).saturating_mul(i as Weight)) - // Standard Error: 9_000 - .saturating_add((397_000 as Weight).saturating_mul(j as Weight)) - .saturating_add(T::DbWeight::get().reads(5 as Weight)) - .saturating_add(T::DbWeight::get().writes(4 as Weight)) + // Proof Size summary in bytes: + // Measured: `180` + // Estimated: `11597` + // Minimum execution time: 124_066 nanoseconds. + Weight::from_parts(49_859_298, 0u64) + .saturating_add(Weight::from_parts(0, 11597)) + // Standard Error: 9_133 + .saturating_add(Weight::from_parts(1_621_936, 0u64).saturating_mul(i.into())) + // Standard Error: 9_133 + .saturating_add(Weight::from_parts(820_862, 0u64).saturating_mul(j.into())) + .saturating_add(T::DbWeight::get().reads(5_u64)) + .saturating_add(T::DbWeight::get().writes(4_u64)) } // Storage: Membership MembershipPrice (r:1 w:0) + // Proof: Membership MembershipPrice (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) // Storage: System Account (r:1 w:1) + // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) // Storage: Membership MemberIdByHandleHash (r:1 w:1) + // Proof: Membership MemberIdByHandleHash (max_values: None, max_size: Some(56), added: 2531, mode: MaxEncodedLen) // Storage: Membership MembershipById (r:1 w:1) + // Proof: Membership MembershipById (max_values: None, max_size: Some(125), added: 2600, mode: MaxEncodedLen) // Storage: Membership InitialInvitationCount (r:1 w:0) + // Proof: Membership InitialInvitationCount (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) // Storage: Membership NextMemberId (r:1 w:1) + // Proof: Membership NextMemberId (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) // Storage: Membership ReferralCut (r:1 w:0) + // Proof: Membership ReferralCut (max_values: Some(1), max_size: Some(1), added: 496, mode: MaxEncodedLen) + /// The range of component `i` is `[0, 100]`. + /// The range of component `j` is `[0, 100]`. fn buy_membership_with_referrer(i: u32, j: u32, ) -> Weight { - (160_318_000 as Weight) - // Standard Error: 10_000 - .saturating_add((1_563_000 as Weight).saturating_mul(i as Weight)) - // Standard Error: 10_000 - .saturating_add((784_000 as Weight).saturating_mul(j as Weight)) - .saturating_add(T::DbWeight::get().reads(7 as Weight)) - .saturating_add(T::DbWeight::get().writes(4 as Weight)) + // Proof Size summary in bytes: + // Measured: `459` + // Estimated: `16673` + // Minimum execution time: 157_415 nanoseconds. + Weight::from_parts(67_131_450, 0u64) + .saturating_add(Weight::from_parts(0, 16673)) + // Standard Error: 7_744 + .saturating_add(Weight::from_parts(1_630_128, 0u64).saturating_mul(i.into())) + // Standard Error: 7_744 + .saturating_add(Weight::from_parts(1_085_601, 0u64).saturating_mul(j.into())) + .saturating_add(T::DbWeight::get().reads(7_u64)) + .saturating_add(T::DbWeight::get().writes(4_u64)) } // Storage: Membership MembershipById (r:1 w:1) + // Proof: Membership MembershipById (max_values: None, max_size: Some(125), added: 2600, mode: MaxEncodedLen) // Storage: Membership MemberIdByHandleHash (r:1 w:2) + // Proof: Membership MemberIdByHandleHash (max_values: None, max_size: Some(56), added: 2531, mode: MaxEncodedLen) + /// The range of component `i` is `[0, 100]`. + /// The range of component `j` is `[0, 100]`. fn update_profile(i: u32, j: u32, ) -> Weight { - (71_164_000 as Weight) - // Standard Error: 9_000 - .saturating_add((1_690_000 as Weight).saturating_mul(i as Weight)) - // Standard Error: 9_000 - .saturating_add((683_000 as Weight).saturating_mul(j as Weight)) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) - .saturating_add(T::DbWeight::get().writes(3 as Weight)) + // Proof Size summary in bytes: + // Measured: `265` + // Estimated: `7111` + // Minimum execution time: 96_191 nanoseconds. + Weight::from_parts(30_922_914, 0u64) + .saturating_add(Weight::from_parts(0, 7111)) + // Standard Error: 7_258 + .saturating_add(Weight::from_parts(1_737_636, 0u64).saturating_mul(i.into())) + // Standard Error: 7_258 + .saturating_add(Weight::from_parts(835_360, 0u64).saturating_mul(j.into())) + .saturating_add(T::DbWeight::get().reads(2_u64)) + .saturating_add(T::DbWeight::get().writes(3_u64)) } fn update_accounts_none() -> Weight { - (1_640_000 as Weight) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 3_952 nanoseconds. + Weight::from_parts(4_270_000, 0u64) + .saturating_add(Weight::from_parts(0, 0)) } // Storage: Membership MembershipById (r:1 w:1) + // Proof: Membership MembershipById (max_values: None, max_size: Some(125), added: 2600, mode: MaxEncodedLen) fn update_accounts_root() -> Weight { - (42_330_000 as Weight) - .saturating_add(T::DbWeight::get().reads(1 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + // Proof Size summary in bytes: + // Measured: `220` + // Estimated: `3590` + // Minimum execution time: 18_599 nanoseconds. + Weight::from_parts(19_508_000, 0u64) + .saturating_add(Weight::from_parts(0, 3590)) + .saturating_add(T::DbWeight::get().reads(1_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) } // Storage: Membership MembershipById (r:1 w:1) + // Proof: Membership MembershipById (max_values: None, max_size: Some(125), added: 2600, mode: MaxEncodedLen) fn update_accounts_controller() -> Weight { - (42_100_000 as Weight) - .saturating_add(T::DbWeight::get().reads(1 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + // Proof Size summary in bytes: + // Measured: `220` + // Estimated: `3590` + // Minimum execution time: 18_492 nanoseconds. + Weight::from_parts(19_360_000, 0u64) + .saturating_add(Weight::from_parts(0, 3590)) + .saturating_add(T::DbWeight::get().reads(1_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) } // Storage: Membership MembershipById (r:1 w:1) + // Proof: Membership MembershipById (max_values: None, max_size: Some(125), added: 2600, mode: MaxEncodedLen) fn update_accounts_both() -> Weight { - (41_829_000 as Weight) - .saturating_add(T::DbWeight::get().reads(1 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + // Proof Size summary in bytes: + // Measured: `220` + // Estimated: `3590` + // Minimum execution time: 18_329 nanoseconds. + Weight::from_parts(19_186_000, 0u64) + .saturating_add(Weight::from_parts(0, 3590)) + .saturating_add(T::DbWeight::get().reads(1_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) } // Storage: Membership ReferralCut (r:0 w:1) + // Proof: Membership ReferralCut (max_values: Some(1), max_size: Some(1), added: 496, mode: MaxEncodedLen) fn set_referral_cut() -> Weight { - (28_990_000 as Weight) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 9_762 nanoseconds. + Weight::from_parts(10_034_000, 0u64) + .saturating_add(Weight::from_parts(0, 0)) + .saturating_add(T::DbWeight::get().writes(1_u64)) } // Storage: Membership MembershipById (r:2 w:2) + // Proof: Membership MembershipById (max_values: None, max_size: Some(125), added: 2600, mode: MaxEncodedLen) fn transfer_invites() -> Weight { - (59_190_000 as Weight) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) - .saturating_add(T::DbWeight::get().writes(2 as Weight)) + // Proof Size summary in bytes: + // Measured: `356` + // Estimated: `6190` + // Minimum execution time: 25_625 nanoseconds. + Weight::from_parts(26_264_000, 0u64) + .saturating_add(Weight::from_parts(0, 6190)) + .saturating_add(T::DbWeight::get().reads(2_u64)) + .saturating_add(T::DbWeight::get().writes(2_u64)) } // Storage: Membership MembershipById (r:1 w:2) + // Proof: Membership MembershipById (max_values: None, max_size: Some(125), added: 2600, mode: MaxEncodedLen) // Storage: Membership MemberIdByHandleHash (r:1 w:1) + // Proof: Membership MemberIdByHandleHash (max_values: None, max_size: Some(56), added: 2531, mode: MaxEncodedLen) // Storage: Instance6WorkingGroup Budget (r:1 w:1) + // Proof: Instance6WorkingGroup Budget (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) // Storage: Membership InitialInvitationBalance (r:1 w:0) + // Proof: Membership InitialInvitationBalance (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) // Storage: Balances Locks (r:1 w:1) + // Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) // Storage: Membership NextMemberId (r:1 w:1) + // Proof: Membership NextMemberId (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) // Storage: System Account (r:1 w:1) + // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + /// The range of component `i` is `[1, 100]`. + /// The range of component `j` is `[0, 100]`. fn invite_member(i: u32, j: u32, ) -> Weight { - (151_032_000 as Weight) - // Standard Error: 7_000 - .saturating_add((1_599_000 as Weight).saturating_mul(i as Weight)) - // Standard Error: 8_000 - .saturating_add((743_000 as Weight).saturating_mul(j as Weight)) - .saturating_add(T::DbWeight::get().reads(7 as Weight)) - .saturating_add(T::DbWeight::get().writes(7 as Weight)) + // Proof Size summary in bytes: + // Measured: `518` + // Estimated: `19963` + // Minimum execution time: 143_149 nanoseconds. + Weight::from_parts(71_819_302, 0u64) + .saturating_add(Weight::from_parts(0, 19963)) + // Standard Error: 7_766 + .saturating_add(Weight::from_parts(1_606_300, 0u64).saturating_mul(i.into())) + // Standard Error: 7_674 + .saturating_add(Weight::from_parts(798_967, 0u64).saturating_mul(j.into())) + .saturating_add(T::DbWeight::get().reads(7_u64)) + .saturating_add(T::DbWeight::get().writes(7_u64)) } // Storage: Membership MemberIdByHandleHash (r:1 w:1) + // Proof: Membership MemberIdByHandleHash (max_values: None, max_size: Some(56), added: 2531, mode: MaxEncodedLen) // Storage: Membership MembershipPrice (r:1 w:0) + // Proof: Membership MembershipPrice (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) // Storage: System Account (r:3 w:3) + // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) // Storage: Balances Locks (r:2 w:2) + // Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) // Storage: Membership NextMemberId (r:1 w:1) + // Proof: Membership NextMemberId (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) // Storage: Membership MembershipById (r:0 w:1) + // Proof: Membership MembershipById (max_values: None, max_size: Some(125), added: 2600, mode: MaxEncodedLen) + /// The range of component `i` is `[1, 100]`. + /// The range of component `j` is `[0, 100]`. fn gift_membership(i: u32, j: u32, ) -> Weight { - (310_496_000 as Weight) - // Standard Error: 7_000 - .saturating_add((1_590_000 as Weight).saturating_mul(i as Weight)) - // Standard Error: 8_000 - .saturating_add((743_000 as Weight).saturating_mul(j as Weight)) - .saturating_add(T::DbWeight::get().reads(8 as Weight)) - .saturating_add(T::DbWeight::get().writes(8 as Weight)) + // Proof Size summary in bytes: + // Measured: `260` + // Estimated: `23852` + // Minimum execution time: 203_829 nanoseconds. + Weight::from_parts(130_217_562, 0u64) + .saturating_add(Weight::from_parts(0, 23852)) + // Standard Error: 9_437 + .saturating_add(Weight::from_parts(1_629_554, 0u64).saturating_mul(i.into())) + // Standard Error: 9_325 + .saturating_add(Weight::from_parts(833_591, 0u64).saturating_mul(j.into())) + .saturating_add(T::DbWeight::get().reads(8_u64)) + .saturating_add(T::DbWeight::get().writes(8_u64)) } // Storage: Membership MembershipPrice (r:0 w:1) + // Proof: Membership MembershipPrice (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) fn set_membership_price() -> Weight { - (29_270_000 as Weight) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 9_982 nanoseconds. + Weight::from_parts(10_394_000, 0u64) + .saturating_add(Weight::from_parts(0, 0)) + .saturating_add(T::DbWeight::get().writes(1_u64)) } // Storage: Instance6WorkingGroup WorkerById (r:1 w:0) + // Proof: Instance6WorkingGroup WorkerById (max_values: None, max_size: Some(175), added: 2650, mode: MaxEncodedLen) // Storage: Membership MembershipById (r:1 w:1) + // Proof: Membership MembershipById (max_values: None, max_size: Some(125), added: 2600, mode: MaxEncodedLen) fn update_profile_verification() -> Weight { - (56_340_000 as Weight) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + // Proof Size summary in bytes: + // Measured: `601` + // Estimated: `7230` + // Minimum execution time: 25_463 nanoseconds. + Weight::from_parts(26_338_000, 0u64) + .saturating_add(Weight::from_parts(0, 7230)) + .saturating_add(T::DbWeight::get().reads(2_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) } // Storage: Instance6WorkingGroup CurrentLead (r:1 w:0) + // Proof: Instance6WorkingGroup CurrentLead (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) // Storage: Instance6WorkingGroup WorkerById (r:1 w:0) + // Proof: Instance6WorkingGroup WorkerById (max_values: None, max_size: Some(175), added: 2650, mode: MaxEncodedLen) // Storage: Membership MembershipById (r:1 w:1) + // Proof: Membership MembershipById (max_values: None, max_size: Some(125), added: 2600, mode: MaxEncodedLen) fn set_leader_invitation_quota() -> Weight { - (60_390_000 as Weight) - .saturating_add(T::DbWeight::get().reads(3 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + // Proof Size summary in bytes: + // Measured: `601` + // Estimated: `8723` + // Minimum execution time: 26_333 nanoseconds. + Weight::from_parts(27_219_000, 0u64) + .saturating_add(Weight::from_parts(0, 8723)) + .saturating_add(T::DbWeight::get().reads(3_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) } // Storage: Membership InitialInvitationBalance (r:0 w:1) + // Proof: Membership InitialInvitationBalance (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) fn set_initial_invitation_balance() -> Weight { - (29_310_000 as Weight) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 10_244 nanoseconds. + Weight::from_parts(10_531_000, 0u64) + .saturating_add(Weight::from_parts(0, 0)) + .saturating_add(T::DbWeight::get().writes(1_u64)) } // Storage: Membership InitialInvitationCount (r:0 w:1) + // Proof: Membership InitialInvitationCount (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) fn set_initial_invitation_count() -> Weight { - (28_950_000 as Weight) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 9_851 nanoseconds. + Weight::from_parts(10_057_000, 0u64) + .saturating_add(Weight::from_parts(0, 0)) + .saturating_add(T::DbWeight::get().writes(1_u64)) } // Storage: Membership StakingAccountIdMemberStatus (r:1 w:1) + // Proof: Membership StakingAccountIdMemberStatus (max_values: None, max_size: Some(57), added: 2532, mode: MaxEncodedLen) // Storage: Membership MembershipById (r:1 w:0) + // Proof: Membership MembershipById (max_values: None, max_size: Some(125), added: 2600, mode: MaxEncodedLen) // Storage: Balances Locks (r:1 w:1) + // Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) // Storage: System Account (r:1 w:1) + // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) fn add_staking_account_candidate() -> Weight { - (95_410_000 as Weight) - .saturating_add(T::DbWeight::get().reads(4 as Weight)) - .saturating_add(T::DbWeight::get().writes(3 as Weight)) + // Proof Size summary in bytes: + // Measured: `456` + // Estimated: `15469` + // Minimum execution time: 40_847 nanoseconds. + Weight::from_parts(41_939_000, 0u64) + .saturating_add(Weight::from_parts(0, 15469)) + .saturating_add(T::DbWeight::get().reads(4_u64)) + .saturating_add(T::DbWeight::get().writes(3_u64)) } // Storage: Membership MembershipById (r:1 w:0) + // Proof: Membership MembershipById (max_values: None, max_size: Some(125), added: 2600, mode: MaxEncodedLen) // Storage: Membership StakingAccountIdMemberStatus (r:1 w:1) + // Proof: Membership StakingAccountIdMemberStatus (max_values: None, max_size: Some(57), added: 2532, mode: MaxEncodedLen) fn confirm_staking_account() -> Weight { - (63_590_000 as Weight) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + // Proof Size summary in bytes: + // Measured: `299` + // Estimated: `7112` + // Minimum execution time: 27_728 nanoseconds. + Weight::from_parts(28_670_000, 0u64) + .saturating_add(Weight::from_parts(0, 7112)) + .saturating_add(T::DbWeight::get().reads(2_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) } // Storage: Membership MembershipById (r:1 w:0) + // Proof: Membership MembershipById (max_values: None, max_size: Some(125), added: 2600, mode: MaxEncodedLen) // Storage: Membership StakingAccountIdMemberStatus (r:1 w:1) + // Proof: Membership StakingAccountIdMemberStatus (max_values: None, max_size: Some(57), added: 2532, mode: MaxEncodedLen) // Storage: Balances Locks (r:1 w:1) + // Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) // Storage: System Account (r:1 w:1) + // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) fn remove_staking_account() -> Weight { - (93_130_000 as Weight) - .saturating_add(T::DbWeight::get().reads(4 as Weight)) - .saturating_add(T::DbWeight::get().writes(3 as Weight)) + // Proof Size summary in bytes: + // Measured: `573` + // Estimated: `15469` + // Minimum execution time: 39_805 nanoseconds. + Weight::from_parts(41_089_000, 0u64) + .saturating_add(Weight::from_parts(0, 15469)) + .saturating_add(T::DbWeight::get().reads(4_u64)) + .saturating_add(T::DbWeight::get().writes(3_u64)) } // Storage: Membership MembershipById (r:1 w:0) + // Proof: Membership MembershipById (max_values: None, max_size: Some(125), added: 2600, mode: MaxEncodedLen) fn member_remark_without_payment() -> Weight { - (22_917_000 as Weight) - .saturating_add(T::DbWeight::get().reads(1 as Weight)) + // Proof Size summary in bytes: + // Measured: `220` + // Estimated: `3590` + // Minimum execution time: 16_199 nanoseconds. + Weight::from_parts(16_750_000, 0u64) + .saturating_add(Weight::from_parts(0, 3590)) + .saturating_add(T::DbWeight::get().reads(1_u64)) } // Storage: Membership MembershipById (r:1 w:0) + // Proof: Membership MembershipById (max_values: None, max_size: Some(125), added: 2600, mode: MaxEncodedLen) // Storage: System Account (r:2 w:2) + // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) fn member_remark_with_payment() -> Weight { - (69_370_000 as Weight) - .saturating_add(T::DbWeight::get().reads(3 as Weight)) - .saturating_add(T::DbWeight::get().writes(2 as Weight)) + // Proof Size summary in bytes: + // Measured: `446` + // Estimated: `9786` + // Minimum execution time: 49_317 nanoseconds. + Weight::from_parts(50_654_000, 0u64) + .saturating_add(Weight::from_parts(0, 9786)) + .saturating_add(T::DbWeight::get().reads(3_u64)) + .saturating_add(T::DbWeight::get().writes(2_u64)) } // Storage: Membership MemberIdByHandleHash (r:1 w:1) + // Proof: Membership MemberIdByHandleHash (max_values: None, max_size: Some(56), added: 2531, mode: MaxEncodedLen) // Storage: Membership InitialInvitationCount (r:1 w:0) + // Proof: Membership InitialInvitationCount (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) // Storage: Membership NextMemberId (r:1 w:1) + // Proof: Membership NextMemberId (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) // Storage: Membership MembershipById (r:0 w:1) + // Proof: Membership MembershipById (max_values: None, max_size: Some(125), added: 2600, mode: MaxEncodedLen) + /// The range of component `i` is `[1, 100]`. + /// The range of component `j` is `[0, 100]`. fn create_member(i: u32, j: u32, ) -> Weight { - (57_677_000 as Weight) - // Standard Error: 7_000 - .saturating_add((1_831_000 as Weight).saturating_mul(i as Weight)) - // Standard Error: 8_000 - .saturating_add((813_000 as Weight).saturating_mul(j as Weight)) - .saturating_add(T::DbWeight::get().reads(3 as Weight)) - .saturating_add(T::DbWeight::get().writes(3 as Weight)) + // Proof Size summary in bytes: + // Measured: `6` + // Estimated: `6503` + // Minimum execution time: 125_594 nanoseconds. + Weight::from_parts(24_314_062, 0u64) + .saturating_add(Weight::from_parts(0, 6503)) + // Standard Error: 7_340 + .saturating_add(Weight::from_parts(1_988_519, 0u64).saturating_mul(i.into())) + // Standard Error: 7_253 + .saturating_add(Weight::from_parts(1_087_322, 0u64).saturating_mul(j.into())) + .saturating_add(T::DbWeight::get().reads(3_u64)) + .saturating_add(T::DbWeight::get().writes(3_u64)) } } // Default implementation for tests impl WeightInfo for () { fn buy_membership_without_referrer(i: u32, j: u32, ) -> Weight { - 0 + Weight::from_parts(0, 0) } fn buy_membership_with_referrer(i: u32, j: u32, ) -> Weight { - 0 + Weight::from_parts(0, 0) } fn update_profile(i: u32, j: u32, ) -> Weight { - 0 + Weight::from_parts(0, 0) } fn update_accounts_none() -> Weight { - 0 + Weight::from_parts(0, 0) } fn update_accounts_root() -> Weight { - 0 + Weight::from_parts(0, 0) } fn update_accounts_controller() -> Weight { - 0 + Weight::from_parts(0, 0) } fn update_accounts_both() -> Weight { - 0 + Weight::from_parts(0, 0) } fn set_referral_cut() -> Weight { - 0 + Weight::from_parts(0, 0) } fn transfer_invites() -> Weight { - 0 + Weight::from_parts(0, 0) } fn invite_member(i: u32, j: u32, ) -> Weight { - 0 + Weight::from_parts(0, 0) } fn gift_membership(i: u32, j: u32, ) -> Weight { - 0 + Weight::from_parts(0, 0) } fn set_membership_price() -> Weight { - 0 + Weight::from_parts(0, 0) } fn update_profile_verification() -> Weight { - 0 + Weight::from_parts(0, 0) } fn set_leader_invitation_quota() -> Weight { - 0 + Weight::from_parts(0, 0) } fn set_initial_invitation_balance() -> Weight { - 0 + Weight::from_parts(0, 0) } fn set_initial_invitation_count() -> Weight { - 0 + Weight::from_parts(0, 0) } fn add_staking_account_candidate() -> Weight { - 0 + Weight::from_parts(0, 0) } fn confirm_staking_account() -> Weight { - 0 + Weight::from_parts(0, 0) } fn remove_staking_account() -> Weight { - 0 - } - fn member_remark_with_payment() -> Weight { - 0 + Weight::from_parts(0, 0) } fn member_remark_without_payment() -> Weight { - 0 + Weight::from_parts(0, 0) + } + fn member_remark_with_payment() -> Weight { + Weight::from_parts(0, 0) } fn create_member(i: u32, j: u32, ) -> Weight { - 0 + Weight::from_parts(0, 0) } } diff --git a/runtime-modules/project-token/Cargo.toml b/runtime-modules/project-token/Cargo.toml index cce2e2c1cc..6ee19abadf 100644 --- a/runtime-modules/project-token/Cargo.toml +++ b/runtime-modules/project-token/Cargo.toml @@ -5,33 +5,33 @@ authors = ['Joystream contributors'] edition = '2018' [dependencies] -sp-io = { package = 'sp-io', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -sp-std = { package = 'sp-std', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -sp-runtime = { package = 'sp-runtime', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -frame-support = { package = 'frame-support', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -frame-system = { package = 'frame-system', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -sp-arithmetic = { package = 'sp-arithmetic', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} +sp-io = { package = 'sp-io', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +sp-std = { package = 'sp-std', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +sp-runtime = { package = 'sp-runtime', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +frame-support = { package = 'frame-support', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +frame-system = { package = 'frame-system', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +sp-arithmetic = { package = 'sp-arithmetic', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} common = { package = 'pallet-common', default-features = false, path = '../common'} storage = { package = 'pallet-storage', default-features = false, path = '../storage'} -balances = { package = 'pallet-balances', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} +balances = { package = 'pallet-balances', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} membership = { package = 'pallet-membership', default-features = false, path = '../membership'} codec = { package = 'parity-scale-codec', version = '3.1.2', default-features = false, features = ['derive'] } serde = {version = '1.0.101', features = ['derive'], optional = true} scale-info = { version = "2.1.1", default-features = false, features = ["derive"] } # Benchmarking dependencies -frame-benchmarking = { package = 'frame-benchmarking', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522', optional = true} +frame-benchmarking = { package = 'frame-benchmarking', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9', optional = true} [dev-dependencies] -randomness-collective-flip = { package = 'pallet-randomness-collective-flip', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} +randomness-collective-flip = { package = 'pallet-insecure-randomness-collective-flip', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} staking-handler = { package = 'pallet-staking-handler', default-features = false, path = '../staking-handler'} -pallet-timestamp = { package = 'pallet-timestamp', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -sp-storage = { package = 'sp-storage', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} +pallet-timestamp = { package = 'pallet-timestamp', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +sp-storage = { package = 'sp-storage', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} [features] default = ['std'] runtime-benchmarks = [ - "frame-benchmarking", + "frame-benchmarking/runtime-benchmarks", "common/runtime-benchmarks", ] std = [ @@ -48,4 +48,6 @@ std = [ 'codec/std', 'serde', 'scale-info/std', -] + 'frame-benchmarking?/std', +] +try-runtime = ["frame-support/try-runtime"] diff --git a/runtime-modules/project-token/src/benchmarking.rs b/runtime-modules/project-token/src/benchmarking.rs index d883c2d3a0..6ad109d0c3 100644 --- a/runtime-modules/project-token/src/benchmarking.rs +++ b/runtime-modules/project-token/src/benchmarking.rs @@ -5,6 +5,7 @@ use crate::utils::{build_merkle_path_helper, generate_merkle_root_helper}; use crate::Module as Token; use balances::Pallet as Balances; use common::membership::MembershipTypes; +use core::convert::TryInto; use frame_benchmarking::{account, benchmarks, Zero}; use frame_system::EventRecord; use frame_system::Pallet as System; @@ -17,9 +18,8 @@ use storage::BagId; // ----- DEFAULTS const SEED: u32 = 0; -const DEFAULT_TOKEN_ISSUANCE: u64 = 1_000_000; +const DEFAULT_TOKEN_ISSUANCE: u32 = 8_000_000; // Transfers -const MAX_TX_OUTPUTS: u32 = 1024; const DEFAULT_TX_AMOUNT: u32 = 100; // Whitelist const MAX_MERKLE_PROOF_HASHES: u32 = 10; @@ -28,15 +28,19 @@ const DEFAULT_TOKENS_ON_SALE: u32 = 100_000; const DEFAULT_SALE_UNIT_PRICE: u32 = 2_000_000; const DEFAULT_SALE_PURCHASE: u32 = 100; // Revenue splits -const DEFAULT_SPLIT_REVENUE: u64 = 8_000_000; +const DEFAULT_SPLIT_REVENUE: u32 = 8_000_000; const DEFAULT_REVENUE_SPLIT_RATE: Permill = Permill::from_percent(50); -const DEFAULT_SPLIT_ALLOCATION: u64 = 4_000_000; // DEFAULT_REVENUE_SPLIT_RATE * DEFAULT_SPLIT_REVENUE -const DEFAULT_SPLIT_PAYOUT: u64 = 2_000_000; -const DEFAULT_SPLIT_PARTICIPATION: u64 = - DEFAULT_SPLIT_PAYOUT * DEFAULT_TOKEN_ISSUANCE / DEFAULT_SPLIT_ALLOCATION; +const DEFAULT_SPLIT_ALLOCATION: u32 = 4_000_000; // DEFAULT_REVENUE_SPLIT_RATE * DEFAULT_SPLIT_REVENUE +const DEFAULT_SPLIT_PAYOUT: u32 = 2_000_000; +const DEFAULT_SPLIT_PARTICIPATION: u32 = + DEFAULT_SPLIT_PAYOUT * (DEFAULT_TOKEN_ISSUANCE / DEFAULT_SPLIT_ALLOCATION); + +// Amm +const DEFAULT_AMM_AMOUNT: u32 = 1; +const DEFAULT_AMM_JOY_AMOUNT: u32 = 5_000_100; // (a = 10_000_000) * amount^2 /2 + (b = 100) * amount, amount = 1 // Patronage -const DEFAULT_PATRONAGE: YearlyRate = YearlyRate(Permill::from_percent(1)); +const DEFAULT_PATRONAGE: YearlyRate = YearlyRate(Permill::from_percent(15)); // Metadata const MAX_KILOBYTES_METADATA: u32 = 100; @@ -118,10 +122,10 @@ fn issue_token( .iter() .cloned() .collect(), - symbol: ::Hashing::hash_of(b"CRT"), transfer_policy, patronage_rate: DEFAULT_PATRONAGE, revenue_split_rate: DEFAULT_REVENUE_SPLIT_RATE, + metadata: vec![], }, UploadContext { bag_id: BagId::::default(), @@ -155,6 +159,29 @@ fn init_token_sale(token_id: T::TokenId) -> Result(token_id: T::TokenId, member_id: T::MemberId) -> DispatchResult { + let params = AmmParams { + slope: 10_000_000u32.into(), + intercept: 100u32.into(), + }; + Token::::activate_amm(token_id, member_id, params) +} + +fn call_buy_on_amm( + token_id: T::TokenId, + account_id: T::AccountId, + member_id: T::MemberId, + amount: TokenBalanceOf, +) -> DispatchResult { + Token::::buy_on_amm( + RawOrigin::Signed(account_id).into(), + token_id, + member_id, + amount, + None, + ) +} + fn issue_revenue_split(token_id: T::TokenId, forced_id: Option) -> DispatchResult { // top up owner JOY balance let _ = Joy::::deposit_creating( @@ -213,9 +240,9 @@ fn setup_account_with_max_number_of_locks( }); } -fn assert_last_event(generic_event: ::Event) { +fn assert_last_event(generic_event: ::RuntimeEvent) { let events = frame_system::Pallet::::events(); - let system_event: ::Event = generic_event.into(); + let system_event: ::RuntimeEvent = generic_event.into(); assert!( !events.is_empty(), "If you are checking for last event there must be at least 1 event" @@ -237,26 +264,24 @@ benchmarks! { // - destination accounts do not exist (need to be created) // - bloat_bond is non-zero transfer { - let o in 1 .. MAX_TX_OUTPUTS; + let o in 1 .. (::MaxOutputs::get()); let m in 1 .. MAX_KILOBYTES_METADATA; let (owner_member_id, owner_account) = create_owner::(); - let outputs = Transfers::<_, _>( - (0..o) + let _outputs = + (0..(o as u16)) .map(|i| { let member_id = create_member::( - &account::("dst", i, SEED), - &uniq_handle("dst_member", i) + &account::("dst", i as u32, SEED), + &uniq_handle("dst_member", i as u32) ); ( member_id, - Payment::<::Balance> { - amount: DEFAULT_TX_AMOUNT.into() - } + TokenBalanceOf::::from(DEFAULT_TX_AMOUNT) ) }) - .collect() - ); + .collect::>(); + let outputs: TransferOutputsOf = _outputs.try_into().unwrap(); let bloat_bond: JoyBalanceOf = T::JoyExistentialDeposit::get(); let token_id = issue_token::(TransferPolicyParams::Permissionless)?; setup_account_with_max_number_of_locks::(token_id, &owner_member_id, None); @@ -274,9 +299,9 @@ benchmarks! { metadata.clone() ) verify { - outputs.0.keys().for_each(|m| { + outputs.iter().for_each(|(member_id, _)| { assert_eq!( - AccountInfoByTokenAndMember::::get(token_id, m).amount, + AccountInfoByTokenAndMember::::get(token_id, member_id).amount, DEFAULT_TX_AMOUNT.into() ); }); @@ -286,9 +311,8 @@ benchmarks! { owner_member_id, Transfers( outputs - .0 .iter() - .map(|(m, p)| (Validated::NonExisting(*m), ValidatedPayment::from(PaymentWithVesting::from(p.clone())))) + .map(|(m, p)| (Validated::NonExisting(*m), ValidatedPayment::from(PaymentWithVesting::from(*p)))) .collect() ), metadata @@ -336,7 +360,7 @@ benchmarks! { owner_member_id ) verify { - assert!(!AccountInfoByTokenAndMember::::contains_key(token_id, &owner_member_id)); + assert!(!AccountInfoByTokenAndMember::::contains_key(token_id, owner_member_id)); assert_last_event::( RawEvent::AccountDustedBy( token_id, @@ -382,7 +406,7 @@ benchmarks! { proof ) verify { - assert!(AccountInfoByTokenAndMember::::contains_key(token_id, &member_id)); + assert!(AccountInfoByTokenAndMember::::contains_key(token_id, member_id)); assert_last_event::( RawEvent::MemberJoinedWhitelist( token_id, @@ -429,7 +453,7 @@ benchmarks! { ) verify { assert!( - Token::::account_info_by_token_and_member(token_id, &member_id) + Token::::account_info_by_token_and_member(token_id, member_id) == AccountData { amount: DEFAULT_SALE_PURCHASE.into(), vesting_schedules: vec![ @@ -474,7 +498,7 @@ benchmarks! { let participant_acc = account::("participant", 0, SEED); let participant_id = create_member::(&participant_acc, b"participant"); - setup_account_with_max_number_of_locks::(token_id, &participant_id, Some(DEFAULT_SPLIT_PARTICIPATION.into())); + setup_account_with_max_number_of_locks::(token_id, &participant_id, Some(::Balance::from(DEFAULT_SPLIT_PARTICIPATION))); // Issue revenue split // Note: We need to force split_id==1, because @@ -492,7 +516,7 @@ benchmarks! { ) verify { assert_eq!( - Token::::account_info_by_token_and_member(token_id, &participant_id).staked(), + Token::::account_info_by_token_and_member(token_id, participant_id).staked(), DEFAULT_SPLIT_PARTICIPATION.into() ); assert_eq!( @@ -524,8 +548,8 @@ benchmarks! { let participant_id = create_member::(&participant_acc, b"participant"); setup_account_with_max_number_of_locks::(token_id, &participant_id, Some(DEFAULT_SPLIT_PARTICIPATION.into())); - // Issue revenue split // Note: We need to force split_id==1, because +// Issue revenue split // setup_account_with_max_number_of_locks will setup a staking_status with split_id == 0 issue_revenue_split::(token_id, Some(1))?; System::::set_block_number( @@ -546,15 +570,23 @@ benchmarks! { participant_id ) verify { - assert!(Token::::account_info_by_token_and_member(token_id, &participant_id).split_staking_status.is_none()); + assert!(Token::::account_info_by_token_and_member(token_id, participant_id).split_staking_status.is_none()); assert_last_event::( RawEvent::RevenueSplitLeft( token_id, participant_id, - DEFAULT_SPLIT_PARTICIPATION.into() + DEFAULT_SPLIT_PARTICIPATION.into(), ).into() ); } + set_frozen_status { + let pallet_frozen = true; + }: _(RawOrigin::Root, pallet_frozen) + verify { + assert_eq!(Module::::pallet_frozen(), pallet_frozen); + + assert_last_event::(RawEvent::FrozenStatusUpdated(pallet_frozen).into()); + } // Worst case scenario: // - account has max number of vesting_schedules @@ -564,7 +596,7 @@ benchmarks! { let (owner_member_id, owner_account) = create_owner::(); let token_id = issue_token::(TransferPolicyParams::Permissionless)?; setup_account_with_max_number_of_locks::(token_id, &owner_member_id, None); - let amount_to_burn = Token::::account_info_by_token_and_member(token_id, &owner_member_id).amount; + let amount_to_burn = Token::::account_info_by_token_and_member(token_id, owner_member_id).amount; let bloat_bond = BloatBond::::get(); }: _( RawOrigin::Signed(owner_account.clone()), @@ -585,6 +617,103 @@ benchmarks! { ).into() ); } + + buy_on_amm_with_account_creation { + let (owner_member_id, owner_account) = create_owner::(); + let token_id = issue_token::(TransferPolicyParams::Permissionless)?; + let amount_to_buy = DEFAULT_AMM_AMOUNT.into(); + let desired_price = DEFAULT_AMM_JOY_AMOUNT.into(); // computed using supply = 0 a = 10% and b = 10% + let bloat_bond = BloatBond::::get(); + let tx_fee_amount = Token::::amm_buy_tx_fees().mul_floor(desired_price); + let participant_acc = account::("participant", 0, SEED); + let participant_id = create_member::(&participant_acc, b"participant"); + let _ = Joy::::deposit_creating(&participant_acc, desired_price + bloat_bond + tx_fee_amount); + let slippage_tolerance = (Permill::from_perthousand(5), desired_price); + activate_amm::(token_id, owner_member_id)?; + }: buy_on_amm( + RawOrigin::Signed(participant_acc.clone()), + token_id, + participant_id, + amount_to_buy, + Some(slippage_tolerance) + ) + verify { + let provided_supply = Token::::ensure_token_exists(token_id).unwrap().amm_curve.unwrap().provided_supply; + assert_eq!(provided_supply, amount_to_buy); + assert_eq!( + Token::::ensure_account_data_exists(token_id, &participant_id).unwrap().amount, + amount_to_buy, + ); + assert_eq!( + Joy::::usable_balance(&participant_acc), + T::JoyExistentialDeposit::get() + ); + } + + buy_on_amm_with_existing_account { + let (owner_member_id, owner_account) = create_owner::(); + let token_id = issue_token::(TransferPolicyParams::Permissionless)?; + let amount_to_buy = DEFAULT_AMM_AMOUNT.into(); + let desired_price = DEFAULT_AMM_JOY_AMOUNT.into(); // computed using supply = 0 a = 10% and b = 10% + let bloat_bond = BloatBond::::get(); + let tx_fee_amount = Token::::amm_buy_tx_fees().mul_floor(desired_price); + let participant_acc = account::("participant", 0, SEED); + let participant_id = create_member::(&participant_acc, b"participant"); + activate_amm::(token_id, owner_member_id)?; + let _ = Joy::::deposit_creating(&participant_acc, desired_price + bloat_bond + tx_fee_amount); + let slippage_tolerance = (Permill::from_perthousand(5), desired_price); + }: buy_on_amm( + RawOrigin::Signed(participant_acc.clone()), + token_id, + participant_id, + amount_to_buy, + Some(slippage_tolerance) + ) + verify { + let provided_supply = Token::::ensure_token_exists(token_id).unwrap().amm_curve.unwrap().provided_supply; + assert_eq!(provided_supply, amount_to_buy); + assert_eq!( + Token::::ensure_account_data_exists(token_id, &participant_id).unwrap().amount, + amount_to_buy, + ); + assert_eq!( + Joy::::usable_balance(&participant_acc), + T::JoyExistentialDeposit::get(), + ); + } + + sell_on_amm { + let (owner_member_id, owner_account) = create_owner::(); + let token_id = issue_token::(TransferPolicyParams::Permissionless)?; + let amount = DEFAULT_AMM_AMOUNT.into(); + let desired_price = DEFAULT_AMM_JOY_AMOUNT.into(); // computed using supply = 0 a = 10% and b = 10% + let bloat_bond = BloatBond::::get(); + let buy_tx_fee_amount = Token::::amm_buy_tx_fees().mul_floor(desired_price); + let sell_tx_fee_amount = Token::::amm_sell_tx_fees().mul_floor(desired_price); + let participant_acc = account::("participant", 0, SEED); + let participant_id = create_member::(&participant_acc, b"participant"); + let _ = Joy::::deposit_creating(&participant_acc, desired_price + bloat_bond + buy_tx_fee_amount); + let slippage_tolerance = (Permill::from_percent(10), desired_price); + activate_amm::(token_id, owner_member_id)?; + call_buy_on_amm::(token_id, participant_acc.clone(), participant_id, amount)?; + }:_ ( + RawOrigin::Signed(participant_acc.clone()), + token_id, + participant_id, + amount, + Some(slippage_tolerance) + ) + verify { + let provided_supply = Token::::ensure_token_exists(token_id).unwrap().amm_curve.unwrap().provided_supply; + assert!(provided_supply.is_zero()); + assert!( + Token::::ensure_account_data_exists(token_id, &participant_id).unwrap().amount.is_zero(), + ); + // assert_eq!( + // Joy::::usable_balance(&participant_acc), + // desired_price + T::JoyExistentialDeposit::get() - sell_tx_fee_amount, + // ); + } } #[cfg(test)] @@ -641,4 +770,25 @@ mod tests { assert_ok!(Token::test_benchmark_burn()); }); } + + #[test] + fn test_buy_on_amm_with_account_creation() { + build_test_externalities(GenesisConfigBuilder::new_empty().build()).execute_with(|| { + assert_ok!(Token::test_benchmark_buy_on_amm_with_account_creation()); + }); + } + + #[test] + fn test_buy_on_amm_with_existing_account() { + build_test_externalities(GenesisConfigBuilder::new_empty().build()).execute_with(|| { + assert_ok!(Token::test_benchmark_buy_on_amm_with_existing_account()); + }); + } + + #[test] + fn test_sell_on_amm() { + build_test_externalities(GenesisConfigBuilder::new_empty().build()).execute_with(|| { + assert_ok!(Token::test_benchmark_sell_on_amm()); + }); + } } diff --git a/runtime-modules/project-token/src/errors.rs b/runtime-modules/project-token/src/errors.rs index 9fcef36470..1a12764d72 100644 --- a/runtime-modules/project-token/src/errors.rs +++ b/runtime-modules/project-token/src/errors.rs @@ -22,9 +22,6 @@ decl_error! { /// Merkle proof verification failed MerkleProofVerificationFailure, - /// Target Rate is higher than current patronage rate - TargetPatronageRateIsHigherThanCurrentRate, - /// Symbol already in use TokenSymbolAlreadyInUse, @@ -34,6 +31,9 @@ decl_error! { /// Account Already exists AccountAlreadyExists, + /// Transfer destination member id invalid + TooManyTransferOutputs, + /// Token's current offering state is not Idle TokenIssuanceNotInIdleState, @@ -111,6 +111,9 @@ decl_error! { /// Amount of tokens to purchase on sale cannot be zero SalePurchaseAmountIsZero, + /// No Sale if Amm is active + CannotInitSaleIfAmmIsActive, + // ------ Revenue Split Errors ------------------------------------------------------ /// Specified revenue split starting block is in the past @@ -159,5 +162,44 @@ decl_error! { /// Amount of tokens to burn exceeds total amount of tokens owned by the account BurnAmountGreaterThanAccountTokensAmount, + + /// ------ AMM --------------------------------------------------------- + + /// not in AMM state + NotInAmmState, + + /// Invalid bonding curve construction parameters + InvalidCurveParameters, + + /// Deadline constraint not satisfied + DeadlineExpired, + + /// Slippage tolerance constraint tolerance not satisfied + SlippageToleranceExceeded, + + /// Creator token balance is insufficient + InsufficientTokenBalance, + + /// Oustanding AMM-provided supply constitutes too large percentage of the token's total supply + OutstandingAmmProvidedSupplyTooLarge, + + /// Curve slope parameters below minimum allowed + CurveSlopeParametersTooLow, + + /// Attempting to sell more than amm provided supply + NotEnoughTokenMintedByAmmForThisSale, + + /// -------- Patronage -------------------------------------------------- + + /// Target Rate is higher than current patronage rate + TargetPatronageRateIsHigherThanCurrentRate, + + /// Provided value for patronage is too big (yearly format) + YearlyPatronageRateLimitExceeded, + + // ------ Pallet Errors ------------------------------------------------------ + + /// Attempt to perform an action when pallet is frozen + PalletFrozen } } diff --git a/runtime-modules/project-token/src/events.rs b/runtime-modules/project-token/src/events.rs index 66fd5da70f..c7865fc103 100644 --- a/runtime-modules/project-token/src/events.rs +++ b/runtime-modules/project-token/src/events.rs @@ -1,12 +1,11 @@ #![allow(clippy::unused_unit)] use crate::types::{ - JoyBalanceOf, RevenueSplitId, TokenIssuanceParametersOf, TokenSaleId, TokenSaleOf, - TransferPolicyOf, ValidatedTransfersOf, + AmmCurveOf, JoyBalanceOf, RevenueSplitId, TokenIssuanceParametersOf, TokenSaleId, TokenSaleOf, + TransferPolicyOf, ValidatedTransfersOf, YearlyRate, }; use common::MembershipTypes; use frame_support::decl_event; -use sp_runtime::Perquintill; use sp_std::vec::Vec; decl_event! { @@ -22,6 +21,7 @@ decl_event! { TokenIssuanceParameters = TokenIssuanceParametersOf, ValidatedTransfers = ValidatedTransfersOf, TokenSale = TokenSaleOf, + AmmCurve = AmmCurveOf, { /// Token amount is transferred from src to dst @@ -46,7 +46,7 @@ decl_event! { /// Params: /// - token identifier /// - new patronage rate - PatronageRateDecreasedTo(TokenId, Perquintill), + PatronageRateDecreasedTo(TokenId, YearlyRate), /// Patronage credit claimed by creator /// Params: @@ -155,5 +155,40 @@ decl_event! { /// - member id /// - number of tokens burned TokensBurned(TokenId, MemberId, Balance), + + /// AMM activated + /// Params: + /// - token id + /// - member id + /// - params for the bonding curve + AmmActivated(TokenId, MemberId, AmmCurve), + + /// Tokens Bought on AMM + /// Params: + /// - token id + /// - member id + /// - amount of CRT minted + /// - amount of JOY deposited into curve treasury + TokensBoughtOnAmm(TokenId, MemberId, Balance, JoyBalance), + + /// Tokens Sold on AMM + /// Params: + /// - token id + /// - member id + /// - amount of CRT burned + /// - amount of JOY withdrawn from curve treasury + TokensSoldOnAmm(TokenId, MemberId, Balance, JoyBalance), + + /// AMM deactivated + /// Params: + /// - token id + /// - member id + /// - amm treasury amount burned upon deactivation + AmmDeactivated(TokenId, MemberId, JoyBalance), + + /// Pallet Frozen status toggled + /// Params: + /// - new frozen status (true | false) + FrozenStatusUpdated(bool) } } diff --git a/runtime-modules/project-token/src/lib.rs b/runtime-modules/project-token/src/lib.rs index 689e2486de..8240fc6f3e 100644 --- a/runtime-modules/project-token/src/lib.rs +++ b/runtime-modules/project-token/src/lib.rs @@ -32,16 +32,15 @@ use frame_support::{ traits::{Currency, ExistenceRequirement, Get}, PalletId, }; -use frame_system::ensure_signed; +use frame_system::{ensure_root, ensure_signed}; use scale_info::TypeInfo; use sp_arithmetic::traits::{AtLeast32BitUnsigned, One, Saturating, Zero}; use sp_runtime::{ - traits::{AccountIdConversion, Convert, UniqueSaturatedInto}, + traits::{AccountIdConversion, CheckedAdd}, Permill, }; use sp_std::collections::btree_map::BTreeMap; use sp_std::convert::TryInto; -use sp_std::iter::Sum; use sp_std::vec; use sp_std::vec::Vec; use storage::UploadParameters; @@ -75,20 +74,11 @@ pub trait Config: frame_system::Config + balances::Config + storage::Config + membership::Config { /// Events - type Event: From> + Into<::Event>; + type RuntimeEvent: From> + Into<::RuntimeEvent>; /// the Balance type used - type Balance: AtLeast32BitUnsigned - + FullCodec - + Copy - + Default - + Debug - + Saturating - + Sum - + From - + UniqueSaturatedInto - + Into> - + TypeInfo + type Balance: types::TokenBalanceTrait + + Into<::Balance> + MaxEncodedLen; /// The token identifier used @@ -100,9 +90,6 @@ pub trait Config: + TypeInfo + MaxEncodedLen; - /// Block number to balance converter used for interest calculation - type BlockNumberToBalance: Convert::Balance>; - /// The storage type used type DataObjectStorage: storage::DataObjectStorage; @@ -123,13 +110,16 @@ pub trait Config: /// Member origin validator type MemberOriginValidator: MemberOriginValidator< - Self::Origin, + Self::RuntimeOrigin, MemberIdOf, Self::AccountId, >; /// Membership info provider type MembershipInfoProvider: MembershipInfoProvider; + + /// Max outputs number for a transfer + type MaxOutputs: Get; } decl_storage! { generate_storage_info @@ -148,11 +138,6 @@ decl_storage! { generate_storage_info /// Token Id nonce pub NextTokenId get(fn next_token_id) config(): T::TokenId; - /// Set for the tokens symbols - pub SymbolsUsed get(fn symbol_used) config(): - map - hasher(blake2_128_concat) T::Hash => (); - /// Bloat Bond value used during account creation pub BloatBond get(fn bloat_bond) config(): JoyBalanceOf; @@ -161,11 +146,30 @@ decl_storage! { generate_storage_info /// Minimum revenue split duration constraint pub MinRevenueSplitDuration get(fn min_revenue_split_duration) config(): T::BlockNumber; + /// Minimum revenue split time to start constraint pub MinRevenueSplitTimeToStart get(fn min_revenue_split_time_to_start) config(): T::BlockNumber; /// Platform fee (percentage) charged on top of each sale purchase (in JOY) and burned pub SalePlatformFee get(fn sale_platform_fee) config(): Permill; + + /// Percentage threshold for deactivating the amm functionality + pub AmmDeactivationThreshold get(fn amm_deactivation_threshold) config(): Permill = Permill::zero(); + + /// AMM buy transaction fee percentage + pub AmmBuyTxFees get(fn amm_buy_tx_fees) config(): Permill = Permill::from_perthousand(3_u32); + + /// AMM sell transaction fee percentage + pub AmmSellTxFees get(fn amm_sell_tx_fees) config(): Permill = Permill::from_perthousand(3_u32); + + /// Max patronage rate allowed + pub MaxYearlyPatronageRate get(fn max_yearly_patronage_rate) config(): YearlyRate = YearlyRate(Permill::from_percent(15)); + + /// Minimum slope parameters allowed for AMM curve + pub MinAmmSlopeParameter get(fn min_amm_slope_parameter) config(): TokenBalanceOf = TokenBalanceOf::::from(1_000_000_u32); + + /// Current frozen state. + pub PalletFrozen get(fn pallet_frozen) : bool; } add_extra_genesis { @@ -190,7 +194,7 @@ decl_storage! { generate_storage_info // - https://github.com/Joystream/joystream/issues/3497 // - https://github.com/Joystream/joystream/issues/3510 - let module_account_id = crate::Module::::module_treasury_account(); + let module_account_id = Module::::module_treasury_account(); let deposit = T::JoyExistentialDeposit::get(); let _ = Joy::::deposit_creating(&module_account_id, deposit); @@ -201,7 +205,7 @@ decl_storage! { generate_storage_info decl_module! { pub struct Module for enum Call where - origin: T::Origin + origin: T::RuntimeOrigin { /// Default deposit_event() handler @@ -237,14 +241,16 @@ decl_module! { /// - DB: /// - `O(T)` - from the the generated weights /// # - #[weight = WeightInfoToken::::transfer(outputs.0.len() as u32, to_kb(metadata.len() as u32))] + #[weight = WeightInfoToken::::transfer(outputs.len() as u32, to_kb(metadata.len() as u32))] pub fn transfer( origin, src_member_id: T::MemberId, token_id: T::TokenId, - outputs: TransfersOf, + outputs: TransferOutputsOf, metadata: Vec ) -> DispatchResult { + Self::ensure_unfrozen_state()?; + let sender = T::MemberOriginValidator::ensure_member_controller_account_origin( origin, src_member_id @@ -298,6 +304,8 @@ decl_module! { /// # #[weight = WeightInfoToken::::burn()] pub fn burn(origin, token_id: T::TokenId, member_id: T::MemberId, amount: TokenBalanceOf) -> DispatchResult { + Self::ensure_unfrozen_state()?; + // Ensure burn amount is non-zero ensure!( !amount.is_zero(), @@ -366,6 +374,8 @@ decl_module! { /// # #[weight = WeightInfoToken::::dust_account()] pub fn dust_account(origin, token_id: T::TokenId, member_id: T::MemberId) -> DispatchResult { + Self::ensure_unfrozen_state()?; + let sender = ensure_signed(origin)?; let token_info = Self::ensure_token_exists(token_id)?; let account_to_remove_info = Self::ensure_account_data_exists(token_id, &member_id)?; @@ -380,7 +390,7 @@ decl_module! { )?; // == MUTATION SAFE == - AccountInfoByTokenAndMember::::remove(token_id, &member_id); + AccountInfoByTokenAndMember::::remove(token_id, member_id); TokenInfoById::::mutate(token_id, |token_info| { token_info.decrement_accounts_number(); @@ -417,6 +427,8 @@ decl_module! { proof.0.len() as u32 )] pub fn join_whitelist(origin, member_id: T::MemberId, token_id: T::TokenId, proof: MerkleProofOf) -> DispatchResult { + Self::ensure_unfrozen_state()?; + let sender = T::MemberOriginValidator::ensure_member_controller_account_origin( origin, member_id @@ -424,7 +436,7 @@ decl_module! { let token_info = Self::ensure_token_exists(token_id)?; ensure!( - !AccountInfoByTokenAndMember::::contains_key(token_id, &member_id), + !AccountInfoByTokenAndMember::::contains_key(token_id, member_id), Error::::AccountAlreadyExists, ); @@ -525,6 +537,8 @@ decl_module! { member_id: T::MemberId, amount: TokenBalanceOf, ) -> DispatchResult { + Self::ensure_unfrozen_state()?; + // Ensure non-zero amount ensure!(!amount.is_zero(), Error::::SalePurchaseAmountIsZero); @@ -586,7 +600,7 @@ decl_module! { let vesting_cleanup_key = if vesting_schedule.is_some() { // Ensure vesting schedule can added if doesn't already exist // (MaxVestingSchedulesPerAccountPerToken not exceeded) - let acc_data = AccountInfoByTokenAndMember::::get(token_id, &member_id); + let acc_data = AccountInfoByTokenAndMember::::get(token_id, member_id); acc_data.ensure_can_add_or_update_vesting_schedule::( current_block, VestingSource::Sale(sale_id) @@ -606,7 +620,7 @@ decl_module! { } if account_data.is_some() { - AccountInfoByTokenAndMember::::try_mutate(token_id, &member_id, |acc_data| { + AccountInfoByTokenAndMember::::try_mutate(token_id, member_id, |acc_data| { acc_data.process_sale_purchase::( sale_id, amount, @@ -684,6 +698,8 @@ decl_module! { member_id: T::MemberId, amount: TokenBalanceOf, ) -> DispatchResult { + Self::ensure_unfrozen_state()?; + let sender = T::MemberOriginValidator::ensure_member_controller_account_origin( origin, member_id @@ -735,7 +751,7 @@ decl_module! { token_info.revenue_split.account_for_dividend(dividend_amount); }); - AccountInfoByTokenAndMember::::mutate(token_id, &member_id, |account_info| { + AccountInfoByTokenAndMember::::mutate(token_id, member_id, |account_info| { account_info.stake(split_id, amount); }); @@ -771,6 +787,8 @@ decl_module! { /// # #[weight = WeightInfoToken::::exit_revenue_split()] pub fn exit_revenue_split(origin, token_id: T::TokenId, member_id: T::MemberId) -> DispatchResult { + Self::ensure_unfrozen_state()?; + T::MemberOriginValidator::ensure_member_controller_account_origin( origin, member_id @@ -796,13 +814,192 @@ decl_module! { // == MUTATION SAFE == - AccountInfoByTokenAndMember::::mutate(token_id, &member_id, |account_info| { + AccountInfoByTokenAndMember::::mutate(token_id, member_id, |account_info| { account_info.unstake(); }); Self::deposit_event(RawEvent::RevenueSplitLeft(token_id, member_id, staking_info.amount)); Ok(()) } + + /// Mint desired `token_id` amount into user account via JOY exchnage + /// Preconditions + /// - origin, member_id pair must be a valid authentication pair + /// - token_id must exist + /// - user usable JOY balance must be enough for buying (+ existential deposit) + /// - slippage tolerance constraints respected if provided + /// - token total supply and amount value must be s.t. `eval` function doesn't overflow + /// + /// Postconditions + /// - `amount` CRT minted into account (which is created if necessary with existential deposit transferred to it) + /// - respective JOY amount transferred from user balance to amm treasury account + /// - event deposited + #[weight = WeightInfoToken::::buy_on_amm_with_existing_account()] + fn buy_on_amm(origin, token_id: T::TokenId, member_id: T::MemberId, amount: ::Balance, slippage_tolerance: Option<(Permill, JoyBalanceOf)>) -> DispatchResult { + Self::ensure_unfrozen_state()?; + + if amount.is_zero() { + return Ok(()); // noop + } + + let sender = ensure_signed(origin.clone())?; + + T::MemberOriginValidator::ensure_member_controller_account_origin( + origin, + member_id + )?; + + let token_data = Self::ensure_token_exists(token_id)?; + let curve = token_data.amm_curve.ok_or(Error::::NotInAmmState)?; + + let user_account_data_exists = AccountInfoByTokenAndMember::::contains_key(token_id, member_id); + let amm_treasury_account = Self::amm_treasury_account(token_id); + let price = curve.eval::(amount, AmmOperation::Buy)?.into(); + let bloat_bond = Self::bloat_bond(); + let buy_tx_fee = Self::amm_buy_tx_fees().mul_floor(price); + let buy_price = buy_tx_fee.checked_add(&price).ok_or(Error::::ArithmeticError)?; + + let joys_required = if !user_account_data_exists { + buy_price.saturating_add(bloat_bond) + } else { + buy_price + }; + + Self::ensure_can_transfer_joy(&sender, joys_required)?; + + // slippage tolerance check + if let Some((slippage_tolerance, desired_price)) = slippage_tolerance { + ensure!(price.saturating_sub(desired_price) <= slippage_tolerance.mul_floor(desired_price), Error::::SlippageToleranceExceeded); + } + + // == MUTATION SAFE == + + if !user_account_data_exists { + let new_account_info = AccountDataOf::::new_with_amount_and_bond( + amount, + // No restrictions on repayable bloat bond, + // since only usable balance is allowed + RepayableBloatBond::new(bloat_bond, None) + ); + Self::do_insert_new_account_for_token(token_id, &member_id, new_account_info); + Self::transfer_joy(&sender, &amm_treasury_account, bloat_bond)?; + } else { + AccountInfoByTokenAndMember::::mutate(token_id, member_id, |account_data| { + account_data.increase_amount_by(amount); + }); + } + + TokenInfoById::::mutate(token_id, |token_data| { + token_data.increase_supply_by(amount); + token_data.increase_amm_bought_amount_by(amount); + }); + + // transfer tx_fee * price + price + Self::transfer_joy(&sender, &amm_treasury_account, buy_price)?; + + // burn tx_fee * price + let _ = burn_from_usable::(&amm_treasury_account, buy_tx_fee); + + Self::deposit_event(RawEvent::TokensBoughtOnAmm(token_id, member_id, amount, buy_price)); + + Ok(()) + } + + /// Burn desired `token_id` amount from user account and get JOY from treasury account + /// Preconditions + /// - origin, member_id pair must be a valid authentication pair + /// - token_id must exist + /// - token_id, member_id must be valid account coordinates + /// - user usable CRT balance must be at least `amount` + /// - slippage tolerance constraints respected if provided + /// - token total supply and amount value must be s.t. `eval` function doesn't overflow + /// - amm treasury account must have sufficient JOYs for the operation + /// + /// Postconditions + /// - `amount` burned from user account + /// - total supply decreased by amount + /// - respective JOY amount transferred from amm treasury account to user account + /// - event deposited + #[weight = WeightInfoToken::::sell_on_amm()] + fn sell_on_amm(origin, token_id: T::TokenId, member_id: T::MemberId, amount: ::Balance, slippage_tolerance: Option<(Permill, JoyBalanceOf)>) -> DispatchResult { + Self::ensure_unfrozen_state()?; + + if amount.is_zero() { + return Ok(()); // noop + } + + let sender = ensure_signed(origin.clone())?; + + T::MemberOriginValidator::ensure_member_controller_account_origin( + origin, + member_id + )?; + + let token_data = Self::ensure_token_exists(token_id)?; + let curve = token_data.amm_curve.ok_or(Error::::NotInAmmState)?; + let user_acc_data = Self::ensure_account_data_exists(token_id, &member_id)?; + + ensure!( + user_acc_data.transferrable::(Self::current_block()) >= amount, + Error::::InsufficientTokenBalance, + ); + + let amm_treasury_account = Self::amm_treasury_account(token_id); + + let price = curve.eval::(amount, AmmOperation::Sell)?.into(); + + // slippage tolerance ccurve.eval::heck + if let Some((slippage_tolerance, desired_price)) = slippage_tolerance { + ensure!(desired_price.saturating_sub(price) <= slippage_tolerance.mul_floor(desired_price), Error::::SlippageToleranceExceeded); + } + + let sell_tx_fee = Self::amm_sell_tx_fees().mul_floor(price); + let sell_price = price.saturating_sub(sell_tx_fee); + + Self::ensure_can_transfer_joy(&amm_treasury_account, sell_price)?; + + // == MUTATION SAFE == + + AccountInfoByTokenAndMember::::mutate(token_id, member_id, |account_data| { + account_data.decrease_amount_by(amount); + }); + + TokenInfoById::::mutate(token_id, |token_data| { + token_data.decrease_supply_by(amount); + token_data.decrease_amm_bought_amount_by(amount); + }); + + // transfer the price - tx_fee * price + Self::transfer_joy(&amm_treasury_account, &sender, sell_price)?; + + // burn tx_fee * price + let _ = burn_from_usable::(&amm_treasury_account, sell_tx_fee); + + Self::deposit_event(RawEvent::TokensSoldOnAmm(token_id, member_id, amount, sell_price)); + + Ok(()) + } + + /// Allows to freeze or unfreeze this pallet. Requires root origin. + /// + /// + /// + /// ## Weight + /// `O (1)` + /// - DB: + /// - O(1) doesn't depend on the state or parameters + /// # + #[weight = WeightInfoToken::::set_frozen_status()] + pub fn set_frozen_status(origin, freeze: bool) { + ensure_root(origin)?; + + // + // == MUTATION SAFE == + // + + PalletFrozen::put(freeze); + Self::deposit_event(RawEvent::FrozenStatusUpdated(freeze)); + } } } @@ -816,7 +1013,8 @@ impl T::BlockNumber, TokenSaleParamsOf, UploadContextOf, - TransfersWithVestingOf, + TransferWithVestingOutputsOf, + AmmParamsOf, > for Module { /// Establish whether there's an unfinalized revenue split @@ -837,12 +1035,23 @@ impl true } + /// Establish whether AMM is active + /// Postconditions: true if token @ token_id exists && has active AMM, false otherwise + fn is_amm_active(token_id: T::TokenId) -> bool { + if let Ok(token_info) = Self::ensure_token_exists(token_id) { + return OfferingStateOf::::ensure_amm_of::(&token_info).is_ok(); + } + false + } + /// Change to permissionless /// Preconditions: /// - token by `token_id` must exist /// Postconditions /// - transfer policy of `token_id` changed to permissionless fn change_to_permissionless(token_id: T::TokenId) -> DispatchResult { + Self::ensure_unfrozen_state()?; + Self::ensure_token_exists(token_id).map(|_| ())?; // == MUTATION SAFE == @@ -858,22 +1067,22 @@ impl /// Reduce patronage rate by amount /// Preconditions: /// - token by `token_id` must exists - /// - `decrement` must be less or equal than current patronage rate for `token_id` + /// - `target_rate` must be less or equal than current patronage rate for `token_id` /// /// Postconditions: - /// - patronage rate for `token_id` reduced by `decrement` + /// - patronage rate for `token_id` reduced to `target_rate` /// - no-op if `target_rate` is equal to the current patronage rate fn reduce_patronage_rate_to(token_id: T::TokenId, target_rate: YearlyRate) -> DispatchResult { + Self::ensure_unfrozen_state()?; + let token_info = Self::ensure_token_exists(token_id)?; - let target_rate_per_block = - BlockRate::from_yearly_rate(target_rate, T::BlocksPerYear::get()); - if token_info.patronage_info.rate == target_rate_per_block { + if token_info.patronage_info.rate == target_rate { return Ok(()); } ensure!( - token_info.patronage_info.rate > target_rate_per_block, + token_info.patronage_info.rate > target_rate, Error::::TargetPatronageRateIsHigherThanCurrentRate, ); @@ -881,15 +1090,10 @@ impl let now = Self::current_block(); TokenInfoById::::mutate(token_id, |token_info| { - token_info.set_new_patronage_rate_at_block(target_rate_per_block, now); + token_info.set_new_patronage_rate_at_block::(target_rate, now); }); - let new_yearly_rate = - target_rate_per_block.to_yearly_rate_representation(T::BlocksPerYear::get()); - Self::deposit_event(RawEvent::PatronageRateDecreasedTo( - token_id, - new_yearly_rate, - )); + Self::deposit_event(RawEvent::PatronageRateDecreasedTo(token_id, target_rate)); Ok(()) } @@ -906,13 +1110,15 @@ impl /// - outstanding patronage credit subsequently set to 0 /// no-op if outstanding credit is zero fn claim_patronage_credit(token_id: T::TokenId, member_id: T::MemberId) -> DispatchResult { + Self::ensure_unfrozen_state()?; + let token_info = Self::ensure_token_exists(token_id)?; token_info.ensure_can_modify_supply::()?; Self::ensure_account_data_exists(token_id, &member_id).map(|_| ())?; let now = Self::current_block(); - let unclaimed_patronage = token_info.unclaimed_patronage_at_block(now); + let unclaimed_patronage = token_info.unclaimed_patronage_at_block::(now); if unclaimed_patronage.is_zero() { return Ok(()); @@ -920,7 +1126,7 @@ impl // == MUTATION SAFE == - AccountInfoByTokenAndMember::::mutate(token_id, &member_id, |account_info| { + AccountInfoByTokenAndMember::::mutate(token_id, member_id, |account_info| { account_info.increase_amount_by(unclaimed_patronage) }); @@ -941,14 +1147,12 @@ impl /// Issue token with specified characteristics /// /// Preconditions: - /// - `symbol` specified in the parameters must NOT exists in `SymbolsUsed` /// - `issuer_account` usable balance in JOYs >= /// `initial_allocation.len() * bloat_bond + JoyExistentialDeposit` /// /// Postconditions: /// - token with specified characteristics is added to storage state /// - `NextTokenId` increased by 1 - /// - symbol is added to `SymbolsUsed` /// - total bloat bond in JOY is transferred from `issuer_account` to treasury account /// - new token accounts are initialized based on `initial_allocation` fn issue_token( @@ -956,6 +1160,8 @@ impl issuance_parameters: TokenIssuanceParametersOf, upload_context: UploadContextOf, ) -> Result { + Self::ensure_unfrozen_state()?; + let token_id = Self::next_token_id(); let bloat_bond = Self::bloat_bond(); Self::validate_issuance_parameters(&issuance_parameters)?; @@ -978,7 +1184,6 @@ impl ); // == MUTATION SAFE == - SymbolsUsed::::insert(&token_data.symbol, ()); TokenInfoById::::insert(token_id, token_data); NextTokenId::::put(token_id.saturating_add(T::TokenId::one())); @@ -1025,12 +1230,19 @@ impl token_id: T::TokenId, src_member_id: T::MemberId, bloat_bond_payer: T::AccountId, - outputs: TransfersWithVestingOf, + outputs: TransferWithVestingOutputsOf, metadata: Vec, ) -> DispatchResult { + Self::ensure_unfrozen_state()?; + // Currency transfer preconditions - let validated_transfers = - Self::ensure_can_transfer(token_id, &bloat_bond_payer, &src_member_id, outputs, true)?; + let validated_transfers = Self::ensure_can_transfer( + token_id, + &bloat_bond_payer, + &src_member_id, + outputs.into(), + true, + )?; // == MUTATION SAFE == @@ -1073,6 +1285,8 @@ impl auto_finalize: bool, sale_params: TokenSaleParamsOf, ) -> DispatchResult { + Self::ensure_unfrozen_state()?; + let current_block = Self::current_block(); let token_data = Self::ensure_token_exists(token_id)?; let sale_id = token_data.next_sale_id; @@ -1095,7 +1309,7 @@ impl // Decrease source account's tokens number by sale_params.upper_bound_quantity // (unsold tokens can be later recovered with `finalize_token_sale`) - AccountInfoByTokenAndMember::::mutate(token_id, &member_id, |ad| { + AccountInfoByTokenAndMember::::mutate(token_id, member_id, |ad| { ad.decrease_amount_by(sale_params.upper_bound_quantity); }); @@ -1130,6 +1344,8 @@ impl new_start_block: Option, new_duration: Option, ) -> DispatchResult { + Self::ensure_unfrozen_state()?; + let token_data = Self::ensure_token_exists(token_id)?; let sale = OfferingStateOf::::ensure_upcoming_sale_of::(&token_data)?; let sale_id = token_data @@ -1180,14 +1396,15 @@ impl /// /// Postconditions: /// - token data @ `token_Id` removed from storage - /// - `symbol` for `token_id` removed fn deissue_token(token_id: T::TokenId) -> DispatchResult { - let token_info = Self::ensure_token_exists(token_id)?; + Self::ensure_unfrozen_state()?; + + let _ = Self::ensure_token_exists(token_id)?; Self::ensure_can_deissue_token(token_id)?; // == MUTATION SAFE == - Self::do_deissue_token(token_info.symbol, token_id); + Self::do_deissue_token(token_id); Self::deposit_event(RawEvent::TokenDeissued(token_id)); @@ -1217,6 +1434,8 @@ impl revenue_source_account: T::AccountId, revenue_amount: JoyBalanceOf, ) -> Result, DispatchError> { + Self::ensure_unfrozen_state()?; + let token_info = Self::ensure_token_exists(token_id)?; token_info.revenue_split.ensure_inactive::()?; @@ -1283,6 +1502,8 @@ impl /// - `token.revenue_split.leftovers()` of JOYs transferred to `account_id` /// - `token.revenue_split` status set to Inactive fn finalize_revenue_split(token_id: T::TokenId, account_id: T::AccountId) -> DispatchResult { + Self::ensure_unfrozen_state()?; + let token_info = Self::ensure_token_exists(token_id)?; let split_info = token_info.revenue_split.ensure_active::()?; @@ -1326,6 +1547,8 @@ impl /// `token_data.last_sale.quantity_left` /// - `token_data.sale` is set to None fn finalize_token_sale(token_id: T::TokenId) -> Result, DispatchError> { + Self::ensure_unfrozen_state()?; + let token_info = Self::ensure_token_exists(token_id)?; OfferingStateOf::::ensure_idle_of::(&token_info)?; let sale = token_info.sale.ok_or(Error::::NoTokensToRecover)?; @@ -1335,7 +1558,7 @@ impl .ok_or(Error::::ArithmeticError)?; // == MUTATION SAFE == - AccountInfoByTokenAndMember::::mutate(token_id, &sale.tokens_source, |ad| { + AccountInfoByTokenAndMember::::mutate(token_id, sale.tokens_source, |ad| { ad.increase_amount_by(sale.quantity_left); }); TokenInfoById::::mutate(token_id, |token_info| { @@ -1351,6 +1574,91 @@ impl Ok(sale.funds_collected) } + + /// Activate Amm functionality for the token + /// Preconditions + /// - token_id must exist + /// - offering state for `token_id` must be `Idle` + /// + /// Postconditions + /// - token `amm_curve` activated with specified parameters + /// - amm treasuryaccount created with existential deposit (if necessary) + /// - event deposited + fn activate_amm( + token_id: T::TokenId, + member_id: T::MemberId, + params: AmmParamsOf, + ) -> DispatchResult { + Self::ensure_unfrozen_state()?; + + let token_data = Self::ensure_token_exists(token_id)?; + + ensure!( + OfferingStateOf::::ensure_idle_of::(&token_data).is_ok(), + Error::::TokenIssuanceNotInIdleState + ); + + ensure!( + params.slope >= Self::min_amm_slope_parameter(), + Error::::CurveSlopeParametersTooLow + ); + let curve = AmmCurveOf::::from_params::(params); + + // == MUTATION SAFE == + + TokenInfoById::::mutate(token_id, |token_data| { + token_data.amm_curve = Some(curve.clone()) + }); + + // deposit existential deposit if the account is newly created + // the account is not meant to have reserved balance so usable is ok, also we don't care about locks so even free_balance should be correct + let amm_treasury_account = Self::amm_treasury_account(token_id); + if Joy::::usable_balance(&amm_treasury_account).is_zero() { + let _ = + Joy::::deposit_creating(&amm_treasury_account, T::JoyExistentialDeposit::get()); + } + + Self::deposit_event(RawEvent::AmmActivated(token_id, member_id, curve)); + + Ok(()) + } + + /// Deactivate the amm functionality + /// Preconditions + /// - (origin, member_id) must be a valid authentication pair + /// - token_id must be a valid + /// - token must be in `Amm` state + /// + /// Postconditions + /// - Amm Curve set to None + /// - state set to idle + /// - event deposited + fn deactivate_amm(token_id: T::TokenId, member_id: T::MemberId) -> DispatchResult { + Self::ensure_unfrozen_state()?; + + let token_data = Self::ensure_token_exists(token_id)?; + Self::ensure_amm_can_be_deactivated(&token_data)?; + + // == MUTATION SAFE == + + TokenInfoById::::mutate(token_id, |token_data| { + token_data.amm_curve = None; + }); + + // burn amount exceeding existential deposit + let amm_treasury_account = Self::amm_treasury_account(token_id); + let amount_to_burn = Joy::::usable_balance(&amm_treasury_account) + .saturating_sub(T::JoyExistentialDeposit::get()); + let _ = burn_from_usable::(&amm_treasury_account, amount_to_burn); + + Self::deposit_event(RawEvent::AmmDeactivated( + token_id, + member_id, + amount_to_burn, + )); + + Ok(()) + } } /// Module implementation @@ -1377,8 +1685,7 @@ impl Module { } /// Perform token de-issuing: unfallible - pub(crate) fn do_deissue_token(symbol: T::Hash, token_id: T::TokenId) { - SymbolsUsed::::remove(symbol); + pub(crate) fn do_deissue_token(token_id: T::TokenId) { TokenInfoById::::remove(token_id); // TODO: add extra state removal as implementation progresses } @@ -1388,7 +1695,7 @@ impl Module { token_id: T::TokenId, bloat_bond_payer: &T::AccountId, src_member_id: &T::MemberId, - transfers: TransfersWithVestingOf, + transfers: TransfersOf, is_issuer: bool, ) -> Result, DispatchError> { // ensure token validity @@ -1422,6 +1729,8 @@ impl Module { src_member_id: &T::MemberId, validated_transfers: &ValidatedTransfersOf, ) -> DispatchResult { + Self::ensure_unfrozen_state()?; + let current_block = Self::current_block(); let validated_transfers_with_bloat_bonds = @@ -1444,7 +1753,7 @@ impl Module { ValidatedWithBloatBond::Existing(dst_member_id) => { AccountInfoByTokenAndMember::::try_mutate( token_id, - &dst_member_id, + dst_member_id, |account_data| { if let Some(vs) = vesting_schedule { account_data.add_or_update_vesting_schedule::( @@ -1482,7 +1791,7 @@ impl Module { } } - AccountInfoByTokenAndMember::::mutate(token_id, &src_member_id, |account_data| { + AccountInfoByTokenAndMember::::mutate(token_id, src_member_id, |account_data| { account_data.decrease_amount_by(validated_transfers.total_amount()); }); @@ -1566,11 +1875,6 @@ impl Module { pub(crate) fn validate_issuance_parameters( params: &TokenIssuanceParametersOf, ) -> DispatchResult { - ensure!( - !SymbolsUsed::::contains_key(¶ms.symbol), - Error::::TokenSymbolAlreadyInUse, - ); - for (member_id, _) in params.initial_allocation.iter() { ensure!( T::MembershipInfoProvider::controller_account_id(*member_id).is_ok(), @@ -1622,6 +1926,11 @@ impl Module { ::ModuleId::get().into_sub_account_truncating(Vec::::new()) } + /// Returns the account for the AMM treasury + pub fn amm_treasury_account(token_id: T::TokenId) -> T::AccountId { + ::ModuleId::get().into_sub_account_truncating(("AMM", token_id)) + } + pub(crate) fn validate_destination( dst: T::MemberId, dst_acc_data: &Option>, @@ -1681,7 +1990,7 @@ impl Module { pub(crate) fn validate_transfers( token_id: T::TokenId, - transfers: TransfersWithVestingOf, + transfers: TransfersOf, transfer_policy: &TransferPolicyOf, is_issuer: bool, ) -> Result, DispatchError> { @@ -1742,6 +2051,8 @@ impl Module { targets: &BTreeMap>, bloat_bond_payer: &T::AccountId, ) -> DispatchResult { + Self::ensure_unfrozen_state()?; + let current_block = Self::current_block(); let targets_with_bloat_bonds = Self::pay_initial_allocation_bloat_bonds(bloat_bond_payer, targets)?; @@ -1851,7 +2162,7 @@ impl Module { )), Validated::NonExisting(member_id) => { let repayable_bloat_bond = match locked_balance_used - <= bloat_bond.saturating_mul((bloat_bond_index as u32).into()) + <= bloat_bond.saturating_mul((bloat_bond_index).into()) { true => RepayableBloatBond::new(bloat_bond, None), false => RepayableBloatBond::new(bloat_bond, Some(from.clone())), @@ -1870,4 +2181,30 @@ impl Module { .collect::, DispatchError>>()?; Ok(Transfers(transfers_set)) } + + pub(crate) fn ensure_amm_can_be_deactivated(token: &TokenDataOf) -> DispatchResult { + let AmmCurve { + provided_supply, .. + } = OfferingStateOf::::ensure_amm_of::(token)?; + let threshold = Self::amm_deactivation_threshold(); + let pct_of_issuance_minted = Permill::from_rational(provided_supply, token.total_supply); + ensure!( + pct_of_issuance_minted <= threshold, + Error::::OutstandingAmmProvidedSupplyTooLarge, + ); + Ok(()) + } + + fn ensure_unfrozen_state() -> DispatchResult { + ensure!(!Self::pallet_frozen(), Error::::PalletFrozen); + + Ok(()) + } +} + +impl frame_support::traits::Hooks for Pallet { + #[cfg(feature = "try-runtime")] + fn try_state(_: T::BlockNumber) -> Result<(), &'static str> { + Ok(()) + } } diff --git a/runtime-modules/project-token/src/tests/amm.rs b/runtime-modules/project-token/src/tests/amm.rs new file mode 100644 index 0000000000..f60e3d6538 --- /dev/null +++ b/runtime-modules/project-token/src/tests/amm.rs @@ -0,0 +1,1085 @@ +#![cfg(test)] + +use crate::tests::fixtures::*; +use crate::tests::mock::*; +use crate::types::{AmmCurve, AmmOperation, VestingScheduleParamsOf}; +use crate::{joy, last_event_eq, member, token, Error, RawEvent, RepayableBloatBondOf}; +use frame_support::{assert_err, assert_ok}; +use frame_system::RawOrigin; +use sp_arithmetic::traits::One; +use sp_runtime::{traits::Zero, DispatchError, Permill}; + +// --------------------- amm_buy ------------------------------- +// price = eval_function(amount, amm_provided_supply, slope, intercept) +// amm_treasury_balance += price +// user_balance -= price + buy_fees + +#[test] +fn amm_buy_noop_ok_with_zero_requested_amount() { + let config = GenesisConfigBuilder::new_empty().build(); + build_test_externalities(config).execute_with(|| { + IssueTokenFixture::default().execute_call().unwrap(); + ActivateAmmFixture::default().execute_call().unwrap(); + let state_pre = sp_io::storage::root(sp_storage::StateVersion::V1); + + let result = AmmBuyFixture::default() + .with_amount(0u32.into()) + .execute_call(); + + let state_post = sp_io::storage::root(sp_storage::StateVersion::V1); + assert_ok!(result); + assert_eq!(state_pre, state_post); + }) +} + +#[test] +fn amm_buy_fails_with_invalid_token_specified() { + let config = GenesisConfigBuilder::new_empty().build(); + let token_id = token!(2); + build_test_externalities(config).execute_with(|| { + IssueTokenFixture::default().execute_call().unwrap(); + ActivateAmmFixture::default().execute_call().unwrap(); + + let result = AmmBuyFixture::default() + .with_token_id(token_id) + .execute_call(); + + assert_err!(result, Error::::TokenDoesNotExist); + }) +} + +#[test] +fn amm_buy_fails_with_member_and_origin_auth() { + let config = GenesisConfigBuilder::new_empty().build(); + let (_, sender) = member!(3); + build_test_externalities(config).execute_with(|| { + IssueTokenFixture::default().execute_call().unwrap(); + ActivateAmmFixture::default().execute_call().unwrap(); + + let result = AmmBuyFixture::default().with_sender(sender).execute_call(); + + assert_err!( + result, + DispatchError::Other("origin signer not a member controller account") + ); + }) +} + +#[test] +fn amm_buy_succeeds_with_new_user() { + let token_id = token!(1); + let (user_member_id, user_account_id) = member!(2); + build_default_test_externalities_with_balances(vec![( + user_account_id, + amm_function_buy_values_with_tx_fees(DEFAULT_AMM_BUY_AMOUNT, Zero::zero()) + ed(), + )]) + .execute_with(|| { + IssueTokenFixture::default().execute_call().unwrap(); + ActivateAmmFixture::default().execute_call().unwrap(); + let account_number_pre = Token::token_info_by_id(token_id).accounts_number; + + AmmBuyFixture::default() + .with_sender(user_account_id) + .with_amount(DEFAULT_AMM_BUY_AMOUNT) + .with_member_id(user_member_id) + .execute_call() + .unwrap(); + + let account_number_post = Token::token_info_by_id(token_id).accounts_number; + let account_data = Token::ensure_account_data_exists(token_id, &user_member_id).unwrap(); + assert_eq!(account_number_post - account_number_pre, 1); + assert_eq!(account_data.amount, DEFAULT_AMM_BUY_AMOUNT); + assert_eq!( + account_data.bloat_bond, + RepayableBloatBondOf::::new(Token::bloat_bond(), None) + ); + }) +} + +#[test] +fn amm_buy_fails_with_token_not_in_amm_state() { + let config = GenesisConfigBuilder::new_empty().build(); + build_test_externalities(config).execute_with(|| { + IssueTokenFixture::default().execute_call().unwrap(); + + let result = AmmBuyFixture::default().execute_call(); + + assert_err!(result, Error::::NotInAmmState); + }) +} + +#[test] +fn amm_buy_succeeds_with_existing_user() { + let token_id = token!(1); + let (user_member_id, user_account_id) = member!(2); + build_default_test_externalities_with_balances(vec![( + user_account_id, + DEFAULT_SALE_PURCHASE_AMOUNT * DEFAULT_SALE_UNIT_PRICE + ed(), + )]) + .execute_with(|| { + IssueTokenFixture::default().execute_call().unwrap(); + InitTokenSaleFixture::default() + .with_unit_price(One::one()) + .execute_call() + .unwrap(); + PurchaseTokensOnSaleFixture::default() + .with_sender(user_account_id) + .with_member_id(user_member_id) + .call_and_assert(Ok(())); + increase_block_number_by(DEFAULT_SALE_DURATION); + FinalizeTokenSaleFixture::default().call_and_assert(Ok(())); + make_free_balance_be( + &user_account_id, + amm_function_buy_values_with_tx_fees(DEFAULT_AMM_BUY_AMOUNT, Zero::zero()) + ed(), + ); + ActivateAmmFixture::default().execute_call().unwrap(); + let user_amount_pre = Token::ensure_account_data_exists(token_id, &user_member_id) + .unwrap() + .amount; + + AmmBuyFixture::default() + .with_sender(user_account_id) + .with_amount(DEFAULT_AMM_BUY_AMOUNT) + .with_member_id(user_member_id) + .execute_call() + .unwrap(); + + let user_amount_post = Token::ensure_account_data_exists(token_id, &user_member_id) + .unwrap() + .amount; + assert_eq!(user_amount_post - user_amount_pre, DEFAULT_AMM_BUY_AMOUNT); + }) +} + +#[test] +fn amm_buy_failed_with_slippage_constraint_violated() { + let slippage_tolerance = (Permill::zero(), Balance::zero()); + amm_function_buy_values_with_tx_fees(DEFAULT_AMM_BUY_AMOUNT, Zero::zero()); + let (_, user_account_id) = member!(2); + build_default_test_externalities_with_balances(vec![( + user_account_id, + amm_function_buy_values_with_tx_fees(DEFAULT_AMM_BUY_AMOUNT, Zero::zero()) + ed(), + )]) + .execute_with(|| { + IssueTokenFixture::default().execute_call().unwrap(); + ActivateAmmFixture::default().execute_call().unwrap(); + + let result = AmmBuyFixture::default() + .with_slippage_tolerance(slippage_tolerance) + .execute_call(); + + assert_err!(result, Error::::SlippageToleranceExceeded); + }) +} + +#[test] +fn amm_buy_fails_with_pricing_function_overflow() { + let amount = Balance::max_value(); + let (_, user_account_id) = member!(2); + build_default_test_externalities_with_balances(vec![( + user_account_id, + amm_function_buy_values_with_tx_fees(DEFAULT_AMM_BUY_AMOUNT, Zero::zero()) + ed(), + )]) + .execute_with(|| { + IssueTokenFixture::default().execute_call().unwrap(); + ActivateAmmFixture::default().execute_call().unwrap(); + + let result = AmmBuyFixture::default().with_amount(amount).execute_call(); + + assert_err!(result, Error::::ArithmeticError); + }) +} + +#[test] +fn amm_buy_ok_with_creator_token_issuance_increased() { + let token_id = token!(1); + let (_, user_account_id) = member!(2); + build_default_test_externalities_with_balances(vec![( + user_account_id, + amm_function_buy_values_with_tx_fees(DEFAULT_AMM_BUY_AMOUNT, Zero::zero()) + ed(), + )]) + .execute_with(|| { + IssueTokenFixture::default().execute_call().unwrap(); + ActivateAmmFixture::default().execute_call().unwrap(); + let supply_pre = Token::token_info_by_id(token_id).total_supply; + + AmmBuyFixture::default() + .with_amount(DEFAULT_AMM_BUY_AMOUNT) + .execute_call() + .unwrap(); + + let supply_post = Token::token_info_by_id(token_id).total_supply; + assert_eq!(supply_post, supply_pre + DEFAULT_AMM_BUY_AMOUNT); + }) +} + +#[test] +fn amm_treasury_balance_correctly_increased_during_amm_buy() { + let token_id = token!(1); + let (user_member_id, user_account_id) = member!(2); + let price = amm_function_values(DEFAULT_AMM_BUY_AMOUNT, Zero::zero(), AmmOperation::Buy); + build_default_test_externalities_with_balances(vec![( + user_account_id, + amm_function_buy_values_with_tx_fees(DEFAULT_AMM_BUY_AMOUNT, Zero::zero()) + ed(), + )]) + .execute_with(|| { + IssueTokenFixture::default().execute_call().unwrap(); + ActivateAmmFixture::default().execute_call().unwrap(); + let amm_reserve_account = Token::amm_treasury_account(token_id); + let amm_reserve_pre = Balances::usable_balance(amm_reserve_account); + + AmmBuyFixture::default() + .with_amount(DEFAULT_AMM_BUY_AMOUNT) + .with_sender(user_account_id) + .with_member_id(user_member_id) + .execute_call() + .unwrap(); + + let amm_reserve_post = Balances::usable_balance(amm_reserve_account); + assert_eq!(amm_reserve_post - amm_reserve_pre, price); + }) +} + +#[test] +fn amm_buy_fails_with_user_not_having_sufficient_usable_joy_required() { + let config = GenesisConfigBuilder::new_empty().build(); + build_test_externalities(config).execute_with(|| { + IssueTokenFixture::default().execute_call().unwrap(); + ActivateAmmFixture::default().execute_call().unwrap(); + + let result = AmmBuyFixture::default().execute_call(); + + assert_err!(result, Error::::InsufficientJoyBalance); + }) +} + +#[test] +fn user_joy_balance_correctly_decreased_during_amm_buy() { + let user_joy_variation = + amm_function_buy_values_with_tx_fees(DEFAULT_AMM_BUY_AMOUNT, Zero::zero()); + let (_, user_account_id) = member!(2); + build_default_test_externalities_with_balances(vec![( + user_account_id, + user_joy_variation + ed(), + )]) + .execute_with(|| { + IssueTokenFixture::default().execute_call().unwrap(); + ActivateAmmFixture::default().execute_call().unwrap(); + let user_reserve_pre = Balances::usable_balance(user_account_id); + + AmmBuyFixture::default() + .with_amount(DEFAULT_AMM_BUY_AMOUNT) + .execute_call() + .unwrap(); + + let user_reserve_post = Balances::usable_balance(user_account_id); + assert_eq!(user_reserve_pre - user_reserve_post, user_joy_variation); + }) +} + +#[test] +fn amm_buy_ok_with_event_deposit() { + let token_id = token!(1); + let (user_member_id, user_account_id) = member!(2); + let buy_price = amm_function_buy_values_with_tx_fees(DEFAULT_AMM_BUY_AMOUNT, Zero::zero()); + build_default_test_externalities_with_balances(vec![(user_account_id, buy_price + ed())]) + .execute_with(|| { + IssueTokenFixture::default().execute_call().unwrap(); + ActivateAmmFixture::default().execute_call().unwrap(); + + AmmBuyFixture::default() + .with_amount(DEFAULT_AMM_BUY_AMOUNT) + .execute_call() + .unwrap(); + + last_event_eq!(RawEvent::TokensBoughtOnAmm( + token_id, + user_member_id, + DEFAULT_AMM_BUY_AMOUNT, + buy_price, + )); + }) +} + +// --------------- ACTIVATION ---------------------------------- + +#[test] +fn amm_activation_fails_with_slope_parameter_too_low() { + build_default_test_externalities_with_balances(vec![]).execute_with(|| { + IssueTokenFixture::default().execute_call().unwrap(); + let result = ActivateAmmFixture::default() + .with_linear_function_params(Zero::zero(), AMM_CURVE_INTERCEPT) + .execute_call(); + + assert_err!(result, Error::::CurveSlopeParametersTooLow); + }) +} + +#[test] +fn amm_activation_fails_with_invalid_token_id() { + let token_id = token!(2); + let config = GenesisConfigBuilder::new_empty().build(); + + build_test_externalities(config).execute_with(|| { + IssueTokenFixture::default().execute_call().unwrap(); + let result = ActivateAmmFixture::default() + .with_token_id(token_id) + .execute_call(); + + assert_err!(result, Error::::TokenDoesNotExist); + }) +} + +#[test] +fn activation_fails_when_status_is_not_idle() { + let config = GenesisConfigBuilder::new_empty().build(); + build_test_externalities(config).execute_with(|| { + IssueTokenFixture::default().execute_call().unwrap(); + InitTokenSaleFixture::default().call_and_assert(Ok(())); + + let result = ActivateAmmFixture::default().execute_call(); + + assert_err!(result, Error::::TokenIssuanceNotInIdleState); + }) +} + +#[test] +fn activation_fails_when_amm_status_already_active() { + let config = GenesisConfigBuilder::new_empty().build(); + build_test_externalities(config).execute_with(|| { + IssueTokenFixture::default() + .with_empty_allocation() + .execute_call() + .unwrap(); + ActivateAmmFixture::default().execute_call().unwrap(); + + let result = ActivateAmmFixture::default().execute_call(); + + assert_err!(result, Error::::TokenIssuanceNotInIdleState); + }) +} + +#[test] +fn amm_activation_successful() { + let slope = AMM_CURVE_SLOPE; + let intercept = AMM_CURVE_INTERCEPT; + let config = GenesisConfigBuilder::new_empty().build(); + build_test_externalities(config).execute_with(|| { + IssueTokenFixture::default().execute_call().unwrap(); + + ActivateAmmFixture::default() + .with_linear_function_params(slope, intercept) + .execute_call() + .unwrap(); + + let token = Token::token_info_by_id(1); + assert_eq!( + IssuanceState::of::(&token), + IssuanceState::Amm(AmmCurve { + slope, + intercept, + provided_supply: 0u32.into(), + }) + ); + }) +} + +#[test] +fn amm_activation_ok_with_amm_treasury_account_having_existential_deposit() { + let token_id = token!(1); + let config = GenesisConfigBuilder::new_empty().build(); + + build_test_externalities(config).execute_with(|| { + IssueTokenFixture::default().execute_call().unwrap(); + + ActivateAmmFixture::default().execute_call().unwrap(); + + let amm_treasury_account = Token::amm_treasury_account(token_id); + assert_eq!( + Balances::usable_balance(amm_treasury_account), + ExistentialDeposit::get() + ); + }) +} + +#[test] +fn amm_activation_ok_with_event_deposit() { + let token_id = token!(1); + let (creator_id, _) = member!(1); + let config = GenesisConfigBuilder::new_empty().build(); + build_test_externalities(config).execute_with(|| { + IssueTokenFixture::default().execute_call().unwrap(); + ActivateAmmFixture::default() + .with_linear_function_params(AMM_CURVE_SLOPE, AMM_CURVE_INTERCEPT) + .execute_call() + .unwrap(); + + last_event_eq!(RawEvent::AmmActivated( + token_id, + creator_id, + AmmCurve { + slope: AMM_CURVE_SLOPE, + intercept: AMM_CURVE_INTERCEPT, + provided_supply: 0u32.into(), + } + )); + }) +} + +// --------------------- amm_sell ------------------------------- +// price = eval_function(amount, amm_sprovided_supply, slope, intercept) +// user_balance += price - sell_fees +// amm_treasury_balance -= price + +#[test] +fn amm_sell_noop_ok_with_zero_requested_amount() { + let (_, user_account_id) = member!(2); + build_default_test_externalities_with_balances(vec![( + user_account_id, + amm_function_buy_values_with_tx_fees(DEFAULT_AMM_BUY_AMOUNT, Zero::zero()) + ed(), + )]) + .execute_with(|| { + IssueTokenFixture::default().execute_call().unwrap(); + ActivateAmmFixture::default().execute_call().unwrap(); + AmmBuyFixture::default().execute_call().unwrap(); + let state_pre = sp_io::storage::root(sp_storage::StateVersion::V1); + + let result = AmmSellFixture::default() + .with_amount(0u32.into()) + .execute_call(); + + let state_post = sp_io::storage::root(sp_storage::StateVersion::V1); + assert_ok!(result); + assert_eq!(state_pre, state_post); + }) +} + +#[test] +fn amm_sell_fails_with_user_not_having_leaking_funds_from_vesting_schedule() { + const DURATION: u64 = 2 * DEFAULT_SALE_DURATION; + let initial_amount = + amm_function_buy_values_with_tx_fees(DEFAULT_AMM_BUY_AMOUNT, DEFAULT_INITIAL_ISSUANCE); + let (alice_joys, bob_joys) = (initial_amount + ed(), initial_amount + ed()); + let (alice_id, alice_account) = member!(2); + let (bob_id, bob_account) = member!(3); + build_default_test_externalities_with_balances(vec![ + (alice_account, alice_joys), + (bob_account, bob_joys), + ]) + .execute_with(|| { + // ------------ arrange ----------------- + + // 1. Create token + IssueTokenFixture::default().execute_call().unwrap(); + + // 2. issue a sale and have alice being vested + InitTokenSaleFixture::default() + .with_vesting_schedule_params(Some(VestingScheduleParamsOf:: { + linear_vesting_duration: DURATION, + blocks_before_cliff: 0u64, + cliff_amount_percentage: Permill::zero(), + })) + .execute_call() + .unwrap(); + PurchaseTokensOnSaleFixture::default() + .with_sender(alice_account) + .with_member_id(alice_id) + .with_amount(DEFAULT_AMM_BUY_AMOUNT) + .call_and_assert(Ok(())); + increase_block_number_by(DEFAULT_SALE_DURATION); + FinalizeTokenSaleFixture::default().call_and_assert(Ok(())); + + // 3. activate amm and have bob minting some tokens + ActivateAmmFixture::default().execute_call().unwrap(); + AmmBuyFixture::default() + .with_sender(bob_account) + .with_member_id(bob_id) + .with_amount(DEFAULT_AMM_BUY_AMOUNT) + .execute_call() + .unwrap(); + + // ----------------- act ------------------- + let result = AmmSellFixture::default() + .with_sender(alice_account) + .with_member_id(alice_id) + .with_amount(DEFAULT_AMM_BUY_AMOUNT) + .execute_call(); + + // ---------------- assert ----------------- + // Alice is now being vested but she has 0 transferrable amount + assert_err!(result, Error::::InsufficientTokenBalance); + }) +} +#[test] +fn amm_sell_fails_with_user_not_having_enough_token_balance() { + let (user_id, user_account) = member!(2); + build_default_test_externalities_with_balances(vec![( + user_account, + amm_function_buy_values_with_tx_fees(DEFAULT_AMM_BUY_AMOUNT, Zero::zero()) + ed(), + )]) + .execute_with(|| { + IssueTokenFixture::default().execute_call().unwrap(); + ActivateAmmFixture::default().execute_call().unwrap(); + AmmBuyFixture::default() + .with_sender(user_account) + .with_member_id(user_id) + .with_amount(DEFAULT_AMM_BUY_AMOUNT) + .execute_call() + .unwrap(); + + let result = AmmSellFixture::default() + .with_amount(2 * DEFAULT_AMM_BUY_AMOUNT) + .execute_call(); + + assert_err!(result, Error::::InsufficientTokenBalance); + }) +} + +#[test] +fn amm_sell_fails_with_invalid_token_specified() { + let token_id = token!(2); + let user_joy_variation = + amm_function_buy_values_with_tx_fees(DEFAULT_AMM_BUY_AMOUNT, Zero::zero()); + let (_, user_account_id) = member!(2); + build_default_test_externalities_with_balances(vec![( + user_account_id, + user_joy_variation + ed(), + )]) + .execute_with(|| { + IssueTokenFixture::default().execute_call().unwrap(); + ActivateAmmFixture::default().execute_call().unwrap(); + AmmBuyFixture::default().execute_call().unwrap(); + + let result = AmmSellFixture::default() + .with_token_id(token_id) + .execute_call(); + + assert_err!(result, Error::::TokenDoesNotExist); + }) +} + +#[test] +fn amm_sell_fails_with_invalid_account_info_specified() { + let token_id = token!(1); + let config = GenesisConfigBuilder::new_empty().build(); + let (user_member_id, user_account_id) = member!(3); + build_test_externalities(config).execute_with(|| { + IssueTokenFixture::default().execute_call().unwrap(); + ActivateAmmFixture::default().execute_call().unwrap(); + + let result = AmmSellFixture::default() + .with_sender(user_account_id) + .with_member_id(user_member_id) + .with_token_id(token_id) + .execute_call(); + + assert_err!(result, Error::::AccountInformationDoesNotExist); + }) +} + +#[test] +fn amm_sell_fails_with_member_and_origin_auth() { + let (_, sender) = member!(3); + let user_joy_variation = + amm_function_buy_values_with_tx_fees(DEFAULT_AMM_BUY_AMOUNT, DEFAULT_INITIAL_ISSUANCE); + let (_, user_account_id) = member!(2); + build_default_test_externalities_with_balances(vec![( + user_account_id, + user_joy_variation + ed(), + )]) + .execute_with(|| { + IssueTokenFixture::default().execute_call().unwrap(); + ActivateAmmFixture::default().execute_call().unwrap(); + AmmBuyFixture::default().execute_call().unwrap(); + + let result = AmmSellFixture::default().with_sender(sender).execute_call(); + + assert_err!( + result, + DispatchError::Other("origin signer not a member controller account") + ); + }) +} + +#[test] +fn amm_sell_fails_with_token_not_in_amm_state() { + let user_joy_variation = + amm_function_buy_values_with_tx_fees(DEFAULT_AMM_BUY_AMOUNT, DEFAULT_INITIAL_ISSUANCE); + let (_, user_account_id) = member!(2); + build_default_test_externalities_with_balances(vec![( + user_account_id, + user_joy_variation + ed(), + )]) + .execute_with(|| { + IssueTokenFixture::default().execute_call().unwrap(); + + let result = AmmSellFixture::default().execute_call(); + + assert_err!(result, Error::::NotInAmmState); + }) +} + +#[test] +fn amm_sell_failed_with_slippage_constraint_violated() { + let slippage_tolerance = (Permill::zero(), joy!(1000_000_000_000)); + let user_joy_variation = + amm_function_buy_values_with_tx_fees(DEFAULT_AMM_BUY_AMOUNT, Zero::zero()); + let (_, user_account_id) = member!(2); + build_default_test_externalities_with_balances(vec![( + user_account_id, + user_joy_variation + ed(), + )]) + .execute_with(|| { + IssueTokenFixture::default().execute_call().unwrap(); + ActivateAmmFixture::default().execute_call().unwrap(); + AmmBuyFixture::default().execute_call().unwrap(); + + let result = AmmSellFixture::default() + .with_slippage_tolerance(slippage_tolerance) + .execute_call(); + + assert_err!(result, Error::::SlippageToleranceExceeded); + }) +} + +#[test] +fn amm_treasury_balance_correctly_decreased_during_amm_sell() { + let token_id = token!(1); + let (user_member_id, user_account_id) = member!(2); + build_default_test_externalities_with_balances(vec![( + user_account_id, + amm_function_buy_values_with_tx_fees(DEFAULT_AMM_BUY_AMOUNT, Zero::zero()) + ed(), + )]) + .execute_with(|| { + IssueTokenFixture::default().execute_call().unwrap(); + ActivateAmmFixture::default().execute_call().unwrap(); + AmmBuyFixture::default() + .with_amount(DEFAULT_AMM_BUY_AMOUNT) + .with_member_id(user_member_id) + .execute_call() + .unwrap(); + let amm_reserve_account = Token::amm_treasury_account(token_id); + let amm_reserve_pre = Balances::usable_balance(amm_reserve_account); + let amm_provided_supply = Token::token_info_by_id(token_id) + .amm_curve + .unwrap() + .provided_supply; + let price = amm_function_values( + DEFAULT_AMM_SELL_AMOUNT, + amm_provided_supply, + AmmOperation::Sell, + ); + + AmmSellFixture::default() + .with_amount(DEFAULT_AMM_SELL_AMOUNT) + .with_sender(user_account_id) + .with_member_id(user_member_id) + .execute_call() + .unwrap(); + + let amm_reserve_post = Balances::usable_balance(amm_reserve_account); + assert_eq!(amm_reserve_post, amm_reserve_pre - price); + }) +} + +#[test] +fn amm_sell_ok_with_crt_issuance_decreased() { + let token_id = token!(1); + let (_, user_account_id) = member!(2); + build_default_test_externalities_with_balances(vec![( + user_account_id, + amm_function_buy_values_with_tx_fees(DEFAULT_AMM_BUY_AMOUNT, Zero::zero()) + ed(), + )]) + .execute_with(|| { + IssueTokenFixture::default().execute_call().unwrap(); + ActivateAmmFixture::default().execute_call().unwrap(); + AmmBuyFixture::default().execute_call().unwrap(); + let supply_pre = Token::token_info_by_id(token_id).total_supply; + + AmmSellFixture::default() + .with_amount(DEFAULT_AMM_SELL_AMOUNT) + .execute_call() + .unwrap(); + + let supply_post = Token::token_info_by_id(token_id).total_supply; + assert_eq!(supply_pre - supply_post, DEFAULT_AMM_SELL_AMOUNT); + }) +} + +#[test] +fn amm_sell_fails_with_amm_treasury_not_having_sufficient_usable_joy_required() { + let token_id = token!(1); + let user_joy_variation = + amm_function_buy_values_with_tx_fees(DEFAULT_AMM_BUY_AMOUNT, Zero::zero()); + let (_, user_account_id) = member!(2); + build_default_test_externalities_with_balances(vec![( + user_account_id, + user_joy_variation + ed(), + )]) + .execute_with(|| { + IssueTokenFixture::default().execute_call().unwrap(); + ActivateAmmFixture::default().execute_call().unwrap(); + AmmBuyFixture::default().execute_call().unwrap(); + // setting the balance of teh amm_buy curve reserve to 0 + Balances::set_balance( + RuntimeOrigin::root(), + Token::amm_treasury_account(token_id), + Balance::zero(), + Balance::zero(), + ) + .unwrap(); + + let result = AmmSellFixture::default().execute_call(); + + assert_err!(result, Error::::InsufficientJoyBalance); + }) +} + +#[test] +fn amm_sell_ok_with_user_joy_balance_correctly_increased() { + let token_id = token!(1); + let (_, user_account_id) = member!(2); + build_default_test_externalities_with_balances(vec![( + user_account_id, + amm_function_buy_values_with_tx_fees(DEFAULT_AMM_BUY_AMOUNT, Zero::zero()) + ed(), + )]) + .execute_with(|| { + IssueTokenFixture::default() + .with_empty_allocation() + .execute_call() + .unwrap(); + ActivateAmmFixture::default().execute_call().unwrap(); + AmmBuyFixture::default().execute_call().unwrap(); + let user_reserve_pre = Balances::usable_balance(user_account_id); + let amm_provided_supply = Token::token_info_by_id(token_id) + .amm_curve + .unwrap() + .provided_supply; + let user_joy_variation = + amm_function_sell_values_with_tx_fees(DEFAULT_AMM_SELL_AMOUNT, amm_provided_supply); + + AmmSellFixture::default() + .with_amount(DEFAULT_AMM_SELL_AMOUNT) + .execute_call() + .unwrap(); + + let user_reserve_post = Balances::usable_balance(user_account_id); + assert_eq!(user_reserve_post - user_reserve_pre, user_joy_variation); + }) +} + +#[test] +fn amm_sell_ok_with_user_crt_amount_correctly_decreased() { + let token_id = token!(1); + let (user_member_id, user_account_id) = member!(2); + build_default_test_externalities_with_balances(vec![( + user_account_id, + amm_function_buy_values_with_tx_fees(DEFAULT_AMM_BUY_AMOUNT, Zero::zero()) + ed(), + )]) + .execute_with(|| { + IssueTokenFixture::default().execute_call().unwrap(); + ActivateAmmFixture::default().execute_call().unwrap(); + AmmBuyFixture::default().execute_call().unwrap(); + let user_crt_pre = Token::account_info_by_token_and_member(token_id, user_member_id).amount; + + AmmSellFixture::default() + .with_amount(DEFAULT_AMM_SELL_AMOUNT) + .with_member_id(user_member_id) + .with_sender(user_account_id) + .execute_call() + .unwrap(); + + let user_crt_post = + Token::account_info_by_token_and_member(token_id, user_member_id).amount; + assert_eq!(user_crt_pre - user_crt_post, DEFAULT_AMM_SELL_AMOUNT); + }) +} + +#[test] +fn amm_sell_fails_with_more_token_sold_than_amm_supply() { + let amount = 10u128; + let (user_member_id, user_account_id) = member!(1); // same member id as the creator + build_default_test_externalities_with_balances(vec![( + user_account_id, + amm_function_buy_values_with_tx_fees(DEFAULT_AMM_BUY_AMOUNT, Zero::zero()) + ed(), + )]) + .execute_with(|| { + IssueTokenFixture::default() + .with_supply(1000) + .execute_call() + .unwrap(); + ActivateAmmFixture::default().execute_call().unwrap(); + AmmBuyFixture::default() + .with_sender(user_account_id) + .with_member_id(user_member_id) + .with_amount(amount) + .execute_call() + .unwrap(); + AmmBuyFixture::default() + .with_sender(user_account_id) + .with_member_id(user_member_id) + .with_amount(amount) + .execute_call() + .unwrap(); + + let res = AmmSellFixture::default() + .with_sender(user_account_id) + .with_amount(amount * 3) + .with_member_id(user_member_id) + .with_sender(user_account_id) + .execute_call(); + + assert_err!(res, Error::::NotEnoughTokenMintedByAmmForThisSale); + }) +} + +#[test] +fn amm_sell_ok_with_event_deposited() { + let token_id = token!(1); + let (user_member_id, user_account_id) = member!(2); + build_default_test_externalities_with_balances(vec![( + user_account_id, + amm_function_buy_values_with_tx_fees(DEFAULT_AMM_BUY_AMOUNT, Zero::zero()) + ed(), + )]) + .execute_with(|| { + IssueTokenFixture::default() + .with_empty_allocation() + .execute_call() + .unwrap(); + ActivateAmmFixture::default().execute_call().unwrap(); + AmmBuyFixture::default() + .with_sender(user_account_id) + .with_member_id(user_member_id) + .execute_call() + .unwrap(); + let amm_provided_supply = Token::token_info_by_id(token_id) + .amm_curve + .unwrap() + .provided_supply; + let sell_price = + amm_function_sell_values_with_tx_fees(DEFAULT_AMM_SELL_AMOUNT, amm_provided_supply); + + AmmSellFixture::default() + .with_amount(DEFAULT_AMM_SELL_AMOUNT) + .with_sender(user_account_id) + .with_member_id(user_member_id) + .execute_call() + .unwrap(); + + last_event_eq!(RawEvent::TokensSoldOnAmm( + token_id, + user_member_id, + DEFAULT_AMM_SELL_AMOUNT, + sell_price, + )); + }) +} + +// ------------------- DEACTIVATE --------------------------------------- + +#[test] +fn deactivate_fails_with_token_not_in_amm_state() { + let config = GenesisConfigBuilder::new_empty().build(); + build_test_externalities(config).execute_with(|| { + IssueTokenFixture::default().execute_call().unwrap(); + + let result = DeactivateAmmFixture::default().execute_call(); + + assert_err!(result, Error::::NotInAmmState); + }) +} + +#[test] +fn deactivate_fails_with_invalid_token_id() { + let config = GenesisConfigBuilder::new_empty().build(); + let token_id = token!(2); + build_test_externalities(config).execute_with(|| { + IssueTokenFixture::default().execute_call().unwrap(); + ActivateAmmFixture::default().execute_call().unwrap(); + + let result = DeactivateAmmFixture::default() + .with_token_id(token_id) + .execute_call(); + + assert_err!(result, Error::::TokenDoesNotExist); + }) +} + +#[test] +fn deactivate_fails_with_too_much_amm_provided_supply_outstanding() { + let amm_joy_variation = + amm_function_buy_values_with_tx_fees(DEFAULT_AMM_BUY_AMOUNT, Zero::zero()); + let (user_member_id, user_account_id) = member!(2); + build_default_test_externalities_with_balances(vec![( + user_account_id, + amm_joy_variation + ed(), + )]) + .execute_with(|| { + IssueTokenFixture::default() + .with_supply(DEFAULT_AMM_BUY_AMOUNT) + .execute_call() + .unwrap(); + ActivateAmmFixture::default().execute_call().unwrap(); + AmmBuyFixture::default() + .with_sender(user_account_id) + .with_member_id(user_member_id) + .execute_call() + .unwrap(); + + let result = DeactivateAmmFixture::default().execute_call(); + + assert_err!(result, Error::::OutstandingAmmProvidedSupplyTooLarge); + }) +} + +#[test] +fn deactivate_ok_with_status_set_to_idle() { + let token_id = token!(1); + let config = GenesisConfigBuilder::new_empty().build(); + build_test_externalities(config).execute_with(|| { + IssueTokenFixture::default().execute_call().unwrap(); + ActivateAmmFixture::default().execute_call().unwrap(); + + DeactivateAmmFixture::default().execute_call().unwrap(); + + let token = Token::token_info_by_id(token_id); + assert_eq!(IssuanceState::of::(&token), IssuanceState::Idle); + }) +} + +#[test] +fn deactivate_ok_with_amm_buy_curve_params_set_to_none() { + let token_id = token!(1); + let config = GenesisConfigBuilder::new_empty().build(); + build_test_externalities(config).execute_with(|| { + IssueTokenFixture::default().execute_call().unwrap(); + ActivateAmmFixture::default().execute_call().unwrap(); + + DeactivateAmmFixture::default().execute_call().unwrap(); + + let token = Token::token_info_by_id(token_id); + assert!(token.amm_curve.is_none()); + }) +} + +#[test] +fn deactivate_ok_with_full_cycle_from_activation() { + let token_id = token!(1); + let (user_member_id, user_account_id) = member!(2); + build_default_test_externalities_with_balances(vec![( + user_account_id, + amm_function_buy_values_with_tx_fees(DEFAULT_AMM_BUY_AMOUNT, Zero::zero()) + ed(), + )]) + .execute_with(|| { + IssueTokenFixture::default().execute_call().unwrap(); + ActivateAmmFixture::default().execute_call().unwrap(); + AmmBuyFixture::default() + .with_sender(user_account_id) + .with_member_id(user_member_id) + .with_amount(DEFAULT_AMM_BUY_AMOUNT) + .execute_call() + .unwrap(); + + AmmSellFixture::default() + .with_sender(user_account_id) + .with_member_id(user_member_id) + .with_amount(DEFAULT_AMM_BUY_AMOUNT) + .execute_call() + .unwrap(); + + DeactivateAmmFixture::default().execute_call().unwrap(); + + let amm_treasury_account = Token::amm_treasury_account(token_id); + assert_eq!( + Balances::usable_balance(amm_treasury_account), + ExistentialDeposit::get() + ); + }) +} + +#[test] +fn amm_deactivation_ok_with_event_deposit() { + let token_id = token!(1); + let (creator_id, _) = member!(1); + let amount_burned = 0; + let config = GenesisConfigBuilder::new_empty().build(); + build_test_externalities(config).execute_with(|| { + IssueTokenFixture::default().execute_call().unwrap(); + ActivateAmmFixture::default() + .with_token_id(token_id) + .with_member_id(creator_id) + .execute_call() + .unwrap(); + + DeactivateAmmFixture::default() + .with_token_id(token_id) + .with_member_id(creator_id) + .execute_call() + .unwrap(); + + last_event_eq!(RawEvent::AmmDeactivated( + token_id, + creator_id, + amount_burned + )); + }) +} + +#[test] +fn amm_buy_fails_when_pallet_frozen() { + let amm_joy_variation = + amm_function_buy_values_with_tx_fees(DEFAULT_AMM_BUY_AMOUNT, Zero::zero()); + let (_, user_account_id) = member!(2); + build_default_test_externalities_with_balances(vec![( + user_account_id, + amm_joy_variation + ed(), + )]) + .execute_with(|| { + IssueTokenFixture::default().execute_call().unwrap(); + ActivateAmmFixture::default().execute_call().unwrap(); + + AmmBuyFixture::default() + .with_amount(DEFAULT_AMM_BUY_AMOUNT) + .execute_call() + .unwrap(); + + assert_ok!(Token::set_frozen_status(RawOrigin::Root.into(), true)); + + assert_err!( + AmmBuyFixture::default() + .with_amount(DEFAULT_AMM_BUY_AMOUNT) + .execute_call(), + Error::::PalletFrozen + ); + }) +} + +#[test] +fn amm_sell_fails_when_pallet_frozen() { + let amm_joy_variation = + amm_function_buy_values_with_tx_fees(DEFAULT_AMM_BUY_AMOUNT, Zero::zero()); + let (_, user_account_id) = member!(2); + build_default_test_externalities_with_balances(vec![( + user_account_id, + amm_joy_variation + ed(), + )]) + .execute_with(|| { + IssueTokenFixture::default().execute_call().unwrap(); + ActivateAmmFixture::default().execute_call().unwrap(); + AmmBuyFixture::default().execute_call().unwrap(); + + AmmSellFixture::default() + .with_amount(0u32.into()) + .execute_call() + .unwrap(); + + assert_ok!(Token::set_frozen_status(RawOrigin::Root.into(), true)); + + assert_err!( + AmmSellFixture::default() + .with_amount(0u32.into()) + .execute_call(), + Error::::PalletFrozen + ); + }) +} diff --git a/runtime-modules/project-token/src/tests/canonical.rs b/runtime-modules/project-token/src/tests/canonical.rs index 5084ce7870..4240a2b604 100644 --- a/runtime-modules/project-token/src/tests/canonical.rs +++ b/runtime-modules/project-token/src/tests/canonical.rs @@ -1,21 +1,21 @@ #![cfg(test)] use frame_support::{assert_noop, assert_ok, StorageDoubleMap, StorageMap}; -use sp_runtime::{traits::Hash, Permill, Perquintill}; +use sp_runtime::Permill; -use crate::tests::fixtures::default_upload_context; +use crate::tests::fixtures::*; use crate::tests::mock::*; use crate::tests::test_utils::{default_vesting_schedule, TokenDataBuilder}; use crate::traits::PalletToken; use crate::types::{ - BlockRate, Joy, MerkleProofOf, PatronageData, RevenueSplitState, TokenAllocationOf, + Joy, MerkleProofOf, PatronageData, RevenueSplitState, TokenAllocationOf, TokenIssuanceParametersOf, VestingSource, YearlyRate, }; use crate::{ - account, assert_approx_eq, balance, block, joy, last_event_eq, member, merkle_proof, - merkle_root, origin, token, yearly_rate, Config, Error, RawEvent, RepayableBloatBond, - TokenDataOf, + account, balance, block, joy, last_event_eq, member, merkle_proof, merkle_root, origin, token, + yearly_rate, Config, Error, RawEvent, RepayableBloatBond, TokenDataOf, }; use frame_support::traits::Currency; +use frame_system::RawOrigin; use sp_runtime::DispatchError; #[test] @@ -893,22 +893,6 @@ fn deissue_token_with_event_deposit() { }) } -#[test] -fn deissue_token_with_symbol_removed() { - let token_id = token!(1); - let token_data: TokenDataOf = TokenDataBuilder::new_empty().build(); - let symbol = token_data.symbol.clone(); - - let config = GenesisConfigBuilder::new_empty() - .with_token(token_id, token_data) - .build(); - - build_test_externalities(config).execute_with(|| { - let _ = Token::deissue_token(token_id); - assert!(!>::contains_key(symbol)); - }) -} - #[test] fn deissue_token_with_token_info_removed() { let token_id = token!(1); @@ -924,38 +908,12 @@ fn deissue_token_with_token_info_removed() { }) } -#[test] -fn issue_token_fails_with_existing_symbol() { - let (token_id, init_supply) = (token!(1), balance!(100)); - let (owner_id, owner_acc) = member!(1); - let sym = Hashing::hash_of(&"CRT".to_string()); - - let token_data = TokenDataBuilder::new_empty().with_symbol(sym).build(); - - let config = GenesisConfigBuilder::new_empty() - .with_token_and_owner(token_id, token_data, owner_id, init_supply) - .build(); - - let params = TokenIssuanceParametersOf:: { - symbol: sym, - ..Default::default() - }; - - build_test_externalities(config).execute_with(|| { - let result = Token::issue_token(owner_acc, params, default_upload_context()); - - assert_noop!(result, Error::::TokenSymbolAlreadyInUse); - }) -} - #[test] fn issue_token_fails_with_insufficient_balance_for_bloat_bond() { - let token_id = token!(1); let ((owner_id, owner_acc), mem1, mem2) = (member!(1), member!(2).0, member!(3).0); let bloat_bond = joy!(100); let params = TokenIssuanceParametersOf:: { - symbol: Hashing::hash_of(&token_id), revenue_split_rate: DEFAULT_SPLIT_RATE, ..Default::default() } @@ -979,12 +937,10 @@ fn issue_token_fails_with_insufficient_balance_for_bloat_bond() { #[test] fn issue_token_ok_with_bloat_bond_transferred() { - let token_id = token!(1); let ((owner_id, owner_acc), mem1, mem2) = (member!(1), member!(2).0, member!(3).0); let (treasury, bloat_bond) = (Token::module_treasury_account(), joy!(100)); let params = TokenIssuanceParametersOf:: { - symbol: Hashing::hash_of(&token_id), revenue_split_rate: DEFAULT_SPLIT_RATE, ..Default::default() } @@ -1020,14 +976,12 @@ fn issue_token_ok_owner_having_already_issued_a_token() { let config = GenesisConfigBuilder::new_empty().build(); let params1 = TokenIssuanceParametersOf:: { - symbol: Hashing::hash_of(&"CRT1".to_string()), revenue_split_rate: DEFAULT_SPLIT_RATE, ..Default::default() } .with_allocation(&owner_id, init_supply, None); let params2 = TokenIssuanceParametersOf:: { - symbol: Hashing::hash_of(&"CRT2".to_string()), revenue_split_rate: DEFAULT_SPLIT_RATE, ..params1.clone() }; @@ -1081,7 +1035,6 @@ fn issue_token_ok_with_event_deposit() { let (owner_id, owner_acc) = member!(1); let params = TokenIssuanceParametersOf:: { - symbol: Hashing::hash_of(&token_id), transfer_policy: TransferPolicyParams::Permissionless, patronage_rate: yearly_rate!(1), revenue_split_rate: DEFAULT_SPLIT_RATE, @@ -1100,94 +1053,46 @@ fn issue_token_ok_with_event_deposit() { #[test] fn issue_token_ok_with_token_info_added() { let token_id = token!(1); - let ((owner_id, owner_acc), mem1, mem2) = (member!(1), member!(2).0, member!(3).0); - let (owner_balance, mem1_balance, mem2_balance) = (balance!(100), balance!(200), balance!(300)); - let initial_supply = owner_balance + mem1_balance + mem2_balance; - let non_owner_vesting = VestingScheduleParams { - blocks_before_cliff: block!(100), - cliff_amount_percentage: Permill::from_percent(50), - linear_vesting_duration: block!(100), - }; - - let params = TokenIssuanceParametersOf:: { - symbol: Hashing::hash_of(&token_id), - transfer_policy: TransferPolicyParams::Permissionless, - patronage_rate: yearly_rate!(10), - revenue_split_rate: DEFAULT_SPLIT_RATE, - ..Default::default() - } - .with_allocation(&owner_id, owner_balance, None) - .with_allocation(&mem1, mem1_balance, Some(non_owner_vesting.clone())) - .with_allocation(&mem2, mem2_balance, Some(non_owner_vesting.clone())); - - let rate = BlockRate::from_yearly_rate(params.patronage_rate, BlocksPerYear::get()); - + let transfer_policy = TransferPolicyParams::Permissionless; + let patronage_rate = yearly_rate!(10); let config = GenesisConfigBuilder::new_empty().build(); build_test_externalities(config).execute_with(|| { - let _ = Token::issue_token(owner_acc, params.clone(), default_upload_context()); + let arrangement = IssueTokenFixture::default() + .with_split_rate(DEFAULT_SPLIT_RATE) + .with_transfer_policy(transfer_policy.clone()) + .with_patronage_rate(patronage_rate); + + arrangement.execute_call().unwrap(); assert_eq!( >::get(token_id), TokenDataOf:: { - tokens_issued: initial_supply, - total_supply: initial_supply, - transfer_policy: params.transfer_policy.into(), - symbol: params.symbol, - accounts_number: 3u64, // owner account + acc1 + acc2 + tokens_issued: DEFAULT_INITIAL_ISSUANCE, + total_supply: DEFAULT_INITIAL_ISSUANCE, + transfer_policy: transfer_policy.into(), + accounts_number: 1u64, // owner account patronage_info: PatronageData:: { last_unclaimed_patronage_tally_block: System::block_number(), unclaimed_patronage_tally_amount: balance!(0), - rate, + rate: DEFAULT_YEARLY_PATRONAGE_RATE.into(), }, sale: None, next_sale_id: 0, next_revenue_split_id: 0, revenue_split: RevenueSplitState::Inactive, revenue_split_rate: DEFAULT_SPLIT_RATE, + amm_curve: None, } ); }) } -#[test] -fn issue_token_ok_with_correct_patronage_rate_approximated() { - let token_id = token!(1); - let (owner_id, owner_acc) = member!(1); - let supply = balance!(100); - - let params = TokenIssuanceParametersOf:: { - symbol: Hashing::hash_of(&token_id), - transfer_policy: TransferPolicyParams::Permissionless, - revenue_split_rate: DEFAULT_SPLIT_RATE, - patronage_rate: YearlyRate(Permill::from_perthousand(105)), // 10.5% - ..Default::default() - } - .with_allocation(&owner_id, supply, None); - - // rate = floor(.105 / blocks_per_year * 1e18) per quintill = 19963924238 per quintill - let expected = BlockRate(Perquintill::from_parts(19963924238)); - - let config = GenesisConfigBuilder::new_empty().build(); - - build_test_externalities(config).execute_with(|| { - let _ = Token::issue_token(owner_acc, params.clone(), default_upload_context()); - - let actual = >::get(token_id) - .patronage_info - .rate; - - assert_approx_eq!(actual.0.deconstruct(), expected.0.deconstruct(), 1u64); - }) -} - #[test] fn issue_token_fails_with_zero_split_rate() { - let token_id = token!(1); let (_, owner_acc) = member!(1); let params = TokenIssuanceParametersOf:: { - symbol: Hashing::hash_of(&token_id), revenue_split_rate: Permill::zero(), ..Default::default() }; @@ -1203,13 +1108,11 @@ fn issue_token_fails_with_zero_split_rate() { #[test] fn issue_token_fails_with_non_existing_initial_allocation_member() { - let token_id = token!(1); let (_, owner_acc) = member!(1); let (valid_member_id, _) = member!(2); let (invalid_member_id, _) = member!(9999); let params = TokenIssuanceParametersOf:: { - symbol: Hashing::hash_of(&token_id), revenue_split_rate: DEFAULT_SPLIT_RATE, initial_allocation: vec![ ( @@ -1242,24 +1145,6 @@ fn issue_token_fails_with_non_existing_initial_allocation_member() { }) } -#[test] -fn issue_token_ok_with_symbol_added() { - let token_id = token!(1); - let (_, owner_acc) = member!(1); - - let params = TokenIssuanceParametersOf:: { - symbol: Hashing::hash_of(&token_id), - revenue_split_rate: DEFAULT_SPLIT_RATE, - ..Default::default() - }; - let config = GenesisConfigBuilder::new_empty().build(); - - build_test_externalities(config).execute_with(|| { - let _ = Token::issue_token(owner_acc, params.clone(), default_upload_context()); - assert!(>::contains_key(¶ms.symbol)); - }) -} - #[test] fn issue_token_ok_with_owner_accounts_data_added() { let token_id = token!(1); @@ -1272,7 +1157,6 @@ fn issue_token_ok_with_owner_accounts_data_added() { }; let params = TokenIssuanceParametersOf:: { - symbol: Hashing::hash_of(&token_id), revenue_split_rate: DEFAULT_SPLIT_RATE, ..Default::default() } @@ -1324,7 +1208,6 @@ fn issue_token_ok_with_invitation_locked_funds() { let (treasury, bloat_bond) = (Token::module_treasury_account(), joy!(100)); let params = TokenIssuanceParametersOf:: { - symbol: Hashing::hash_of(&token_id), revenue_split_rate: DEFAULT_SPLIT_RATE, ..Default::default() } @@ -1409,12 +1292,10 @@ fn issue_token_ok_with_invitation_locked_funds() { #[test] fn issue_token_fails_with_insufficient_locked_funds() { - let token_id = token!(1); let ((owner_id, owner_acc), mem1, mem2) = (member!(1), member!(2).0, member!(3).0); let bloat_bond = joy!(100); let params = TokenIssuanceParametersOf:: { - symbol: Hashing::hash_of(&token_id), revenue_split_rate: DEFAULT_SPLIT_RATE, ..Default::default() } @@ -1451,12 +1332,10 @@ fn issue_token_fails_with_insufficient_locked_funds() { #[test] fn issue_token_fails_with_incompatible_locked_funds() { - let token_id = token!(1); let ((owner_id, owner_acc), mem1, mem2) = (member!(1), member!(2).0, member!(3).0); let bloat_bond = joy!(100); let params = TokenIssuanceParametersOf:: { - symbol: Hashing::hash_of(&token_id), revenue_split_rate: DEFAULT_SPLIT_RATE, ..Default::default() } @@ -1927,3 +1806,101 @@ fn burn_ok_with_partially_burned_vesting_schedule_amounts_working_as_expected() ); }) } + +#[test] +fn burn_fails_on_frozen_pallet() { + let (token_id, burn_amount, (member_id, account)) = (token!(1), balance!(100), member!(1)); + let token_data = TokenDataBuilder::new_empty().build(); + + let config = GenesisConfigBuilder::new_empty() + .with_token(token_id, token_data) + .with_account(member_id, ConfigAccountData::new_with_amount(burn_amount)) + .build(); + + build_test_externalities(config).execute_with(|| { + assert_ok!(Token::set_frozen_status(RawOrigin::Root.into(), true)); + assert_noop!( + Token::burn(origin!(account), token_id, member_id, burn_amount), + Error::::PalletFrozen + ); + + assert_ok!(Token::set_frozen_status(RawOrigin::Root.into(), false)); + assert_ok!(Token::burn( + origin!(account), + token_id, + member_id, + burn_amount + )); + }) +} + +#[test] +fn dust_account_fails_on_frozen_pallet() { + let (token_id, init_supply) = (token!(1), balance!(100)); + let ((owner_id, _), (user_id, user_acc), (other_user_id, _)) = + (member!(1), member!(2), member!(3)); + + let token_data = TokenDataBuilder::new_empty().build(); + + let config = GenesisConfigBuilder::new_empty() + .with_token_and_owner(token_id, token_data, owner_id, init_supply) + .with_account(user_id, ConfigAccountData::default()) + .with_account(other_user_id, ConfigAccountData::default()) + .build(); + + build_test_externalities(config).execute_with(|| { + assert_ok!(Token::set_frozen_status(RawOrigin::Root.into(), true)); + assert_noop!( + Token::dust_account(origin!(user_acc), token_id, other_user_id), + Error::::PalletFrozen + ); + + assert_ok!(Token::set_frozen_status(RawOrigin::Root.into(), false)); + assert_ok!(Token::dust_account( + origin!(user_acc), + token_id, + other_user_id + )); + }) +} + +#[test] +fn join_whitelist_fails_on_frozen_pallet() { + let (token_id, init_supply) = (token!(1), balance!(100)); + let ((owner_id, _), (user_id, user_acc), (other_user_id, _)) = + (member!(1), member!(2), member!(3)); + let commit = merkle_root![user_id, other_user_id]; + let bloat_bond = joy!(100); + + let token_data = TokenDataBuilder::new_empty() + .with_transfer_policy(Policy::Permissioned(commit)) + .build(); + + let config = GenesisConfigBuilder::new_empty() + .with_bloat_bond(bloat_bond) + .with_token_and_owner(token_id, token_data, owner_id, init_supply) + .build(); + + build_test_externalities(config).execute_with(|| { + increase_account_balance(&user_acc, bloat_bond + ExistentialDeposit::get()); + + assert_ok!(Token::set_frozen_status(RawOrigin::Root.into(), true)); + assert_noop!( + Token::join_whitelist( + origin!(user_acc), + user_id, + token_id, + merkle_proof!(0, [user_id, other_user_id]) + ), + Error::::PalletFrozen + ); + + assert_ok!(Token::set_frozen_status(RawOrigin::Root.into(), false)); + assert_ok!(Token::join_whitelist( + origin!(user_acc), + user_id, + token_id, + merkle_proof!(0, [user_id, other_user_id]) + )); + }) +} diff --git a/runtime-modules/project-token/src/tests/fixtures.rs b/runtime-modules/project-token/src/tests/fixtures.rs index a963454d0c..cc3731e604 100644 --- a/runtime-modules/project-token/src/tests/fixtures.rs +++ b/runtime-modules/project-token/src/tests/fixtures.rs @@ -1,16 +1,18 @@ #![cfg(test)] use crate::tests::mock::*; -use crate::types::{Joy, Payment, Transfers, TransfersOf}; +use crate::tests::test_utils::new_transfers; +use crate::types::{Joy, TransferOutputsOf}; use crate::{ last_event_eq, member, yearly_rate, AccountInfoByTokenAndMember, RawEvent, YearlyRate, }; -use crate::{traits::PalletToken, types::VestingSource, SymbolsUsed}; +use crate::{traits::PalletToken, types::VestingSource}; use frame_support::dispatch::DispatchResult; -use frame_support::storage::{StorageDoubleMap, StorageMap}; +use frame_support::storage::StorageDoubleMap; use sp_arithmetic::traits::One; -use sp_runtime::{traits::Hash, DispatchError, Permill}; +use sp_runtime::{DispatchError, Permill}; +use sp_std::collections::btree_map::BTreeMap; use sp_std::iter::FromIterator; use storage::{BagId, DataObjectCreationParameters, StaticBagId}; @@ -92,7 +94,6 @@ impl IssueTokenFixture { issuer_account: member!(1).1, params: IssuanceParams { patronage_rate: yearly_rate!(0), - symbol: Hashing::hash_of(b"ABC"), transfer_policy: TransferPolicyParams::Permissionless, revenue_split_rate: DEFAULT_SPLIT_RATE, ..Default::default() @@ -102,6 +103,13 @@ impl IssueTokenFixture { } } + pub fn with_supply(self, allocation: Balance) -> Self { + Self { + params: self.params.with_allocation(&member!(1).0, allocation, None), + ..self + } + } + pub fn with_transfer_policy(self, transfer_policy: TransferPolicyParams) -> Self { Self { params: IssuanceParams { @@ -111,6 +119,36 @@ impl IssueTokenFixture { ..self } } + + pub fn with_split_rate(self, revenue_split_rate: Permill) -> Self { + Self { + params: IssuanceParams { + revenue_split_rate, + ..self.params + }, + ..self + } + } + + pub fn with_patronage_rate(self, patronage_rate: YearlyRate) -> Self { + Self { + params: IssuanceParams { + patronage_rate, + ..self.params + }, + ..self + } + } + + pub fn with_empty_allocation(self) -> Self { + Self { + params: IssuanceParams { + initial_allocation: BTreeMap::default(), + ..self.params + }, + ..self + } + } } impl Fixture for IssueTokenFixture { @@ -142,7 +180,6 @@ impl Fixture for IssueTokenFixture { ..TokenData::from_params::(self.params.clone()).unwrap() } ); - assert!(SymbolsUsed::::contains_key(self.params.symbol)); // Event emitted last_event_eq!(RawEvent::TokenIssued( snapshot_pre.next_token_id, @@ -508,7 +545,7 @@ impl Fixture for PurchaseTokensOnSaleF fn execute_call(&self) -> DispatchResult { Token::purchase_tokens_on_sale( - Origin::signed(self.sender), + RuntimeOrigin::signed(self.sender), self.token_id, self.member_id, self.amount, @@ -894,7 +931,7 @@ impl ParticipateInSplitFixture { pub fn execute_call(&self) -> DispatchResult { let state_pre = sp_io::storage::root(sp_storage::StateVersion::V1); let result = Token::participate_in_split( - Origin::signed(self.sender), + RuntimeOrigin::signed(self.sender), self.token_id, self.member_id, self.amount, @@ -914,22 +951,13 @@ pub struct TransferFixture { sender: AccountId, token_id: TokenId, src_member_id: MemberId, - outputs: TransfersOf, + outputs: TransferOutputsOf, metadata: Vec, } impl TransferFixture { pub fn default() -> Self { - let outputs = Transfers::<_, _>( - vec![( - member!(2).0, - Payment:: { - amount: DEFAULT_SPLIT_PARTICIPATION, - }, - )] - .into_iter() - .collect(), - ); + let outputs = new_transfers(vec![(member!(2).0, DEFAULT_SPLIT_PARTICIPATION)]); Self { sender: member!(1).1, token_id: 1u64.into(), @@ -942,7 +970,7 @@ impl TransferFixture { pub fn execute_call(&self) -> DispatchResult { let state_pre = sp_io::storage::root(sp_storage::StateVersion::V1); let result = Token::transfer( - Origin::signed(self.sender), + RuntimeOrigin::signed(self.sender), self.src_member_id, self.token_id, self.outputs.clone(), @@ -994,8 +1022,290 @@ impl ExitRevenueSplitFixture { pub fn execute_call(&self) -> DispatchResult { let state_pre = sp_io::storage::root(sp_storage::StateVersion::V1); - let result = - Token::exit_revenue_split(Origin::signed(self.sender), self.token_id, self.member_id); + let result = Token::exit_revenue_split( + RuntimeOrigin::signed(self.sender), + self.token_id, + self.member_id, + ); + let state_post = sp_io::storage::root(sp_storage::StateVersion::V1); + + // no-op in case of error + if result.is_err() { + assert_eq!(state_pre, state_post) + } + + result + } +} + +pub struct ActivateAmmFixture { + token_id: TokenId, + member_id: MemberId, + params: AmmParams, +} + +impl ActivateAmmFixture { + pub fn default() -> Self { + let (creator_member_id, _) = member!(1); + ActivateAmmFixture { + token_id: TokenId::one(), + member_id: creator_member_id, + params: AmmParams { + // like Deso: https://docs.deso.org/about-deso-chain/readme#the-creator-coin-supply-curve + slope: AMM_CURVE_SLOPE, + intercept: AMM_CURVE_INTERCEPT, + }, + } + } + + pub fn with_token_id(self, token_id: TokenId) -> Self { + Self { token_id, ..self } + } + + pub fn with_member_id(self, member_id: MemberId) -> Self { + Self { member_id, ..self } + } + + pub fn with_linear_function_params(self, a: Balance, b: Balance) -> Self { + let params = AmmParams { + slope: a, + intercept: b, + }; + Self { params, ..self } + } + + pub fn execute_call(&self) -> DispatchResult { + let state_pre = sp_io::storage::root(sp_storage::StateVersion::V1); + let result = Token::activate_amm(self.token_id, self.member_id, self.params.clone()); + let state_post = sp_io::storage::root(sp_storage::StateVersion::V1); + + // no-op in case of error + if result.is_err() { + assert_eq!(state_pre, state_post) + } + + result + } +} + +pub struct AmmBuyFixture { + sender: AccountId, + token_id: TokenId, + member_id: MemberId, + amount: Balance, + slippage_tolerance: Option<(Permill, Balance)>, +} + +impl AmmBuyFixture { + pub fn default() -> Self { + let (member_id, sender) = member!(2); + Self { + sender, + token_id: One::one(), + member_id, + amount: Balance::from(DEFAULT_AMM_BUY_AMOUNT), + slippage_tolerance: None, + } + } + + pub fn with_amount(self, amount: Balance) -> Self { + Self { amount, ..self } + } + + pub fn with_token_id(self, token_id: TokenId) -> Self { + Self { token_id, ..self } + } + + pub fn with_sender(self, sender: AccountId) -> Self { + Self { sender, ..self } + } + + pub fn with_member_id(self, member_id: MemberId) -> Self { + Self { member_id, ..self } + } + + pub fn with_slippage_tolerance(self, tolerance: (Permill, Balance)) -> Self { + Self { + slippage_tolerance: Some(tolerance), + ..self + } + } + + pub fn execute_call(self) -> DispatchResult { + let state_pre = sp_io::storage::root(sp_storage::StateVersion::V1); + let result = Token::buy_on_amm( + RuntimeOrigin::signed(self.sender), + self.token_id, + self.member_id, + self.amount, + self.slippage_tolerance, + ); + let state_post = sp_io::storage::root(sp_storage::StateVersion::V1); + + // no-op in case of error + if result.is_err() { + assert_eq!(state_pre, state_post) + } + + result + } +} + +pub struct AmmSellFixture { + sender: AccountId, + token_id: TokenId, + member_id: MemberId, + amount: Balance, + slippage_tolerance: Option<(Permill, Balance)>, +} + +impl AmmSellFixture { + pub fn default() -> Self { + let (member_id, sender) = member!(2); + Self { + sender, + token_id: One::one(), + member_id, + amount: Balance::from(DEFAULT_AMM_SELL_AMOUNT), + slippage_tolerance: None, + } + } + + pub fn with_amount(self, amount: Balance) -> Self { + Self { amount, ..self } + } + + pub fn with_token_id(self, token_id: TokenId) -> Self { + Self { token_id, ..self } + } + + pub fn with_sender(self, sender: AccountId) -> Self { + Self { sender, ..self } + } + + pub fn with_member_id(self, member_id: MemberId) -> Self { + Self { member_id, ..self } + } + + pub fn with_slippage_tolerance(self, tolerance: (Permill, Balance)) -> Self { + Self { + slippage_tolerance: Some(tolerance), + ..self + } + } + + pub fn execute_call(self) -> DispatchResult { + let state_pre = sp_io::storage::root(sp_storage::StateVersion::V1); + let result = Token::sell_on_amm( + RuntimeOrigin::signed(self.sender), + self.token_id, + self.member_id, + self.amount, + self.slippage_tolerance, + ); + let state_post = sp_io::storage::root(sp_storage::StateVersion::V1); + + // no-op in case of error + if result.is_err() { + assert_eq!(state_pre, state_post) + } + + result + } +} + +pub struct DeactivateAmmFixture { + token_id: TokenId, + member_id: MemberId, +} + +impl DeactivateAmmFixture { + pub fn default() -> Self { + let (member_id, _) = member!(1); + Self { + token_id: TokenId::one(), + member_id, + } + } + + pub fn with_member_id(self, member_id: MemberId) -> Self { + Self { member_id, ..self } + } + + pub fn with_token_id(self, token_id: TokenId) -> Self { + Self { token_id, ..self } + } + pub fn execute_call(self) -> DispatchResult { + let state_pre = sp_io::storage::root(sp_storage::StateVersion::V1); + let result = Token::deactivate_amm(self.token_id, self.member_id); + let state_post = sp_io::storage::root(sp_storage::StateVersion::V1); + + // no-op in case of error + if result.is_err() { + assert_eq!(state_pre, state_post) + } + + result + } +} + +pub struct ClaimPatronageCreditFixture { + token_id: TokenId, + member_id: MemberId, +} + +impl ClaimPatronageCreditFixture { + pub fn default() -> Self { + Self { + token_id: One::one(), + member_id: One::one(), + } + } + + pub fn with_member_id(self, member_id: MemberId) -> Self { + Self { member_id, ..self } + } + + pub fn with_token_id(self, token_id: TokenId) -> Self { + Self { token_id, ..self } + } + + pub fn execute_call(self) -> DispatchResult { + let state_pre = sp_io::storage::root(sp_storage::StateVersion::V1); + let result = Token::claim_patronage_credit(self.token_id, self.member_id); + let state_post = sp_io::storage::root(sp_storage::StateVersion::V1); + + // no-op in case of error + if result.is_err() { + assert_eq!(state_pre, state_post) + } + + result + } +} + +pub struct ReducePatronageRateToFixture { + token_id: TokenId, + rate: YearlyRate, +} + +impl ReducePatronageRateToFixture { + pub fn default() -> Self { + Self { + token_id: One::one(), + rate: DEFAULT_YEARLY_PATRONAGE_RATE.into(), + } + } + pub fn with_token_id(self, token_id: TokenId) -> Self { + Self { token_id, ..self } + } + + pub fn with_target_rate(self, rate: YearlyRate) -> Self { + Self { rate, ..self } + } + pub fn execute_call(self) -> DispatchResult { + let state_pre = sp_io::storage::root(sp_storage::StateVersion::V1); + let result = Token::reduce_patronage_rate_to(self.token_id, self.rate); let state_post = sp_io::storage::root(sp_storage::StateVersion::V1); // no-op in case of error diff --git a/runtime-modules/project-token/src/tests/mock.rs b/runtime-modules/project-token/src/tests/mock.rs index d0a11b6547..d81d7fca37 100644 --- a/runtime-modules/project-token/src/tests/mock.rs +++ b/runtime-modules/project-token/src/tests/mock.rs @@ -5,19 +5,22 @@ use frame_support::{ traits::{Currency, OnFinalize, OnInitialize}, }; -use common::locks::{BoundStakingAccountLockId, InvitedMemberLockId}; use common::membership::{MemberOriginValidator, MembershipInfoProvider}; +use common::{ + locks::{BoundStakingAccountLockId, InvitedMemberLockId}, + numerical::one_plus_interest_pow_fixed, +}; use frame_support::{ ensure, traits::{ConstU16, ConstU32, ConstU64, LockIdentifier, WithdrawReasons}, PalletId, }; use frame_system::ensure_signed; -use sp_arithmetic::Perbill; +use sp_arithmetic::{FixedPointNumber, Perbill}; use sp_io::TestExternalities; use sp_runtime::testing::{Header, H256}; -use sp_runtime::traits::{BlakeTwo256, Convert, IdentityLookup}; -use sp_runtime::{DispatchError, DispatchResult, Permill}; +use sp_runtime::traits::{BlakeTwo256, IdentityLookup}; +use sp_runtime::{DispatchError, DispatchResult, PerThing, Permill}; use sp_std::convert::{TryFrom, TryInto}; use staking_handler::{LockComparator, StakingHandler}; @@ -49,21 +52,24 @@ pub type Balance = TokenBalanceOf; pub type JoyBalance = JoyBalanceOf; pub type Policy = TransferPolicyOf; pub type Hashing = ::Hashing; -pub type HashOut = ::Hash; pub type VestingSchedule = VestingScheduleOf; +pub type AmmParams = AmmParamsOf; pub type MemberId = u64; #[macro_export] macro_rules! last_event_eq { ($e:expr) => { - assert_eq!(System::events().last().unwrap().event, Event::Token($e)) + assert_eq!( + System::events().last().unwrap().event, + RuntimeEvent::Token($e) + ) }; } #[macro_export] macro_rules! origin { ($a: expr) => { - Origin::signed($a) + RuntimeOrigin::signed($a) }; } @@ -79,6 +85,7 @@ parameter_types! { pub const TokenModuleId: PalletId = PalletId(*b"m__Token"); pub const MaxVestingSchedulesPerAccountPerToken: u32 = 3; pub const BlocksPerYear: u32 = 5259487; // blocks every 6s + pub const MaxOutputs: u32 = 256; // --------- balances::Config parameters --------------------------- pub const ExistentialDeposit: u128 = 10; // constants for storage::Config @@ -117,7 +124,7 @@ frame_support::construct_runtime!( { System: frame_system, Balances: balances, - Timestamp: pallet_timestamp, + Timestamp: pallet_timestamp::{Pallet, Call, Storage, Inherent}, Membership: membership::{Pallet, Call, Storage, Event}, Storage: storage::{Pallet, Call, Storage, Event}, Token: token::{Pallet, Call, Storage, Config, Event}, @@ -125,7 +132,7 @@ frame_support::construct_runtime!( ); impl storage::Config for Test { - type Event = Event; + type RuntimeEvent = RuntimeEvent; type DataObjectId = u64; type StorageBucketId = u64; type DistributionBucketIndex = u64; @@ -159,11 +166,17 @@ impl common::MembershipTypes for Test { type ActorId = u64; } +impl pallet_timestamp::Config for Test { + type Moment = u64; + type OnTimestampSet = (); + type MinimumPeriod = MinimumPeriod; + type WeightInfo = (); +} + impl Config for Test { - type Event = Event; + type RuntimeEvent = RuntimeEvent; type Balance = u128; type TokenId = u64; - type BlockNumberToBalance = Block2Balance; type DataObjectStorage = storage::Module; type ModuleId = TokenModuleId; type JoyExistentialDeposit = ExistentialDeposit; @@ -172,6 +185,7 @@ impl Config for Test { type WeightInfo = (); type MemberOriginValidator = TestMemberships; type MembershipInfoProvider = TestMemberships; + type MaxOutputs = MaxOutputs; } // Working group integration @@ -208,7 +222,7 @@ impl common::working_group::WorkingGroupBudgetHandler for Distributio impl common::working_group::WorkingGroupAuthenticator for StorageWG { fn ensure_worker_origin( - origin: ::Origin, + origin: ::RuntimeOrigin, _worker_id: &::ActorId, ) -> DispatchResult { let account_id = ensure_signed(origin)?; @@ -219,7 +233,9 @@ impl common::working_group::WorkingGroupAuthenticator for StorageWG { Ok(()) } - fn ensure_leader_origin(origin: ::Origin) -> DispatchResult { + fn ensure_leader_origin( + origin: ::RuntimeOrigin, + ) -> DispatchResult { let account_id = ensure_signed(origin)?; ensure!( account_id == STORAGE_WG_LEADER_ACCOUNT_ID, @@ -267,7 +283,7 @@ impl common::working_group::WorkingGroupAuthenticator for StorageWG { impl common::working_group::WorkingGroupAuthenticator for DistributionWG { fn ensure_worker_origin( - origin: ::Origin, + origin: ::RuntimeOrigin, _worker_id: &::ActorId, ) -> DispatchResult { let account_id = ensure_signed(origin)?; @@ -278,7 +294,9 @@ impl common::working_group::WorkingGroupAuthenticator for DistributionWG { Ok(()) } - fn ensure_leader_origin(origin: ::Origin) -> DispatchResult { + fn ensure_leader_origin( + origin: ::RuntimeOrigin, + ) -> DispatchResult { let account_id = ensure_signed(origin)?; ensure!( account_id == DISTRIBUTION_WG_LEADER_ACCOUNT_ID, @@ -329,8 +347,8 @@ impl frame_system::Config for Test { type BlockWeights = (); type BlockLength = (); type DbWeight = (); - type Origin = Origin; - type Call = Call; + type RuntimeOrigin = RuntimeOrigin; + type RuntimeCall = RuntimeCall; type Index = u64; type BlockNumber = u64; type Hash = H256; @@ -338,7 +356,7 @@ impl frame_system::Config for Test { type AccountId = u64; type Lookup = IdentityLookup; type Header = Header; - type Event = Event; + type RuntimeEvent = RuntimeEvent; type BlockHashCount = ConstU64<250>; type Version = (); type PalletInfo = PalletInfo; @@ -351,17 +369,10 @@ impl frame_system::Config for Test { type MaxConsumers = frame_support::traits::ConstU32<16>; } -impl pallet_timestamp::Config for Test { - type Moment = u64; - type OnTimestampSet = (); - type MinimumPeriod = MinimumPeriod; - type WeightInfo = (); -} - impl balances::Config for Test { type Balance = u128; type DustRemoval = (); - type Event = Event; + type RuntimeEvent = RuntimeEvent; type ExistentialDeposit = ExistentialDeposit; type AccountStore = System; type MaxLocks = (); @@ -372,7 +383,7 @@ impl balances::Config for Test { /// Implement membership trait for Test impl membership::Config for Test { - type Event = Event; + type RuntimeEvent = RuntimeEvent; type DefaultMembershipPrice = DefaultMembershipPrice; type ReferralCutMaximumPercent = ReferralCutMaximumPercent; type WorkingGroup = Wg; @@ -412,13 +423,15 @@ impl common::working_group::WorkingGroupBudgetHandler for Wg { impl common::working_group::WorkingGroupAuthenticator for Wg { fn ensure_worker_origin( - _origin: ::Origin, + _origin: ::RuntimeOrigin, _worker_id: &::ActorId, ) -> DispatchResult { unimplemented!() } - fn ensure_leader_origin(_origin: ::Origin) -> DispatchResult { + fn ensure_leader_origin( + _origin: ::RuntimeOrigin, + ) -> DispatchResult { unimplemented!() } @@ -472,9 +485,9 @@ impl MembershipInfoProvider for TestMemberships { } // Mock MemberOriginValidator impl -impl MemberOriginValidator for TestMemberships { +impl MemberOriginValidator for TestMemberships { fn ensure_member_controller_account_origin( - origin: Origin, + origin: RuntimeOrigin, member_id: u64, ) -> Result { let sender = ensure_signed(origin)?; @@ -497,11 +510,15 @@ pub struct GenesisConfigBuilder { pub(crate) token_info_by_id: Vec<(TokenId, TokenData)>, pub(crate) next_token_id: TokenId, pub(crate) bloat_bond: JoyBalance, - pub(crate) symbol_used: Vec<(HashOut, ())>, pub(crate) min_sale_duration: BlockNumber, pub(crate) min_revenue_split_duration: BlockNumber, pub(crate) min_revenue_split_time_to_start: BlockNumber, pub(crate) sale_platform_fee: Permill, + pub(crate) amm_deactivation_threshold: Permill, + pub(crate) bond_tx_fees: Permill, + pub(crate) unbond_tx_fees: Permill, + pub(crate) max_yearly_patronage_rate: YearlyRate, + pub(crate) min_amm_slope_parameter: Balance, } /// test externalities + initial balances allocation @@ -532,6 +549,11 @@ pub fn build_test_externalities(config: token::GenesisConfig) -> TestExter build_test_externalities_with_balances(config, vec![]) } +/// test externalities +pub fn build_default_test_externalities() -> TestExternalities { + build_default_test_externalities_with_balances(vec![]) +} + /// test externalities with empty Chain State and specified balance allocation pub fn build_default_test_externalities_with_balances( balances: Vec<(AccountId, Balance)>, @@ -613,22 +635,37 @@ macro_rules! block { } // ------ General constants --------------- +pub const DEFAULT_TOKEN_ID: u64 = 1; +pub const DEFAULT_ISSUER_ACCOUNT_ID: u64 = 1001; +pub const DEFAULT_ISSUER_MEMBER_ID: u64 = 1; pub const DEFAULT_BLOAT_BOND: u128 = 0; -pub const DEFAULT_INITIAL_ISSUANCE: u128 = 1_000_000; +pub const DEFAULT_INITIAL_ISSUANCE: u128 = 1_000_000_000; pub const MIN_REVENUE_SPLIT_DURATION: u64 = 10; pub const MIN_REVENUE_SPLIT_TIME_TO_START: u64 = 10; +// ------ Patronage Constants ---------------- +pub const DEFAULT_MAX_YEARLY_PATRONAGE_RATE: Permill = Permill::from_percent(15); +pub const DEFAULT_YEARLY_PATRONAGE_RATE: Permill = Permill::from_percent(10); +pub const DEFAULT_BLOCK_INTERVAL: u64 = 10; + // ------ Sale Constants --------------------- pub const DEFAULT_SALE_UNIT_PRICE: u128 = 10; pub const DEFAULT_SALE_DURATION: u64 = 100; // ------ Revenue Split constants ------------ pub const DEFAULT_SALE_PURCHASE_AMOUNT: u128 = 1000; -pub const DEFAULT_SPLIT_REVENUE: u128 = 1000; +pub const DEFAULT_SPLIT_REVENUE: u128 = DEFAULT_INITIAL_ISSUANCE / 10; pub const DEFAULT_SPLIT_RATE: Permill = Permill::from_percent(10); pub const DEFAULT_SPLIT_DURATION: u64 = 100; -pub const DEFAULT_SPLIT_PARTICIPATION: u128 = 100_000; -pub const DEFAULT_SPLIT_JOY_DIVIDEND: u128 = 10; // (participation / issuance) * revenue * rate +pub const DEFAULT_SPLIT_PARTICIPATION: u128 = DEFAULT_SPLIT_REVENUE / 100; + +// ------ Bonding Curve Constants ------------ +pub const DEFAULT_AMM_BUY_AMOUNT: u128 = 1000; +pub const DEFAULT_AMM_SELL_AMOUNT: u128 = 100; +pub const AMM_CURVE_SLOPE: u128 = 10_000_000; +pub const AMM_CURVE_INTERCEPT: u128 = 1000; +pub const DEFAULT_AMM_BUY_FEES: Permill = Permill::from_percent(1); +pub const DEFAULT_AMM_SELL_FEES: Permill = Permill::from_percent(10); // ------ Storage Constants ------------------ pub const STORAGE_WG_LEADER_ACCOUNT_ID: u64 = 100001; @@ -652,6 +689,16 @@ macro_rules! merkle_proof { }; } +#[macro_export] +#[cfg(feature = "std")] +macro_rules! assert_approx { + ($value: expr, $target: expr,) => { + let abs_diff = $value.max($target).saturating_sub($value.min($target)); + assert!(abs_diff < 1_000_000) + // accuracy up to 1 million HAPI accuracy -> .0001 $JOY + }; +} + #[macro_export] #[cfg(feature = "std")] macro_rules! assert_approx_eq { @@ -661,19 +708,14 @@ macro_rules! assert_approx_eq { }; } -// utility types -pub struct Block2Balance {} - -impl Convert for Block2Balance { - fn convert(block: BlockNumber) -> Balance { - block as u128 - } -} - pub fn increase_account_balance(account_id: &AccountId, balance: Balance) { let _ = Balances::deposit_creating(account_id, balance); } +pub fn make_free_balance_be(account_id: &AccountId, balance: Balance) { + let _ = Balances::make_free_balance_be(account_id, balance); +} + pub fn ed() -> Balance { ExistentialDeposit::get() } @@ -692,3 +734,65 @@ pub fn set_staking_candidate_lock( ) { ::StakingCandidateStakingHandler::lock(&who, amount); } + +pub(crate) fn amm_function_buy_values_with_tx_fees(amount: Balance, supply: Balance) -> JoyBalance { + amm_function_values_with_tx_fees(amount, supply, AmmOperation::Buy) +} +pub(crate) fn amm_function_sell_values_with_tx_fees( + amount: Balance, + supply: Balance, +) -> JoyBalance { + amm_function_values_with_tx_fees(amount, supply, AmmOperation::Sell) +} + +pub(crate) fn amm_function_values( + amount: Balance, + supply: Balance, + bond_operation: AmmOperation, +) -> JoyBalance { + let supply2 = supply * supply; + let sq_coeff = AMM_CURVE_SLOPE / 2; + let res = match bond_operation { + AmmOperation::Buy => { + sq_coeff * ((supply + amount) * (supply + amount) - supply2) + + AMM_CURVE_INTERCEPT * amount + } + AmmOperation::Sell => { + sq_coeff * (supply2 - (supply - amount) * (supply - amount)) + + AMM_CURVE_INTERCEPT * amount + } + }; + res +} +pub(crate) fn amm_function_values_with_tx_fees( + amount: Balance, + supply: Balance, + bond_operation: AmmOperation, +) -> JoyBalance { + let res = amm_function_values(amount, supply, bond_operation.clone()); + + match bond_operation { + AmmOperation::Buy => res + DEFAULT_AMM_BUY_FEES.mul_floor(res), + AmmOperation::Sell => DEFAULT_AMM_SELL_FEES.left_from_one().mul_floor(res), + } +} + +pub fn default_joy_dividend() -> Balance { + // (participation / issuance) * revenue * rate + let net_split_revenue = DEFAULT_SPLIT_RATE.mul_floor(DEFAULT_SPLIT_REVENUE); + Permill::from_rational(DEFAULT_SPLIT_PARTICIPATION, DEFAULT_INITIAL_ISSUANCE) + .mul_floor(net_split_revenue) +} + +pub fn compute_correct_patronage_amount( + supply: Balance, + patronage_rate: Permill, + blocks: BlockNumber, +) -> Balance { + let supply_post_patronage = one_plus_interest_pow_fixed( + patronage_rate, + FixedPointNumber::saturating_from_rational(blocks, BlocksPerYear::get()), + ) + .saturating_mul_int(supply); + supply_post_patronage.saturating_sub(supply) +} diff --git a/runtime-modules/project-token/src/tests/mod.rs b/runtime-modules/project-token/src/tests/mod.rs index 38e5727ace..58299fd04a 100644 --- a/runtime-modules/project-token/src/tests/mod.rs +++ b/runtime-modules/project-token/src/tests/mod.rs @@ -1,10 +1,11 @@ #![cfg(test)] +mod amm; mod canonical; mod fixtures; pub mod mock; mod patronage; mod sale; mod split; -mod test_utils; +pub mod test_utils; mod transfer; diff --git a/runtime-modules/project-token/src/tests/patronage.rs b/runtime-modules/project-token/src/tests/patronage.rs index 8a329476bd..d3cedb98de 100644 --- a/runtime-modules/project-token/src/tests/patronage.rs +++ b/runtime-modules/project-token/src/tests/patronage.rs @@ -1,32 +1,32 @@ +use core::assert_eq; + +use frame_support::assert_noop; #[cfg(test)] -use frame_support::{assert_noop, assert_ok}; -use sp_runtime::{Permill, Perquintill}; +use frame_support::{assert_err, assert_ok}; +use sp_runtime::traits::Zero; +use sp_runtime::SaturatedConversion; -use crate::tests::fixtures::{default_upload_context, IssueRevenueSplitFixture}; +use crate::tests::fixtures::{ClaimPatronageCreditFixture, Fixture, IssueTokenFixture}; +use crate::tests::fixtures::{IssueRevenueSplitFixture, ReducePatronageRateToFixture}; use crate::tests::mock::*; -use crate::tests::test_utils::TokenDataBuilder; use crate::traits::PalletToken; -use crate::types::{BlockRate, TokenIssuanceParametersOf, YearlyRate}; -use crate::{balance, block, last_event_eq, member, rate, token, yearly_rate, Error, RawEvent}; +use crate::types::YearlyRate; +use crate::{balance, last_event_eq, Error, RawEvent}; + +// compute correct patronage amount given rate%, blocks and supply: (1 + rate/100%)^{blocks/BlocksPerYear} +use frame_system::RawOrigin; #[test] fn issue_token_ok_with_patronage_tally_count_zero() { - let patronage_rate = yearly_rate!(50); - let token_id = token!(1); - let ((owner_id, owner_acc), init_supply) = (member!(1), balance!(10)); - - let params = TokenIssuanceParametersOf:: { - patronage_rate, - ..Default::default() - } - .with_allocation(&owner_id, init_supply, None); - let config = GenesisConfigBuilder::new_empty().build(); - - build_test_externalities(config).execute_with(|| { - let _ = Token::issue_token(owner_acc, params, default_upload_context()); + build_default_test_externalities().execute_with(|| { + IssueTokenFixture::default() + .with_supply(10u64.into()) + .with_patronage_rate(DEFAULT_YEARLY_PATRONAGE_RATE.into()) + .execute_call() + .unwrap(); assert_eq!( - Token::token_info_by_id(token_id) + Token::token_info_by_id(DEFAULT_TOKEN_ID) .patronage_info .unclaimed_patronage_tally_amount, balance!(0), @@ -36,226 +36,156 @@ fn issue_token_ok_with_patronage_tally_count_zero() { #[test] fn issue_token_ok_with_correct_non_zero_patronage_accounting() { - let token_id = token!(1); - let (patronage_rate, blocks) = (yearly_rate!(20), block!(10)); - let ((owner_id, owner_acc), init_supply) = (member!(1), balance!(1_000_000_000)); + build_default_test_externalities().execute_with(|| { + IssueTokenFixture::default() + .with_supply(DEFAULT_INITIAL_ISSUANCE) + .with_patronage_rate(DEFAULT_YEARLY_PATRONAGE_RATE.into()) + .execute_call() + .unwrap(); - let params = TokenIssuanceParametersOf:: { - patronage_rate, - revenue_split_rate: DEFAULT_SPLIT_RATE, - ..Default::default() - } - .with_allocation(&owner_id, init_supply, None); - let config = GenesisConfigBuilder::new_empty().build(); - - // K = 1/blocks_per_years => floor(20% * 10 * K * 1bill) = floor(K * 2bill) = 380 - let expected = balance!(380); - - build_test_externalities(config).execute_with(|| { - let _ = Token::issue_token(owner_acc, params, default_upload_context()); - increase_block_number_by(blocks); + increase_block_number_by(DEFAULT_BLOCK_INTERVAL); assert_eq!( - Token::token_info_by_id(token_id).unclaimed_patronage_at_block(System::block_number()), - expected, + Token::token_info_by_id(DEFAULT_TOKEN_ID) + .unclaimed_patronage_at_block::(System::block_number()), + compute_correct_patronage_amount( + DEFAULT_INITIAL_ISSUANCE, + DEFAULT_YEARLY_PATRONAGE_RATE, + DEFAULT_BLOCK_INTERVAL + ) ); }) } #[test] fn issue_token_ok_with_correct_patronage_accounting_and_zero_supply() { - let token_id = token!(1); - let (patronage_rate, blocks) = (yearly_rate!(20), block!(10)); - let ((owner_id, owner_acc), initial_supply) = (member!(1), balance!(0)); - - let params = TokenIssuanceParametersOf:: { - patronage_rate, - ..Default::default() - } - .with_allocation(&owner_id, initial_supply, None); - let config = GenesisConfigBuilder::new_empty().build(); - - build_test_externalities(config).execute_with(|| { - let _ = Token::issue_token(owner_acc, params, default_upload_context()); - increase_block_number_by(blocks); - - assert_eq!(Token::token_info_by_id(token_id).total_supply, balance!(0),); + build_default_test_externalities().execute_with(|| { + IssueTokenFixture::default() + .with_empty_allocation() + .with_patronage_rate(DEFAULT_YEARLY_PATRONAGE_RATE.into()) + .execute_call() + .unwrap(); + + increase_block_number_by(DEFAULT_BLOCK_INTERVAL); + + assert_eq!( + Token::token_info_by_id(DEFAULT_TOKEN_ID).total_supply, + balance!(0) + ); }) } #[test] fn decrease_patronage_ok() { - let rate = rate!(50); - let (token_id, init_supply) = (token!(1), balance!(100)); - let owner_id = member!(1).0; - let decrement = yearly_rate!(20); - - let token_info = TokenDataBuilder::new_empty() - .with_patronage_rate(rate) - .build(); - let config = GenesisConfigBuilder::new_empty() - .with_token_and_owner(token_id, token_info, owner_id, init_supply) - .build(); + build_default_test_externalities().execute_with(|| { + IssueTokenFixture::default() + .with_supply(100u64.into()) + .with_patronage_rate(DEFAULT_MAX_YEARLY_PATRONAGE_RATE.into()) + .execute_call() + .unwrap(); - build_test_externalities(config).execute_with(|| { - let result = Token::reduce_patronage_rate_to(token_id, decrement); + let result = ReducePatronageRateToFixture::default() + .with_target_rate(DEFAULT_YEARLY_PATRONAGE_RATE.into()) + .execute_call(); assert_ok!(result); + assert_eq!( + Token::token_info_by_id(DEFAULT_TOKEN_ID) + .patronage_info + .rate, + DEFAULT_YEARLY_PATRONAGE_RATE.into() + ); }) } #[test] fn decrease_patronage_ok_with_tally_count_correctly_updated() { - let rate = rate!(1); - let (token_id, init_supply) = (token!(1), balance!(100)); - let owner_id = member!(1).0; - let blocks = block!(10); - let target_rate = yearly_rate!(20); - - let token_info = TokenDataBuilder::new_empty() - .with_patronage_rate(rate) - .build(); - let config = GenesisConfigBuilder::new_empty() - .with_token_and_owner(token_id, token_info, owner_id, init_supply) - .build(); - - // 10% * 100 = 10 - let expected = balance!(10); - - build_test_externalities(config).execute_with(|| { - increase_block_number_by(blocks); - let result = Token::reduce_patronage_rate_to(token_id, target_rate); + build_default_test_externalities().execute_with(|| { + IssueTokenFixture::default() + .with_supply(DEFAULT_INITIAL_ISSUANCE) + .with_patronage_rate(DEFAULT_YEARLY_PATRONAGE_RATE.into()) + .execute_call() + .unwrap(); + increase_block_number_by(DEFAULT_BLOCK_INTERVAL); + + ReducePatronageRateToFixture::default() + .with_target_rate(YearlyRate::zero()) + .execute_call() + .unwrap(); - assert_ok!(result); assert_eq!( - Token::token_info_by_id(token_id) + Token::token_info_by_id(DEFAULT_TOKEN_ID) .patronage_info .unclaimed_patronage_tally_amount, - expected + compute_correct_patronage_amount( + DEFAULT_INITIAL_ISSUANCE, + DEFAULT_YEARLY_PATRONAGE_RATE, + DEFAULT_BLOCK_INTERVAL + ) ); }) } #[test] fn decrease_patronage_ok_noop_with_current_patronage_rate_specified_as_target() { - let rate = BlockRate::from_yearly_rate(yearly_rate!(10), BlocksPerYear::get()); - let (token_id, init_supply) = (token!(1), balance!(100)); - let owner_id = member!(1).0; - let target_rate = yearly_rate!(10); - - let token_info = TokenDataBuilder::new_empty() - .with_patronage_rate(rate) - .build(); - let config = GenesisConfigBuilder::new_empty() - .with_token_and_owner(token_id, token_info, owner_id, init_supply) - .build(); - - build_test_externalities(config).execute_with(|| { - let result = Token::reduce_patronage_rate_to(token_id, target_rate); - - assert_ok!(result); - assert_eq!(Token::token_info_by_id(token_id).patronage_info.rate, rate); - }) -} - -// for correct final rate approximation see next test -#[test] -fn decrease_patronage_ok_with_event_deposit() { - let init_rate = yearly_rate!(50); - let token_id = token!(1); - let decrement = yearly_rate!(20); - - let params = TokenDataBuilder::new_empty() - .with_patronage_rate(BlockRate::from_yearly_rate(init_rate, BlocksPerYear::get())); - let config = GenesisConfigBuilder::new_empty() - .with_token(token_id, params.build()) - .build(); + build_default_test_externalities().execute_with(|| { + IssueTokenFixture::default() + .with_patronage_rate(DEFAULT_MAX_YEARLY_PATRONAGE_RATE.into()) + .execute_call() + .unwrap(); - build_test_externalities(config).execute_with(|| { - let _ = Token::reduce_patronage_rate_to(token_id, decrement); - - let final_rate = Token::token_info_by_id(token_id) - .patronage_info - .rate - .to_yearly_rate_representation(BlocksPerYear::get()); - last_event_eq!(RawEvent::PatronageRateDecreasedTo(token_id, final_rate)); - }) -} - -#[test] -fn decrease_patronage_ok_with_new_patronage_rate_correctly_approximated() { - let init_rate = yearly_rate!(50); - let token_id = token!(1); - let target_rate = yearly_rate!(30); - - // K = 1/blocks_per_years => 30% * K ~= 57039783537.8 * 1e-18 - let expected = BlockRate(Perquintill::from_parts(57039783537)); - - let params = TokenDataBuilder::new_empty() - .with_patronage_rate(BlockRate::from_yearly_rate(init_rate, BlocksPerYear::get())); - let config = GenesisConfigBuilder::new_empty() - .with_token(token_id, params.build()) - .build(); - - build_test_externalities(config).execute_with(|| { - let _ = Token::reduce_patronage_rate_to(token_id, target_rate); + ReducePatronageRateToFixture::default() + .with_target_rate(DEFAULT_YEARLY_PATRONAGE_RATE.into()) + .execute_call() + .unwrap(); assert_eq!( - Token::token_info_by_id(token_id) + Token::token_info_by_id(DEFAULT_TOKEN_ID) .patronage_info - .rate - .0 - .deconstruct(), - expected.0.deconstruct(), + .rate, + YearlyRate::from(DEFAULT_YEARLY_PATRONAGE_RATE), ); }) } #[test] fn decrease_patronage_ok_with_last_tally_block_updated() { - let token_id = token!(1); - let target_rate = yearly_rate!(10); - let (init_rate, blocks) = (yearly_rate!(20), block!(10)); - - let params = TokenDataBuilder::new_empty() - .with_patronage_rate(BlockRate::from_yearly_rate(init_rate, BlocksPerYear::get())); - - let config = GenesisConfigBuilder::new_empty() - .with_token(token_id, params.build()) - .build(); - - build_test_externalities(config).execute_with(|| { - increase_block_number_by(blocks); - - let _ = Token::reduce_patronage_rate_to(token_id, target_rate); - + build_default_test_externalities().execute_with(|| { + IssueTokenFixture::default() + .with_patronage_rate(DEFAULT_MAX_YEARLY_PATRONAGE_RATE.into()) + .execute_call() + .unwrap(); + increase_block_number_by(DEFAULT_BLOCK_INTERVAL); + + ReducePatronageRateToFixture::default() + .with_target_rate(DEFAULT_YEARLY_PATRONAGE_RATE.into()) + .execute_call() + .unwrap(); + + let tally_block = Token::token_info_by_id(DEFAULT_TOKEN_ID) + .patronage_info + .last_unclaimed_patronage_tally_block + .saturated_into::(); assert_eq!( - block!(1) + blocks, // starting block + blocks - Token::token_info_by_id(token_id) - .patronage_info - .last_unclaimed_patronage_tally_block + DEFAULT_BLOCK_INTERVAL + 1u64, // starting block + blocks + tally_block, ) }) } #[test] fn decreasing_patronage_rate_fails_with_target_rate_exceeding_current_rate() { - let init_rate = yearly_rate!(50); - let (token_id, init_supply) = (token!(1), balance!(100)); - let owner_id = member!(1).0; - let target_rate = yearly_rate!(70); - - let token_info = TokenDataBuilder::new_empty() - .with_patronage_rate(BlockRate::from_yearly_rate(init_rate, BlocksPerYear::get())) - .build(); - let config = GenesisConfigBuilder::new_empty() - .with_token_and_owner(token_id, token_info, owner_id, init_supply) - .build(); + build_default_test_externalities().execute_with(|| { + IssueTokenFixture::default() + .with_patronage_rate(DEFAULT_YEARLY_PATRONAGE_RATE.into()) + .execute_call() + .unwrap(); - build_test_externalities(config).execute_with(|| { - let result = Token::reduce_patronage_rate_to(token_id, target_rate); + let result = ReducePatronageRateToFixture::default() + .with_target_rate(DEFAULT_MAX_YEARLY_PATRONAGE_RATE.into()) + .execute_call(); - assert_noop!( + assert_err!( result, Error::::TargetPatronageRateIsHigherThanCurrentRate ); @@ -264,43 +194,39 @@ fn decreasing_patronage_rate_fails_with_target_rate_exceeding_current_rate() { #[test] fn decreasing_patronage_rate_fails_invalid_token() { - let config = GenesisConfigBuilder::new_empty().build(); - let decrease = yearly_rate!(20); - let token_id = token!(1); + build_default_test_externalities().execute_with(|| { + IssueTokenFixture::default() + .with_patronage_rate(DEFAULT_MAX_YEARLY_PATRONAGE_RATE.into()) + .execute_call() + .unwrap(); - build_test_externalities(config).execute_with(|| { - let result = Token::reduce_patronage_rate_to(token_id, decrease); + let result = ReducePatronageRateToFixture::default() + .with_token_id(DEFAULT_TOKEN_ID + 1u64) + .execute_call(); - assert_noop!(result, Error::::TokenDoesNotExist); + assert_err!(result, Error::::TokenDoesNotExist); }) } #[test] fn claim_patronage_fails_with_active_revenue_split() { - let token_id = token!(1); - let (owner_id, owner_account) = member!(1); - let (rate, blocks) = (rate!(10), block!(MIN_REVENUE_SPLIT_TIME_TO_START - 1)); - - let params = TokenDataBuilder::new_empty() - .with_patronage_rate(rate) - .with_split_rate(DEFAULT_SPLIT_RATE); - - let config = GenesisConfigBuilder::new_empty() - .with_token(token_id, params.build()) - .with_account(owner_id, ConfigAccountData::default()) - .build(); - - build_test_externalities(config).execute_with(|| { - increase_account_balance( - &owner_account, - DEFAULT_SPLIT_REVENUE + ExistentialDeposit::get(), - ); + build_default_test_externalities_with_balances(vec![( + DEFAULT_ISSUER_ACCOUNT_ID, + DEFAULT_SPLIT_REVENUE + ExistentialDeposit::get(), + )]) + .execute_with(|| { + IssueTokenFixture::default() + .with_patronage_rate(DEFAULT_MAX_YEARLY_PATRONAGE_RATE.into()) + .execute_call() + .unwrap(); + IssueRevenueSplitFixture::default().execute_call().unwrap(); // activate revenue split - increase_block_number_by(blocks); + increase_block_number_by(MIN_REVENUE_SPLIT_TIME_TO_START - 1); + let result = ClaimPatronageCreditFixture::default().execute_call(); // expect it to fail even though the staking period is not started yet - assert_noop!( - Token::claim_patronage_credit(token_id, owner_id), + assert_err!( + result, Error::::CannotModifySupplyWhenRevenueSplitsAreActive, ); }) @@ -308,227 +234,243 @@ fn claim_patronage_fails_with_active_revenue_split() { #[test] fn claim_patronage_ok() { - let token_id = token!(1); - let owner_id = member!(1).0; - let (rate, blocks) = (rate!(10), block!(10)); - - let params = TokenDataBuilder::new_empty().with_patronage_rate(rate); - - let config = GenesisConfigBuilder::new_empty() - .with_token(token_id, params.build()) - .with_account(owner_id, ConfigAccountData::default()) - .build(); + build_default_test_externalities().execute_with(|| { + IssueTokenFixture::default() + .with_patronage_rate(DEFAULT_MAX_YEARLY_PATRONAGE_RATE.into()) + .execute_call() + .unwrap(); - build_test_externalities(config).execute_with(|| { - increase_block_number_by(blocks); + increase_block_number_by(DEFAULT_BLOCK_INTERVAL); - let result = Token::claim_patronage_credit(token_id, owner_id); + let result = ReducePatronageRateToFixture::default().execute_call(); assert_ok!(result); }) } #[test] -fn claim_patronage_ok_with_patronage_rate_for_period_capped_at_100pct() { - // Simulate condition where patronage_rate.for_period(blocks) > 100% - let token_id = token!(1); - let owner_id = member!(1).0; - let supply = balance!(100); - let rate = rate!(55); - let blocks = block!(2); // patronage rate for period = 110% > 100% - - let params = TokenDataBuilder::new_empty().with_patronage_rate(rate); - // rate for period = 110% but effective rate is capped at 100% -> 100% supply + supply - let expected = balance!(100) + supply; - - let config = GenesisConfigBuilder::new_empty() - .with_token_and_owner(token_id, params.build(), owner_id, supply) - .build(); +fn claim_patronage_ok_with_correct_credit_accounting_and_more_than_100_percent_supply() { + // [(1 + 10%/100%)^{(10*BlocksPerYear + 10)/BlocksPerYear} - 1] * supply + let expected_amount = (1.59374293008f64 + * (DEFAULT_INITIAL_ISSUANCE).saturated_into::() as f64) + .trunc() as u128; + build_default_test_externalities().execute_with(|| { + IssueTokenFixture::default() + .with_supply(DEFAULT_INITIAL_ISSUANCE) + .with_patronage_rate(DEFAULT_YEARLY_PATRONAGE_RATE.into()) + .execute_call() + .unwrap(); + let issuer_amount_pre = + Token::account_info_by_token_and_member(DEFAULT_TOKEN_ID, DEFAULT_ISSUER_MEMBER_ID) + .transferrable::(System::block_number()); + + // advancing with increase_block_number_by would take too long... + System::set_block_number( + 10 * BlocksPerYear::get().saturated_into::() + DEFAULT_BLOCK_INTERVAL + 1u64, + ); - build_test_externalities(config).execute_with(|| { - increase_block_number_by(blocks); + ClaimPatronageCreditFixture::default() + .execute_call() + .unwrap(); - let _ = Token::claim_patronage_credit(token_id, owner_id); + let issuer_amount_post = + Token::account_info_by_token_and_member(DEFAULT_TOKEN_ID, DEFAULT_ISSUER_MEMBER_ID) + .transferrable::(System::block_number()); + assert_eq!(issuer_amount_post - issuer_amount_pre, expected_amount); - assert_eq!( - expected, - Token::account_info_by_token_and_member(token_id, owner_id) - .transferrable::(System::block_number()) - ); + ClaimPatronageCreditFixture::default() + .execute_call() + .unwrap(); }) } #[test] fn claim_patronage_ok_with_supply_greater_than_u64_max() { - let token_id = token!(1); - let owner_id = member!(1).0; - let (rate, blocks) = (rate!(10), block!(10)); - let supply = balance!(1_000_000_000_000_000_000_000_000_000_000u128); - // rate * blocks = 100% , expected = 100 % supply + supply - let expected_amount = balance!(2_000_000_000_000_000_000_000_000_000_000u128); - - let params = TokenDataBuilder::new_empty().with_patronage_rate(rate); - - let config = GenesisConfigBuilder::new_empty() - .with_token_and_owner(token_id, params.build(), owner_id, supply) - .build(); - - build_test_externalities(config).execute_with(|| { - increase_block_number_by(blocks); - - let _ = Token::claim_patronage_credit(token_id, owner_id); + let big_supply = 1_000_000_000_000_000_000_000_000_000_000u128; // 10^33 > u64::max + let expected_issuer_amount_post = compute_correct_patronage_amount( + big_supply, + DEFAULT_YEARLY_PATRONAGE_RATE, + DEFAULT_BLOCK_INTERVAL, + ) + .saturating_add(big_supply); + build_default_test_externalities().execute_with(|| { + IssueTokenFixture::default() + .with_supply(big_supply) + .with_patronage_rate(DEFAULT_YEARLY_PATRONAGE_RATE.into()) + .execute_call() + .unwrap(); + increase_block_number_by(DEFAULT_BLOCK_INTERVAL); + + ClaimPatronageCreditFixture::default() + .execute_call() + .unwrap(); assert_eq!( - Token::account_info_by_token_and_member(token_id, owner_id) + Token::account_info_by_token_and_member(DEFAULT_TOKEN_ID, DEFAULT_ISSUER_MEMBER_ID) .transferrable::(System::block_number()), - expected_amount + expected_issuer_amount_post ); }) } #[test] fn claim_patronage_ok_with_event_deposit() { - let token_id = token!(1); - let (rate, blocks) = (rate!(10), block!(10)); - let (owner_id, init_supply) = (member!(1).0, balance!(100)); - - let params = TokenDataBuilder::new_empty().with_patronage_rate(rate); - - // 10%(rate) * 10(blocks) * 100(supply) - let expected_credit = balance!(100); - - let config = GenesisConfigBuilder::new_empty() - .with_token(token_id, params.build()) - .with_account(owner_id, ConfigAccountData::new_with_amount(init_supply)) - .build(); - - build_test_externalities(config).execute_with(|| { - increase_block_number_by(blocks); - - let _ = Token::claim_patronage_credit(token_id, owner_id); + build_default_test_externalities().execute_with(|| { + IssueTokenFixture::default() + .with_supply(DEFAULT_INITIAL_ISSUANCE) + .with_patronage_rate(DEFAULT_YEARLY_PATRONAGE_RATE.into()) + .execute_call() + .unwrap(); + increase_block_number_by(DEFAULT_BLOCK_INTERVAL); + + ClaimPatronageCreditFixture::default() + .execute_call() + .unwrap(); last_event_eq!(RawEvent::PatronageCreditClaimed( - token_id, - expected_credit, - owner_id, + DEFAULT_TOKEN_ID, + compute_correct_patronage_amount( + DEFAULT_INITIAL_ISSUANCE, + DEFAULT_YEARLY_PATRONAGE_RATE, + DEFAULT_BLOCK_INTERVAL + ), + DEFAULT_ISSUER_MEMBER_ID, )); }) } #[test] -fn claim_patronage_ok_with_credit_accounting() { - let token_id = token!(1); - let (owner_id, init_supply) = (member!(1).0, balance!(100)); - let (rate, blocks) = (rate!(10), block!(10)); - - // (rate * blocks)% * init_supply = 100 - let expected_patronage_credit = balance!(100); - - let token_info = TokenDataBuilder::new_empty() - .with_patronage_rate(rate) - .build(); - - let config = GenesisConfigBuilder::new_empty() - .with_token_and_owner(token_id, token_info, owner_id, init_supply) - .build(); - - build_test_externalities(config).execute_with(|| { - increase_block_number_by(blocks); - - let _ = Token::claim_patronage_credit(token_id, owner_id); - +fn claim_patronage_ok_with_correct_patronage_credit_accounting() { + build_default_test_externalities().execute_with(|| { + IssueTokenFixture::default() + .with_supply(DEFAULT_INITIAL_ISSUANCE) + .with_patronage_rate(DEFAULT_YEARLY_PATRONAGE_RATE.into()) + .execute_call() + .unwrap(); + let issuer_amount_pre = + Token::account_info_by_token_and_member(DEFAULT_TOKEN_ID, DEFAULT_ISSUER_MEMBER_ID) + .transferrable::(System::block_number()); + + increase_block_number_by(DEFAULT_BLOCK_INTERVAL); + + ClaimPatronageCreditFixture::default() + .execute_call() + .unwrap(); + + let issuer_amount_post = + Token::account_info_by_token_and_member(DEFAULT_TOKEN_ID, DEFAULT_ISSUER_MEMBER_ID) + .transferrable::(System::block_number()); assert_eq!( - Token::account_info_by_token_and_member(token_id, owner_id) - .transferrable::(System::block_number()), - expected_patronage_credit + init_supply, + issuer_amount_post - issuer_amount_pre, + compute_correct_patronage_amount( + issuer_amount_pre, + DEFAULT_YEARLY_PATRONAGE_RATE, + DEFAULT_BLOCK_INTERVAL + ) ); }) } #[test] fn claim_patronage_ok_with_unclaimed_patronage_reset() { - let (token_id, init_supply) = (token!(1), balance!(100)); - let owner_id = member!(1).0; - let (rate, blocks) = (rate!(10), block!(10)); - - let token_info = TokenDataBuilder::new_empty() - .with_patronage_rate(rate) - .build(); - - let config = GenesisConfigBuilder::new_empty() - .with_token_and_owner(token_id, token_info, owner_id, init_supply) - .build(); - - build_test_externalities(config).execute_with(|| { - increase_block_number_by(blocks); - - let _ = Token::claim_patronage_credit(token_id, owner_id); - - assert_eq!( - Token::token_info_by_id(token_id).unclaimed_patronage_at_block(System::block_number()), - balance!(0), - ); + build_default_test_externalities().execute_with(|| { + IssueTokenFixture::default() + .with_supply(DEFAULT_INITIAL_ISSUANCE) + .with_patronage_rate(DEFAULT_YEARLY_PATRONAGE_RATE.into()) + .execute_call() + .unwrap(); + + increase_block_number_by(DEFAULT_BLOCK_INTERVAL); + + ClaimPatronageCreditFixture::default() + .execute_call() + .unwrap(); + + assert!(Token::token_info_by_id(DEFAULT_TOKEN_ID) + .unclaimed_patronage_at_block::(System::block_number()) + .is_zero()); }) } #[test] fn claim_patronage_credit_fails_with_invalid_token_id() { - let token_id = token!(1); - let owner_id = member!(1).0; - let config = GenesisConfigBuilder::new_empty().build(); - - build_test_externalities(config).execute_with(|| { - let result = Token::claim_patronage_credit(token_id, owner_id); + build_default_test_externalities().execute_with(|| { + let result = ClaimPatronageCreditFixture::default() + .with_token_id(DEFAULT_TOKEN_ID) + .execute_call(); - assert_noop!(result, Error::::TokenDoesNotExist,); + assert_err!(result, Error::::TokenDoesNotExist); }) } #[test] fn claim_patronage_credit_fails_with_invalid_owner() { - let rate = rate!(50); - let (token_id, init_supply) = (token!(1), balance!(100)); - let invalid_owner_id = member!(2).0; - let owner_id = member!(1).0; - - let token_info = TokenDataBuilder::new_empty() - .with_patronage_rate(rate) - .build(); - - let config = GenesisConfigBuilder::new_empty() - .with_token_and_owner(token_id, token_info, owner_id, init_supply) - .build(); - build_test_externalities(config).execute_with(|| { - let result = Token::claim_patronage_credit(token_id, invalid_owner_id); - - assert_noop!(result, Error::::AccountInformationDoesNotExist); + build_default_test_externalities().execute_with(|| { + IssueTokenFixture::default().execute_call().unwrap(); + + let result = ClaimPatronageCreditFixture::default() + .with_member_id(MemberId::zero()) + .execute_call(); + + assert_err!(result, Error::::AccountInformationDoesNotExist); }) } #[test] fn claim_patronage_ok_with_tally_amount_set_to_zero() { - let (token_id, init_supply) = (token!(1), balance!(100)); - let owner_id = member!(1).0; - let (rate, blocks) = (rate!(10), block!(10)); - - let token_info = TokenDataBuilder::new_empty() - .with_patronage_rate(rate) - .build(); - - let config = GenesisConfigBuilder::new_empty() - .with_token_and_owner(token_id, token_info, owner_id, init_supply) - .build(); - - build_test_externalities(config).execute_with(|| { - increase_block_number_by(blocks); + build_default_test_externalities().execute_with(|| { + IssueTokenFixture::default() + .with_supply(DEFAULT_INITIAL_ISSUANCE) + .with_patronage_rate(DEFAULT_YEARLY_PATRONAGE_RATE.into()) + .execute_call() + .unwrap(); + increase_block_number_by(DEFAULT_BLOCK_INTERVAL); + + ClaimPatronageCreditFixture::default() + .execute_call() + .unwrap(); + + assert!(Token::token_info_by_id(DEFAULT_TOKEN_ID) + .patronage_info + .unclaimed_patronage_tally_amount + .is_zero()); + }) +} - let _ = Token::claim_patronage_credit(token_id, owner_id); +#[test] +fn decrease_patronage_fails_on_frozen_pallet() { + let rate = DEFAULT_YEARLY_PATRONAGE_RATE.into(); + let token_id = DEFAULT_TOKEN_ID; + build_default_test_externalities().execute_with(|| { + IssueTokenFixture::default() + .with_supply(100u64.into()) + .with_patronage_rate(DEFAULT_MAX_YEARLY_PATRONAGE_RATE.into()) + .execute_call() + .unwrap(); + + assert_ok!(Token::set_frozen_status(RawOrigin::Root.into(), true)); + assert_noop!( + Token::reduce_patronage_rate_to(token_id, rate), + Error::::PalletFrozen + ); + }) +} - assert_eq!( - Token::token_info_by_id(token_id) - .patronage_info - .unclaimed_patronage_tally_amount, - balance!(0) +#[test] +fn claim_patronage_fails_on_frozen_pallet() { + let token_id = DEFAULT_TOKEN_ID; + let member_id = DEFAULT_ISSUER_MEMBER_ID; + build_default_test_externalities().execute_with(|| { + IssueTokenFixture::default() + .with_supply(100u64.into()) + .with_patronage_rate(DEFAULT_MAX_YEARLY_PATRONAGE_RATE.into()) + .execute_call() + .unwrap(); + + assert_ok!(Token::set_frozen_status(RawOrigin::Root.into(), true)); + assert_noop!( + Token::claim_patronage_credit(token_id, member_id), + Error::::PalletFrozen ); }) } diff --git a/runtime-modules/project-token/src/tests/sale.rs b/runtime-modules/project-token/src/tests/sale.rs index 84a92fc97f..a5d0c6cb28 100644 --- a/runtime-modules/project-token/src/tests/sale.rs +++ b/runtime-modules/project-token/src/tests/sale.rs @@ -9,6 +9,7 @@ use crate::types::Joy; use crate::types::MerkleProofOf; use crate::{member, merkle_proof, merkle_root}; use frame_support::assert_ok; +use frame_system::RawOrigin; use sp_arithmetic::Permill; use sp_runtime::DispatchError; @@ -702,7 +703,7 @@ fn succesful_sale_purchase_existing_account_permissioned_token() { ::JoyExistentialDeposit::get() + bloat_bond, ); assert_ok!(Token::join_whitelist( - Origin::signed(member!(2).1), + RuntimeOrigin::signed(member!(2).1), member!(2).0, Token::next_token_id() - 1, proof @@ -980,3 +981,31 @@ fn succesful_finalize_token_sale() { FinalizeTokenSaleFixture::default().call_and_assert(Ok(())); }) } + +#[test] +fn token_issue_fails_on_frozen_pallet() { + let config = GenesisConfigBuilder::new_empty().build(); + + build_test_externalities(config).execute_with(|| { + assert_ok!(Token::set_frozen_status(RawOrigin::Root.into(), true)); + IssueTokenFixture::default().call_and_assert(Err(Error::::PalletFrozen.into())); + + assert_ok!(Token::set_frozen_status(RawOrigin::Root.into(), false)); + IssueTokenFixture::default().call_and_assert(Ok(())); + }) +} + +#[test] +fn token_sale_init_fails_on_frozen_pallet() { + let config = GenesisConfigBuilder::new_empty().build(); + + build_test_externalities(config).execute_with(|| { + IssueTokenFixture::default().call_and_assert(Ok(())); + + assert_ok!(Token::set_frozen_status(RawOrigin::Root.into(), true)); + InitTokenSaleFixture::default().call_and_assert(Err(Error::::PalletFrozen.into())); + + assert_ok!(Token::set_frozen_status(RawOrigin::Root.into(), false)); + InitTokenSaleFixture::default().call_and_assert(Ok(())); + }) +} diff --git a/runtime-modules/project-token/src/tests/split.rs b/runtime-modules/project-token/src/tests/split.rs index 77b342011c..51f4801bdc 100644 --- a/runtime-modules/project-token/src/tests/split.rs +++ b/runtime-modules/project-token/src/tests/split.rs @@ -11,6 +11,8 @@ use crate::types::{ AccountDataOf, Joy, RevenueSplitInfo, RevenueSplitState, StakingStatus, Timeline, }; use crate::{last_event_eq, Error, RawEvent}; +use frame_support::{assert_noop, assert_ok}; +use frame_system::RawOrigin; #[test] fn issue_split_fails_with_invalid_token_id() { @@ -337,7 +339,10 @@ fn finalize_split_ok_with_leftover_joys_transferred_to_account() { )]) .execute_with(|| { let treasury_account = Token::module_treasury_account(); - IssueTokenFixture::default().execute_call().unwrap(); + IssueTokenFixture::default() + .with_supply(DEFAULT_INITIAL_ISSUANCE) + .execute_call() + .unwrap(); TransferFixture::default().execute_call().unwrap(); // send participation to other acc IssueRevenueSplitFixture::default().execute_call().unwrap(); increase_block_number_by(MIN_REVENUE_SPLIT_TIME_TO_START); @@ -356,7 +361,7 @@ fn finalize_split_ok_with_leftover_joys_transferred_to_account() { // account id balance increased by DEFAULT_SPLIT_REVENUE - DEFAULT_SPLIT_JOY_DIVIDEND assert_eq!( Joy::::usable_balance(member!(1).1), - DEFAULT_SPLIT_REVENUE - DEFAULT_SPLIT_JOY_DIVIDEND + ExistentialDeposit::get() + DEFAULT_SPLIT_REVENUE - default_joy_dividend() + ed() ); }) } @@ -538,7 +543,7 @@ fn participate_in_split_ok_with_event_deposit() { 1u64, member!(2).0, DEFAULT_SPLIT_PARTICIPATION, - DEFAULT_SPLIT_JOY_DIVIDEND, + default_joy_dividend(), 0u32, // participate in split @ 0 )); }) @@ -652,12 +657,12 @@ fn participate_in_split_ok_with_dividends_transferred_to_claimer_joy_balance() { // dividend transferred from treasury to claimer account assert_eq!( Joy::::usable_balance(member!(2).1), - DEFAULT_SPLIT_JOY_DIVIDEND, + default_joy_dividend(), ); // split treasury account decreased assert_eq!( Joy::::usable_balance(Token::module_treasury_account()), - DEFAULT_SPLIT_RATE * DEFAULT_SPLIT_REVENUE - DEFAULT_SPLIT_JOY_DIVIDEND + DEFAULT_SPLIT_RATE * DEFAULT_SPLIT_REVENUE - default_joy_dividend() + ExistentialDeposit::get() ); assert_eq!( @@ -668,7 +673,7 @@ fn participate_in_split_ok_with_dividends_transferred_to_claimer_joy_balance() { start: 1u64 + MIN_REVENUE_SPLIT_TIME_TO_START, // effective start duration: DEFAULT_SPLIT_DURATION, }, - dividends_claimed: DEFAULT_SPLIT_JOY_DIVIDEND, + dividends_claimed: default_joy_dividend(), }) ); }) @@ -954,3 +959,56 @@ fn issue_revenue_split_ok_with_revenue_leftovers_retained_by_issuer() { assert_eq!(Joy::::usable_balance(member!(1).1), leftovers,); }) } + +#[test] +fn participate_in_split_fails_on_frozen_pallet() { + build_default_test_externalities_with_balances(vec![( + member!(1).1, + DEFAULT_SPLIT_REVENUE + ExistentialDeposit::get(), + )]) + .execute_with(|| { + IssueTokenFixture::default().execute_call().unwrap(); + TransferFixture::default().execute_call().unwrap(); // send participation to other acc + IssueRevenueSplitFixture::default().execute_call().unwrap(); + increase_block_number_by(MIN_REVENUE_SPLIT_TIME_TO_START); + + assert_ok!(Token::set_frozen_status(RawOrigin::Root.into(), true)); + assert_noop!( + ParticipateInSplitFixture::default().execute_call(), + Error::::PalletFrozen + ); + }) +} + +#[test] +fn exit_revenue_split_fails_on_frozen_pallet() { + build_default_test_externalities_with_balances(vec![( + member!(1).1, + DEFAULT_SPLIT_REVENUE + ExistentialDeposit::get(), + )]) + .execute_with(|| { + IssueTokenFixture::default().execute_call().unwrap(); + TransferFixture::default().execute_call().unwrap(); // send participation to other acc + IssueRevenueSplitFixture::default().execute_call().unwrap(); + increase_block_number_by(MIN_REVENUE_SPLIT_TIME_TO_START); + ParticipateInSplitFixture::default().execute_call().unwrap(); + increase_block_number_by(DEFAULT_SPLIT_DURATION); + FinalizeRevenueSplitFixture::default() + .execute_call() + .unwrap(); + + assert_ok!(Token::set_frozen_status(RawOrigin::Root.into(), true)); + assert_noop!( + ExitRevenueSplitFixture::default().execute_call(), + Error::::PalletFrozen + ); + + assert_ok!(Token::set_frozen_status(RawOrigin::Root.into(), false)); + assert_ok!(ExitRevenueSplitFixture::default().execute_call()); + last_event_eq!(RawEvent::RevenueSplitLeft( + 1u64, + member!(2).0, + DEFAULT_SPLIT_PARTICIPATION + )); + }) +} diff --git a/runtime-modules/project-token/src/tests/test_utils.rs b/runtime-modules/project-token/src/tests/test_utils.rs index 17c33f8d0a..d5e23ea034 100644 --- a/runtime-modules/project-token/src/tests/test_utils.rs +++ b/runtime-modules/project-token/src/tests/test_utils.rs @@ -1,17 +1,19 @@ +use frame_support::BoundedVec; use sp_arithmetic::traits::{One, Zero}; use sp_runtime::traits::{Hash, Saturating}; -use sp_runtime::{Permill, Perquintill}; +use sp_runtime::Permill; use sp_std::collections::btree_map::BTreeMap; +use sp_std::convert::TryFrom; -use crate::types::VestingScheduleOf; use crate::{ balance, tests::mock::*, types::{ - AccountData, BlockRate, ConfigAccountDataOf, MerkleProof, MerkleSide, PatronageData, - Payment, PaymentWithVesting, RevenueSplitState, StakingStatus, TokenAllocation, + AccountData, ConfigAccountDataOf, MerkleProof, MerkleSide, PatronageData, + PaymentWithVesting, RevenueSplitState, StakingStatus, TokenAllocation, TokenIssuanceParameters, TokenSaleId, TokenSaleOf, TransferPolicy, TransferPolicyOf, - Transfers, Validated, ValidatedPayment, VestingSchedule, VestingSource, + Transfers, Validated, ValidatedPayment, VestingSchedule, VestingScheduleOf, VestingSource, + YearlyRate, }, Config, GenesisConfig, }; @@ -26,7 +28,6 @@ pub struct TokenDataBuilder { ::Balance, ::BlockNumber, >, - pub(crate) symbol: ::Hash, pub(crate) revenue_split: RevenueSplitState< ::Balance, ::BlockNumber, @@ -43,11 +44,11 @@ impl TokenDataBuilder { next_sale_id: self.next_sale_id, transfer_policy: self.transfer_policy, patronage_info: self.patronage_info, - symbol: self.symbol, accounts_number: 0u64, revenue_split: self.revenue_split, next_revenue_split_id: 0u32, revenue_split_rate: self.revenue_split_rate, + amm_curve: None, } } @@ -58,10 +59,6 @@ impl TokenDataBuilder { } } - pub fn with_symbol(self, symbol: ::Hash) -> Self { - Self { symbol, ..self } - } - pub fn with_supply(self, supply: Balance) -> Self { Self { total_supply: supply, @@ -77,17 +74,6 @@ impl TokenDataBuilder { } } - pub fn with_patronage_rate(self, rate: BlockRate) -> Self { - Self { - patronage_info: PatronageData::<_, _> { - unclaimed_patronage_tally_amount: Balance::zero(), - rate, - last_unclaimed_patronage_tally_block: BlockNumber::one(), - }, - ..self - } - } - pub fn new_empty() -> Self { Self { tokens_issued: Balance::zero(), @@ -97,12 +83,10 @@ impl TokenDataBuilder { next_sale_id: 0, transfer_policy: TransferPolicy::Permissionless, patronage_info: PatronageData:: { - rate: BlockRate(Perquintill::zero()), + rate: YearlyRate::zero(), unclaimed_patronage_tally_amount: Balance::zero(), last_unclaimed_patronage_tally_block: BlockNumber::one(), }, - // hash of "default" - symbol: ::Hash::default(), revenue_split: RevenueSplitState::Inactive, revenue_split_rate: Permill::zero(), } @@ -115,18 +99,21 @@ impl GenesisConfigBuilder { token_info_by_id: vec![], account_info_by_token_and_member: vec![], next_token_id: TokenId::one(), - symbol_used: vec![], min_sale_duration: BlockNumber::zero(), bloat_bond: DEFAULT_BLOAT_BOND.into(), min_revenue_split_duration: MIN_REVENUE_SPLIT_DURATION.into(), min_revenue_split_time_to_start: MIN_REVENUE_SPLIT_TIME_TO_START.into(), sale_platform_fee: Permill::zero(), + amm_deactivation_threshold: Permill::from_percent(5), + bond_tx_fees: DEFAULT_AMM_BUY_FEES, + unbond_tx_fees: DEFAULT_AMM_SELL_FEES, + max_yearly_patronage_rate: DEFAULT_MAX_YEARLY_PATRONAGE_RATE.into(), + min_amm_slope_parameter: 10u32.into(), } } // add token with given params & zero supply pub fn with_token(mut self, token_id: TokenId, token_info: TokenData) -> Self { - self.symbol_used = vec![(token_info.symbol.clone(), ())]; self.token_info_by_id.push((token_id, token_info)); self.next_token_id = self.next_token_id.saturating_add(TokenId::one()); self @@ -188,12 +175,16 @@ impl GenesisConfigBuilder { account_info_by_token_and_member: self.account_info_by_token_and_member, token_info_by_id: self.token_info_by_id, next_token_id: self.next_token_id, - symbol_used: self.symbol_used, bloat_bond: self.bloat_bond, min_sale_duration: self.min_sale_duration, min_revenue_split_duration: self.min_revenue_split_duration, min_revenue_split_time_to_start: self.min_revenue_split_time_to_start, sale_platform_fee: self.sale_platform_fee, + amm_deactivation_threshold: self.amm_deactivation_threshold, + amm_buy_tx_fees: self.bond_tx_fees, + amm_sell_tx_fees: self.unbond_tx_fees, + max_yearly_patronage_rate: self.max_yearly_patronage_rate, + min_amm_slope_parameter: self.min_amm_slope_parameter, } } } @@ -281,34 +272,36 @@ impl MerkleProof { } } -impl Transfers> { - pub fn new(v: Vec<(Account, Balance)>) -> Self { - Transfers::<_, _>( +impl From> for Transfers { + fn from(v: Vec<(MemberId, Balance)>) -> Self { + Self( v.into_iter() - .map(|(acc, amount)| (acc, Payment:: { amount })) + .map(|(member_id, amount)| (member_id, amount)) .collect::>(), ) } } -impl - Transfers> -{ - pub fn new_issuer(v: Vec<(MemberId, Balance, Option)>) -> Self { - Transfers::<_, _>( - v.into_iter() - .map(|(member_id, amount, vesting_schedule)| { - ( - member_id, - PaymentWithVesting { - amount, - vesting_schedule, - }, - ) - }) - .collect::>(), - ) - } +pub fn new_transfers(v: Vec<(MemberId, Balance)>) -> BoundedVec<(MemberId, Balance), MaxOutputs> { + BoundedVec::<_, _>::try_from(v).ok().unwrap() +} + +pub fn new_issuer_transfers( + v: Vec<(MemberId, Balance, Option)>, +) -> BoundedVec<(MemberId, PaymentWithVesting), MaxOutputs> { + let tmp = v + .into_iter() + .map(|(member_id, amount, vesting_schedule)| { + ( + member_id, + PaymentWithVesting { + amount, + vesting_schedule, + }, + ) + }) + .collect::>(); + BoundedVec::<_, _>::try_from(tmp).ok().unwrap() } impl @@ -348,9 +341,8 @@ where } } -impl +impl TokenIssuanceParameters< - Hash, TokenAllocation, TransferPolicyParams, MemberId, diff --git a/runtime-modules/project-token/src/tests/transfer.rs b/runtime-modules/project-token/src/tests/transfer.rs index 5909b484a4..7c602b0746 100644 --- a/runtime-modules/project-token/src/tests/transfer.rs +++ b/runtime-modules/project-token/src/tests/transfer.rs @@ -2,7 +2,9 @@ use frame_support::{assert_noop, assert_ok}; use crate::tests::mock::*; -use crate::tests::test_utils::{default_vesting_schedule, TokenDataBuilder}; +use crate::tests::test_utils::{ + default_vesting_schedule, new_issuer_transfers, new_transfers, TokenDataBuilder, +}; use crate::traits::PalletToken; use crate::types::{TransferPolicyOf, Transfers, Validated, VestingSource}; use crate::Config; @@ -10,19 +12,20 @@ use crate::{ balance, joy, last_event_eq, member, merkle_root, origin, token, Error, RawEvent, RepayableBloatBond, }; +use frame_system::RawOrigin; use sp_runtime::{traits::Hash, DispatchError, Permill}; use sp_std::{collections::btree_map::BTreeMap, convert::TryInto}; // some helpers macro_rules! outputs { [$(($a:expr, $b: expr)),*] => { - Transfers::<_,_>::new(vec![$(($a, $b),)*]) + new_transfers(vec![$(($a, $b),)*]) }; } macro_rules! issuer_outputs { [$(($a:expr, $b: expr, $c: expr)),*] => { - Transfers::<_,_>::new_issuer(vec![$(($a, $b, $c),)*]) + new_issuer_transfers(vec![$(($a, $b, $c),)*]) }; } @@ -1839,3 +1842,43 @@ fn issuer_transfer_fails_with_incompatible_locked_funds() { ); }); } + +#[test] +fn transfer_fails_on_frozen_pallet() { + let token_id = token!(1); + let token_data = TokenDataBuilder::new_empty() + .with_transfer_policy(Policy::Permissionless) + .build(); + let (src_member_id, src_acc) = member!(1); + let (dst, amount) = (member!(2).0, balance!(100)); + + let config = GenesisConfigBuilder::new_empty() + .with_token_and_owner(token_id, token_data, src_member_id, amount) + .with_account(dst, ConfigAccountData::default()) + .build(); + + build_test_externalities(config).execute_with(|| { + increase_account_balance(&src_acc, ExistentialDeposit::get()); + + assert_ok!(Token::set_frozen_status(RawOrigin::Root.into(), true)); + assert_noop!( + Token::transfer( + origin!(src_acc), + src_member_id, + token_id, + outputs![(dst, amount)], + vec![], + ), + Error::::PalletFrozen + ); + + assert_ok!(Token::set_frozen_status(RawOrigin::Root.into(), false)); + assert_ok!(Token::transfer( + origin!(src_acc), + src_member_id, + token_id, + outputs![(dst, amount)], + vec![], + )); + }) +} diff --git a/runtime-modules/project-token/src/traits.rs b/runtime-modules/project-token/src/traits.rs index 267e1e37b8..cf4886b9ca 100644 --- a/runtime-modules/project-token/src/traits.rs +++ b/runtime-modules/project-token/src/traits.rs @@ -14,6 +14,7 @@ pub trait PalletToken< TokenSaleParams, UploadContext, TransfersWithVesting, + AmmParams, > { /// Issue token with specified characteristics @@ -81,4 +82,13 @@ pub trait PalletToken< /// Establish whether the token has an unfinalized sale fn is_sale_unscheduled(token_id: TokenId) -> bool; + + /// Establish weather AMM is active for the token + fn is_amm_active(token_id: TokenId) -> bool; + + /// Activate Amm functionality for the token + fn activate_amm(token_id: TokenId, member_id: MemberId, curve: AmmParams) -> DispatchResult; + + /// Deactivate Amm functionality for the token + fn deactivate_amm(token_id: TokenId, member_id: MemberId) -> DispatchResult; } diff --git a/runtime-modules/project-token/src/types.rs b/runtime-modules/project-token/src/types.rs index f1f3f50910..cb72594381 100644 --- a/runtime-modules/project-token/src/types.rs +++ b/runtime-modules/project-token/src/types.rs @@ -1,25 +1,30 @@ +use sp_std::iter::Sum; + use codec::{Decode, Encode, MaxEncodedLen}; -use common::{bloat_bond::RepayableBloatBond, MembershipTypes}; -use frame_support::storage::bounded_btree_map::BoundedBTreeMap; +use common::{ + bloat_bond::RepayableBloatBond, + numerical::{amm_eval_inner, one_plus_interest_pow_fixed}, + MembershipTypes, +}; use frame_support::{ dispatch::{fmt::Debug, DispatchError, DispatchResult}, ensure, - traits::Get, + traits::{tokens::Balance as BalanceTrait, Get}, + BoundedBTreeMap, BoundedVec, }; use scale_info::TypeInfo; #[cfg(feature = "std")] use serde::{Deserialize, Serialize}; -use sp_arithmetic::traits::{AtLeast32BitUnsigned, One, Saturating, Unsigned, Zero}; +use sp_arithmetic::traits::{AtLeast32BitUnsigned, One, Saturating, Zero}; use sp_runtime::{ - traits::{Convert, Hash, UniqueSaturatedInto}, - PerThing, Permill, Perquintill, SaturatedConversion, + traits::Hash, FixedPointNumber, FixedPointOperand, FixedU128, Permill, Perquintill, }; use sp_std::{ borrow::ToOwned, cmp::{max, min}, collections::btree_map::BTreeMap, convert::{TryFrom, TryInto}, - iter::Sum, + ops::Add, vec::Vec, }; use storage::{BagId, DataObjectCreationParameters}; @@ -27,6 +32,18 @@ use storage::{BagId, DataObjectCreationParameters}; // crate imports use crate::{errors::Error, Config, RepayableBloatBondOf}; +// trait "aliases" +pub trait BlockNumberTrait: Copy + AtLeast32BitUnsigned + Saturating + Default {} +impl BlockNumberTrait for T {} + +// `TokenBalance` will be implemented as `u128` in the runtime configuration +pub trait TokenBalanceTrait: BalanceTrait + FixedPointOperand + Sum {} +impl TokenBalanceTrait for T {} + +// `Balance` will be implemented as `u128` in the runtime configuration +pub trait JoyTokenBalanceTrait: BalanceTrait {} +impl JoyTokenBalanceTrait for T {} + /// Source of tokens subject to vesting that were acquired by an account /// either through purchase or during initial issuance #[cfg_attr(feature = "std", derive(Serialize, Deserialize))] @@ -98,9 +115,6 @@ pub struct TokenData { /// Transfer policy pub transfer_policy: TransferPolicy, - /// Symbol used to identify token - pub symbol: Hash, - /// Patronage Information pub patronage_info: PatronageData, @@ -115,6 +129,9 @@ pub struct TokenData { /// Latest Token Revenue split (active / inactive) pub next_revenue_split_id: RevenueSplitId, + + /// Amm Curve functionality + pub amm_curve: Option>, } /// Revenue Split State @@ -128,7 +145,7 @@ pub enum RevenueSplitState { Active(RevenueSplitInfo), } -impl +impl RevenueSplitState { pub fn ensure_inactive(&self) -> DispatchResult { @@ -189,7 +206,7 @@ pub struct RevenueSplitInfo { pub dividends_claimed: JoyBalance, } -impl +impl RevenueSplitInfo { /// Leftovers allocation not claimed so far @@ -206,7 +223,7 @@ pub struct Timeline { pub duration: BlockNumber, } -impl Timeline { +impl Timeline { pub fn from_params(start: BlockNumber, duration: BlockNumber) -> Self { Timeline::<_> { start, duration } } @@ -236,7 +253,7 @@ impl Timeline { #[derive(Encode, Decode, Clone, PartialEq, Eq, Default, Debug, TypeInfo, MaxEncodedLen)] pub struct PatronageData { /// Patronage rate - pub rate: BlockRate, + pub rate: YearlyRate, /// Tally count for the outstanding credit before latest patronage config change pub unclaimed_patronage_tally_amount: Balance, @@ -321,11 +338,8 @@ pub struct VestingSchedule { pub(crate) burned_amount: Balance, } -impl VestingSchedule -where - BlockNumber: Saturating + PartialOrd + Copy, - Balance: - Saturating + Clone + Copy + From + Unsigned + TryInto + TryInto + Ord + Zero, +impl + VestingSchedule { /// Construct a vesting schedule from `VestingScheduleParams` and `init_block` /// @@ -359,11 +373,9 @@ where } // Vesting period is ongoing if end_block > b { - let remaining_vesting_blocks = end_block.saturating_sub(b); - let remaining_vesting_percentage = Permill::from_rational( - T::BlockNumberToBalance::convert(remaining_vesting_blocks), - T::BlockNumberToBalance::convert(self.linear_vesting_duration), - ); + let remaining_vesting_blocks = end_block.saturating_sub(b).unique_saturated_into(); + let remaining_vesting_percentage = + Permill::from_rational(remaining_vesting_blocks, self.linear_vesting_duration); return (remaining_vesting_percentage * self.post_cliff_total_amount) .saturating_sub(self.burned_amount); } @@ -453,9 +465,9 @@ pub struct TokenSale +impl< + JoyBalance, + Balance: TokenBalanceTrait, + BlockNumber: BlockNumberTrait, + MemberId, + AccountId, + > TokenSale< JoyBalance, Balance, @@ -487,9 +505,6 @@ impl MemberId, AccountId, > -where - BlockNumber: Saturating + Zero + Copy + Clone + PartialOrd, - Balance: Saturating + Clone + Copy + From + Unsigned + TryInto + TryInto + Ord, { pub(crate) fn try_from_params( params: TokenSaleParamsOf, @@ -569,9 +584,82 @@ where } } +/// Represents token's amm with linear pricing function y = ax + b +#[cfg_attr(feature = "std", derive(Serialize, Deserialize))] +#[derive(Default, Encode, Decode, TypeInfo, Clone, Debug, Eq, PartialEq, MaxEncodedLen)] +pub struct AmmParams { + /// Slope parameter : a + pub slope: Balance, + + /// Intercept : b + pub intercept: Balance, +} + +/// Represents token's amm curve with linear pricing function y = ax + b +#[cfg_attr(feature = "std", derive(Serialize, Deserialize))] +#[derive(Default, Encode, Decode, TypeInfo, Clone, Debug, Eq, PartialEq, MaxEncodedLen)] +pub struct AmmCurve { + /// Slope parameter : a + pub slope: Balance, + + /// Intercept : b + pub intercept: Balance, + + // amount of token added to circulation by the AMM so far + pub provided_supply: Balance, +} + +#[derive(Debug, PartialEq, Clone)] +pub(crate) enum AmmOperation { + Sell, + Buy, +} +impl AmmCurve { + pub(crate) fn from_params(params: AmmParams) -> Self { + Self { + slope: params.slope, + intercept: params.intercept, + provided_supply: Balance::zero(), + } + } + + pub(crate) fn increase_amm_bought_amount_by(&mut self, amount: Balance) { + self.provided_supply = self.provided_supply.saturating_add(amount); + } + + pub(crate) fn decrease_amm_bought_amount_by(&mut self, amount: Balance) { + self.provided_supply = self.provided_supply.saturating_sub(amount); + } + + pub(crate) fn eval( + &self, + amount: Balance, + bond_operation: AmmOperation, + ) -> Result { + let provided_supply_pre = self.provided_supply; + let provided_supply_post = if AmmOperation::Sell == bond_operation { + ensure!( + amount <= self.provided_supply, + Error::::NotEnoughTokenMintedByAmmForThisSale + ); + self.provided_supply.sub(amount) + } else { + self.provided_supply.add(amount) + }; + + amm_eval_inner::( + provided_supply_pre, + provided_supply_post, + self.slope, + self.intercept, + ) + .ok_or_else(|| Error::::ArithmeticError.into()) + } +} + /// Represents token's offering state #[derive(Encode, Decode, Clone, PartialEq, Eq, Debug)] -pub enum OfferingState { +pub enum OfferingState { /// Idle state Idle, @@ -581,28 +669,31 @@ pub enum OfferingState { /// Active sale state Sale(TokenSale), - /// state for IBCO, it might get decorated with the JOY reserve - /// amount for the token - BondingCurve, + /// state for Amm + Amm(AmmCurve), } -impl OfferingState { +impl OfferingState { pub(crate) fn of(token: &TokenDataOf) -> OfferingStateOf { - token - .sale - .as_ref() - .map_or(OfferingStateOf::::Idle, |sale| { - let current_block = >::block_number(); - if current_block < sale.start_block { - OfferingStateOf::::UpcomingSale(sale.clone()) - } else if current_block >= sale.start_block - && current_block < sale.start_block.saturating_add(sale.duration) - { - OfferingStateOf::::Sale(sale.clone()) - } else { - OfferingStateOf::::Idle - } - }) + if let Some(curve) = token.amm_curve.clone() { + OfferingStateOf::::Amm(curve) + } else { + token + .sale + .as_ref() + .map_or(OfferingStateOf::::Idle, |sale| { + let current_block = >::block_number(); + if current_block < sale.start_block { + OfferingStateOf::::UpcomingSale(sale.clone()) + } else if current_block >= sale.start_block + && current_block < sale.start_block.saturating_add(sale.duration) + { + OfferingStateOf::::Sale(sale.clone()) + } else { + OfferingStateOf::::Idle + } + }) + } } pub(crate) fn ensure_idle_of(token: &TokenDataOf) -> DispatchResult { @@ -629,6 +720,15 @@ impl OfferingState { _ => Err(Error::::NoActiveSale.into()), } } + + pub(crate) fn ensure_amm_of( + token: &TokenDataOf, + ) -> Result, DispatchError> { + match Self::of::(token) { + OfferingStateOf::::Amm(curve) => Ok(curve), + _ => Err(Error::::NotInAmmState.into()), + } + } } #[derive(Encode, Decode, Clone, PartialEq, Eq, PartialOrd, Ord, Debug, TypeInfo)] @@ -639,13 +739,10 @@ pub struct TokenAllocation { /// Input parameters for token issuance #[derive(Encode, Decode, Clone, PartialEq, Eq, Default, Debug, TypeInfo)] -pub struct TokenIssuanceParameters { +pub struct TokenIssuanceParameters { /// Initial allocation of the token pub initial_allocation: BTreeMap, - /// Token Symbol - pub symbol: Hash, - /// Initial transfer policy: pub transfer_policy: TransferPolicyParams, @@ -654,21 +751,23 @@ pub struct TokenIssuanceParameters, } impl TokenIssuanceParameters< - Hash, TokenAllocation, TransferPolicyParams>, MemberId, > where MemberId: Ord, - Balance: Sum + Copy, + Balance: TokenBalanceTrait, SingleDataObjectUploadParams: Clone, { - pub(crate) fn get_initial_allocation_bloat_bond + Saturating>( + pub(crate) fn get_initial_allocation_bloat_bond( &self, bloat_bond: JoyBalance, ) -> JoyBalance { @@ -697,9 +796,52 @@ pub enum MerkleSide { } /// Yearly rate used for patronage info initialization -#[derive(Encode, Decode, Clone, PartialEq, Eq, Debug, Copy, Default, TypeInfo)] +#[cfg_attr(feature = "std", derive(Serialize, Deserialize))] +#[derive( + Encode, Decode, Clone, PartialEq, Eq, Debug, Copy, PartialOrd, Default, TypeInfo, MaxEncodedLen, +)] pub struct YearlyRate(pub Permill); +impl From for YearlyRate { + fn from(a: Permill) -> Self { + Self(a) + } +} + +impl YearlyRate { + // floating point arithmetic cannot be used in + pub fn for_period(self, blocks: BlockNumber) -> FixedU128 + where + BlockNumber: BlockNumberTrait, + BlocksPerYear: Get, + { + let rate = FixedU128::saturating_from_rational::( + blocks.unique_saturated_into(), + BlocksPerYear::get() as u128, + ); + + let result = one_plus_interest_pow_fixed(self.0, rate); + result.saturating_sub(FixedU128::one()) + } +} + +impl Add for YearlyRate { + type Output = Self; + fn add(self, rhs: Self) -> Self::Output { + Self(self.0.add(rhs.0).min(Permill::one())) + } +} + +impl Zero for YearlyRate { + fn is_zero(&self) -> bool { + self.0.is_zero() + } + + fn zero() -> Self { + Self(Permill::zero()) + } +} + /// Block rate used for patronage accounting #[cfg_attr(feature = "std", derive(Serialize, Deserialize))] #[derive( @@ -711,13 +853,6 @@ pub struct BlockRate(pub Perquintill); #[derive(Encode, Decode, Clone, PartialEq, Eq, Debug, TypeInfo)] pub struct MerkleProof(pub Vec<(Hasher::Output, MerkleSide)>); -/// Information about a payment -#[derive(Encode, Decode, Clone, PartialEq, Eq, Debug, TypeInfo)] -pub struct Payment { - /// Amount - pub amount: Balance, -} - /// Information about a payment with optional vesting schedule #[derive(Encode, Decode, Clone, PartialEq, Eq, Debug, TypeInfo)] pub struct PaymentWithVesting { @@ -728,12 +863,12 @@ pub struct PaymentWithVesting { pub vesting_schedule: Option, } -impl From> +impl From for PaymentWithVesting { - fn from(payment: Payment) -> Self { + fn from(amount: Balance) -> Self { Self { - amount: payment.amount, + amount, vesting_schedule: None, } } @@ -810,7 +945,7 @@ pub enum ValidatedWithBloatBond { // implementation /// Default trait for OfferingState -impl Default for OfferingState { +impl Default for OfferingState { fn default() -> Self { OfferingState::Idle } @@ -885,7 +1020,7 @@ where } } -impl +impl AccountData, RepayableBloatBond, VestingSchedulesMap> { pub fn new_with_amount_and_bond(amount: Balance, bloat_bond: RepayableBloatBond) -> Self { @@ -905,18 +1040,8 @@ impl BoundedBTreeMap, MaxVestingSchedules>, > where - Balance: Clone - + Zero - + From - + TryInto - + Unsigned - + Saturating - + Sum - + PartialOrd - + Ord - + TryInto - + Copy, - BlockNumber: Copy + Clone + PartialOrd + Ord + Saturating + From + Unsigned, + Balance: TokenBalanceTrait, + BlockNumber: BlockNumberTrait, RepayableBloatBond: Default, MaxVestingSchedules: Get, { @@ -925,11 +1050,11 @@ where schedule: VestingSchedule, bloat_bond: RepayableBloatBond, ) -> Result { - let next_vesting_transfer_id = if let VestingSource::IssuerTransfer(_) = source { - 1 - } else { - 0 + let next_vesting_transfer_id = match source { + VestingSource::IssuerTransfer(_) => 1, + _ => 0, }; + let vesting_schedules = [(source, schedule.clone())] .iter() .cloned() @@ -1175,7 +1300,15 @@ where } } /// Token Data implementation -impl +impl< + JoyBalance, + Balance: TokenBalanceTrait, + Hash, + BlockNumber, + VestingScheduleParams, + MemberId, + AccountId, + > TokenData< Balance, Hash, @@ -1184,9 +1317,9 @@ impl, > where - Balance: Zero + Copy + Saturating + Debug + From + UniqueSaturatedInto + Unsigned, - BlockNumber: PartialOrd + Saturating + Copy + AtLeast32BitUnsigned, - JoyBalance: Copy + Saturating + Zero, + Balance: TokenBalanceTrait, + BlockNumber: BlockNumberTrait, + JoyBalance: JoyTokenBalanceTrait, { // increase total supply pub(crate) fn increase_supply_by(&mut self, amount: Balance) { @@ -1223,19 +1356,27 @@ where self.patronage_info.unclaimed_patronage_tally_amount = amount; } - /// Computes: period * rate * supply + tally - pub(crate) fn unclaimed_patronage_at_block(&self, block: BlockNumber) -> Balance { + /// Computes supply inflation since last patronage event, used when updating patronage rate + pub(crate) fn unclaimed_patronage_at_block>( + &self, + block: BlockNumber, + ) -> Balance { let blocks = block.saturating_sub(self.patronage_info.last_unclaimed_patronage_tally_block); - let unclaimed_patronage_percent = self.patronage_info.rate.for_period(blocks); - unclaimed_patronage_percent - .mul_floor(self.total_supply) - .saturating_add(self.patronage_info.unclaimed_patronage_tally_amount) + let net_rate = self + .patronage_info + .rate + .for_period::<_, BlocksPerYear>(blocks); + net_rate.saturating_mul_int(self.total_supply) } - pub fn set_new_patronage_rate_at_block(&mut self, new_rate: BlockRate, block: BlockNumber) { + pub fn set_new_patronage_rate_at_block>( + &mut self, + new_rate: YearlyRate, + block: BlockNumber, + ) { // update tally according to old rate self.patronage_info.unclaimed_patronage_tally_amount = - self.unclaimed_patronage_at_block(block); + self.unclaimed_patronage_at_block::(block); self.patronage_info.last_unclaimed_patronage_tally_block = block; self.patronage_info.rate = new_rate; } @@ -1265,21 +1406,21 @@ where Error::::RevenueSplitRateIsZero ); + ensure!( + params.patronage_rate <= crate::Pallet::::max_yearly_patronage_rate(), + Error::::YearlyPatronageRateLimitExceeded + ); + let patronage_info = PatronageData::<::Balance, ::BlockNumber> { last_unclaimed_patronage_tally_block: current_block, unclaimed_patronage_tally_amount: ::Balance::zero(), - rate: BlockRate::from_yearly_rate(params.patronage_rate, T::BlocksPerYear::get()), + rate: params.patronage_rate, }; - let total_supply = params - .initial_allocation - .iter() - .map(|(_, v)| v.amount) - .sum(); + let total_supply = params.initial_allocation.values().map(|v| v.amount).sum(); Ok(TokenData { - symbol: params.symbol, total_supply, tokens_issued: total_supply, sale: None, @@ -1289,10 +1430,22 @@ where accounts_number: 0, revenue_split: RevenueSplitState::Inactive, next_revenue_split_id: 0, - // TODO: revenue split rate might be subjected to constraints: https://github.com/Joystream/atlas/issues/2728 revenue_split_rate: params.revenue_split_rate, + amm_curve: None, }) } + + pub(crate) fn increase_amm_bought_amount_by(&mut self, amount: Balance) { + if let Some(curve) = self.amm_curve.as_mut() { + curve.increase_amm_bought_amount_by(amount) + } + } + + pub(crate) fn decrease_amm_bought_amount_by(&mut self, amount: Balance) { + if let Some(curve) = self.amm_curve.as_mut() { + curve.decrease_amm_bought_amount_by(amount) + } + } } impl MerkleProof { @@ -1319,10 +1472,10 @@ impl MerkleProof { impl Transfers> where - Balance: Sum + Copy, + Balance: TokenBalanceTrait, { pub fn total_amount(&self) -> Balance { - self.0.iter().map(|(_, payment)| payment.amount).sum() + self.0.values().map(|payment| payment.amount).sum() } } @@ -1332,60 +1485,39 @@ impl ValidatedPayment>, > where - Balance: Sum + Copy, + Balance: TokenBalanceTrait, { pub fn total_amount(&self) -> Balance { self.0 - .iter() - .map(|(_, validated_payment)| validated_payment.payment.amount) + .values() + .map(|validated_payment| validated_payment.payment.amount) .sum() } } -impl From>> +// BoundedVec<(K, Balance), S> -> Transfers +impl> + From> for Transfers> where MemberId: Ord + Clone, Balance: Clone, { - fn from(v: Transfers>) -> Self { + fn from(v: BoundedVec<(MemberId, Balance), MaxOutputs>) -> Self { Self( - v.0.iter() - .map(|(a, p)| (a.clone(), p.clone().into())) - .collect(), + v.into_iter() + .map(|(member_id, amount)| (member_id, PaymentWithVesting::from(amount))) + .collect::>(), ) } } -impl From> for BTreeMap { - fn from(v: Transfers) -> Self { - v.0 - } -} - -/// Block Rate bare minimum impementation -impl BlockRate { - pub fn from_yearly_rate(r: YearlyRate, blocks_per_year: u32) -> Self { - let max_accuracy: u64 = ::ACCURACY.into(); - BlockRate(Perquintill::from_rational( - r.0.deconstruct().into(), - max_accuracy.saturating_mul(blocks_per_year.into()), - )) - } - - pub fn to_yearly_rate_representation(self, blocks_per_year: u32) -> Perquintill { - self.for_period(blocks_per_year) - } - - pub fn for_period(self, blocks: BlockNumber) -> Perquintill - where - BlockNumber: AtLeast32BitUnsigned + Clone, - { - Perquintill::from_parts(self.0.deconstruct().saturating_mul(blocks.saturated_into())) - } - - pub fn saturating_sub(self, other: Self) -> Self { - BlockRate(self.0.saturating_sub(other.0)) +// BoundedVec<(K,V),S> -> Transfers +impl> From> + for Transfers +{ + fn from(v: BoundedVec<(MemberId, Payment), MaxOutputs>) -> Self { + Self(v.into_iter().collect::>()) } } @@ -1433,7 +1565,6 @@ pub type TokenAllocationOf = TokenAllocation, VestingSchedu /// Alias for Token Issuance Parameters pub type TokenIssuanceParametersOf = TokenIssuanceParameters< - ::Hash, TokenAllocationOf, TransferPolicyParamsOf, ::MemberId, @@ -1482,7 +1613,7 @@ pub(crate) type TokenSaleOf = TokenSale< >; /// Alias for OfferingState -pub(crate) type OfferingStateOf = OfferingState>; +pub(crate) type OfferingStateOf = OfferingState, AmmCurveOf>; /// Alias for UploadContext pub type UploadContextOf = UploadContext<::AccountId, BagId>; @@ -1500,15 +1631,21 @@ pub type PaymentWithVestingOf = /// Alias for ValidatedPayment pub(crate) type ValidatedPaymentOf = ValidatedPayment>; -/// Alias for Transfers w/ Payment -pub(crate) type TransfersOf = - Transfers<::MemberId, Payment>>; +/// Alias used for issuer_transfer +pub(crate) type TransferOutputsOf = BoundedVec< + (::MemberId, TokenBalanceOf), + ::MaxOutputs, +>; /// Alias for Transfers w/ PaymentWithVesting -pub type TransfersWithVestingOf = - Transfers<::MemberId, PaymentWithVestingOf>; +pub type TransfersOf = Transfers<::MemberId, PaymentWithVestingOf>; + +/// Alias used for transfers +pub type TransferWithVestingOutputsOf = BoundedVec< + (::MemberId, PaymentWithVestingOf), + ::MaxOutputs, +>; -/// Validated transfers /// Alias for Timeline pub type TimelineOf = Timeline<::BlockNumber>; @@ -1534,3 +1671,9 @@ pub type VestingSchedulesOf = BoundedBTreeMap< VestingScheduleOf, ::MaxVestingSchedulesPerAccountPerToken, >; + +/// Alias for the amm curve +pub type AmmCurveOf = AmmCurve>; + +/// Alias for the amm params +pub type AmmParamsOf = AmmParams>; diff --git a/runtime-modules/project-token/src/weights.rs b/runtime-modules/project-token/src/weights.rs index f135fcd0b1..1cfdcd86b5 100644 --- a/runtime-modules/project-token/src/weights.rs +++ b/runtime-modules/project-token/src/weights.rs @@ -18,22 +18,21 @@ //! Autogenerated weights for project_token //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-10-20, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("dev"), DB CACHE: 1024 +//! DATE: 2023-11-07, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("prod-test"), DB CACHE: 1024 // Executed Command: -// ./../target/release/joystream-node +// ./scripts/../target/release/joystream-node // benchmark // pallet -// --base-path=/mnt/disks/local-ssd/ // --pallet=project_token // --extrinsic=* -// --chain=dev +// --chain=prod-test // --steps=50 // --repeat=20 // --execution=wasm -// --template=./../devops/joystream-pallet-weight-template.hbs -// --output=./../runtime-modules/project-token/src/weights.rs +// --template=./scripts/../devops/joystream-pallet-weight-template.hbs +// --output=./scripts/../runtime-modules/project-token/src/weights.rs #![cfg_attr(rustfmt, rustfmt_skip)] #![allow(unused_parens)] @@ -51,108 +50,285 @@ pub trait WeightInfo { fn purchase_tokens_on_sale() -> Weight; fn participate_in_split() -> Weight; fn exit_revenue_split() -> Weight; + fn set_frozen_status() -> Weight; fn burn() -> Weight; + fn buy_on_amm_with_account_creation() -> Weight; + fn buy_on_amm_with_existing_account() -> Weight; + fn sell_on_amm() -> Weight; } /// Weights for project_token using the Substrate node and recommended hardware. pub struct SubstrateWeight(PhantomData); impl WeightInfo for SubstrateWeight { - // Storage: Membership MembershipById (r:2 w:0) + // Storage: Token PalletFrozen (r:1 w:0) + // Proof: Token PalletFrozen (max_values: Some(1), max_size: Some(1), added: 496, mode: MaxEncodedLen) + // Storage: Membership MembershipById (r:25 w:0) + // Proof: Membership MembershipById (max_values: None, max_size: Some(125), added: 2600, mode: MaxEncodedLen) // Storage: Token TokenInfoById (r:1 w:1) - // Storage: Token AccountInfoByTokenAndMember (r:2 w:2) + // Proof: Token TokenInfoById (max_values: None, max_size: Some(352), added: 2827, mode: MaxEncodedLen) + // Storage: Token AccountInfoByTokenAndMember (r:25 w:25) + // Proof: Token AccountInfoByTokenAndMember (max_values: None, max_size: Some(489), added: 2964, mode: MaxEncodedLen) // Storage: Token BloatBond (r:1 w:0) + // Proof: Token BloatBond (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) // Storage: System Account (r:2 w:2) + // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + /// The range of component `o` is `[1, 24]`. + /// The range of component `m` is `[1, 100]`. fn transfer(o: u32, m: u32, ) -> Weight { - (0 as Weight) - // Standard Error: 7_000 - .saturating_add((16_066_000 as Weight).saturating_mul(o as Weight)) - // Standard Error: 68_000 - .saturating_add((449_000 as Weight).saturating_mul(m as Weight)) - .saturating_add(T::DbWeight::get().reads(6 as Weight)) - .saturating_add(T::DbWeight::get().reads((2 as Weight).saturating_mul(o as Weight))) - .saturating_add(T::DbWeight::get().writes(4 as Weight)) - .saturating_add(T::DbWeight::get().writes((1 as Weight).saturating_mul(o as Weight))) + // Proof Size summary in bytes: + // Measured: `1303 + o * (138 ±0)` + // Estimated: `20544 + o * (5564 ±0)` + // Minimum execution time: 206_420 nanoseconds. + Weight::from_parts(100_964_050, 0u64) + .saturating_add(Weight::from_parts(0, 20544)) + // Standard Error: 50_287 + .saturating_add(Weight::from_parts(11_041_181, 0u64).saturating_mul(o.into())) + // Standard Error: 11_975 + .saturating_add(Weight::from_parts(971_931, 0u64).saturating_mul(m.into())) + .saturating_add(T::DbWeight::get().reads(7_u64)) + .saturating_add(T::DbWeight::get().reads((2_u64).saturating_mul(o.into()))) + .saturating_add(T::DbWeight::get().writes(4_u64)) + .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(o.into()))) + .saturating_add(Weight::from_parts(0, 5564).saturating_mul(o.into())) } + // Storage: Token PalletFrozen (r:1 w:0) + // Proof: Token PalletFrozen (max_values: Some(1), max_size: Some(1), added: 496, mode: MaxEncodedLen) // Storage: Token TokenInfoById (r:1 w:1) + // Proof: Token TokenInfoById (max_values: None, max_size: Some(352), added: 2827, mode: MaxEncodedLen) // Storage: Token AccountInfoByTokenAndMember (r:1 w:1) + // Proof: Token AccountInfoByTokenAndMember (max_values: None, max_size: Some(489), added: 2964, mode: MaxEncodedLen) // Storage: Membership MembershipById (r:1 w:0) + // Proof: Membership MembershipById (max_values: None, max_size: Some(125), added: 2600, mode: MaxEncodedLen) // Storage: System Account (r:2 w:2) + // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) fn dust_account() -> Weight { - (63_410_000 as Weight) - .saturating_add(T::DbWeight::get().reads(5 as Weight)) - .saturating_add(T::DbWeight::get().writes(4 as Weight)) + // Proof Size summary in bytes: + // Measured: `1037` + // Estimated: `19043` + // Minimum execution time: 60_546 nanoseconds. + Weight::from_parts(62_573_000, 0u64) + .saturating_add(Weight::from_parts(0, 19043)) + .saturating_add(T::DbWeight::get().reads(6_u64)) + .saturating_add(T::DbWeight::get().writes(4_u64)) } + // Storage: Token PalletFrozen (r:1 w:0) + // Proof: Token PalletFrozen (max_values: Some(1), max_size: Some(1), added: 496, mode: MaxEncodedLen) // Storage: Membership MembershipById (r:1 w:0) + // Proof: Membership MembershipById (max_values: None, max_size: Some(125), added: 2600, mode: MaxEncodedLen) // Storage: Token TokenInfoById (r:1 w:1) + // Proof: Token TokenInfoById (max_values: None, max_size: Some(352), added: 2827, mode: MaxEncodedLen) // Storage: Token AccountInfoByTokenAndMember (r:1 w:1) + // Proof: Token AccountInfoByTokenAndMember (max_values: None, max_size: Some(489), added: 2964, mode: MaxEncodedLen) // Storage: Token BloatBond (r:1 w:0) + // Proof: Token BloatBond (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) // Storage: System Account (r:2 w:2) + // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + /// The range of component `h` is `[1, 10]`. fn join_whitelist(h: u32, ) -> Weight { - (81_601_000 as Weight) - // Standard Error: 23_000 - .saturating_add((1_010_000 as Weight).saturating_mul(h as Weight)) - .saturating_add(T::DbWeight::get().reads(6 as Weight)) - .saturating_add(T::DbWeight::get().writes(4 as Weight)) + // Proof Size summary in bytes: + // Measured: `1062` + // Estimated: `20544` + // Minimum execution time: 80_205 nanoseconds. + Weight::from_parts(82_152_581, 0u64) + .saturating_add(Weight::from_parts(0, 20544)) + // Standard Error: 14_533 + .saturating_add(Weight::from_parts(686_762, 0u64).saturating_mul(h.into())) + .saturating_add(T::DbWeight::get().reads(7_u64)) + .saturating_add(T::DbWeight::get().writes(4_u64)) } + // Storage: Token PalletFrozen (r:1 w:0) + // Proof: Token PalletFrozen (max_values: Some(1), max_size: Some(1), added: 496, mode: MaxEncodedLen) // Storage: Membership MembershipById (r:1 w:0) + // Proof: Membership MembershipById (max_values: None, max_size: Some(125), added: 2600, mode: MaxEncodedLen) // Storage: Token TokenInfoById (r:1 w:1) + // Proof: Token TokenInfoById (max_values: None, max_size: Some(352), added: 2827, mode: MaxEncodedLen) // Storage: Token SalePlatformFee (r:1 w:0) + // Proof: Token SalePlatformFee (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) // Storage: Token AccountInfoByTokenAndMember (r:1 w:1) + // Proof: Token AccountInfoByTokenAndMember (max_values: None, max_size: Some(489), added: 2964, mode: MaxEncodedLen) // Storage: Token BloatBond (r:1 w:0) + // Proof: Token BloatBond (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) // Storage: System Account (r:3 w:3) + // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) fn purchase_tokens_on_sale() -> Weight { - (112_750_000 as Weight) - .saturating_add(T::DbWeight::get().reads(8 as Weight)) - .saturating_add(T::DbWeight::get().writes(5 as Weight)) + // Proof Size summary in bytes: + // Measured: `1298` + // Estimated: `24636` + // Minimum execution time: 106_921 nanoseconds. + Weight::from_parts(109_485_000, 0u64) + .saturating_add(Weight::from_parts(0, 24636)) + .saturating_add(T::DbWeight::get().reads(9_u64)) + .saturating_add(T::DbWeight::get().writes(5_u64)) } + // Storage: Token PalletFrozen (r:1 w:0) + // Proof: Token PalletFrozen (max_values: Some(1), max_size: Some(1), added: 496, mode: MaxEncodedLen) // Storage: Membership MembershipById (r:1 w:0) + // Proof: Membership MembershipById (max_values: None, max_size: Some(125), added: 2600, mode: MaxEncodedLen) // Storage: Token TokenInfoById (r:1 w:1) + // Proof: Token TokenInfoById (max_values: None, max_size: Some(352), added: 2827, mode: MaxEncodedLen) // Storage: Token AccountInfoByTokenAndMember (r:1 w:1) + // Proof: Token AccountInfoByTokenAndMember (max_values: None, max_size: Some(489), added: 2964, mode: MaxEncodedLen) // Storage: System Account (r:2 w:2) + // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) fn participate_in_split() -> Weight { - (76_310_000 as Weight) - .saturating_add(T::DbWeight::get().reads(5 as Weight)) - .saturating_add(T::DbWeight::get().writes(4 as Weight)) + // Proof Size summary in bytes: + // Measured: `1446` + // Estimated: `19043` + // Minimum execution time: 73_317 nanoseconds. + Weight::from_parts(75_770_000, 0u64) + .saturating_add(Weight::from_parts(0, 19043)) + .saturating_add(T::DbWeight::get().reads(6_u64)) + .saturating_add(T::DbWeight::get().writes(4_u64)) } + // Storage: Token PalletFrozen (r:1 w:0) + // Proof: Token PalletFrozen (max_values: Some(1), max_size: Some(1), added: 496, mode: MaxEncodedLen) // Storage: Membership MembershipById (r:1 w:0) + // Proof: Membership MembershipById (max_values: None, max_size: Some(125), added: 2600, mode: MaxEncodedLen) // Storage: Token TokenInfoById (r:1 w:0) + // Proof: Token TokenInfoById (max_values: None, max_size: Some(352), added: 2827, mode: MaxEncodedLen) // Storage: Token AccountInfoByTokenAndMember (r:1 w:1) + // Proof: Token AccountInfoByTokenAndMember (max_values: None, max_size: Some(489), added: 2964, mode: MaxEncodedLen) fn exit_revenue_split() -> Weight { - (42_400_000 as Weight) - .saturating_add(T::DbWeight::get().reads(3 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + // Proof Size summary in bytes: + // Measured: `1132` + // Estimated: `12847` + // Minimum execution time: 42_581 nanoseconds. + Weight::from_parts(43_405_000, 0u64) + .saturating_add(Weight::from_parts(0, 12847)) + .saturating_add(T::DbWeight::get().reads(4_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) } + // Storage: Token PalletFrozen (r:0 w:1) + // Proof: Token PalletFrozen (max_values: Some(1), max_size: Some(1), added: 496, mode: MaxEncodedLen) + fn set_frozen_status() -> Weight { + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 9_719 nanoseconds. + Weight::from_parts(10_088_000, 0u64) + .saturating_add(Weight::from_parts(0, 0)) + .saturating_add(T::DbWeight::get().writes(1_u64)) + } + // Storage: Token PalletFrozen (r:1 w:0) + // Proof: Token PalletFrozen (max_values: Some(1), max_size: Some(1), added: 496, mode: MaxEncodedLen) // Storage: Membership MembershipById (r:1 w:0) + // Proof: Membership MembershipById (max_values: None, max_size: Some(125), added: 2600, mode: MaxEncodedLen) // Storage: Token TokenInfoById (r:1 w:1) + // Proof: Token TokenInfoById (max_values: None, max_size: Some(352), added: 2827, mode: MaxEncodedLen) // Storage: Token AccountInfoByTokenAndMember (r:1 w:1) + // Proof: Token AccountInfoByTokenAndMember (max_values: None, max_size: Some(489), added: 2964, mode: MaxEncodedLen) fn burn() -> Weight { - (43_910_000 as Weight) - .saturating_add(T::DbWeight::get().reads(3 as Weight)) - .saturating_add(T::DbWeight::get().writes(2 as Weight)) + // Proof Size summary in bytes: + // Measured: `1017` + // Estimated: `12847` + // Minimum execution time: 42_932 nanoseconds. + Weight::from_parts(44_861_000, 0u64) + .saturating_add(Weight::from_parts(0, 12847)) + .saturating_add(T::DbWeight::get().reads(4_u64)) + .saturating_add(T::DbWeight::get().writes(2_u64)) + } + // Storage: Token PalletFrozen (r:1 w:0) + // Storage: Membership MembershipById (r:1 w:0) + // Proof: Membership MembershipById (max_values: None, max_size: Some(125), added: 2600, mode: MaxEncodedLen) + // Storage: Token TokenInfoById (r:1 w:1) + // Proof: Token TokenInfoById (max_values: None, max_size: Some(352), added: 2827, mode: MaxEncodedLen) + // Storage: Token AccountInfoByTokenAndMember (r:1 w:1) + // Proof: Token AccountInfoByTokenAndMember (max_values: None, max_size: Some(489), added: 2964, mode: MaxEncodedLen) + // Storage: Token BloatBond (r:1 w:0) + // Proof: Token BloatBond (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) + // Storage: Token AmmBuyTxFees (r:1 w:0) + // Proof: Token AmmBuyTxFees (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + // Storage: System Account (r:2 w:2) + // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + fn buy_on_amm_with_account_creation() -> Weight { + // Proof Size summary in bytes: + // Measured: `1044` + // Estimated: `20547` + // Minimum execution time: 85_398 nanoseconds. + Weight::from_parts(87_934_000, 0u64) + .saturating_add(Weight::from_parts(0, 20547)) + .saturating_add(T::DbWeight::get().reads(8_u64)) + .saturating_add(T::DbWeight::get().writes(4_u64)) + } + // Storage: Token PalletFrozen (r:1 w:0) + // Storage: Membership MembershipById (r:1 w:0) + // Proof: Membership MembershipById (max_values: None, max_size: Some(125), added: 2600, mode: MaxEncodedLen) + // Storage: Token TokenInfoById (r:1 w:1) + // Proof: Token TokenInfoById (max_values: None, max_size: Some(352), added: 2827, mode: MaxEncodedLen) + // Storage: Token AccountInfoByTokenAndMember (r:1 w:1) + // Proof: Token AccountInfoByTokenAndMember (max_values: None, max_size: Some(489), added: 2964, mode: MaxEncodedLen) + // Storage: Token BloatBond (r:1 w:0) + // Proof: Token BloatBond (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) + // Storage: Token AmmBuyTxFees (r:1 w:0) + // Proof: Token AmmBuyTxFees (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + // Storage: System Account (r:2 w:2) + // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + fn buy_on_amm_with_existing_account() -> Weight { + // Proof Size summary in bytes: + // Measured: `1044` + // Estimated: `20547` + // Minimum execution time: 86_178 nanoseconds. + Weight::from_parts(88_253_000, 0u64) + .saturating_add(Weight::from_parts(0, 20547)) + .saturating_add(T::DbWeight::get().reads(8_u64)) + .saturating_add(T::DbWeight::get().writes(4_u64)) + } + // Storage: Token PalletFrozen (r:1 w:0) + // Storage: Membership MembershipById (r:1 w:0) + // Proof: Membership MembershipById (max_values: None, max_size: Some(125), added: 2600, mode: MaxEncodedLen) + // Storage: Token TokenInfoById (r:1 w:1) + // Proof: Token TokenInfoById (max_values: None, max_size: Some(352), added: 2827, mode: MaxEncodedLen) + // Storage: Token AccountInfoByTokenAndMember (r:1 w:1) + // Proof: Token AccountInfoByTokenAndMember (max_values: None, max_size: Some(489), added: 2964, mode: MaxEncodedLen) + // Storage: Token AmmSellTxFees (r:1 w:0) + // Proof: Token AmmSellTxFees (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + // Storage: System Account (r:2 w:2) + // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + fn sell_on_amm() -> Weight { + // Proof Size summary in bytes: + // Measured: `1114` + // Estimated: `19046` + // Minimum execution time: 73_200 nanoseconds. + Weight::from_parts(75_404_000, 0u64) + .saturating_add(Weight::from_parts(0, 19046)) + .saturating_add(T::DbWeight::get().reads(8_u64)) + .saturating_add(T::DbWeight::get().writes(4_u64)) } } // Default implementation for tests impl WeightInfo for () { fn transfer(o: u32, m: u32, ) -> Weight { - 0 + Weight::from_parts(0, 0) } fn dust_account() -> Weight { - 0 + Weight::from_parts(0, 0) } fn join_whitelist(h: u32, ) -> Weight { - 0 + Weight::from_parts(0, 0) } fn purchase_tokens_on_sale() -> Weight { - 0 + Weight::from_parts(0, 0) } fn participate_in_split() -> Weight { - 0 + Weight::from_parts(0, 0) } fn exit_revenue_split() -> Weight { - 0 + Weight::from_parts(0, 0) + } + fn set_frozen_status() -> Weight { + Weight::from_parts(0, 0) } fn burn() -> Weight { - 0 + Weight::from_parts(0, 0) + } + fn buy_on_amm_with_account_creation() -> Weight { + Weight::from_parts(0, 0) + } + fn buy_on_amm_with_existing_account() -> Weight { + Weight::from_parts(0, 0) + } + fn sell_on_amm() -> Weight { + Weight::from_parts(0, 0) } } diff --git a/runtime-modules/proposals/codex/Cargo.toml b/runtime-modules/proposals/codex/Cargo.toml index 710ed2f735..f71a36571d 100644 --- a/runtime-modules/proposals/codex/Cargo.toml +++ b/runtime-modules/proposals/codex/Cargo.toml @@ -8,14 +8,14 @@ edition = '2018' serde = { version = "1.0.101", optional = true, features = ["derive"] } codec = { package = 'parity-scale-codec', version = '3.1.2', default-features = false, features = ['derive'] } scale-info = { version = "2.1.1", default-features = false, features = ["derive"] } -sp-std = { package = 'sp-std', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -sp-core = { package = 'sp-core', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -frame-support = { package = 'frame-support', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -sp-arithmetic = { package = 'sp-arithmetic', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -sp-runtime = { package = 'sp-runtime', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -frame-system = { package = 'frame-system', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -staking = { package = 'pallet-staking', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -pallet-timestamp = { package = 'pallet-timestamp', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} +sp-std = { package = 'sp-std', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +sp-core = { package = 'sp-core', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +frame-support = { package = 'frame-support', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +sp-arithmetic = { package = 'sp-arithmetic', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +sp-runtime = { package = 'sp-runtime', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +frame-system = { package = 'frame-system', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +staking = { package = 'pallet-staking', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +pallet-timestamp = { package = 'pallet-timestamp', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} working-group = { package = 'pallet-working-group', default-features = false, path = '../../working-group'} common = { package = 'pallet-common', default-features = false, path = '../../common'} proposals-engine = { package = 'pallet-proposals-engine', default-features = false, path = '../engine'} @@ -23,32 +23,33 @@ proposals-discussion = { package = 'pallet-proposals-discussion', default-featur constitution = { package = 'pallet-constitution', default-features = false, path = '../../constitution'} membership = { package = 'pallet-membership', default-features = false, path = '../../membership'} content = { package = 'pallet-content', default-features = false, path = '../../content'} -balances = { package = 'pallet-balances', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522', optional = true} +balances = { package = 'pallet-balances', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9', optional = true} +token = { package = 'pallet-project-token', default-features = false, path = '../../project-token' } # Benchmarking dependencies -frame-benchmarking = { package = 'frame-benchmarking', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522', optional = true} +frame-benchmarking = { package = 'frame-benchmarking', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9', optional = true} council = { package = 'pallet-council', default-features = false, path = '../../council', optional = true} [dev-dependencies] -sp-io = { package = 'sp-io', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -sp-core = { package = 'sp-core', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -sp-staking = { package = 'sp-staking', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -pallet-staking-reward-curve = { package = 'pallet-staking-reward-curve', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} +sp-io = { package = 'sp-io', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +sp-core = { package = 'sp-core', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +sp-staking = { package = 'sp-staking', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +pallet-staking-reward-curve = { package = 'pallet-staking-reward-curve', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} strum = {version = "0.19", default-features = false} staking-handler = { package = 'pallet-staking-handler', default-features = false, path = '../../staking-handler'} referendum = { package = 'pallet-referendum', default-features = false, path = '../../referendum'} council = { package = 'pallet-council', default-features = false, path = '../../council'} -balances = { package = 'pallet-balances', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -frame-election-provider-support = { package = 'frame-election-provider-support', git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -pallet-bags-list = { package = 'pallet-bags-list', features = ["runtime-benchmarks"], git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -sp-npos-elections = { package = 'sp-npos-elections', git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} +balances = { package = 'pallet-balances', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +frame-election-provider-support = { package = 'frame-election-provider-support', git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +pallet-bags-list = { package = 'pallet-bags-list', git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +sp-npos-elections = { package = 'sp-npos-elections', git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} [features] default = ['std'] runtime-benchmarks = [ - 'frame-benchmarking', - 'balances', - 'council', + 'frame-benchmarking/runtime-benchmarks', + 'balances/runtime-benchmarks', + 'council/runtime-benchmarks', 'common/runtime-benchmarks', ] std = [ @@ -69,8 +70,10 @@ std = [ 'council/std', 'membership/std', 'content/std', + 'token/std', 'staking/std', 'scale-info/std', 'frame-election-provider-support/std', 'sp-staking/std', ] +try-runtime = ["frame-support/try-runtime"] diff --git a/runtime-modules/proposals/codex/src/benchmarking.rs b/runtime-modules/proposals/codex/src/benchmarking.rs index d3f7f704e6..03efbdd69b 100644 --- a/runtime-modules/proposals/codex/src/benchmarking.rs +++ b/runtime-modules/proposals/codex/src/benchmarking.rs @@ -9,8 +9,9 @@ use balances::Pallet as Balances; use common::to_kb; use common::working_group::WorkingGroup; use common::BalanceKind; +use common::FreezablePallet; use content::NftLimitPeriod; -use frame_benchmarking::{account, benchmarks, Zero}; +use frame_benchmarking::v1::{account, benchmarks, Zero}; use frame_support::sp_runtime::traits::Bounded; use frame_support::traits::Currency; use frame_system::EventRecord; @@ -31,9 +32,9 @@ use working_group::{ const SEED: u32 = 0; const MAX_KILOBYTES_METADATA: u32 = 100; -fn assert_last_event(generic_event: ::Event) { +fn assert_last_event(generic_event: ::RuntimeEvent) { let events = System::::events(); - let system_event: ::Event = generic_event.into(); + let system_event: ::RuntimeEvent = generic_event.into(); assert!( !events.is_empty(), "If you are checking for last event there must be at least 1 event" @@ -896,6 +897,28 @@ benchmarks! { proposal_details ); } + + create_proposal_freeze_pallet { + let t in 1 .. to_kb(T::TitleMaxLength::get()); + let d in 1 .. to_kb(T::DescriptionMaxLength::get()); + + let (account_id, member_id, general_proposal_paramters) = + create_proposal_parameters::(t, d); + + let proposal_details = ProposalDetails::SetPalletFozenStatus(true, FreezablePallet::ProjectToken); + }: create_proposal( + RawOrigin::Signed(account_id.clone()), + general_proposal_paramters.clone(), + proposal_details.clone() + ) + verify { + create_proposal_verify::( + account_id, + member_id, + general_proposal_paramters, + proposal_details + ); + } } #[cfg(test)] diff --git a/runtime-modules/proposals/codex/src/lib.rs b/runtime-modules/proposals/codex/src/lib.rs index 58973c45f0..ebfa1570af 100644 --- a/runtime-modules/proposals/codex/src/lib.rs +++ b/runtime-modules/proposals/codex/src/lib.rs @@ -75,6 +75,7 @@ use sp_runtime::SaturatedConversion; use sp_std::clone::Clone; use sp_std::collections::btree_set::BTreeSet; use sp_std::convert::TryInto; +use sp_std::vec; use common::membership::MemberOriginValidator; use common::to_kb; @@ -139,11 +140,11 @@ pub trait Config: + working_group::Config { /// Proposal Codex module event type. - type Event: From> + Into<::Event>; + type RuntimeEvent: From> + Into<::RuntimeEvent>; /// Validates member id and origin combination. type MembershipOriginValidator: MemberOriginValidator< - Self::Origin, + Self::RuntimeOrigin, MemberId, Self::AccountId, >; @@ -273,6 +274,11 @@ pub trait Config: /// Max allowed number of validators in set max validator count proposal type SetMaxValidatorCountProposalMaxValidators: Get; + + /// `Freeze Pallet` proposal parameters + type SetPalletFozenStatusProposalParameters: Get< + ProposalParameters>, + >; } /// Specialized alias of GeneralProposalParams @@ -393,7 +399,7 @@ decl_storage! { generate_storage_info decl_module! { /// Proposal codex substrate module Call - pub struct Module for enum Call where origin: T::Origin { + pub struct Module for enum Call where origin: T::RuntimeOrigin { /// Predefined errors type Error = Error; @@ -497,6 +503,9 @@ decl_module! { const SetMaxValidatorCountProposalMaxValidators: u32 = T::SetMaxValidatorCountProposalMaxValidators::get(); + const SetPalletFozenStatusProposalParameters: + ProposalParameters> = T::SetPalletFozenStatusProposalParameters::get(); + /// Create a proposal, the type of proposal depends on the `proposal_details` variant /// @@ -865,6 +874,9 @@ impl Module { ); } } + ProposalDetails::SetPalletFozenStatus(..) => { + // Note: No checks for this proposal for now + } } Ok(()) @@ -932,6 +944,9 @@ impl Module { ProposalDetails::UpdateChannelPayouts(..) => { T::UpdateChannelPayoutsProposalParameters::get() } + ProposalDetails::SetPalletFozenStatus(..) => { + T::SetPalletFozenStatusProposalParameters::get() + } } } @@ -1093,6 +1108,12 @@ impl Module { ) .saturated_into() } + ProposalDetails::SetPalletFozenStatus(..) => { + WeightInfoCodex::::create_proposal_freeze_pallet( + to_kb(title_length.saturated_into()), + to_kb(description_length.saturated_into()), + ) + } } } } @@ -1106,3 +1127,10 @@ impl ProposalObserver for Module { proposals_discussion::ThreadById::::remove(thread_id); } } + +impl frame_support::traits::Hooks for Pallet { + #[cfg(feature = "try-runtime")] + fn try_state(_: T::BlockNumber) -> Result<(), &'static str> { + Ok(()) + } +} diff --git a/runtime-modules/proposals/codex/src/tests/mock.rs b/runtime-modules/proposals/codex/src/tests/mock.rs index 82829d7fdb..4f2bde460d 100644 --- a/runtime-modules/proposals/codex/src/tests/mock.rs +++ b/runtime-modules/proposals/codex/src/tests/mock.rs @@ -7,7 +7,7 @@ use frame_support::{ dispatch::DispatchError, parameter_types, traits::{ - ConstU32, ConstU64, Currency, EnsureOneOf, Imbalance, LockIdentifier, OnUnbalanced, + ConstU32, ConstU64, Currency, EitherOfDiverse, Imbalance, LockIdentifier, OnUnbalanced, OneSessionHandler, }, weights::constants::RocksDbWeight, @@ -111,7 +111,7 @@ frame_support::construct_runtime!( parameter_types! { pub BlockWeights: frame_system::limits::BlockWeights = frame_system::limits::BlockWeights::simple_max( - frame_support::weights::constants::WEIGHT_PER_SECOND * 2 + frame_support::weights::Weight::from_parts(frame_support::weights::constants::WEIGHT_REF_TIME_PER_SECOND * 2, 0u64) ); pub static SessionsPerEra: SessionIndex = 3; pub static ExistentialDeposit: Balance = 1; @@ -125,16 +125,16 @@ impl frame_system::Config for Test { type BlockWeights = (); type BlockLength = (); type DbWeight = RocksDbWeight; - type Origin = Origin; + type RuntimeOrigin = RuntimeOrigin; type Index = AccountIndex; type BlockNumber = BlockNumber; - type Call = Call; + type RuntimeCall = RuntimeCall; type Hash = H256; type Hashing = ::sp_runtime::traits::BlakeTwo256; type AccountId = AccountId; type Lookup = IdentityLookup; type Header = Header; - type Event = Event; + type RuntimeEvent = RuntimeEvent; type BlockHashCount = frame_support::traits::ConstU64<250>; type Version = (); type PalletInfo = PalletInfo; @@ -151,7 +151,7 @@ impl balances::Config for Test { type MaxReserves = (); type ReserveIdentifier = [u8; 8]; type Balance = Balance; - type Event = Event; + type RuntimeEvent = RuntimeEvent; type DustRemoval = (); type ExistentialDeposit = ExistentialDeposit; type AccountStore = System; @@ -207,7 +207,7 @@ parameter_types! { } impl pallet_bags_list::Config for Test { - type Event = Event; + type RuntimeEvent = RuntimeEvent; type WeightInfo = (); type ScoreProvider = Staking; type BagThresholds = BagThresholds; @@ -220,6 +220,9 @@ impl onchain::Config for OnChainSeqPhragmen { type Solver = SequentialPhragmen; type DataProvider = Staking; type WeightInfo = (); + type MaxWinners = ConstU32<2_000>; + type VotersBound = ConstU32<5_000>; + type TargetsBound = ConstU32<2_000>; } pub struct MockReward {} @@ -253,38 +256,40 @@ impl staking::Config for Test { type UnixTime = Timestamp; type CurrencyToVote = frame_support::traits::SaturatingCurrencyToVote; type RewardRemainder = RewardRemainderMock; - type Event = Event; + type RuntimeEvent = RuntimeEvent; type Slash = (); type Reward = MockReward; type SessionsPerEra = SessionsPerEra; type SlashDeferDuration = SlashDeferDuration; - type SlashCancelOrigin = frame_system::EnsureRoot; type BondingDuration = BondingDuration; type SessionInterface = (); type EraPayout = staking::ConvertCurve; type NextNewSession = (); type MaxNominatorRewardedPerValidator = ConstU32<64>; type OffendingValidatorsThreshold = OffendingValidatorsThreshold; - type ElectionProvider = onchain::UnboundedExecution; + type ElectionProvider = onchain::OnChainExecution; type GenesisElectionProvider = Self::ElectionProvider; // NOTE: consider a macro and use `UseNominatorsAndValidatorsMap` as well. type VoterList = BagsList; + type TargetList = staking::UseValidatorsMap; type MaxUnlockingChunks = ConstU32<32>; type OnStakerSlash = OnStakerSlashMock; type BenchmarkingConfig = TestBenchmarkingConfig; type WeightInfo = (); type BondingRestriction = (); + type HistoryDepth = ConstU32<120>; + type AdminOrigin = EnsureRoot; } impl frame_system::offchain::SendTransactionTypes for Test where - Call: From, + RuntimeCall: From, { - type OverarchingCall = Call; + type OverarchingCall = RuntimeCall; type Extrinsic = Extrinsic; } -pub type Extrinsic = TestXt; +pub type Extrinsic = TestXt; parameter_types! { pub const InvitedMemberLockId: [u8; 8] = [2; 8]; @@ -300,7 +305,7 @@ impl common::membership::MembershipTypes for Test { } impl membership::Config for Test { - type Event = Event; + type RuntimeEvent = RuntimeEvent; type DefaultMembershipPrice = DefaultMembershipPrice; type WorkingGroup = Wg; type WeightInfo = (); @@ -333,13 +338,15 @@ pub const LEADER_ACCOUNT_ID: u64 = 100; impl common::working_group::WorkingGroupAuthenticator for Wg { fn ensure_worker_origin( - _origin: ::Origin, + _origin: ::RuntimeOrigin, _worker_id: &::ActorId, ) -> DispatchResult { unimplemented!(); } - fn ensure_leader_origin(_origin: ::Origin) -> DispatchResult { + fn ensure_leader_origin( + _origin: ::RuntimeOrigin, + ) -> DispatchResult { unimplemented!() } @@ -391,7 +398,7 @@ parameter_types! { } impl proposals_engine::Config for Test { - type Event = Event; + type RuntimeEvent = RuntimeEvent; type ProposerOriginValidator = (); type CouncilOriginValidator = (); type TotalVotersCounter = MockVotersParameters; @@ -423,9 +430,9 @@ impl Default for crate::Call { } } -impl common::membership::MemberOriginValidator for () { +impl common::membership::MemberOriginValidator for () { fn ensure_member_controller_account_origin( - origin: Origin, + origin: RuntimeOrigin, _: u64, ) -> Result { let account_id = frame_system::ensure_signed(origin)?; @@ -444,8 +451,8 @@ impl common::membership::MembershipInfoProvider for () { } } -impl common::council::CouncilOriginValidator for () { - fn ensure_member_consulate(origin: Origin, _: u64) -> DispatchResult { +impl common::council::CouncilOriginValidator for () { + fn ensure_member_consulate(origin: RuntimeOrigin, _: u64) -> DispatchResult { frame_system::ensure_signed(origin)?; Ok(()) @@ -462,7 +469,7 @@ parameter_types! { } impl proposals_discussion::Config for Test { - type Event = Event; + type RuntimeEvent = RuntimeEvent; type AuthorOriginValidator = (); type MembershipInfoProvider = (); type CouncilOriginValidator = (); @@ -498,7 +505,7 @@ parameter_types! { } impl working_group::Config for Test { - type Event = Event; + type RuntimeEvent = RuntimeEvent; type MaxWorkerNumberLimit = MaxWorkerNumberLimit; type StakingHandler = StakingManager; type StakingAccountValidator = (); @@ -511,7 +518,7 @@ impl working_group::Config for Test { } impl working_group::Config for Test { - type Event = Event; + type RuntimeEvent = RuntimeEvent; type MaxWorkerNumberLimit = MaxWorkerNumberLimit; type StakingHandler = StakingManager; type StakingAccountValidator = (); @@ -524,7 +531,7 @@ impl working_group::Config for Test { } impl working_group::Config for Test { - type Event = Event; + type RuntimeEvent = RuntimeEvent; type MaxWorkerNumberLimit = MaxWorkerNumberLimit; type StakingHandler = StakingManager; type StakingAccountValidator = (); @@ -537,7 +544,7 @@ impl working_group::Config for Test { } impl working_group::Config for Test { - type Event = Event; + type RuntimeEvent = RuntimeEvent; type MaxWorkerNumberLimit = MaxWorkerNumberLimit; type StakingHandler = StakingManager; type StakingAccountValidator = (); @@ -550,7 +557,7 @@ impl working_group::Config for Test { } impl working_group::Config for Test { - type Event = Event; + type RuntimeEvent = RuntimeEvent; type MaxWorkerNumberLimit = MaxWorkerNumberLimit; type StakingHandler = StakingManager; type StakingAccountValidator = (); @@ -563,7 +570,7 @@ impl working_group::Config for Test { } impl working_group::Config for Test { - type Event = Event; + type RuntimeEvent = RuntimeEvent; type MaxWorkerNumberLimit = MaxWorkerNumberLimit; type StakingHandler = StakingManager; type StakingAccountValidator = (); @@ -576,7 +583,7 @@ impl working_group::Config for Test { } impl working_group::Config for Test { - type Event = Event; + type RuntimeEvent = RuntimeEvent; type MaxWorkerNumberLimit = MaxWorkerNumberLimit; type StakingHandler = StakingManager; type StakingAccountValidator = (); @@ -589,7 +596,7 @@ impl working_group::Config for Test { } impl working_group::Config for Test { - type Event = Event; + type RuntimeEvent = RuntimeEvent; type MaxWorkerNumberLimit = MaxWorkerNumberLimit; type StakingHandler = StakingManager; type StakingAccountValidator = (); @@ -602,7 +609,7 @@ impl working_group::Config for Test { } impl working_group::Config for Test { - type Event = Event; + type RuntimeEvent = RuntimeEvent; type MaxWorkerNumberLimit = MaxWorkerNumberLimit; type StakingHandler = StakingManager; type StakingAccountValidator = (); @@ -632,7 +639,7 @@ pub(crate) fn default_proposal_parameters() -> ProposalParameters { } impl crate::Config for Test { - type Event = Event; + type RuntimeEvent = RuntimeEvent; type MembershipOriginValidator = (); type ProposalEncoder = (); type WeightInfo = (); @@ -662,6 +669,7 @@ impl crate::Config for Test { type FundingRequestProposalMaxTotalAmount = FundingRequestProposalMaxTotalAmount; type FundingRequestProposalMaxAccounts = FundingRequestProposalMaxAccounts; type SetMaxValidatorCountProposalMaxValidators = SetMaxValidatorCountProposalMaxValidators; + type SetPalletFozenStatusProposalParameters = DefaultProposalParameters; } parameter_types! { @@ -684,7 +692,7 @@ parameter_types! { pub type ReferendumInstance = referendum::Instance1; impl council::Config for Test { - type Event = Event; + type RuntimeEvent = RuntimeEvent; type Referendum = referendum::Module; @@ -719,12 +727,13 @@ parameter_types! { } impl referendum::Config for Test { - type Event = Event; + type RuntimeEvent = RuntimeEvent; type MaxSaltLength = MaxSaltLength; type StakingHandler = staking_handler::StakingManager; - type ManagerOrigin = EnsureOneOf, EnsureRoot>; + type ManagerOrigin = + EitherOfDiverse, EnsureRoot>; type VotePower = u64; diff --git a/runtime-modules/proposals/codex/src/tests/mod.rs b/runtime-modules/proposals/codex/src/tests/mod.rs index 42a55129b8..d4c4ea377a 100644 --- a/runtime-modules/proposals/codex/src/tests/mod.rs +++ b/runtime-modules/proposals/codex/src/tests/mod.rs @@ -174,9 +174,9 @@ fn setup_lead(working_group: WorkingGroup) -> WorkerId { } } -fn assert_last_event(generic_event: ::Event) { +fn assert_last_event(generic_event: ::RuntimeEvent) { let events = System::events(); - let system_event: ::Event = generic_event; + let system_event: ::RuntimeEvent = generic_event; assert!( !events.is_empty(), "If you are checking for last event there must be at least 1 event" @@ -253,8 +253,7 @@ where assert_eq!((self.successful_call)(), Ok(())); - let proposal_id = - ::ProposalId::from(ProposalsEngine::proposal_count()); + let proposal_id = ProposalsEngine::proposal_count(); // a discussion was created assert!(>::contains_key( proposal_id @@ -556,7 +555,7 @@ fn create_funding_request_proposal_call_fails_with_zero_balance() { assert_eq!( ProposalsCodex::create_proposal( RawOrigin::Signed(1).into(), - general_proposal_parameters.clone(), + general_proposal_parameters, funding_request_proposal_zero_balance, ), Err(Error::::InvalidFundingRequestProposalBalance.into()) @@ -585,7 +584,7 @@ fn create_funding_request_proposal_call_fails_with_exceeding_balance() { increase_total_balance_issuance_using_account_id(account, 15000000); common::FundingRequestParameters { amount: single_request_budget + 1u64, - account: account, + account, } }) .collect::>(); @@ -790,8 +789,7 @@ fn create_veto_proposal_common_checks_succeed() { ) .unwrap(); - let proposal_details = - ProposalDetails::VetoProposal(ProposalsEngine::proposal_count().into()); + let proposal_details = ProposalDetails::VetoProposal(ProposalsEngine::proposal_count()); let proposal_fixture = ProposalTestFixture { general_proposal_parameters: general_proposal_parameters.clone(), @@ -847,8 +845,8 @@ fn create_veto_proposal_fails_with_invalid_proposal_id() { assert_eq!( ProposalsCodex::create_proposal( RawOrigin::Signed(1).into(), - general_proposal_parameters.clone(), - ProposalDetails::VetoProposal(1u32.into()), + general_proposal_parameters, + ProposalDetails::VetoProposal(1u32), ), Err(Error::::InvalidProposalId.into()) ); @@ -2579,10 +2577,78 @@ fn create_update_channel_payouts_proposal_fails_when_min_cashout_exceeds_max_cas assert_eq!( ProposalsCodex::create_proposal( RawOrigin::Signed(1).into(), - general_proposal_parameters.clone(), + general_proposal_parameters, details, ), Err(Error::::InvalidChannelPayoutsProposalMinCashoutExceedsMaxCashout.into()) ); }); } + +#[test] +fn create_frozen_proposal_proposal_common_checks_succeed() { + initial_test_ext().execute_with(|| { + let general_proposal_parameters_no_staking = GeneralProposalParameters:: { + member_id: 1, + title: b"title".to_vec(), + description: b"body".to_vec(), + staking_account_id: None, + exact_execution_block: None, + }; + + let general_proposal_parameters = GeneralProposalParameters:: { + member_id: 1, + title: b"title".to_vec(), + description: b"body".to_vec(), + staking_account_id: Some(1), + exact_execution_block: None, + }; + + let general_proposal_parameters_incorrect_staking = GeneralProposalParameters:: { + member_id: 1, + title: b"title".to_vec(), + description: b"body".to_vec(), + staking_account_id: Some(STAKING_ACCOUNT_ID_NOT_BOUND_TO_MEMBER), + exact_execution_block: None, + }; + + let proposal_details = + ProposalDetails::SetPalletFozenStatus(true, common::FreezablePallet::ProjectToken); + + let proposal_fixture = ProposalTestFixture { + general_proposal_parameters: general_proposal_parameters.clone(), + proposal_details: proposal_details.clone(), + insufficient_rights_call: || { + ProposalsCodex::create_proposal( + RawOrigin::None.into(), + general_proposal_parameters_no_staking.clone(), + proposal_details.clone(), + ) + }, + invalid_stake_account_call: || { + ProposalsCodex::create_proposal( + RawOrigin::Signed(1).into(), + general_proposal_parameters_incorrect_staking.clone(), + proposal_details.clone(), + ) + }, + empty_stake_call: || { + ProposalsCodex::create_proposal( + RawOrigin::Signed(1).into(), + general_proposal_parameters_no_staking.clone(), + proposal_details.clone(), + ) + }, + successful_call: || { + ProposalsCodex::create_proposal( + RawOrigin::Signed(1).into(), + general_proposal_parameters.clone(), + proposal_details.clone(), + ) + }, + proposal_parameters: + ::SetPalletFozenStatusProposalParameters::get(), + }; + proposal_fixture.check_all(); + }); +} diff --git a/runtime-modules/proposals/codex/src/types.rs b/runtime-modules/proposals/codex/src/types.rs index 9a107fdb6d..0ce34654b2 100644 --- a/runtime-modules/proposals/codex/src/types.rs +++ b/runtime-modules/proposals/codex/src/types.rs @@ -1,6 +1,7 @@ #![warn(missing_docs)] use codec::{Decode, Encode}; +use common::FreezablePallet; use scale_info::TypeInfo; #[cfg(feature = "std")] use serde::{Deserialize, Serialize}; @@ -118,6 +119,9 @@ pub enum ProposalDetails< /// `Update Channel Payouts` proposal UpdateChannelPayouts(UpdateChannelPayoutsParameters), + + /// `SetPalletFozenStatus` proposal + SetPalletFozenStatus(bool, FreezablePallet), } impl< diff --git a/runtime-modules/proposals/codex/src/weights.rs b/runtime-modules/proposals/codex/src/weights.rs index f19e784d37..cf235cfee6 100644 --- a/runtime-modules/proposals/codex/src/weights.rs +++ b/runtime-modules/proposals/codex/src/weights.rs @@ -18,7 +18,7 @@ //! Autogenerated weights for proposals_codex //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2023-02-09, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2023-11-06, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("prod-test"), DB CACHE: 1024 // Executed Command: @@ -67,560 +67,1032 @@ pub trait WeightInfo { fn create_proposal_set_referral_cut(_t: u32, _d: u32, ) -> Weight; fn create_proposal_update_global_nft_limit(_t: u32, _d: u32, ) -> Weight; fn create_proposal_update_channel_payouts(_t: u32, _d: u32, _i: u32, ) -> Weight; + fn create_proposal_freeze_pallet(_t: u32, _d: u32, ) -> Weight; } /// Weights for proposals_codex using the Substrate node and recommended hardware. pub struct SubstrateWeight(PhantomData); impl WeightInfo for SubstrateWeight { // Storage: Membership MembershipById (r:1 w:0) + // Proof: Membership MembershipById (max_values: None, max_size: Some(125), added: 2600, mode: MaxEncodedLen) // Storage: ProposalEngine ActiveProposalCount (r:1 w:1) + // Proof: ProposalEngine ActiveProposalCount (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) // Storage: Membership StakingAccountIdMemberStatus (r:1 w:0) + // Proof: Membership StakingAccountIdMemberStatus (max_values: None, max_size: Some(57), added: 2532, mode: MaxEncodedLen) // Storage: Balances Locks (r:1 w:1) + // Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) // Storage: System Account (r:1 w:1) + // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) // Storage: ProposalDiscussion ThreadCount (r:1 w:1) + // Proof: ProposalDiscussion ThreadCount (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) // Storage: ProposalEngine ProposalCount (r:1 w:1) + // Proof: ProposalEngine ProposalCount (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) // Storage: ProposalsCodex ThreadIdByProposalId (r:0 w:1) + // Proof: ProposalsCodex ThreadIdByProposalId (max_values: None, max_size: Some(28), added: 2503, mode: MaxEncodedLen) // Storage: ProposalDiscussion ThreadById (r:0 w:1) + // Proof: ProposalDiscussion ThreadById (max_values: None, max_size: Some(198), added: 2673, mode: MaxEncodedLen) // Storage: ProposalEngine Proposals (r:0 w:1) + // Proof: ProposalEngine Proposals (max_values: None, max_size: Some(140), added: 2615, mode: MaxEncodedLen) // Storage: ProposalEngine DispatchableCallCode (r:0 w:1) + // Proof: ProposalEngine DispatchableCallCode (max_values: None, max_size: Some(3145752), added: 3148227, mode: MaxEncodedLen) + /// The range of component `i` is `[1, 100]`. + /// The range of component `t` is `[1, 20]`. + /// The range of component `d` is `[1, 20]`. fn create_proposal_signal(i: u32, t: u32, d: u32, ) -> Weight { - (119_338_000 as Weight) - // Standard Error: 8_000 - .saturating_add((1_874_000 as Weight).saturating_mul(i as Weight)) - // Standard Error: 66_000 - .saturating_add((832_000 as Weight).saturating_mul(t as Weight)) - // Standard Error: 66_000 - .saturating_add((1_020_000 as Weight).saturating_mul(d as Weight)) - .saturating_add(T::DbWeight::get().reads(7 as Weight)) - .saturating_add(T::DbWeight::get().writes(9 as Weight)) + // Proof Size summary in bytes: + // Measured: `651` + // Estimated: `19940` + // Minimum execution time: 128_720 nanoseconds. + Weight::from_parts(83_827_560, 0u64) + .saturating_add(Weight::from_parts(0, 19940)) + // Standard Error: 3_947 + .saturating_add(Weight::from_parts(1_573_727, 0u64).saturating_mul(i.into())) + // Standard Error: 19_975 + .saturating_add(Weight::from_parts(1_046_846, 0u64).saturating_mul(t.into())) + // Standard Error: 19_975 + .saturating_add(Weight::from_parts(1_233_685, 0u64).saturating_mul(d.into())) + .saturating_add(T::DbWeight::get().reads(7_u64)) + .saturating_add(T::DbWeight::get().writes(9_u64)) } // Storage: Membership MembershipById (r:1 w:0) + // Proof: Membership MembershipById (max_values: None, max_size: Some(125), added: 2600, mode: MaxEncodedLen) // Storage: ProposalEngine ActiveProposalCount (r:1 w:1) + // Proof: ProposalEngine ActiveProposalCount (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) // Storage: Membership StakingAccountIdMemberStatus (r:1 w:0) + // Proof: Membership StakingAccountIdMemberStatus (max_values: None, max_size: Some(57), added: 2532, mode: MaxEncodedLen) // Storage: Balances Locks (r:1 w:1) + // Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) // Storage: System Account (r:1 w:1) + // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) // Storage: ProposalDiscussion ThreadCount (r:1 w:1) + // Proof: ProposalDiscussion ThreadCount (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) // Storage: ProposalEngine ProposalCount (r:1 w:1) + // Proof: ProposalEngine ProposalCount (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) // Storage: ProposalsCodex ThreadIdByProposalId (r:0 w:1) + // Proof: ProposalsCodex ThreadIdByProposalId (max_values: None, max_size: Some(28), added: 2503, mode: MaxEncodedLen) // Storage: ProposalDiscussion ThreadById (r:0 w:1) + // Proof: ProposalDiscussion ThreadById (max_values: None, max_size: Some(198), added: 2673, mode: MaxEncodedLen) // Storage: ProposalEngine Proposals (r:0 w:1) + // Proof: ProposalEngine Proposals (max_values: None, max_size: Some(140), added: 2615, mode: MaxEncodedLen) // Storage: ProposalEngine DispatchableCallCode (r:0 w:1) + // Proof: ProposalEngine DispatchableCallCode (max_values: None, max_size: Some(3145752), added: 3148227, mode: MaxEncodedLen) + /// The range of component `i` is `[1, 100]`. + /// The range of component `t` is `[1, 20]`. + /// The range of component `d` is `[1, 20]`. fn create_proposal_runtime_upgrade(i: u32, t: u32, d: u32, ) -> Weight { - (114_863_000 as Weight) - // Standard Error: 5_000 - .saturating_add((1_891_000 as Weight).saturating_mul(i as Weight)) - // Standard Error: 46_000 - .saturating_add((855_000 as Weight).saturating_mul(t as Weight)) - // Standard Error: 46_000 - .saturating_add((1_089_000 as Weight).saturating_mul(d as Weight)) - .saturating_add(T::DbWeight::get().reads(7 as Weight)) - .saturating_add(T::DbWeight::get().writes(9 as Weight)) + // Proof Size summary in bytes: + // Measured: `651` + // Estimated: `19940` + // Minimum execution time: 128_742 nanoseconds. + Weight::from_parts(84_197_811, 0u64) + .saturating_add(Weight::from_parts(0, 19940)) + // Standard Error: 4_106 + .saturating_add(Weight::from_parts(1_588_007, 0u64).saturating_mul(i.into())) + // Standard Error: 20_781 + .saturating_add(Weight::from_parts(1_017_581, 0u64).saturating_mul(t.into())) + // Standard Error: 20_781 + .saturating_add(Weight::from_parts(1_176_400, 0u64).saturating_mul(d.into())) + .saturating_add(T::DbWeight::get().reads(7_u64)) + .saturating_add(T::DbWeight::get().writes(9_u64)) } // Storage: Membership MembershipById (r:1 w:0) + // Proof: Membership MembershipById (max_values: None, max_size: Some(125), added: 2600, mode: MaxEncodedLen) // Storage: ProposalEngine ActiveProposalCount (r:1 w:1) + // Proof: ProposalEngine ActiveProposalCount (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) // Storage: Membership StakingAccountIdMemberStatus (r:1 w:0) + // Proof: Membership StakingAccountIdMemberStatus (max_values: None, max_size: Some(57), added: 2532, mode: MaxEncodedLen) // Storage: Balances Locks (r:1 w:1) + // Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) // Storage: System Account (r:1 w:1) + // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) // Storage: ProposalDiscussion ThreadCount (r:1 w:1) + // Proof: ProposalDiscussion ThreadCount (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) // Storage: ProposalEngine ProposalCount (r:1 w:1) + // Proof: ProposalEngine ProposalCount (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) // Storage: ProposalsCodex ThreadIdByProposalId (r:0 w:1) + // Proof: ProposalsCodex ThreadIdByProposalId (max_values: None, max_size: Some(28), added: 2503, mode: MaxEncodedLen) // Storage: ProposalDiscussion ThreadById (r:0 w:1) + // Proof: ProposalDiscussion ThreadById (max_values: None, max_size: Some(198), added: 2673, mode: MaxEncodedLen) // Storage: ProposalEngine Proposals (r:0 w:1) + // Proof: ProposalEngine Proposals (max_values: None, max_size: Some(140), added: 2615, mode: MaxEncodedLen) // Storage: ProposalEngine DispatchableCallCode (r:0 w:1) - fn create_proposal_funding_request(_i: u32, t: u32, d: u32, ) -> Weight { - (106_889_000 as Weight) - // Standard Error: 25_000 - .saturating_add((1_318_000 as Weight).saturating_mul(t as Weight)) - // Standard Error: 25_000 - .saturating_add((1_443_000 as Weight).saturating_mul(d as Weight)) - .saturating_add(T::DbWeight::get().reads(7 as Weight)) - .saturating_add(T::DbWeight::get().writes(9 as Weight)) + // Proof: ProposalEngine DispatchableCallCode (max_values: None, max_size: Some(3145752), added: 3148227, mode: MaxEncodedLen) + /// The range of component `i` is `[1, 20]`. + /// The range of component `t` is `[1, 20]`. + /// The range of component `d` is `[1, 20]`. + fn create_proposal_funding_request(i: u32, t: u32, d: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `651` + // Estimated: `19940` + // Minimum execution time: 107_465 nanoseconds. + Weight::from_parts(82_717_106, 0u64) + .saturating_add(Weight::from_parts(0, 19940)) + // Standard Error: 9_200 + .saturating_add(Weight::from_parts(118_652, 0u64).saturating_mul(i.into())) + // Standard Error: 9_200 + .saturating_add(Weight::from_parts(1_175_929, 0u64).saturating_mul(t.into())) + // Standard Error: 9_200 + .saturating_add(Weight::from_parts(1_292_042, 0u64).saturating_mul(d.into())) + .saturating_add(T::DbWeight::get().reads(7_u64)) + .saturating_add(T::DbWeight::get().writes(9_u64)) } // Storage: Staking MinimumValidatorCount (r:1 w:0) + // Proof: Staking MinimumValidatorCount (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) // Storage: Membership MembershipById (r:1 w:0) + // Proof: Membership MembershipById (max_values: None, max_size: Some(125), added: 2600, mode: MaxEncodedLen) // Storage: ProposalEngine ActiveProposalCount (r:1 w:1) + // Proof: ProposalEngine ActiveProposalCount (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) // Storage: Membership StakingAccountIdMemberStatus (r:1 w:0) + // Proof: Membership StakingAccountIdMemberStatus (max_values: None, max_size: Some(57), added: 2532, mode: MaxEncodedLen) // Storage: Balances Locks (r:1 w:1) + // Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) // Storage: System Account (r:1 w:1) + // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) // Storage: ProposalDiscussion ThreadCount (r:1 w:1) + // Proof: ProposalDiscussion ThreadCount (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) // Storage: ProposalEngine ProposalCount (r:1 w:1) + // Proof: ProposalEngine ProposalCount (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) // Storage: ProposalsCodex ThreadIdByProposalId (r:0 w:1) + // Proof: ProposalsCodex ThreadIdByProposalId (max_values: None, max_size: Some(28), added: 2503, mode: MaxEncodedLen) // Storage: ProposalDiscussion ThreadById (r:0 w:1) + // Proof: ProposalDiscussion ThreadById (max_values: None, max_size: Some(198), added: 2673, mode: MaxEncodedLen) // Storage: ProposalEngine Proposals (r:0 w:1) + // Proof: ProposalEngine Proposals (max_values: None, max_size: Some(140), added: 2615, mode: MaxEncodedLen) // Storage: ProposalEngine DispatchableCallCode (r:0 w:1) + // Proof: ProposalEngine DispatchableCallCode (max_values: None, max_size: Some(3145752), added: 3148227, mode: MaxEncodedLen) + /// The range of component `t` is `[1, 20]`. + /// The range of component `d` is `[1, 20]`. fn create_proposal_set_max_validator_count(t: u32, d: u32, ) -> Weight { - (100_376_000 as Weight) - // Standard Error: 21_000 - .saturating_add((1_312_000 as Weight).saturating_mul(t as Weight)) - // Standard Error: 21_000 - .saturating_add((1_472_000 as Weight).saturating_mul(d as Weight)) - .saturating_add(T::DbWeight::get().reads(8 as Weight)) - .saturating_add(T::DbWeight::get().writes(9 as Weight)) + // Proof Size summary in bytes: + // Measured: `1167` + // Estimated: `21429` + // Minimum execution time: 107_221 nanoseconds. + Weight::from_parts(85_957_936, 0u64) + .saturating_add(Weight::from_parts(0, 21429)) + // Standard Error: 9_817 + .saturating_add(Weight::from_parts(1_097_400, 0u64).saturating_mul(t.into())) + // Standard Error: 9_817 + .saturating_add(Weight::from_parts(1_221_509, 0u64).saturating_mul(d.into())) + .saturating_add(T::DbWeight::get().reads(8_u64)) + .saturating_add(T::DbWeight::get().writes(9_u64)) } // Storage: ProposalEngine Proposals (r:1 w:1) + // Proof: ProposalEngine Proposals (max_values: None, max_size: Some(140), added: 2615, mode: MaxEncodedLen) // Storage: Membership MembershipById (r:1 w:0) + // Proof: Membership MembershipById (max_values: None, max_size: Some(125), added: 2600, mode: MaxEncodedLen) // Storage: ProposalEngine ActiveProposalCount (r:1 w:1) + // Proof: ProposalEngine ActiveProposalCount (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) // Storage: Membership StakingAccountIdMemberStatus (r:1 w:0) + // Proof: Membership StakingAccountIdMemberStatus (max_values: None, max_size: Some(57), added: 2532, mode: MaxEncodedLen) // Storage: Balances Locks (r:1 w:1) + // Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) // Storage: System Account (r:1 w:1) + // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) // Storage: ProposalDiscussion ThreadCount (r:1 w:1) + // Proof: ProposalDiscussion ThreadCount (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) // Storage: ProposalEngine ProposalCount (r:1 w:1) + // Proof: ProposalEngine ProposalCount (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) // Storage: ProposalsCodex ThreadIdByProposalId (r:0 w:1) + // Proof: ProposalsCodex ThreadIdByProposalId (max_values: None, max_size: Some(28), added: 2503, mode: MaxEncodedLen) // Storage: ProposalDiscussion ThreadById (r:0 w:1) + // Proof: ProposalDiscussion ThreadById (max_values: None, max_size: Some(198), added: 2673, mode: MaxEncodedLen) // Storage: ProposalEngine DispatchableCallCode (r:0 w:1) + // Proof: ProposalEngine DispatchableCallCode (max_values: None, max_size: Some(3145752), added: 3148227, mode: MaxEncodedLen) + /// The range of component `t` is `[1, 20]`. + /// The range of component `d` is `[1, 20]`. fn create_proposal_veto_proposal(t: u32, d: u32, ) -> Weight { - (115_318_000 as Weight) - // Standard Error: 47_000 - .saturating_add((1_112_000 as Weight).saturating_mul(t as Weight)) - // Standard Error: 47_000 - .saturating_add((1_334_000 as Weight).saturating_mul(d as Weight)) - .saturating_add(T::DbWeight::get().reads(8 as Weight)) - .saturating_add(T::DbWeight::get().writes(9 as Weight)) + // Proof Size summary in bytes: + // Measured: `1013` + // Estimated: `23545` + // Minimum execution time: 115_187 nanoseconds. + Weight::from_parts(96_345_793, 0u64) + .saturating_add(Weight::from_parts(0, 23545)) + // Standard Error: 8_475 + .saturating_add(Weight::from_parts(1_035_378, 0u64).saturating_mul(t.into())) + // Standard Error: 8_475 + .saturating_add(Weight::from_parts(1_169_635, 0u64).saturating_mul(d.into())) + .saturating_add(T::DbWeight::get().reads(8_u64)) + .saturating_add(T::DbWeight::get().writes(9_u64)) } // Storage: Membership MembershipById (r:1 w:0) + // Proof: Membership MembershipById (max_values: None, max_size: Some(125), added: 2600, mode: MaxEncodedLen) // Storage: ProposalEngine ActiveProposalCount (r:1 w:1) + // Proof: ProposalEngine ActiveProposalCount (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) // Storage: Membership StakingAccountIdMemberStatus (r:1 w:0) + // Proof: Membership StakingAccountIdMemberStatus (max_values: None, max_size: Some(57), added: 2532, mode: MaxEncodedLen) // Storage: Balances Locks (r:1 w:1) + // Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) // Storage: System Account (r:1 w:1) + // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) // Storage: ProposalDiscussion ThreadCount (r:1 w:1) + // Proof: ProposalDiscussion ThreadCount (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) // Storage: ProposalEngine ProposalCount (r:1 w:1) + // Proof: ProposalEngine ProposalCount (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) // Storage: ProposalsCodex ThreadIdByProposalId (r:0 w:1) + // Proof: ProposalsCodex ThreadIdByProposalId (max_values: None, max_size: Some(28), added: 2503, mode: MaxEncodedLen) // Storage: ProposalDiscussion ThreadById (r:0 w:1) + // Proof: ProposalDiscussion ThreadById (max_values: None, max_size: Some(198), added: 2673, mode: MaxEncodedLen) // Storage: ProposalEngine Proposals (r:0 w:1) + // Proof: ProposalEngine Proposals (max_values: None, max_size: Some(140), added: 2615, mode: MaxEncodedLen) // Storage: ProposalEngine DispatchableCallCode (r:0 w:1) + // Proof: ProposalEngine DispatchableCallCode (max_values: None, max_size: Some(3145752), added: 3148227, mode: MaxEncodedLen) + /// The range of component `i` is `[1, 100]`. + /// The range of component `t` is `[1, 20]`. + /// The range of component `d` is `[1, 20]`. fn create_proposal_create_working_group_lead_opening(i: u32, t: u32, d: u32, ) -> Weight { - (117_180_000 as Weight) - // Standard Error: 5_000 - .saturating_add((2_020_000 as Weight).saturating_mul(i as Weight)) - // Standard Error: 42_000 - .saturating_add((810_000 as Weight).saturating_mul(t as Weight)) - // Standard Error: 42_000 - .saturating_add((1_044_000 as Weight).saturating_mul(d as Weight)) - .saturating_add(T::DbWeight::get().reads(7 as Weight)) - .saturating_add(T::DbWeight::get().writes(9 as Weight)) + // Proof Size summary in bytes: + // Measured: `651` + // Estimated: `19940` + // Minimum execution time: 129_157 nanoseconds. + Weight::from_parts(83_269_035, 0u64) + .saturating_add(Weight::from_parts(0, 19940)) + // Standard Error: 4_829 + .saturating_add(Weight::from_parts(1_726_438, 0u64).saturating_mul(i.into())) + // Standard Error: 24_438 + .saturating_add(Weight::from_parts(1_035_415, 0u64).saturating_mul(t.into())) + // Standard Error: 24_438 + .saturating_add(Weight::from_parts(1_197_968, 0u64).saturating_mul(d.into())) + .saturating_add(T::DbWeight::get().reads(7_u64)) + .saturating_add(T::DbWeight::get().writes(9_u64)) } // Storage: Instance1WorkingGroup OpeningById (r:1 w:0) + // Proof: Instance1WorkingGroup OpeningById (max_values: None, max_size: Some(114), added: 2589, mode: MaxEncodedLen) // Storage: Instance1WorkingGroup ApplicationById (r:1 w:0) + // Proof: Instance1WorkingGroup ApplicationById (max_values: None, max_size: Some(168), added: 2643, mode: MaxEncodedLen) // Storage: Membership MembershipById (r:1 w:0) + // Proof: Membership MembershipById (max_values: None, max_size: Some(125), added: 2600, mode: MaxEncodedLen) // Storage: ProposalEngine ActiveProposalCount (r:1 w:1) + // Proof: ProposalEngine ActiveProposalCount (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) // Storage: Membership StakingAccountIdMemberStatus (r:1 w:0) + // Proof: Membership StakingAccountIdMemberStatus (max_values: None, max_size: Some(57), added: 2532, mode: MaxEncodedLen) // Storage: Balances Locks (r:1 w:1) + // Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) // Storage: System Account (r:1 w:1) + // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) // Storage: ProposalDiscussion ThreadCount (r:1 w:1) + // Proof: ProposalDiscussion ThreadCount (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) // Storage: ProposalEngine ProposalCount (r:1 w:1) + // Proof: ProposalEngine ProposalCount (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) // Storage: ProposalsCodex ThreadIdByProposalId (r:0 w:1) + // Proof: ProposalsCodex ThreadIdByProposalId (max_values: None, max_size: Some(28), added: 2503, mode: MaxEncodedLen) // Storage: ProposalDiscussion ThreadById (r:0 w:1) + // Proof: ProposalDiscussion ThreadById (max_values: None, max_size: Some(198), added: 2673, mode: MaxEncodedLen) // Storage: ProposalEngine Proposals (r:0 w:1) + // Proof: ProposalEngine Proposals (max_values: None, max_size: Some(140), added: 2615, mode: MaxEncodedLen) // Storage: ProposalEngine DispatchableCallCode (r:0 w:1) + // Proof: ProposalEngine DispatchableCallCode (max_values: None, max_size: Some(3145752), added: 3148227, mode: MaxEncodedLen) + /// The range of component `t` is `[1, 20]`. + /// The range of component `d` is `[1, 20]`. fn create_proposal_fill_working_group_lead_opening(t: u32, d: u32, ) -> Weight { - (118_975_000 as Weight) - // Standard Error: 38_000 - .saturating_add((1_264_000 as Weight).saturating_mul(t as Weight)) - // Standard Error: 38_000 - .saturating_add((1_302_000 as Weight).saturating_mul(d as Weight)) - .saturating_add(T::DbWeight::get().reads(9 as Weight)) - .saturating_add(T::DbWeight::get().writes(9 as Weight)) + // Proof Size summary in bytes: + // Measured: `1038` + // Estimated: `27152` + // Minimum execution time: 118_546 nanoseconds. + Weight::from_parts(97_164_500, 0u64) + .saturating_add(Weight::from_parts(0, 27152)) + // Standard Error: 8_990 + .saturating_add(Weight::from_parts(1_119_467, 0u64).saturating_mul(t.into())) + // Standard Error: 8_990 + .saturating_add(Weight::from_parts(1_252_677, 0u64).saturating_mul(d.into())) + .saturating_add(T::DbWeight::get().reads(9_u64)) + .saturating_add(T::DbWeight::get().writes(9_u64)) } // Storage: Membership MembershipById (r:1 w:0) + // Proof: Membership MembershipById (max_values: None, max_size: Some(125), added: 2600, mode: MaxEncodedLen) // Storage: ProposalEngine ActiveProposalCount (r:1 w:1) + // Proof: ProposalEngine ActiveProposalCount (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) // Storage: Membership StakingAccountIdMemberStatus (r:1 w:0) + // Proof: Membership StakingAccountIdMemberStatus (max_values: None, max_size: Some(57), added: 2532, mode: MaxEncodedLen) // Storage: Balances Locks (r:1 w:1) + // Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) // Storage: System Account (r:1 w:1) + // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) // Storage: ProposalDiscussion ThreadCount (r:1 w:1) + // Proof: ProposalDiscussion ThreadCount (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) // Storage: ProposalEngine ProposalCount (r:1 w:1) + // Proof: ProposalEngine ProposalCount (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) // Storage: ProposalsCodex ThreadIdByProposalId (r:0 w:1) + // Proof: ProposalsCodex ThreadIdByProposalId (max_values: None, max_size: Some(28), added: 2503, mode: MaxEncodedLen) // Storage: ProposalDiscussion ThreadById (r:0 w:1) + // Proof: ProposalDiscussion ThreadById (max_values: None, max_size: Some(198), added: 2673, mode: MaxEncodedLen) // Storage: ProposalEngine Proposals (r:0 w:1) + // Proof: ProposalEngine Proposals (max_values: None, max_size: Some(140), added: 2615, mode: MaxEncodedLen) // Storage: ProposalEngine DispatchableCallCode (r:0 w:1) + // Proof: ProposalEngine DispatchableCallCode (max_values: None, max_size: Some(3145752), added: 3148227, mode: MaxEncodedLen) + /// The range of component `t` is `[1, 20]`. + /// The range of component `d` is `[1, 20]`. fn create_proposal_update_working_group_budget(t: u32, d: u32, ) -> Weight { - (99_672_000 as Weight) - // Standard Error: 26_000 - .saturating_add((1_222_000 as Weight).saturating_mul(t as Weight)) - // Standard Error: 26_000 - .saturating_add((1_351_000 as Weight).saturating_mul(d as Weight)) - .saturating_add(T::DbWeight::get().reads(7 as Weight)) - .saturating_add(T::DbWeight::get().writes(9 as Weight)) + // Proof Size summary in bytes: + // Measured: `651` + // Estimated: `19940` + // Minimum execution time: 102_387 nanoseconds. + Weight::from_parts(80_920_828, 0u64) + .saturating_add(Weight::from_parts(0, 19940)) + // Standard Error: 9_114 + .saturating_add(Weight::from_parts(1_083_779, 0u64).saturating_mul(t.into())) + // Standard Error: 9_114 + .saturating_add(Weight::from_parts(1_215_223, 0u64).saturating_mul(d.into())) + .saturating_add(T::DbWeight::get().reads(7_u64)) + .saturating_add(T::DbWeight::get().writes(9_u64)) } // Storage: Instance1WorkingGroup CurrentLead (r:1 w:0) + // Proof: Instance1WorkingGroup CurrentLead (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) // Storage: Membership MembershipById (r:1 w:0) + // Proof: Membership MembershipById (max_values: None, max_size: Some(125), added: 2600, mode: MaxEncodedLen) // Storage: ProposalEngine ActiveProposalCount (r:1 w:1) + // Proof: ProposalEngine ActiveProposalCount (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) // Storage: Membership StakingAccountIdMemberStatus (r:1 w:0) + // Proof: Membership StakingAccountIdMemberStatus (max_values: None, max_size: Some(57), added: 2532, mode: MaxEncodedLen) // Storage: Balances Locks (r:1 w:1) + // Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) // Storage: System Account (r:1 w:1) + // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) // Storage: ProposalDiscussion ThreadCount (r:1 w:1) + // Proof: ProposalDiscussion ThreadCount (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) // Storage: ProposalEngine ProposalCount (r:1 w:1) + // Proof: ProposalEngine ProposalCount (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) // Storage: ProposalsCodex ThreadIdByProposalId (r:0 w:1) + // Proof: ProposalsCodex ThreadIdByProposalId (max_values: None, max_size: Some(28), added: 2503, mode: MaxEncodedLen) // Storage: ProposalDiscussion ThreadById (r:0 w:1) + // Proof: ProposalDiscussion ThreadById (max_values: None, max_size: Some(198), added: 2673, mode: MaxEncodedLen) // Storage: ProposalEngine Proposals (r:0 w:1) + // Proof: ProposalEngine Proposals (max_values: None, max_size: Some(140), added: 2615, mode: MaxEncodedLen) // Storage: ProposalEngine DispatchableCallCode (r:0 w:1) + // Proof: ProposalEngine DispatchableCallCode (max_values: None, max_size: Some(3145752), added: 3148227, mode: MaxEncodedLen) + /// The range of component `t` is `[1, 20]`. + /// The range of component `d` is `[1, 20]`. fn create_proposal_decrease_working_group_lead_stake(t: u32, d: u32, ) -> Weight { - (103_629_000 as Weight) - // Standard Error: 19_000 - .saturating_add((1_255_000 as Weight).saturating_mul(t as Weight)) - // Standard Error: 19_000 - .saturating_add((1_435_000 as Weight).saturating_mul(d as Weight)) - .saturating_add(T::DbWeight::get().reads(8 as Weight)) - .saturating_add(T::DbWeight::get().writes(9 as Weight)) + // Proof Size summary in bytes: + // Measured: `786` + // Estimated: `21433` + // Minimum execution time: 108_019 nanoseconds. + Weight::from_parts(87_587_475, 0u64) + .saturating_add(Weight::from_parts(0, 21433)) + // Standard Error: 8_786 + .saturating_add(Weight::from_parts(1_068_424, 0u64).saturating_mul(t.into())) + // Standard Error: 8_786 + .saturating_add(Weight::from_parts(1_201_093, 0u64).saturating_mul(d.into())) + .saturating_add(T::DbWeight::get().reads(8_u64)) + .saturating_add(T::DbWeight::get().writes(9_u64)) } // Storage: Instance1WorkingGroup CurrentLead (r:1 w:0) + // Proof: Instance1WorkingGroup CurrentLead (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) // Storage: Membership MembershipById (r:1 w:0) + // Proof: Membership MembershipById (max_values: None, max_size: Some(125), added: 2600, mode: MaxEncodedLen) // Storage: ProposalEngine ActiveProposalCount (r:1 w:1) + // Proof: ProposalEngine ActiveProposalCount (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) // Storage: Membership StakingAccountIdMemberStatus (r:1 w:0) + // Proof: Membership StakingAccountIdMemberStatus (max_values: None, max_size: Some(57), added: 2532, mode: MaxEncodedLen) // Storage: Balances Locks (r:1 w:1) + // Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) // Storage: System Account (r:1 w:1) + // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) // Storage: ProposalDiscussion ThreadCount (r:1 w:1) + // Proof: ProposalDiscussion ThreadCount (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) // Storage: ProposalEngine ProposalCount (r:1 w:1) + // Proof: ProposalEngine ProposalCount (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) // Storage: ProposalsCodex ThreadIdByProposalId (r:0 w:1) + // Proof: ProposalsCodex ThreadIdByProposalId (max_values: None, max_size: Some(28), added: 2503, mode: MaxEncodedLen) // Storage: ProposalDiscussion ThreadById (r:0 w:1) + // Proof: ProposalDiscussion ThreadById (max_values: None, max_size: Some(198), added: 2673, mode: MaxEncodedLen) // Storage: ProposalEngine Proposals (r:0 w:1) + // Proof: ProposalEngine Proposals (max_values: None, max_size: Some(140), added: 2615, mode: MaxEncodedLen) // Storage: ProposalEngine DispatchableCallCode (r:0 w:1) + // Proof: ProposalEngine DispatchableCallCode (max_values: None, max_size: Some(3145752), added: 3148227, mode: MaxEncodedLen) + /// The range of component `t` is `[1, 20]`. + /// The range of component `d` is `[1, 20]`. fn create_proposal_slash_working_group_lead(t: u32, d: u32, ) -> Weight { - (103_453_000 as Weight) - // Standard Error: 26_000 - .saturating_add((1_326_000 as Weight).saturating_mul(t as Weight)) - // Standard Error: 26_000 - .saturating_add((1_418_000 as Weight).saturating_mul(d as Weight)) - .saturating_add(T::DbWeight::get().reads(8 as Weight)) - .saturating_add(T::DbWeight::get().writes(9 as Weight)) + // Proof Size summary in bytes: + // Measured: `786` + // Estimated: `21433` + // Minimum execution time: 108_268 nanoseconds. + Weight::from_parts(88_427_109, 0u64) + .saturating_add(Weight::from_parts(0, 21433)) + // Standard Error: 9_596 + .saturating_add(Weight::from_parts(1_058_663, 0u64).saturating_mul(t.into())) + // Standard Error: 9_596 + .saturating_add(Weight::from_parts(1_167_638, 0u64).saturating_mul(d.into())) + .saturating_add(T::DbWeight::get().reads(8_u64)) + .saturating_add(T::DbWeight::get().writes(9_u64)) } // Storage: Instance1WorkingGroup CurrentLead (r:1 w:0) + // Proof: Instance1WorkingGroup CurrentLead (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) // Storage: Membership MembershipById (r:1 w:0) + // Proof: Membership MembershipById (max_values: None, max_size: Some(125), added: 2600, mode: MaxEncodedLen) // Storage: ProposalEngine ActiveProposalCount (r:1 w:1) + // Proof: ProposalEngine ActiveProposalCount (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) // Storage: Membership StakingAccountIdMemberStatus (r:1 w:0) + // Proof: Membership StakingAccountIdMemberStatus (max_values: None, max_size: Some(57), added: 2532, mode: MaxEncodedLen) // Storage: Balances Locks (r:1 w:1) + // Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) // Storage: System Account (r:1 w:1) + // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) // Storage: ProposalDiscussion ThreadCount (r:1 w:1) + // Proof: ProposalDiscussion ThreadCount (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) // Storage: ProposalEngine ProposalCount (r:1 w:1) + // Proof: ProposalEngine ProposalCount (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) // Storage: ProposalsCodex ThreadIdByProposalId (r:0 w:1) + // Proof: ProposalsCodex ThreadIdByProposalId (max_values: None, max_size: Some(28), added: 2503, mode: MaxEncodedLen) // Storage: ProposalDiscussion ThreadById (r:0 w:1) + // Proof: ProposalDiscussion ThreadById (max_values: None, max_size: Some(198), added: 2673, mode: MaxEncodedLen) // Storage: ProposalEngine Proposals (r:0 w:1) + // Proof: ProposalEngine Proposals (max_values: None, max_size: Some(140), added: 2615, mode: MaxEncodedLen) // Storage: ProposalEngine DispatchableCallCode (r:0 w:1) + // Proof: ProposalEngine DispatchableCallCode (max_values: None, max_size: Some(3145752), added: 3148227, mode: MaxEncodedLen) + /// The range of component `t` is `[1, 20]`. + /// The range of component `d` is `[1, 20]`. fn create_proposal_set_working_group_lead_reward(t: u32, d: u32, ) -> Weight { - (99_679_000 as Weight) - // Standard Error: 37_000 - .saturating_add((1_417_000 as Weight).saturating_mul(t as Weight)) - // Standard Error: 37_000 - .saturating_add((1_621_000 as Weight).saturating_mul(d as Weight)) - .saturating_add(T::DbWeight::get().reads(8 as Weight)) - .saturating_add(T::DbWeight::get().writes(9 as Weight)) + // Proof Size summary in bytes: + // Measured: `786` + // Estimated: `21433` + // Minimum execution time: 107_145 nanoseconds. + Weight::from_parts(86_500_304, 0u64) + .saturating_add(Weight::from_parts(0, 21433)) + // Standard Error: 9_510 + .saturating_add(Weight::from_parts(1_122_859, 0u64).saturating_mul(t.into())) + // Standard Error: 9_510 + .saturating_add(Weight::from_parts(1_228_148, 0u64).saturating_mul(d.into())) + .saturating_add(T::DbWeight::get().reads(8_u64)) + .saturating_add(T::DbWeight::get().writes(9_u64)) } // Storage: Instance1WorkingGroup CurrentLead (r:1 w:0) + // Proof: Instance1WorkingGroup CurrentLead (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) // Storage: Membership MembershipById (r:1 w:0) + // Proof: Membership MembershipById (max_values: None, max_size: Some(125), added: 2600, mode: MaxEncodedLen) // Storage: ProposalEngine ActiveProposalCount (r:1 w:1) + // Proof: ProposalEngine ActiveProposalCount (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) // Storage: Membership StakingAccountIdMemberStatus (r:1 w:0) + // Proof: Membership StakingAccountIdMemberStatus (max_values: None, max_size: Some(57), added: 2532, mode: MaxEncodedLen) // Storage: Balances Locks (r:1 w:1) + // Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) // Storage: System Account (r:1 w:1) + // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) // Storage: ProposalDiscussion ThreadCount (r:1 w:1) + // Proof: ProposalDiscussion ThreadCount (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) // Storage: ProposalEngine ProposalCount (r:1 w:1) + // Proof: ProposalEngine ProposalCount (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) // Storage: ProposalsCodex ThreadIdByProposalId (r:0 w:1) + // Proof: ProposalsCodex ThreadIdByProposalId (max_values: None, max_size: Some(28), added: 2503, mode: MaxEncodedLen) // Storage: ProposalDiscussion ThreadById (r:0 w:1) + // Proof: ProposalDiscussion ThreadById (max_values: None, max_size: Some(198), added: 2673, mode: MaxEncodedLen) // Storage: ProposalEngine Proposals (r:0 w:1) + // Proof: ProposalEngine Proposals (max_values: None, max_size: Some(140), added: 2615, mode: MaxEncodedLen) // Storage: ProposalEngine DispatchableCallCode (r:0 w:1) + // Proof: ProposalEngine DispatchableCallCode (max_values: None, max_size: Some(3145752), added: 3148227, mode: MaxEncodedLen) + /// The range of component `t` is `[1, 20]`. + /// The range of component `d` is `[1, 20]`. fn create_proposal_terminate_working_group_lead(t: u32, d: u32, ) -> Weight { - (102_435_000 as Weight) - // Standard Error: 23_000 - .saturating_add((1_320_000 as Weight).saturating_mul(t as Weight)) - // Standard Error: 23_000 - .saturating_add((1_501_000 as Weight).saturating_mul(d as Weight)) - .saturating_add(T::DbWeight::get().reads(8 as Weight)) - .saturating_add(T::DbWeight::get().writes(9 as Weight)) + // Proof Size summary in bytes: + // Measured: `786` + // Estimated: `21433` + // Minimum execution time: 106_905 nanoseconds. + Weight::from_parts(86_871_011, 0u64) + .saturating_add(Weight::from_parts(0, 21433)) + // Standard Error: 8_723 + .saturating_add(Weight::from_parts(1_082_282, 0u64).saturating_mul(t.into())) + // Standard Error: 8_723 + .saturating_add(Weight::from_parts(1_220_616, 0u64).saturating_mul(d.into())) + .saturating_add(T::DbWeight::get().reads(8_u64)) + .saturating_add(T::DbWeight::get().writes(9_u64)) } // Storage: Membership MembershipById (r:1 w:0) + // Proof: Membership MembershipById (max_values: None, max_size: Some(125), added: 2600, mode: MaxEncodedLen) // Storage: ProposalEngine ActiveProposalCount (r:1 w:1) + // Proof: ProposalEngine ActiveProposalCount (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) // Storage: Membership StakingAccountIdMemberStatus (r:1 w:0) + // Proof: Membership StakingAccountIdMemberStatus (max_values: None, max_size: Some(57), added: 2532, mode: MaxEncodedLen) // Storage: Balances Locks (r:1 w:1) + // Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) // Storage: System Account (r:1 w:1) + // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) // Storage: ProposalDiscussion ThreadCount (r:1 w:1) + // Proof: ProposalDiscussion ThreadCount (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) // Storage: ProposalEngine ProposalCount (r:1 w:1) + // Proof: ProposalEngine ProposalCount (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) // Storage: ProposalsCodex ThreadIdByProposalId (r:0 w:1) + // Proof: ProposalsCodex ThreadIdByProposalId (max_values: None, max_size: Some(28), added: 2503, mode: MaxEncodedLen) // Storage: ProposalDiscussion ThreadById (r:0 w:1) + // Proof: ProposalDiscussion ThreadById (max_values: None, max_size: Some(198), added: 2673, mode: MaxEncodedLen) // Storage: ProposalEngine Proposals (r:0 w:1) + // Proof: ProposalEngine Proposals (max_values: None, max_size: Some(140), added: 2615, mode: MaxEncodedLen) // Storage: ProposalEngine DispatchableCallCode (r:0 w:1) + // Proof: ProposalEngine DispatchableCallCode (max_values: None, max_size: Some(3145752), added: 3148227, mode: MaxEncodedLen) + /// The range of component `i` is `[1, 100]`. + /// The range of component `t` is `[1, 20]`. + /// The range of component `d` is `[1, 20]`. fn create_proposal_amend_constitution(i: u32, t: u32, d: u32, ) -> Weight { - (118_339_000 as Weight) - // Standard Error: 5_000 - .saturating_add((1_853_000 as Weight).saturating_mul(i as Weight)) - // Standard Error: 45_000 - .saturating_add((837_000 as Weight).saturating_mul(t as Weight)) - // Standard Error: 45_000 - .saturating_add((974_000 as Weight).saturating_mul(d as Weight)) - .saturating_add(T::DbWeight::get().reads(7 as Weight)) - .saturating_add(T::DbWeight::get().writes(9 as Weight)) + // Proof Size summary in bytes: + // Measured: `651` + // Estimated: `19940` + // Minimum execution time: 128_180 nanoseconds. + Weight::from_parts(84_661_519, 0u64) + .saturating_add(Weight::from_parts(0, 19940)) + // Standard Error: 4_382 + .saturating_add(Weight::from_parts(1_583_896, 0u64).saturating_mul(i.into())) + // Standard Error: 22_178 + .saturating_add(Weight::from_parts(1_016_422, 0u64).saturating_mul(t.into())) + // Standard Error: 22_178 + .saturating_add(Weight::from_parts(1_192_695, 0u64).saturating_mul(d.into())) + .saturating_add(T::DbWeight::get().reads(7_u64)) + .saturating_add(T::DbWeight::get().writes(9_u64)) } // Storage: Instance1WorkingGroup OpeningById (r:1 w:0) + // Proof: Instance1WorkingGroup OpeningById (max_values: None, max_size: Some(114), added: 2589, mode: MaxEncodedLen) // Storage: Membership MembershipById (r:1 w:0) + // Proof: Membership MembershipById (max_values: None, max_size: Some(125), added: 2600, mode: MaxEncodedLen) // Storage: ProposalEngine ActiveProposalCount (r:1 w:1) + // Proof: ProposalEngine ActiveProposalCount (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) // Storage: Membership StakingAccountIdMemberStatus (r:1 w:0) + // Proof: Membership StakingAccountIdMemberStatus (max_values: None, max_size: Some(57), added: 2532, mode: MaxEncodedLen) // Storage: Balances Locks (r:1 w:1) + // Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) // Storage: System Account (r:1 w:1) + // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) // Storage: ProposalDiscussion ThreadCount (r:1 w:1) + // Proof: ProposalDiscussion ThreadCount (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) // Storage: ProposalEngine ProposalCount (r:1 w:1) + // Proof: ProposalEngine ProposalCount (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) // Storage: ProposalsCodex ThreadIdByProposalId (r:0 w:1) + // Proof: ProposalsCodex ThreadIdByProposalId (max_values: None, max_size: Some(28), added: 2503, mode: MaxEncodedLen) // Storage: ProposalDiscussion ThreadById (r:0 w:1) + // Proof: ProposalDiscussion ThreadById (max_values: None, max_size: Some(198), added: 2673, mode: MaxEncodedLen) // Storage: ProposalEngine Proposals (r:0 w:1) + // Proof: ProposalEngine Proposals (max_values: None, max_size: Some(140), added: 2615, mode: MaxEncodedLen) // Storage: ProposalEngine DispatchableCallCode (r:0 w:1) + // Proof: ProposalEngine DispatchableCallCode (max_values: None, max_size: Some(3145752), added: 3148227, mode: MaxEncodedLen) + /// The range of component `t` is `[1, 20]`. + /// The range of component `d` is `[1, 20]`. fn create_proposal_cancel_working_group_lead_opening(t: u32, d: u32, ) -> Weight { - (109_349_000 as Weight) - // Standard Error: 38_000 - .saturating_add((1_247_000 as Weight).saturating_mul(t as Weight)) - // Standard Error: 38_000 - .saturating_add((1_240_000 as Weight).saturating_mul(d as Weight)) - .saturating_add(T::DbWeight::get().reads(8 as Weight)) - .saturating_add(T::DbWeight::get().writes(9 as Weight)) + // Proof Size summary in bytes: + // Measured: `803` + // Estimated: `23519` + // Minimum execution time: 107_687 nanoseconds. + Weight::from_parts(87_496_406, 0u64) + .saturating_add(Weight::from_parts(0, 23519)) + // Standard Error: 9_167 + .saturating_add(Weight::from_parts(1_079_386, 0u64).saturating_mul(t.into())) + // Standard Error: 9_167 + .saturating_add(Weight::from_parts(1_212_126, 0u64).saturating_mul(d.into())) + .saturating_add(T::DbWeight::get().reads(8_u64)) + .saturating_add(T::DbWeight::get().writes(9_u64)) } // Storage: Membership MembershipById (r:1 w:0) + // Proof: Membership MembershipById (max_values: None, max_size: Some(125), added: 2600, mode: MaxEncodedLen) // Storage: ProposalEngine ActiveProposalCount (r:1 w:1) + // Proof: ProposalEngine ActiveProposalCount (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) // Storage: Membership StakingAccountIdMemberStatus (r:1 w:0) + // Proof: Membership StakingAccountIdMemberStatus (max_values: None, max_size: Some(57), added: 2532, mode: MaxEncodedLen) // Storage: Balances Locks (r:1 w:1) + // Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) // Storage: System Account (r:1 w:1) + // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) // Storage: ProposalDiscussion ThreadCount (r:1 w:1) + // Proof: ProposalDiscussion ThreadCount (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) // Storage: ProposalEngine ProposalCount (r:1 w:1) + // Proof: ProposalEngine ProposalCount (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) // Storage: ProposalsCodex ThreadIdByProposalId (r:0 w:1) + // Proof: ProposalsCodex ThreadIdByProposalId (max_values: None, max_size: Some(28), added: 2503, mode: MaxEncodedLen) // Storage: ProposalDiscussion ThreadById (r:0 w:1) + // Proof: ProposalDiscussion ThreadById (max_values: None, max_size: Some(198), added: 2673, mode: MaxEncodedLen) // Storage: ProposalEngine Proposals (r:0 w:1) + // Proof: ProposalEngine Proposals (max_values: None, max_size: Some(140), added: 2615, mode: MaxEncodedLen) // Storage: ProposalEngine DispatchableCallCode (r:0 w:1) + // Proof: ProposalEngine DispatchableCallCode (max_values: None, max_size: Some(3145752), added: 3148227, mode: MaxEncodedLen) + /// The range of component `t` is `[1, 20]`. + /// The range of component `d` is `[1, 20]`. fn create_proposal_set_membership_price(t: u32, d: u32, ) -> Weight { - (95_468_000 as Weight) - // Standard Error: 34_000 - .saturating_add((1_383_000 as Weight).saturating_mul(t as Weight)) - // Standard Error: 34_000 - .saturating_add((1_501_000 as Weight).saturating_mul(d as Weight)) - .saturating_add(T::DbWeight::get().reads(7 as Weight)) - .saturating_add(T::DbWeight::get().writes(9 as Weight)) + // Proof Size summary in bytes: + // Measured: `651` + // Estimated: `19940` + // Minimum execution time: 102_055 nanoseconds. + Weight::from_parts(81_142_005, 0u64) + .saturating_add(Weight::from_parts(0, 19940)) + // Standard Error: 9_542 + .saturating_add(Weight::from_parts(1_070_902, 0u64).saturating_mul(t.into())) + // Standard Error: 9_542 + .saturating_add(Weight::from_parts(1_205_684, 0u64).saturating_mul(d.into())) + .saturating_add(T::DbWeight::get().reads(7_u64)) + .saturating_add(T::DbWeight::get().writes(9_u64)) } // Storage: Membership MembershipById (r:1 w:0) + // Proof: Membership MembershipById (max_values: None, max_size: Some(125), added: 2600, mode: MaxEncodedLen) // Storage: ProposalEngine ActiveProposalCount (r:1 w:1) + // Proof: ProposalEngine ActiveProposalCount (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) // Storage: Membership StakingAccountIdMemberStatus (r:1 w:0) + // Proof: Membership StakingAccountIdMemberStatus (max_values: None, max_size: Some(57), added: 2532, mode: MaxEncodedLen) // Storage: Balances Locks (r:1 w:1) + // Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) // Storage: System Account (r:1 w:1) + // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) // Storage: ProposalDiscussion ThreadCount (r:1 w:1) + // Proof: ProposalDiscussion ThreadCount (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) // Storage: ProposalEngine ProposalCount (r:1 w:1) + // Proof: ProposalEngine ProposalCount (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) // Storage: ProposalsCodex ThreadIdByProposalId (r:0 w:1) + // Proof: ProposalsCodex ThreadIdByProposalId (max_values: None, max_size: Some(28), added: 2503, mode: MaxEncodedLen) // Storage: ProposalDiscussion ThreadById (r:0 w:1) + // Proof: ProposalDiscussion ThreadById (max_values: None, max_size: Some(198), added: 2673, mode: MaxEncodedLen) // Storage: ProposalEngine Proposals (r:0 w:1) + // Proof: ProposalEngine Proposals (max_values: None, max_size: Some(140), added: 2615, mode: MaxEncodedLen) // Storage: ProposalEngine DispatchableCallCode (r:0 w:1) + // Proof: ProposalEngine DispatchableCallCode (max_values: None, max_size: Some(3145752), added: 3148227, mode: MaxEncodedLen) + /// The range of component `t` is `[1, 20]`. + /// The range of component `d` is `[1, 20]`. fn create_proposal_set_council_budget_increment(t: u32, d: u32, ) -> Weight { - (97_264_000 as Weight) - // Standard Error: 19_000 - .saturating_add((1_261_000 as Weight).saturating_mul(t as Weight)) - // Standard Error: 19_000 - .saturating_add((1_439_000 as Weight).saturating_mul(d as Weight)) - .saturating_add(T::DbWeight::get().reads(7 as Weight)) - .saturating_add(T::DbWeight::get().writes(9 as Weight)) + // Proof Size summary in bytes: + // Measured: `651` + // Estimated: `19940` + // Minimum execution time: 101_346 nanoseconds. + Weight::from_parts(81_079_661, 0u64) + .saturating_add(Weight::from_parts(0, 19940)) + // Standard Error: 9_482 + .saturating_add(Weight::from_parts(1_099_004, 0u64).saturating_mul(t.into())) + // Standard Error: 9_482 + .saturating_add(Weight::from_parts(1_193_430, 0u64).saturating_mul(d.into())) + .saturating_add(T::DbWeight::get().reads(7_u64)) + .saturating_add(T::DbWeight::get().writes(9_u64)) } // Storage: Membership MembershipById (r:1 w:0) + // Proof: Membership MembershipById (max_values: None, max_size: Some(125), added: 2600, mode: MaxEncodedLen) // Storage: ProposalEngine ActiveProposalCount (r:1 w:1) + // Proof: ProposalEngine ActiveProposalCount (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) // Storage: Membership StakingAccountIdMemberStatus (r:1 w:0) + // Proof: Membership StakingAccountIdMemberStatus (max_values: None, max_size: Some(57), added: 2532, mode: MaxEncodedLen) // Storage: Balances Locks (r:1 w:1) + // Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) // Storage: System Account (r:1 w:1) + // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) // Storage: ProposalDiscussion ThreadCount (r:1 w:1) + // Proof: ProposalDiscussion ThreadCount (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) // Storage: ProposalEngine ProposalCount (r:1 w:1) + // Proof: ProposalEngine ProposalCount (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) // Storage: ProposalsCodex ThreadIdByProposalId (r:0 w:1) + // Proof: ProposalsCodex ThreadIdByProposalId (max_values: None, max_size: Some(28), added: 2503, mode: MaxEncodedLen) // Storage: ProposalDiscussion ThreadById (r:0 w:1) + // Proof: ProposalDiscussion ThreadById (max_values: None, max_size: Some(198), added: 2673, mode: MaxEncodedLen) // Storage: ProposalEngine Proposals (r:0 w:1) + // Proof: ProposalEngine Proposals (max_values: None, max_size: Some(140), added: 2615, mode: MaxEncodedLen) // Storage: ProposalEngine DispatchableCallCode (r:0 w:1) + // Proof: ProposalEngine DispatchableCallCode (max_values: None, max_size: Some(3145752), added: 3148227, mode: MaxEncodedLen) + /// The range of component `t` is `[1, 20]`. + /// The range of component `d` is `[1, 20]`. fn create_proposal_set_councilor_reward(t: u32, d: u32, ) -> Weight { - (97_564_000 as Weight) - // Standard Error: 18_000 - .saturating_add((1_259_000 as Weight).saturating_mul(t as Weight)) - // Standard Error: 18_000 - .saturating_add((1_422_000 as Weight).saturating_mul(d as Weight)) - .saturating_add(T::DbWeight::get().reads(7 as Weight)) - .saturating_add(T::DbWeight::get().writes(9 as Weight)) + // Proof Size summary in bytes: + // Measured: `651` + // Estimated: `19940` + // Minimum execution time: 100_215 nanoseconds. + Weight::from_parts(80_635_764, 0u64) + .saturating_add(Weight::from_parts(0, 19940)) + // Standard Error: 9_243 + .saturating_add(Weight::from_parts(1_085_381, 0u64).saturating_mul(t.into())) + // Standard Error: 9_243 + .saturating_add(Weight::from_parts(1_216_720, 0u64).saturating_mul(d.into())) + .saturating_add(T::DbWeight::get().reads(7_u64)) + .saturating_add(T::DbWeight::get().writes(9_u64)) } // Storage: Membership MembershipById (r:1 w:0) + // Proof: Membership MembershipById (max_values: None, max_size: Some(125), added: 2600, mode: MaxEncodedLen) // Storage: ProposalEngine ActiveProposalCount (r:1 w:1) + // Proof: ProposalEngine ActiveProposalCount (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) // Storage: Membership StakingAccountIdMemberStatus (r:1 w:0) + // Proof: Membership StakingAccountIdMemberStatus (max_values: None, max_size: Some(57), added: 2532, mode: MaxEncodedLen) // Storage: Balances Locks (r:1 w:1) + // Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) // Storage: System Account (r:1 w:1) + // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) // Storage: ProposalDiscussion ThreadCount (r:1 w:1) + // Proof: ProposalDiscussion ThreadCount (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) // Storage: ProposalEngine ProposalCount (r:1 w:1) + // Proof: ProposalEngine ProposalCount (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) // Storage: ProposalsCodex ThreadIdByProposalId (r:0 w:1) + // Proof: ProposalsCodex ThreadIdByProposalId (max_values: None, max_size: Some(28), added: 2503, mode: MaxEncodedLen) // Storage: ProposalDiscussion ThreadById (r:0 w:1) + // Proof: ProposalDiscussion ThreadById (max_values: None, max_size: Some(198), added: 2673, mode: MaxEncodedLen) // Storage: ProposalEngine Proposals (r:0 w:1) + // Proof: ProposalEngine Proposals (max_values: None, max_size: Some(140), added: 2615, mode: MaxEncodedLen) // Storage: ProposalEngine DispatchableCallCode (r:0 w:1) + // Proof: ProposalEngine DispatchableCallCode (max_values: None, max_size: Some(3145752), added: 3148227, mode: MaxEncodedLen) + /// The range of component `t` is `[1, 20]`. + /// The range of component `d` is `[1, 20]`. fn create_proposal_set_initial_invitation_balance(t: u32, d: u32, ) -> Weight { - (98_633_000 as Weight) - // Standard Error: 25_000 - .saturating_add((1_198_000 as Weight).saturating_mul(t as Weight)) - // Standard Error: 25_000 - .saturating_add((1_442_000 as Weight).saturating_mul(d as Weight)) - .saturating_add(T::DbWeight::get().reads(7 as Weight)) - .saturating_add(T::DbWeight::get().writes(9 as Weight)) + // Proof Size summary in bytes: + // Measured: `651` + // Estimated: `19940` + // Minimum execution time: 101_916 nanoseconds. + Weight::from_parts(79_755_589, 0u64) + .saturating_add(Weight::from_parts(0, 19940)) + // Standard Error: 9_964 + .saturating_add(Weight::from_parts(1_110_915, 0u64).saturating_mul(t.into())) + // Standard Error: 9_964 + .saturating_add(Weight::from_parts(1_256_642, 0u64).saturating_mul(d.into())) + .saturating_add(T::DbWeight::get().reads(7_u64)) + .saturating_add(T::DbWeight::get().writes(9_u64)) } // Storage: Membership MembershipById (r:1 w:0) + // Proof: Membership MembershipById (max_values: None, max_size: Some(125), added: 2600, mode: MaxEncodedLen) // Storage: ProposalEngine ActiveProposalCount (r:1 w:1) + // Proof: ProposalEngine ActiveProposalCount (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) // Storage: Membership StakingAccountIdMemberStatus (r:1 w:0) + // Proof: Membership StakingAccountIdMemberStatus (max_values: None, max_size: Some(57), added: 2532, mode: MaxEncodedLen) // Storage: Balances Locks (r:1 w:1) + // Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) // Storage: System Account (r:1 w:1) + // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) // Storage: ProposalDiscussion ThreadCount (r:1 w:1) + // Proof: ProposalDiscussion ThreadCount (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) // Storage: ProposalEngine ProposalCount (r:1 w:1) + // Proof: ProposalEngine ProposalCount (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) // Storage: ProposalsCodex ThreadIdByProposalId (r:0 w:1) + // Proof: ProposalsCodex ThreadIdByProposalId (max_values: None, max_size: Some(28), added: 2503, mode: MaxEncodedLen) // Storage: ProposalDiscussion ThreadById (r:0 w:1) + // Proof: ProposalDiscussion ThreadById (max_values: None, max_size: Some(198), added: 2673, mode: MaxEncodedLen) // Storage: ProposalEngine Proposals (r:0 w:1) + // Proof: ProposalEngine Proposals (max_values: None, max_size: Some(140), added: 2615, mode: MaxEncodedLen) // Storage: ProposalEngine DispatchableCallCode (r:0 w:1) + // Proof: ProposalEngine DispatchableCallCode (max_values: None, max_size: Some(3145752), added: 3148227, mode: MaxEncodedLen) + /// The range of component `t` is `[1, 20]`. + /// The range of component `d` is `[1, 20]`. fn create_proposal_set_initial_invitation_count(t: u32, d: u32, ) -> Weight { - (96_739_000 as Weight) - // Standard Error: 30_000 - .saturating_add((1_310_000 as Weight).saturating_mul(t as Weight)) - // Standard Error: 30_000 - .saturating_add((1_446_000 as Weight).saturating_mul(d as Weight)) - .saturating_add(T::DbWeight::get().reads(7 as Weight)) - .saturating_add(T::DbWeight::get().writes(9 as Weight)) + // Proof Size summary in bytes: + // Measured: `651` + // Estimated: `19940` + // Minimum execution time: 100_899 nanoseconds. + Weight::from_parts(79_881_148, 0u64) + .saturating_add(Weight::from_parts(0, 19940)) + // Standard Error: 9_587 + .saturating_add(Weight::from_parts(1_100_528, 0u64).saturating_mul(t.into())) + // Standard Error: 9_587 + .saturating_add(Weight::from_parts(1_232_652, 0u64).saturating_mul(d.into())) + .saturating_add(T::DbWeight::get().reads(7_u64)) + .saturating_add(T::DbWeight::get().writes(9_u64)) } // Storage: Membership MembershipById (r:1 w:0) + // Proof: Membership MembershipById (max_values: None, max_size: Some(125), added: 2600, mode: MaxEncodedLen) // Storage: ProposalEngine ActiveProposalCount (r:1 w:1) + // Proof: ProposalEngine ActiveProposalCount (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) // Storage: Membership StakingAccountIdMemberStatus (r:1 w:0) + // Proof: Membership StakingAccountIdMemberStatus (max_values: None, max_size: Some(57), added: 2532, mode: MaxEncodedLen) // Storage: Balances Locks (r:1 w:1) + // Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) // Storage: System Account (r:1 w:1) + // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) // Storage: ProposalDiscussion ThreadCount (r:1 w:1) + // Proof: ProposalDiscussion ThreadCount (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) // Storage: ProposalEngine ProposalCount (r:1 w:1) + // Proof: ProposalEngine ProposalCount (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) // Storage: ProposalsCodex ThreadIdByProposalId (r:0 w:1) + // Proof: ProposalsCodex ThreadIdByProposalId (max_values: None, max_size: Some(28), added: 2503, mode: MaxEncodedLen) // Storage: ProposalDiscussion ThreadById (r:0 w:1) + // Proof: ProposalDiscussion ThreadById (max_values: None, max_size: Some(198), added: 2673, mode: MaxEncodedLen) // Storage: ProposalEngine Proposals (r:0 w:1) + // Proof: ProposalEngine Proposals (max_values: None, max_size: Some(140), added: 2615, mode: MaxEncodedLen) // Storage: ProposalEngine DispatchableCallCode (r:0 w:1) + // Proof: ProposalEngine DispatchableCallCode (max_values: None, max_size: Some(3145752), added: 3148227, mode: MaxEncodedLen) + /// The range of component `t` is `[1, 20]`. + /// The range of component `d` is `[1, 20]`. fn create_proposal_set_membership_lead_invitation_quota(t: u32, d: u32, ) -> Weight { - (100_502_000 as Weight) - // Standard Error: 24_000 - .saturating_add((1_194_000 as Weight).saturating_mul(t as Weight)) - // Standard Error: 24_000 - .saturating_add((1_306_000 as Weight).saturating_mul(d as Weight)) - .saturating_add(T::DbWeight::get().reads(7 as Weight)) - .saturating_add(T::DbWeight::get().writes(9 as Weight)) + // Proof Size summary in bytes: + // Measured: `651` + // Estimated: `19940` + // Minimum execution time: 101_016 nanoseconds. + Weight::from_parts(79_577_404, 0u64) + .saturating_add(Weight::from_parts(0, 19940)) + // Standard Error: 8_899 + .saturating_add(Weight::from_parts(1_093_744, 0u64).saturating_mul(t.into())) + // Standard Error: 8_899 + .saturating_add(Weight::from_parts(1_265_943, 0u64).saturating_mul(d.into())) + .saturating_add(T::DbWeight::get().reads(7_u64)) + .saturating_add(T::DbWeight::get().writes(9_u64)) } // Storage: Membership MembershipById (r:1 w:0) + // Proof: Membership MembershipById (max_values: None, max_size: Some(125), added: 2600, mode: MaxEncodedLen) // Storage: ProposalEngine ActiveProposalCount (r:1 w:1) + // Proof: ProposalEngine ActiveProposalCount (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) // Storage: Membership StakingAccountIdMemberStatus (r:1 w:0) + // Proof: Membership StakingAccountIdMemberStatus (max_values: None, max_size: Some(57), added: 2532, mode: MaxEncodedLen) // Storage: Balances Locks (r:1 w:1) + // Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) // Storage: System Account (r:1 w:1) + // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) // Storage: ProposalDiscussion ThreadCount (r:1 w:1) + // Proof: ProposalDiscussion ThreadCount (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) // Storage: ProposalEngine ProposalCount (r:1 w:1) + // Proof: ProposalEngine ProposalCount (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) // Storage: ProposalsCodex ThreadIdByProposalId (r:0 w:1) + // Proof: ProposalsCodex ThreadIdByProposalId (max_values: None, max_size: Some(28), added: 2503, mode: MaxEncodedLen) // Storage: ProposalDiscussion ThreadById (r:0 w:1) + // Proof: ProposalDiscussion ThreadById (max_values: None, max_size: Some(198), added: 2673, mode: MaxEncodedLen) // Storage: ProposalEngine Proposals (r:0 w:1) + // Proof: ProposalEngine Proposals (max_values: None, max_size: Some(140), added: 2615, mode: MaxEncodedLen) // Storage: ProposalEngine DispatchableCallCode (r:0 w:1) + // Proof: ProposalEngine DispatchableCallCode (max_values: None, max_size: Some(3145752), added: 3148227, mode: MaxEncodedLen) + /// The range of component `t` is `[1, 20]`. + /// The range of component `d` is `[1, 20]`. fn create_proposal_set_referral_cut(t: u32, d: u32, ) -> Weight { - (97_395_000 as Weight) - // Standard Error: 22_000 - .saturating_add((1_255_000 as Weight).saturating_mul(t as Weight)) - // Standard Error: 22_000 - .saturating_add((1_448_000 as Weight).saturating_mul(d as Weight)) - .saturating_add(T::DbWeight::get().reads(7 as Weight)) - .saturating_add(T::DbWeight::get().writes(9 as Weight)) + // Proof Size summary in bytes: + // Measured: `651` + // Estimated: `19940` + // Minimum execution time: 100_679 nanoseconds. + Weight::from_parts(79_809_940, 0u64) + .saturating_add(Weight::from_parts(0, 19940)) + // Standard Error: 10_090 + .saturating_add(Weight::from_parts(1_127_359, 0u64).saturating_mul(t.into())) + // Standard Error: 10_090 + .saturating_add(Weight::from_parts(1_236_232, 0u64).saturating_mul(d.into())) + .saturating_add(T::DbWeight::get().reads(7_u64)) + .saturating_add(T::DbWeight::get().writes(9_u64)) } // Storage: Membership MembershipById (r:1 w:0) + // Proof: Membership MembershipById (max_values: None, max_size: Some(125), added: 2600, mode: MaxEncodedLen) // Storage: ProposalEngine ActiveProposalCount (r:1 w:1) + // Proof: ProposalEngine ActiveProposalCount (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) // Storage: Membership StakingAccountIdMemberStatus (r:1 w:0) + // Proof: Membership StakingAccountIdMemberStatus (max_values: None, max_size: Some(57), added: 2532, mode: MaxEncodedLen) // Storage: Balances Locks (r:1 w:1) + // Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) // Storage: System Account (r:1 w:1) + // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) // Storage: ProposalDiscussion ThreadCount (r:1 w:1) + // Proof: ProposalDiscussion ThreadCount (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) // Storage: ProposalEngine ProposalCount (r:1 w:1) + // Proof: ProposalEngine ProposalCount (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) // Storage: ProposalsCodex ThreadIdByProposalId (r:0 w:1) + // Proof: ProposalsCodex ThreadIdByProposalId (max_values: None, max_size: Some(28), added: 2503, mode: MaxEncodedLen) // Storage: ProposalDiscussion ThreadById (r:0 w:1) + // Proof: ProposalDiscussion ThreadById (max_values: None, max_size: Some(198), added: 2673, mode: MaxEncodedLen) // Storage: ProposalEngine Proposals (r:0 w:1) + // Proof: ProposalEngine Proposals (max_values: None, max_size: Some(140), added: 2615, mode: MaxEncodedLen) // Storage: ProposalEngine DispatchableCallCode (r:0 w:1) + // Proof: ProposalEngine DispatchableCallCode (max_values: None, max_size: Some(3145752), added: 3148227, mode: MaxEncodedLen) + /// The range of component `t` is `[1, 20]`. + /// The range of component `d` is `[1, 20]`. fn create_proposal_update_global_nft_limit(t: u32, d: u32, ) -> Weight { - (95_855_000 as Weight) - // Standard Error: 23_000 - .saturating_add((1_340_000 as Weight).saturating_mul(t as Weight)) - // Standard Error: 23_000 - .saturating_add((1_517_000 as Weight).saturating_mul(d as Weight)) - .saturating_add(T::DbWeight::get().reads(7 as Weight)) - .saturating_add(T::DbWeight::get().writes(9 as Weight)) + // Proof Size summary in bytes: + // Measured: `651` + // Estimated: `19940` + // Minimum execution time: 101_617 nanoseconds. + Weight::from_parts(81_088_778, 0u64) + .saturating_add(Weight::from_parts(0, 19940)) + // Standard Error: 9_600 + .saturating_add(Weight::from_parts(1_069_076, 0u64).saturating_mul(t.into())) + // Standard Error: 9_600 + .saturating_add(Weight::from_parts(1_215_626, 0u64).saturating_mul(d.into())) + .saturating_add(T::DbWeight::get().reads(7_u64)) + .saturating_add(T::DbWeight::get().writes(9_u64)) } // Storage: Membership MembershipById (r:1 w:0) + // Proof: Membership MembershipById (max_values: None, max_size: Some(125), added: 2600, mode: MaxEncodedLen) // Storage: ProposalEngine ActiveProposalCount (r:1 w:1) + // Proof: ProposalEngine ActiveProposalCount (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) // Storage: Membership StakingAccountIdMemberStatus (r:1 w:0) + // Proof: Membership StakingAccountIdMemberStatus (max_values: None, max_size: Some(57), added: 2532, mode: MaxEncodedLen) // Storage: Balances Locks (r:1 w:1) + // Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) // Storage: System Account (r:1 w:1) + // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) // Storage: ProposalDiscussion ThreadCount (r:1 w:1) + // Proof: ProposalDiscussion ThreadCount (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) // Storage: ProposalEngine ProposalCount (r:1 w:1) + // Proof: ProposalEngine ProposalCount (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) // Storage: ProposalsCodex ThreadIdByProposalId (r:0 w:1) + // Proof: ProposalsCodex ThreadIdByProposalId (max_values: None, max_size: Some(28), added: 2503, mode: MaxEncodedLen) // Storage: ProposalDiscussion ThreadById (r:0 w:1) + // Proof: ProposalDiscussion ThreadById (max_values: None, max_size: Some(198), added: 2673, mode: MaxEncodedLen) // Storage: ProposalEngine Proposals (r:0 w:1) + // Proof: ProposalEngine Proposals (max_values: None, max_size: Some(140), added: 2615, mode: MaxEncodedLen) // Storage: ProposalEngine DispatchableCallCode (r:0 w:1) + // Proof: ProposalEngine DispatchableCallCode (max_values: None, max_size: Some(3145752), added: 3148227, mode: MaxEncodedLen) + /// The range of component `t` is `[1, 20]`. + /// The range of component `d` is `[1, 20]`. + /// The range of component `i` is `[0, 100]`. fn create_proposal_update_channel_payouts(t: u32, d: u32, i: u32, ) -> Weight { - (121_494_000 as Weight) - // Standard Error: 43_000 - .saturating_add((801_000 as Weight).saturating_mul(t as Weight)) - // Standard Error: 43_000 - .saturating_add((1_010_000 as Weight).saturating_mul(d as Weight)) - // Standard Error: 6_000 - .saturating_add((1_809_000 as Weight).saturating_mul(i as Weight)) - .saturating_add(T::DbWeight::get().reads(7 as Weight)) - .saturating_add(T::DbWeight::get().writes(9 as Weight)) + // Proof Size summary in bytes: + // Measured: `651` + // Estimated: `19940` + // Minimum execution time: 127_649 nanoseconds. + Weight::from_parts(99_177_550, 0u64) + .saturating_add(Weight::from_parts(0, 19940)) + // Standard Error: 28_932 + .saturating_add(Weight::from_parts(725_243, 0u64).saturating_mul(t.into())) + // Standard Error: 28_932 + .saturating_add(Weight::from_parts(863_110, 0u64).saturating_mul(d.into())) + // Standard Error: 5_649 + .saturating_add(Weight::from_parts(1_456_361, 0u64).saturating_mul(i.into())) + .saturating_add(T::DbWeight::get().reads(7_u64)) + .saturating_add(T::DbWeight::get().writes(9_u64)) + } + // Storage: Membership MembershipById (r:1 w:0) + // Proof: Membership MembershipById (max_values: None, max_size: Some(125), added: 2600, mode: MaxEncodedLen) + // Storage: ProposalEngine ActiveProposalCount (r:1 w:1) + // Proof: ProposalEngine ActiveProposalCount (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + // Storage: Membership StakingAccountIdMemberStatus (r:1 w:0) + // Proof: Membership StakingAccountIdMemberStatus (max_values: None, max_size: Some(57), added: 2532, mode: MaxEncodedLen) + // Storage: Balances Locks (r:1 w:1) + // Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) + // Storage: System Account (r:1 w:1) + // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + // Storage: ProposalDiscussion ThreadCount (r:1 w:1) + // Proof: ProposalDiscussion ThreadCount (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) + // Storage: ProposalEngine ProposalCount (r:1 w:1) + // Proof: ProposalEngine ProposalCount (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + // Storage: ProposalsCodex ThreadIdByProposalId (r:0 w:1) + // Proof: ProposalsCodex ThreadIdByProposalId (max_values: None, max_size: Some(28), added: 2503, mode: MaxEncodedLen) + // Storage: ProposalDiscussion ThreadById (r:0 w:1) + // Proof: ProposalDiscussion ThreadById (max_values: None, max_size: Some(198), added: 2673, mode: MaxEncodedLen) + // Storage: ProposalEngine Proposals (r:0 w:1) + // Proof: ProposalEngine Proposals (max_values: None, max_size: Some(140), added: 2615, mode: MaxEncodedLen) + // Storage: ProposalEngine DispatchableCallCode (r:0 w:1) + // Proof: ProposalEngine DispatchableCallCode (max_values: None, max_size: Some(3145752), added: 3148227, mode: MaxEncodedLen) + /// The range of component `t` is `[1, 20]`. + /// The range of component `d` is `[1, 20]`. + fn create_proposal_freeze_pallet(t: u32, d: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `651` + // Estimated: `19940` + // Minimum execution time: 101_295 nanoseconds. + Weight::from_parts(80_174_773, 0u64) + .saturating_add(Weight::from_parts(0, 19940)) + // Standard Error: 9_470 + .saturating_add(Weight::from_parts(1_084_474, 0u64).saturating_mul(t.into())) + // Standard Error: 9_470 + .saturating_add(Weight::from_parts(1_235_382, 0u64).saturating_mul(d.into())) + .saturating_add(T::DbWeight::get().reads(7_u64)) + .saturating_add(T::DbWeight::get().writes(9_u64)) } } // Default implementation for tests impl WeightInfo for () { fn create_proposal_signal(i: u32, t: u32, d: u32, ) -> Weight { - 0 + Weight::from_parts(0, 0) } fn create_proposal_runtime_upgrade(i: u32, t: u32, d: u32, ) -> Weight { - 0 + Weight::from_parts(0, 0) } - fn create_proposal_funding_request(_i: u32, t: u32, d: u32, ) -> Weight { - 0 + fn create_proposal_funding_request(i: u32, t: u32, d: u32, ) -> Weight { + Weight::from_parts(0, 0) } fn create_proposal_set_max_validator_count(t: u32, d: u32, ) -> Weight { - 0 + Weight::from_parts(0, 0) } fn create_proposal_veto_proposal(t: u32, d: u32, ) -> Weight { - 0 + Weight::from_parts(0, 0) } fn create_proposal_create_working_group_lead_opening(i: u32, t: u32, d: u32, ) -> Weight { - 0 + Weight::from_parts(0, 0) } fn create_proposal_fill_working_group_lead_opening(t: u32, d: u32, ) -> Weight { - 0 + Weight::from_parts(0, 0) } fn create_proposal_update_working_group_budget(t: u32, d: u32, ) -> Weight { - 0 + Weight::from_parts(0, 0) } fn create_proposal_decrease_working_group_lead_stake(t: u32, d: u32, ) -> Weight { - 0 + Weight::from_parts(0, 0) } fn create_proposal_slash_working_group_lead(t: u32, d: u32, ) -> Weight { - 0 + Weight::from_parts(0, 0) } fn create_proposal_set_working_group_lead_reward(t: u32, d: u32, ) -> Weight { - 0 + Weight::from_parts(0, 0) } fn create_proposal_terminate_working_group_lead(t: u32, d: u32, ) -> Weight { - 0 + Weight::from_parts(0, 0) } fn create_proposal_amend_constitution(i: u32, t: u32, d: u32, ) -> Weight { - 0 + Weight::from_parts(0, 0) } fn create_proposal_cancel_working_group_lead_opening(t: u32, d: u32, ) -> Weight { - 0 + Weight::from_parts(0, 0) } fn create_proposal_set_membership_price(t: u32, d: u32, ) -> Weight { - 0 + Weight::from_parts(0, 0) } fn create_proposal_set_council_budget_increment(t: u32, d: u32, ) -> Weight { - 0 + Weight::from_parts(0, 0) } fn create_proposal_set_councilor_reward(t: u32, d: u32, ) -> Weight { - 0 + Weight::from_parts(0, 0) } fn create_proposal_set_initial_invitation_balance(t: u32, d: u32, ) -> Weight { - 0 + Weight::from_parts(0, 0) } fn create_proposal_set_initial_invitation_count(t: u32, d: u32, ) -> Weight { - 0 + Weight::from_parts(0, 0) } fn create_proposal_set_membership_lead_invitation_quota(t: u32, d: u32, ) -> Weight { - 0 + Weight::from_parts(0, 0) } fn create_proposal_set_referral_cut(t: u32, d: u32, ) -> Weight { - 0 + Weight::from_parts(0, 0) } fn create_proposal_update_global_nft_limit(t: u32, d: u32, ) -> Weight { - 0 + Weight::from_parts(0, 0) } fn create_proposal_update_channel_payouts(t: u32, d: u32, i: u32, ) -> Weight { - 0 + Weight::from_parts(0, 0) + } + fn create_proposal_freeze_pallet(t: u32, d: u32, ) -> Weight { + Weight::from_parts(0, 0) } } diff --git a/runtime-modules/proposals/discussion/Cargo.toml b/runtime-modules/proposals/discussion/Cargo.toml index adab6f0bef..7ad76575bf 100644 --- a/runtime-modules/proposals/discussion/Cargo.toml +++ b/runtime-modules/proposals/discussion/Cargo.toml @@ -8,23 +8,23 @@ edition = '2018' serde = { version = "1.0.101", optional = true, features = ["derive"] } codec = { package = 'parity-scale-codec', version = '3.1.2', default-features = false, features = ['derive'] } scale-info = { version = "2.1.1", default-features = false, features = ["derive"] } -sp-std = { package = 'sp-std', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -frame-support = { package = 'frame-support', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -frame-system = { package = 'frame-system', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} +sp-std = { package = 'sp-std', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +frame-support = { package = 'frame-support', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +frame-system = { package = 'frame-system', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} common = { package = 'pallet-common', default-features = false, path = '../../common'} -balances = { package = 'pallet-balances', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -sp-runtime = { package = 'sp-runtime', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} +balances = { package = 'pallet-balances', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +sp-runtime = { package = 'sp-runtime', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} # Benchmarking dependencies -frame-benchmarking = { package = 'frame-benchmarking', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522', optional = true} +frame-benchmarking = { package = 'frame-benchmarking', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9', optional = true} membership = { package = 'pallet-membership', default-features = false, path = '../../membership', optional = true} council = { package = 'pallet-council', default-features = false, path = '../../council', optional = true} referendum = { package = 'pallet-referendum', default-features = false, path = '../../referendum', optional = true} [dev-dependencies] -sp-io = { package = 'sp-io', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -sp-core = { package = 'sp-core', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -pallet-timestamp = { package = 'pallet-timestamp', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} +sp-io = { package = 'sp-io', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +sp-core = { package = 'sp-core', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +pallet-timestamp = { package = 'pallet-timestamp', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} membership = { package = 'pallet-membership', default-features = false, path = '../../membership'} staking-handler = { package = 'pallet-staking-handler', default-features = false, path = '../../staking-handler'} council = { package = 'pallet-council', default-features = false, path = '../../council'} @@ -33,10 +33,10 @@ referendum = { package = 'pallet-referendum', default-features = false, path = ' [features] default = ['std'] runtime-benchmarks = [ - 'frame-benchmarking', - 'membership', - 'referendum', - 'council', + 'frame-benchmarking/runtime-benchmarks', + 'membership/runtime-benchmarks', + 'referendum/runtime-benchmarks', + 'council/runtime-benchmarks', 'common/runtime-benchmarks', ] std = [ @@ -52,5 +52,7 @@ std = [ 'council/std', 'membership/std', 'scale-info/std', - 'sp-runtime/std' + 'sp-runtime/std', + 'frame-benchmarking?/std', ] +try-runtime = [ "frame-support/try-runtime"] diff --git a/runtime-modules/proposals/discussion/src/benchmarking.rs b/runtime-modules/proposals/discussion/src/benchmarking.rs index 58de22e4c1..cc98d75a57 100644 --- a/runtime-modules/proposals/discussion/src/benchmarking.rs +++ b/runtime-modules/proposals/discussion/src/benchmarking.rs @@ -4,7 +4,7 @@ use super::*; use crate::Module as ProposalsDiscussion; use balances::Pallet as Balances; use council::Module as Council; -use frame_benchmarking::{account, benchmarks}; +use frame_benchmarking::v1::{account, benchmarks}; use frame_support::sp_runtime::traits::Bounded; use frame_support::traits::{Currency, OnFinalize, OnInitialize}; use frame_system::EventRecord; @@ -65,9 +65,9 @@ fn run_to_block(generic_event: ::Event) { +fn assert_last_event(generic_event: ::RuntimeEvent) { let events = System::::events(); - let system_event: ::Event = generic_event.into(); + let system_event: ::RuntimeEvent = generic_event.into(); // compare to the last event record let EventRecord { event, .. } = &events[events.len() - 1]; assert_eq!(event, &system_event); diff --git a/runtime-modules/proposals/discussion/src/lib.rs b/runtime-modules/proposals/discussion/src/lib.rs index a72f8bd765..4657668312 100644 --- a/runtime-modules/proposals/discussion/src/lib.rs +++ b/runtime-modules/proposals/discussion/src/lib.rs @@ -30,7 +30,7 @@ //! pub trait Config: discussions::Config + common::membership::MembershipTypes {} //! //! decl_module! { -//! pub struct Module for enum Call where origin: T::Origin { +//! pub struct Module for enum Call where origin: T::RuntimeOrigin { //! #[weight = 10_000_000] //! pub fn create_discussion(origin, title: Vec, author_id : T::MemberId) { //! ensure_root(origin)?; @@ -85,7 +85,7 @@ use sp_runtime::traits::{AccountIdConversion, Saturating, Zero}; use sp_std::clone::Clone; use sp_std::collections::btree_set::BTreeSet; use sp_std::convert::TryInto; -use sp_std::vec::Vec; +use sp_std::{vec, vec::Vec}; use common::bloat_bond::{RepayableBloatBond, RepayableBloatBondOf}; use common::costs::{has_sufficient_balance_for_fees, pay_fee}; @@ -138,17 +138,21 @@ pub trait Config: frame_system::Config + balances::Config + common::membership::MembershipTypes { /// Discussion event type. - type Event: From> + Into<::Event>; + type RuntimeEvent: From> + Into<::RuntimeEvent>; /// Validates post author id and origin combination - type AuthorOriginValidator: MemberOriginValidator, Self::AccountId>; + type AuthorOriginValidator: MemberOriginValidator< + Self::RuntimeOrigin, + MemberId, + Self::AccountId, + >; /// For checking member existance type MembershipInfoProvider: MembershipInfoProvider; /// Defines whether the member is an active councilor. type CouncilOriginValidator: CouncilOriginValidator< - Self::Origin, + Self::RuntimeOrigin, MemberId, Self::AccountId, >; @@ -241,7 +245,7 @@ decl_storage! { generate_storage_info decl_module! { /// 'Proposal discussion' substrate module - pub struct Module for enum Call where origin: T::Origin { + pub struct Module for enum Call where origin: T::RuntimeOrigin { /// Predefined errors type Error = Error; @@ -390,7 +394,7 @@ decl_module! { Error::::PostDoesntExist ); - let post_author_id = >::get(&thread_id, &post_id).author_id; + let post_author_id = >::get(thread_id, post_id).author_id; T::AuthorOriginValidator::ensure_member_controller_account_origin( origin, @@ -436,7 +440,7 @@ decl_module! { let thread_mode = Self::ensure_thread_mode_ok(&mode)?; - let thread = Self::thread_by_id(&thread_id); + let thread = Self::thread_by_id(thread_id); let is_councilor = T::CouncilOriginValidator::ensure_member_consulate(origin, member_id) @@ -541,7 +545,7 @@ impl Module { } fn ensure_thread_mode( - origin: T::Origin, + origin: T::RuntimeOrigin, thread_author_id: MemberId, thread_id: T::ThreadId, ) -> DispatchResult { @@ -571,3 +575,10 @@ impl Module { T::ModuleId::get().into_sub_account_truncating("TREASURY") } } + +impl frame_support::traits::Hooks for Pallet { + #[cfg(feature = "try-runtime")] + fn try_state(_: T::BlockNumber) -> Result<(), &'static str> { + Ok(()) + } +} diff --git a/runtime-modules/proposals/discussion/src/tests/mock.rs b/runtime-modules/proposals/discussion/src/tests/mock.rs index 4484b965c8..c254d5f01d 100644 --- a/runtime-modules/proposals/discussion/src/tests/mock.rs +++ b/runtime-modules/proposals/discussion/src/tests/mock.rs @@ -8,7 +8,7 @@ use common::locks::{ use frame_support::traits::{LockIdentifier, OnFinalize, OnInitialize, WithdrawReasons}; use frame_support::{ parameter_types, - traits::{ConstU16, ConstU32, ConstU64, EnsureOneOf}, + traits::{ConstU16, ConstU32, ConstU64, EitherOfDiverse}, PalletId, }; use frame_system::{EnsureRoot, EnsureSigned}; @@ -77,8 +77,8 @@ impl frame_system::Config for Test { type BlockWeights = (); type BlockLength = (); type DbWeight = (); - type Origin = Origin; - type Call = Call; + type RuntimeOrigin = RuntimeOrigin; + type RuntimeCall = RuntimeCall; type Index = u64; type BlockNumber = u64; type Hash = H256; @@ -86,7 +86,7 @@ impl frame_system::Config for Test { type AccountId = u128; type Lookup = IdentityLookup; type Header = Header; - type Event = Event; + type RuntimeEvent = RuntimeEvent; type BlockHashCount = ConstU64<250>; type Version = (); type PalletInfo = PalletInfo; @@ -109,7 +109,7 @@ impl pallet_timestamp::Config for Test { impl balances::Config for Test { type Balance = u64; type DustRemoval = (); - type Event = Event; + type RuntimeEvent = RuntimeEvent; type ExistentialDeposit = ExistentialDeposit; type AccountStore = System; type MaxLocks = (); @@ -128,7 +128,7 @@ parameter_types! { } impl membership::Config for Test { - type Event = Event; + type RuntimeEvent = RuntimeEvent; type DefaultMembershipPrice = DefaultMembershipPrice; type WorkingGroup = Wg; type WeightInfo = (); @@ -167,13 +167,15 @@ impl common::working_group::WorkingGroupBudgetHandler for Wg { impl common::working_group::WorkingGroupAuthenticator for Wg { fn ensure_worker_origin( - _origin: ::Origin, + _origin: ::RuntimeOrigin, _worker_id: &::ActorId, ) -> DispatchResult { unimplemented!(); } - fn ensure_leader_origin(_origin: ::Origin) -> DispatchResult { + fn ensure_leader_origin( + _origin: ::RuntimeOrigin, + ) -> DispatchResult { unimplemented!() } @@ -210,7 +212,7 @@ impl common::working_group::WorkingGroupAuthenticator for Wg { } impl crate::Config for Test { - type Event = Event; + type RuntimeEvent = RuntimeEvent; type AuthorOriginValidator = (); type MembershipInfoProvider = (); type CouncilOriginValidator = CouncilMock; @@ -223,9 +225,9 @@ impl crate::Config for Test { type ModuleId = ProposalsDiscussionModuleId; } -impl MemberOriginValidator for () { +impl MemberOriginValidator for () { fn ensure_member_controller_account_origin( - origin: Origin, + origin: RuntimeOrigin, actor_id: u64, ) -> Result { if frame_system::ensure_none(origin.clone()).is_ok() { @@ -277,7 +279,7 @@ parameter_types! { type ReferendumInstance = referendum::Instance1; impl council::Config for Test { - type Event = Event; + type RuntimeEvent = RuntimeEvent; type Referendum = referendum::Module; @@ -303,8 +305,8 @@ impl council::Config for Test { } pub struct CouncilMock; -impl CouncilOriginValidator for CouncilMock { - fn ensure_member_consulate(origin: Origin, actor_id: u64) -> DispatchResult { +impl CouncilOriginValidator for CouncilMock { + fn ensure_member_consulate(origin: RuntimeOrigin, actor_id: u64) -> DispatchResult { if actor_id == 2 && frame_system::ensure_signed(origin).unwrap_or_default() == 2 { return Ok(()); } @@ -322,12 +324,13 @@ parameter_types! { } impl referendum::Config for Test { - type Event = Event; + type RuntimeEvent = RuntimeEvent; type MaxSaltLength = MaxSaltLength; type StakingHandler = staking_handler::StakingManager; - type ManagerOrigin = EnsureOneOf, EnsureRoot>; + type ManagerOrigin = + EitherOfDiverse, EnsureRoot>; type VotePower = u64; @@ -414,7 +417,7 @@ pub fn set_invitation_lock( amount: BalanceOf, ) { ::InvitedMemberStakingHandler::lock_with_reasons( - &who, + who, amount, WithdrawReasons::except(WithdrawReasons::TRANSACTION_PAYMENT), ); @@ -424,5 +427,5 @@ pub fn set_staking_candidate_lock( who: &::AccountId, amount: BalanceOf, ) { - ::StakingCandidateStakingHandler::lock(&who, amount); + ::StakingCandidateStakingHandler::lock(who, amount); } diff --git a/runtime-modules/proposals/discussion/src/tests/mod.rs b/runtime-modules/proposals/discussion/src/tests/mod.rs index 2edce5c3cf..5f8c74ae6a 100644 --- a/runtime-modules/proposals/discussion/src/tests/mod.rs +++ b/runtime-modules/proposals/discussion/src/tests/mod.rs @@ -18,7 +18,7 @@ impl EventFixture { .iter() .map(|ev| EventRecord { phase: Phase::Initialization, - event: mock::Event::Discussions(ev.clone()), + event: mock::RuntimeEvent::Discussions(ev.clone()), topics: vec![], }) .collect::>>(); @@ -26,7 +26,7 @@ impl EventFixture { let actual_events: Vec<_> = System::events() .into_iter() .filter(|e| match e.event { - mock::Event::Discussions(..) => true, + mock::RuntimeEvent::Discussions(..) => true, _ => false, }) .collect(); diff --git a/runtime-modules/proposals/discussion/src/weights.rs b/runtime-modules/proposals/discussion/src/weights.rs index 066786bf8a..42df3432c2 100644 --- a/runtime-modules/proposals/discussion/src/weights.rs +++ b/runtime-modules/proposals/discussion/src/weights.rs @@ -18,22 +18,21 @@ //! Autogenerated weights for proposals_discussion //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-10-20, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("dev"), DB CACHE: 1024 +//! DATE: 2023-11-06, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("prod-test"), DB CACHE: 1024 // Executed Command: -// ./../target/release/joystream-node +// ./scripts/../target/release/joystream-node // benchmark // pallet -// --base-path=/mnt/disks/local-ssd/ // --pallet=proposals_discussion // --extrinsic=* -// --chain=dev +// --chain=prod-test // --steps=50 // --repeat=20 // --execution=wasm -// --template=./../devops/joystream-pallet-weight-template.hbs -// --output=./../runtime-modules/proposals/discussion/src/weights.rs +// --template=./scripts/../devops/joystream-pallet-weight-template.hbs +// --output=./scripts/../runtime-modules/proposals/discussion/src/weights.rs #![cfg_attr(rustfmt, rustfmt_skip)] #![allow(unused_parens)] @@ -55,62 +54,102 @@ pub trait WeightInfo { pub struct SubstrateWeight(PhantomData); impl WeightInfo for SubstrateWeight { // Storage: Membership MembershipById (r:1 w:0) + // Proof: Membership MembershipById (max_values: None, max_size: Some(125), added: 2600, mode: MaxEncodedLen) // Storage: ProposalDiscussion ThreadById (r:1 w:0) + // Proof: ProposalDiscussion ThreadById (max_values: None, max_size: Some(198), added: 2673, mode: MaxEncodedLen) // Storage: Council CouncilMembers (r:1 w:0) + // Proof: Council CouncilMembers (max_values: Some(1), max_size: Some(325), added: 820, mode: MaxEncodedLen) // Storage: ProposalDiscussion PostCount (r:1 w:1) + // Proof: ProposalDiscussion PostCount (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) // Storage: System Account (r:2 w:2) + // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) // Storage: ProposalDiscussion PostThreadIdByPostId (r:0 w:1) + // Proof: ProposalDiscussion PostThreadIdByPostId (max_values: None, max_size: Some(109), added: 2584, mode: MaxEncodedLen) + /// The range of component `j` is `[0, 100]`. fn add_post(j: u32, ) -> Weight { - (197_279_000 as Weight) - // Standard Error: 3_000 - .saturating_add((765_000 as Weight).saturating_mul(j as Weight)) - .saturating_add(T::DbWeight::get().reads(6 as Weight)) - .saturating_add(T::DbWeight::get().writes(4 as Weight)) + // Proof Size summary in bytes: + // Measured: `1927` + // Estimated: `16752` + // Minimum execution time: 93_268 nanoseconds. + Weight::from_parts(94_002_019, 0u64) + .saturating_add(Weight::from_parts(0, 16752)) + // Standard Error: 2_975 + .saturating_add(Weight::from_parts(1_114_271, 0u64).saturating_mul(j.into())) + .saturating_add(T::DbWeight::get().reads(6_u64)) + .saturating_add(T::DbWeight::get().writes(4_u64)) } // Storage: ProposalDiscussion ThreadById (r:1 w:0) + // Proof: ProposalDiscussion ThreadById (max_values: None, max_size: Some(198), added: 2673, mode: MaxEncodedLen) // Storage: ProposalDiscussion PostThreadIdByPostId (r:1 w:1) + // Proof: ProposalDiscussion PostThreadIdByPostId (max_values: None, max_size: Some(109), added: 2584, mode: MaxEncodedLen) // Storage: Membership MembershipById (r:1 w:0) + // Proof: Membership MembershipById (max_values: None, max_size: Some(125), added: 2600, mode: MaxEncodedLen) + /// The range of component `j` is `[0, 100]`. fn update_post(j: u32, ) -> Weight { - (68_938_000 as Weight) - // Standard Error: 2_000 - .saturating_add((735_000 as Weight).saturating_mul(j as Weight)) - .saturating_add(T::DbWeight::get().reads(3 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + // Proof Size summary in bytes: + // Measured: `561` + // Estimated: `10827` + // Minimum execution time: 32_380 nanoseconds. + Weight::from_parts(33_496_149, 0u64) + .saturating_add(Weight::from_parts(0, 10827)) + // Standard Error: 1_725 + .saturating_add(Weight::from_parts(1_050_563, 0u64).saturating_mul(j.into())) + .saturating_add(T::DbWeight::get().reads(3_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) } // Storage: Membership MembershipById (r:1 w:0) + // Proof: Membership MembershipById (max_values: None, max_size: Some(125), added: 2600, mode: MaxEncodedLen) // Storage: ProposalDiscussion PostThreadIdByPostId (r:1 w:1) + // Proof: ProposalDiscussion PostThreadIdByPostId (max_values: None, max_size: Some(109), added: 2584, mode: MaxEncodedLen) // Storage: ProposalDiscussion ThreadById (r:1 w:0) + // Proof: ProposalDiscussion ThreadById (max_values: None, max_size: Some(198), added: 2673, mode: MaxEncodedLen) // Storage: System Account (r:2 w:2) + // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) fn delete_post() -> Weight { - (122_960_000 as Weight) - .saturating_add(T::DbWeight::get().reads(5 as Weight)) - .saturating_add(T::DbWeight::get().writes(3 as Weight)) + // Proof Size summary in bytes: + // Measured: `803` + // Estimated: `17023` + // Minimum execution time: 55_088 nanoseconds. + Weight::from_parts(55_851_000, 0u64) + .saturating_add(Weight::from_parts(0, 17023)) + .saturating_add(T::DbWeight::get().reads(5_u64)) + .saturating_add(T::DbWeight::get().writes(3_u64)) } - // Storage: Membership MembershipById (r:1 w:0) + // Storage: Membership MembershipById (r:20 w:0) + // Proof: Membership MembershipById (max_values: None, max_size: Some(125), added: 2600, mode: MaxEncodedLen) // Storage: ProposalDiscussion ThreadById (r:1 w:1) + // Proof: ProposalDiscussion ThreadById (max_values: None, max_size: Some(198), added: 2673, mode: MaxEncodedLen) // Storage: Council CouncilMembers (r:1 w:0) + // Proof: Council CouncilMembers (max_values: Some(1), max_size: Some(325), added: 820, mode: MaxEncodedLen) + /// The range of component `i` is `[1, 20]`. fn change_thread_mode(i: u32, ) -> Weight { - (72_501_000 as Weight) - // Standard Error: 34_000 - .saturating_add((10_896_000 as Weight).saturating_mul(i as Weight)) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) - .saturating_add(T::DbWeight::get().reads((1 as Weight).saturating_mul(i as Weight))) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + // Proof Size summary in bytes: + // Measured: `1117 + i * (133 ±0)` + // Estimated: `6463 + i * (2600 ±0)` + // Minimum execution time: 41_979 nanoseconds. + Weight::from_parts(39_857_468, 0u64) + .saturating_add(Weight::from_parts(0, 6463)) + // Standard Error: 12_470 + .saturating_add(Weight::from_parts(3_974_269, 0u64).saturating_mul(i.into())) + .saturating_add(T::DbWeight::get().reads(2_u64)) + .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(i.into()))) + .saturating_add(T::DbWeight::get().writes(1_u64)) + .saturating_add(Weight::from_parts(0, 2600).saturating_mul(i.into())) } } // Default implementation for tests impl WeightInfo for () { fn add_post(j: u32, ) -> Weight { - 0 + Weight::from_parts(0, 0) } fn update_post(j: u32, ) -> Weight { - 0 + Weight::from_parts(0, 0) } fn delete_post() -> Weight { - 0 + Weight::from_parts(0, 0) } fn change_thread_mode(i: u32, ) -> Weight { - 0 + Weight::from_parts(0, 0) } } diff --git a/runtime-modules/proposals/engine/Cargo.toml b/runtime-modules/proposals/engine/Cargo.toml index db3c98bd5d..d3b0de639f 100644 --- a/runtime-modules/proposals/engine/Cargo.toml +++ b/runtime-modules/proposals/engine/Cargo.toml @@ -8,25 +8,25 @@ edition = '2018' serde = { version = "1.0.101", optional = true, features = ["derive"] } codec = { package = 'parity-scale-codec', version = '3.1.2', default-features = false, features = ['derive'] } scale-info = { version = "2.1.1", default-features = false, features = ["derive"] } -sp-std = { package = 'sp-std', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -frame-support = { package = 'frame-support', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -frame-system = { package = 'frame-system', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -pallet-timestamp = { package = 'pallet-timestamp', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -sp-arithmetic = { package = 'sp-arithmetic', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -sp-runtime = { package = 'sp-runtime', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -balances = { package = 'pallet-balances', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} +sp-std = { package = 'sp-std', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +frame-support = { package = 'frame-support', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +frame-system = { package = 'frame-system', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +pallet-timestamp = { package = 'pallet-timestamp', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +sp-arithmetic = { package = 'sp-arithmetic', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +sp-runtime = { package = 'sp-runtime', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +balances = { package = 'pallet-balances', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} common = { package = 'pallet-common', default-features = false, path = '../../common'} staking-handler = { package = 'pallet-staking-handler', default-features = false, path = '../../staking-handler'} # Benchmark dependencies. -frame-benchmarking = { package = 'frame-benchmarking', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522', optional = true} +frame-benchmarking = { package = 'frame-benchmarking', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9', optional = true} membership = { package = 'pallet-membership', default-features = false, path = '../../membership', optional = true} council = { package = 'pallet-council', default-features = false, path = '../../council', optional = true} referendum = { package = 'pallet-referendum', default-features = false, path = '../../referendum', optional = true} [dev-dependencies] -sp-io = { package = 'sp-io', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -sp-core = { package = 'sp-core', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} +sp-io = { package = 'sp-io', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +sp-core = { package = 'sp-core', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} council = { package = 'pallet-council', default-features = false, path = '../../council'} membership = { package = 'pallet-membership', default-features = false, path = '../../membership'} referendum = { package = 'pallet-referendum', default-features = false, path = '../../referendum'} @@ -34,10 +34,10 @@ referendum = { package = 'pallet-referendum', default-features = false, path = ' [features] default = ['std'] runtime-benchmarks = [ - 'frame-benchmarking', - 'membership', - 'council', - 'referendum', + 'frame-benchmarking/runtime-benchmarks', + 'membership/runtime-benchmarks', + 'council/runtime-benchmarks', + 'referendum/runtime-benchmarks', 'common/runtime-benchmarks', ] std = [ @@ -56,4 +56,6 @@ std = [ 'referendum/std', 'membership/std', 'scale-info/std', + 'frame-benchmarking?/std' ] +try-runtime = [ "frame-support/try-runtime"] diff --git a/runtime-modules/proposals/engine/src/benchmarking.rs b/runtime-modules/proposals/engine/src/benchmarking.rs index c7a6674bdb..30b8e0723e 100644 --- a/runtime-modules/proposals/engine/src/benchmarking.rs +++ b/runtime-modules/proposals/engine/src/benchmarking.rs @@ -5,7 +5,7 @@ use crate::Module as ProposalsEngine; use balances::Pallet as Balances; use core::convert::TryInto; use council::Module as Council; -use frame_benchmarking::{account, benchmarks}; +use frame_benchmarking::v1::{account, benchmarks}; use frame_support::traits::{Currency, OnFinalize, OnInitialize}; use frame_system::EventRecord; use frame_system::Pallet as System; @@ -43,9 +43,9 @@ fn handle_from_id(id: u32) -> Vec { handle } -fn assert_last_event(generic_event: ::Event) { +fn assert_last_event(generic_event: ::RuntimeEvent) { let events = System::::events(); - let system_event: ::Event = generic_event.into(); + let system_event: ::RuntimeEvent = generic_event.into(); assert!( !events.is_empty(), "If you are checking for last event there must be at least 1 event" @@ -54,9 +54,9 @@ fn assert_last_event(generic_event: ::Event) { assert_eq!(event, &system_event); } -fn assert_in_events(generic_event: ::Event) { +fn assert_in_events(generic_event: ::RuntimeEvent) { let events = System::::events(); - let system_event: ::Event = generic_event.into(); + let system_event: ::RuntimeEvent = generic_event.into(); assert!( !events.is_empty(), diff --git a/runtime-modules/proposals/engine/src/lib.rs b/runtime-modules/proposals/engine/src/lib.rs index f330a21296..fe35c6d086 100644 --- a/runtime-modules/proposals/engine/src/lib.rs +++ b/runtime-modules/proposals/engine/src/lib.rs @@ -78,7 +78,7 @@ //! pub trait Config: engine::Config + common::membership::MembershipTypes {} //! //! decl_module! { -//! pub struct Module for enum Call where origin: T::Origin { +//! pub struct Module for enum Call where origin: T::RuntimeOrigin { //! #[weight = 10_000_000] //! fn executable_proposal(origin) { //! print("executed!"); @@ -161,17 +161,19 @@ pub mod weights; pub use weights::WeightInfo; use codec::{Decode, MaxEncodedLen}; -use frame_support::dispatch::{DispatchError, DispatchResult, UnfilteredDispatchable}; +use frame_support::dispatch::{ + DispatchError, DispatchResult, GetDispatchInfo, UnfilteredDispatchable, +}; use frame_support::storage::{bounded_vec::BoundedVec, IterableStorageMap}; use frame_support::traits::{Get, LockIdentifier}; -use frame_support::weights::{GetDispatchInfo, Weight}; +use frame_support::weights::Weight; use frame_support::{ decl_error, decl_event, decl_module, decl_storage, ensure, Parameter, StorageDoubleMap, }; use frame_system::{ensure_root, RawOrigin}; -use sp_arithmetic::traits::{SaturatedConversion, Saturating, Zero}; +use sp_arithmetic::traits::{SaturatedConversion, Zero}; use sp_std::convert::TryInto; -use sp_std::vec::Vec; +use sp_std::{vec, vec::Vec}; use common::council::CouncilOriginValidator; use common::membership::MemberOriginValidator; @@ -189,18 +191,18 @@ pub trait Config: + balances::Config { /// Engine event type. - type Event: From> + Into<::Event>; + type RuntimeEvent: From> + Into<::RuntimeEvent>; /// Validates proposer id and origin combination type ProposerOriginValidator: MemberOriginValidator< - Self::Origin, + Self::RuntimeOrigin, MemberId, Self::AccountId, >; /// Validates voter id and origin combination type CouncilOriginValidator: CouncilOriginValidator< - Self::Origin, + Self::RuntimeOrigin, MemberId, Self::AccountId, >; @@ -239,7 +241,7 @@ pub trait Config: /// Proposals executable code. Can be instantiated by external module Call enum members. type DispatchableCallCode: Parameter - + UnfilteredDispatchable + + UnfilteredDispatchable + GetDispatchInfo + Default; @@ -414,7 +416,7 @@ decl_storage! { generate_storage_info decl_module! { /// 'Proposal engine' substrate module - pub struct Module for enum Call where origin: T::Origin { + pub struct Module for enum Call where origin: T::RuntimeOrigin { /// Predefined errors type Error = Error; @@ -817,7 +819,8 @@ impl Module { None }) .for_each(|(proposal_id, proposal)| { - >::remove_prefix(&proposal_id, None); + #[allow(deprecated)] + >::remove_prefix(proposal_id, None); >::insert(proposal_id, proposal.clone()); // fire the proposal status update event @@ -880,14 +883,14 @@ impl Module { let proposal_code_result = T::DispatchableCallCode::decode(&mut &proposal_code[..]); - let mut execution_code_weight = 0; + let mut execution_code_weight = Weight::from_all(0); let execution_status = match proposal_code_result { Ok(proposal_code) => { execution_code_weight = proposal_code.get_dispatch_info().weight; if let Err(dispatch_error) = - proposal_code.dispatch_bypass_filter(T::Origin::from(RawOrigin::Root)) + proposal_code.dispatch_bypass_filter(T::RuntimeOrigin::from(RawOrigin::Root)) { ExecutionStatus::failed_execution(Self::parse_dispatch_error( dispatch_error.error, @@ -926,7 +929,7 @@ impl Module { proposal_decision.clone(), )); - let mut executed_weight = 0; + let mut executed_weight = Weight::from_all(0); // deal with stakes if necessary if proposal_decision @@ -1027,7 +1030,8 @@ impl Module { fn remove_proposal_data(proposal_id: &T::ProposalId) -> DispatchResult { >::remove(proposal_id); >::remove(proposal_id); - >::remove_prefix(&proposal_id, None); + #[allow(deprecated)] + >::remove_prefix(proposal_id, None); let _ = Self::decrease_active_proposal_counter(); T::ProposalObserver::proposal_removed(proposal_id); @@ -1042,7 +1046,7 @@ impl Module { let proposals = >::iter().collect::>(); let now = Self::current_block(); - let mut executed_weight = 0; + let mut executed_weight = Weight::from_all(0); for (proposal_id, proposal) in proposals { match proposal.status { @@ -1075,3 +1079,10 @@ impl Module { executed_weight } } + +impl frame_support::traits::Hooks for Pallet { + #[cfg(feature = "try-runtime")] + fn try_state(_: T::BlockNumber) -> Result<(), &'static str> { + Ok(()) + } +} diff --git a/runtime-modules/proposals/engine/src/tests/mock/mod.rs b/runtime-modules/proposals/engine/src/tests/mock/mod.rs index 87349332ed..0fe32506da 100644 --- a/runtime-modules/proposals/engine/src/tests/mock/mod.rs +++ b/runtime-modules/proposals/engine/src/tests/mock/mod.rs @@ -10,7 +10,7 @@ use frame_support::dispatch::DispatchError; use frame_support::traits::LockIdentifier; use frame_support::{ parameter_types, - traits::{ConstU16, ConstU32, ConstU64, EnsureOneOf}, + traits::{ConstU16, ConstU32, ConstU64, EitherOfDiverse}, }; pub use frame_system; use frame_system::{EnsureRoot, EnsureSigned}; @@ -58,12 +58,13 @@ parameter_types! { } impl referendum::Config for Test { - type Event = Event; + type RuntimeEvent = RuntimeEvent; type MaxSaltLength = MaxSaltLength; type StakingHandler = staking_handler::StakingManager; - type ManagerOrigin = EnsureOneOf, EnsureRoot>; + type ManagerOrigin = + EitherOfDiverse, EnsureRoot>; type VotePower = u64; @@ -137,7 +138,7 @@ impl common::membership::MembershipTypes for Test { } impl membership::Config for Test { - type Event = Event; + type RuntimeEvent = RuntimeEvent; type DefaultMembershipPrice = DefaultMembershipPrice; type WorkingGroup = Wg; type WeightInfo = (); @@ -167,13 +168,15 @@ impl common::working_group::WorkingGroupBudgetHandler for Wg { impl common::working_group::WorkingGroupAuthenticator for Wg { fn ensure_worker_origin( - _origin: ::Origin, + _origin: ::RuntimeOrigin, _worker_id: &::ActorId, ) -> DispatchResult { unimplemented!(); } - fn ensure_leader_origin(_origin: ::Origin) -> DispatchResult { + fn ensure_leader_origin( + _origin: ::RuntimeOrigin, + ) -> DispatchResult { unimplemented!() } @@ -214,7 +217,7 @@ parameter_types! { } impl crate::Config for Test { - type Event = Event; + type RuntimeEvent = RuntimeEvent; type ProposerOriginValidator = (); type CouncilOriginValidator = (); type TotalVotersCounter = (); @@ -250,9 +253,9 @@ impl Default for proposals::Call { } } -impl common::membership::MemberOriginValidator for () { +impl common::membership::MemberOriginValidator for () { fn ensure_member_controller_account_origin( - origin: Origin, + origin: RuntimeOrigin, _account_id: u64, ) -> Result { let signed_account_id = frame_system::ensure_signed(origin)?; @@ -265,8 +268,8 @@ impl common::membership::MemberOriginValidator for () { } } -impl common::council::CouncilOriginValidator for () { - fn ensure_member_consulate(origin: Origin, _: u64) -> DispatchResult { +impl common::council::CouncilOriginValidator for () { + fn ensure_member_consulate(origin: RuntimeOrigin, _: u64) -> DispatchResult { frame_system::ensure_signed(origin)?; Ok(()) @@ -291,8 +294,8 @@ impl frame_system::Config for Test { type BlockWeights = (); type BlockLength = (); type DbWeight = (); - type Origin = Origin; - type Call = Call; + type RuntimeOrigin = RuntimeOrigin; + type RuntimeCall = RuntimeCall; type Index = u64; type BlockNumber = u64; type Hash = H256; @@ -300,7 +303,7 @@ impl frame_system::Config for Test { type AccountId = u64; type Lookup = IdentityLookup; type Header = Header; - type Event = Event; + type RuntimeEvent = RuntimeEvent; type BlockHashCount = ConstU64<250>; type Version = (); type PalletInfo = PalletInfo; @@ -323,7 +326,7 @@ impl pallet_timestamp::Config for Test { impl balances::Config for Test { type Balance = u64; type DustRemoval = (); - type Event = Event; + type RuntimeEvent = RuntimeEvent; type ExistentialDeposit = ExistentialDeposit; type AccountStore = System; type MaxLocks = (); @@ -349,7 +352,7 @@ parameter_types! { type ReferendumInstance = referendum::Instance1; impl council::Config for Test { - type Event = Event; + type RuntimeEvent = RuntimeEvent; type Referendum = referendum::Module; diff --git a/runtime-modules/proposals/engine/src/tests/mock/proposals.rs b/runtime-modules/proposals/engine/src/tests/mock/proposals.rs index d0c60781df..f2b6cc3738 100644 --- a/runtime-modules/proposals/engine/src/tests/mock/proposals.rs +++ b/runtime-modules/proposals/engine/src/tests/mock/proposals.rs @@ -5,7 +5,7 @@ use sp_std::vec::Vec; pub trait Config: frame_system::Config {} decl_module! { - pub struct Module for enum Call where origin: T::Origin { + pub struct Module for enum Call where origin: T::RuntimeOrigin { /// Working extrinsic test #[weight = 10_000_000] pub fn dummy_proposal(_origin, _title: Vec, _description: Vec) {} diff --git a/runtime-modules/proposals/engine/src/tests/mod.rs b/runtime-modules/proposals/engine/src/tests/mod.rs index 441beb2a77..994c70aa99 100644 --- a/runtime-modules/proposals/engine/src/tests/mod.rs +++ b/runtime-modules/proposals/engine/src/tests/mod.rs @@ -2,7 +2,7 @@ pub(crate) mod mock; use crate::types::ProposalStatusResolution; use crate::*; -use mock::{Event as TestEvent, *}; +use mock::{RuntimeEvent as TestEvent, *}; use codec::Encode; use frame_support::dispatch::DispatchResult; @@ -1633,7 +1633,7 @@ fn active_proposal_rejection_succeeds() { vote_generator.vote_and_assert_ok(VoteKind::Abstain); assert_eq!( - >::get(&proposal_id, &2), + >::get(proposal_id, 2), VoteKind::Abstain ); @@ -2182,7 +2182,7 @@ fn proposal_early_rejection_succeeds() { vote_generator.vote_and_assert_ok(VoteKind::Reject); assert_eq!( - >::get(&proposal_id, &2), + >::get(proposal_id, 2), VoteKind::Reject ); diff --git a/runtime-modules/proposals/engine/src/weights.rs b/runtime-modules/proposals/engine/src/weights.rs index 76f33cde3c..81dcff9d7b 100644 --- a/runtime-modules/proposals/engine/src/weights.rs +++ b/runtime-modules/proposals/engine/src/weights.rs @@ -18,22 +18,21 @@ //! Autogenerated weights for proposals_engine //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-10-20, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("dev"), DB CACHE: 1024 +//! DATE: 2023-11-06, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("prod-test"), DB CACHE: 1024 // Executed Command: -// ./../target/release/joystream-node +// ./scripts/../target/release/joystream-node // benchmark // pallet -// --base-path=/mnt/disks/local-ssd/ // --pallet=proposals_engine // --extrinsic=* -// --chain=dev +// --chain=prod-test // --steps=50 // --repeat=20 // --execution=wasm -// --template=./../devops/joystream-pallet-weight-template.hbs -// --output=./../runtime-modules/proposals/engine/src/weights.rs +// --template=./scripts/../devops/joystream-pallet-weight-template.hbs +// --output=./scripts/../runtime-modules/proposals/engine/src/weights.rs #![cfg_attr(rustfmt, rustfmt_skip)] #![allow(unused_parens)] @@ -61,175 +60,302 @@ pub trait WeightInfo { pub struct SubstrateWeight(PhantomData); impl WeightInfo for SubstrateWeight { // Storage: Membership MembershipById (r:1 w:0) + // Proof: Membership MembershipById (max_values: None, max_size: Some(125), added: 2600, mode: MaxEncodedLen) // Storage: Council CouncilMembers (r:1 w:0) + // Proof: Council CouncilMembers (max_values: Some(1), max_size: Some(325), added: 820, mode: MaxEncodedLen) // Storage: ProposalEngine Proposals (r:1 w:1) + // Proof: ProposalEngine Proposals (max_values: None, max_size: Some(140), added: 2615, mode: MaxEncodedLen) // Storage: ProposalEngine VoteExistsByProposalByVoter (r:1 w:1) + // Proof: ProposalEngine VoteExistsByProposalByVoter (max_values: None, max_size: Some(45), added: 2520, mode: MaxEncodedLen) + /// The range of component `i` is `[0, 100]`. fn vote(i: u32, ) -> Weight { - (47_888_000 as Weight) - // Standard Error: 1_000 - .saturating_add((675_000 as Weight).saturating_mul(i as Weight)) - .saturating_add(T::DbWeight::get().reads(4 as Weight)) - .saturating_add(T::DbWeight::get().writes(2 as Weight)) + // Proof Size summary in bytes: + // Measured: `1336` + // Estimated: `12515` + // Minimum execution time: 43_096 nanoseconds. + Weight::from_parts(44_827_331, 0u64) + .saturating_add(Weight::from_parts(0, 12515)) + // Standard Error: 2_249 + .saturating_add(Weight::from_parts(810_848, 0u64).saturating_mul(i.into())) + .saturating_add(T::DbWeight::get().reads(4_u64)) + .saturating_add(T::DbWeight::get().writes(2_u64)) } // Storage: Membership MembershipById (r:1 w:0) + // Proof: Membership MembershipById (max_values: None, max_size: Some(125), added: 2600, mode: MaxEncodedLen) // Storage: ProposalEngine Proposals (r:1 w:1) + // Proof: ProposalEngine Proposals (max_values: None, max_size: Some(140), added: 2615, mode: MaxEncodedLen) // Storage: Balances Locks (r:1 w:1) + // Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) // Storage: System Account (r:1 w:1) + // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) // Storage: ProposalEngine ActiveProposalCount (r:1 w:1) + // Proof: ProposalEngine ActiveProposalCount (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) // Storage: ProposalsCodex ThreadIdByProposalId (r:0 w:1) + // Proof: ProposalsCodex ThreadIdByProposalId (max_values: None, max_size: Some(28), added: 2503, mode: MaxEncodedLen) // Storage: ProposalDiscussion ThreadById (r:0 w:1) + // Proof: ProposalDiscussion ThreadById (max_values: None, max_size: Some(198), added: 2673, mode: MaxEncodedLen) // Storage: ProposalEngine DispatchableCallCode (r:0 w:1) + // Proof: ProposalEngine DispatchableCallCode (max_values: None, max_size: Some(3145752), added: 3148227, mode: MaxEncodedLen) fn cancel_proposal() -> Weight { - (98_790_000 as Weight) - .saturating_add(T::DbWeight::get().reads(5 as Weight)) - .saturating_add(T::DbWeight::get().writes(7 as Weight)) + // Proof Size summary in bytes: + // Measured: `848` + // Estimated: `17041` + // Minimum execution time: 88_997 nanoseconds. + Weight::from_parts(91_880_000, 0u64) + .saturating_add(Weight::from_parts(0, 17041)) + .saturating_add(T::DbWeight::get().reads(5_u64)) + .saturating_add(T::DbWeight::get().writes(7_u64)) } // Storage: ProposalEngine Proposals (r:1 w:1) + // Proof: ProposalEngine Proposals (max_values: None, max_size: Some(140), added: 2615, mode: MaxEncodedLen) // Storage: Balances Locks (r:1 w:1) + // Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) // Storage: System Account (r:1 w:1) + // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) // Storage: ProposalEngine ActiveProposalCount (r:1 w:1) + // Proof: ProposalEngine ActiveProposalCount (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) // Storage: ProposalsCodex ThreadIdByProposalId (r:0 w:1) + // Proof: ProposalsCodex ThreadIdByProposalId (max_values: None, max_size: Some(28), added: 2503, mode: MaxEncodedLen) // Storage: ProposalDiscussion ThreadById (r:0 w:1) + // Proof: ProposalDiscussion ThreadById (max_values: None, max_size: Some(198), added: 2673, mode: MaxEncodedLen) // Storage: ProposalEngine DispatchableCallCode (r:0 w:1) + // Proof: ProposalEngine DispatchableCallCode (max_values: None, max_size: Some(3145752), added: 3148227, mode: MaxEncodedLen) fn veto_proposal() -> Weight { - (53_520_000 as Weight) - .saturating_add(T::DbWeight::get().reads(4 as Weight)) - .saturating_add(T::DbWeight::get().writes(7 as Weight)) + // Proof Size summary in bytes: + // Measured: `595` + // Estimated: `13451` + // Minimum execution time: 49_135 nanoseconds. + Weight::from_parts(50_965_000, 0u64) + .saturating_add(Weight::from_parts(0, 13451)) + .saturating_add(T::DbWeight::get().reads(4_u64)) + .saturating_add(T::DbWeight::get().writes(7_u64)) } // Storage: Membership MembershipById (r:1 w:0) + // Proof: Membership MembershipById (max_values: None, max_size: Some(125), added: 2600, mode: MaxEncodedLen) // Storage: ProposalEngine Proposals (r:1 w:0) + // Proof: ProposalEngine Proposals (max_values: None, max_size: Some(140), added: 2615, mode: MaxEncodedLen) fn proposer_remark() -> Weight { - (24_591_000 as Weight) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) + // Proof Size summary in bytes: + // Measured: `548` + // Estimated: `7195` + // Minimum execution time: 23_862 nanoseconds. + Weight::from_parts(24_601_000, 0u64) + .saturating_add(Weight::from_parts(0, 7195)) + .saturating_add(T::DbWeight::get().reads(2_u64)) } - // Storage: ProposalEngine Proposals (r:2 w:1) + // Storage: ProposalEngine Proposals (r:21 w:20) + // Proof: ProposalEngine Proposals (max_values: None, max_size: Some(140), added: 2615, mode: MaxEncodedLen) // Storage: Council CouncilMembers (r:1 w:0) - // Storage: Balances Locks (r:1 w:1) - // Storage: System Account (r:1 w:1) - // Storage: ProposalEngine DispatchableCallCode (r:1 w:1) + // Proof: Council CouncilMembers (max_values: Some(1), max_size: Some(325), added: 820, mode: MaxEncodedLen) + // Storage: Balances Locks (r:20 w:20) + // Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) + // Storage: System Account (r:20 w:20) + // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + // Storage: ProposalEngine DispatchableCallCode (r:20 w:20) + // Proof: ProposalEngine DispatchableCallCode (max_values: None, max_size: Some(3145752), added: 3148227, mode: MaxEncodedLen) + // Storage: ProposalEngine VoteExistsByProposalByVoter (r:20 w:20) + // Proof: ProposalEngine VoteExistsByProposalByVoter (max_values: None, max_size: Some(45), added: 2520, mode: MaxEncodedLen) // Storage: ProposalEngine ActiveProposalCount (r:1 w:1) - // Storage: ProposalsCodex ThreadIdByProposalId (r:0 w:1) + // Proof: ProposalEngine ActiveProposalCount (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + // Storage: ProposalsCodex ThreadIdByProposalId (r:0 w:20) + // Proof: ProposalsCodex ThreadIdByProposalId (max_values: None, max_size: Some(28), added: 2503, mode: MaxEncodedLen) // Storage: ProposalDiscussion ThreadById (r:0 w:1) - // Storage: ProposalEngine VoteExistsByProposalByVoter (r:0 w:1) + // Proof: ProposalDiscussion ThreadById (max_values: None, max_size: Some(198), added: 2673, mode: MaxEncodedLen) + /// The range of component `i` is `[1, 20]`. fn on_initialize_immediate_execution_decode_fails(i: u32, ) -> Weight { - (26_040_000 as Weight) - // Standard Error: 64_000 - .saturating_add((61_934_000 as Weight).saturating_mul(i as Weight)) - .saturating_add(T::DbWeight::get().reads(3 as Weight)) - .saturating_add(T::DbWeight::get().reads((4 as Weight).saturating_mul(i as Weight))) - .saturating_add(T::DbWeight::get().writes(2 as Weight)) - .saturating_add(T::DbWeight::get().writes((6 as Weight).saturating_mul(i as Weight))) - } - // Storage: ProposalEngine Proposals (r:2 w:1) - // Storage: ProposalEngine DispatchableCallCode (r:1 w:1) + // Proof Size summary in bytes: + // Measured: `979 + i * (460 ±0)` + // Estimated: `10864 + i * (3159739 ±0)` + // Minimum execution time: 79_620 nanoseconds. + Weight::from_parts(33_904_315, 0u64) + .saturating_add(Weight::from_parts(0, 10864)) + // Standard Error: 51_970 + .saturating_add(Weight::from_parts(48_786_793, 0u64).saturating_mul(i.into())) + .saturating_add(T::DbWeight::get().reads(3_u64)) + .saturating_add(T::DbWeight::get().reads((5_u64).saturating_mul(i.into()))) + .saturating_add(T::DbWeight::get().writes(2_u64)) + .saturating_add(T::DbWeight::get().writes((6_u64).saturating_mul(i.into()))) + .saturating_add(Weight::from_parts(0, 3159739).saturating_mul(i.into())) + } + // Storage: ProposalEngine Proposals (r:21 w:20) + // Proof: ProposalEngine Proposals (max_values: None, max_size: Some(140), added: 2615, mode: MaxEncodedLen) + // Storage: ProposalEngine DispatchableCallCode (r:20 w:20) + // Proof: ProposalEngine DispatchableCallCode (max_values: None, max_size: Some(3145752), added: 3148227, mode: MaxEncodedLen) + // Storage: ProposalEngine VoteExistsByProposalByVoter (r:20 w:20) + // Proof: ProposalEngine VoteExistsByProposalByVoter (max_values: None, max_size: Some(45), added: 2520, mode: MaxEncodedLen) // Storage: ProposalEngine ActiveProposalCount (r:1 w:1) - // Storage: ProposalsCodex ThreadIdByProposalId (r:0 w:1) + // Proof: ProposalEngine ActiveProposalCount (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + // Storage: ProposalsCodex ThreadIdByProposalId (r:0 w:20) + // Proof: ProposalsCodex ThreadIdByProposalId (max_values: None, max_size: Some(28), added: 2503, mode: MaxEncodedLen) // Storage: ProposalDiscussion ThreadById (r:0 w:1) - // Storage: ProposalEngine VoteExistsByProposalByVoter (r:0 w:1) + // Proof: ProposalDiscussion ThreadById (max_values: None, max_size: Some(198), added: 2673, mode: MaxEncodedLen) + /// The range of component `i` is `[1, 20]`. fn on_initialize_pending_execution_decode_fails(i: u32, ) -> Weight { - (21_694_000 as Weight) - // Standard Error: 56_000 - .saturating_add((32_464_000 as Weight).saturating_mul(i as Weight)) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) - .saturating_add(T::DbWeight::get().reads((2 as Weight).saturating_mul(i as Weight))) - .saturating_add(T::DbWeight::get().writes(2 as Weight)) - .saturating_add(T::DbWeight::get().writes((4 as Weight).saturating_mul(i as Weight))) - } - // Storage: ProposalEngine Proposals (r:2 w:1) + // Proof Size summary in bytes: + // Measured: `165 + i * (220 ±0)` + // Estimated: `7074 + i * (3153362 ±0)` + // Minimum execution time: 41_793 nanoseconds. + Weight::from_parts(24_271_061, 0u64) + .saturating_add(Weight::from_parts(0, 7074)) + // Standard Error: 34_544 + .saturating_add(Weight::from_parts(24_007_793, 0u64).saturating_mul(i.into())) + .saturating_add(T::DbWeight::get().reads(2_u64)) + .saturating_add(T::DbWeight::get().reads((3_u64).saturating_mul(i.into()))) + .saturating_add(T::DbWeight::get().writes(2_u64)) + .saturating_add(T::DbWeight::get().writes((4_u64).saturating_mul(i.into()))) + .saturating_add(Weight::from_parts(0, 3153362).saturating_mul(i.into())) + } + // Storage: ProposalEngine Proposals (r:21 w:20) + // Proof: ProposalEngine Proposals (max_values: None, max_size: Some(140), added: 2615, mode: MaxEncodedLen) // Storage: Council CouncilMembers (r:1 w:0) + // Proof: Council CouncilMembers (max_values: Some(1), max_size: Some(325), added: 820, mode: MaxEncodedLen) + /// The range of component `i` is `[1, 20]`. fn on_initialize_approved_pending_constitutionality(i: u32, ) -> Weight { - (28_472_000 as Weight) - // Standard Error: 31_000 - .saturating_add((21_495_000 as Weight).saturating_mul(i as Weight)) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) - .saturating_add(T::DbWeight::get().reads((1 as Weight).saturating_mul(i as Weight))) - .saturating_add(T::DbWeight::get().writes((1 as Weight).saturating_mul(i as Weight))) - } - // Storage: ProposalEngine Proposals (r:2 w:1) + // Proof Size summary in bytes: + // Measured: `812 + i * (140 ±0)` + // Estimated: `5415 + i * (2615 ±0)` + // Minimum execution time: 37_108 nanoseconds. + Weight::from_parts(25_391_193, 0u64) + .saturating_add(Weight::from_parts(0, 5415)) + // Standard Error: 23_065 + .saturating_add(Weight::from_parts(15_676_666, 0u64).saturating_mul(i.into())) + .saturating_add(T::DbWeight::get().reads(2_u64)) + .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(i.into()))) + .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(i.into()))) + .saturating_add(Weight::from_parts(0, 2615).saturating_mul(i.into())) + } + // Storage: ProposalEngine Proposals (r:21 w:20) + // Proof: ProposalEngine Proposals (max_values: None, max_size: Some(140), added: 2615, mode: MaxEncodedLen) // Storage: Council CouncilMembers (r:1 w:0) - // Storage: Balances Locks (r:1 w:1) - // Storage: System Account (r:1 w:1) + // Proof: Council CouncilMembers (max_values: Some(1), max_size: Some(325), added: 820, mode: MaxEncodedLen) + // Storage: Balances Locks (r:20 w:20) + // Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) + // Storage: System Account (r:20 w:20) + // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + // Storage: ProposalEngine VoteExistsByProposalByVoter (r:60 w:60) + // Proof: ProposalEngine VoteExistsByProposalByVoter (max_values: None, max_size: Some(45), added: 2520, mode: MaxEncodedLen) // Storage: ProposalEngine ActiveProposalCount (r:1 w:1) - // Storage: ProposalsCodex ThreadIdByProposalId (r:0 w:1) + // Proof: ProposalEngine ActiveProposalCount (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + // Storage: ProposalsCodex ThreadIdByProposalId (r:0 w:20) + // Proof: ProposalsCodex ThreadIdByProposalId (max_values: None, max_size: Some(28), added: 2503, mode: MaxEncodedLen) // Storage: ProposalDiscussion ThreadById (r:0 w:1) - // Storage: ProposalEngine VoteExistsByProposalByVoter (r:0 w:3) - // Storage: ProposalEngine DispatchableCallCode (r:0 w:1) + // Proof: ProposalDiscussion ThreadById (max_values: None, max_size: Some(198), added: 2673, mode: MaxEncodedLen) + // Storage: ProposalEngine DispatchableCallCode (r:0 w:20) + // Proof: ProposalEngine DispatchableCallCode (max_values: None, max_size: Some(3145752), added: 3148227, mode: MaxEncodedLen) + /// The range of component `i` is `[1, 20]`. fn on_initialize_rejected(i: u32, ) -> Weight { - (26_645_000 as Weight) - // Standard Error: 81_000 - .saturating_add((84_339_000 as Weight).saturating_mul(i as Weight)) - .saturating_add(T::DbWeight::get().reads(3 as Weight)) - .saturating_add(T::DbWeight::get().reads((3 as Weight).saturating_mul(i as Weight))) - .saturating_add(T::DbWeight::get().writes(2 as Weight)) - .saturating_add(T::DbWeight::get().writes((8 as Weight).saturating_mul(i as Weight))) - } - // Storage: ProposalEngine Proposals (r:2 w:1) + // Proof Size summary in bytes: + // Measured: `992 + i * (495 ±0)` + // Estimated: `9874 + i * (16552 ±0)` + // Minimum execution time: 99_872 nanoseconds. + Weight::from_parts(35_385_619, 0u64) + .saturating_add(Weight::from_parts(0, 9874)) + // Standard Error: 81_760 + .saturating_add(Weight::from_parts(69_118_638, 0u64).saturating_mul(i.into())) + .saturating_add(T::DbWeight::get().reads(3_u64)) + .saturating_add(T::DbWeight::get().reads((6_u64).saturating_mul(i.into()))) + .saturating_add(T::DbWeight::get().writes(2_u64)) + .saturating_add(T::DbWeight::get().writes((8_u64).saturating_mul(i.into()))) + .saturating_add(Weight::from_parts(0, 16552).saturating_mul(i.into())) + } + // Storage: ProposalEngine Proposals (r:21 w:20) + // Proof: ProposalEngine Proposals (max_values: None, max_size: Some(140), added: 2615, mode: MaxEncodedLen) // Storage: Council CouncilMembers (r:1 w:0) - // Storage: Balances Locks (r:1 w:1) - // Storage: System Account (r:1 w:1) + // Proof: Council CouncilMembers (max_values: Some(1), max_size: Some(325), added: 820, mode: MaxEncodedLen) + // Storage: Balances Locks (r:20 w:20) + // Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) + // Storage: System Account (r:20 w:20) + // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + // Storage: ProposalEngine VoteExistsByProposalByVoter (r:60 w:60) + // Proof: ProposalEngine VoteExistsByProposalByVoter (max_values: None, max_size: Some(45), added: 2520, mode: MaxEncodedLen) // Storage: ProposalEngine ActiveProposalCount (r:1 w:1) - // Storage: ProposalsCodex ThreadIdByProposalId (r:0 w:1) + // Proof: ProposalEngine ActiveProposalCount (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + // Storage: ProposalsCodex ThreadIdByProposalId (r:0 w:20) + // Proof: ProposalsCodex ThreadIdByProposalId (max_values: None, max_size: Some(28), added: 2503, mode: MaxEncodedLen) // Storage: ProposalDiscussion ThreadById (r:0 w:1) - // Storage: ProposalEngine VoteExistsByProposalByVoter (r:0 w:3) - // Storage: ProposalEngine DispatchableCallCode (r:0 w:1) + // Proof: ProposalDiscussion ThreadById (max_values: None, max_size: Some(198), added: 2673, mode: MaxEncodedLen) + // Storage: ProposalEngine DispatchableCallCode (r:0 w:20) + // Proof: ProposalEngine DispatchableCallCode (max_values: None, max_size: Some(3145752), added: 3148227, mode: MaxEncodedLen) + /// The range of component `i` is `[1, 20]`. fn on_initialize_slashed(i: u32, ) -> Weight { - (30_142_000 as Weight) - // Standard Error: 66_000 - .saturating_add((74_001_000 as Weight).saturating_mul(i as Weight)) - .saturating_add(T::DbWeight::get().reads(3 as Weight)) - .saturating_add(T::DbWeight::get().reads((3 as Weight).saturating_mul(i as Weight))) - .saturating_add(T::DbWeight::get().writes(2 as Weight)) - .saturating_add(T::DbWeight::get().writes((8 as Weight).saturating_mul(i as Weight))) + // Proof Size summary in bytes: + // Measured: `992 + i * (495 ±0)` + // Estimated: `9874 + i * (16552 ±0)` + // Minimum execution time: 92_003 nanoseconds. + Weight::from_parts(33_213_402, 0u64) + .saturating_add(Weight::from_parts(0, 9874)) + // Standard Error: 51_799 + .saturating_add(Weight::from_parts(60_807_406, 0u64).saturating_mul(i.into())) + .saturating_add(T::DbWeight::get().reads(3_u64)) + .saturating_add(T::DbWeight::get().reads((6_u64).saturating_mul(i.into()))) + .saturating_add(T::DbWeight::get().writes(2_u64)) + .saturating_add(T::DbWeight::get().writes((8_u64).saturating_mul(i.into()))) + .saturating_add(Weight::from_parts(0, 16552).saturating_mul(i.into())) } // Storage: ProposalEngine ActiveProposalCount (r:1 w:1) - // Storage: ProposalEngine Proposals (r:2 w:1) - // Storage: Balances Locks (r:1 w:1) - // Storage: System Account (r:1 w:1) - // Storage: ProposalsCodex ThreadIdByProposalId (r:0 w:1) + // Proof: ProposalEngine ActiveProposalCount (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + // Storage: ProposalEngine Proposals (r:21 w:20) + // Proof: ProposalEngine Proposals (max_values: None, max_size: Some(140), added: 2615, mode: MaxEncodedLen) + // Storage: Balances Locks (r:20 w:20) + // Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) + // Storage: System Account (r:20 w:20) + // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + // Storage: ProposalEngine VoteExistsByProposalByVoter (r:60 w:60) + // Proof: ProposalEngine VoteExistsByProposalByVoter (max_values: None, max_size: Some(45), added: 2520, mode: MaxEncodedLen) + // Storage: ProposalsCodex ThreadIdByProposalId (r:0 w:20) + // Proof: ProposalsCodex ThreadIdByProposalId (max_values: None, max_size: Some(28), added: 2503, mode: MaxEncodedLen) // Storage: ProposalDiscussion ThreadById (r:0 w:1) - // Storage: ProposalEngine VoteExistsByProposalByVoter (r:0 w:3) - // Storage: ProposalEngine DispatchableCallCode (r:0 w:1) + // Proof: ProposalDiscussion ThreadById (max_values: None, max_size: Some(198), added: 2673, mode: MaxEncodedLen) + // Storage: ProposalEngine DispatchableCallCode (r:0 w:20) + // Proof: ProposalEngine DispatchableCallCode (max_values: None, max_size: Some(3145752), added: 3148227, mode: MaxEncodedLen) + /// The range of component `i` is `[1, 20]`. fn cancel_active_and_pending_proposals(i: u32, ) -> Weight { - (20_266_000 as Weight) - // Standard Error: 83_000 - .saturating_add((49_225_000 as Weight).saturating_mul(i as Weight)) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) - .saturating_add(T::DbWeight::get().reads((3 as Weight).saturating_mul(i as Weight))) - .saturating_add(T::DbWeight::get().writes(2 as Weight)) - .saturating_add(T::DbWeight::get().writes((8 as Weight).saturating_mul(i as Weight))) + // Proof Size summary in bytes: + // Measured: `374 + i * (495 ±0)` + // Estimated: `8064 + i * (16552 ±0)` + // Minimum execution time: 59_792 nanoseconds. + Weight::from_parts(27_334_210, 0u64) + .saturating_add(Weight::from_parts(0, 8064)) + // Standard Error: 43_635 + .saturating_add(Weight::from_parts(38_318_447, 0u64).saturating_mul(i.into())) + .saturating_add(T::DbWeight::get().reads(2_u64)) + .saturating_add(T::DbWeight::get().reads((6_u64).saturating_mul(i.into()))) + .saturating_add(T::DbWeight::get().writes(2_u64)) + .saturating_add(T::DbWeight::get().writes((8_u64).saturating_mul(i.into()))) + .saturating_add(Weight::from_parts(0, 16552).saturating_mul(i.into())) } } // Default implementation for tests impl WeightInfo for () { fn vote(i: u32, ) -> Weight { - 0 + Weight::from_parts(0, 0) } fn cancel_proposal() -> Weight { - 0 + Weight::from_parts(0, 0) } fn veto_proposal() -> Weight { - 0 + Weight::from_parts(0, 0) } fn proposer_remark() -> Weight { - 0 + Weight::from_parts(0, 0) } fn on_initialize_immediate_execution_decode_fails(i: u32, ) -> Weight { - 0 + Weight::from_parts(0, 0) } fn on_initialize_pending_execution_decode_fails(i: u32, ) -> Weight { - 0 + Weight::from_parts(0, 0) } fn on_initialize_approved_pending_constitutionality(i: u32, ) -> Weight { - 0 + Weight::from_parts(0, 0) } fn on_initialize_rejected(i: u32, ) -> Weight { - 0 + Weight::from_parts(0, 0) } fn on_initialize_slashed(i: u32, ) -> Weight { - 0 + Weight::from_parts(0, 0) } fn cancel_active_and_pending_proposals(i: u32, ) -> Weight { - 0 + Weight::from_parts(0, 0) } } diff --git a/runtime-modules/referendum/Cargo.toml b/runtime-modules/referendum/Cargo.toml index 9351a9cedd..7cad5aa08d 100644 --- a/runtime-modules/referendum/Cargo.toml +++ b/runtime-modules/referendum/Cargo.toml @@ -8,31 +8,31 @@ edition = '2018' codec = { package = 'parity-scale-codec', version = '3.1.2', default-features = false, features = ['derive'] } scale-info = { version = "2.1.1", default-features = false, features = ["derive"] } serde = { version = '1.0.101', optional = true} -sp-runtime = { package = 'sp-runtime', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -sp-core = { package = 'sp-core', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -sp-arithmetic = { package = 'sp-arithmetic', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -sp-std = { package = 'sp-std', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -frame-support = { package = 'frame-support', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -frame-system = { package = 'frame-system', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} +sp-runtime = { package = 'sp-runtime', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +sp-core = { package = 'sp-core', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +sp-arithmetic = { package = 'sp-arithmetic', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +sp-std = { package = 'sp-std', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +frame-support = { package = 'frame-support', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +frame-system = { package = 'frame-system', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} common = { package = 'pallet-common', default-features = false, path = '../common'} -balances = { package = 'pallet-balances', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} +balances = { package = 'pallet-balances', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} staking-handler = { package = 'pallet-staking-handler', default-features = false, path = '../staking-handler'} # Benchmark dependencies -frame-benchmarking = { package = 'frame-benchmarking', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522', optional = true } +frame-benchmarking = { package = 'frame-benchmarking', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9', optional = true } membership = { package = 'pallet-membership', default-features = false, path = '../membership', optional = true } [dev-dependencies] -sp-io = { package = 'sp-io', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} +sp-io = { package = 'sp-io', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} rand = "0.7.3" -pallet-timestamp = { package = 'pallet-timestamp', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} +pallet-timestamp = { package = 'pallet-timestamp', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} membership = { package = 'pallet-membership', default-features = false, path = '../membership' } [features] default = ['std'] runtime-benchmarks = [ - 'frame-benchmarking', - 'membership', + 'frame-benchmarking/runtime-benchmarks', + 'membership/runtime-benchmarks', 'common/runtime-benchmarks', ] std = [ @@ -49,4 +49,6 @@ std = [ 'balances/std', 'membership/std', 'scale-info/std', + 'frame-benchmarking?/std', ] +try-runtime = [ "frame-support/try-runtime"] diff --git a/runtime-modules/referendum/src/benchmarking.rs b/runtime-modules/referendum/src/benchmarking.rs index b67aa46f43..4e3201cb75 100644 --- a/runtime-modules/referendum/src/benchmarking.rs +++ b/runtime-modules/referendum/src/benchmarking.rs @@ -1,7 +1,7 @@ #![allow(clippy::type_complexity)] #![cfg(feature = "runtime-benchmarks")] use super::*; -use frame_benchmarking::{account, benchmarks_instance, Zero}; +use frame_benchmarking::v1::{account, benchmarks_instance, Zero}; use frame_support::traits::{Currency, OnFinalize, OnInitialize}; use frame_system::EventRecord; use frame_system::Pallet as System; @@ -22,9 +22,9 @@ pub trait OptionCreator { fn create_option(account_id: AccountId, member_id: MemberId); } -fn assert_last_event, I: Instance>(generic_event: >::Event) { +fn assert_last_event, I: Instance>(generic_event: >::RuntimeEvent) { let events = System::::events(); - let system_event: ::Event = generic_event.into(); + let system_event: ::RuntimeEvent = generic_event.into(); // compare to the last event record let EventRecord { event, .. } = &events[events.len() - 1]; assert_eq!(event, &system_event); @@ -382,7 +382,7 @@ benchmarks_instance! { } on_initialize_revealing { - let i in 0 .. (T::MaxWinnerTargetCount::get() - 1) as u32; + let i in 0 .. (T::MaxWinnerTargetCount::get() - 1); let cycle_id = 1; let salt = vec![0u8]; @@ -499,7 +499,7 @@ benchmarks_instance! { } reveal_vote_space_for_new_winner { - let i in 0 .. (T::MaxWinnerTargetCount::get() - 1) as u32; + let i in 0 .. (T::MaxWinnerTargetCount::get() - 1); let salt = vec![0u8]; let vote_option = 2 * (i + 1); // Greater than number of voters + number of candidates @@ -563,7 +563,7 @@ benchmarks_instance! { } reveal_vote_space_not_in_winners { - let i in 0 .. (T::MaxWinnerTargetCount::get() - 1) as u32; + let i in 0 .. (T::MaxWinnerTargetCount::get() - 1); let salt = vec![0u8]; let vote_option = 2 * (i + 1); // Greater than number of voters + number of candidates @@ -617,7 +617,7 @@ benchmarks_instance! { } reveal_vote_space_replace_last_winner { - let i in 0 .. (T::MaxWinnerTargetCount::get() - 1) as u32; + let i in 0 .. (T::MaxWinnerTargetCount::get() - 1); let salt = vec![0u8]; let vote_option = 2 * (i + 1); // Greater than number of voters + number of candidates @@ -679,7 +679,7 @@ benchmarks_instance! { } reveal_vote_already_existing { - let i in 0 .. (T::MaxWinnerTargetCount::get() - 1) as u32; + let i in 0 .. (T::MaxWinnerTargetCount::get() - 1); let salt = vec![0u8]; let vote_option = i; diff --git a/runtime-modules/referendum/src/lib.rs b/runtime-modules/referendum/src/lib.rs index cd27bc9321..e7c829db17 100644 --- a/runtime-modules/referendum/src/lib.rs +++ b/runtime-modules/referendum/src/lib.rs @@ -233,7 +233,7 @@ pub trait Config: frame_system::Config + common::membership::MembershipTypes + balances::Config { /// The overarching event type. - type Event: From> + Into<::Event>; + type RuntimeEvent: From> + Into<::RuntimeEvent>; /// Maximum length of vote commitment salt. Use length that ensures uniqueness for hashing /// e.g. std::u64::MAX. @@ -248,7 +248,7 @@ pub trait Config: >; /// Origin from which the referendum can be started. - type ManagerOrigin: EnsureOrigin; + type ManagerOrigin: EnsureOrigin; /// Power of vote(s) used to determine the referendum winner(s). type VotePower: Parameter @@ -410,11 +410,17 @@ impl, I: Instance> From for Error { } } +impl, I: Instance> From for Error { + fn from(err: sp_runtime::DispatchError) -> Self { + err.into() + } +} + /////////////////// Module definition and implementation /////////////////////// decl_module! { pub struct Module, I: Instance = DefaultInstance> for enum Call - where origin: T::Origin { + where origin: T::RuntimeOrigin { /// Predefined errors type Error = Error; @@ -632,14 +638,14 @@ impl, I: Instance> Module { /////////////////// ReferendumManager ////////////////////////////////////////// -impl, I: Instance> ReferendumManager - for Module +impl, I: Instance> + ReferendumManager for Module { type VotePower = T::VotePower; // Start new referendum run. fn start_referendum( - origin: T::Origin, + origin: T::RuntimeOrigin, extra_winning_target_count: u32, cycle_id: u64, ) -> Result<(), ()> { @@ -831,7 +837,7 @@ impl, I: Instance> Mutations { Stage::::mutate(|stage| *stage = ReferendumStage::Revealing(new_stage_data)); // store revealed vote - Votes::::mutate(account_id, |vote| (*vote).vote_for = Some(*option_id)); + Votes::::mutate(account_id, |vote| vote.vote_for = Some(*option_id)); } // Release stake associated to the user's last vote. @@ -959,7 +965,7 @@ struct EnsureChecks, I: Instance> { impl, I: Instance> EnsureChecks { /////////////////// Common checks ////////////////////////////////////////// - fn ensure_regular_user(origin: T::Origin) -> Result> { + fn ensure_regular_user(origin: T::RuntimeOrigin) -> Result> { let account_id = ensure_signed(origin)?; Ok(account_id) @@ -967,7 +973,7 @@ impl, I: Instance> EnsureChecks { /////////////////// Action checks ////////////////////////////////////////// - fn can_start_referendum(origin: T::Origin) -> Result<(), ()> { + fn can_start_referendum(origin: T::RuntimeOrigin) -> Result<(), ()> { T::ManagerOrigin::ensure_origin(origin).map_err(|_| ())?; // ensure referendum is not already running @@ -980,18 +986,18 @@ impl, I: Instance> EnsureChecks { } fn can_vote( - origin: T::Origin, + origin: T::RuntimeOrigin, stake: &BalanceOf, ) -> Result<(u64, T::AccountId), Error> { fn prevent_repeated_vote, I: Instance>( cycle_id: &u64, account_id: &T::AccountId, ) -> Result<(), Error> { - if !Votes::::contains_key(&account_id) { + if !Votes::::contains_key(account_id) { return Ok(()); } - let existing_vote = Votes::::get(&account_id); + let existing_vote = Votes::::get(account_id); // don't allow repeated vote if existing_vote.cycle_id == *cycle_id { @@ -1036,8 +1042,10 @@ impl, I: Instance> EnsureChecks { Ok((current_cycle_id, account_id)) } - fn can_reveal_vote>( - origin: T::Origin, + fn can_reveal_vote< + R: ReferendumManager, + >( + origin: T::RuntimeOrigin, salt: &[u8], vote_option_id: &::MemberId, ) -> Result, Error> { @@ -1086,7 +1094,7 @@ impl, I: Instance> EnsureChecks { Ok((stage_data, account_id, cast_vote)) } - fn can_release_vote_stake(origin: T::Origin) -> Result> { + fn can_release_vote_stake(origin: T::RuntimeOrigin) -> Result> { // ensure superuser requested action let account_id = Self::ensure_regular_user(origin)?; @@ -1111,3 +1119,10 @@ impl, I: Instance> EnsureChecks { Ok(cast_vote) } } + +impl, I: Instance> frame_support::traits::Hooks for Pallet { + #[cfg(feature = "try-runtime")] + fn try_state(_: T::BlockNumber) -> Result<(), &'static str> { + Ok(()) + } +} diff --git a/runtime-modules/referendum/src/mock.rs b/runtime-modules/referendum/src/mock.rs index c5e789d9d5..4260783957 100644 --- a/runtime-modules/referendum/src/mock.rs +++ b/runtime-modules/referendum/src/mock.rs @@ -14,8 +14,8 @@ use frame_support::traits::{ ConstU16, ConstU32, Currency, LockIdentifier, OnFinalize, OnInitialize, }; use frame_support::{ - parameter_types, storage::weak_bounded_vec::WeakBoundedVec, traits::EnsureOneOf, StorageMap, - StorageValue, + parameter_types, storage::weak_bounded_vec::WeakBoundedVec, traits::EitherOfDiverse, + StorageMap, StorageValue, }; use frame_system::{ensure_signed, EnsureRoot, EnsureSigned, RawOrigin}; use rand::Rng; @@ -72,12 +72,13 @@ impl LockComparator for Runtime { } impl Config for Runtime { - type Event = Event; + type RuntimeEvent = RuntimeEvent; type MaxSaltLength = MaxSaltLength; type StakingHandler = staking_handler::StakingManager; - type ManagerOrigin = EnsureOneOf, EnsureRoot>; + type ManagerOrigin = + EitherOfDiverse, EnsureRoot>; type VotePower = u64; @@ -151,7 +152,7 @@ parameter_types! { } impl membership::Config for Runtime { - type Event = Event; + type RuntimeEvent = RuntimeEvent; type DefaultMembershipPrice = DefaultMembershipPrice; type WorkingGroup = Wg; type WeightInfo = (); @@ -188,13 +189,15 @@ impl common::working_group::WorkingGroupBudgetHandler for Wg { impl common::working_group::WorkingGroupAuthenticator for Wg { fn ensure_worker_origin( - _origin: ::Origin, + _origin: ::RuntimeOrigin, _worker_id: &::ActorId, ) -> DispatchResult { unimplemented!() } - fn ensure_leader_origin(_origin: ::Origin) -> DispatchResult { + fn ensure_leader_origin( + _origin: ::RuntimeOrigin, + ) -> DispatchResult { unimplemented!() } @@ -246,7 +249,7 @@ parameter_types! { impl balances::Config for Runtime { type Balance = u64; type DustRemoval = (); - type Event = Event; + type RuntimeEvent = RuntimeEvent; type ExistentialDeposit = ExistentialDeposit; type AccountStore = System; type MaxLocks = (); @@ -298,8 +301,8 @@ impl frame_system::Config for Runtime { type BlockWeights = (); type BlockLength = (); type DbWeight = (); - type Origin = Origin; - type Call = Call; + type RuntimeOrigin = RuntimeOrigin; + type RuntimeCall = RuntimeCall; type Index = u64; type BlockNumber = u64; type Hash = H256; @@ -307,7 +310,7 @@ impl frame_system::Config for Runtime { type AccountId = u64; type Lookup = IdentityLookup; type Header = Header; - type Event = Event; + type RuntimeEvent = RuntimeEvent; type BlockHashCount = BlockHashCount; // ConstU64<250>; type Version = (); type PalletInfo = PalletInfo; @@ -338,7 +341,7 @@ pub fn build_test_externalities() -> sp_io::TestExternalities { .build_storage::() .unwrap(); - let mut result = Into::::into(t.clone()); + let mut result = Into::::into(t); // Make sure we are not in block 0 where no events are emitted - see https://substrate.dev/recipes/2-appetizers/4-events.html#emitting-events result.execute_with(|| { @@ -372,9 +375,9 @@ impl, I: Instance> InstanceMockUtils where T::BlockNumber: From + Into, { - pub fn mock_origin(origin: OriginType) -> T::Origin { + pub fn mock_origin(origin: OriginType) -> T::RuntimeOrigin { match origin { - OriginType::Signed(account_id) => T::Origin::from(RawOrigin::Signed(account_id)), + OriginType::Signed(account_id) => T::RuntimeOrigin::from(RawOrigin::Signed(account_id)), OriginType::Root => RawOrigin::Root.into(), OriginType::None => RawOrigin::None.into(), //_ => panic!("not implemented"), @@ -454,7 +457,7 @@ where ( as ReferendumManager< - ::Origin, + ::RuntimeOrigin, ::AccountId, ::MemberId, ::Hash, @@ -523,7 +526,7 @@ impl InstanceMocks { // check method returns expected result assert_eq!( as ReferendumManager< - ::Origin, + ::RuntimeOrigin, ::AccountId, ::MemberId, ::Hash, @@ -543,7 +546,7 @@ impl InstanceMocks { let extra_winning_target_count = winning_target_count - 1; as ReferendumManager< - ::Origin, + ::RuntimeOrigin, ::AccountId, ::MemberId, ::Hash, @@ -580,7 +583,7 @@ impl InstanceMocks { .last() .unwrap() .event, - Event::from(RawEvent::ReferendumStarted( + RuntimeEvent::from(RawEvent::ReferendumStarted( winning_target_count, voting_ends_at )) @@ -608,7 +611,7 @@ impl InstanceMocks { .last() .unwrap() .event, - Event::Referendum(RawEvent::RevealingStageStarted(revealing_ends_at)) + RuntimeEvent::Referendum(RawEvent::RevealingStageStarted(revealing_ends_at)) ); } @@ -644,7 +647,7 @@ impl InstanceMocks { .last() .unwrap() .event, - Event::Referendum(RawEvent::ReferendumFinished(expected_winners,)) + RuntimeEvent::Referendum(RawEvent::ReferendumFinished(expected_winners,)) ); } @@ -697,7 +700,7 @@ impl InstanceMocks { .last() .unwrap() .event, - Event::Referendum(RawEvent::VoteCast(account_id, commitment, stake)) + RuntimeEvent::Referendum(RawEvent::VoteCast(account_id, commitment, stake)) ); } @@ -728,7 +731,7 @@ impl InstanceMocks { .last() .unwrap() .event, - Event::Referendum(RawEvent::VoteRevealed(account_id, vote_option_index, salt)) + RuntimeEvent::Referendum(RawEvent::VoteRevealed(account_id, vote_option_index, salt)) ); } @@ -755,7 +758,7 @@ impl InstanceMocks { .last() .unwrap() .event, - Event::Referendum(RawEvent::StakeReleased(account_id)) + RuntimeEvent::Referendum(RawEvent::StakeReleased(account_id)) ); } @@ -776,7 +779,7 @@ impl InstanceMocks { // check if the account was added to AccountsOptedOut let account_id = ensure_signed(mock_origin).unwrap(); assert!(AccountsOptedOut::::contains_key( - &account_id + account_id )); // check event was emitted @@ -785,7 +788,7 @@ impl InstanceMocks { .last() .unwrap() .event, - Event::Referendum(RawEvent::AccountOptedOutOfVoting(account_id)) + RuntimeEvent::Referendum(RawEvent::AccountOptedOutOfVoting(account_id)) ); } } diff --git a/runtime-modules/referendum/src/tests.rs b/runtime-modules/referendum/src/tests.rs index 5f869a8c05..15fe6bd60a 100644 --- a/runtime-modules/referendum/src/tests.rs +++ b/runtime-modules/referendum/src/tests.rs @@ -487,7 +487,7 @@ fn finish_revealing_period() { option_id: option_to_vote_for, vote_power: stake, }], - MockUtils::transform_results(vec![1 * stake, 0, 0]), + MockUtils::transform_results(vec![stake, 0, 0]), ); }); } @@ -1220,7 +1220,7 @@ fn opt_out_of_voting_invalid_origin() { build_test_externalities().execute_with(|| { let root_origin = OriginType::Root; let none_origin = OriginType::None; - Mocks::opt_out_of_voting(root_origin.clone(), Err(BadOrigin.into())); - Mocks::opt_out_of_voting(none_origin.clone(), Err(BadOrigin.into())); + Mocks::opt_out_of_voting(root_origin, Err(BadOrigin.into())); + Mocks::opt_out_of_voting(none_origin, Err(BadOrigin.into())); }); } diff --git a/runtime-modules/referendum/src/weights.rs b/runtime-modules/referendum/src/weights.rs index bf0092acd4..13cc7e432e 100644 --- a/runtime-modules/referendum/src/weights.rs +++ b/runtime-modules/referendum/src/weights.rs @@ -18,22 +18,21 @@ //! Autogenerated weights for referendum //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-10-20, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("dev"), DB CACHE: 1024 +//! DATE: 2023-11-06, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("prod-test"), DB CACHE: 1024 // Executed Command: -// ./../target/release/joystream-node +// ./scripts/../target/release/joystream-node // benchmark // pallet -// --base-path=/mnt/disks/local-ssd/ // --pallet=referendum // --extrinsic=* -// --chain=dev +// --chain=prod-test // --steps=50 // --repeat=20 // --execution=wasm -// --template=./../devops/joystream-pallet-weight-template.hbs -// --output=./../runtime-modules/referendum/src/weights.rs +// --template=./scripts/../devops/joystream-pallet-weight-template.hbs +// --output=./scripts/../runtime-modules/referendum/src/weights.rs #![cfg_attr(rustfmt, rustfmt_skip)] #![allow(unused_parens)] @@ -60,119 +59,199 @@ pub trait WeightInfo { pub struct SubstrateWeight(PhantomData); impl WeightInfo for SubstrateWeight { // Storage: Instance1Referendum Stage (r:1 w:1) + // Proof: Instance1Referendum Stage (max_values: Some(1), max_size: Some(94), added: 589, mode: MaxEncodedLen) // Storage: Council AnnouncementPeriodNr (r:1 w:1) + // Proof: Council AnnouncementPeriodNr (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) // Storage: Council Stage (r:0 w:1) + // Proof: Council Stage (max_values: Some(1), max_size: Some(13), added: 508, mode: MaxEncodedLen) + /// The range of component `i` is `[0, 2]`. fn on_initialize_revealing(i: u32, ) -> Weight { - (32_918_000 as Weight) - // Standard Error: 86_000 - .saturating_add((1_424_000 as Weight).saturating_mul(i as Weight)) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) - .saturating_add(T::DbWeight::get().writes(3 as Weight)) + // Proof Size summary in bytes: + // Measured: `474 + i * (26 ±0)` + // Estimated: `3072` + // Minimum execution time: 23_743 nanoseconds. + Weight::from_parts(24_926_812, 0u64) + .saturating_add(Weight::from_parts(0, 3072)) + // Standard Error: 20_646 + .saturating_add(Weight::from_parts(965_895, 0u64).saturating_mul(i.into())) + .saturating_add(T::DbWeight::get().reads(2_u64)) + .saturating_add(T::DbWeight::get().writes(3_u64)) } // Storage: Instance1Referendum Stage (r:1 w:1) + // Proof: Instance1Referendum Stage (max_values: Some(1), max_size: Some(94), added: 589, mode: MaxEncodedLen) fn on_initialize_voting() -> Weight { - (18_880_000 as Weight) - .saturating_add(T::DbWeight::get().reads(1 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + // Proof Size summary in bytes: + // Measured: `128` + // Estimated: `1579` + // Minimum execution time: 12_531 nanoseconds. + Weight::from_parts(13_030_000, 0u64) + .saturating_add(Weight::from_parts(0, 1579)) + .saturating_add(T::DbWeight::get().reads(1_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) } // Storage: Instance1Referendum AccountsOptedOut (r:1 w:0) + // Proof: Instance1Referendum AccountsOptedOut (max_values: None, max_size: Some(48), added: 2523, mode: MaxEncodedLen) // Storage: Instance1Referendum Stage (r:1 w:0) + // Proof: Instance1Referendum Stage (max_values: Some(1), max_size: Some(94), added: 589, mode: MaxEncodedLen) // Storage: Instance1Referendum Votes (r:1 w:1) + // Proof: Instance1Referendum Votes (max_values: None, max_size: Some(113), added: 2588, mode: MaxEncodedLen) // Storage: Balances Locks (r:1 w:1) + // Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) // Storage: System Account (r:1 w:1) + // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) fn vote() -> Weight { - (57_013_000 as Weight) - .saturating_add(T::DbWeight::get().reads(5 as Weight)) - .saturating_add(T::DbWeight::get().writes(3 as Weight)) + // Proof Size summary in bytes: + // Measured: `291` + // Estimated: `17027` + // Minimum execution time: 38_617 nanoseconds. + Weight::from_parts(39_844_000, 0u64) + .saturating_add(Weight::from_parts(0, 17027)) + .saturating_add(T::DbWeight::get().reads(5_u64)) + .saturating_add(T::DbWeight::get().writes(3_u64)) } // Storage: Instance1Referendum Stage (r:1 w:1) + // Proof: Instance1Referendum Stage (max_values: Some(1), max_size: Some(94), added: 589, mode: MaxEncodedLen) // Storage: Instance1Referendum Votes (r:1 w:1) + // Proof: Instance1Referendum Votes (max_values: None, max_size: Some(113), added: 2588, mode: MaxEncodedLen) // Storage: Council Candidates (r:1 w:1) + // Proof: Council Candidates (max_values: None, max_size: Some(161), added: 2636, mode: MaxEncodedLen) // Storage: Council AnnouncementPeriodNr (r:1 w:0) + // Proof: Council AnnouncementPeriodNr (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) + /// The range of component `i` is `[0, 2]`. fn reveal_vote_space_for_new_winner(i: u32, ) -> Weight { - (45_258_000 as Weight) - // Standard Error: 144_000 - .saturating_add((2_127_000 as Weight).saturating_mul(i as Weight)) - .saturating_add(T::DbWeight::get().reads(4 as Weight)) - .saturating_add(T::DbWeight::get().writes(3 as Weight)) + // Proof Size summary in bytes: + // Measured: `690 + i * (100 ±0)` + // Estimated: `10276` + // Minimum execution time: 39_963 nanoseconds. + Weight::from_parts(42_083_067, 0u64) + .saturating_add(Weight::from_parts(0, 10276)) + // Standard Error: 33_840 + .saturating_add(Weight::from_parts(1_954_615, 0u64).saturating_mul(i.into())) + .saturating_add(T::DbWeight::get().reads(4_u64)) + .saturating_add(T::DbWeight::get().writes(3_u64)) } // Storage: Instance1Referendum Stage (r:1 w:1) + // Proof: Instance1Referendum Stage (max_values: Some(1), max_size: Some(94), added: 589, mode: MaxEncodedLen) // Storage: Instance1Referendum Votes (r:1 w:1) + // Proof: Instance1Referendum Votes (max_values: None, max_size: Some(113), added: 2588, mode: MaxEncodedLen) // Storage: Council Candidates (r:1 w:1) + // Proof: Council Candidates (max_values: None, max_size: Some(161), added: 2636, mode: MaxEncodedLen) // Storage: Council AnnouncementPeriodNr (r:1 w:0) + // Proof: Council AnnouncementPeriodNr (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) + /// The range of component `i` is `[0, 2]`. fn reveal_vote_space_not_in_winners(i: u32, ) -> Weight { - (47_590_000 as Weight) - // Standard Error: 58_000 - .saturating_add((1_263_000 as Weight).saturating_mul(i as Weight)) - .saturating_add(T::DbWeight::get().reads(4 as Weight)) - .saturating_add(T::DbWeight::get().writes(3 as Weight)) + // Proof Size summary in bytes: + // Measured: `790 + i * (93 ±0)` + // Estimated: `10276` + // Minimum execution time: 41_645 nanoseconds. + Weight::from_parts(43_641_575, 0u64) + .saturating_add(Weight::from_parts(0, 10276)) + // Standard Error: 31_470 + .saturating_add(Weight::from_parts(1_200_351, 0u64).saturating_mul(i.into())) + .saturating_add(T::DbWeight::get().reads(4_u64)) + .saturating_add(T::DbWeight::get().writes(3_u64)) } // Storage: Instance1Referendum Stage (r:1 w:1) + // Proof: Instance1Referendum Stage (max_values: Some(1), max_size: Some(94), added: 589, mode: MaxEncodedLen) // Storage: Instance1Referendum Votes (r:1 w:1) + // Proof: Instance1Referendum Votes (max_values: None, max_size: Some(113), added: 2588, mode: MaxEncodedLen) // Storage: Council Candidates (r:1 w:1) + // Proof: Council Candidates (max_values: None, max_size: Some(161), added: 2636, mode: MaxEncodedLen) // Storage: Council AnnouncementPeriodNr (r:1 w:0) + // Proof: Council AnnouncementPeriodNr (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) + /// The range of component `i` is `[0, 2]`. fn reveal_vote_space_replace_last_winner(i: u32, ) -> Weight { - (47_356_000 as Weight) - // Standard Error: 72_000 - .saturating_add((1_157_000 as Weight).saturating_mul(i as Weight)) - .saturating_add(T::DbWeight::get().reads(4 as Weight)) - .saturating_add(T::DbWeight::get().writes(3 as Weight)) + // Proof Size summary in bytes: + // Measured: `790 + i * (93 ±0)` + // Estimated: `10276` + // Minimum execution time: 41_606 nanoseconds. + Weight::from_parts(43_583_726, 0u64) + .saturating_add(Weight::from_parts(0, 10276)) + // Standard Error: 37_016 + .saturating_add(Weight::from_parts(1_150_868, 0u64).saturating_mul(i.into())) + .saturating_add(T::DbWeight::get().reads(4_u64)) + .saturating_add(T::DbWeight::get().writes(3_u64)) } // Storage: Instance1Referendum Stage (r:1 w:1) + // Proof: Instance1Referendum Stage (max_values: Some(1), max_size: Some(94), added: 589, mode: MaxEncodedLen) // Storage: Instance1Referendum Votes (r:1 w:1) + // Proof: Instance1Referendum Votes (max_values: None, max_size: Some(113), added: 2588, mode: MaxEncodedLen) // Storage: Council Candidates (r:1 w:1) + // Proof: Council Candidates (max_values: None, max_size: Some(161), added: 2636, mode: MaxEncodedLen) // Storage: Council AnnouncementPeriodNr (r:1 w:0) + // Proof: Council AnnouncementPeriodNr (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) + /// The range of component `i` is `[0, 2]`. fn reveal_vote_already_existing(i: u32, ) -> Weight { - (46_890_000 as Weight) - // Standard Error: 74_000 - .saturating_add((1_400_000 as Weight).saturating_mul(i as Weight)) - .saturating_add(T::DbWeight::get().reads(4 as Weight)) - .saturating_add(T::DbWeight::get().writes(3 as Weight)) + // Proof Size summary in bytes: + // Measured: `753 + i * (96 ±0)` + // Estimated: `10276` + // Minimum execution time: 40_385 nanoseconds. + Weight::from_parts(42_197_900, 0u64) + .saturating_add(Weight::from_parts(0, 10276)) + // Standard Error: 32_864 + .saturating_add(Weight::from_parts(1_902_509, 0u64).saturating_mul(i.into())) + .saturating_add(T::DbWeight::get().reads(4_u64)) + .saturating_add(T::DbWeight::get().writes(3_u64)) } // Storage: Instance1Referendum Votes (r:1 w:1) + // Proof: Instance1Referendum Votes (max_values: None, max_size: Some(113), added: 2588, mode: MaxEncodedLen) // Storage: Council AnnouncementPeriodNr (r:1 w:0) + // Proof: Council AnnouncementPeriodNr (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) // Storage: Balances Locks (r:1 w:1) + // Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) // Storage: System Account (r:1 w:1) + // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) fn release_vote_stake() -> Weight { - (46_810_000 as Weight) - .saturating_add(T::DbWeight::get().reads(4 as Weight)) - .saturating_add(T::DbWeight::get().writes(3 as Weight)) + // Proof Size summary in bytes: + // Measured: `783` + // Estimated: `13428` + // Minimum execution time: 41_013 nanoseconds. + Weight::from_parts(42_434_000, 0u64) + .saturating_add(Weight::from_parts(0, 13428)) + .saturating_add(T::DbWeight::get().reads(4_u64)) + .saturating_add(T::DbWeight::get().writes(3_u64)) } - // Storage: Instance1Referendum AccountsOptedOut (r:0 w:1) + // Storage: Instance1Referendum AccountsOptedOut (r:1 w:1) + // Proof: Instance1Referendum AccountsOptedOut (max_values: None, max_size: Some(48), added: 2523, mode: MaxEncodedLen) fn opt_out_of_voting() -> Weight { - (22_013_000 as Weight) - .saturating_add(T::DbWeight::get().reads(1 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + // Proof Size summary in bytes: + // Measured: `72` + // Estimated: `3513` + // Minimum execution time: 14_032 nanoseconds. + Weight::from_parts(14_309_000, 0u64) + .saturating_add(Weight::from_parts(0, 3513)) + .saturating_add(T::DbWeight::get().reads(1_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) } } // Default implementation for tests impl WeightInfo for () { fn on_initialize_revealing(i: u32, ) -> Weight { - 0 + Weight::from_parts(0, 0) } fn on_initialize_voting() -> Weight { - 0 + Weight::from_parts(0, 0) } fn vote() -> Weight { - 0 + Weight::from_parts(0, 0) } fn reveal_vote_space_for_new_winner(i: u32, ) -> Weight { - 0 + Weight::from_parts(0, 0) } fn reveal_vote_space_not_in_winners(i: u32, ) -> Weight { - 0 + Weight::from_parts(0, 0) } fn reveal_vote_space_replace_last_winner(i: u32, ) -> Weight { - 0 + Weight::from_parts(0, 0) } fn reveal_vote_already_existing(i: u32, ) -> Weight { - 0 + Weight::from_parts(0, 0) } fn release_vote_stake() -> Weight { - 0 + Weight::from_parts(0, 0) } fn opt_out_of_voting() -> Weight { - 0 + Weight::from_parts(0, 0) } } diff --git a/runtime-modules/staking-handler/Cargo.toml b/runtime-modules/staking-handler/Cargo.toml index baf3cedb07..f5eaf0703d 100644 --- a/runtime-modules/staking-handler/Cargo.toml +++ b/runtime-modules/staking-handler/Cargo.toml @@ -5,20 +5,20 @@ authors = ['Joystream contributors'] edition = '2018' [dependencies] -sp-std = { package = 'sp-std', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -frame-support = { package = 'frame-support', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -frame-system = { package = 'frame-system', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -sp-arithmetic = { package = 'sp-arithmetic', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -pallet-balances = { package = 'pallet-balances', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} +sp-std = { package = 'sp-std', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +frame-support = { package = 'frame-support', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +frame-system = { package = 'frame-system', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +sp-arithmetic = { package = 'sp-arithmetic', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +pallet-balances = { package = 'pallet-balances', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} common = { package = 'pallet-common', default-features = false, path = '../common'} [dev-dependencies] -sp-io = { package = 'sp-io', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -sp-core = { package = 'sp-core', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} +sp-io = { package = 'sp-io', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +sp-core = { package = 'sp-core', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} codec = { package = 'parity-scale-codec', version = '3.1.2', default-features = false, features = ['derive'] } scale-info = { version = "2.1.1", default-features = false, features = ["derive"] } -sp-runtime = { package = 'sp-runtime', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -pallet-timestamp = { package = 'pallet-timestamp', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} +sp-runtime = { package = 'sp-runtime', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +pallet-timestamp = { package = 'pallet-timestamp', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} serde = { version = "1.0.101", features = ["derive"] } [features] diff --git a/runtime-modules/staking-handler/src/lib.rs b/runtime-modules/staking-handler/src/lib.rs index 7fd2684a92..e736e377a9 100644 --- a/runtime-modules/staking-handler/src/lib.rs +++ b/runtime-modules/staking-handler/src/lib.rs @@ -127,7 +127,7 @@ impl< account_id: &::AccountId, amount: Option<::Balance>, ) -> ::Balance { - let locks = pallet_balances::Pallet::::locks(&account_id); + let locks = pallet_balances::Pallet::::locks(account_id); let existing_lock = locks.iter().find(|lock| lock.id == LockId::get()); @@ -180,7 +180,7 @@ impl< } fn is_account_free_of_conflicting_stakes(account_id: &T::AccountId) -> bool { - let locks = >::locks(&account_id); + let locks = >::locks(account_id); let lock_ids: Vec = locks.iter().map(|balance_lock| balance_lock.id).collect(); @@ -201,7 +201,7 @@ impl< fn current_stake( account_id: &::AccountId, ) -> ::Balance { - let locks = >::locks(&account_id); + let locks = >::locks(account_id); let existing_lock = locks.iter().find(|lock| lock.id == LockId::get()); diff --git a/runtime-modules/staking-handler/src/mock.rs b/runtime-modules/staking-handler/src/mock.rs index 5e9ba25c74..e6da8b1896 100644 --- a/runtime-modules/staking-handler/src/mock.rs +++ b/runtime-modules/staking-handler/src/mock.rs @@ -42,8 +42,8 @@ impl frame_system::Config for Test { type BlockWeights = (); type BlockLength = (); type DbWeight = (); - type Origin = Origin; - type Call = Call; + type RuntimeOrigin = RuntimeOrigin; + type RuntimeCall = RuntimeCall; type Index = u64; type BlockNumber = u64; type Hash = H256; @@ -51,7 +51,7 @@ impl frame_system::Config for Test { type AccountId = u64; type Lookup = IdentityLookup; type Header = Header; - type Event = Event; + type RuntimeEvent = RuntimeEvent; type BlockHashCount = ConstU64<250>; type Version = (); type PalletInfo = PalletInfo; @@ -67,7 +67,7 @@ impl frame_system::Config for Test { impl pallet_balances::Config for Test { type Balance = u64; type DustRemoval = (); - type Event = Event; + type RuntimeEvent = RuntimeEvent; type ExistentialDeposit = ExistentialDeposit; type AccountStore = System; type MaxLocks = (); diff --git a/runtime-modules/storage/Cargo.toml b/runtime-modules/storage/Cargo.toml index edd254b623..e01b88424b 100644 --- a/runtime-modules/storage/Cargo.toml +++ b/runtime-modules/storage/Cargo.toml @@ -8,38 +8,38 @@ edition = '2018' serde = { version = "1.0.101", optional = true, features = ["derive"] } codec = { package = 'parity-scale-codec', version = '3.1.2', default-features = false, features = ['derive'] } scale-info = { version = "2.1.1", default-features = false, features = ["derive"] } -sp-std = { package = 'sp-std', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -frame-support = { package = 'frame-support', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -frame-system = { package = 'frame-system', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -sp-arithmetic = { package = 'sp-arithmetic', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -sp-runtime = { package = 'sp-runtime', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -pallet-timestamp = { package = 'pallet-timestamp', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} +sp-std = { package = 'sp-std', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +frame-support = { package = 'frame-support', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +frame-system = { package = 'frame-system', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +sp-arithmetic = { package = 'sp-arithmetic', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +sp-runtime = { package = 'sp-runtime', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +pallet-timestamp = { package = 'pallet-timestamp', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} common = { package = 'pallet-common', default-features = false, path = '../common'} -balances = { package = 'pallet-balances', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} +balances = { package = 'pallet-balances', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} # Benchmarking -frame-benchmarking = { package = 'frame-benchmarking', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522', optional = true} +frame-benchmarking = { package = 'frame-benchmarking', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9', optional = true} working-group = { package = 'pallet-working-group', default-features = false, path = '../working-group', optional = true} -sp-core = { package = 'sp-core', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522', optional = true} +sp-core = { package = 'sp-core', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9', optional = true} membership = { package = 'pallet-membership', default-features = false, optional = true, path = '../membership'} [dev-dependencies] -sp-io = { package = 'sp-io', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -sp-core = { package = 'sp-core', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -balances = { package = 'pallet-balances', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} +sp-io = { package = 'sp-io', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +sp-core = { package = 'sp-core', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +balances = { package = 'pallet-balances', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} staking-handler = { package = 'pallet-staking-handler', default-features = false, path = '../staking-handler'} membership = { package = 'pallet-membership', default-features = false, path = '../membership'} -randomness-collective-flip = { package = 'pallet-randomness-collective-flip', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} +randomness-collective-flip = { package = 'pallet-insecure-randomness-collective-flip', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} derive-fixture = { package = 'derive-fixture', default-features = false, path = '../support/derive-fixture'} derive-new = "0.5" [features] default = ['std'] runtime-benchmarks = [ - "frame-benchmarking", + "frame-benchmarking/runtime-benchmarks", "sp-runtime/runtime-benchmarks", - "working-group", - "membership", + "working-group/runtime-benchmarks", + "membership/runtime-benchmarks", 'sp-core', ] std = [ @@ -55,6 +55,8 @@ std = [ 'common/std', 'scale-info/std', 'working-group/std', + 'frame-benchmarking?/std', ] playground-runtime = [] testing-runtime = [] +try-runtime = [ "frame-support/try-runtime"] diff --git a/runtime-modules/storage/src/benchmarking.rs b/runtime-modules/storage/src/benchmarking.rs index 8a3ffd55d8..ff6554f0a2 100644 --- a/runtime-modules/storage/src/benchmarking.rs +++ b/runtime-modules/storage/src/benchmarking.rs @@ -1,6 +1,6 @@ #![cfg(feature = "runtime-benchmarks")] -use frame_benchmarking::{account, benchmarks}; +use frame_benchmarking::v1::{account, benchmarks}; use frame_support::storage::{StorageDoubleMap, StorageMap, StorageValue}; use frame_support::traits::Instance; use frame_support::traits::{Currency, Get}; @@ -44,9 +44,9 @@ pub const DEFAULT_STORAGE_WORKER_ACCOUNT_ID: u64 = 100002; pub const DEFAULT_DISTRIBUTION_WORKER_ACCOUNT_ID: u64 = 100003; pub const SECOND_WORKER_ACCOUNT_ID: u64 = 1; -fn assert_last_event(generic_event: ::Event) { +fn assert_last_event(generic_event: ::RuntimeEvent) { let events = System::::events(); - let system_event: ::Event = generic_event.into(); + let system_event: ::RuntimeEvent = generic_event.into(); // compare to the last event record let EventRecord { event, .. } = &events[events.len() - 1]; assert_eq!(event, &system_event); @@ -175,7 +175,7 @@ where let (caller_id, member_id) = member_funded_account::(id.saturated_into()); let (opening_id, application_id) = add_and_apply_opening::( - &T::Origin::from(RawOrigin::Root), + &T::RuntimeOrigin::from(RawOrigin::Root), &caller_id, &member_id, &OpeningType::Leader, @@ -211,7 +211,7 @@ where let leader_origin = RawOrigin::Signed(leader_account_id); let (opening_id, application_id) = add_and_apply_opening::( - &T::Origin::from(leader_origin.clone()), + &T::RuntimeOrigin::from(leader_origin.clone()), &caller_id, &member_id, &OpeningType::Regular, @@ -226,7 +226,7 @@ where ) .unwrap(); - assert!(WorkerById::::contains_key(&worker_id)); + assert!(WorkerById::::contains_key(worker_id)); (caller_id, worker_id) } @@ -262,7 +262,7 @@ where } fn add_and_apply_opening, I: Instance>( - add_opening_origin: &T::Origin, + add_opening_origin: &T::RuntimeOrigin, applicant_account_id: &T::AccountId, applicant_member_id: &T::MemberId, job_opening_type: &OpeningType, @@ -276,7 +276,7 @@ fn add_and_apply_opening, I: Instance>( } fn add_opening_helper, I: Instance>( - add_opening_origin: &T::Origin, + add_opening_origin: &T::RuntimeOrigin, job_opening_type: &OpeningType, ) -> OpeningId { working_group::Module::::add_opening( @@ -339,7 +339,7 @@ fn create_storage_bucket_helper(account_id: T::AccountId) -> T::Stora Module::::create_storage_bucket(RawOrigin::Signed(account_id).into(), None, true, 0, 0) .unwrap(); - assert!(>::contains_key(&storage_bucket_id)); + assert!(>::contains_key(storage_bucket_id)); storage_bucket_id } @@ -483,7 +483,7 @@ benchmarks! { }: _ (RawOrigin::Signed(lead_account_id), storage_bucket_id) verify { - assert!(!StorageBucketById::::contains_key(&storage_bucket_id)); + assert!(!StorageBucketById::::contains_key(storage_bucket_id)); assert_last_event::( RawEvent::StorageBucketDeleted(storage_bucket_id).into() ); @@ -595,12 +595,12 @@ benchmarks! { verify { if let Some(cid) = add_cids.iter().next(){ let cid_bounded: Base58Multihash = cid.clone().try_into().unwrap(); - assert!(Blacklist::contains_key(&cid_bounded)); + assert!(Blacklist::contains_key(cid_bounded)); } if let Some(cid) = remove_cids.iter().next(){ let cid_bounded: Base58Multihash = cid.clone().try_into().unwrap(); - assert!(!Blacklist::contains_key(&cid_bounded)); + assert!(!Blacklist::contains_key(cid_bounded)); } assert_last_event::( @@ -617,7 +617,7 @@ benchmarks! { }: _ (RawOrigin::Signed(lead_account_id), None, false, 0, 0) verify { - assert!(StorageBucketById::::contains_key(&storage_bucket_id)); + assert!(StorageBucketById::::contains_key(storage_bucket_id)); assert_last_event::( RawEvent::StorageBucketCreated(storage_bucket_id, None, false, 0, 0).into() ); @@ -987,7 +987,7 @@ benchmarks! { }: _ (RawOrigin::Signed(lead_account_id.clone())) verify { - assert!(DistributionBucketFamilyById::::contains_key(&family_id)); + assert!(DistributionBucketFamilyById::::contains_key(family_id)); assert_last_event::(RawEvent::DistributionBucketFamilyCreated(family_id).into()); } @@ -997,7 +997,7 @@ benchmarks! { }: _ (RawOrigin::Signed(lead_account_id.clone()), family_id) verify { - assert!(!DistributionBucketFamilyById::::contains_key(&family_id)); + assert!(!DistributionBucketFamilyById::::contains_key(family_id)); assert_last_event::(RawEvent::DistributionBucketFamilyDeleted(family_id).into()); } @@ -1010,7 +1010,7 @@ benchmarks! { let bucket_id = Module::::create_distribution_bucket_id(family_id, bucket_idx); }: _ (RawOrigin::Signed(lead_account_id.clone()), family_id, bucket_status) verify { - assert!(DistributionBucketByFamilyIdById::::contains_key(&family_id, &bucket_idx)); + assert!(DistributionBucketByFamilyIdById::::contains_key(family_id, bucket_idx)); assert_last_event::( RawEvent::DistributionBucketCreated(family_id, bucket_status, bucket_id).into() ); @@ -1025,7 +1025,7 @@ benchmarks! { verify { let (family_id, bucket_idx) = (bucket_id.distribution_bucket_family_id, bucket_id.distribution_bucket_index); - let bucket = Module::::distribution_bucket_by_family_id_by_index(&family_id, &bucket_idx); + let bucket = Module::::distribution_bucket_by_family_id_by_index(family_id, bucket_idx); assert_eq!(bucket.accepting_new_bags, new_bucket_status); assert_last_event::( @@ -1041,7 +1041,7 @@ benchmarks! { verify { let (family_id, bucket_idx) = (bucket_id.distribution_bucket_family_id, bucket_id.distribution_bucket_index); - assert!(!DistributionBucketByFamilyIdById::::contains_key(&family_id, &bucket_idx)); + assert!(!DistributionBucketByFamilyIdById::::contains_key(family_id, bucket_idx)); assert_last_event::( RawEvent::DistributionBucketDeleted(bucket_id).into() @@ -1126,7 +1126,7 @@ benchmarks! { verify { let (family_id, bucket_idx) = (bucket_id.distribution_bucket_family_id, bucket_id.distribution_bucket_index); - let bucket = Module::::distribution_bucket_by_family_id_by_index(&family_id, &bucket_idx); + let bucket = Module::::distribution_bucket_by_family_id_by_index(family_id, bucket_idx); assert_eq!(bucket.distributing, distributing); @@ -1171,7 +1171,7 @@ benchmarks! { verify { let (family_id, bucket_idx) = (bucket_id.distribution_bucket_family_id, bucket_id.distribution_bucket_index); - let bucket = Module::::distribution_bucket_by_family_id_by_index(&family_id, &bucket_idx); + let bucket = Module::::distribution_bucket_by_family_id_by_index(family_id, bucket_idx); assert!(bucket.pending_invitations.contains(&worker_id)); @@ -1199,12 +1199,12 @@ benchmarks! { let (family_id, bucket_idx) = (bucket_id.distribution_bucket_family_id, bucket_id.distribution_bucket_index); - let bucket = Module::::distribution_bucket_by_family_id_by_index(&family_id, &bucket_idx); + let bucket = Module::::distribution_bucket_by_family_id_by_index(family_id, bucket_idx); assert!(bucket.pending_invitations.contains(&worker_id)); }: _ (RawOrigin::Signed(lead_account_id.clone()), bucket_id.clone(), worker_id) verify { - let bucket = Module::::distribution_bucket_by_family_id_by_index(&family_id, &bucket_idx); + let bucket = Module::::distribution_bucket_by_family_id_by_index(family_id, bucket_idx); assert!(!bucket.pending_invitations.contains(&worker_id)); assert_last_event::( @@ -1239,12 +1239,12 @@ benchmarks! { let (family_id, bucket_idx) = (bucket_id.distribution_bucket_family_id, bucket_id.distribution_bucket_index); - let bucket = Module::::distribution_bucket_by_family_id_by_index(&family_id, &bucket_idx); + let bucket = Module::::distribution_bucket_by_family_id_by_index(family_id, bucket_idx); assert!(bucket.operators.contains(&worker_id)); }: _ (RawOrigin::Signed(lead_account_id.clone()), bucket_id.clone(), worker_id) verify { - let bucket = Module::::distribution_bucket_by_family_id_by_index(&family_id, &bucket_idx); + let bucket = Module::::distribution_bucket_by_family_id_by_index(family_id, bucket_idx); assert!(!bucket.operators.contains(&worker_id)); assert_last_event::( @@ -1287,7 +1287,7 @@ benchmarks! { verify { let (family_id, bucket_idx) = (bucket_id.distribution_bucket_family_id, bucket_id.distribution_bucket_index); - let bucket = Module::::distribution_bucket_by_family_id_by_index(&family_id, &bucket_idx); + let bucket = Module::::distribution_bucket_by_family_id_by_index(family_id, bucket_idx); assert!(bucket.operators.contains(&worker_id)); assert_last_event::( diff --git a/runtime-modules/storage/src/lib.rs b/runtime-modules/storage/src/lib.rs index 848648ac78..eb389c0474 100644 --- a/runtime-modules/storage/src/lib.rs +++ b/runtime-modules/storage/src/lib.rs @@ -165,7 +165,7 @@ use sp_std::collections::btree_set::BTreeSet; use sp_std::convert::TryInto; use sp_std::iter; use sp_std::marker::PhantomData; -use sp_std::vec::Vec; +use sp_std::{vec, vec::Vec}; use common::bloat_bond::{RepayableBloatBond, RepayableBloatBondOf}; use common::costs::{has_sufficient_balance_for_fees, pay_fee}; @@ -328,7 +328,7 @@ pub trait DataObjectStorage { /// Storage trait. pub trait Config: frame_system::Config + balances::Config + common::MembershipTypes { /// Storage event type. - type Event: From> + Into<::Event>; + type RuntimeEvent: From> + Into<::RuntimeEvent>; /// Content id representation. type ContentId: Parameter + Member + Codec + Default + Copy + MaybeSerialize + Ord + PartialEq; @@ -1705,7 +1705,7 @@ decl_error! { decl_module! { /// _Storage_ substrate module. - pub struct Module for enum Call where origin: T::Origin { + pub struct Module for enum Call where origin: T::RuntimeOrigin { /// Default deposit_event() handler fn deposit_event() = default; @@ -2627,8 +2627,8 @@ decl_module! { // >::remove( - &bucket_id.distribution_bucket_family_id, - &bucket_id.distribution_bucket_index + bucket_id.distribution_bucket_family_id, + bucket_id.distribution_bucket_index ); Self::deposit_event( @@ -3179,7 +3179,7 @@ impl DataObjectStorage for Module { // for object_id in objects.iter() { - DataObjectsById::::swap(&src_bag_id, &object_id, &dest_bag_id, &object_id); + DataObjectsById::::swap(&src_bag_id, object_id, &dest_bag_id, object_id); } // Change source bag. @@ -3319,7 +3319,7 @@ impl DataObjectStorage for Module { } fn get_data_objects_id(bag_id: &BagId) -> BTreeSet { - DataObjectsById::::iter_prefix(&bag_id) + DataObjectsById::::iter_prefix(bag_id) .map(|x| x.0) .collect() } @@ -3530,7 +3530,7 @@ impl Module { for bucket_id in remove_buckets.iter() { ensure!( - >::contains_key(&bucket_id), + >::contains_key(bucket_id), Error::::StorageBucketDoesntExist ); @@ -3672,7 +3672,7 @@ impl Module { voucher_operation: OperationType, ) { // Change bag object and size counters. - Bags::::mutate(&bag_id, |bag| match voucher_operation { + Bags::::mutate(bag_id, |bag| match voucher_operation { OperationType::Increase => { bag.objects_total_size = bag .objects_total_size @@ -3842,19 +3842,19 @@ impl Module { pub(crate) fn static_bag(static_bag_id: &StaticBagId) -> Bag { let bag_id: BagId = static_bag_id.clone().into(); - Self::bag(&bag_id) + Self::bag(bag_id) } // Check the dynamic bag existence. Static bags always exist. fn ensure_bag_exists(bag_id: &BagId) -> Result, DispatchError> { if let BagId::::Dynamic(_) = &bag_id { ensure!( - >::contains_key(&bag_id), + >::contains_key(bag_id), Error::::DynamicBagDoesntExist ); } - Ok(Self::bag(&bag_id)) + Ok(Self::bag(bag_id)) } // Check the storage bucket binding for a bag. @@ -4298,15 +4298,15 @@ impl Module { // Execute storage bucket updates for (id, updated_bucket) in updated_storage_buckets { - StorageBucketById::::insert(&id, updated_bucket.clone()); + StorageBucketById::::insert(id, updated_bucket.clone()); Self::deposit_event(RawEvent::VoucherChanged(id, updated_bucket.voucher.clone())); } // Execute distribution bucket updates for (id, updated_bucket) in updated_distribution_buckets { DistributionBucketByFamilyIdById::::insert( - &id.distribution_bucket_family_id, - &id.distribution_bucket_index, + id.distribution_bucket_family_id, + id.distribution_bucket_index, updated_bucket, ); } @@ -4375,7 +4375,7 @@ impl Module { // Execute storage bucket updates for (id, updated_bucket) in updated_storage_buckets { - StorageBucketById::::insert(&id, updated_bucket.clone()); + StorageBucketById::::insert(id, updated_bucket.clone()); Self::deposit_event(RawEvent::VoucherChanged(id, updated_bucket.voucher.clone())); } @@ -4421,7 +4421,7 @@ impl Module { fn try_performing_bag_removal(account_id: &T::AccountId, bag_id: BagId) -> DispatchResult { let bag = Self::ensure_bag_exists(&bag_id)?; let (remove_objs, remove_objs_size) = Self::validate_objects_to_remove(&bag_id, None)?; - let remove_objs_num = bag.objects_number as u64; + let remove_objs_num = bag.objects_number; // Get updated storage buckets: vouchers and bag counters let updated_storage_buckets = Self::get_updated_storage_buckets_bag_removal( @@ -4439,15 +4439,15 @@ impl Module { // Execute storage bucket updates for (id, updated_bucket) in updated_storage_buckets { - StorageBucketById::::insert(&id, updated_bucket.clone()); + StorageBucketById::::insert(id, updated_bucket.clone()); Self::deposit_event(RawEvent::VoucherChanged(id, updated_bucket.voucher.clone())); } // Execute distribution bucket updates for (id, updated_bucket) in updated_distribution_buckets { DistributionBucketByFamilyIdById::::insert( - &id.distribution_bucket_family_id, - &id.distribution_bucket_index, + id.distribution_bucket_family_id, + id.distribution_bucket_index, updated_bucket, ); } @@ -4541,7 +4541,7 @@ impl Module { .collect::>()?; Ok((objects, total_size)) } else { - let objects = DataObjectsById::::iter_prefix(&bag_id) + let objects = DataObjectsById::::iter_prefix(bag_id) .map(|(id, obj)| { total_size = total_size.saturating_add(obj.size); (id, obj) @@ -4659,3 +4659,10 @@ impl Module { pay_fee::(source, None, amount).map(|_| ()) } } + +impl frame_support::traits::Hooks for Pallet { + #[cfg(feature = "try-runtime")] + fn try_state(_: T::BlockNumber) -> Result<(), &'static str> { + Ok(()) + } +} diff --git a/runtime-modules/storage/src/tests/fixtures.rs b/runtime-modules/storage/src/tests/fixtures.rs index e6ac37c1ec..aaf0952a36 100644 --- a/runtime-modules/storage/src/tests/fixtures.rs +++ b/runtime-modules/storage/src/tests/fixtures.rs @@ -15,7 +15,7 @@ use crate::sp_api_hidden_includes_decl_storage::hidden_include::{ }; use super::mocks::{ - create_cid, Balances, CollectiveFlip, Event as TestEvent, Storage, System, Test, + create_cid, Balances, CollectiveFlip, RuntimeEvent as TestEvent, Storage, System, Test, DEFAULT_DISTRIBUTION_PROVIDER_ACCOUNT_ID, DEFAULT_MEMBER_ACCOUNT_ID, DEFAULT_MEMBER_ID, DEFAULT_STORAGE_BUCKET_OBJECTS_LIMIT, DEFAULT_STORAGE_BUCKET_SIZE_LIMIT, DEFAULT_STORAGE_PROVIDER_ACCOUNT_ID, DISTRIBUTION_WG_LEADER_ACCOUNT_ID, @@ -859,8 +859,8 @@ impl DeleteDynamicBagFixture { .iter() .map(|id| { >::get( - &id.distribution_bucket_family_id, - &id.distribution_bucket_index, + id.distribution_bucket_family_id, + id.distribution_bucket_index, ) }) .clone() @@ -892,8 +892,8 @@ impl DeleteDynamicBagFixture { .iter() .map(|id| { >::get( - &id.distribution_bucket_family_id, - &id.distribution_bucket_index, + id.distribution_bucket_family_id, + id.distribution_bucket_index, ) }) .clone() diff --git a/runtime-modules/storage/src/tests/mocks.rs b/runtime-modules/storage/src/tests/mocks.rs index 68be5354e9..b2041a63d4 100644 --- a/runtime-modules/storage/src/tests/mocks.rs +++ b/runtime-modules/storage/src/tests/mocks.rs @@ -65,8 +65,8 @@ impl frame_system::Config for Test { type BlockWeights = (); type BlockLength = (); type DbWeight = (); - type Origin = Origin; - type Call = Call; + type RuntimeOrigin = RuntimeOrigin; + type RuntimeCall = RuntimeCall; type Index = u64; type BlockNumber = u64; type Hash = H256; @@ -74,7 +74,7 @@ impl frame_system::Config for Test { type AccountId = u64; type Lookup = IdentityLookup; type Header = Header; - type Event = Event; + type RuntimeEvent = RuntimeEvent; type BlockHashCount = ConstU64<250>; type Version = (); type PalletInfo = PalletInfo; @@ -97,7 +97,7 @@ impl pallet_timestamp::Config for Test { impl balances::Config for Test { type Balance = u64; type DustRemoval = (); - type Event = Event; + type RuntimeEvent = RuntimeEvent; type ExistentialDeposit = ExistentialDeposit; type AccountStore = System; type MaxLocks = (); @@ -149,7 +149,7 @@ pub const DEFAULT_STORAGE_BUCKETS_NUMBER: u32 = 3; pub const ONE_MB: u64 = 1_048_576; impl crate::Config for Test { - type Event = Event; + type RuntimeEvent = RuntimeEvent; type DataObjectId = u64; type StorageBucketId = u64; type DistributionBucketIndex = u64; @@ -198,7 +198,7 @@ parameter_types! { // implemented for benchmarks features to work impl working_group::Config for Test { - type Event = Event; + type RuntimeEvent = RuntimeEvent; type MaxWorkerNumberLimit = MaxWorkerNumberLimit; type StakingAccountValidator = membership::Module; type StakingHandler = staking_handler::StakingManager; @@ -212,7 +212,7 @@ impl working_group::Config for Test { // implemented for benchmarks only impl working_group::Config for Test { - type Event = Event; + type RuntimeEvent = RuntimeEvent; type MaxWorkerNumberLimit = MaxWorkerNumberLimit; type StakingAccountValidator = membership::Module; type StakingHandler = staking_handler::StakingManager; @@ -224,9 +224,9 @@ impl working_group::Config for Test { type LeaderOpeningStake = LeaderOpeningStake; } -impl common::membership::MemberOriginValidator for () { +impl common::membership::MemberOriginValidator for () { fn ensure_member_controller_account_origin( - origin: Origin, + origin: RuntimeOrigin, member_id: u64, ) -> Result { let account_id = ensure_signed(origin).unwrap(); @@ -267,13 +267,15 @@ impl common::working_group::WorkingGroupBudgetHandler for MembershipWG impl common::working_group::WorkingGroupAuthenticator for MembershipWG { fn ensure_worker_origin( - _origin: ::Origin, + _origin: ::RuntimeOrigin, _worker_id: &::ActorId, ) -> DispatchResult { unimplemented!() } - fn ensure_leader_origin(_origin: ::Origin) -> DispatchResult { + fn ensure_leader_origin( + _origin: ::RuntimeOrigin, + ) -> DispatchResult { unimplemented!() } @@ -319,7 +321,7 @@ impl LockComparator<::Balance> for Test { } impl membership::Config for Test { - type Event = Event; + type RuntimeEvent = RuntimeEvent; type DefaultMembershipPrice = DefaultMembershipPrice; type DefaultInitialInvitationBalance = DefaultInitialInvitationBalance; type WorkingGroup = MembershipWG; @@ -359,7 +361,7 @@ pub struct DistributionWG; impl common::working_group::WorkingGroupAuthenticator for StorageWG { fn ensure_worker_origin( - origin: ::Origin, + origin: ::RuntimeOrigin, _worker_id: &::ActorId, ) -> DispatchResult { let account_id = ensure_signed(origin)?; @@ -376,7 +378,9 @@ impl common::working_group::WorkingGroupAuthenticator for StorageWG { } } - fn ensure_leader_origin(origin: ::Origin) -> DispatchResult { + fn ensure_leader_origin( + origin: ::RuntimeOrigin, + ) -> DispatchResult { let account_id = ensure_signed(origin)?; ensure!( account_id == STORAGE_WG_LEADER_ACCOUNT_ID, @@ -430,7 +434,7 @@ impl common::working_group::WorkingGroupAuthenticator for StorageWG { impl common::working_group::WorkingGroupAuthenticator for DistributionWG { fn ensure_worker_origin( - origin: ::Origin, + origin: ::RuntimeOrigin, _worker_id: &::ActorId, ) -> DispatchResult { let account_id = ensure_signed(origin)?; @@ -448,7 +452,9 @@ impl common::working_group::WorkingGroupAuthenticator for DistributionWG { } } - fn ensure_leader_origin(origin: ::Origin) -> DispatchResult { + fn ensure_leader_origin( + origin: ::RuntimeOrigin, + ) -> DispatchResult { let account_id = ensure_signed(origin)?; ensure!( diff --git a/runtime-modules/storage/src/tests/mod.rs b/runtime-modules/storage/src/tests/mod.rs index b54408d6c0..d8506ac55b 100644 --- a/runtime-modules/storage/src/tests/mod.rs +++ b/runtime-modules/storage/src/tests/mod.rs @@ -842,12 +842,12 @@ fn upload_succeeded_static_bag_with_data_size_and_deletion_fee() { assert!(>::contains_key( &bag_id, - &data_object_id_1 + data_object_id_1 )); assert!(>::contains_key( &bag_id, - &data_object_id_2 + data_object_id_2 )); assert_eq!( @@ -880,12 +880,12 @@ fn upload_succeeded_static_bag_with_data_size_and_deletion_fee() { assert!(>::contains_key( &bag_id, - &data_object_id_3 + data_object_id_3 )); assert!(>::contains_key( &bag_id, - &data_object_id_4 + data_object_id_4 )); assert_eq!( @@ -956,12 +956,12 @@ fn upload_succeeded_dynamic_bag_with_data_size_and_deletion_fee() { assert!(>::contains_key( &bag_id, - &data_object_id_1 + data_object_id_1 )); assert!(>::contains_key( &bag_id, - &data_object_id_2 + data_object_id_2 )); assert_eq!( @@ -994,12 +994,12 @@ fn upload_succeeded_dynamic_bag_with_data_size_and_deletion_fee() { assert!(>::contains_key( &bag_id, - &data_object_id_3 + data_object_id_3 )); assert!(>::contains_key( &bag_id, - &data_object_id_4 + data_object_id_4 )); assert_eq!( @@ -2105,11 +2105,11 @@ fn move_data_objects_succeeded() { // Pre-checks assert!(>::contains_key( &src_bag_id, - &data_object_id + data_object_id )); assert!(!>::contains_key( &dest_bag_id, - &data_object_id + data_object_id )); MoveDataObjectsFixture::default() @@ -2121,11 +2121,11 @@ fn move_data_objects_succeeded() { // Post-checks assert!(!>::contains_key( &src_bag_id, - &data_object_id + data_object_id )); assert!(>::contains_key( &dest_bag_id, - &data_object_id + data_object_id )); EventFixture::assert_last_crate_event(RawEvent::DataObjectsMoved( @@ -2434,7 +2434,7 @@ fn delete_data_objects_succeeded() { // pre-checks assert!(>::contains_key( &bag_id, - &data_object_id + data_object_id )); assert_eq!( @@ -2455,7 +2455,7 @@ fn delete_data_objects_succeeded() { // post-checks assert!(!>::contains_key( &bag_id, - &data_object_id + data_object_id )); assert_eq!( @@ -2529,7 +2529,7 @@ fn delete_data_objects_succeeded_with_voucher_usage() { EventFixture::contains_crate_event(RawEvent::DataObjectsUploaded( data_object_ids.clone(), - upload_params.clone(), + upload_params, Storage::data_object_state_bloat_bond_value(), )); @@ -2546,7 +2546,7 @@ fn delete_data_objects_succeeded_with_voucher_usage() { assert!(!>::contains_key( &bag_id, - &data_object_id + data_object_id )); //// Post-check voucher @@ -3047,10 +3047,7 @@ fn delete_dynamic_bags_succeeded_with_assigned_distribution_buckets() { let total_distributed_buckets_number = distribution_bucket_ids1.len() + distribution_bucket_ids2.len(); - assert_eq!( - bag.distributed_by.len(), - total_distributed_buckets_number as usize - ); + assert_eq!(bag.distributed_by.len(), total_distributed_buckets_number); let distributed_by_bag = bag.distributed_by; for distribution_bucket_id in distributed_by_bag.as_ref() { @@ -3094,7 +3091,7 @@ fn delete_dynamic_bags_succeeded_with_assigned_storage_buckets() { .call_and_assert(Ok(())); let bag_id: BagId = dynamic_bag_id.clone().into(); - let bag = >::get(&bag_id); + let bag = >::get(bag_id); assert_eq!(bag.stored_by, storage_buckets); @@ -3644,7 +3641,7 @@ fn create_dynamic_bag_succeeded() { fixture.call_and_assert(Ok(())); - let bag_id: BagId = dynamic_bag_id.clone().into(); + let bag_id: BagId = dynamic_bag_id.into(); let bag: crate::Bag = >::get(bag_id); // Check that IDs are within possible range. @@ -3657,10 +3654,7 @@ fn create_dynamic_bag_succeeded() { let total_distributed_buckets_number = distribution_bucket_ids1.len() + distribution_bucket_ids2.len(); - assert_eq!( - bag.distributed_by.len(), - total_distributed_buckets_number as usize - ); + assert_eq!(bag.distributed_by.len(), total_distributed_buckets_number); for distribution_bucket_id in bag.distributed_by.as_ref() { let bucket = Storage::distribution_bucket_by_family_id_by_index( @@ -4042,7 +4036,7 @@ fn create_distribution_bucket_succeeded() { .unwrap(); assert!( - crate::DistributionBucketByFamilyIdById::::contains_key(&family_id, &bucket_id) + crate::DistributionBucketByFamilyIdById::::contains_key(family_id, bucket_id) ); EventFixture::assert_last_crate_event(RawEvent::DistributionBucketCreated( @@ -5625,7 +5619,7 @@ fn unsuccessful_dyn_bag_creation_with_bucket_objects_size_limit_reached() { CreateDynamicBagFixture::default() .with_objects(vec![DataObjectCreationParameters { size: DEFAULT_STORAGE_BUCKET_SIZE_LIMIT + 1, - ipfs_content_id: create_cid(1u32.into()), + ipfs_content_id: create_cid(1u32), }]) .with_storage_buckets(storage_buckets) .call_and_assert(Err( @@ -5646,7 +5640,7 @@ fn unsuccessful_dyn_bag_creation_with_bucket_objects_number_limit_reached() { (0..(DEFAULT_STORAGE_BUCKET_OBJECTS_LIMIT as u32 + 1)) .map(|idx| DataObjectCreationParameters { size: 1, - ipfs_content_id: create_cid(idx.into()), + ipfs_content_id: create_cid(idx), }) .collect(); @@ -6333,7 +6327,7 @@ fn uploading_objects_with_invalid_cid_length_should_fail() { }; UploadFixture::default() - .with_params(upload_params.clone()) + .with_params(upload_params) .call_and_assert(Err(Error::::InvalidCidLength.into())); }) } @@ -6389,8 +6383,8 @@ fn creating_dynamic_bag_with_objects_having_invalid_cid_length_should_fail() { }]; CreateDynamicBagFixture::default() - .with_bag_id(dynamic_bag_id.clone()) - .with_storage_buckets(storage_bucket_ids.clone()) + .with_bag_id(dynamic_bag_id) + .with_storage_buckets(storage_bucket_ids) .with_distribution_buckets( distribution_bucket_ids1 .iter() diff --git a/runtime-modules/storage/src/weights.rs b/runtime-modules/storage/src/weights.rs index a70ba609a5..5e5bc7b1bc 100644 --- a/runtime-modules/storage/src/weights.rs +++ b/runtime-modules/storage/src/weights.rs @@ -18,22 +18,21 @@ //! Autogenerated weights for storage //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-10-20, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("dev"), DB CACHE: 1024 +//! DATE: 2023-11-07, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("prod-test"), DB CACHE: 1024 // Executed Command: -// ./../target/release/joystream-node +// ./scripts/../target/release/joystream-node // benchmark // pallet -// --base-path=/mnt/disks/local-ssd/ // --pallet=storage // --extrinsic=* -// --chain=dev +// --chain=prod-test // --steps=50 // --repeat=20 // --execution=wasm -// --template=./../devops/joystream-pallet-weight-template.hbs -// --output=./../runtime-modules/storage/src/weights.rs +// --template=./scripts/../devops/joystream-pallet-weight-template.hbs +// --output=./scripts/../runtime-modules/storage/src/weights.rs #![cfg_attr(rustfmt, rustfmt_skip)] #![allow(unused_parens)] @@ -86,439 +85,753 @@ pub trait WeightInfo { pub struct SubstrateWeight(PhantomData); impl WeightInfo for SubstrateWeight { // Storage: Instance2WorkingGroup CurrentLead (r:1 w:0) + // Proof: Instance2WorkingGroup CurrentLead (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) // Storage: Instance2WorkingGroup WorkerById (r:1 w:0) + // Proof: Instance2WorkingGroup WorkerById (max_values: None, max_size: Some(175), added: 2650, mode: MaxEncodedLen) // Storage: Storage StorageBucketById (r:1 w:1) + // Proof: Storage StorageBucketById (max_values: None, max_size: Some(106), added: 2581, mode: MaxEncodedLen) fn delete_storage_bucket() -> Weight { - (59_190_000 as Weight) - .saturating_add(T::DbWeight::get().reads(3 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + // Proof Size summary in bytes: + // Measured: `634` + // Estimated: `8704` + // Minimum execution time: 28_250 nanoseconds. + Weight::from_parts(29_580_000, 0u64) + .saturating_add(Weight::from_parts(0, 8704)) + .saturating_add(T::DbWeight::get().reads(3_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) } // Storage: Instance2WorkingGroup CurrentLead (r:1 w:0) + // Proof: Instance2WorkingGroup CurrentLead (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) // Storage: Instance2WorkingGroup WorkerById (r:1 w:0) + // Proof: Instance2WorkingGroup WorkerById (max_values: None, max_size: Some(175), added: 2650, mode: MaxEncodedLen) // Storage: Storage UploadingBlocked (r:0 w:1) + // Proof: Storage UploadingBlocked (max_values: Some(1), max_size: Some(1), added: 496, mode: MaxEncodedLen) fn update_uploading_blocked_status() -> Weight { - (47_190_000 as Weight) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + // Proof Size summary in bytes: + // Measured: `405` + // Estimated: `5133` + // Minimum execution time: 21_644 nanoseconds. + Weight::from_parts(22_123_000, 0u64) + .saturating_add(Weight::from_parts(0, 5133)) + .saturating_add(T::DbWeight::get().reads(2_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) } // Storage: Instance2WorkingGroup CurrentLead (r:1 w:0) + // Proof: Instance2WorkingGroup CurrentLead (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) // Storage: Instance2WorkingGroup WorkerById (r:1 w:0) + // Proof: Instance2WorkingGroup WorkerById (max_values: None, max_size: Some(175), added: 2650, mode: MaxEncodedLen) // Storage: Storage DataObjectPerMegabyteFee (r:0 w:1) + // Proof: Storage DataObjectPerMegabyteFee (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) fn update_data_size_fee() -> Weight { - (47_700_000 as Weight) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + // Proof Size summary in bytes: + // Measured: `405` + // Estimated: `5133` + // Minimum execution time: 21_901 nanoseconds. + Weight::from_parts(22_444_000, 0u64) + .saturating_add(Weight::from_parts(0, 5133)) + .saturating_add(T::DbWeight::get().reads(2_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) } // Storage: Instance2WorkingGroup CurrentLead (r:1 w:0) + // Proof: Instance2WorkingGroup CurrentLead (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) // Storage: Instance2WorkingGroup WorkerById (r:1 w:0) + // Proof: Instance2WorkingGroup WorkerById (max_values: None, max_size: Some(175), added: 2650, mode: MaxEncodedLen) // Storage: Storage StorageBucketsPerBagLimit (r:0 w:1) + // Proof: Storage StorageBucketsPerBagLimit (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) fn update_storage_buckets_per_bag_limit() -> Weight { - (46_990_000 as Weight) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + // Proof Size summary in bytes: + // Measured: `405` + // Estimated: `5133` + // Minimum execution time: 21_414 nanoseconds. + Weight::from_parts(22_834_000, 0u64) + .saturating_add(Weight::from_parts(0, 5133)) + .saturating_add(T::DbWeight::get().reads(2_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) } // Storage: Instance2WorkingGroup CurrentLead (r:1 w:0) + // Proof: Instance2WorkingGroup CurrentLead (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) // Storage: Instance2WorkingGroup WorkerById (r:1 w:0) + // Proof: Instance2WorkingGroup WorkerById (max_values: None, max_size: Some(175), added: 2650, mode: MaxEncodedLen) // Storage: Storage VoucherMaxObjectsSizeLimit (r:0 w:1) + // Proof: Storage VoucherMaxObjectsSizeLimit (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) // Storage: Storage VoucherMaxObjectsNumberLimit (r:0 w:1) + // Proof: Storage VoucherMaxObjectsNumberLimit (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) fn update_storage_buckets_voucher_max_limits() -> Weight { - (49_580_000 as Weight) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) - .saturating_add(T::DbWeight::get().writes(2 as Weight)) + // Proof Size summary in bytes: + // Measured: `405` + // Estimated: `5133` + // Minimum execution time: 22_544 nanoseconds. + Weight::from_parts(23_826_000, 0u64) + .saturating_add(Weight::from_parts(0, 5133)) + .saturating_add(T::DbWeight::get().reads(2_u64)) + .saturating_add(T::DbWeight::get().writes(2_u64)) } // Storage: Instance2WorkingGroup CurrentLead (r:1 w:0) + // Proof: Instance2WorkingGroup CurrentLead (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) // Storage: Instance2WorkingGroup WorkerById (r:1 w:0) + // Proof: Instance2WorkingGroup WorkerById (max_values: None, max_size: Some(175), added: 2650, mode: MaxEncodedLen) // Storage: Storage DataObjectStateBloatBondValue (r:0 w:1) + // Proof: Storage DataObjectStateBloatBondValue (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) fn update_data_object_state_bloat_bond() -> Weight { - (48_090_000 as Weight) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + // Proof Size summary in bytes: + // Measured: `405` + // Estimated: `5133` + // Minimum execution time: 21_724 nanoseconds. + Weight::from_parts(22_606_000, 0u64) + .saturating_add(Weight::from_parts(0, 5133)) + .saturating_add(T::DbWeight::get().reads(2_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) } // Storage: Instance2WorkingGroup CurrentLead (r:1 w:0) + // Proof: Instance2WorkingGroup CurrentLead (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) // Storage: Instance2WorkingGroup WorkerById (r:1 w:0) + // Proof: Instance2WorkingGroup WorkerById (max_values: None, max_size: Some(175), added: 2650, mode: MaxEncodedLen) // Storage: Storage DynamicBagCreationPolicies (r:1 w:1) + // Proof: Storage DynamicBagCreationPolicies (max_values: None, max_size: Some(634), added: 3109, mode: MaxEncodedLen) fn update_number_of_storage_buckets_in_dynamic_bag_creation_policy() -> Weight { - (56_830_000 as Weight) - .saturating_add(T::DbWeight::get().reads(3 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + // Proof Size summary in bytes: + // Measured: `518` + // Estimated: `9232` + // Minimum execution time: 25_844 nanoseconds. + Weight::from_parts(27_226_000, 0u64) + .saturating_add(Weight::from_parts(0, 9232)) + .saturating_add(T::DbWeight::get().reads(3_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) } // Storage: Instance2WorkingGroup CurrentLead (r:1 w:0) + // Proof: Instance2WorkingGroup CurrentLead (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) // Storage: Instance2WorkingGroup WorkerById (r:1 w:0) - // Storage: Storage Blacklist (r:1000 w:0) + // Proof: Instance2WorkingGroup WorkerById (max_values: None, max_size: Some(175), added: 2650, mode: MaxEncodedLen) + // Storage: Storage Blacklist (r:2000 w:1000) + // Proof: Storage Blacklist (max_values: None, max_size: Some(63), added: 2538, mode: MaxEncodedLen) // Storage: Storage CurrentBlacklistSize (r:1 w:1) + // Proof: Storage CurrentBlacklistSize (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) + /// The range of component `i` is `[0, 1000]`. + /// The range of component `j` is `[0, 1000]`. fn update_blacklist(i: u32, j: u32, ) -> Weight { - (0 as Weight) - // Standard Error: 16_000 - .saturating_add((12_736_000 as Weight).saturating_mul(i as Weight)) - // Standard Error: 16_000 - .saturating_add((7_903_000 as Weight).saturating_mul(j as Weight)) - .saturating_add(T::DbWeight::get().reads(3 as Weight)) - .saturating_add(T::DbWeight::get().reads((1 as Weight).saturating_mul(i as Weight))) - .saturating_add(T::DbWeight::get().reads((1 as Weight).saturating_mul(j as Weight))) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) - .saturating_add(T::DbWeight::get().writes((1 as Weight).saturating_mul(i as Weight))) + // Proof Size summary in bytes: + // Measured: `545` + // Estimated: `7616 + i * (2538 ±0) + j * (2538 ±0)` + // Minimum execution time: 1_864_200 nanoseconds. + Weight::from_parts(1_875_446_000, 0u64) + .saturating_add(Weight::from_parts(0, 7616)) + // Standard Error: 22_457 + .saturating_add(Weight::from_parts(2_899_287, 0u64).saturating_mul(i.into())) + // Standard Error: 22_457 + .saturating_add(Weight::from_parts(646_593, 0u64).saturating_mul(j.into())) + .saturating_add(T::DbWeight::get().reads(3_u64)) + .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(i.into()))) + .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(j.into()))) + .saturating_add(T::DbWeight::get().writes(1_u64)) + .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(i.into()))) + .saturating_add(Weight::from_parts(0, 2538).saturating_mul(i.into())) + .saturating_add(Weight::from_parts(0, 2538).saturating_mul(j.into())) } // Storage: Instance2WorkingGroup CurrentLead (r:1 w:0) + // Proof: Instance2WorkingGroup CurrentLead (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) // Storage: Instance2WorkingGroup WorkerById (r:1 w:0) + // Proof: Instance2WorkingGroup WorkerById (max_values: None, max_size: Some(175), added: 2650, mode: MaxEncodedLen) // Storage: Storage VoucherMaxObjectsSizeLimit (r:1 w:0) + // Proof: Storage VoucherMaxObjectsSizeLimit (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) // Storage: Storage VoucherMaxObjectsNumberLimit (r:1 w:0) + // Proof: Storage VoucherMaxObjectsNumberLimit (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) // Storage: Storage NextStorageBucketId (r:1 w:1) + // Proof: Storage NextStorageBucketId (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) // Storage: Storage StorageBucketById (r:0 w:1) + // Proof: Storage StorageBucketById (max_values: None, max_size: Some(106), added: 2581, mode: MaxEncodedLen) fn create_storage_bucket() -> Weight { - (68_680_000 as Weight) - .saturating_add(T::DbWeight::get().reads(5 as Weight)) - .saturating_add(T::DbWeight::get().writes(2 as Weight)) + // Proof Size summary in bytes: + // Measured: `521` + // Estimated: `9612` + // Minimum execution time: 29_761 nanoseconds. + Weight::from_parts(31_002_000, 0u64) + .saturating_add(Weight::from_parts(0, 9612)) + .saturating_add(T::DbWeight::get().reads(5_u64)) + .saturating_add(T::DbWeight::get().writes(2_u64)) } // Storage: Instance2WorkingGroup CurrentLead (r:1 w:0) + // Proof: Instance2WorkingGroup CurrentLead (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) // Storage: Instance2WorkingGroup WorkerById (r:1 w:0) + // Proof: Instance2WorkingGroup WorkerById (max_values: None, max_size: Some(175), added: 2650, mode: MaxEncodedLen) // Storage: Storage Bags (r:1 w:1) + // Proof: Storage Bags (max_values: None, max_size: Some(964), added: 3439, mode: MaxEncodedLen) // Storage: Storage StorageBucketsPerBagLimit (r:1 w:0) - // Storage: Storage StorageBucketById (r:14 w:14) + // Proof: Storage StorageBucketsPerBagLimit (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + // Storage: Storage StorageBucketById (r:26 w:26) + // Proof: Storage StorageBucketById (max_values: None, max_size: Some(106), added: 2581, mode: MaxEncodedLen) + /// The range of component `i` is `[1, 13]`. + /// The range of component `j` is `[1, 13]`. fn update_storage_buckets_for_bag(i: u32, j: u32, ) -> Weight { - (51_139_000 as Weight) - // Standard Error: 147_000 - .saturating_add((42_184_000 as Weight).saturating_mul(i as Weight)) - // Standard Error: 147_000 - .saturating_add((38_449_000 as Weight).saturating_mul(j as Weight)) - .saturating_add(T::DbWeight::get().reads(4 as Weight)) - .saturating_add(T::DbWeight::get().reads((1 as Weight).saturating_mul(i as Weight))) - .saturating_add(T::DbWeight::get().reads((1 as Weight).saturating_mul(j as Weight))) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) - .saturating_add(T::DbWeight::get().writes((1 as Weight).saturating_mul(i as Weight))) - .saturating_add(T::DbWeight::get().writes((1 as Weight).saturating_mul(j as Weight))) + // Proof Size summary in bytes: + // Measured: `635 + i * (73 ±0) + j * (81 ±0)` + // Estimated: `12041 + i * (2581 ±0) + j * (2581 ±0)` + // Minimum execution time: 227_609 nanoseconds. + Weight::from_parts(41_036_350, 0u64) + .saturating_add(Weight::from_parts(0, 12041)) + // Standard Error: 23_573 + .saturating_add(Weight::from_parts(15_050_989, 0u64).saturating_mul(i.into())) + // Standard Error: 23_573 + .saturating_add(Weight::from_parts(13_560_682, 0u64).saturating_mul(j.into())) + .saturating_add(T::DbWeight::get().reads(4_u64)) + .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(i.into()))) + .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(j.into()))) + .saturating_add(T::DbWeight::get().writes(1_u64)) + .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(i.into()))) + .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(j.into()))) + .saturating_add(Weight::from_parts(0, 2581).saturating_mul(i.into())) + .saturating_add(Weight::from_parts(0, 2581).saturating_mul(j.into())) } // Storage: Instance2WorkingGroup CurrentLead (r:1 w:0) + // Proof: Instance2WorkingGroup CurrentLead (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) // Storage: Instance2WorkingGroup WorkerById (r:1 w:0) + // Proof: Instance2WorkingGroup WorkerById (max_values: None, max_size: Some(175), added: 2650, mode: MaxEncodedLen) // Storage: Storage StorageBucketById (r:1 w:1) + // Proof: Storage StorageBucketById (max_values: None, max_size: Some(106), added: 2581, mode: MaxEncodedLen) fn cancel_storage_bucket_operator_invite() -> Weight { - (60_720_000 as Weight) - .saturating_add(T::DbWeight::get().reads(3 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + // Proof Size summary in bytes: + // Measured: `679` + // Estimated: `8704` + // Minimum execution time: 30_562 nanoseconds. + Weight::from_parts(31_738_000, 0u64) + .saturating_add(Weight::from_parts(0, 8704)) + .saturating_add(T::DbWeight::get().reads(3_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) } // Storage: Instance2WorkingGroup CurrentLead (r:1 w:0) + // Proof: Instance2WorkingGroup CurrentLead (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) // Storage: Instance2WorkingGroup WorkerById (r:2 w:0) + // Proof: Instance2WorkingGroup WorkerById (max_values: None, max_size: Some(175), added: 2650, mode: MaxEncodedLen) // Storage: Storage StorageBucketById (r:1 w:1) + // Proof: Storage StorageBucketById (max_values: None, max_size: Some(106), added: 2581, mode: MaxEncodedLen) fn invite_storage_bucket_operator() -> Weight { - (72_611_000 as Weight) - .saturating_add(T::DbWeight::get().reads(4 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + // Proof Size summary in bytes: + // Measured: `800` + // Estimated: `11354` + // Minimum execution time: 34_115 nanoseconds. + Weight::from_parts(35_214_000, 0u64) + .saturating_add(Weight::from_parts(0, 11354)) + .saturating_add(T::DbWeight::get().reads(4_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) } // Storage: Instance2WorkingGroup CurrentLead (r:1 w:0) + // Proof: Instance2WorkingGroup CurrentLead (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) // Storage: Instance2WorkingGroup WorkerById (r:1 w:0) + // Proof: Instance2WorkingGroup WorkerById (max_values: None, max_size: Some(175), added: 2650, mode: MaxEncodedLen) // Storage: Storage StorageBucketById (r:1 w:1) + // Proof: Storage StorageBucketById (max_values: None, max_size: Some(106), added: 2581, mode: MaxEncodedLen) fn remove_storage_bucket_operator() -> Weight { - (60_850_000 as Weight) - .saturating_add(T::DbWeight::get().reads(3 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + // Proof Size summary in bytes: + // Measured: `712` + // Estimated: `8704` + // Minimum execution time: 30_814 nanoseconds. + Weight::from_parts(31_912_000, 0u64) + .saturating_add(Weight::from_parts(0, 8704)) + .saturating_add(T::DbWeight::get().reads(3_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) } // Storage: Instance2WorkingGroup CurrentLead (r:1 w:0) + // Proof: Instance2WorkingGroup CurrentLead (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) // Storage: Instance2WorkingGroup WorkerById (r:1 w:0) + // Proof: Instance2WorkingGroup WorkerById (max_values: None, max_size: Some(175), added: 2650, mode: MaxEncodedLen) // Storage: Storage StorageBucketById (r:1 w:1) + // Proof: Storage StorageBucketById (max_values: None, max_size: Some(106), added: 2581, mode: MaxEncodedLen) fn update_storage_bucket_status() -> Weight { - (61_129_000 as Weight) - .saturating_add(T::DbWeight::get().reads(3 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + // Proof Size summary in bytes: + // Measured: `634` + // Estimated: `8704` + // Minimum execution time: 28_699 nanoseconds. + Weight::from_parts(29_371_000, 0u64) + .saturating_add(Weight::from_parts(0, 8704)) + .saturating_add(T::DbWeight::get().reads(3_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) } // Storage: Instance2WorkingGroup CurrentLead (r:1 w:0) + // Proof: Instance2WorkingGroup CurrentLead (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) // Storage: Instance2WorkingGroup WorkerById (r:1 w:0) + // Proof: Instance2WorkingGroup WorkerById (max_values: None, max_size: Some(175), added: 2650, mode: MaxEncodedLen) // Storage: Storage StorageBucketById (r:1 w:1) + // Proof: Storage StorageBucketById (max_values: None, max_size: Some(106), added: 2581, mode: MaxEncodedLen) // Storage: Storage VoucherMaxObjectsSizeLimit (r:1 w:0) + // Proof: Storage VoucherMaxObjectsSizeLimit (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) // Storage: Storage VoucherMaxObjectsNumberLimit (r:1 w:0) + // Proof: Storage VoucherMaxObjectsNumberLimit (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) fn set_storage_bucket_voucher_limits() -> Weight { - (72_710_000 as Weight) - .saturating_add(T::DbWeight::get().reads(5 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + // Proof Size summary in bytes: + // Measured: `692` + // Estimated: `11690` + // Minimum execution time: 32_613 nanoseconds. + Weight::from_parts(33_928_000, 0u64) + .saturating_add(Weight::from_parts(0, 11690)) + .saturating_add(T::DbWeight::get().reads(5_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) } // Storage: Instance2WorkingGroup WorkerById (r:1 w:0) + // Proof: Instance2WorkingGroup WorkerById (max_values: None, max_size: Some(175), added: 2650, mode: MaxEncodedLen) // Storage: Storage StorageBucketById (r:1 w:1) + // Proof: Storage StorageBucketById (max_values: None, max_size: Some(106), added: 2581, mode: MaxEncodedLen) fn accept_storage_bucket_invitation() -> Weight { - (56_020_000 as Weight) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + // Proof Size summary in bytes: + // Measured: `679` + // Estimated: `7211` + // Minimum execution time: 29_533 nanoseconds. + Weight::from_parts(30_542_000, 0u64) + .saturating_add(Weight::from_parts(0, 7211)) + .saturating_add(T::DbWeight::get().reads(2_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) } // Storage: Instance2WorkingGroup WorkerById (r:1 w:0) + // Proof: Instance2WorkingGroup WorkerById (max_values: None, max_size: Some(175), added: 2650, mode: MaxEncodedLen) // Storage: Storage StorageBucketById (r:1 w:0) + // Proof: Storage StorageBucketById (max_values: None, max_size: Some(106), added: 2581, mode: MaxEncodedLen) + /// The range of component `i` is `[1, 1000]`. fn set_storage_operator_metadata(i: u32, ) -> Weight { - (10_257_000 as Weight) - // Standard Error: 15_000 - .saturating_add((936_000 as Weight).saturating_mul(i as Weight)) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) + // Proof Size summary in bytes: + // Measured: `712` + // Estimated: `7211` + // Minimum execution time: 29_453 nanoseconds. + Weight::from_parts(16_205_898, 0u64) + .saturating_add(Weight::from_parts(0, 7211)) + // Standard Error: 1_368 + .saturating_add(Weight::from_parts(1_110_650, 0u64).saturating_mul(i.into())) + .saturating_add(T::DbWeight::get().reads(2_u64)) } // Storage: Storage StorageBucketById (r:1 w:0) + // Proof: Storage StorageBucketById (max_values: None, max_size: Some(106), added: 2581, mode: MaxEncodedLen) // Storage: Storage Bags (r:1 w:0) - // Storage: Storage DataObjectsById (r:1 w:1) + // Proof: Storage Bags (max_values: None, max_size: Some(964), added: 3439, mode: MaxEncodedLen) + // Storage: Storage DataObjectsById (r:400 w:400) + // Proof: Storage DataObjectsById (max_values: None, max_size: Some(155), added: 2630, mode: MaxEncodedLen) + /// The range of component `i` is `[1, 400]`. fn accept_pending_data_objects(i: u32, ) -> Weight { - (0 as Weight) - // Standard Error: 19_000 - .saturating_add((25_470_000 as Weight).saturating_mul(i as Weight)) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) - .saturating_add(T::DbWeight::get().reads((1 as Weight).saturating_mul(i as Weight))) - .saturating_add(T::DbWeight::get().writes((1 as Weight).saturating_mul(i as Weight))) + // Proof Size summary in bytes: + // Measured: `419 + i * (104 ±0)` + // Estimated: `8990 + i * (2630 ±0)` + // Minimum execution time: 38_120 nanoseconds. + Weight::from_parts(38_662_000, 0u64) + .saturating_add(Weight::from_parts(0, 8990)) + // Standard Error: 36_011 + .saturating_add(Weight::from_parts(11_664_089, 0u64).saturating_mul(i.into())) + .saturating_add(T::DbWeight::get().reads(2_u64)) + .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(i.into()))) + .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(i.into()))) + .saturating_add(Weight::from_parts(0, 2630).saturating_mul(i.into())) } // Storage: Instance9WorkingGroup CurrentLead (r:1 w:0) + // Proof: Instance9WorkingGroup CurrentLead (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) // Storage: Instance9WorkingGroup WorkerById (r:1 w:0) + // Proof: Instance9WorkingGroup WorkerById (max_values: None, max_size: Some(175), added: 2650, mode: MaxEncodedLen) // Storage: Storage DistributionBucketFamilyNumber (r:1 w:1) + // Proof: Storage DistributionBucketFamilyNumber (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) // Storage: Storage NextDistributionBucketFamilyId (r:1 w:1) + // Proof: Storage NextDistributionBucketFamilyId (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) // Storage: Storage DistributionBucketFamilyById (r:0 w:1) + // Proof: Storage DistributionBucketFamilyById (max_values: None, max_size: Some(32), added: 2507, mode: MaxEncodedLen) fn create_distribution_bucket_family() -> Weight { - (65_340_000 as Weight) - .saturating_add(T::DbWeight::get().reads(4 as Weight)) - .saturating_add(T::DbWeight::get().writes(3 as Weight)) + // Proof Size summary in bytes: + // Measured: `485` + // Estimated: `8119` + // Minimum execution time: 28_671 nanoseconds. + Weight::from_parts(29_337_000, 0u64) + .saturating_add(Weight::from_parts(0, 8119)) + .saturating_add(T::DbWeight::get().reads(4_u64)) + .saturating_add(T::DbWeight::get().writes(3_u64)) } // Storage: Instance9WorkingGroup CurrentLead (r:1 w:0) + // Proof: Instance9WorkingGroup CurrentLead (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) // Storage: Instance9WorkingGroup WorkerById (r:1 w:0) + // Proof: Instance9WorkingGroup WorkerById (max_values: None, max_size: Some(175), added: 2650, mode: MaxEncodedLen) // Storage: Storage DistributionBucketFamilyById (r:1 w:1) + // Proof: Storage DistributionBucketFamilyById (max_values: None, max_size: Some(32), added: 2507, mode: MaxEncodedLen) // Storage: Storage DistributionBucketByFamilyIdById (r:1 w:0) + // Proof: Storage DistributionBucketByFamilyIdById (max_values: None, max_size: Some(380), added: 2855, mode: MaxEncodedLen) // Storage: Storage DynamicBagCreationPolicies (r:2 w:0) + // Proof: Storage DynamicBagCreationPolicies (max_values: None, max_size: Some(634), added: 3109, mode: MaxEncodedLen) // Storage: Storage DistributionBucketFamilyNumber (r:1 w:1) + // Proof: Storage DistributionBucketFamilyNumber (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) fn delete_distribution_bucket_family() -> Weight { - (93_540_000 as Weight) - .saturating_add(T::DbWeight::get().reads(7 as Weight)) - .saturating_add(T::DbWeight::get().writes(2 as Weight)) + // Proof Size summary in bytes: + // Measured: `596` + // Estimated: `21176` + // Minimum execution time: 39_967 nanoseconds. + Weight::from_parts(41_453_000, 0u64) + .saturating_add(Weight::from_parts(0, 21176)) + .saturating_add(T::DbWeight::get().reads(7_u64)) + .saturating_add(T::DbWeight::get().writes(2_u64)) } // Storage: Instance9WorkingGroup CurrentLead (r:1 w:0) + // Proof: Instance9WorkingGroup CurrentLead (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) // Storage: Instance9WorkingGroup WorkerById (r:1 w:0) + // Proof: Instance9WorkingGroup WorkerById (max_values: None, max_size: Some(175), added: 2650, mode: MaxEncodedLen) // Storage: Storage DistributionBucketFamilyById (r:1 w:1) + // Proof: Storage DistributionBucketFamilyById (max_values: None, max_size: Some(32), added: 2507, mode: MaxEncodedLen) // Storage: Storage DistributionBucketByFamilyIdById (r:0 w:1) + // Proof: Storage DistributionBucketByFamilyIdById (max_values: None, max_size: Some(380), added: 2855, mode: MaxEncodedLen) fn create_distribution_bucket() -> Weight { - (66_100_000 as Weight) - .saturating_add(T::DbWeight::get().reads(3 as Weight)) - .saturating_add(T::DbWeight::get().writes(2 as Weight)) + // Proof Size summary in bytes: + // Measured: `577` + // Estimated: `8630` + // Minimum execution time: 31_784 nanoseconds. + Weight::from_parts(32_713_000, 0u64) + .saturating_add(Weight::from_parts(0, 8630)) + .saturating_add(T::DbWeight::get().reads(3_u64)) + .saturating_add(T::DbWeight::get().writes(2_u64)) } // Storage: Instance9WorkingGroup CurrentLead (r:1 w:0) + // Proof: Instance9WorkingGroup CurrentLead (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) // Storage: Instance9WorkingGroup WorkerById (r:1 w:0) + // Proof: Instance9WorkingGroup WorkerById (max_values: None, max_size: Some(175), added: 2650, mode: MaxEncodedLen) // Storage: Storage DistributionBucketByFamilyIdById (r:1 w:1) + // Proof: Storage DistributionBucketByFamilyIdById (max_values: None, max_size: Some(380), added: 2855, mode: MaxEncodedLen) fn update_distribution_bucket_status() -> Weight { - (65_691_000 as Weight) - .saturating_add(T::DbWeight::get().reads(3 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + // Proof Size summary in bytes: + // Measured: `639` + // Estimated: `8978` + // Minimum execution time: 31_264 nanoseconds. + Weight::from_parts(32_484_000, 0u64) + .saturating_add(Weight::from_parts(0, 8978)) + .saturating_add(T::DbWeight::get().reads(3_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) } // Storage: Instance9WorkingGroup CurrentLead (r:1 w:0) + // Proof: Instance9WorkingGroup CurrentLead (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) // Storage: Instance9WorkingGroup WorkerById (r:1 w:0) + // Proof: Instance9WorkingGroup WorkerById (max_values: None, max_size: Some(175), added: 2650, mode: MaxEncodedLen) // Storage: Storage DistributionBucketByFamilyIdById (r:1 w:1) + // Proof: Storage DistributionBucketByFamilyIdById (max_values: None, max_size: Some(380), added: 2855, mode: MaxEncodedLen) fn delete_distribution_bucket() -> Weight { - (63_160_000 as Weight) - .saturating_add(T::DbWeight::get().reads(3 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + // Proof Size summary in bytes: + // Measured: `639` + // Estimated: `8978` + // Minimum execution time: 30_730 nanoseconds. + Weight::from_parts(32_093_000, 0u64) + .saturating_add(Weight::from_parts(0, 8978)) + .saturating_add(T::DbWeight::get().reads(3_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) } // Storage: Instance9WorkingGroup CurrentLead (r:1 w:0) + // Proof: Instance9WorkingGroup CurrentLead (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) // Storage: Instance9WorkingGroup WorkerById (r:1 w:0) + // Proof: Instance9WorkingGroup WorkerById (max_values: None, max_size: Some(175), added: 2650, mode: MaxEncodedLen) // Storage: Storage Bags (r:1 w:1) + // Proof: Storage Bags (max_values: None, max_size: Some(964), added: 3439, mode: MaxEncodedLen) // Storage: Storage DistributionBucketFamilyById (r:1 w:0) + // Proof: Storage DistributionBucketFamilyById (max_values: None, max_size: Some(32), added: 2507, mode: MaxEncodedLen) // Storage: Storage DistributionBucketsPerBagLimit (r:1 w:0) - // Storage: Storage DistributionBucketByFamilyIdById (r:52 w:52) + // Proof: Storage DistributionBucketsPerBagLimit (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + // Storage: Storage DistributionBucketByFamilyIdById (r:102 w:102) + // Proof: Storage DistributionBucketByFamilyIdById (max_values: None, max_size: Some(380), added: 2855, mode: MaxEncodedLen) + /// The range of component `i` is `[1, 51]`. + /// The range of component `j` is `[1, 51]`. fn update_distribution_buckets_for_bag(i: u32, j: u32, ) -> Weight { - (53_507_000 as Weight) - // Standard Error: 33_000 - .saturating_add((26_207_000 as Weight).saturating_mul(i as Weight)) - // Standard Error: 33_000 - .saturating_add((26_515_000 as Weight).saturating_mul(j as Weight)) - .saturating_add(T::DbWeight::get().reads(5 as Weight)) - .saturating_add(T::DbWeight::get().reads((1 as Weight).saturating_mul(i as Weight))) - .saturating_add(T::DbWeight::get().reads((1 as Weight).saturating_mul(j as Weight))) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) - .saturating_add(T::DbWeight::get().writes((1 as Weight).saturating_mul(i as Weight))) - .saturating_add(T::DbWeight::get().writes((1 as Weight).saturating_mul(j as Weight))) + // Proof Size summary in bytes: + // Measured: `681 + i * (41 ±0) + j * (57 ±0)` + // Estimated: `15538 + i * (2855 ±0) + j * (2855 ±0)` + // Minimum execution time: 541_099 nanoseconds. + Weight::from_parts(42_944_182, 0u64) + .saturating_add(Weight::from_parts(0, 15538)) + // Standard Error: 22_016 + .saturating_add(Weight::from_parts(9_828_405, 0u64).saturating_mul(i.into())) + // Standard Error: 22_016 + .saturating_add(Weight::from_parts(10_057_128, 0u64).saturating_mul(j.into())) + .saturating_add(T::DbWeight::get().reads(5_u64)) + .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(i.into()))) + .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(j.into()))) + .saturating_add(T::DbWeight::get().writes(1_u64)) + .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(i.into()))) + .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(j.into()))) + .saturating_add(Weight::from_parts(0, 2855).saturating_mul(i.into())) + .saturating_add(Weight::from_parts(0, 2855).saturating_mul(j.into())) } // Storage: Instance9WorkingGroup CurrentLead (r:1 w:0) + // Proof: Instance9WorkingGroup CurrentLead (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) // Storage: Instance9WorkingGroup WorkerById (r:1 w:0) + // Proof: Instance9WorkingGroup WorkerById (max_values: None, max_size: Some(175), added: 2650, mode: MaxEncodedLen) // Storage: Storage DistributionBucketsPerBagLimit (r:0 w:1) + // Proof: Storage DistributionBucketsPerBagLimit (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) fn update_distribution_buckets_per_bag_limit() -> Weight { - (47_520_000 as Weight) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + // Proof Size summary in bytes: + // Measured: `372` + // Estimated: `5133` + // Minimum execution time: 21_344 nanoseconds. + Weight::from_parts(22_186_000, 0u64) + .saturating_add(Weight::from_parts(0, 5133)) + .saturating_add(T::DbWeight::get().reads(2_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) } // Storage: Instance9WorkingGroup CurrentLead (r:1 w:0) + // Proof: Instance9WorkingGroup CurrentLead (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) // Storage: Instance9WorkingGroup WorkerById (r:1 w:0) + // Proof: Instance9WorkingGroup WorkerById (max_values: None, max_size: Some(175), added: 2650, mode: MaxEncodedLen) // Storage: Storage DistributionBucketByFamilyIdById (r:1 w:1) + // Proof: Storage DistributionBucketByFamilyIdById (max_values: None, max_size: Some(380), added: 2855, mode: MaxEncodedLen) fn update_distribution_bucket_mode() -> Weight { - (65_010_000 as Weight) - .saturating_add(T::DbWeight::get().reads(3 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + // Proof Size summary in bytes: + // Measured: `639` + // Estimated: `8978` + // Minimum execution time: 31_408 nanoseconds. + Weight::from_parts(32_702_000, 0u64) + .saturating_add(Weight::from_parts(0, 8978)) + .saturating_add(T::DbWeight::get().reads(3_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) } // Storage: Instance9WorkingGroup CurrentLead (r:1 w:0) + // Proof: Instance9WorkingGroup CurrentLead (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) // Storage: Instance9WorkingGroup WorkerById (r:1 w:0) - // Storage: Storage DistributionBucketFamilyById (r:2 w:0) + // Proof: Instance9WorkingGroup WorkerById (max_values: None, max_size: Some(175), added: 2650, mode: MaxEncodedLen) + // Storage: Storage DistributionBucketFamilyById (r:7 w:0) + // Proof: Storage DistributionBucketFamilyById (max_values: None, max_size: Some(32), added: 2507, mode: MaxEncodedLen) // Storage: Storage DynamicBagCreationPolicies (r:1 w:1) + // Proof: Storage DynamicBagCreationPolicies (max_values: None, max_size: Some(634), added: 3109, mode: MaxEncodedLen) + /// The range of component `i` is `[2, 7]`. fn update_families_in_dynamic_bag_creation_policy(i: u32, ) -> Weight { - (58_048_000 as Weight) - // Standard Error: 72_000 - .saturating_add((12_456_000 as Weight).saturating_mul(i as Weight)) - .saturating_add(T::DbWeight::get().reads(3 as Weight)) - .saturating_add(T::DbWeight::get().reads((1 as Weight).saturating_mul(i as Weight))) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + // Proof Size summary in bytes: + // Measured: `545 + i * (36 ±0)` + // Estimated: `10222 + i * (2507 ±0)` + // Minimum execution time: 36_540 nanoseconds. + Weight::from_parts(29_817_203, 0u64) + .saturating_add(Weight::from_parts(0, 10222)) + // Standard Error: 21_027 + .saturating_add(Weight::from_parts(4_428_774, 0u64).saturating_mul(i.into())) + .saturating_add(T::DbWeight::get().reads(3_u64)) + .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(i.into()))) + .saturating_add(T::DbWeight::get().writes(1_u64)) + .saturating_add(Weight::from_parts(0, 2507).saturating_mul(i.into())) } // Storage: Instance9WorkingGroup CurrentLead (r:1 w:0) + // Proof: Instance9WorkingGroup CurrentLead (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) // Storage: Instance9WorkingGroup WorkerById (r:2 w:0) + // Proof: Instance9WorkingGroup WorkerById (max_values: None, max_size: Some(175), added: 2650, mode: MaxEncodedLen) // Storage: Storage DistributionBucketByFamilyIdById (r:1 w:1) + // Proof: Storage DistributionBucketByFamilyIdById (max_values: None, max_size: Some(380), added: 2855, mode: MaxEncodedLen) fn invite_distribution_bucket_operator() -> Weight { - (77_600_000 as Weight) - .saturating_add(T::DbWeight::get().reads(4 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + // Proof Size summary in bytes: + // Measured: `805` + // Estimated: `11628` + // Minimum execution time: 36_905 nanoseconds. + Weight::from_parts(38_637_000, 0u64) + .saturating_add(Weight::from_parts(0, 11628)) + .saturating_add(T::DbWeight::get().reads(4_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) } // Storage: Instance9WorkingGroup CurrentLead (r:1 w:0) + // Proof: Instance9WorkingGroup CurrentLead (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) // Storage: Instance9WorkingGroup WorkerById (r:1 w:0) + // Proof: Instance9WorkingGroup WorkerById (max_values: None, max_size: Some(175), added: 2650, mode: MaxEncodedLen) // Storage: Storage DistributionBucketByFamilyIdById (r:1 w:1) + // Proof: Storage DistributionBucketByFamilyIdById (max_values: None, max_size: Some(380), added: 2855, mode: MaxEncodedLen) fn cancel_distribution_bucket_operator_invite() -> Weight { - (69_700_000 as Weight) - .saturating_add(T::DbWeight::get().reads(3 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + // Proof Size summary in bytes: + // Measured: `684` + // Estimated: `8978` + // Minimum execution time: 35_132 nanoseconds. + Weight::from_parts(35_884_000, 0u64) + .saturating_add(Weight::from_parts(0, 8978)) + .saturating_add(T::DbWeight::get().reads(3_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) } // Storage: Instance9WorkingGroup CurrentLead (r:1 w:0) + // Proof: Instance9WorkingGroup CurrentLead (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) // Storage: Instance9WorkingGroup WorkerById (r:1 w:0) + // Proof: Instance9WorkingGroup WorkerById (max_values: None, max_size: Some(175), added: 2650, mode: MaxEncodedLen) // Storage: Storage DistributionBucketByFamilyIdById (r:1 w:1) + // Proof: Storage DistributionBucketByFamilyIdById (max_values: None, max_size: Some(380), added: 2855, mode: MaxEncodedLen) fn remove_distribution_bucket_operator() -> Weight { - (68_470_000 as Weight) - .saturating_add(T::DbWeight::get().reads(3 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + // Proof Size summary in bytes: + // Measured: `684` + // Estimated: `8978` + // Minimum execution time: 34_479 nanoseconds. + Weight::from_parts(35_685_000, 0u64) + .saturating_add(Weight::from_parts(0, 8978)) + .saturating_add(T::DbWeight::get().reads(3_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) } // Storage: Instance9WorkingGroup CurrentLead (r:1 w:0) + // Proof: Instance9WorkingGroup CurrentLead (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) // Storage: Instance9WorkingGroup WorkerById (r:1 w:0) + // Proof: Instance9WorkingGroup WorkerById (max_values: None, max_size: Some(175), added: 2650, mode: MaxEncodedLen) // Storage: Storage DistributionBucketFamilyById (r:1 w:0) + // Proof: Storage DistributionBucketFamilyById (max_values: None, max_size: Some(32), added: 2507, mode: MaxEncodedLen) + /// The range of component `i` is `[1, 1000]`. fn set_distribution_bucket_family_metadata(i: u32, ) -> Weight { - (21_512_000 as Weight) - // Standard Error: 16_000 - .saturating_add((923_000 as Weight).saturating_mul(i as Weight)) - .saturating_add(T::DbWeight::get().reads(3 as Weight)) + // Proof Size summary in bytes: + // Measured: `577` + // Estimated: `8630` + // Minimum execution time: 28_188 nanoseconds. + Weight::from_parts(14_830_031, 0u64) + .saturating_add(Weight::from_parts(0, 8630)) + // Standard Error: 1_407 + .saturating_add(Weight::from_parts(1_109_384, 0u64).saturating_mul(i.into())) + .saturating_add(T::DbWeight::get().reads(3_u64)) } // Storage: Instance9WorkingGroup WorkerById (r:1 w:0) + // Proof: Instance9WorkingGroup WorkerById (max_values: None, max_size: Some(175), added: 2650, mode: MaxEncodedLen) // Storage: Storage DistributionBucketByFamilyIdById (r:1 w:1) + // Proof: Storage DistributionBucketByFamilyIdById (max_values: None, max_size: Some(380), added: 2855, mode: MaxEncodedLen) fn accept_distribution_bucket_invitation() -> Weight { - (64_490_000 as Weight) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + // Proof Size summary in bytes: + // Measured: `684` + // Estimated: `7485` + // Minimum execution time: 33_094 nanoseconds. + Weight::from_parts(34_415_000, 0u64) + .saturating_add(Weight::from_parts(0, 7485)) + .saturating_add(T::DbWeight::get().reads(2_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) } // Storage: Instance9WorkingGroup WorkerById (r:1 w:0) + // Proof: Instance9WorkingGroup WorkerById (max_values: None, max_size: Some(175), added: 2650, mode: MaxEncodedLen) // Storage: Storage DistributionBucketByFamilyIdById (r:1 w:0) + // Proof: Storage DistributionBucketByFamilyIdById (max_values: None, max_size: Some(380), added: 2855, mode: MaxEncodedLen) + /// The range of component `i` is `[1, 1000]`. fn set_distribution_operator_metadata(i: u32, ) -> Weight { - (13_871_000 as Weight) - // Standard Error: 17_000 - .saturating_add((951_000 as Weight).saturating_mul(i as Weight)) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) + // Proof Size summary in bytes: + // Measured: `684` + // Estimated: `7485` + // Minimum execution time: 31_392 nanoseconds. + Weight::from_parts(16_692_338, 0u64) + .saturating_add(Weight::from_parts(0, 7485)) + // Standard Error: 1_496 + .saturating_add(Weight::from_parts(1_114_341, 0u64).saturating_mul(i.into())) + .saturating_add(T::DbWeight::get().reads(2_u64)) } // Storage: Instance2WorkingGroup WorkerById (r:1 w:0) + // Proof: Instance2WorkingGroup WorkerById (max_values: None, max_size: Some(175), added: 2650, mode: MaxEncodedLen) // Storage: Storage StorageBucketById (r:1 w:0) + // Proof: Storage StorageBucketById (max_values: None, max_size: Some(106), added: 2581, mode: MaxEncodedLen) + /// The range of component `i` is `[1, 1000]`. fn storage_operator_remark(i: u32, ) -> Weight { - (6_936_000 as Weight) - // Standard Error: 18_000 - .saturating_add((960_000 as Weight).saturating_mul(i as Weight)) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) + // Proof Size summary in bytes: + // Measured: `712` + // Estimated: `7211` + // Minimum execution time: 29_223 nanoseconds. + Weight::from_parts(9_584_685, 0u64) + .saturating_add(Weight::from_parts(0, 7211)) + // Standard Error: 1_719 + .saturating_add(Weight::from_parts(1_130_073, 0u64).saturating_mul(i.into())) + .saturating_add(T::DbWeight::get().reads(2_u64)) } // Storage: Instance9WorkingGroup WorkerById (r:1 w:0) + // Proof: Instance9WorkingGroup WorkerById (max_values: None, max_size: Some(175), added: 2650, mode: MaxEncodedLen) // Storage: Storage DistributionBucketByFamilyIdById (r:1 w:0) + // Proof: Storage DistributionBucketByFamilyIdById (max_values: None, max_size: Some(380), added: 2855, mode: MaxEncodedLen) + /// The range of component `i` is `[1, 1000]`. fn distribution_operator_remark(i: u32, ) -> Weight { - (20_111_000 as Weight) - // Standard Error: 17_000 - .saturating_add((931_000 as Weight).saturating_mul(i as Weight)) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) + // Proof Size summary in bytes: + // Measured: `684` + // Estimated: `7485` + // Minimum execution time: 31_721 nanoseconds. + Weight::from_parts(16_208_127, 0u64) + .saturating_add(Weight::from_parts(0, 7485)) + // Standard Error: 1_540 + .saturating_add(Weight::from_parts(1_123_267, 0u64).saturating_mul(i.into())) + .saturating_add(T::DbWeight::get().reads(2_u64)) } } // Default implementation for tests impl WeightInfo for () { fn delete_storage_bucket() -> Weight { - 0 + Weight::from_parts(0, 0) } fn update_uploading_blocked_status() -> Weight { - 0 + Weight::from_parts(0, 0) } fn update_data_size_fee() -> Weight { - 0 + Weight::from_parts(0, 0) } fn update_storage_buckets_per_bag_limit() -> Weight { - 0 + Weight::from_parts(0, 0) } fn update_storage_buckets_voucher_max_limits() -> Weight { - 0 + Weight::from_parts(0, 0) } fn update_data_object_state_bloat_bond() -> Weight { - 0 + Weight::from_parts(0, 0) } fn update_number_of_storage_buckets_in_dynamic_bag_creation_policy() -> Weight { - 0 + Weight::from_parts(0, 0) } fn update_blacklist(i: u32, j: u32, ) -> Weight { - 0 + Weight::from_parts(0, 0) } fn create_storage_bucket() -> Weight { - 0 + Weight::from_parts(0, 0) } fn update_storage_buckets_for_bag(i: u32, j: u32, ) -> Weight { - 0 + Weight::from_parts(0, 0) } fn cancel_storage_bucket_operator_invite() -> Weight { - 0 + Weight::from_parts(0, 0) } fn invite_storage_bucket_operator() -> Weight { - 0 + Weight::from_parts(0, 0) } fn remove_storage_bucket_operator() -> Weight { - 0 + Weight::from_parts(0, 0) } fn update_storage_bucket_status() -> Weight { - 0 + Weight::from_parts(0, 0) } fn set_storage_bucket_voucher_limits() -> Weight { - 0 + Weight::from_parts(0, 0) } fn accept_storage_bucket_invitation() -> Weight { - 0 + Weight::from_parts(0, 0) } fn set_storage_operator_metadata(i: u32, ) -> Weight { - 0 + Weight::from_parts(0, 0) } fn accept_pending_data_objects(i: u32, ) -> Weight { - 0 + Weight::from_parts(0, 0) } fn create_distribution_bucket_family() -> Weight { - 0 + Weight::from_parts(0, 0) } fn delete_distribution_bucket_family() -> Weight { - 0 + Weight::from_parts(0, 0) } fn create_distribution_bucket() -> Weight { - 0 + Weight::from_parts(0, 0) } fn update_distribution_bucket_status() -> Weight { - 0 + Weight::from_parts(0, 0) } fn delete_distribution_bucket() -> Weight { - 0 + Weight::from_parts(0, 0) } fn update_distribution_buckets_for_bag(i: u32, j: u32, ) -> Weight { - 0 + Weight::from_parts(0, 0) } fn update_distribution_buckets_per_bag_limit() -> Weight { - 0 + Weight::from_parts(0, 0) } fn update_distribution_bucket_mode() -> Weight { - 0 + Weight::from_parts(0, 0) } fn update_families_in_dynamic_bag_creation_policy(i: u32, ) -> Weight { - 0 + Weight::from_parts(0, 0) } fn invite_distribution_bucket_operator() -> Weight { - 0 + Weight::from_parts(0, 0) } fn cancel_distribution_bucket_operator_invite() -> Weight { - 0 + Weight::from_parts(0, 0) } fn remove_distribution_bucket_operator() -> Weight { - 0 + Weight::from_parts(0, 0) } fn set_distribution_bucket_family_metadata(i: u32, ) -> Weight { - 0 + Weight::from_parts(0, 0) } fn accept_distribution_bucket_invitation() -> Weight { - 0 + Weight::from_parts(0, 0) } fn set_distribution_operator_metadata(i: u32, ) -> Weight { - 0 + Weight::from_parts(0, 0) } fn storage_operator_remark(i: u32, ) -> Weight { - 0 + Weight::from_parts(0, 0) } fn distribution_operator_remark(i: u32, ) -> Weight { - 0 + Weight::from_parts(0, 0) } } diff --git a/runtime-modules/utility/Cargo.toml b/runtime-modules/utility/Cargo.toml index ff47756e37..edea30f564 100644 --- a/runtime-modules/utility/Cargo.toml +++ b/runtime-modules/utility/Cargo.toml @@ -1,5 +1,5 @@ [package] -name = 'pallet-utility' +name = 'pallet-joystream-utility' version = '2.0.0' authors = ['Joystream contributors'] edition = '2018' @@ -8,32 +8,32 @@ edition = '2018' serde = { version = "1.0.101", optional = true, features = ["derive"] } codec = { package = 'parity-scale-codec', version = '3.1.2', default-features = false, features = ['derive'] } scale-info = { version = "2.1.1", default-features = false, features = ["derive"] } -sp-std = { package = 'sp-std', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -frame-support = { package = 'frame-support', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -frame_system = { package = 'frame-system', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -sp-runtime = { package = 'sp-runtime', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} +sp-std = { package = 'sp-std', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +frame-support = { package = 'frame-support', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +frame_system = { package = 'frame-system', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +sp-runtime = { package = 'sp-runtime', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} council = { package = 'pallet-council', default-features = false, path = '../council'} common = { package = 'pallet-common', default-features = false, path = '../common'} -balances = { package = 'pallet-balances', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -sp-arithmetic = { package = 'sp-arithmetic', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} +balances = { package = 'pallet-balances', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +sp-arithmetic = { package = 'sp-arithmetic', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} # Benchmarking dependencies -frame-benchmarking = { package = 'frame-benchmarking', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522', optional = true} +frame-benchmarking = { package = 'frame-benchmarking', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9', optional = true} [dev-dependencies] -sp-io = { package = 'sp-io', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -sp-core = { package = 'sp-core', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} +sp-io = { package = 'sp-io', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +sp-core = { package = 'sp-core', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} working-group = { package = 'pallet-working-group', default-features = false, path = '../working-group'} staking-handler = { package = 'pallet-staking-handler', default-features = false, path = '../staking-handler'} referendum = { package = 'pallet-referendum', default-features = false, path = '../referendum'} membership = { package = 'pallet-membership', default-features = false, path = '../membership'} -pallet-timestamp = { package = 'pallet-timestamp', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} +pallet-timestamp = { package = 'pallet-timestamp', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} strum = {version = "0.19", default-features = false} [features] default = ['std'] runtime-benchmarks = [ - "frame-benchmarking", + "frame-benchmarking/runtime-benchmarks", "common/runtime-benchmarks", ] std = [ @@ -49,4 +49,6 @@ std = [ 'sp-arithmetic/std', 'scale-info/std', 'working-group/std', + 'frame-benchmarking?/std', ] +try-runtime = [ "frame-support/try-runtime"] diff --git a/runtime-modules/utility/src/benchmarking.rs b/runtime-modules/utility/src/benchmarking.rs index 55a80891ad..2cb5cfe08d 100644 --- a/runtime-modules/utility/src/benchmarking.rs +++ b/runtime-modules/utility/src/benchmarking.rs @@ -1,16 +1,16 @@ #![cfg(feature = "runtime-benchmarks")] use super::*; -use frame_benchmarking::{account, benchmarks}; +use frame_benchmarking::v1::{account, benchmarks}; use frame_system::Pallet as System; use frame_system::{EventRecord, RawOrigin}; use sp_runtime::traits::One; use sp_std::convert::TryInto; use sp_std::vec; -fn assert_last_event(generic_event: ::Event) { +fn assert_last_event(generic_event: ::RuntimeEvent) { let events = System::::events(); - let system_event: ::Event = generic_event.into(); + let system_event: ::RuntimeEvent = generic_event.into(); // compare to the last event record let EventRecord { event, .. } = &events[events.len() - 1]; assert_eq!(event, &system_event); diff --git a/runtime-modules/utility/src/lib.rs b/runtime-modules/utility/src/lib.rs index de7294a2d4..729dfd0a3d 100644 --- a/runtime-modules/utility/src/lib.rs +++ b/runtime-modules/utility/src/lib.rs @@ -46,23 +46,23 @@ pub use weights::WeightInfo; use common::to_kb; use common::{working_group::WorkingGroup, BalanceKind}; use council::Module as Council; -use frame_support::dispatch::DispatchResultWithPostInfo; +use frame_support::dispatch::{DispatchClass, DispatchResultWithPostInfo}; use frame_support::traits::Get; use frame_support::traits::{Currency, Imbalance}; -use frame_support::weights::{DispatchClass, Weight}; +use frame_support::weights::Weight; use frame_support::{decl_error, decl_event, decl_module, decl_storage, ensure, print}; use frame_system::{ensure_root, ensure_signed}; use sp_arithmetic::traits::Zero; use sp_runtime::traits::Saturating; use sp_runtime::SaturatedConversion; use sp_std::convert::TryInto; -use sp_std::vec::Vec; +use sp_std::{vec, vec::Vec}; type BalanceOf = ::Balance; type Balances = balances::Pallet; pub trait Config: frame_system::Config + balances::Config + council::Config { - type Event: From> + Into<::Event>; + type RuntimeEvent: From> + Into<::RuntimeEvent>; /// Gets the budget of the given WorkingGroup fn get_working_group_budget(working_group: WorkingGroup) -> BalanceOf; @@ -127,7 +127,7 @@ decl_storage! { generate_storage_info } decl_module! { - pub struct Module for enum Call where origin: T::Origin { + pub struct Module for enum Call where origin: T::RuntimeOrigin { fn deposit_event() = default; /// Predefined errors @@ -264,3 +264,10 @@ impl Module { } } } + +impl frame_support::traits::Hooks for Pallet { + #[cfg(feature = "try-runtime")] + fn try_state(_: T::BlockNumber) -> Result<(), &'static str> { + Ok(()) + } +} diff --git a/runtime-modules/utility/src/tests/mocks.rs b/runtime-modules/utility/src/tests/mocks.rs index 079862924f..19ccb71905 100644 --- a/runtime-modules/utility/src/tests/mocks.rs +++ b/runtime-modules/utility/src/tests/mocks.rs @@ -7,7 +7,9 @@ use common::working_group::{WorkingGroup, WorkingGroupBudgetHandler}; use frame_support::{ dispatch::DispatchError, parameter_types, - traits::{ConstU16, ConstU32, ConstU64, EnsureOneOf, LockIdentifier, OnFinalize, OnInitialize}, + traits::{ + ConstU16, ConstU32, ConstU64, EitherOfDiverse, LockIdentifier, OnFinalize, OnInitialize, + }, }; use frame_system::{EnsureRoot, EnsureSigned, EventRecord, RawOrigin}; use sp_core::H256; @@ -20,9 +22,9 @@ use sp_std::convert::{TryFrom, TryInto}; use staking_handler::{LockComparator, StakingManager}; -pub(crate) fn assert_last_event(generic_event: ::Event) { +pub(crate) fn assert_last_event(generic_event: ::RuntimeEvent) { let events = System::events(); - let system_event: ::Event = generic_event; + let system_event: ::RuntimeEvent = generic_event; assert!( !events.is_empty(), "If you are checking for last event there must be at least 1 event" @@ -132,8 +134,8 @@ impl frame_system::Config for Test { type BlockWeights = (); type BlockLength = (); type DbWeight = (); - type Origin = Origin; - type Call = Call; + type RuntimeOrigin = RuntimeOrigin; + type RuntimeCall = RuntimeCall; type Index = u64; type BlockNumber = u64; type Hash = H256; @@ -141,7 +143,7 @@ impl frame_system::Config for Test { type AccountId = u64; type Lookup = IdentityLookup; type Header = Header; - type Event = Event; + type RuntimeEvent = RuntimeEvent; type BlockHashCount = ConstU64<250>; type Version = (); type PalletInfo = PalletInfo; @@ -164,7 +166,7 @@ impl pallet_timestamp::Config for Test { impl balances::Config for Test { type Balance = u64; type DustRemoval = (); - type Event = Event; + type RuntimeEvent = RuntimeEvent; type ExistentialDeposit = ExistentialDeposit; type AccountStore = System; type MaxLocks = (); @@ -174,7 +176,7 @@ impl balances::Config for Test { } impl Config for Test { - type Event = Event; + type RuntimeEvent = RuntimeEvent; type WeightInfo = (); @@ -197,7 +199,7 @@ parameter_types! { } impl membership::Config for Test { - type Event = Event; + type RuntimeEvent = RuntimeEvent; type DefaultMembershipPrice = DefaultMembershipPrice; type WorkingGroup = Wg; type WeightInfo = (); @@ -227,13 +229,15 @@ impl common::working_group::WorkingGroupBudgetHandler for Wg { impl common::working_group::WorkingGroupAuthenticator for Wg { fn ensure_worker_origin( - _origin: ::Origin, + _origin: ::RuntimeOrigin, _worker_id: &::ActorId, ) -> DispatchResult { unimplemented!(); } - fn ensure_leader_origin(_origin: ::Origin) -> DispatchResult { + fn ensure_leader_origin( + _origin: ::RuntimeOrigin, + ) -> DispatchResult { unimplemented!() } @@ -278,7 +282,7 @@ parameter_types! { } impl working_group::Config for Test { - type Event = Event; + type RuntimeEvent = RuntimeEvent; type MaxWorkerNumberLimit = MaxWorkerNumberLimit; type StakingHandler = StakingManager; type StakingAccountValidator = membership::Module; @@ -291,7 +295,7 @@ impl working_group::Config for Test { } impl working_group::Config for Test { - type Event = Event; + type RuntimeEvent = RuntimeEvent; type MaxWorkerNumberLimit = MaxWorkerNumberLimit; type StakingHandler = StakingManager; type StakingAccountValidator = membership::Module; @@ -304,7 +308,7 @@ impl working_group::Config for Test { } impl working_group::Config for Test { - type Event = Event; + type RuntimeEvent = RuntimeEvent; type MaxWorkerNumberLimit = MaxWorkerNumberLimit; type StakingHandler = staking_handler::StakingManager; type StakingAccountValidator = membership::Module; @@ -317,7 +321,7 @@ impl working_group::Config for Test { } impl working_group::Config for Test { - type Event = Event; + type RuntimeEvent = RuntimeEvent; type MaxWorkerNumberLimit = MaxWorkerNumberLimit; type StakingHandler = StakingManager; type StakingAccountValidator = membership::Module; @@ -330,7 +334,7 @@ impl working_group::Config for Test { } impl working_group::Config for Test { - type Event = Event; + type RuntimeEvent = RuntimeEvent; type MaxWorkerNumberLimit = MaxWorkerNumberLimit; type StakingHandler = StakingManager; type StakingAccountValidator = membership::Module; @@ -343,7 +347,7 @@ impl working_group::Config for Test { } impl working_group::Config for Test { - type Event = Event; + type RuntimeEvent = RuntimeEvent; type MaxWorkerNumberLimit = MaxWorkerNumberLimit; type StakingHandler = StakingManager; type StakingAccountValidator = membership::Module; @@ -356,7 +360,7 @@ impl working_group::Config for Test { } impl working_group::Config for Test { - type Event = Event; + type RuntimeEvent = RuntimeEvent; type MaxWorkerNumberLimit = MaxWorkerNumberLimit; type StakingHandler = StakingManager; type StakingAccountValidator = membership::Module; @@ -369,7 +373,7 @@ impl working_group::Config for Test { } impl working_group::Config for Test { - type Event = Event; + type RuntimeEvent = RuntimeEvent; type MaxWorkerNumberLimit = MaxWorkerNumberLimit; type StakingHandler = StakingManager; type StakingAccountValidator = membership::Module; @@ -382,7 +386,7 @@ impl working_group::Config for Test { } impl working_group::Config for Test { - type Event = Event; + type RuntimeEvent = RuntimeEvent; type MaxWorkerNumberLimit = MaxWorkerNumberLimit; type StakingHandler = StakingManager; type StakingAccountValidator = membership::Module; @@ -420,10 +424,11 @@ parameter_types! { } impl referendum::Config for Test { - type Event = Event; + type RuntimeEvent = RuntimeEvent; type MaxSaltLength = MaxSaltLength; type StakingHandler = staking_handler::StakingManager; - type ManagerOrigin = EnsureOneOf, EnsureRoot>; + type ManagerOrigin = + EitherOfDiverse, EnsureRoot>; type VotePower = u64; type VoteStageDuration = VoteStageDuration; type RevealStageDuration = RevealStageDuration; @@ -544,7 +549,7 @@ impl BurnTokensFixture { } impl council::Config for Test { - type Event = Event; + type RuntimeEvent = RuntimeEvent; type Referendum = referendum::Module; type MinNumberOfExtraCandidates = MinNumberOfExtraCandidates; type CouncilSize = CouncilSize; @@ -568,9 +573,9 @@ impl common::StakingAccountValidator for () { } } -impl common::membership::MemberOriginValidator for () { +impl common::membership::MemberOriginValidator for () { fn ensure_member_controller_account_origin( - origin: Origin, + origin: RuntimeOrigin, _: u64, ) -> Result { let account_id = frame_system::ensure_signed(origin)?; @@ -583,8 +588,8 @@ impl common::membership::MemberOriginValidator for () { } } -impl common::council::CouncilOriginValidator for () { - fn ensure_member_consulate(origin: Origin, _: u64) -> DispatchResult { +impl common::council::CouncilOriginValidator for () { + fn ensure_member_consulate(origin: RuntimeOrigin, _: u64) -> DispatchResult { frame_system::ensure_signed(origin)?; Ok(()) diff --git a/runtime-modules/utility/src/weights.rs b/runtime-modules/utility/src/weights.rs index ced011442b..9b6f5d45c2 100644 --- a/runtime-modules/utility/src/weights.rs +++ b/runtime-modules/utility/src/weights.rs @@ -18,22 +18,21 @@ //! Autogenerated weights for joystream_utility //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-10-20, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("dev"), DB CACHE: 1024 +//! DATE: 2023-11-07, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("prod-test"), DB CACHE: 1024 // Executed Command: -// ./../target/release/joystream-node +// ./scripts/../target/release/joystream-node // benchmark // pallet -// --base-path=/mnt/disks/local-ssd/ // --pallet=joystream_utility // --extrinsic=* -// --chain=dev +// --chain=prod-test // --steps=50 // --repeat=20 // --execution=wasm -// --template=./../devops/joystream-pallet-weight-template.hbs -// --output=./../runtime-modules/utility/src/weights.rs +// --template=./scripts/../devops/joystream-pallet-weight-template.hbs +// --output=./scripts/../runtime-modules/utility/src/weights.rs #![cfg_attr(rustfmt, rustfmt_skip)] #![allow(unused_parens)] @@ -54,45 +53,71 @@ pub trait WeightInfo { /// Weights for joystream_utility using the Substrate node and recommended hardware. pub struct SubstrateWeight(PhantomData); impl WeightInfo for SubstrateWeight { + /// The range of component `i` is `[1, 100]`. fn execute_signal_proposal(i: u32, ) -> Weight { - (13_391_000 as Weight) - // Standard Error: 2_000 - .saturating_add((740_000 as Weight).saturating_mul(i as Weight)) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 10_798 nanoseconds. + Weight::from_parts(9_664_524, 0u64) + .saturating_add(Weight::from_parts(0, 0)) + // Standard Error: 1_464 + .saturating_add(Weight::from_parts(1_035_477, 0u64).saturating_mul(i.into())) } // Storage: Instance1WorkingGroup Budget (r:1 w:1) + // Proof: Instance1WorkingGroup Budget (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) // Storage: Council Budget (r:1 w:1) + // Proof: Council Budget (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) fn update_working_group_budget_positive() -> Weight { - (25_120_000 as Weight) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) - .saturating_add(T::DbWeight::get().writes(2 as Weight)) + // Proof Size summary in bytes: + // Measured: `291` + // Estimated: `3002` + // Minimum execution time: 25_485 nanoseconds. + Weight::from_parts(26_531_000, 0u64) + .saturating_add(Weight::from_parts(0, 3002)) + .saturating_add(T::DbWeight::get().reads(2_u64)) + .saturating_add(T::DbWeight::get().writes(2_u64)) } // Storage: Instance1WorkingGroup Budget (r:1 w:1) + // Proof: Instance1WorkingGroup Budget (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) // Storage: Council Budget (r:1 w:1) + // Proof: Council Budget (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) fn update_working_group_budget_negative() -> Weight { - (24_960_000 as Weight) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) - .saturating_add(T::DbWeight::get().writes(2 as Weight)) + // Proof Size summary in bytes: + // Measured: `291` + // Estimated: `3002` + // Minimum execution time: 25_756 nanoseconds. + Weight::from_parts(26_246_000, 0u64) + .saturating_add(Weight::from_parts(0, 3002)) + .saturating_add(T::DbWeight::get().reads(2_u64)) + .saturating_add(T::DbWeight::get().writes(2_u64)) } // Storage: System Account (r:1 w:1) + // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) fn burn_account_tokens() -> Weight { - (37_611_000 as Weight) - .saturating_add(T::DbWeight::get().reads(1 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + // Proof Size summary in bytes: + // Measured: `101` + // Estimated: `3593` + // Minimum execution time: 31_689 nanoseconds. + Weight::from_parts(32_799_000, 0u64) + .saturating_add(Weight::from_parts(0, 3593)) + .saturating_add(T::DbWeight::get().reads(1_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) } } // Default implementation for tests impl WeightInfo for () { fn execute_signal_proposal(i: u32, ) -> Weight { - 0 + Weight::from_parts(0, 0) } fn update_working_group_budget_positive() -> Weight { - 0 + Weight::from_parts(0, 0) } fn update_working_group_budget_negative() -> Weight { - 0 + Weight::from_parts(0, 0) } fn burn_account_tokens() -> Weight { - 0 + Weight::from_parts(0, 0) } } diff --git a/runtime-modules/working-group/Cargo.toml b/runtime-modules/working-group/Cargo.toml index a5bec5eaf8..5c23fa4d8d 100644 --- a/runtime-modules/working-group/Cargo.toml +++ b/runtime-modules/working-group/Cargo.toml @@ -8,23 +8,23 @@ edition = '2018' serde = { version = "1.0.101", optional = true, features = ["derive"] } codec = { package = 'parity-scale-codec', version = '3.1.2', default-features = false, features = ['derive'] } scale-info = { version = "2.1.1", default-features = false, features = ["derive"] } -sp-runtime = { package = 'sp-runtime', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -frame-support = { package = 'frame-support', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -frame-system = { package = 'frame-system', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -sp-arithmetic = { package = 'sp-arithmetic', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -sp-std = { package = 'sp-std', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} +sp-runtime = { package = 'sp-runtime', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +frame-support = { package = 'frame-support', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +frame-system = { package = 'frame-system', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +sp-arithmetic = { package = 'sp-arithmetic', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +sp-std = { package = 'sp-std', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} common = { package = 'pallet-common', default-features = false, path = '../common'} -balances = { package = 'pallet-balances', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} +balances = { package = 'pallet-balances', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} staking-handler = { package = 'pallet-staking-handler', default-features = false, path = '../staking-handler'} # Benchmarking -frame-benchmarking = { package = 'frame-benchmarking', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522', optional = true} +frame-benchmarking = { package = 'frame-benchmarking', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9', optional = true} membership = { package = 'pallet-membership', default-features = false, path = '../membership', optional = true} [dev-dependencies] -sp-io = { package = 'sp-io', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -sp-core = { package = 'sp-core', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -pallet-timestamp = { package = 'pallet-timestamp', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} +sp-io = { package = 'sp-io', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +sp-core = { package = 'sp-core', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +pallet-timestamp = { package = 'pallet-timestamp', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} membership = { package = 'pallet-membership', default-features = false, path = '../membership'} [features] @@ -47,4 +47,5 @@ std = [ 'staking-handler/std', 'membership/std', 'scale-info/std', -] \ No newline at end of file +] +try-runtime = [ "frame-support/try-runtime"] \ No newline at end of file diff --git a/runtime-modules/working-group/src/benchmarking.rs b/runtime-modules/working-group/src/benchmarking.rs index 70543bd8ec..d870b1f7cb 100644 --- a/runtime-modules/working-group/src/benchmarking.rs +++ b/runtime-modules/working-group/src/benchmarking.rs @@ -1,7 +1,7 @@ #![cfg(feature = "runtime-benchmarks")] use super::*; use core::convert::TryInto; -use frame_benchmarking::{account, benchmarks_instance, Zero}; +use frame_benchmarking::v1::{account, benchmarks_instance, Zero}; use frame_support::traits::OnInitialize; use frame_system::EventRecord; use frame_system::Pallet as System; @@ -18,9 +18,9 @@ use membership::Module as Membership; const SEED: u32 = 0; const MAX_KILOBYTES_METADATA: u32 = 100; -fn assert_last_event, I: Instance>(generic_event: >::Event) { +fn assert_last_event, I: Instance>(generic_event: >::RuntimeEvent) { let events = System::::events(); - let system_event: ::Event = generic_event.into(); + let system_event: ::RuntimeEvent = generic_event.into(); // compare to the last event record let EventRecord { event, .. } = &events[events.len() - 1]; assert_eq!(event, &system_event); @@ -32,7 +32,7 @@ fn get_byte(num: u32, byte_number: u8) -> u8 { fn add_opening_helper, I: Instance>( id: u32, - add_opening_origin: &T::Origin, + add_opening_origin: &T::RuntimeOrigin, job_opening_type: &OpeningType, ) -> OpeningId { let staking_policy = StakePolicy { @@ -96,7 +96,7 @@ fn apply_on_opening_helper, I: Instance>( fn add_opening_and_apply_with_multiple_ids + membership::Config, I: Instance>( ids: &[u32], - add_opening_origin: &T::Origin, + add_opening_origin: &T::RuntimeOrigin, job_opening_type: &OpeningType, ) -> (OpeningId, BTreeSet, Vec) { let opening_id = add_opening_helper::(1, add_opening_origin, job_opening_type); @@ -123,7 +123,7 @@ fn add_opening_and_apply_with_multiple_ids + membership::Config, I: fn add_and_apply_opening, I: Instance>( id: u32, - add_opening_origin: &T::Origin, + add_opening_origin: &T::RuntimeOrigin, applicant_id: &T::AccountId, member_id: &T::MemberId, job_opening_type: &OpeningType, @@ -227,7 +227,7 @@ pub fn complete_opening + membership::Config, I: Instance>( let (opening_id, application_id) = add_and_apply_opening::( id, - &T::Origin::from(add_worker_origin.clone()), + &T::RuntimeOrigin::from(add_worker_origin.clone()), caller_id, &member_id, &job_opening_type, @@ -270,7 +270,7 @@ benchmarks_instance! { let (opening_id, successful_application_ids, application_account_id) = add_opening_and_apply_with_multiple_ids::( &(1..i).collect::>(), - &T::Origin::from(RawOrigin::Signed(lead_id.clone())), + &T::RuntimeOrigin::from(RawOrigin::Signed(lead_id.clone())), &OpeningType::Regular ); @@ -355,7 +355,7 @@ benchmarks_instance! { let (opening_id, successful_application_ids, _) = add_opening_and_apply_with_multiple_ids::( &(1..i).collect::>(), - &T::Origin::from(RawOrigin::Signed(lead_id.clone())), + &T::RuntimeOrigin::from(RawOrigin::Signed(lead_id.clone())), &OpeningType::Regular ); @@ -415,7 +415,7 @@ benchmarks_instance! { let (opening_id, successful_application_ids, _) = add_opening_and_apply_with_multiple_ids::( &(1..i).collect::>(), - &T::Origin::from(RawOrigin::Signed(lead_id.clone())), + &T::RuntimeOrigin::from(RawOrigin::Signed(lead_id.clone())), &OpeningType::Regular ); @@ -464,7 +464,7 @@ benchmarks_instance! { let (opening_id, successful_application_ids, _) = add_opening_and_apply_with_multiple_ids::( &(1..i).collect::>(), - &T::Origin::from(RawOrigin::Signed(lead_id.clone())), + &T::RuntimeOrigin::from(RawOrigin::Signed(lead_id.clone())), &OpeningType::Regular ); @@ -511,7 +511,7 @@ benchmarks_instance! { let (lead_account_id, lead_member_id) = member_funded_account::("lead", 0); let opening_id = add_opening_helper::( 0, - &T::Origin::from(RawOrigin::Root), + &T::RuntimeOrigin::from(RawOrigin::Root), &OpeningType::Leader ); @@ -586,7 +586,7 @@ benchmarks_instance! { let (opening_id, successful_application_ids, _) = add_opening_and_apply_with_multiple_ids::( &(1..i).collect::>(), - &T::Origin::from(RawOrigin::Signed(lead_id.clone())), + &T::RuntimeOrigin::from(RawOrigin::Signed(lead_id.clone())), &OpeningType::Regular ); }: fill_opening( @@ -637,7 +637,7 @@ benchmarks_instance! { insert_a_worker::(OpeningType::Leader, 0, None); let opening_id = add_opening_helper::( 1, - &T::Origin::from(RawOrigin::Signed(lead_id.clone())), + &T::RuntimeOrigin::from(RawOrigin::Signed(lead_id.clone())), &OpeningType::Regular ); diff --git a/runtime-modules/working-group/src/checks.rs b/runtime-modules/working-group/src/checks.rs index cacac554c6..ecc7c901fd 100644 --- a/runtime-modules/working-group/src/checks.rs +++ b/runtime-modules/working-group/src/checks.rs @@ -18,7 +18,7 @@ use crate::types::{ApplicationInfo, StakeParameters}; // Check opening: verifies origin and opening type compatibility. pub(crate) fn ensure_origin_for_opening_type, I: Instance>( - origin: T::Origin, + origin: T::RuntimeOrigin, opening_type: OpeningType, ) -> DispatchResult { match opening_type { @@ -34,7 +34,7 @@ pub(crate) fn ensure_origin_for_opening_type, I: Instance>( } pub(crate) fn ensure_stake_for_opening_type, I: Instance>( - origin: T::Origin, + origin: T::RuntimeOrigin, opening_type: OpeningType, ) -> DispatchResult { // Lead needs stake to generate opening @@ -149,7 +149,7 @@ pub(crate) fn ensure_is_lead_account, I: Instance>( // Check leader: ensures origin is signed by the leader. pub(crate) fn ensure_origin_is_active_leader, I: Instance>( - origin: T::Origin, + origin: T::RuntimeOrigin, ) -> DispatchResult { // Ensure is signed let signer = ensure_signed(origin)?; @@ -166,7 +166,7 @@ pub(crate) fn ensure_worker_exists, I: Instance>( // Check worker: ensures the origin contains signed account that belongs to existing worker. pub(crate) fn ensure_worker_signed, I: Instance>( - origin: T::Origin, + origin: T::RuntimeOrigin, worker_id: &WorkerId, ) -> Result, DispatchError> { // Ensure that it is signed @@ -186,7 +186,7 @@ pub(crate) fn ensure_worker_signed, I: Instance>( // Check worker: verifies proper origin for the worker operation. Returns whether the origin is sudo. pub(crate) fn ensure_origin_for_worker_operation, I: Instance>( - origin: T::Origin, + origin: T::RuntimeOrigin, worker_id: WorkerId, ) -> Result { let leader_worker_id = ensure_lead_is_set::()?; diff --git a/runtime-modules/working-group/src/lib.rs b/runtime-modules/working-group/src/lib.rs index 9af7897908..ce7034b460 100644 --- a/runtime-modules/working-group/src/lib.rs +++ b/runtime-modules/working-group/src/lib.rs @@ -71,7 +71,7 @@ use sp_arithmetic::traits::{One, Zero}; use sp_runtime::traits::{Hash, SaturatedConversion, Saturating}; use sp_std::borrow::ToOwned; use sp_std::collections::{btree_map::BTreeMap, btree_set::BTreeSet}; -use sp_std::vec::Vec; +use sp_std::{vec, vec::Vec}; pub use errors::Error; pub use types::*; @@ -92,7 +92,7 @@ pub trait Config: frame_system::Config + balances::Config + common::membership::MembershipTypes { /// _Administration_ event type. - type Event: From> + Into<::Event>; + type RuntimeEvent: From> + Into<::RuntimeEvent>; /// Defines max workers number in the group. type MaxWorkerNumberLimit: Get; @@ -109,7 +109,11 @@ pub trait Config: type StakingAccountValidator: common::StakingAccountValidator; /// Validates member id and origin combination. - type MemberOriginValidator: MemberOriginValidator, Self::AccountId>; + type MemberOriginValidator: MemberOriginValidator< + Self::RuntimeOrigin, + MemberId, + Self::AccountId, + >; /// Defines min unstaking period in the group. type MinUnstakingPeriodLimit: Get; @@ -338,7 +342,7 @@ decl_storage! { generate_storage_info decl_module! { /// _Working group_ substrate module. - pub struct Module, I: Instance=DefaultInstance> for enum Call where origin: T::Origin { + pub struct Module, I: Instance=DefaultInstance> for enum Call where origin: T::RuntimeOrigin { /// Default deposit_event() handler fn deposit_event() = default; @@ -1627,11 +1631,11 @@ impl, I: Instance> Module { impl, I: Instance> common::working_group::WorkingGroupAuthenticator for Module { - fn ensure_worker_origin(origin: T::Origin, worker_id: &WorkerId) -> DispatchResult { + fn ensure_worker_origin(origin: T::RuntimeOrigin, worker_id: &WorkerId) -> DispatchResult { checks::ensure_worker_signed::(origin, worker_id).map(|_| ()) } - fn ensure_leader_origin(origin: T::Origin) -> DispatchResult { + fn ensure_leader_origin(origin: T::RuntimeOrigin) -> DispatchResult { checks::ensure_origin_is_active_leader::(origin) } @@ -1693,3 +1697,10 @@ impl, I: Instance> Ok(()) } } + +impl, I: Instance> frame_support::traits::Hooks for Pallet { + #[cfg(feature = "try-runtime")] + fn try_state(_: T::BlockNumber) -> Result<(), &'static str> { + Ok(()) + } +} diff --git a/runtime-modules/working-group/src/tests/fixtures.rs b/runtime-modules/working-group/src/tests/fixtures.rs index 8e582bf8d9..3f02e457dc 100644 --- a/runtime-modules/working-group/src/tests/fixtures.rs +++ b/runtime-modules/working-group/src/tests/fixtures.rs @@ -7,7 +7,7 @@ use sp_runtime::traits::Hash; use sp_std::collections::{btree_map::BTreeMap, btree_set::BTreeSet}; use super::hiring_workflow::HiringWorkflow; -use super::mock::{Balances, Event, LockId, System, Test, TestWorkingGroup}; +use super::mock::{Balances, LockId, RuntimeEvent, System, Test, TestWorkingGroup}; use crate::types::StakeParameters; use crate::{ Application, ApplyOnOpeningParameters, BalanceOf, Config, DefaultInstance, Opening, @@ -20,7 +20,7 @@ pub fn set_invitation_lock( amount: BalanceOf, ) { ::InvitedMemberStakingHandler::lock_with_reasons( - &who, + who, amount, WithdrawReasons::except(WithdrawReasons::TRANSACTION_PAYMENT), ); @@ -44,12 +44,12 @@ impl EventFixture { DefaultInstance, >, ) { - let converted_event = Event::TestWorkingGroup(expected_raw_event); + let converted_event = RuntimeEvent::TestWorkingGroup(expected_raw_event); Self::assert_last_global_event(converted_event) } - pub fn assert_last_global_event(expected_event: Event) { + pub fn assert_last_global_event(expected_event: RuntimeEvent) { let expected_event = EventRecord { phase: Phase::Initialization, event: expected_event, @@ -75,12 +75,12 @@ impl EventFixture { DefaultInstance, >, ) { - let converted_event = Event::TestWorkingGroup(expected_raw_event); + let converted_event = RuntimeEvent::TestWorkingGroup(expected_raw_event); Self::contains_global_event(converted_event) } - fn contains_global_event(expected_event: Event) { + fn contains_global_event(expected_event: RuntimeEvent) { let expected_event = EventRecord { phase: Phase::Initialization, event: expected_event, diff --git a/runtime-modules/working-group/src/tests/mock.rs b/runtime-modules/working-group/src/tests/mock.rs index 7c354df645..1283c580d6 100644 --- a/runtime-modules/working-group/src/tests/mock.rs +++ b/runtime-modules/working-group/src/tests/mock.rs @@ -49,8 +49,8 @@ impl frame_system::Config for Test { type BlockWeights = (); type BlockLength = (); type DbWeight = (); - type Origin = Origin; - type Call = Call; + type RuntimeOrigin = RuntimeOrigin; + type RuntimeCall = RuntimeCall; type Index = u64; type BlockNumber = u64; type Hash = H256; @@ -58,7 +58,7 @@ impl frame_system::Config for Test { type AccountId = u64; type Lookup = IdentityLookup; type Header = Header; - type Event = Event; + type RuntimeEvent = RuntimeEvent; type BlockHashCount = ConstU64<250>; type Version = (); type PalletInfo = PalletInfo; @@ -81,7 +81,7 @@ impl pallet_timestamp::Config for Test { impl balances::Config for Test { type Balance = u64; type DustRemoval = (); - type Event = Event; + type RuntimeEvent = RuntimeEvent; type ExistentialDeposit = ExistentialDeposit; type AccountStore = System; type MaxLocks = (); @@ -96,7 +96,7 @@ impl common::membership::MembershipTypes for Test { } impl membership::Config for Test { - type Event = Event; + type RuntimeEvent = RuntimeEvent; type DefaultMembershipPrice = DefaultMembershipPrice; type WorkingGroup = Module; type WeightInfo = (); @@ -125,7 +125,7 @@ parameter_types! { } impl Config for Test { - type Event = Event; + type RuntimeEvent = RuntimeEvent; type MaxWorkerNumberLimit = MaxWorkerNumberLimit; type StakingHandler = staking_handler::StakingManager; type StakingAccountValidator = (); @@ -145,9 +145,9 @@ impl common::StakingAccountValidator for () { pub const ACTOR_ORIGIN_ERROR: &str = "Invalid membership"; -impl common::membership::MemberOriginValidator for () { +impl common::membership::MemberOriginValidator for () { fn ensure_member_controller_account_origin( - origin: Origin, + origin: RuntimeOrigin, member_id: u64, ) -> Result { let signed_account_id = frame_system::ensure_signed(origin)?; diff --git a/runtime-modules/working-group/src/weights.rs b/runtime-modules/working-group/src/weights.rs index f402727cf9..1396a7ba66 100644 --- a/runtime-modules/working-group/src/weights.rs +++ b/runtime-modules/working-group/src/weights.rs @@ -18,22 +18,21 @@ //! Autogenerated weights for working_group //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-10-20, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("dev"), DB CACHE: 1024 +//! DATE: 2023-11-06, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("prod-test"), DB CACHE: 1024 // Executed Command: -// ./../target/release/joystream-node +// ./scripts/../target/release/joystream-node // benchmark // pallet -// --base-path=/mnt/disks/local-ssd/ // --pallet=working_group // --extrinsic=* -// --chain=dev +// --chain=prod-test // --steps=50 // --repeat=20 // --execution=wasm -// --template=./../devops/joystream-pallet-weight-template.hbs -// --output=./../runtime-modules/working-group/src/weights.rs +// --template=./scripts/../devops/joystream-pallet-weight-template.hbs +// --output=./scripts/../runtime-modules/working-group/src/weights.rs #![cfg_attr(rustfmt, rustfmt_skip)] #![allow(unused_parens)] @@ -75,334 +74,570 @@ pub trait WeightInfo { /// Weights for working_group using the Substrate node and recommended hardware. pub struct SubstrateWeight(PhantomData); impl WeightInfo for SubstrateWeight { - // Storage: Instance3WorkingGroup WorkerById (r:3 w:2) + // Storage: Instance3WorkingGroup WorkerById (r:31 w:30) + // Proof: Instance3WorkingGroup WorkerById (max_values: None, max_size: Some(175), added: 2650, mode: MaxEncodedLen) // Storage: Instance3WorkingGroup CurrentLead (r:1 w:1) + // Proof: Instance3WorkingGroup CurrentLead (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) // Storage: Instance3WorkingGroup Budget (r:1 w:1) - // Storage: System Account (r:2 w:2) + // Proof: Instance3WorkingGroup Budget (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) + // Storage: System Account (r:30 w:30) + // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) // Storage: Instance3WorkingGroup ActiveWorkerCount (r:1 w:1) - // Storage: Balances Locks (r:2 w:2) + // Proof: Instance3WorkingGroup ActiveWorkerCount (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + // Storage: Balances Locks (r:30 w:30) + // Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) + /// The range of component `i` is `[2, 30]`. fn on_initialize_leaving(i: u32, ) -> Weight { - (26_873_000 as Weight) - // Standard Error: 35_000 - .saturating_add((55_730_000 as Weight).saturating_mul(i as Weight)) - .saturating_add(T::DbWeight::get().reads(4 as Weight)) - .saturating_add(T::DbWeight::get().reads((3 as Weight).saturating_mul(i as Weight))) - .saturating_add(T::DbWeight::get().writes(3 as Weight)) - .saturating_add(T::DbWeight::get().writes((3 as Weight).saturating_mul(i as Weight))) - } - // Storage: Instance3WorkingGroup WorkerById (r:3 w:2) + // Proof Size summary in bytes: + // Measured: `260 + i * (421 ±0)` + // Estimated: `10103 + i * (9027 ±0)` + // Minimum execution time: 115_819 nanoseconds. + Weight::from_parts(29_617_902, 0u64) + .saturating_add(Weight::from_parts(0, 10103)) + // Standard Error: 37_643 + .saturating_add(Weight::from_parts(43_697_977, 0u64).saturating_mul(i.into())) + .saturating_add(T::DbWeight::get().reads(4_u64)) + .saturating_add(T::DbWeight::get().reads((3_u64).saturating_mul(i.into()))) + .saturating_add(T::DbWeight::get().writes(3_u64)) + .saturating_add(T::DbWeight::get().writes((3_u64).saturating_mul(i.into()))) + .saturating_add(Weight::from_parts(0, 9027).saturating_mul(i.into())) + } + // Storage: Instance3WorkingGroup WorkerById (r:31 w:30) + // Proof: Instance3WorkingGroup WorkerById (max_values: None, max_size: Some(175), added: 2650, mode: MaxEncodedLen) // Storage: Instance3WorkingGroup Budget (r:1 w:1) - // Storage: System Account (r:2 w:2) + // Proof: Instance3WorkingGroup Budget (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) + // Storage: System Account (r:30 w:30) + // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + /// The range of component `i` is `[2, 30]`. fn on_initialize_rewarding_with_missing_reward(i: u32, ) -> Weight { - (17_787_000 as Weight) - // Standard Error: 55_000 - .saturating_add((52_759_000 as Weight).saturating_mul(i as Weight)) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) - .saturating_add(T::DbWeight::get().reads((2 as Weight).saturating_mul(i as Weight))) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) - .saturating_add(T::DbWeight::get().writes((2 as Weight).saturating_mul(i as Weight))) - } - // Storage: Instance3WorkingGroup WorkerById (r:3 w:2) + // Proof Size summary in bytes: + // Measured: `246 + i * (310 ±0)` + // Estimated: `6131 + i * (5253 ±0)` + // Minimum execution time: 102_207 nanoseconds. + Weight::from_parts(25_714_361, 0u64) + .saturating_add(Weight::from_parts(0, 6131)) + // Standard Error: 59_085 + .saturating_add(Weight::from_parts(39_012_046, 0u64).saturating_mul(i.into())) + .saturating_add(T::DbWeight::get().reads(2_u64)) + .saturating_add(T::DbWeight::get().reads((2_u64).saturating_mul(i.into()))) + .saturating_add(T::DbWeight::get().writes(1_u64)) + .saturating_add(T::DbWeight::get().writes((2_u64).saturating_mul(i.into()))) + .saturating_add(Weight::from_parts(0, 5253).saturating_mul(i.into())) + } + // Storage: Instance3WorkingGroup WorkerById (r:31 w:30) + // Proof: Instance3WorkingGroup WorkerById (max_values: None, max_size: Some(175), added: 2650, mode: MaxEncodedLen) // Storage: Instance3WorkingGroup Budget (r:1 w:0) + // Proof: Instance3WorkingGroup Budget (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) + /// The range of component `i` is `[2, 30]`. fn on_initialize_rewarding_with_missing_reward_cant_pay(i: u32, ) -> Weight { - (16_415_000 as Weight) - // Standard Error: 33_000 - .saturating_add((23_020_000 as Weight).saturating_mul(i as Weight)) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) - .saturating_add(T::DbWeight::get().reads((1 as Weight).saturating_mul(i as Weight))) - .saturating_add(T::DbWeight::get().writes((1 as Weight).saturating_mul(i as Weight))) - } - // Storage: Instance3WorkingGroup WorkerById (r:3 w:1) + // Proof Size summary in bytes: + // Measured: `230 + i * (162 ±0)` + // Estimated: `5141 + i * (2650 ±0)` + // Minimum execution time: 46_464 nanoseconds. + Weight::from_parts(22_583_340, 0u64) + .saturating_add(Weight::from_parts(0, 5141)) + // Standard Error: 14_440 + .saturating_add(Weight::from_parts(13_697_048, 0u64).saturating_mul(i.into())) + .saturating_add(T::DbWeight::get().reads(2_u64)) + .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(i.into()))) + .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(i.into()))) + .saturating_add(Weight::from_parts(0, 2650).saturating_mul(i.into())) + } + // Storage: Instance3WorkingGroup WorkerById (r:31 w:1) + // Proof: Instance3WorkingGroup WorkerById (max_values: None, max_size: Some(175), added: 2650, mode: MaxEncodedLen) // Storage: Instance3WorkingGroup Budget (r:1 w:1) - // Storage: System Account (r:2 w:2) + // Proof: Instance3WorkingGroup Budget (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) + // Storage: System Account (r:30 w:30) + // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + /// The range of component `i` is `[2, 30]`. fn on_initialize_rewarding_without_missing_reward(i: u32, ) -> Weight { - (38_161_000 as Weight) - // Standard Error: 33_000 - .saturating_add((33_132_000 as Weight).saturating_mul(i as Weight)) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) - .saturating_add(T::DbWeight::get().reads((2 as Weight).saturating_mul(i as Weight))) - .saturating_add(T::DbWeight::get().writes(2 as Weight)) - .saturating_add(T::DbWeight::get().writes((1 as Weight).saturating_mul(i as Weight))) + // Proof Size summary in bytes: + // Measured: `262 + i * (294 ±0)` + // Estimated: `6131 + i * (5253 ±0)` + // Minimum execution time: 83_720 nanoseconds. + Weight::from_parts(43_603_454, 0u64) + .saturating_add(Weight::from_parts(0, 6131)) + // Standard Error: 34_868 + .saturating_add(Weight::from_parts(21_565_895, 0u64).saturating_mul(i.into())) + .saturating_add(T::DbWeight::get().reads(2_u64)) + .saturating_add(T::DbWeight::get().reads((2_u64).saturating_mul(i.into()))) + .saturating_add(T::DbWeight::get().writes(2_u64)) + .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(i.into()))) + .saturating_add(Weight::from_parts(0, 5253).saturating_mul(i.into())) } // Storage: Membership MembershipById (r:1 w:0) + // Proof: Membership MembershipById (max_values: None, max_size: Some(125), added: 2600, mode: MaxEncodedLen) // Storage: Instance3WorkingGroup OpeningById (r:1 w:0) + // Proof: Instance3WorkingGroup OpeningById (max_values: None, max_size: Some(114), added: 2589, mode: MaxEncodedLen) // Storage: Membership StakingAccountIdMemberStatus (r:1 w:0) + // Proof: Membership StakingAccountIdMemberStatus (max_values: None, max_size: Some(57), added: 2532, mode: MaxEncodedLen) // Storage: Balances Locks (r:1 w:1) + // Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) // Storage: System Account (r:1 w:1) + // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) // Storage: Instance3WorkingGroup NextApplicationId (r:1 w:1) + // Proof: Instance3WorkingGroup NextApplicationId (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) // Storage: Instance3WorkingGroup ApplicationById (r:0 w:1) + // Proof: Instance3WorkingGroup ApplicationById (max_values: None, max_size: Some(168), added: 2643, mode: MaxEncodedLen) + /// The range of component `i` is `[1, 100]`. fn apply_on_opening(i: u32, ) -> Weight { - (60_759_000 as Weight) - // Standard Error: 3_000 - .saturating_add((1_699_000 as Weight).saturating_mul(i as Weight)) - .saturating_add(T::DbWeight::get().reads(6 as Weight)) - .saturating_add(T::DbWeight::get().writes(4 as Weight)) + // Proof Size summary in bytes: + // Measured: `730` + // Estimated: `20541` + // Minimum execution time: 58_925 nanoseconds. + Weight::from_parts(57_796_865, 0u64) + .saturating_add(Weight::from_parts(0, 20541)) + // Standard Error: 1_731 + .saturating_add(Weight::from_parts(1_961_679, 0u64).saturating_mul(i.into())) + .saturating_add(T::DbWeight::get().reads(6_u64)) + .saturating_add(T::DbWeight::get().writes(4_u64)) } // Storage: Instance3WorkingGroup OpeningById (r:1 w:1) + // Proof: Instance3WorkingGroup OpeningById (max_values: None, max_size: Some(114), added: 2589, mode: MaxEncodedLen) // Storage: Instance3WorkingGroup ActiveWorkerCount (r:1 w:1) + // Proof: Instance3WorkingGroup ActiveWorkerCount (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) // Storage: Instance3WorkingGroup CurrentLead (r:1 w:1) + // Proof: Instance3WorkingGroup CurrentLead (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) // Storage: Instance3WorkingGroup ApplicationById (r:1 w:1) + // Proof: Instance3WorkingGroup ApplicationById (max_values: None, max_size: Some(168), added: 2643, mode: MaxEncodedLen) // Storage: Instance3WorkingGroup NextWorkerId (r:1 w:1) + // Proof: Instance3WorkingGroup NextWorkerId (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) // Storage: Instance3WorkingGroup WorkerById (r:0 w:1) + // Proof: Instance3WorkingGroup WorkerById (max_values: None, max_size: Some(175), added: 2650, mode: MaxEncodedLen) fn fill_opening_lead() -> Weight { - (49_500_000 as Weight) - .saturating_add(T::DbWeight::get().reads(5 as Weight)) - .saturating_add(T::DbWeight::get().writes(6 as Weight)) + // Proof Size summary in bytes: + // Measured: `389` + // Estimated: `11687` + // Minimum execution time: 43_224 nanoseconds. + Weight::from_parts(45_020_000, 0u64) + .saturating_add(Weight::from_parts(0, 11687)) + .saturating_add(T::DbWeight::get().reads(5_u64)) + .saturating_add(T::DbWeight::get().writes(6_u64)) } // Storage: Instance3WorkingGroup OpeningById (r:1 w:1) + // Proof: Instance3WorkingGroup OpeningById (max_values: None, max_size: Some(114), added: 2589, mode: MaxEncodedLen) // Storage: Instance3WorkingGroup CurrentLead (r:1 w:0) - // Storage: Instance3WorkingGroup WorkerById (r:1 w:1) + // Proof: Instance3WorkingGroup CurrentLead (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) + // Storage: Instance3WorkingGroup WorkerById (r:1 w:29) + // Proof: Instance3WorkingGroup WorkerById (max_values: None, max_size: Some(175), added: 2650, mode: MaxEncodedLen) // Storage: Instance3WorkingGroup ActiveWorkerCount (r:1 w:1) - // Storage: Instance3WorkingGroup ApplicationById (r:1 w:1) + // Proof: Instance3WorkingGroup ActiveWorkerCount (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + // Storage: Instance3WorkingGroup ApplicationById (r:29 w:29) + // Proof: Instance3WorkingGroup ApplicationById (max_values: None, max_size: Some(168), added: 2643, mode: MaxEncodedLen) // Storage: Balances Locks (r:1 w:1) + // Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) // Storage: System Account (r:1 w:1) + // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) // Storage: Instance3WorkingGroup NextWorkerId (r:1 w:1) + // Proof: Instance3WorkingGroup NextWorkerId (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) + /// The range of component `i` is `[2, 30]`. fn fill_opening_worker(i: u32, ) -> Weight { - (51_093_000 as Weight) - // Standard Error: 19_000 - .saturating_add((15_263_000 as Weight).saturating_mul(i as Weight)) - .saturating_add(T::DbWeight::get().reads(6 as Weight)) - .saturating_add(T::DbWeight::get().reads((1 as Weight).saturating_mul(i as Weight))) - .saturating_add(T::DbWeight::get().writes(3 as Weight)) - .saturating_add(T::DbWeight::get().writes((2 as Weight).saturating_mul(i as Weight))) + // Proof Size summary in bytes: + // Measured: `763 + i * (186 ±0)` + // Estimated: `23684 + i * (2378 ±6)` + // Minimum execution time: 73_277 nanoseconds. + Weight::from_parts(50_771_725, 0u64) + .saturating_add(Weight::from_parts(0, 23684)) + // Standard Error: 17_657 + .saturating_add(Weight::from_parts(13_760_397, 0u64).saturating_mul(i.into())) + .saturating_add(T::DbWeight::get().reads(6_u64)) + .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(i.into()))) + .saturating_add(T::DbWeight::get().writes(3_u64)) + .saturating_add(T::DbWeight::get().writes((2_u64).saturating_mul(i.into()))) + .saturating_add(Weight::from_parts(0, 2378).saturating_mul(i.into())) } // Storage: Instance3WorkingGroup WorkerById (r:1 w:1) + // Proof: Instance3WorkingGroup WorkerById (max_values: None, max_size: Some(175), added: 2650, mode: MaxEncodedLen) // Storage: Membership MembershipById (r:1 w:0) + // Proof: Membership MembershipById (max_values: None, max_size: Some(125), added: 2600, mode: MaxEncodedLen) fn update_role_account() -> Weight { - (28_550_000 as Weight) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + // Proof Size summary in bytes: + // Measured: `641` + // Estimated: `7230` + // Minimum execution time: 26_157 nanoseconds. + Weight::from_parts(27_167_000, 0u64) + .saturating_add(Weight::from_parts(0, 7230)) + .saturating_add(T::DbWeight::get().reads(2_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) } // Storage: Instance3WorkingGroup OpeningById (r:1 w:1) + // Proof: Instance3WorkingGroup OpeningById (max_values: None, max_size: Some(114), added: 2589, mode: MaxEncodedLen) // Storage: Instance3WorkingGroup CurrentLead (r:1 w:0) + // Proof: Instance3WorkingGroup CurrentLead (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) // Storage: Instance3WorkingGroup WorkerById (r:1 w:0) + // Proof: Instance3WorkingGroup WorkerById (max_values: None, max_size: Some(175), added: 2650, mode: MaxEncodedLen) // Storage: Balances Locks (r:1 w:1) + // Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) // Storage: System Account (r:1 w:1) + // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) fn cancel_opening() -> Weight { - (57_880_000 as Weight) - .saturating_add(T::DbWeight::get().reads(5 as Weight)) - .saturating_add(T::DbWeight::get().writes(3 as Weight)) + // Proof Size summary in bytes: + // Measured: `826` + // Estimated: `17069` + // Minimum execution time: 51_771 nanoseconds. + Weight::from_parts(53_617_000, 0u64) + .saturating_add(Weight::from_parts(0, 17069)) + .saturating_add(T::DbWeight::get().reads(5_u64)) + .saturating_add(T::DbWeight::get().writes(3_u64)) } // Storage: Instance3WorkingGroup ApplicationById (r:1 w:1) + // Proof: Instance3WorkingGroup ApplicationById (max_values: None, max_size: Some(168), added: 2643, mode: MaxEncodedLen) // Storage: Balances Locks (r:1 w:1) + // Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) // Storage: System Account (r:1 w:1) + // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) fn withdraw_application() -> Weight { - (37_370_000 as Weight) - .saturating_add(T::DbWeight::get().reads(3 as Weight)) - .saturating_add(T::DbWeight::get().writes(3 as Weight)) + // Proof Size summary in bytes: + // Measured: `551` + // Estimated: `11990` + // Minimum execution time: 33_956 nanoseconds. + Weight::from_parts(35_192_000, 0u64) + .saturating_add(Weight::from_parts(0, 11990)) + .saturating_add(T::DbWeight::get().reads(3_u64)) + .saturating_add(T::DbWeight::get().writes(3_u64)) } // Storage: Instance3WorkingGroup CurrentLead (r:1 w:0) + // Proof: Instance3WorkingGroup CurrentLead (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) // Storage: Instance3WorkingGroup WorkerById (r:2 w:0) + // Proof: Instance3WorkingGroup WorkerById (max_values: None, max_size: Some(175), added: 2650, mode: MaxEncodedLen) // Storage: Balances Locks (r:1 w:1) + // Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) // Storage: System Account (r:1 w:1) + // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + /// The range of component `i` is `[0, 100]`. fn slash_stake(i: u32, ) -> Weight { - (77_648_000 as Weight) - // Standard Error: 1_000 - .saturating_add((660_000 as Weight).saturating_mul(i as Weight)) - .saturating_add(T::DbWeight::get().reads(5 as Weight)) - .saturating_add(T::DbWeight::get().writes(2 as Weight)) + // Proof Size summary in bytes: + // Measured: `833` + // Estimated: `16140` + // Minimum execution time: 68_138 nanoseconds. + Weight::from_parts(71_029_489, 0u64) + .saturating_add(Weight::from_parts(0, 16140)) + // Standard Error: 2_465 + .saturating_add(Weight::from_parts(800_109, 0u64).saturating_mul(i.into())) + .saturating_add(T::DbWeight::get().reads(5_u64)) + .saturating_add(T::DbWeight::get().writes(2_u64)) } // Storage: Instance3WorkingGroup CurrentLead (r:1 w:0) + // Proof: Instance3WorkingGroup CurrentLead (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) // Storage: Instance3WorkingGroup WorkerById (r:2 w:1) + // Proof: Instance3WorkingGroup WorkerById (max_values: None, max_size: Some(175), added: 2650, mode: MaxEncodedLen) // Storage: Balances Locks (r:1 w:1) + // Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) // Storage: System Account (r:1 w:1) + // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) // Storage: Instance3WorkingGroup Budget (r:1 w:1) + // Proof: Instance3WorkingGroup Budget (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) // Storage: Instance3WorkingGroup ActiveWorkerCount (r:1 w:1) + // Proof: Instance3WorkingGroup ActiveWorkerCount (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// The range of component `i` is `[0, 100]`. fn terminate_role_worker(i: u32, ) -> Weight { - (122_568_000 as Weight) - // Standard Error: 5_000 - .saturating_add((1_271_000 as Weight).saturating_mul(i as Weight)) - .saturating_add(T::DbWeight::get().reads(7 as Weight)) - .saturating_add(T::DbWeight::get().writes(5 as Weight)) + // Proof Size summary in bytes: + // Measured: `836` + // Estimated: `19130` + // Minimum execution time: 107_736 nanoseconds. + Weight::from_parts(113_226_758, 0u64) + .saturating_add(Weight::from_parts(0, 19130)) + // Standard Error: 4_336 + .saturating_add(Weight::from_parts(1_499_996, 0u64).saturating_mul(i.into())) + .saturating_add(T::DbWeight::get().reads(7_u64)) + .saturating_add(T::DbWeight::get().writes(5_u64)) } // Storage: Instance3WorkingGroup CurrentLead (r:1 w:1) + // Proof: Instance3WorkingGroup CurrentLead (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) // Storage: Instance3WorkingGroup WorkerById (r:1 w:1) + // Proof: Instance3WorkingGroup WorkerById (max_values: None, max_size: Some(175), added: 2650, mode: MaxEncodedLen) // Storage: Balances Locks (r:1 w:1) + // Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) // Storage: System Account (r:1 w:1) + // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) // Storage: Instance3WorkingGroup Budget (r:1 w:1) + // Proof: Instance3WorkingGroup Budget (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) // Storage: Instance3WorkingGroup ActiveWorkerCount (r:1 w:1) + // Proof: Instance3WorkingGroup ActiveWorkerCount (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// The range of component `i` is `[0, 100]`. fn terminate_role_lead(i: u32, ) -> Weight { - (121_275_000 as Weight) - // Standard Error: 3_000 - .saturating_add((1_264_000 as Weight).saturating_mul(i as Weight)) - .saturating_add(T::DbWeight::get().reads(6 as Weight)) - .saturating_add(T::DbWeight::get().writes(6 as Weight)) + // Proof Size summary in bytes: + // Measured: `691` + // Estimated: `16480` + // Minimum execution time: 104_005 nanoseconds. + Weight::from_parts(110_961_526, 0u64) + .saturating_add(Weight::from_parts(0, 16480)) + // Standard Error: 4_181 + .saturating_add(Weight::from_parts(1_481_452, 0u64).saturating_mul(i.into())) + .saturating_add(T::DbWeight::get().reads(6_u64)) + .saturating_add(T::DbWeight::get().writes(6_u64)) } // Storage: Instance3WorkingGroup WorkerById (r:1 w:0) + // Proof: Instance3WorkingGroup WorkerById (max_values: None, max_size: Some(175), added: 2650, mode: MaxEncodedLen) // Storage: System Account (r:1 w:1) + // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) // Storage: Balances Locks (r:1 w:1) + // Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) fn increase_stake() -> Weight { - (48_210_000 as Weight) - .saturating_add(T::DbWeight::get().reads(3 as Weight)) - .saturating_add(T::DbWeight::get().writes(2 as Weight)) + // Proof Size summary in bytes: + // Measured: `688` + // Estimated: `11997` + // Minimum execution time: 43_482 nanoseconds. + Weight::from_parts(44_255_000, 0u64) + .saturating_add(Weight::from_parts(0, 11997)) + .saturating_add(T::DbWeight::get().reads(3_u64)) + .saturating_add(T::DbWeight::get().writes(2_u64)) } // Storage: Instance3WorkingGroup CurrentLead (r:1 w:0) + // Proof: Instance3WorkingGroup CurrentLead (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) // Storage: Instance3WorkingGroup WorkerById (r:2 w:0) + // Proof: Instance3WorkingGroup WorkerById (max_values: None, max_size: Some(175), added: 2650, mode: MaxEncodedLen) // Storage: Balances Locks (r:1 w:1) + // Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) // Storage: System Account (r:1 w:1) + // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) fn decrease_stake() -> Weight { - (57_370_000 as Weight) - .saturating_add(T::DbWeight::get().reads(5 as Weight)) - .saturating_add(T::DbWeight::get().writes(2 as Weight)) + // Proof Size summary in bytes: + // Measured: `833` + // Estimated: `16140` + // Minimum execution time: 51_547 nanoseconds. + Weight::from_parts(53_119_000, 0u64) + .saturating_add(Weight::from_parts(0, 16140)) + .saturating_add(T::DbWeight::get().reads(5_u64)) + .saturating_add(T::DbWeight::get().writes(2_u64)) } // Storage: Instance3WorkingGroup CurrentLead (r:1 w:0) + // Proof: Instance3WorkingGroup CurrentLead (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) // Storage: Instance3WorkingGroup WorkerById (r:1 w:0) + // Proof: Instance3WorkingGroup WorkerById (max_values: None, max_size: Some(175), added: 2650, mode: MaxEncodedLen) // Storage: Instance3WorkingGroup Budget (r:1 w:1) + // Proof: Instance3WorkingGroup Budget (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) // Storage: System Account (r:1 w:1) + // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) fn spend_from_budget() -> Weight { - (42_270_000 as Weight) - .saturating_add(T::DbWeight::get().reads(4 as Weight)) - .saturating_add(T::DbWeight::get().writes(2 as Weight)) + // Proof Size summary in bytes: + // Measured: `565` + // Estimated: `10227` + // Minimum execution time: 33_571 nanoseconds. + Weight::from_parts(35_120_000, 0u64) + .saturating_add(Weight::from_parts(0, 10227)) + .saturating_add(T::DbWeight::get().reads(4_u64)) + .saturating_add(T::DbWeight::get().writes(2_u64)) } // Storage: Membership MembershipById (r:1 w:0) + // Proof: Membership MembershipById (max_values: None, max_size: Some(125), added: 2600, mode: MaxEncodedLen) // Storage: System Account (r:1 w:1) + // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) // Storage: Instance3WorkingGroup Budget (r:1 w:1) + // Proof: Instance3WorkingGroup Budget (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) fn fund_working_group_budget() -> Weight { - (42_300_000 as Weight) - .saturating_add(T::DbWeight::get().reads(3 as Weight)) - .saturating_add(T::DbWeight::get().writes(2 as Weight)) + // Proof Size summary in bytes: + // Measured: `433` + // Estimated: `8684` + // Minimum execution time: 36_409 nanoseconds. + Weight::from_parts(37_278_000, 0u64) + .saturating_add(Weight::from_parts(0, 8684)) + .saturating_add(T::DbWeight::get().reads(3_u64)) + .saturating_add(T::DbWeight::get().writes(2_u64)) } // Storage: Instance3WorkingGroup CurrentLead (r:1 w:0) + // Proof: Instance3WorkingGroup CurrentLead (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) // Storage: Instance3WorkingGroup WorkerById (r:2 w:1) + // Proof: Instance3WorkingGroup WorkerById (max_values: None, max_size: Some(175), added: 2650, mode: MaxEncodedLen) fn update_reward_amount() -> Weight { - (33_980_000 as Weight) - .saturating_add(T::DbWeight::get().reads(3 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + // Proof Size summary in bytes: + // Measured: `570` + // Estimated: `7783` + // Minimum execution time: 28_617 nanoseconds. + Weight::from_parts(30_037_000, 0u64) + .saturating_add(Weight::from_parts(0, 7783)) + .saturating_add(T::DbWeight::get().reads(3_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) } // Storage: Instance3WorkingGroup CurrentLead (r:1 w:0) + // Proof: Instance3WorkingGroup CurrentLead (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) // Storage: Instance3WorkingGroup WorkerById (r:1 w:0) + // Proof: Instance3WorkingGroup WorkerById (max_values: None, max_size: Some(175), added: 2650, mode: MaxEncodedLen) // Storage: Instance3WorkingGroup StatusTextHash (r:0 w:1) + // Proof: Instance3WorkingGroup StatusTextHash (max_values: Some(1), max_size: Some(32), added: 527, mode: MaxEncodedLen) + /// The range of component `i` is `[0, 100]`. fn set_status_text(i: u32, ) -> Weight { - (27_279_000 as Weight) - // Standard Error: 6_000 - .saturating_add((1_644_000 as Weight).saturating_mul(i as Weight)) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + // Proof Size summary in bytes: + // Measured: `388` + // Estimated: `5133` + // Minimum execution time: 21_974 nanoseconds. + Weight::from_parts(23_989_814, 0u64) + .saturating_add(Weight::from_parts(0, 5133)) + // Standard Error: 1_632 + .saturating_add(Weight::from_parts(1_675_668, 0u64).saturating_mul(i.into())) + .saturating_add(T::DbWeight::get().reads(2_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) } // Storage: Instance3WorkingGroup WorkerById (r:1 w:1) + // Proof: Instance3WorkingGroup WorkerById (max_values: None, max_size: Some(175), added: 2650, mode: MaxEncodedLen) fn update_reward_account() -> Weight { - (24_380_000 as Weight) - .saturating_add(T::DbWeight::get().reads(1 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + // Proof Size summary in bytes: + // Measured: `388` + // Estimated: `3640` + // Minimum execution time: 21_747 nanoseconds. + Weight::from_parts(22_344_000, 0u64) + .saturating_add(Weight::from_parts(0, 3640)) + .saturating_add(T::DbWeight::get().reads(1_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) } // Storage: Instance3WorkingGroup Budget (r:0 w:1) + // Proof: Instance3WorkingGroup Budget (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) fn set_budget() -> Weight { - (13_550_000 as Weight) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 10_211 nanoseconds. + Weight::from_parts(10_616_000, 0u64) + .saturating_add(Weight::from_parts(0, 0)) + .saturating_add(T::DbWeight::get().writes(1_u64)) } // Storage: Instance3WorkingGroup CurrentLead (r:1 w:0) + // Proof: Instance3WorkingGroup CurrentLead (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) // Storage: Instance3WorkingGroup WorkerById (r:1 w:0) + // Proof: Instance3WorkingGroup WorkerById (max_values: None, max_size: Some(175), added: 2650, mode: MaxEncodedLen) // Storage: Balances Locks (r:1 w:1) + // Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) // Storage: System Account (r:1 w:1) + // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) // Storage: Instance3WorkingGroup NextOpeningId (r:1 w:1) + // Proof: Instance3WorkingGroup NextOpeningId (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) // Storage: Instance3WorkingGroup OpeningById (r:0 w:1) + // Proof: Instance3WorkingGroup OpeningById (max_values: None, max_size: Some(114), added: 2589, mode: MaxEncodedLen) + /// The range of component `i` is `[0, 100]`. fn add_opening(i: u32, ) -> Weight { - (69_789_000 as Weight) - // Standard Error: 6_000 - .saturating_add((1_729_000 as Weight).saturating_mul(i as Weight)) - .saturating_add(T::DbWeight::get().reads(5 as Weight)) - .saturating_add(T::DbWeight::get().writes(4 as Weight)) + // Proof Size summary in bytes: + // Measured: `688` + // Estimated: `14983` + // Minimum execution time: 59_196 nanoseconds. + Weight::from_parts(61_085_104, 0u64) + .saturating_add(Weight::from_parts(0, 14983)) + // Standard Error: 1_496 + .saturating_add(Weight::from_parts(1_944_353, 0u64).saturating_mul(i.into())) + .saturating_add(T::DbWeight::get().reads(5_u64)) + .saturating_add(T::DbWeight::get().writes(4_u64)) } // Storage: Instance3WorkingGroup WorkerById (r:1 w:1) + // Proof: Instance3WorkingGroup WorkerById (max_values: None, max_size: Some(175), added: 2650, mode: MaxEncodedLen) + /// The range of component `i` is `[0, 100]`. fn leave_role(i: u32, ) -> Weight { - (25_746_000 as Weight) - // Standard Error: 1_000 - .saturating_add((668_000 as Weight).saturating_mul(i as Weight)) - .saturating_add(T::DbWeight::get().reads(1 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + // Proof Size summary in bytes: + // Measured: `388` + // Estimated: `3640` + // Minimum execution time: 22_719 nanoseconds. + Weight::from_parts(23_430_902, 0u64) + .saturating_add(Weight::from_parts(0, 3640)) + // Standard Error: 1_458 + .saturating_add(Weight::from_parts(770_218, 0u64).saturating_mul(i.into())) + .saturating_add(T::DbWeight::get().reads(1_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) } // Storage: Instance3WorkingGroup CurrentLead (r:1 w:0) + // Proof: Instance3WorkingGroup CurrentLead (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) // Storage: Instance3WorkingGroup WorkerById (r:1 w:0) + // Proof: Instance3WorkingGroup WorkerById (max_values: None, max_size: Some(175), added: 2650, mode: MaxEncodedLen) + /// The range of component `i` is `[0, 100]`. fn lead_remark(i: u32, ) -> Weight { - (24_744_000 as Weight) - // Standard Error: 0 - .saturating_add((735_000 as Weight).saturating_mul(i as Weight)) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) + // Proof Size summary in bytes: + // Measured: `388` + // Estimated: `5133` + // Minimum execution time: 20_111 nanoseconds. + Weight::from_parts(21_522_148, 0u64) + .saturating_add(Weight::from_parts(0, 5133)) + // Standard Error: 1_449 + .saturating_add(Weight::from_parts(1_032_500, 0u64).saturating_mul(i.into())) + .saturating_add(T::DbWeight::get().reads(2_u64)) } // Storage: Instance3WorkingGroup WorkerById (r:1 w:0) + // Proof: Instance3WorkingGroup WorkerById (max_values: None, max_size: Some(175), added: 2650, mode: MaxEncodedLen) + /// The range of component `i` is `[0, 100]`. fn worker_remark(i: u32, ) -> Weight { - (23_822_000 as Weight) - // Standard Error: 0 - .saturating_add((735_000 as Weight).saturating_mul(i as Weight)) - .saturating_add(T::DbWeight::get().reads(1 as Weight)) + // Proof Size summary in bytes: + // Measured: `425` + // Estimated: `3640` + // Minimum execution time: 21_136 nanoseconds. + Weight::from_parts(22_190_601, 0u64) + .saturating_add(Weight::from_parts(0, 3640)) + // Standard Error: 1_040 + .saturating_add(Weight::from_parts(1_018_605, 0u64).saturating_mul(i.into())) + .saturating_add(T::DbWeight::get().reads(1_u64)) } } // Default implementation for tests impl WeightInfo for () { fn on_initialize_leaving(i: u32, ) -> Weight { - 0 + Weight::from_parts(0, 0) } fn on_initialize_rewarding_with_missing_reward(i: u32, ) -> Weight { - 0 + Weight::from_parts(0, 0) } fn on_initialize_rewarding_with_missing_reward_cant_pay(i: u32, ) -> Weight { - 0 + Weight::from_parts(0, 0) } fn on_initialize_rewarding_without_missing_reward(i: u32, ) -> Weight { - 0 + Weight::from_parts(0, 0) } fn apply_on_opening(i: u32, ) -> Weight { - 0 + Weight::from_parts(0, 0) } fn fill_opening_lead() -> Weight { - 0 + Weight::from_parts(0, 0) } fn fill_opening_worker(i: u32, ) -> Weight { - 0 + Weight::from_parts(0, 0) } fn update_role_account() -> Weight { - 0 + Weight::from_parts(0, 0) } fn cancel_opening() -> Weight { - 0 + Weight::from_parts(0, 0) } fn withdraw_application() -> Weight { - 0 + Weight::from_parts(0, 0) } fn slash_stake(i: u32, ) -> Weight { - 0 + Weight::from_parts(0, 0) } fn terminate_role_worker(i: u32, ) -> Weight { - 0 + Weight::from_parts(0, 0) } fn terminate_role_lead(i: u32, ) -> Weight { - 0 + Weight::from_parts(0, 0) } fn increase_stake() -> Weight { - 0 + Weight::from_parts(0, 0) } fn decrease_stake() -> Weight { - 0 + Weight::from_parts(0, 0) } fn spend_from_budget() -> Weight { - 0 + Weight::from_parts(0, 0) } fn fund_working_group_budget() -> Weight { - 0 + Weight::from_parts(0, 0) } fn update_reward_amount() -> Weight { - 0 + Weight::from_parts(0, 0) } fn set_status_text(i: u32, ) -> Weight { - 0 + Weight::from_parts(0, 0) } fn update_reward_account() -> Weight { - 0 + Weight::from_parts(0, 0) } fn set_budget() -> Weight { - 0 + Weight::from_parts(0, 0) } fn add_opening(i: u32, ) -> Weight { - 0 + Weight::from_parts(0, 0) } fn leave_role(i: u32, ) -> Weight { - 0 + Weight::from_parts(0, 0) } fn lead_remark(i: u32, ) -> Weight { - 0 + Weight::from_parts(0, 0) } fn worker_remark(i: u32, ) -> Weight { - 0 + Weight::from_parts(0, 0) } } diff --git a/runtime/CHANGELOG.md b/runtime/CHANGELOG.md index 3a903097ee..69665263f8 100644 --- a/runtime/CHANGELOG.md +++ b/runtime/CHANGELOG.md @@ -1,3 +1,18 @@ +### Version 12.2002.0 - Nara release + - Updated runtime `spec_version` to `2002` + - Update substrate version based on [v0.9.41](https://github.com/paritytech/substrate/tree/polkadot-v0.9.41) release. [#4705](https://github.com/Joystream/joystream/pull/4705) + - Apply substrate pallet runtime migrations from `v0.9.24-1` to `v0.9.41` + - Added `try-runtime` command support and runtime upgrade tests. + - Updated benchmarks and re-generated weights + - Fix [#4745](https://github.com/Joystream/joystream/issues/4745): `cargo-chef` build issue by renaming crate 'pallet-utility' to 'pallet-joystream-utility' + - Added a new "warp-time" and "fast-block-production" cargo feature flags + - Enabled creator tokens functionality + - Added AMM to creator tokens pallet + - Added feature to enable freezing creator tokens pallet functionality via new proposal + - Changed some workging group max workers values + - Changed council and election periods + - Removed some privileges of content moderators such as deleting channels and videos + ### Version 12.2001.0 - Ephesus release - Bug fix in update_channel_payouts implementation - proposal creator pays for upload of payload not arbitrary specified account diff --git a/runtime/Cargo.toml b/runtime/Cargo.toml index 4528f247ff..bcf0c7b01b 100644 --- a/runtime/Cargo.toml +++ b/runtime/Cargo.toml @@ -4,7 +4,7 @@ edition = '2018' name = 'joystream-node-runtime' # Follow convention: https://github.com/Joystream/substrate-runtime-joystream/issues/1 # {Authoring}.{Spec}.{Impl} of the RuntimeVersion -version = '12.2001.0' +version = '12.2002.0' [dependencies] # Third-party dependencies @@ -20,57 +20,60 @@ static_assertions = "1.1.0" impl-serde = { version = "=0.3.1", optional = true } # Substrate primitives -sp-std = { package = 'sp-std', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -sp-arithmetic = { package = 'sp-arithmetic', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -sp-runtime = { package = 'sp-runtime', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -sp-offchain = { package = 'sp-offchain', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -sp-core = { package = 'sp-core', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -sp-authority-discovery = { package = 'sp-authority-discovery', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -sp-consensus-babe = { package = 'sp-consensus-babe', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -sp-transaction-pool = { package = 'sp-transaction-pool', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -sp-session = { package = 'sp-session', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -sp-block-builder = { package = 'sp-block-builder', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -sp-api = { package = 'sp-api', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -sp-version = { package = 'sp-version', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -sp-staking = { package = 'sp-staking', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -sp-application-crypto = { package = 'sp-application-crypto', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -sp-io = { package = 'sp-io', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} +sp-std = { package = 'sp-std', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +sp-arithmetic = { package = 'sp-arithmetic', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +sp-runtime = { package = 'sp-runtime', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +sp-offchain = { package = 'sp-offchain', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +sp-core = { package = 'sp-core', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +sp-authority-discovery = { package = 'sp-authority-discovery', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +sp-consensus-babe = { package = 'sp-consensus-babe', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +sp-transaction-pool = { package = 'sp-transaction-pool', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +sp-session = { package = 'sp-session', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +sp-block-builder = { package = 'sp-block-builder', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +sp-api = { package = 'sp-api', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +sp-version = { package = 'sp-version', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +sp-staking = { package = 'sp-staking', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +sp-application-crypto = { package = 'sp-application-crypto', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +sp-io = { package = 'sp-io', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +sp-weights = { package = 'sp-weights', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} # Frame -frame-support = { package = 'frame-support', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -frame-executive = { package = 'frame-executive', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -frame-system-rpc-runtime-api = { package = 'frame-system-rpc-runtime-api', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -frame-system = { package = 'frame-system', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -frame-election-provider-support = { package = 'frame-election-provider-support', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -pallet-election-provider-multi-phase = { package = 'pallet-election-provider-multi-phase', default-features = false, optional = true, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522' } -pallet-bags-list = { package = 'pallet-bags-list', default-features = false, optional = true, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} +frame-support = { package = 'frame-support', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +frame-executive = { package = 'frame-executive', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +frame-system-rpc-runtime-api = { package = 'frame-system-rpc-runtime-api', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +frame-system = { package = 'frame-system', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +frame-election-provider-support = { package = 'frame-election-provider-support', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +pallet-election-provider-multi-phase = { package = 'pallet-election-provider-multi-phase', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9' } +pallet-bags-list = { package = 'pallet-bags-list', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +frame-try-runtime = { package = 'frame-try-runtime', default-features = false, optional = true, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} # Pallets -pallet-grandpa = { package = 'pallet-grandpa', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -pallet-staking-reward-curve = { package = 'pallet-staking-reward-curve', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -pallet-babe = { package = 'pallet-babe', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -pallet-transaction-payment = { package = 'pallet-transaction-payment', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -pallet-transaction-payment-rpc-runtime-api = { package = 'pallet-transaction-payment-rpc-runtime-api', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -pallet-authorship = { package = 'pallet-authorship', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -pallet-session = { package = 'pallet-session', features = [ "historical" ], default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -pallet-offences = { package = 'pallet-offences', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -pallet-randomness-collective-flip = { package = 'pallet-randomness-collective-flip', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -pallet-authority-discovery = { package = 'pallet-authority-discovery', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -pallet-staking = { package = 'pallet-staking', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -pallet-timestamp = { package = 'pallet-timestamp', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -pallet-balances = { package = 'pallet-balances', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -pallet-im-online = { package = 'pallet-im-online', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -substrate-utility = { package = 'pallet-utility', version = "4.0.0-dev", default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} -pallet-vesting = { package = 'pallet-vesting', default-features = false, git = 'https://github.com/joystream/substrate', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522' } -pallet-multisig = { package = 'pallet-multisig', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} +pallet-grandpa = { package = 'pallet-grandpa', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +pallet-staking-reward-curve = { package = 'pallet-staking-reward-curve', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +pallet-babe = { package = 'pallet-babe', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +pallet-transaction-payment = { package = 'pallet-transaction-payment', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +pallet-transaction-payment-rpc-runtime-api = { package = 'pallet-transaction-payment-rpc-runtime-api', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +pallet-authorship = { package = 'pallet-authorship', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +pallet-session = { package = 'pallet-session', features = [ "historical" ], default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +pallet-offences = { package = 'pallet-offences', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +pallet-insecure-randomness-collective-flip = { package = 'pallet-insecure-randomness-collective-flip', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +pallet-authority-discovery = { package = 'pallet-authority-discovery', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +pallet-staking = { package = 'pallet-staking', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +pallet-timestamp = { package = 'pallet-timestamp', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +pallet-balances = { package = 'pallet-balances', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +pallet-im-online = { package = 'pallet-im-online', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +substrate-utility = { package = 'pallet-utility', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +pallet-vesting = { package = 'pallet-vesting', default-features = false, git = 'https://github.com/joystream/substrate', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9' } +pallet-multisig = { package = 'pallet-multisig', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +pallet-staking-runtime-api = { package = 'pallet-staking-runtime-api', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} # Benchmarking -frame-benchmarking = { git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522', default-features = false, optional = true } -frame-system-benchmarking = { git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522', default-features = false, optional = true } -pallet-offences-benchmarking = { git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522', default-features = false, optional = true } -pallet-session-benchmarking = { git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522', default-features = false, optional = true } +frame-benchmarking = { git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9', default-features = false, optional = true } +frame-system-benchmarking = { git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9', default-features = false, optional = true } +pallet-offences-benchmarking = { git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9', default-features = false, optional = true } +pallet-session-benchmarking = { git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9', default-features = false, optional = true } hex-literal = { optional = true, version = '0.3.1' } -pallet-election-provider-support-benchmarking = { package = 'pallet-election-provider-support-benchmarking', default-features = false, optional = true, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522' } +pallet-election-provider-support-benchmarking = { package = 'pallet-election-provider-support-benchmarking', default-features = false, optional = true, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9' } # Joystream common = { package = 'pallet-common', default-features = false, path = '../runtime-modules/common'} @@ -87,19 +90,21 @@ pallet-constitution = { package = 'pallet-constitution', default-features = fals staking-handler = { package = 'pallet-staking-handler', default-features = false, path = '../runtime-modules/staking-handler'} bounty = { package = 'pallet-bounty', default-features = false, path = '../runtime-modules/bounty'} content = { package = 'pallet-content', default-features = false, path = '../runtime-modules/content'} -joystream-utility = { package = 'pallet-utility', default-features = false, path = '../runtime-modules/utility'} +joystream-utility = { package = 'pallet-joystream-utility', default-features = false, path = '../runtime-modules/utility'} project-token = { package = 'pallet-project-token', default-features = false, path = '../runtime-modules/project-token'} [dev-dependencies] -sp-io = { package = 'sp-io', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522'} +sp-io = { package = 'sp-io', default-features = false, git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} strum = {version = "0.19", default-features = false} +remote-externalities = { package = "frame-remote-externalities", git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} +tokio = { version = "1.24.2", features = ["macros"] } +sp-tracing = { package = 'sp-tracing', git = 'https://github.com/joystream/substrate.git', rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9'} [build-dependencies] -substrate-wasm-builder = { git = "https://github.com/joystream/substrate", rev = 'd29a53b11c3e530d1656eef502cb0f1f8fff3522' } +substrate-wasm-builder = { git = "https://github.com/joystream/substrate", rev = '1d0eefca86ef31b9e7727df01a6ed23ad65491e9' } [features] default = ['std'] -no_std = [] std = [ # Third-party dependencies 'serde', @@ -110,6 +115,7 @@ std = [ # Substrate primitives 'sp-std/std', 'sp-core/std', + 'sp-weights/std', 'sp-api/std', 'sp-version/std', 'sp-runtime/std', @@ -131,6 +137,9 @@ std = [ 'frame-system/std', 'frame-election-provider-support/std', 'frame-benchmarking/std', + 'pallet-offences-benchmarking?/std', + 'frame-system-benchmarking?/std', + 'frame-try-runtime/std', # Pallets 'pallet-timestamp/std', @@ -140,9 +149,10 @@ std = [ 'pallet-grandpa/std', 'pallet-babe/std', 'pallet-session/std', + 'pallet-session-benchmarking?/std', 'pallet-authority-discovery/std', 'pallet-authorship/std', - 'pallet-randomness-collective-flip/std', + 'pallet-insecure-randomness-collective-flip/std', 'pallet-staking/std', 'pallet-im-online/std', 'pallet-offences/std', @@ -151,6 +161,8 @@ std = [ 'substrate-utility/std', 'pallet-bags-list/std', 'pallet-election-provider-multi-phase/std', + 'pallet-election-provider-support-benchmarking?/std', + 'pallet-staking-runtime-api/std', # Joystream 'common/std', @@ -172,18 +184,19 @@ std = [ 'log/std', ] runtime-benchmarks = [ + "playground-runtime", "hex-literal", "frame-support/runtime-benchmarks", "sp-runtime/runtime-benchmarks", - "frame-benchmarking", - "frame-system-benchmarking", + "frame-benchmarking/runtime-benchmarks", + "frame-system-benchmarking/runtime-benchmarks", "frame-system/runtime-benchmarks", # Substrate pallets - "pallet-offences-benchmarking", + "pallet-offences-benchmarking/runtime-benchmarks", "pallet-vesting/runtime-benchmarks", "pallet-multisig/runtime-benchmarks", - "pallet-session-benchmarking", + "pallet-session-benchmarking/runtime-benchmarks", "pallet-balances/runtime-benchmarks", "pallet-im-online/runtime-benchmarks", "pallet-staking/runtime-benchmarks", @@ -213,9 +226,62 @@ runtime-benchmarks = [ "project-token/runtime-benchmarks", ] -# Staging and testing configurations -# configuration suitable for staging networks and playground +# Configuration suitable for staging networks and playground staging-runtime = [] playground-runtime = [] -# configuration suitable for integration testing -testing-runtime = [] +# Configuration suitable for automated integration testing only +testing-runtime = [ + "fast-block-production" +] + +# Default block production interval is 6s. Enabling this feature will configure chain for 1s interval instead. +fast-block-production = [] + +# Configures 1s block interval for the chain, but changes behaviour of `minutes!`, `hours!`, `days!` util macros +# to compute periods (in blocks) based on 6s block interval. +# This configuration is meant for QA (manual testing) of production runtime configuration. +# that has long time periods for things like council elections, proposals voting periods etc. +# Enabling warp-time with playground-runtime, staging-runtime or testing-runtime will most likely result in time periods to be too +# short (in real time sense) and beyond practicality. +warp-time = [ + "fast-block-production" +] + +try-runtime = [ + "frame-try-runtime", + "frame-executive/try-runtime", + "frame-system/try-runtime", + "frame-support/try-runtime", + "pallet-authority-discovery/try-runtime", + "pallet-authorship/try-runtime", + "pallet-babe/try-runtime", + "pallet-bags-list/try-runtime", + "pallet-balances/try-runtime", + "pallet-election-provider-multi-phase/try-runtime", + "pallet-grandpa/try-runtime", + "pallet-im-online/try-runtime", + "pallet-multisig/try-runtime", + "pallet-offences/try-runtime", + "pallet-insecure-randomness-collective-flip/try-runtime", + "pallet-session/try-runtime", + "pallet-staking/try-runtime", + "pallet-timestamp/try-runtime", + "pallet-transaction-payment/try-runtime", + "pallet-vesting/try-runtime", + "substrate-utility/try-runtime", + # joystream + 'forum/try-runtime', + 'membership/try-runtime', + 'council/try-runtime', + 'referendum/try-runtime', + 'working-group/try-runtime', + 'storage/try-runtime', + 'proposals-engine/try-runtime', + 'proposals-discussion/try-runtime', + 'proposals-codex/try-runtime', + 'pallet-constitution/try-runtime', + 'bounty/try-runtime', + 'joystream-utility/try-runtime', + 'content/try-runtime', + 'project-token/try-runtime', +] \ No newline at end of file diff --git a/runtime/src/constants.rs b/runtime/src/constants.rs index 3d3401ba1d..2c957f2376 100644 --- a/runtime/src/constants.rs +++ b/runtime/src/constants.rs @@ -22,25 +22,25 @@ use sp_std::vec::Vec; /// // Normal 6s block interval -#[cfg(not(feature = "testing-runtime"))] +#[cfg(not(feature = "fast-block-production"))] pub const MILLISECS_PER_BLOCK: Moment = 6000; -#[cfg(not(feature = "testing-runtime"))] +#[cfg(not(feature = "fast-block-production"))] pub const SLOT_DURATION: Moment = 6000; // 1s block interval for integration testing -#[cfg(feature = "testing-runtime")] +#[cfg(feature = "fast-block-production")] pub const MILLISECS_PER_BLOCK: Moment = 1000; -#[cfg(feature = "testing-runtime")] +#[cfg(feature = "fast-block-production")] pub const SLOT_DURATION: Moment = 1000; -pub const SECS_PER_BLOCK: Moment = MILLISECS_PER_BLOCK / 1000; -pub const BONDING_DURATION: u32 = 4 * 28; // 4 * 28 eras = 28 days (since 1 era = 6h) -pub const SLASH_DEFER_DURATION: u32 = BONDING_DURATION - 1; +const SECS_PER_BLOCK: Moment = MILLISECS_PER_BLOCK / 1000; +const MINUTES: BlockNumber = 60 / (SECS_PER_BLOCK as BlockNumber); -#[cfg(feature = "testing-runtime")] // 30 seconds sessions for faster tests +// Short epoch for faster tests related to bonding/unbonding +#[cfg(feature = "testing-runtime")] pub const EPOCH_DURATION_IN_BLOCKS: BlockNumber = MINUTES / 2; #[cfg(not(feature = "testing-runtime"))] -pub const EPOCH_DURATION_IN_BLOCKS: BlockNumber = HOURS; +pub const EPOCH_DURATION_IN_BLOCKS: BlockNumber = MINUTES * 60; pub const EPOCH_DURATION_IN_SLOTS: u64 = { const SLOT_FILL_RATE: f64 = MILLISECS_PER_BLOCK as f64 / SLOT_DURATION as f64; @@ -48,11 +48,10 @@ pub const EPOCH_DURATION_IN_SLOTS: u64 = { (EPOCH_DURATION_IN_BLOCKS as f64 * SLOT_FILL_RATE) as u64 }; -// These time units are defined in number of blocks. -pub const MINUTES: BlockNumber = 60 / (SECS_PER_BLOCK as BlockNumber); -pub const HOURS: BlockNumber = MINUTES * 60; -pub const DAYS: BlockNumber = HOURS * 24; -pub const WEEKS: BlockNumber = DAYS * 7; +// Session (aka Epoch) in BABE +pub const SESSIONS_PER_ERA: u32 = 6; +pub const BONDING_DURATION: u32 = 4 * 28; // 4 * 28 Eras (for 1h epoch this equals 6 * 4 * 28 -> 28 Days) +pub const SLASH_DEFER_DURATION: u32 = BONDING_DURATION - 1; // 1 in 4 blocks (on average, not counting collisions) will be primary babe blocks. pub const PRIMARY_PROBABILITY: (u64, u64) = (1, 4); @@ -70,6 +69,7 @@ pub mod fees { }; use pallet_transaction_payment::{Multiplier, TargetedFeeAdjustment}; use smallvec::smallvec; + use sp_runtime::traits::Bounded; use sp_runtime::FixedPointNumber; pub use sp_runtime::Perbill; use sp_runtime::Perquintill; @@ -85,12 +85,19 @@ pub mod fees { /// that combined with `AdjustmentVariable`, we can recover from the minimum. /// See `multiplier_can_grow_from_zero`. pub MinimumMultiplier: Multiplier = Multiplier::saturating_from_rational(1, 1_000_000_000u128); + /// The maximum amount of the multiplier. + pub MaximumMultiplier: Multiplier = Bounded::max_value(); } /// Parameterized slow adjusting fee updated based on /// https://w3f-research.readthedocs.io/en/latest/polkadot/economics/1-token-economics.html#-2.-slow-adjusting-mechanism - pub type SlowAdjustingFeeUpdate = - TargetedFeeAdjustment; + pub type SlowAdjustingFeeUpdate = TargetedFeeAdjustment< + R, + TargetBlockFullness, + AdjustmentVariable, + MinimumMultiplier, + MaximumMultiplier, + >; /// Handles converting a weight scalar to a fee value, based on the scale and granularity of the /// node's balance type. @@ -107,7 +114,7 @@ pub mod fees { type Balance = Balance; fn polynomial() -> WeightToFeeCoefficients { let p = super::currency::CENTS; - let q = 50 * Balance::from(ExtrinsicBaseWeight::get()); + let q = 50 * Balance::from(ExtrinsicBaseWeight::get().ref_time()); smallvec![WeightToFeeCoefficient { degree: 1, negative: false, @@ -186,8 +193,8 @@ mod tests { assert!(0 < transfer_fee && transfer_fee < CENTS); } - // This test does not make sense for `testing-runtime`, because of 1s blocks - #[cfg(not(feature = "testing-runtime"))] + // This test does not make sense for `fast-block-production`, because of 1s blocks + #[cfg(not(feature = "fast-block-production"))] #[test] // This test verifies that the cost of filling blocks with max. normal dispatch extrinsics // total weight for 1 day is within the pre-determined bounds @@ -201,7 +208,8 @@ mod tests { let full_block_cost: Balance = WeightToFee::weight_to_fee(&max_normal_dispatch_block_weight); - let day_of_full_blocks_cost = full_block_cost.saturating_mul(Balance::from(super::DAYS)); + let day_of_full_blocks_cost = + full_block_cost.saturating_mul(Balance::from(super::MINUTES * 60 * 24)); println!( "weight per block: {}, block cost: {}¢, cost/day: ${}", @@ -214,8 +222,8 @@ mod tests { assert!(day_of_full_blocks_cost <= BLOCK_WEIGHT_FILL_MAX_DAILY_COST); } - // This test does not make sense for `testing-runtime`, because of 1s blocks - #[cfg(not(feature = "testing-runtime"))] + // This test does not make sense for `fast-block-productione`, because of 1s blocks + #[cfg(not(feature = "fast-block-production"))] #[test] // This test verifies that the cost of filling blocks with max. normal dispatch extrinsics // total length for 1 day is within the pre-determined bounds @@ -229,9 +237,10 @@ mod tests { let full_block_cost: Balance = ::LengthToFee::weight_to_fee( - &max_normal_dispatch_block_length, + &Weight::from_parts(max_normal_dispatch_block_length, 0), ); - let day_of_full_blocks_cost = full_block_cost.saturating_mul(Balance::from(super::DAYS)); + let day_of_full_blocks_cost = + full_block_cost.saturating_mul(Balance::from(super::MINUTES * 60 * 24)); println!( "bytes per block: {}, block cost: {}¢, cost/day: ${}", diff --git a/runtime/src/integration/proposals/proposal_encoder.rs b/runtime/src/integration/proposals/proposal_encoder.rs index dcaf7c38f5..1cf0fe2bc6 100644 --- a/runtime/src/integration/proposals/proposal_encoder.rs +++ b/runtime/src/integration/proposals/proposal_encoder.rs @@ -1,5 +1,6 @@ -use crate::{Call, Runtime}; +use crate::{Runtime, RuntimeCall}; use common::working_group::WorkingGroup; +use common::FreezablePallet; use proposals_codex::{ProposalDetails, ProposalDetailsOf, ProposalEncoder}; use working_group::OpeningType; @@ -17,23 +18,25 @@ use sp_std::vec::Vec; macro_rules! wrap_working_group_call { ($working_group:expr, $working_group_instance_call:expr) => {{ match $working_group { - WorkingGroup::Content => Call::ContentWorkingGroup($working_group_instance_call), - WorkingGroup::Storage => Call::StorageWorkingGroup($working_group_instance_call), - WorkingGroup::Forum => Call::ForumWorkingGroup($working_group_instance_call), - WorkingGroup::Membership => Call::MembershipWorkingGroup($working_group_instance_call), + WorkingGroup::Content => RuntimeCall::ContentWorkingGroup($working_group_instance_call), + WorkingGroup::Storage => RuntimeCall::StorageWorkingGroup($working_group_instance_call), + WorkingGroup::Forum => RuntimeCall::ForumWorkingGroup($working_group_instance_call), + WorkingGroup::Membership => { + RuntimeCall::MembershipWorkingGroup($working_group_instance_call) + } WorkingGroup::Distribution => { - Call::DistributionWorkingGroup($working_group_instance_call) + RuntimeCall::DistributionWorkingGroup($working_group_instance_call) } WorkingGroup::OperationsAlpha => { - Call::OperationsWorkingGroupAlpha($working_group_instance_call) + RuntimeCall::OperationsWorkingGroupAlpha($working_group_instance_call) } WorkingGroup::OperationsBeta => { - Call::OperationsWorkingGroupBeta($working_group_instance_call) + RuntimeCall::OperationsWorkingGroupBeta($working_group_instance_call) } WorkingGroup::OperationsGamma => { - Call::OperationsWorkingGroupGamma($working_group_instance_call) + RuntimeCall::OperationsWorkingGroupGamma($working_group_instance_call) } - WorkingGroup::App => Call::AppWorkingGroup($working_group_instance_call), + WorkingGroup::App => RuntimeCall::AppWorkingGroup($working_group_instance_call), } }}; } @@ -48,19 +51,19 @@ impl ProposalEncoder for ExtrinsicProposalEncoder { ) -> Vec { let call = match proposal_details { ProposalDetails::Signal(signal) => { - Call::JoystreamUtility(joystream_utility::Call::execute_signal_proposal { signal }) + RuntimeCall::JoystreamUtility(joystream_utility::Call::execute_signal_proposal { + signal, + }) } ProposalDetails::FundingRequest(funding_requests) => { - Call::Council(council::Call::funding_request { funding_requests }) + RuntimeCall::Council(council::Call::funding_request { funding_requests }) } ProposalDetails::SetMaxValidatorCount(new) => { - Call::Staking(pallet_staking::Call::set_validator_count { new }) - } - ProposalDetails::RuntimeUpgrade(wasm) => { - Call::JoystreamUtility(joystream_utility::Call::execute_runtime_upgrade_proposal { - wasm, - }) + RuntimeCall::Staking(pallet_staking::Call::set_validator_count { new }) } + ProposalDetails::RuntimeUpgrade(wasm) => RuntimeCall::JoystreamUtility( + joystream_utility::Call::execute_runtime_upgrade_proposal { wasm }, + ), ProposalDetails::CreateWorkingGroupLeadOpening(create_opening_params) => { wrap_working_group_call!( create_opening_params.group, @@ -74,11 +77,13 @@ impl ProposalEncoder for ExtrinsicProposalEncoder { ) } ProposalDetails::UpdateWorkingGroupBudget(amount, working_group, balance_kind) => { - Call::JoystreamUtility(joystream_utility::Call::update_working_group_budget { - working_group, - amount, - balance_kind, - }) + RuntimeCall::JoystreamUtility( + joystream_utility::Call::update_working_group_budget { + working_group, + amount, + balance_kind, + }, + ) } ProposalDetails::DecreaseWorkingGroupLeadStake( worker_id, @@ -107,7 +112,7 @@ impl ProposalEncoder for ExtrinsicProposalEncoder { ) } ProposalDetails::AmendConstitution(constitution_text) => { - Call::Constitution(pallet_constitution::Call::amend_constitution { + RuntimeCall::Constitution(pallet_constitution::Call::amend_constitution { constitution_text, }) } @@ -118,47 +123,54 @@ impl ProposalEncoder for ExtrinsicProposalEncoder { ) } ProposalDetails::SetMembershipPrice(new_price) => { - Call::Members(membership::Call::set_membership_price { new_price }) + RuntimeCall::Members(membership::Call::set_membership_price { new_price }) } ProposalDetails::SetCouncilBudgetIncrement(budget_increment) => { - Call::Council(council::Call::set_budget_increment { budget_increment }) + RuntimeCall::Council(council::Call::set_budget_increment { budget_increment }) } ProposalDetails::SetCouncilorReward(councilor_reward) => { - Call::Council(council::Call::set_councilor_reward { councilor_reward }) + RuntimeCall::Council(council::Call::set_councilor_reward { councilor_reward }) } ProposalDetails::SetInitialInvitationBalance(new_initial_balance) => { - Call::Members(membership::Call::set_initial_invitation_balance { + RuntimeCall::Members(membership::Call::set_initial_invitation_balance { new_initial_balance, }) } ProposalDetails::SetInitialInvitationCount(new_invitation_count) => { - Call::Members(membership::Call::set_initial_invitation_count { + RuntimeCall::Members(membership::Call::set_initial_invitation_count { new_invitation_count, }) } ProposalDetails::SetMembershipLeadInvitationQuota(invitation_quota) => { - Call::Members(membership::Call::set_leader_invitation_quota { invitation_quota }) + RuntimeCall::Members(membership::Call::set_leader_invitation_quota { + invitation_quota, + }) } ProposalDetails::SetReferralCut(percent_value) => { - Call::Members(membership::Call::set_referral_cut { percent_value }) + RuntimeCall::Members(membership::Call::set_referral_cut { percent_value }) } ProposalDetails::VetoProposal(proposal_id) => { - Call::ProposalsEngine(proposals_engine::Call::veto_proposal { proposal_id }) + RuntimeCall::ProposalsEngine(proposals_engine::Call::veto_proposal { proposal_id }) } ProposalDetails::UpdateGlobalNftLimit(nft_limit_period, limit) => { - Call::Content(content::Call::update_global_nft_limit { + RuntimeCall::Content(content::Call::update_global_nft_limit { nft_limit_period, limit, }) } ProposalDetails::UpdateChannelPayouts(params) => { - Call::Content(content::Call::update_channel_payouts { + RuntimeCall::Content(content::Call::update_channel_payouts { params, uploader_account: member_controller_account, }) } + ProposalDetails::SetPalletFozenStatus(freeze, pallet) => match pallet { + FreezablePallet::ProjectToken => { + RuntimeCall::ProjectToken(project_token::Call::set_frozen_status { freeze }) + } + }, }; call.encode() diff --git a/runtime/src/integration/transactions.rs b/runtime/src/integration/transactions.rs index a0b5d4dc2a..ccd698ab92 100644 --- a/runtime/src/integration/transactions.rs +++ b/runtime/src/integration/transactions.rs @@ -5,7 +5,7 @@ use sp_runtime::generic::SignedPayload; use sp_runtime::SaturatedConversion; use crate::{AccountId, BlockHashCount, Index, SignedExtra, UncheckedExtrinsic}; -use crate::{Call, Runtime, System}; +use crate::{Runtime, RuntimeCall, System}; use log; /// 'Create transaction' default implementation. @@ -15,12 +15,12 @@ pub(crate) fn create_transaction< ::Signature, >, >( - call: Call, + call: RuntimeCall, public: <::Signature as sp_runtime::traits::Verify>::Signer, account: AccountId, nonce: Index, ) -> Option<( - Call, + RuntimeCall, ::SignaturePayload, )> { // take the biggest period possible. diff --git a/runtime/src/lib.rs b/runtime/src/lib.rs index 10a186bfca..a2f3f0d5ef 100644 --- a/runtime/src/lib.rs +++ b/runtime/src/lib.rs @@ -54,16 +54,14 @@ extern crate lazy_static; // for proposals_configuration module use codec::Decode; use frame_election_provider_support::{ - onchain, ElectionDataProvider, ExtendedBalance, SequentialPhragmen, VoteWeight, + onchain, BalancingConfig, ElectionDataProvider, SequentialPhragmen, VoteWeight, }; -use frame_support::pallet_prelude::Get; use frame_support::traits::{ - ConstU16, ConstU32, Contains, Currency, EnsureOneOf, Imbalance, KeyOwnerProofSystem, + ConstU16, ConstU32, Contains, Currency, EitherOfDiverse, Imbalance, KeyOwnerProofSystem, LockIdentifier, OnUnbalanced, WithdrawReasons, }; -use frame_support::weights::{ - constants::WEIGHT_PER_SECOND, ConstantMultiplier, DispatchClass, Weight, -}; +use frame_support::weights::{constants::WEIGHT_REF_TIME_PER_SECOND, ConstantMultiplier, Weight}; +use frame_support::{dispatch::DispatchClass, pallet_prelude::Get}; pub use weights::{ block_weights::BlockExecutionWeight, extrinsic_weights::ExtrinsicBaseWeight, rocksdb_weights::constants::RocksDbWeight, @@ -108,6 +106,7 @@ use static_assertions::const_assert; pub use frame_system::Call as SystemCall; #[cfg(any(feature = "std", test))] pub use pallet_balances::Call as BalancesCall; +#[cfg(any(feature = "std", test))] pub use pallet_staking::StakerStatus; #[cfg(any(feature = "std", test))] pub use sp_runtime::BuildStorage; @@ -145,10 +144,10 @@ pub const VERSION: RuntimeVersion = RuntimeVersion { spec_name: create_runtime_str!("joystream-node"), impl_name: create_runtime_str!("joystream-node"), authoring_version: 12, - spec_version: 2001, + spec_version: 2002, impl_version: 0, apis: crate::runtime_api::EXPORTED_RUNTIME_API_VERSIONS, - transaction_version: 1, + transaction_version: 2, state_version: 1, }; @@ -174,8 +173,9 @@ const AVERAGE_ON_INITIALIZE_RATIO: Perbill = Perbill::from_percent(10); /// We allow `Normal` extrinsics to fill up the block up to 75%, the rest can be used /// by Operational extrinsics. const NORMAL_DISPATCH_RATIO: Perbill = Perbill::from_percent(75); -/// We allow for 2 seconds of compute with a 6 second average block time. -pub const MAXIMUM_BLOCK_WEIGHT: Weight = 2 * WEIGHT_PER_SECOND; +/// We allow for 2 seconds of compute with a 6 second average block time, with maximum proof size. +const MAXIMUM_BLOCK_WEIGHT: Weight = + Weight::from_parts(WEIGHT_REF_TIME_PER_SECOND.saturating_mul(2), u64::MAX); parameter_types! { pub const BlockHashCount: BlockNumber = 2400; @@ -229,23 +229,28 @@ pub enum CallFilter {} // Filter out only a subset of calls on content pallet, some specific proposals // and the bounty creation call. #[cfg(not(feature = "runtime-benchmarks"))] -impl Contains<::Call> for CallFilter { - fn contains(call: &::Call) -> bool { +impl Contains<::RuntimeCall> for CallFilter { + fn contains(call: &::RuntimeCall) -> bool { match call { - Call::Content(content::Call::::destroy_nft { .. }) => false, - Call::Content(content::Call::::toggle_nft_limits { .. }) => false, - Call::Content(content::Call::::update_curator_group_permissions { + RuntimeCall::Content(content::Call::::destroy_nft { .. }) => false, + RuntimeCall::Content(content::Call::::toggle_nft_limits { .. }) => false, + RuntimeCall::Content(content::Call::::update_curator_group_permissions { + .. + }) => false, + RuntimeCall::Content(content::Call::::update_channel_privilege_level { .. }) => false, - Call::Content(content::Call::::update_channel_privilege_level { .. }) => false, - Call::Content(content::Call::::update_channel_nft_limit { .. }) => false, - Call::Content(content::Call::::set_channel_paused_features_as_moderator { + RuntimeCall::Content(content::Call::::update_channel_nft_limit { .. }) => { + false + } + RuntimeCall::Content( + content::Call::::set_channel_paused_features_as_moderator { .. }, + ) => false, + RuntimeCall::Content(content::Call::::initialize_channel_transfer { .. }) => false, - Call::Content(content::Call::::initialize_channel_transfer { .. }) => false, - Call::Content(content::Call::::issue_creator_token { .. }) => false, - Call::Bounty(bounty::Call::::create_bounty { .. }) => false, - Call::ProposalsCodex(proposals_codex::Call::::create_proposal { + RuntimeCall::Bounty(bounty::Call::::create_bounty { .. }) => false, + RuntimeCall::ProposalsCodex(proposals_codex::Call::::create_proposal { general_proposal_parameters: _, proposal_details, }) => !matches!( @@ -259,8 +264,8 @@ impl Contains<::Call> for CallFilter { // Do not filter any calls when building benchmarks so we can benchmark everything #[cfg(feature = "runtime-benchmarks")] -impl Contains<::Call> for CallFilter { - fn contains(_call: &::Call) -> bool { +impl Contains<::RuntimeCall> for CallFilter { + fn contains(_call: &::RuntimeCall) -> bool { true } } @@ -270,8 +275,8 @@ impl frame_system::Config for Runtime { type BlockWeights = RuntimeBlockWeights; type BlockLength = RuntimeBlockLength; type DbWeight = RocksDbWeight; - type Origin = Origin; - type Call = Call; + type RuntimeOrigin = RuntimeOrigin; + type RuntimeCall = RuntimeCall; type Index = Index; type BlockNumber = BlockNumber; type Hash = Hash; @@ -279,7 +284,7 @@ impl frame_system::Config for Runtime { type AccountId = AccountId; type Lookup = IdentityLookup; type Header = generic::Header; - type Event = Event; + type RuntimeEvent = RuntimeEvent; type BlockHashCount = BlockHashCount; type Version = Version; type PalletInfo = PalletInfo; @@ -292,11 +297,11 @@ impl frame_system::Config for Runtime { type MaxConsumers = ConstU32<16>; } -impl pallet_randomness_collective_flip::Config for Runtime {} +impl pallet_insecure_randomness_collective_flip::Config for Runtime {} impl substrate_utility::Config for Runtime { - type Event = Event; - type Call = Call; + type RuntimeEvent = RuntimeEvent; + type RuntimeCall = RuntimeCall; type PalletsOrigin = OriginCaller; type WeightInfo = weights::substrate_utility::SubstrateWeight; } @@ -316,60 +321,59 @@ impl pallet_babe::Config for Runtime { type EpochChangeTrigger = pallet_babe::ExternalTrigger; type DisabledValidators = Session; - type KeyOwnerProofSystem = Historical; + // type KeyOwnerProofSystem = Historical; - type KeyOwnerProof = >::Proof; + // type KeyOwnerProof = >::Proof; - type KeyOwnerIdentification = >::IdentificationTuple; + // type KeyOwnerIdentification = >::IdentificationTuple; - type HandleEquivocation = - pallet_babe::EquivocationHandler; + // type HandleEquivocation = + // pallet_babe::EquivocationHandler; + + type KeyOwnerProof = + >::Proof; + + type EquivocationReportSystem = + pallet_babe::EquivocationReportSystem; type WeightInfo = weights::pallet_babe::SubstrateWeight; type MaxAuthorities = MaxAuthorities; } -impl pallet_grandpa::Config for Runtime { - type Event = Event; - type Call = Call; - - type KeyOwnerProofSystem = Historical; +parameter_types! { + pub const MaxSetIdSessionEntries: u32 = BondingDuration::get() * SessionsPerEra::get(); +} - type KeyOwnerProof = - >::Proof; +impl pallet_grandpa::Config for Runtime { + type RuntimeEvent = RuntimeEvent; - type KeyOwnerIdentification = >::IdentificationTuple; + type KeyOwnerProof = >::Proof; - type HandleEquivocation = pallet_grandpa::EquivocationHandler< - Self::KeyOwnerIdentification, - Offences, - ReportLongevity, - >; + type EquivocationReportSystem = + pallet_grandpa::EquivocationReportSystem; type WeightInfo = weights::pallet_grandpa::SubstrateWeight; type MaxAuthorities = MaxAuthorities; + type MaxSetIdSessionEntries = MaxSetIdSessionEntries; } impl frame_system::offchain::CreateSignedTransaction for Runtime where - Call: From, + RuntimeCall: From, { fn create_transaction>( - call: Call, + call: RuntimeCall, public: ::Signer, account: AccountId, nonce: Index, ) -> Option<( - Call, + RuntimeCall, ::SignaturePayload, )> { integration::transactions::create_transaction::(call, public, account, nonce) @@ -383,10 +387,10 @@ impl frame_system::offchain::SigningTypes for Runtime { impl frame_system::offchain::SendTransactionTypes for Runtime where - Call: From, + RuntimeCall: From, { type Extrinsic = UncheckedExtrinsic; - type OverarchingCall = Call; + type OverarchingCall = RuntimeCall; } parameter_types! { @@ -424,7 +428,7 @@ impl pallet_balances::Config for Runtime { type ReserveIdentifier = [u8; 8]; type Balance = Balance; type DustRemoval = (); - type Event = Event; + type RuntimeEvent = RuntimeEvent; type ExistentialDeposit = ExistentialDeposit; type AccountStore = System; type WeightInfo = weights::pallet_balances::SubstrateWeight; @@ -468,6 +472,7 @@ parameter_types! { } impl pallet_transaction_payment::Config for Runtime { + type RuntimeEvent = RuntimeEvent; type OnChargeTransaction = CurrencyAdapter>; type OperationalFeeMultiplier = OperationalFeeMultiplier; type WeightToFee = constants::fees::WeightToFee; @@ -475,14 +480,8 @@ impl pallet_transaction_payment::Config for Runtime { type FeeMultiplierUpdate = constants::fees::SlowAdjustingFeeUpdate; } -parameter_types! { - pub const UncleGenerations: BlockNumber = 0; -} - impl pallet_authorship::Config for Runtime { type FindAuthor = pallet_session::FindAccountFromAuthorIndex; - type UncleGenerations = UncleGenerations; - type FilterUncle = (); type EventHandler = (Staking, ImOnline); } @@ -496,7 +495,7 @@ impl_opaque_keys! { } impl pallet_session::Config for Runtime { - type Event = Event; + type RuntimeEvent = RuntimeEvent; type ValidatorId = ::AccountId; type ValidatorIdOf = pallet_staking::StashOf; type ShouldEndSession = Babe; @@ -547,13 +546,14 @@ impl EraPayout for NoInflationIfNoEras { } parameter_types! { - pub const SessionsPerEra: sp_staking::SessionIndex = 6; + pub const SessionsPerEra: sp_staking::SessionIndex = SESSIONS_PER_ERA; pub const BondingDuration: sp_staking::EraIndex = BONDING_DURATION; pub const SlashDeferDuration: sp_staking::EraIndex = SLASH_DEFER_DURATION; pub const RewardCurve: &'static PiecewiseLinear<'static> = &REWARD_CURVE; pub const MaxNominatorRewardedPerValidator: u32 = 256; pub const OffendingValidatorsThreshold: Perbill = Perbill::from_percent(17); pub OffchainRepeat: BlockNumber = UnsignedPhase::get() / 8; + pub HistoryDepth: u32 = 120; } pub struct StakingBenchmarkingConfig; @@ -569,25 +569,26 @@ impl pallet_staking::Config for Runtime { type UnixTime = Timestamp; type CurrencyToVote = frame_support::traits::SaturatingCurrencyToVote; // U128CurrencyToVote; type RewardRemainder = (); - type Event = Event; + type RuntimeEvent = RuntimeEvent; type Slash = (); type Reward = (); // rewards are minted from the void type SessionsPerEra = SessionsPerEra; type BondingDuration = BondingDuration; type SlashDeferDuration = SlashDeferDuration; - type SlashCancelOrigin = EnsureRoot; + type AdminOrigin = EnsureRoot; type SessionInterface = Self; - // TODO (Mainnet): enable normal curve - // type EraPayout = pallet_staking::ConvertCurve; type EraPayout = NoInflationIfNoEras; type NextNewSession = Session; type MaxNominatorRewardedPerValidator = MaxNominatorRewardedPerValidator; type OffendingValidatorsThreshold = OffendingValidatorsThreshold; type ElectionProvider = ElectionProviderMultiPhase; - type GenesisElectionProvider = onchain::UnboundedExecution; - type VoterList = BagsList; + type GenesisElectionProvider = onchain::OnChainExecution; + type VoterList = VoterList; + // type VoterList = VoterList; // not renaming for now + type TargetList = pallet_staking::UseValidatorsMap; type MaxUnlockingChunks = ConstU32<32>; - type OnStakerSlash = (); // NominationPools; + type HistoryDepth = HistoryDepth; + type OnStakerSlash = (); type WeightInfo = weights::pallet_staking::SubstrateWeight; type BenchmarkingConfig = StakingBenchmarkingConfig; type BondingRestriction = RestrictStakingAccountsFromBonding; @@ -634,6 +635,9 @@ frame_election_provider_support::generate_solution_type!( parameter_types! { pub MaxNominations: u32 = ::LIMIT as u32; pub MaxElectingVoters: u32 = 12_500; + // The maximum winners that can be elected by the Election pallet which is equivalent to the + // maximum active validators the staking pallet can have. + pub MaxActiveValidators: u32 = 400; // should not be more than max_validator_count genesis config in staking pallet? } /// The numbers configured here could always be more than the the maximum limits of staking pallet @@ -656,10 +660,10 @@ pub const MINER_MAX_ITERATIONS: u32 = 10; /// A source of random balance for NposSolver, which is meant to be run by the OCW election miner. pub struct OffchainRandomBalancing; -impl Get> for OffchainRandomBalancing { - fn get() -> Option<(usize, ExtendedBalance)> { +impl Get> for OffchainRandomBalancing { + fn get() -> Option { use sp_runtime::traits::TrailingZeroInput; - let iters = match MINER_MAX_ITERATIONS { + let iterations = match MINER_MAX_ITERATIONS { 0 => 0, max => { let seed = sp_io::offchain::random_seed(); @@ -670,7 +674,11 @@ impl Get> for OffchainRandomBalancing { } }; - Some((iters, 0)) + let config = BalancingConfig { + iterations, + tolerance: 0, + }; + Some(config) } } @@ -682,11 +690,8 @@ impl onchain::Config for OnChainSeqPhragmen { pallet_election_provider_multi_phase::SolutionAccuracyOf, >; type DataProvider = ::DataProvider; - type WeightInfo = - weights::pallet_election_provider_support_benchmarking::SubstrateWeight; -} - -impl onchain::BoundedConfig for OnChainSeqPhragmen { + type WeightInfo = frame_election_provider_support::weights::SubstrateWeight; + type MaxWinners = ::MaxWinners; type VotersBound = MaxElectingVoters; type TargetsBound = ConstU32<2_000>; } @@ -698,6 +703,7 @@ impl pallet_election_provider_multi_phase::MinerConfig for Runtime { type Solution = NposSolution16; type MaxVotesPerVoter = <::DataProvider as ElectionDataProvider>::MaxVotesPerVoter; + type MaxWinners = MaxActiveValidators; // The unsigned submissions have to respect the weight of the submit_unsigned call, thus their // weight estimate function is wired to this call's weight. @@ -711,7 +717,7 @@ impl pallet_election_provider_multi_phase::MinerConfig for Runtime { } impl pallet_election_provider_multi_phase::Config for Runtime { - type Event = Event; + type RuntimeEvent = RuntimeEvent; type Currency = Balances; type EstimateCallFee = TransactionPayment; type SignedPhase = SignedPhase; @@ -731,8 +737,8 @@ impl pallet_election_provider_multi_phase::Config for Runtime { type SlashHandler = (); // burn slashes type RewardHandler = (); // nothing to do upon rewards type DataProvider = Staking; - type Fallback = onchain::BoundedExecution; - type GovernanceFallback = onchain::BoundedExecution; + type Fallback = onchain::OnChainExecution; + type GovernanceFallback = onchain::OnChainExecution; type Solver = SequentialPhragmen< AccountId, pallet_election_provider_multi_phase::SolutionAccuracyOf, @@ -741,6 +747,7 @@ impl pallet_election_provider_multi_phase::Config for Runtime { type ForceOrigin = EnsureRoot; // EnsureRootOrHalfCouncil; type MaxElectableTargets = ConstU16<{ u16::MAX }>; type MaxElectingVoters = MaxElectingVoters; + type MaxWinners = MaxActiveValidators; // How does this relate with staking pallet type BenchmarkingConfig = ElectionProviderBenchmarkConfig; type WeightInfo = weights::pallet_election_provider_multi_phase::SubstrateWeight; } @@ -749,8 +756,9 @@ parameter_types! { pub const BagThresholds: &'static [u64] = &voter_bags::THRESHOLDS; } -impl pallet_bags_list::Config for Runtime { - type Event = Event; +type VoterBagsListInstance = pallet_bags_list::Instance1; +impl pallet_bags_list::Config for Runtime { + type RuntimeEvent = RuntimeEvent; type ScoreProvider = Staking; type WeightInfo = weights::pallet_bags_list::SubstrateWeight; type BagThresholds = BagThresholds; @@ -769,7 +777,7 @@ parameter_types! { impl pallet_im_online::Config for Runtime { type AuthorityId = ImOnlineId; - type Event = Event; + type RuntimeEvent = RuntimeEvent; type NextSessionRotation = Babe; type ValidatorSet = Historical; type ReportUnresponsiveness = Offences; @@ -781,7 +789,7 @@ impl pallet_im_online::Config for Runtime { } impl pallet_offences::Config for Runtime { - type Event = Event; + type RuntimeEvent = RuntimeEvent; type IdentificationTuple = pallet_session::historical::IdentificationTuple; type OnOffenceHandler = Staking; } @@ -795,19 +803,19 @@ parameter_types! { pub const ContentModuleId: PalletId = PalletId(*b"mContent"); // module content pub const MaxKeysPerCuratorGroupPermissionsByLevelMap: u8 = 25; pub const DefaultGlobalDailyNftLimit: LimitPerPeriod = LimitPerPeriod { - block_number_period: DAYS, + block_number_period: days!(1), limit: 100, }; pub const DefaultGlobalWeeklyNftLimit: LimitPerPeriod = LimitPerPeriod { - block_number_period: WEEKS, + block_number_period: days!(7), limit: 400, }; pub const DefaultChannelDailyNftLimit: LimitPerPeriod = LimitPerPeriod { - block_number_period: DAYS, + block_number_period: days!(1), limit: 10, }; pub const DefaultChannelWeeklyNftLimit: LimitPerPeriod = LimitPerPeriod { - block_number_period: WEEKS, + block_number_period: days!(7), limit: 40, }; pub const MinimumCashoutAllowedLimit: Balance = dollars!(10); @@ -816,7 +824,7 @@ parameter_types! { // Channel bloat bond related: pub ChannelCleanupTxFee: Balance = compute_fee( - Call::Content(content::Call::::delete_channel { + RuntimeCall::Content(content::Call::::delete_channel { actor: Default::default(), channel_id: 0, channel_bag_witness: content::ChannelBagWitness { @@ -835,7 +843,7 @@ parameter_types! { // Video bloat bond related: pub VideoCleanupTxFee: Balance = compute_fee( - Call::Content(content::Call::::delete_video { + RuntimeCall::Content(content::Call::::delete_video { actor: Default::default(), video_id: 0, num_objects_to_delete: 1, @@ -856,7 +864,7 @@ parameter_types! { } impl content::Config for Runtime { - type Event = Event; + type RuntimeEvent = RuntimeEvent; type VideoId = VideoId; type OpenAuctionId = OpenAuctionId; type MaxNumberOfCuratorsPerGroup = MaxNumberOfCuratorsPerGroup; @@ -886,9 +894,10 @@ parameter_types! { pub const ProjectTokenModuleId: PalletId = PalletId(*b"mo:token"); // module: token pub const MaxVestingSchedulesPerAccountPerToken: u32 = 5; pub const BlocksPerYear: u32 = 5259600; // 365,25 * 24 * 60 * 60 / 6 + pub const MaxOutputs: u32 = 24; // set according to https://github.com/Joystream/joystream/issues/4947#issuecomment-1778893817 // Account bloat bond related: pub ProjectTokenAccountCleanupTxFee: Balance = compute_fee( - Call::ProjectToken(project_token::Call::::dust_account { + RuntimeCall::ProjectToken(project_token::Call::::dust_account { token_id: 0, member_id: 0, }) @@ -903,10 +912,9 @@ parameter_types! { } impl project_token::Config for Runtime { - type Event = Event; + type RuntimeEvent = RuntimeEvent; type Balance = Balance; type TokenId = TokenId; - type BlockNumberToBalance = BlockNumberToBalance; type DataObjectStorage = Storage; type ModuleId = ProjectTokenModuleId; type MaxVestingSchedulesPerAccountPerToken = MaxVestingSchedulesPerAccountPerToken; @@ -914,6 +922,7 @@ impl project_token::Config for Runtime { type BlocksPerYear = BlocksPerYear; type MemberOriginValidator = Members; type MembershipInfoProvider = Members; + type MaxOutputs = MaxOutputs; type WeightInfo = project_token::weights::SubstrateWeight; } @@ -927,31 +936,30 @@ pub type CouncilModule = council::Module; feature = "staging-runtime", feature = "playground-runtime", feature = "testing-runtime", - feature = "runtime-benchmarks" )))] parameter_types! { // referendum parameters pub const MaxSaltLength: u64 = 32; - pub const VoteStageDuration: BlockNumber = days!(3); - pub const RevealStageDuration: BlockNumber = days!(3); + pub const VoteStageDuration: BlockNumber = days!(4); + pub const RevealStageDuration: BlockNumber = days!(4); pub const MinimumVotingStake: Balance = dollars!(10); pub const MaxWinnerTargetCount: u32 = CouncilSize::get(); // council parameteres pub const MinNumberOfExtraCandidates: u32 = 0; - pub const AnnouncingPeriodDuration: BlockNumber = days!(9); - pub const IdlePeriodDuration: BlockNumber = 1; // 1 block + pub const AnnouncingPeriodDuration: BlockNumber = days!(6); + pub const IdlePeriodDuration: BlockNumber = days!(14); pub const CouncilSize: u32 = 3; pub const MinCandidateStake: Balance = dollars!(10_000); pub const ElectedMemberRewardPeriod: BlockNumber = days!(1); pub const BudgetRefillPeriod: BlockNumber = days!(1); } -// Common playground and benchmarking coucil and elections configuration +// playground council and elections configuration - also recommended for benchmarking // Periods are shorter to: // - allow easier testing // - prevent benchmarks System::events() from accumulating too much data and overflowing the memory -#[cfg(any(feature = "playground-runtime", feature = "runtime-benchmarks"))] +#[cfg(feature = "playground-runtime")] parameter_types! { // referendum parameters pub const MaxSaltLength: u64 = 32; @@ -969,14 +977,15 @@ parameter_types! { pub const BudgetRefillPeriod: BlockNumber = 33; } -#[cfg(feature = "runtime-benchmarks")] +#[cfg(feature = "playground-runtime")] +#[cfg(not(feature = "runtime-benchmarks"))] parameter_types! { - pub const CouncilSize: u32 = 3; + pub const CouncilSize: u32 = 1; } -#[cfg(feature = "playground-runtime")] +#[cfg(all(feature = "playground-runtime", feature = "runtime-benchmarks"))] parameter_types! { - pub const CouncilSize: u32 = 1; + pub const CouncilSize: u32 = 3; } // Staging coucil and elections configuration @@ -1020,10 +1029,11 @@ parameter_types! { } impl referendum::Config for Runtime { - type Event = Event; + type RuntimeEvent = RuntimeEvent; type MaxSaltLength = MaxSaltLength; type StakingHandler = VotingStakingManager; - type ManagerOrigin = EnsureOneOf, EnsureRoot>; + type ManagerOrigin = + EitherOfDiverse, EnsureRoot>; type VotePower = Balance; type VoteStageDuration = VoteStageDuration; type RevealStageDuration = RevealStageDuration; @@ -1069,7 +1079,7 @@ impl referendum::Config for Runtime { } impl council::Config for Runtime { - type Event = Event; + type RuntimeEvent = RuntimeEvent; type Referendum = ReferendumModule; type MinNumberOfExtraCandidates = MinNumberOfExtraCandidates; type CouncilSize = CouncilSize; @@ -1111,7 +1121,7 @@ parameter_types! { // To calculate the cost of removing a data object we substract the cost of removing a video // w/ 1 asset from a cost of removing a video w/ 2 assets pub DataObjectCleanupTxFee: Balance = compute_fee( - Call::Content(content::Call::::delete_video { + RuntimeCall::Content(content::Call::::delete_video { actor: Default::default(), video_id: 0, num_objects_to_delete: 2, @@ -1119,7 +1129,7 @@ parameter_types! { }) ).saturating_sub( compute_fee( - Call::Content(content::Call::::delete_video { + RuntimeCall::Content(content::Call::::delete_video { actor: Default::default(), video_id: 0, num_objects_to_delete: 1, @@ -1160,7 +1170,7 @@ const_assert!(MinDistributionBucketsPerBag::get() > 0); const_assert!(MaxDistributionBucketsPerBag::get() >= MinDistributionBucketsPerBag::get()); impl storage::Config for Runtime { - type Event = Event; + type RuntimeEvent = RuntimeEvent; type DataObjectId = DataObjectId; type StorageBucketId = StorageBucketId; type DistributionBucketIndex = DistributionBucketIndex; @@ -1201,7 +1211,7 @@ parameter_types! { pub const DefaultMemberInvitesCount: u32 = 2; // Candidate stake related: pub StakingAccountCleanupTxFee: Balance = compute_fee( - Call::Members(membership::Call::::remove_staking_account { member_id: 0 }) + RuntimeCall::Members(membership::Call::::remove_staking_account { member_id: 0 }) ); pub CandidateStake: Balance = stake_with_cleanup( MinimumVotingStake::get(), @@ -1210,7 +1220,7 @@ parameter_types! { } impl membership::Config for Runtime { - type Event = Event; + type RuntimeEvent = RuntimeEvent; type DefaultMembershipPrice = DefaultMembershipPrice; type DefaultInitialInvitationBalance = DefaultInitialInvitationBalance; type InvitedMemberStakingHandler = InvitedMemberStakingManager; @@ -1224,13 +1234,13 @@ impl membership::Config for Runtime { parameter_types! { pub const MaxCategoryDepth: u64 = 6; - pub const MaxDirectSubcategoriesInCategory: u64 = 5; + pub const MaxDirectSubcategoriesInCategory: u64 = 10; pub const MaxTotalCategories: u64 = 40; pub const MaxModeratorsForCategory: u64 = 10; // Thread bloat bond related: pub FroumThreadCleanupTxFee: Balance = compute_fee( - Call::Forum(forum::Call::::delete_thread { + RuntimeCall::Forum(forum::Call::::delete_thread { forum_user_id: 0, category_id: 0, thread_id: 0, @@ -1246,7 +1256,7 @@ parameter_types! { // Post bloat bond related: pub FroumPostCleanupTxFee: Balance = compute_fee( - Call::Forum(forum::Call::::delete_posts { + RuntimeCall::Forum(forum::Call::::delete_posts { forum_user_id: 0, posts: BTreeMap::from_iter(vec![( forum::ExtendedPostId:: { category_id: 0, thread_id: 0, post_id: 0 }, @@ -1274,7 +1284,7 @@ impl forum::StorageLimits for MapLimits { } impl forum::Config for Runtime { - type Event = Event; + type RuntimeEvent = RuntimeEvent; type ThreadId = ThreadId; type PostId = PostId; type CategoryId = u64; @@ -1320,7 +1330,16 @@ impl BondingRestriction for RestrictStakingAccountsFromBonding { } parameter_types! { - pub const MaxWorkerNumberLimit: u32 = 30; + pub const ForumMaxWorkerNumberLimit: u32 = 30; + pub const StorageMaxWorkerNumberLimit: u32 = 50; + pub const ContentMaxWorkerNumberLimit: u32 = 30; + pub const MembershipMaxWorkerNumberLimit: u32 = 30; + pub const AppMaxWorkerNumberLimit: u32 = 30; + pub const OperationsAlphaMaxWorkerNumberLimit: u32 = 30; + pub const OperationsBetaMaxWorkerNumberLimit: u32 = 30; + pub const OperationsGammaMaxWorkerNumberLimit: u32 = 30; + pub const DistributionMaxWorkerNumberLimit: u32 = 50; + pub const MinUnstakingPeriodLimit: u32 = days!(20); // FIXME: Periods should be the same, but rewards should start at different blocks pub const ForumWorkingGroupRewardPeriod: u32 = days!(1) + 10; @@ -1399,8 +1418,8 @@ pub type OperationsWorkingGroupInstanceGamma = working_group::Instance8; pub type DistributionWorkingGroupInstance = working_group::Instance9; impl working_group::Config for Runtime { - type Event = Event; - type MaxWorkerNumberLimit = MaxWorkerNumberLimit; + type RuntimeEvent = RuntimeEvent; + type MaxWorkerNumberLimit = ForumMaxWorkerNumberLimit; type StakingHandler = ForumWorkingGroupStakingManager; type StakingAccountValidator = Members; type MemberOriginValidator = Members; @@ -1412,8 +1431,8 @@ impl working_group::Config for Runtime { } impl working_group::Config for Runtime { - type Event = Event; - type MaxWorkerNumberLimit = MaxWorkerNumberLimit; + type RuntimeEvent = RuntimeEvent; + type MaxWorkerNumberLimit = StorageMaxWorkerNumberLimit; type StakingHandler = StorageWorkingGroupStakingManager; type StakingAccountValidator = Members; type MemberOriginValidator = Members; @@ -1425,8 +1444,8 @@ impl working_group::Config for Runtime { } impl working_group::Config for Runtime { - type Event = Event; - type MaxWorkerNumberLimit = MaxWorkerNumberLimit; + type RuntimeEvent = RuntimeEvent; + type MaxWorkerNumberLimit = ContentMaxWorkerNumberLimit; type StakingHandler = ContentWorkingGroupStakingManager; type StakingAccountValidator = Members; type MemberOriginValidator = Members; @@ -1438,8 +1457,8 @@ impl working_group::Config for Runtime { } impl working_group::Config for Runtime { - type Event = Event; - type MaxWorkerNumberLimit = MaxWorkerNumberLimit; + type RuntimeEvent = RuntimeEvent; + type MaxWorkerNumberLimit = MembershipMaxWorkerNumberLimit; type StakingHandler = MembershipWorkingGroupStakingManager; type StakingAccountValidator = Members; type MemberOriginValidator = Members; @@ -1451,8 +1470,8 @@ impl working_group::Config for Runtime { } impl working_group::Config for Runtime { - type Event = Event; - type MaxWorkerNumberLimit = MaxWorkerNumberLimit; + type RuntimeEvent = RuntimeEvent; + type MaxWorkerNumberLimit = OperationsAlphaMaxWorkerNumberLimit; type StakingHandler = OperationsWorkingGroupAlphaStakingManager; type StakingAccountValidator = Members; type MemberOriginValidator = Members; @@ -1464,8 +1483,8 @@ impl working_group::Config for Runtime { } impl working_group::Config for Runtime { - type Event = Event; - type MaxWorkerNumberLimit = MaxWorkerNumberLimit; + type RuntimeEvent = RuntimeEvent; + type MaxWorkerNumberLimit = AppMaxWorkerNumberLimit; type StakingHandler = AppWorkingGroupStakingManager; type StakingAccountValidator = Members; type MemberOriginValidator = Members; @@ -1477,8 +1496,8 @@ impl working_group::Config for Runtime { } impl working_group::Config for Runtime { - type Event = Event; - type MaxWorkerNumberLimit = MaxWorkerNumberLimit; + type RuntimeEvent = RuntimeEvent; + type MaxWorkerNumberLimit = OperationsBetaMaxWorkerNumberLimit; type StakingHandler = OperationsWorkingGroupBetaStakingManager; type StakingAccountValidator = Members; type MemberOriginValidator = Members; @@ -1490,8 +1509,8 @@ impl working_group::Config for Runtime { } impl working_group::Config for Runtime { - type Event = Event; - type MaxWorkerNumberLimit = MaxWorkerNumberLimit; + type RuntimeEvent = RuntimeEvent; + type MaxWorkerNumberLimit = OperationsGammaMaxWorkerNumberLimit; type StakingHandler = OperationsWorkingGroupGammaStakingManager; type StakingAccountValidator = Members; type MemberOriginValidator = Members; @@ -1503,8 +1522,8 @@ impl working_group::Config for Runtime { } impl working_group::Config for Runtime { - type Event = Event; - type MaxWorkerNumberLimit = MaxWorkerNumberLimit; + type RuntimeEvent = RuntimeEvent; + type MaxWorkerNumberLimit = DistributionMaxWorkerNumberLimit; type StakingHandler = DistributionWorkingGroupStakingManager; type StakingAccountValidator = Members; type MemberOriginValidator = Members; @@ -1536,7 +1555,7 @@ parameter_types! { } impl proposals_engine::Config for Runtime { - type Event = Event; + type RuntimeEvent = RuntimeEvent; type ProposerOriginValidator = Members; type CouncilOriginValidator = Council; type TotalVotersCounter = CouncilManager; @@ -1547,16 +1566,16 @@ impl proposals_engine::Config for Runtime { type TitleMaxLength = ProposalTitleMaxLength; type DescriptionMaxLength = ProposalDescriptionMaxLength; type MaxActiveProposalLimit = ProposalMaxActiveProposalLimit; - type DispatchableCallCode = Call; + type DispatchableCallCode = RuntimeCall; type ProposalObserver = ProposalsCodex; type WeightInfo = proposals_engine::weights::SubstrateWeight; type StakingAccountValidator = Members; type DispatchableCallCodeMaxLen = DispatchableCallCodeMaxLen; } -impl Default for Call { +impl Default for RuntimeCall { fn default() -> Self { - panic!("shouldn't call default for Call"); + panic!("shouldn't call default for RuntimeCall"); } } @@ -1568,7 +1587,7 @@ parameter_types! { // Proposal discussion post deposit related: pub ProposalDiscussionPostCleanupTxFee: Balance = compute_fee( - Call::ProposalsDiscussion(proposals_discussion::Call::::delete_post { + RuntimeCall::ProposalsDiscussion(proposals_discussion::Call::::delete_post { deleter_id: 0, post_id: 0, thread_id: 0, @@ -1601,7 +1620,7 @@ macro_rules! call_wg { } impl proposals_discussion::Config for Runtime { - type Event = Event; + type RuntimeEvent = RuntimeEvent; type AuthorOriginValidator = Members; type MembershipInfoProvider = Members; type CouncilOriginValidator = Council; @@ -1615,7 +1634,7 @@ impl proposals_discussion::Config for Runtime { } impl joystream_utility::Config for Runtime { - type Event = Event; + type RuntimeEvent = RuntimeEvent; type WeightInfo = joystream_utility::weights::SubstrateWeight; @@ -1643,7 +1662,7 @@ const_assert!( ); impl proposals_codex::Config for Runtime { - type Event = Event; + type RuntimeEvent = RuntimeEvent; type MembershipOriginValidator = Members; type ProposalEncoder = ExtrinsicProposalEncoder; type SetMaxValidatorCountProposalParameters = SetMaxValidatorCountProposalParameters; @@ -1678,11 +1697,12 @@ impl proposals_codex::Config for Runtime { type FundingRequestProposalMaxTotalAmount = FundingRequestProposalMaxTotalAmount; type FundingRequestProposalMaxAccounts = FundingRequestProposalMaxAccounts; type SetMaxValidatorCountProposalMaxValidators = SetMaxValidatorCountProposalMaxValidators; + type SetPalletFozenStatusProposalParameters = SetPalletFozenStatusProposalParameters; type WeightInfo = proposals_codex::weights::SubstrateWeight; } impl pallet_constitution::Config for Runtime { - type Event = Event; + type RuntimeEvent = RuntimeEvent; type WeightInfo = pallet_constitution::weights::SubstrateWeight; } @@ -1692,7 +1712,7 @@ parameter_types! { // Bounty work entry stake related: pub BountyWorkEntryCleanupTxFee: Balance = compute_fee( - Call::Bounty(bounty::Call::::withdraw_entrant_stake { + RuntimeCall::Bounty(bounty::Call::::withdraw_entrant_stake { member_id: 0, bounty_id: 0, entry_id: 0, @@ -1707,7 +1727,7 @@ parameter_types! { // Funder bloat bond related: pub BountyContributionCleanupTxFee: Balance = compute_fee( - Call::Bounty(bounty::Call::::withdraw_funding { + RuntimeCall::Bounty(bounty::Call::::withdraw_funding { funder: Default::default(), bounty_id: 0, }) @@ -1722,7 +1742,7 @@ parameter_types! { // Creator bloat bond related: pub BountyCleanupTxFee: Balance = compute_fee( - Call::Bounty(bounty::Call::::terminate_bounty { + RuntimeCall::Bounty(bounty::Call::::terminate_bounty { bounty_id: 0, }) ); @@ -1735,7 +1755,7 @@ parameter_types! { } impl bounty::Config for Runtime { - type Event = Event; + type RuntimeEvent = RuntimeEvent; type ModuleId = BountyModuleId; type BountyId = u64; type Membership = Members; @@ -1755,7 +1775,7 @@ parameter_types! { } impl pallet_vesting::Config for Runtime { - type Event = Event; + type RuntimeEvent = RuntimeEvent; type Currency = Balances; type BlockNumberToBalance = ConvertInto; type MinVestedTransfer = MinVestedTransfer; @@ -1770,12 +1790,9 @@ parameter_types! { pub MultisigMapEntryFixedPortionByteSize: u32 = double_map_entry_fixed_byte_size::< pallet_multisig::Multisigs::, _, _, _, _, _ >(); - pub CallMapEntryFixedPortionByteSize: u32 = map_entry_fixed_byte_size::< - pallet_multisig::Calls::, _, _, _ - >(); // Deposit for storing one new item in Multisigs/Calls map pub DepositBase: Balance = compute_single_bloat_bond( - MultisigMapEntryFixedPortionByteSize::get().max(CallMapEntryFixedPortionByteSize::get()), + MultisigMapEntryFixedPortionByteSize::get(), None ); // Deposit for adding 32 bytes to an already stored item @@ -1785,8 +1802,8 @@ parameter_types! { } impl pallet_multisig::Config for Runtime { - type Event = Event; - type Call = Call; + type RuntimeEvent = RuntimeEvent; + type RuntimeCall = RuntimeCall; type Currency = Balances; type DepositBase = DepositBase; type DepositFactor = DepositFactor; @@ -1835,8 +1852,8 @@ construct_runtime!( AuthorityDiscovery: pallet_authority_discovery, ImOnline: pallet_im_online, Offences: pallet_offences, - RandomnessCollectiveFlip: pallet_randomness_collective_flip, - BagsList: pallet_bags_list, + RandomnessCollectiveFlip: pallet_insecure_randomness_collective_flip, + VoterList: pallet_bags_list::::{Pallet, Call, Storage, Event}, Vesting: pallet_vesting, Multisig: pallet_multisig, // Joystream @@ -1866,3 +1883,48 @@ construct_runtime!( DistributionWorkingGroup: working_group::::{Pallet, Call, Storage, Event}, } ); + +#[cfg(all(test, feature = "try-runtime"))] +mod remote_tests { + use super::*; + use frame_try_runtime::{runtime_decl_for_try_runtime::TryRuntimeV1, UpgradeCheckSelect}; + use remote_externalities::{ + Builder, Mode, OfflineConfig, OnlineConfig, SnapshotConfig, Transport, + }; + use std::env::var; + + #[tokio::test] + async fn run_migrations() { + if var("RUN_MIGRATION_TESTS").is_err() { + return; + } + + sp_tracing::try_init_simple(); + let transport: Transport = var("WS") + .unwrap_or("wss://rpc.joystream.org:443".to_string()) + .into(); + let maybe_state_snapshot: Option = var("SNAP").map(|s| s.into()).ok(); + let mut ext = Builder::::default() + .mode(if let Some(state_snapshot) = maybe_state_snapshot { + Mode::OfflineOrElseOnline( + OfflineConfig { + state_snapshot: state_snapshot.clone(), + }, + OnlineConfig { + transport, + state_snapshot: Some(state_snapshot), + ..Default::default() + }, + ) + } else { + Mode::Online(OnlineConfig { + transport, + ..Default::default() + }) + }) + .build() + .await + .unwrap(); + ext.execute_with(|| Runtime::on_runtime_upgrade(UpgradeCheckSelect::PreAndPost)); + } +} diff --git a/runtime/src/proposals_configuration/defaults.rs b/runtime/src/proposals_configuration/defaults.rs index 988dac4c7f..a39e837d2d 100644 --- a/runtime/src/proposals_configuration/defaults.rs +++ b/runtime/src/proposals_configuration/defaults.rs @@ -343,3 +343,17 @@ pub(crate) fn update_channel_payouts_proposal() -> ProposalParameters ProposalParameters { + ProposalParameters { + voting_period: days!(3), + grace_period: 0, + approval_quorum_percentage: TWO_OUT_OF_THREE, + approval_threshold_percentage: TWO_OUT_OF_THREE, + slashing_quorum_percentage: ALL, + slashing_threshold_percentage: ALL, + required_stake: Some(dollars!(50)), + constitutionality: 1, + } +} diff --git a/runtime/src/proposals_configuration/mod.rs b/runtime/src/proposals_configuration/mod.rs index 3808c206d4..7c2eb9a528 100644 --- a/runtime/src/proposals_configuration/mod.rs +++ b/runtime/src/proposals_configuration/mod.rs @@ -106,4 +106,7 @@ parameter_types! { pub UpdateChannelPayoutsProposalParameters: ProposalParameters = update_channel_payouts_proposal(); + + pub SetPalletFozenStatusProposalParameters: ProposalParameters = + freeze_pallet_proposal(); } diff --git a/runtime/src/proposals_configuration/playground.rs b/runtime/src/proposals_configuration/playground.rs index 596a974072..561cf4d1fb 100644 --- a/runtime/src/proposals_configuration/playground.rs +++ b/runtime/src/proposals_configuration/playground.rs @@ -330,3 +330,17 @@ pub(crate) fn update_channel_payouts_proposal() -> ProposalParameters ProposalParameters { + ProposalParameters { + voting_period: 200, + grace_period: 0, + approval_quorum_percentage: 60, + approval_threshold_percentage: 75, + slashing_quorum_percentage: 60, + slashing_threshold_percentage: 80, + required_stake: Some(dollars!(50)), + constitutionality: 1, + } +} diff --git a/runtime/src/proposals_configuration/staging.rs b/runtime/src/proposals_configuration/staging.rs index 9940ae1819..0c3b65c75b 100644 --- a/runtime/src/proposals_configuration/staging.rs +++ b/runtime/src/proposals_configuration/staging.rs @@ -343,3 +343,16 @@ pub(crate) fn update_channel_payouts_proposal() -> ProposalParameters ProposalParameters { + ProposalParameters { + voting_period: minutes!(20), + grace_period: 0, + approval_quorum_percentage: TWO_OUT_OF_THREE, + approval_threshold_percentage: TWO_OUT_OF_THREE, + slashing_quorum_percentage: ALL, + slashing_threshold_percentage: ALL, + required_stake: Some(dollars!(50)), + constitutionality: 1, + } +} diff --git a/runtime/src/proposals_configuration/testing.rs b/runtime/src/proposals_configuration/testing.rs index 9ac94575cc..e06a81e596 100644 --- a/runtime/src/proposals_configuration/testing.rs +++ b/runtime/src/proposals_configuration/testing.rs @@ -331,3 +331,17 @@ pub(crate) fn update_channel_payouts_proposal() -> ProposalParameters ProposalParameters { + ProposalParameters { + voting_period: 30, + grace_period: 0, + approval_quorum_percentage: 60, + approval_threshold_percentage: 75, + slashing_quorum_percentage: 60, + slashing_threshold_percentage: 80, + required_stake: Some(currency::DOLLARS.saturating_mul(50)), + constitutionality: 1, + } +} diff --git a/runtime/src/runtime_api.rs b/runtime/src/runtime_api.rs index 0f1fa111ad..b1703643d3 100644 --- a/runtime/src/runtime_api.rs +++ b/runtime/src/runtime_api.rs @@ -6,18 +6,21 @@ use pallet_transaction_payment::{FeeDetails, RuntimeDispatchInfo}; use sp_api::impl_runtime_apis; use sp_core::crypto::KeyTypeId; use sp_core::OpaqueMetadata; -use sp_runtime::traits::{BlakeTwo256, Block as BlockT, NumberFor}; +use sp_runtime::traits::{BlakeTwo256, Block as BlockT, Get, NumberFor}; use sp_runtime::{generic, ApplyExtrinsicResult}; use sp_std::vec::Vec; use crate::{ AccountId, AllPalletsWithSystem, AuthorityDiscovery, AuthorityDiscoveryId, Babe, Balance, - BlockNumber, Call, EpochDuration, Grandpa, GrandpaAuthorityList, GrandpaId, Historical, Index, - InherentDataExt, ProposalsEngine, Runtime, RuntimeVersion, SessionKeys, Signature, System, - TransactionPayment, BABE_GENESIS_EPOCH_CONFIG, VERSION, + BlockNumber, EpochDuration, Grandpa, GrandpaAuthorityList, GrandpaId, Historical, Index, + InherentDataExt, ProposalsEngine, Runtime, RuntimeCall, RuntimeVersion, SessionKeys, Signature, + Staking, System, TransactionPayment, VoterList, BABE_GENESIS_EPOCH_CONFIG, VERSION, }; +#[cfg(feature = "try-runtime")] +use crate::RuntimeBlockWeights; + use frame_support::weights::Weight; /// The SignedExtension to the basic transaction logic. @@ -51,32 +54,74 @@ pub type SignedBlock = generic::SignedBlock; pub type BlockId = generic::BlockId; /// The payload being signed in transactions. -pub type SignedPayload = generic::SignedPayload; +pub type SignedPayload = generic::SignedPayload; /// Extrinsic type that has already been checked. -pub type CheckedExtrinsic = generic::CheckedExtrinsic; +pub type CheckedExtrinsic = generic::CheckedExtrinsic; /// Unchecked extrinsic type as expected by this runtime. -pub type UncheckedExtrinsic = generic::UncheckedExtrinsic; - -/// Custom runtime upgrade handler. -pub struct CustomOnRuntimeUpgrade; -impl OnRuntimeUpgrade for CustomOnRuntimeUpgrade { +pub type UncheckedExtrinsic = + generic::UncheckedExtrinsic; + +// On runtime upgrade, stored calls of proposals are not guarnateed to still +// represent the intended module and dispatch call, so for safety we cancel +// all proposals. +pub struct CancelActiveAndPendingProposals; +impl OnRuntimeUpgrade for CancelActiveAndPendingProposals { fn on_runtime_upgrade() -> Weight { ProposalsEngine::cancel_active_and_pending_proposals(); - 10_000_000 // TODO: adjust weight + Weight::from_parts(10_000_000, 0) // TODO: adjust weight + } +} + +pub struct MigrateStakingPalletToV8; +impl OnRuntimeUpgrade for MigrateStakingPalletToV8 { + fn on_runtime_upgrade() -> Weight { + pallet_staking::migrations::v8::migrate::() } } -/// Executive: handles dispatch to the various modules with CustomOnRuntimeUpgrade. +pub struct StakingMigrationV11OldPallet; +impl Get<&'static str> for StakingMigrationV11OldPallet { + fn get() -> &'static str { + "BagsList" + } +} + +/// Migrations to run on runtime upgrade. +/// Migrations will run before pallet on_runtime_upgrade hooks +/// Always include 'CancelActiveAndPendingProposals' as first migration +pub type Migrations = ( + CancelActiveAndPendingProposals, + // == start Staking migrations (from Release v7 to Release v13) + MigrateStakingPalletToV8, + // list will not produce duplicates.. + pallet_staking::migrations::v9::InjectValidatorsIntoVoterList, + // slash all pending slashes correctly + pallet_staking::migrations::v10::MigrateToV10, + // Rename BagsList to VoterList + pallet_staking::migrations::v11::MigrateToV11, + // Kill HistoryDepth storage + pallet_staking::migrations::v12::MigrateToV12, + // Migrate to new storage versioning + pallet_staking::migrations::v13::MigrateToV13, + // == end Staking Migrations + // unreserve balances from old stored calls in multisig pallet + pallet_multisig::migrations::v1::MigrateToV1, + pallet_election_provider_multi_phase::migrations::v1::MigrateToV1, + pallet_grandpa::migrations::CleanupSetIdSessionMap, + content::migrations::nara::MigrateToV1, +); + +/// Executive: handles dispatch to the various modules with Migrations. pub type Executive = frame_executive::Executive< Runtime, Block, frame_system::ChainContext, Runtime, AllPalletsWithSystem, - CustomOnRuntimeUpgrade, + Migrations, >; /// Export of the private const generated within the macro. @@ -87,7 +132,7 @@ mod benches { define_benchmarks!( [frame_benchmarking, BaselineBench::] [pallet_babe, Babe] - [pallet_bags_list, BagsList] + [pallet_bags_list, VoterList] [pallet_balances, Balances] [pallet_election_provider_multi_phase, ElectionProviderMultiPhase] [pallet_election_provider_support_benchmarking, EPSBench::] @@ -157,6 +202,12 @@ impl_runtime_apis! { } } + impl pallet_staking_runtime_api::StakingApi for Runtime { + fn nominations_quota(balance: Balance) -> u32 { + Staking::api_nominations_quota(balance) + } + } + impl sp_transaction_pool::runtime_api::TaggedTransactionQueue for Runtime { fn validate_transaction( source: TransactionSource, @@ -210,19 +261,20 @@ impl_runtime_apis! { } impl sp_consensus_babe::BabeApi for Runtime { - fn configuration() -> sp_consensus_babe::BabeGenesisConfiguration { + fn configuration() -> sp_consensus_babe::BabeConfiguration { // The choice of `c` parameter (where `1 - c` represents the // probability of a slot being empty), is done in accordance to the // slot duration and expected target block time, for safely // resisting network delays of maximum two seconds. // - sp_consensus_babe::BabeGenesisConfiguration { + let epoch_config = Babe::epoch_config().unwrap_or(BABE_GENESIS_EPOCH_CONFIG); + sp_consensus_babe::BabeConfiguration { slot_duration: Babe::slot_duration(), epoch_length: EpochDuration::get(), - c: BABE_GENESIS_EPOCH_CONFIG.c, - genesis_authorities: Babe::authorities().to_vec(), + c: epoch_config.c, + authorities: Babe::authorities().to_vec(), randomness: Babe::randomness(), - allowed_slots: BABE_GENESIS_EPOCH_CONFIG.allowed_slots, + allowed_slots: epoch_config.allowed_slots, } } @@ -284,6 +336,12 @@ impl_runtime_apis! { fn query_fee_details(uxt: ::Extrinsic, len: u32) -> FeeDetails { TransactionPayment::query_fee_details(uxt, len) } + fn query_weight_to_fee(weight: Weight) -> Balance { + TransactionPayment::weight_to_fee(weight) + } + fn query_length_to_fee(length: u32) -> Balance { + TransactionPayment::length_to_fee(length) + } } impl sp_session::SessionKeys for Runtime { @@ -298,13 +356,35 @@ impl_runtime_apis! { } } + #[cfg(feature = "try-runtime")] + impl frame_try_runtime::TryRuntime for Runtime { + fn on_runtime_upgrade(checks: frame_try_runtime::UpgradeCheckSelect) -> (Weight, Weight) { + // NOTE: intentional unwrap: we don't want to propagate the error backwards, and want to + // have a backtrace here. If any of the pre/post migration checks fail, we shall stop + // right here and right now. + let weight = Executive::try_runtime_upgrade(checks).unwrap(); + (weight, RuntimeBlockWeights::get().max_block) + } + + fn execute_block( + block: Block, + state_root_check: bool, + signature_check: bool, + select: frame_try_runtime::TryStateSelect + ) -> Weight { + // NOTE: intentional unwrap: we don't want to propagate the error backwards, and want to + // have a backtrace here. + Executive::try_execute_block(block, state_root_check, signature_check, select).unwrap() + } + } + #[cfg(feature = "runtime-benchmarks")] - impl frame_benchmarking::Benchmark for Runtime { + impl frame_benchmarking::v1::Benchmark for Runtime { fn benchmark_metadata(extra: bool) -> ( - Vec, + Vec, Vec, ) { - use frame_benchmarking::{baseline, Benchmarking, BenchmarkList}; + use frame_benchmarking::v1::{baseline, Benchmarking, BenchmarkList}; use frame_support::traits::StorageInfoTrait; use crate::*; @@ -325,9 +405,9 @@ impl_runtime_apis! { } fn dispatch_benchmark( - config: frame_benchmarking::BenchmarkConfig - ) -> Result, sp_runtime::RuntimeString> { - use frame_benchmarking::{baseline, Benchmarking, BenchmarkBatch, TrackedStorageKey}; + config: frame_benchmarking::v1::BenchmarkConfig + ) -> Result, sp_runtime::RuntimeString> { + use frame_benchmarking::v1::{baseline, Benchmarking, BenchmarkBatch, TrackedStorageKey}; use crate::*; // Trying to add benchmarks directly to the Session Pallet caused cyclic dependency @@ -440,7 +520,7 @@ mod tests { fn validate_transaction_submitter_bounds() { fn is_submit_signed_transaction() where - T: CreateSignedTransaction, + T: CreateSignedTransaction, { } @@ -463,11 +543,11 @@ mod tests { fn call_size() { // https://github.com/Joystream/joystream/pull/4336#discussion_r992359003 const SAFE_SIZE: usize = 400; - let current_size = core::mem::size_of::(); + let current_size = core::mem::size_of::(); assert!( current_size <= SAFE_SIZE, - "size of Call {} is more than {} bytes: some calls have too big arguments, use Box to reduce the - size of Call. If the limit is too strong, maybe consider increase the limit.", + "size of RuntimeCall {} is more than {} bytes: some calls have too big arguments, use Box to reduce the + size of RuntimeCall. If the limit is too strong, maybe consider increase the limit.", current_size, SAFE_SIZE ); } diff --git a/runtime/src/tests/fee_tests.rs b/runtime/src/tests/fee_tests.rs index f12ae3cf9a..b270c08747 100644 --- a/runtime/src/tests/fee_tests.rs +++ b/runtime/src/tests/fee_tests.rs @@ -15,10 +15,10 @@ fn runtime_upgrade_total_fee_is_correct() { // byte fee + base weight fee initial_test_ext().execute_with(|| { let tx_length_bytes = 3_000_000u32; - let dispatch_info = frame_support::weights::DispatchInfo { + let dispatch_info = frame_support::dispatch::DispatchInfo { weight: MAXIMUM_BLOCK_WEIGHT, - class: frame_support::weights::DispatchClass::Operational, - pays_fee: frame_support::weights::Pays::Yes, + class: frame_support::dispatch::DispatchClass::Operational, + pays_fee: frame_support::dispatch::Pays::Yes, }; let x = TransactionPayment::::compute_fee(tx_length_bytes, &dispatch_info, 0); let weight_fee = WeightToFeeImpl::weight_to_fee(&MAXIMUM_BLOCK_WEIGHT); diff --git a/runtime/src/tests/handle_fees.rs b/runtime/src/tests/handle_fees.rs index 4f8b91cc49..facb8157a9 100644 --- a/runtime/src/tests/handle_fees.rs +++ b/runtime/src/tests/handle_fees.rs @@ -8,11 +8,11 @@ use frame_support::traits::{Currency, Imbalance, OnUnbalanced}; fn block_author_only_receives_tips() { initial_test_ext().execute_with(|| { fn author() -> AccountId { - account_from_member_id(0).into() + account_from_member_id(0) } fn user() -> AccountId { - account_from_member_id(1).into() + account_from_member_id(1) } let user_starting_balance = currency::DOLLARS * 5000; diff --git a/runtime/src/tests/locks.rs b/runtime/src/tests/locks.rs index 7f22e35663..5b7e1ebd04 100644 --- a/runtime/src/tests/locks.rs +++ b/runtime/src/tests/locks.rs @@ -102,19 +102,14 @@ fn bonding_with_non_staked_account_works() { // bonding succeeds assert_eq!( - ::bond( - validator_1.clone(), - validator_1.clone(), - stake_amount, - validator_1.clone() - ), + ::bond(&validator_1, stake_amount, &validator_1), Ok(()) ); // and active stake will be stake_amount. assert_eq!( ::active_stake(&validator_1), - Some(stake_amount) + Ok(stake_amount) ); // Validate call succeeds @@ -155,12 +150,7 @@ fn bonding_with_staked_account_fails() { // bonding should fail assert_err!( - ::bond( - validator_1.clone(), - validator_1.clone(), - bond_amount, - validator_1.clone() - ), + ::bond(&validator_1, bond_amount, &validator_1), pallet_staking::Error::::BondingRestricted ); }); diff --git a/runtime/src/tests/mod.rs b/runtime/src/tests/mod.rs index 044de9a411..079b742844 100644 --- a/runtime/src/tests/mod.rs +++ b/runtime/src/tests/mod.rs @@ -71,7 +71,7 @@ pub(crate) fn create_new_members(count: u64) -> Vec { (0..count) .map(|i| { - let member_id = first_member_id + i as u64; + let member_id = first_member_id + i; let account_id = account_from_member_id(member_id); insert_member(account_id.clone()); set_staking_account(account_id.clone(), account_id, member_id); @@ -83,7 +83,7 @@ pub(crate) fn create_new_members(count: u64) -> Vec { pub(crate) fn setup_new_council(cycle_id: u64) { let council_size = ::CouncilSize::get(); let num_extra_candidates = ::MinNumberOfExtraCandidates::get() + 1; - let councilor_stake: u128 = ::MinCandidateStake::get().into(); + let councilor_stake: u128 = ::MinCandidateStake::get(); // council members that will be elected let council_member_ids = create_new_members(council_size as u64); @@ -127,18 +127,14 @@ pub(crate) fn setup_new_council(cycle_id: u64) { run_to_block(current_block + ::AnnouncingPeriodDuration::get()); let voter_stake: u128 = - >::MinimumStake::get().into(); + >::MinimumStake::get(); for (i, member_id) in voter_ids.iter().enumerate() { let voter = account_from_member_id(*member_id); increase_total_balance_issuance_using_account_id(voter.clone(), voter_stake + 1); - let commitment = Referendum::calculate_commitment( - &voter, - &[0u8], - &cycle_id, - &council_member_ids[i as usize], - ); + let commitment = + Referendum::calculate_commitment(&voter, &[0u8], &cycle_id, &council_member_ids[i]); Referendum::vote( RawOrigin::Signed(voter.clone()).into(), @@ -159,7 +155,7 @@ pub(crate) fn setup_new_council(cycle_id: u64) { Referendum::reveal_vote( RawOrigin::Signed(voter.clone()).into(), vec![0u8], - council_member_ids[i as usize], + council_member_ids[i], ) .unwrap(); } @@ -264,55 +260,32 @@ pub(crate) fn increase_total_balance_issuance_using_account_id( } pub(crate) fn max_proposal_stake() -> Balance { - let mut stakes = vec![]; - stakes - .push(::SetMaxValidatorCountProposalParameters::get()); - stakes.push(::RuntimeUpgradeProposalParameters::get()); - stakes.push(::SignalProposalParameters::get()); - stakes.push(::FundingRequestProposalParameters::get()); - stakes.push( - ::CreateWorkingGroupLeadOpeningProposalParameters::get( - ), - ); - stakes.push( + let stakes = vec![ + ::SetMaxValidatorCountProposalParameters::get(), + ::RuntimeUpgradeProposalParameters::get(), + ::SignalProposalParameters::get(), + ::FundingRequestProposalParameters::get(), + ::CreateWorkingGroupLeadOpeningProposalParameters::get(), ::FillWorkingGroupLeadOpeningProposalParameters::get(), - ); - stakes.push( ::UpdateWorkingGroupBudgetProposalParameters::get(), - ); - stakes.push( - ::DecreaseWorkingGroupLeadStakeProposalParameters::get( - ), - ); - stakes - .push(::SlashWorkingGroupLeadProposalParameters::get()); - stakes.push( + ::DecreaseWorkingGroupLeadStakeProposalParameters::get(), + ::SlashWorkingGroupLeadProposalParameters::get(), ::SetWorkingGroupLeadRewardProposalParameters::get(), - ); - stakes.push( ::TerminateWorkingGroupLeadProposalParameters::get(), - ); - stakes.push(::AmendConstitutionProposalParameters::get()); - stakes.push( - ::CancelWorkingGroupLeadOpeningProposalParameters::get( - ), - ); - stakes.push(::SetMembershipPriceProposalParameters::get()); - stakes.push( + ::AmendConstitutionProposalParameters::get(), + ::CancelWorkingGroupLeadOpeningProposalParameters::get(), + ::SetMembershipPriceProposalParameters::get(), ::SetCouncilBudgetIncrementProposalParameters::get(), - ); - stakes.push(::SetCouncilorRewardProposalParameters::get()); - stakes.push( + ::SetCouncilorRewardProposalParameters::get(), ::SetInitialInvitationBalanceProposalParameters::get(), - ); - stakes.push(::SetInvitationCountProposalParameters::get()); - stakes.push(::SetMembershipLeadInvitationQuotaProposalParameters::get()); - stakes.push(::SetReferralCutProposalParameters::get()); - stakes.push(::VetoProposalProposalParameters::get()); - stakes - .push(::UpdateChannelPayoutsProposalParameters::get()); - stakes - .push(::UpdateGlobalNftLimitProposalParameters::get()); + ::SetInvitationCountProposalParameters::get(), + ::SetMembershipLeadInvitationQuotaProposalParameters::get(), + ::SetReferralCutProposalParameters::get(), + ::VetoProposalProposalParameters::get(), + ::UpdateChannelPayoutsProposalParameters::get(), + ::UpdateGlobalNftLimitProposalParameters::get(), + ::SetPalletFozenStatusProposalParameters::get() + ]; stakes .iter() diff --git a/runtime/src/tests/proposals_integration/mod.rs b/runtime/src/tests/proposals_integration/mod.rs index 44b7d53ba1..5bf3a95aca 100644 --- a/runtime/src/tests/proposals_integration/mod.rs +++ b/runtime/src/tests/proposals_integration/mod.rs @@ -7,8 +7,11 @@ mod working_group_proposals; use crate::tests::{ account_from_member_id, create_new_members, max_proposal_stake, run_to_block, setup_new_council, }; -use crate::{currency, MembershipWorkingGroupInstance, ProposalCancellationFee, Runtime}; +use crate::{ + currency, MembershipWorkingGroupInstance, ProjectToken, ProposalCancellationFee, Runtime, +}; use codec::Encode; +use common::FreezablePallet; use content::NftLimitPeriod; use proposals_codex::{GeneralProposalParameters, ProposalDetails}; use proposals_engine::{ @@ -19,7 +22,7 @@ use working_group::{StakeParameters, StakePolicy}; use frame_support::dispatch::{DispatchError, DispatchResult}; use frame_support::traits::Currency; -use frame_support::{StorageMap, StorageValue}; +use frame_support::{assert_ok, StorageMap, StorageValue}; use frame_system::RawOrigin; use sp_runtime::AccountId32; use sp_std::collections::btree_set::BTreeSet; @@ -317,7 +320,7 @@ fn proposal_cancellation_with_slashes_with_balance_checks_succeeds() { cancel_proposal_fixture.cancel_and_assert(Ok(())); - let cancellation_fee = ProposalCancellationFee::get() as u128; + let cancellation_fee = ProposalCancellationFee::get(); // Since the account_id is the staking account it neccesarily has locked funds // for being a candidate for a staking account. @@ -478,7 +481,7 @@ fn set_membership_leader(lead_account_id: AccountId32, lead_id: u64) { StakePolicy { stake_amount: >::MinimumApplicationStake::get( - ) as u128, + ), leaving_unstaking_period: >::MinUnstakingPeriodLimit::get() }, None, @@ -492,8 +495,7 @@ fn set_membership_leader(lead_account_id: AccountId32, lead_id: u64) { reward_account_id: lead_account_id.clone(), description: vec![0u8], stake_parameters: StakeParameters { - stake: >::MinimumApplicationStake::get() as - u128, + stake: >::MinimumApplicationStake::get(), staking_account_id: lead_account_id.clone(), }, }; @@ -539,7 +541,7 @@ where assert_eq!((self.successful_call)(), Ok(())); // Approve Proposal - let council_size = ::CouncilSize::get() as u32; + let council_size = ::CouncilSize::get(); let mut vote_generator = VoteGenerator::new(self.proposal_id); for _i in 0..council_size { vote_generator.vote_and_assert_ok(VoteKind::Approve); @@ -573,7 +575,7 @@ fn text_proposal_execution_succeeds() { ProposalDetails::Signal(b"signal".to_vec()), ) }) - .with_member_id(member_id as u64); + .with_member_id(member_id); codex_extrinsic_test_fixture.call_extrinsic_and_assert(); }); @@ -612,7 +614,7 @@ fn funding_request_proposal_execution_succeeds() { }]), ) }) - .with_member_id(member_id as u64); + .with_member_id(member_id); let starting_balance = Balances::usable_balance(target_account_id.clone()); @@ -654,7 +656,7 @@ fn veto_proposal_proposal_execution_succeeds() { ProposalDetails::AmendConstitution(vec![0u8]), ) }) - .with_member_id(member_id as u64); + .with_member_id(member_id); codex_extrinsic_test_fixture.call_extrinsic_and_assert(); @@ -679,7 +681,7 @@ fn veto_proposal_proposal_execution_succeeds() { ProposalDetails::VetoProposal(proposal_id), ) }) - .with_member_id(member_id as u64) + .with_member_id(member_id) .with_expected_proposal_id(2) .with_setup_enviroment(false); @@ -720,11 +722,7 @@ fn set_validator_count_proposal_execution_succeeds() { staking_account_id.into(), 10_000 * currency::DOLLARS, ); - set_staking_account( - account_id.clone(), - staking_account_id.into(), - member_id as u64, - ); + set_staking_account(account_id.clone(), staking_account_id.into(), member_id); let codex_extrinsic_test_fixture = CodexProposalTestFixture::default_for_call(|| { let general_proposal_parameters = GeneralProposalParameters:: { @@ -779,7 +777,7 @@ fn amend_constitution_proposal_execution_succeeds() { ProposalDetails::AmendConstitution(b"Constitution text".to_vec()), ) }) - .with_member_id(member_id as u64); + .with_member_id(member_id); codex_extrinsic_test_fixture.call_extrinsic_and_assert(); @@ -816,7 +814,7 @@ fn set_membership_price_proposal_execution_succeeds() { ProposalDetails::SetMembershipPrice(membership_price), ) }) - .with_member_id(member_id as u64); + .with_member_id(member_id); codex_extrinsic_test_fixture.call_extrinsic_and_assert(); @@ -853,7 +851,7 @@ fn set_initial_invitation_balance_proposal_succeeds() { ProposalDetails::SetInitialInvitationBalance(initial_invitation_balance), ) }) - .with_member_id(member_id as u64); + .with_member_id(member_id); codex_extrinsic_test_fixture.call_extrinsic_and_assert(); @@ -894,7 +892,7 @@ fn set_initial_invitation_count_proposal_succeeds() { ProposalDetails::SetInitialInvitationCount(new_default_invite_count), ) }) - .with_member_id(member_id as u64); + .with_member_id(member_id); codex_extrinsic_test_fixture.call_extrinsic_and_assert(); @@ -935,7 +933,7 @@ fn set_membership_leader_invitation_quota_proposal_succeeds() { ProposalDetails::SetMembershipLeadInvitationQuota(new_invite_count), ) }) - .with_member_id(member_id as u64) + .with_member_id(member_id) .with_set_member_lead(true) .with_lead_id(lead_id); @@ -974,7 +972,7 @@ fn set_referral_cut_proposal_succeeds() { ProposalDetails::SetReferralCut(referral_cut), ) }) - .with_member_id(member_id as u64); + .with_member_id(member_id); codex_extrinsic_test_fixture.call_extrinsic_and_assert(); @@ -1014,7 +1012,7 @@ fn set_budget_increment_proposal_succeds() { ProposalDetails::SetCouncilBudgetIncrement(budget_increment), ) }) - .with_member_id(member_id as u64); + .with_member_id(member_id); codex_extrinsic_test_fixture.call_extrinsic_and_assert(); @@ -1056,7 +1054,7 @@ fn set_councilor_reward_proposal_succeds() { ProposalDetails::SetCouncilorReward(councilor_reward), ) }) - .with_member_id(member_id as u64); + .with_member_id(member_id); codex_extrinsic_test_fixture.call_extrinsic_and_assert(); @@ -1078,7 +1076,7 @@ fn proposal_reactivation_succeeds() { let account_id = account_from_member_id(member_id); setup_new_council(1); - let council_size = ::CouncilSize::get() as u32; + let council_size = ::CouncilSize::get(); let starting_block = System::block_number(); // create proposal @@ -1160,7 +1158,7 @@ fn update_global_nft_limit_proposal_succeeds() { ProposalDetails::UpdateGlobalNftLimit(period, new_limit), ) }) - .with_member_id(member_id as u64); + .with_member_id(member_id); codex_extrinsic_test_fixture.call_extrinsic_and_assert(); @@ -1174,3 +1172,77 @@ fn update_global_nft_limit_proposal_succeeds() { ); }); } + +#[test] +fn freeze_pallet_proposal_succeeds() { + initial_test_ext().execute_with(|| { + // start at block 1 + run_to_block(1); + + let member_id = create_new_members(1)[0]; + let account_id = account_from_member_id(member_id); + + let codex_extrinsic_test_fixture = CodexProposalTestFixture::default_for_call(|| { + let general_proposal_parameters = GeneralProposalParameters:: { + member_id, + title: b"title".to_vec(), + description: b"body".to_vec(), + staking_account_id: Some(account_id.clone()), + exact_execution_block: None, + }; + + ProposalsCodex::create_proposal( + RawOrigin::Signed(account_id.clone()).into(), + general_proposal_parameters, + ProposalDetails::SetPalletFozenStatus(true, FreezablePallet::ProjectToken), + ) + }) + .with_member_id(member_id); + + codex_extrinsic_test_fixture.call_extrinsic_and_assert(); + + let params = + ::SetPalletFozenStatusProposalParameters::get(); + run_to_block(System::block_number() + params.grace_period + 1); + + assert_eq!(ProjectToken::pallet_frozen(), true); + }); +} + +#[test] +fn unfreeze_pallet_proposal_succeeds() { + initial_test_ext().execute_with(|| { + // start at block 1 + run_to_block(1); + let freeze_result = ProjectToken::set_frozen_status(RawOrigin::Root.into(), true); + assert_ok!(freeze_result); + + let member_id = create_new_members(1)[0]; + let account_id = account_from_member_id(member_id); + + let codex_extrinsic_test_fixture = CodexProposalTestFixture::default_for_call(|| { + let general_proposal_parameters = GeneralProposalParameters:: { + member_id, + title: b"title".to_vec(), + description: b"body".to_vec(), + staking_account_id: Some(account_id.clone()), + exact_execution_block: None, + }; + + ProposalsCodex::create_proposal( + RawOrigin::Signed(account_id.clone()).into(), + general_proposal_parameters, + ProposalDetails::SetPalletFozenStatus(false, FreezablePallet::ProjectToken), + ) + }) + .with_member_id(member_id); + + codex_extrinsic_test_fixture.call_extrinsic_and_assert(); + + let params = + ::SetPalletFozenStatusProposalParameters::get(); + run_to_block(System::block_number() + params.grace_period + 1); + + assert_eq!(ProjectToken::pallet_frozen(), false); + }); +} diff --git a/runtime/src/tests/proposals_integration/working_group_proposals.rs b/runtime/src/tests/proposals_integration/working_group_proposals.rs index 076dfadb23..8f7954845e 100644 --- a/runtime/src/tests/proposals_integration/working_group_proposals.rs +++ b/runtime/src/tests/proposals_integration/working_group_proposals.rs @@ -545,7 +545,7 @@ fn run_create_add_working_group_leader_opening_proposal_execution_succeeds< StakePolicy { stake_amount: >::MinimumApplicationStake::get() as u128, + >>::MinimumApplicationStake::get(), leaving_unstaking_period: >::MinUnstakingPeriodLimit::get().into(), }, diff --git a/runtime/src/utils.rs b/runtime/src/utils.rs index e3705349bc..b0a80a5879 100644 --- a/runtime/src/utils.rs +++ b/runtime/src/utils.rs @@ -1,15 +1,16 @@ use crate::{ - Balance, Call, DefaultStorageDepositCleanupProfit, ExistentialDeposit, MinimumBloatBondPerByte, - Runtime, UncheckedExtrinsic, + Balance, DefaultStorageDepositCleanupProfit, ExistentialDeposit, MinimumBloatBondPerByte, + Runtime, RuntimeCall, UncheckedExtrinsic, }; use codec::{Encode, FullCodec, MaxEncodedLen}; use frame_support::{ + dispatch::GetDispatchInfo, storage::{ generator::{StorageDoubleMap, StorageMap}, StoragePrefixedMap, }, traits::StorageInfoTrait, - weights::{GetDispatchInfo, WeightToFee}, + weights::{Weight, WeightToFee}, StorageHasher, }; pub use sp_runtime::Perbill; @@ -19,15 +20,16 @@ use sp_std::mem::size_of; pub const ENCODED_EXTRINSIC_SIGNATURE_LENGTH: u64 = 102; /// Compute total fee for executing a call -pub fn compute_fee(call: Call) -> Balance { +pub fn compute_fee(call: RuntimeCall) -> Balance { let xt = UncheckedExtrinsic::new_unsigned(call); let length = xt.encode().len() as u64 + ENCODED_EXTRINSIC_SIGNATURE_LENGTH; let dispatch_info = &::get_dispatch_info(&xt); let weight_fee = ::WeightToFee::weight_to_fee( &dispatch_info.weight, ); - let len_fee = - ::LengthToFee::weight_to_fee(&length); + let len_fee = ::LengthToFee::weight_to_fee( + &Weight::from_parts(length, 0), + ); let base_fee = ::WeightToFee::weight_to_fee( &::BlockWeights::get() .get(dispatch_info.class) @@ -131,6 +133,7 @@ macro_rules! mega_bytes { }}; } +#[cfg(not(feature = "warp-time"))] #[macro_export] macro_rules! minutes { ($a:expr) => {{ @@ -138,6 +141,7 @@ macro_rules! minutes { }}; } +#[cfg(not(feature = "warp-time"))] #[macro_export] macro_rules! hours { ($a:expr) => {{ @@ -152,6 +156,22 @@ macro_rules! days { }}; } +#[cfg(feature = "warp-time")] +#[macro_export] +macro_rules! minutes { + ($a:expr) => {{ + ((60 * 1000) / ExpectedBlockTime::get()) as u32 * $a / 6 + }}; +} + +#[cfg(feature = "warp-time")] +#[macro_export] +macro_rules! hours { + ($a:expr) => {{ + ((60 * 60 * 1000) / ExpectedBlockTime::get()) as u32 * $a / 6 + }}; +} + #[macro_export] macro_rules! dollars { ($a:expr) => {{ diff --git a/runtime/src/weights/block_weights.rs b/runtime/src/weights/block_weights.rs index f0d42694a1..90a597557d 100644 --- a/runtime/src/weights/block_weights.rs +++ b/runtime/src/weights/block_weights.rs @@ -1,64 +1,46 @@ -// This file is part of Substrate. - -// Copyright (C) 2022 Parity Technologies (UK) Ltd. -// SPDX-License-Identifier: Apache-2.0 - -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-10-20 (Y/M/D) +//! DATE: 2023-11-06 (Y/M/D) +//! HOSTNAME: `ip-172-31-43-193`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` //! //! SHORT-NAME: `block`, LONG-NAME: `BlockExecution`, RUNTIME: `Development` //! WARMUPS: `10`, REPEAT: `100` -//! WEIGHT-PATH: `./../runtime/src/weights` +//! WEIGHT-PATH: `./scripts/../runtime/src/weights` //! WEIGHT-METRIC: `Average`, WEIGHT-MUL: `1.0`, WEIGHT-ADD: `0` // Executed Command: -// ./../target/release/joystream-node +// ./scripts/../target/release/joystream-node // benchmark // overhead -// --base-path=/mnt/disks/local-ssd/ -// --chain=dev +// --chain=prod-test // --execution=wasm // --warmup=10 // --repeat=100 -// --weight-path=./../runtime/src/weights +// --weight-path=./scripts/../runtime/src/weights -use frame_support::{ - parameter_types, - weights::{constants::WEIGHT_PER_NANOS, Weight}, -}; +use sp_core::parameter_types; +use sp_weights::{constants::WEIGHT_REF_TIME_PER_NANOS, Weight}; parameter_types! { /// Time to execute an empty block. /// Calculated by multiplying the *Average* with `1.0` and adding `0`. /// /// Stats nanoseconds: - /// Min, Max: 5_881_640, 6_082_189 - /// Average: 5_919_668 - /// Median: 5_912_480 - /// Std-Dev: 30722.3 + /// Min, Max: 430_157, 474_076 + /// Average: 441_686 + /// Median: 438_020 + /// Std-Dev: 9141.33 /// /// Percentiles nanoseconds: - /// 99th: 6_020_750 - /// 95th: 5_985_310 - /// 75th: 5_923_109 - pub const BlockExecutionWeight: Weight = 5_919_668 * WEIGHT_PER_NANOS; + /// 99th: 462_227 + /// 95th: 460_370 + /// 75th: 444_559 + pub const BlockExecutionWeight: Weight = + Weight::from_parts(WEIGHT_REF_TIME_PER_NANOS.saturating_mul(441_686), 0); } #[cfg(test)] mod test_weights { - use frame_support::weights::constants; + use sp_weights::constants; /// Checks that the weight exists and is sane. // NOTE: If this test fails but you are sure that the generated values are fine, @@ -69,12 +51,12 @@ mod test_weights { // At least 100 µs. assert!( - w >= 100 * constants::WEIGHT_PER_MICROS, + w.ref_time() >= 100u64 * constants::WEIGHT_REF_TIME_PER_MICROS, "Weight should be at least 100 µs." ); // At most 50 ms. assert!( - w <= 50 * constants::WEIGHT_PER_MILLIS, + w.ref_time() <= 50u64 * constants::WEIGHT_REF_TIME_PER_MILLIS, "Weight should be at most 50 ms." ); } diff --git a/runtime/src/weights/extrinsic_weights.rs b/runtime/src/weights/extrinsic_weights.rs index a1364f7f6d..356d9178e4 100644 --- a/runtime/src/weights/extrinsic_weights.rs +++ b/runtime/src/weights/extrinsic_weights.rs @@ -1,64 +1,46 @@ -// This file is part of Substrate. - -// Copyright (C) 2022 Parity Technologies (UK) Ltd. -// SPDX-License-Identifier: Apache-2.0 - -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-10-20 (Y/M/D) +//! DATE: 2023-11-06 (Y/M/D) +//! HOSTNAME: `ip-172-31-43-193`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` //! //! SHORT-NAME: `extrinsic`, LONG-NAME: `ExtrinsicBase`, RUNTIME: `Development` //! WARMUPS: `10`, REPEAT: `100` -//! WEIGHT-PATH: `./../runtime/src/weights` +//! WEIGHT-PATH: `./scripts/../runtime/src/weights` //! WEIGHT-METRIC: `Average`, WEIGHT-MUL: `1.0`, WEIGHT-ADD: `0` // Executed Command: -// ./../target/release/joystream-node +// ./scripts/../target/release/joystream-node // benchmark // overhead -// --base-path=/mnt/disks/local-ssd/ -// --chain=dev +// --chain=prod-test // --execution=wasm // --warmup=10 // --repeat=100 -// --weight-path=./../runtime/src/weights +// --weight-path=./scripts/../runtime/src/weights -use frame_support::{ - parameter_types, - weights::{constants::WEIGHT_PER_NANOS, Weight}, -}; +use sp_core::parameter_types; +use sp_weights::{constants::WEIGHT_REF_TIME_PER_NANOS, Weight}; parameter_types! { /// Time to execute a NO-OP extrinsic, for example `System::remark`. /// Calculated by multiplying the *Average* with `1.0` and adding `0`. /// /// Stats nanoseconds: - /// Min, Max: 106_115, 107_235 - /// Average: 106_628 - /// Median: 106_653 - /// Std-Dev: 278.15 + /// Min, Max: 110_131, 112_115 + /// Average: 110_530 + /// Median: 110_452 + /// Std-Dev: 321.11 /// /// Percentiles nanoseconds: - /// 99th: 107_217 - /// 95th: 107_081 - /// 75th: 106_821 - pub const ExtrinsicBaseWeight: Weight = 106_628 * WEIGHT_PER_NANOS; + /// 99th: 111_862 + /// 95th: 110_859 + /// 75th: 110_603 + pub const ExtrinsicBaseWeight: Weight = + Weight::from_parts(WEIGHT_REF_TIME_PER_NANOS.saturating_mul(110_530), 0); } #[cfg(test)] mod test_weights { - use frame_support::weights::constants; + use sp_weights::constants; /// Checks that the weight exists and is sane. // NOTE: If this test fails but you are sure that the generated values are fine, @@ -69,12 +51,12 @@ mod test_weights { // At least 10 µs. assert!( - w >= 10 * constants::WEIGHT_PER_MICROS, + w.ref_time() >= 10u64 * constants::WEIGHT_REF_TIME_PER_MICROS, "Weight should be at least 10 µs." ); // At most 1 ms. assert!( - w <= constants::WEIGHT_PER_MILLIS, + w.ref_time() <= constants::WEIGHT_REF_TIME_PER_MILLIS, "Weight should be at most 1 ms." ); } diff --git a/runtime/src/weights/frame_system.rs b/runtime/src/weights/frame_system.rs index 06e600a46e..b51ee0bf71 100644 --- a/runtime/src/weights/frame_system.rs +++ b/runtime/src/weights/frame_system.rs @@ -18,22 +18,21 @@ //! Autogenerated weights for frame_system //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-10-20, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("dev"), DB CACHE: 1024 +//! DATE: 2023-11-06, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("prod-test"), DB CACHE: 1024 // Executed Command: -// ./../target/release/joystream-node +// ./scripts/../target/release/joystream-node // benchmark // pallet -// --base-path=/mnt/disks/local-ssd/ // --pallet=frame_system // --extrinsic=* -// --chain=dev +// --chain=prod-test // --steps=50 // --repeat=20 // --execution=wasm -// --template=./../devops/frame-weight-template.hbs -// --output=./../runtime/src/weights/frame_system.rs +// --template=./scripts/../devops/frame-weight-template.hbs +// --output=./scripts/../runtime/src/weights/frame_system.rs #![cfg_attr(rustfmt, rustfmt_skip)] #![allow(unused_parens)] @@ -48,40 +47,84 @@ pub use frame_system::weights::WeightInfo; /// Weights for frame_system using the Substrate node and recommended hardware. pub struct SubstrateWeight(PhantomData); impl WeightInfo for SubstrateWeight { - fn remark(_b: u32, ) -> Weight { - (1_725_000 as Weight) + /// The range of component `b` is `[0, 3932160]`. + fn remark(b: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 2_379 nanoseconds. + Weight::from_parts(839_476, 0u64) + .saturating_add(Weight::from_parts(0, 0)) + // Standard Error: 0 + .saturating_add(Weight::from_parts(462, 0u64).saturating_mul(b.into())) } + /// The range of component `b` is `[0, 3932160]`. fn remark_with_event(b: u32, ) -> Weight { - (81_993_000 as Weight) - // Standard Error: 0 - .saturating_add((1_000 as Weight).saturating_mul(b as Weight)) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 8_436 nanoseconds. + Weight::from_parts(8_819_000, 0u64) + .saturating_add(Weight::from_parts(0, 0)) + // Standard Error: 2 + .saturating_add(Weight::from_parts(1_470, 0u64).saturating_mul(b.into())) } // Storage: System Digest (r:1 w:1) - // Storage: unknown [0x3a686561707061676573] (r:0 w:1) + // Proof Skipped: System Digest (max_values: Some(1), max_size: None, mode: Measured) + // Storage: unknown `0x3a686561707061676573` (r:0 w:1) + // Proof Skipped: unknown `0x3a686561707061676573` (r:0 w:1) fn set_heap_pages() -> Weight { - (8_180_000 as Weight) - .saturating_add(T::DbWeight::get().reads(1 as Weight)) - .saturating_add(T::DbWeight::get().writes(2 as Weight)) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `1485` + // Minimum execution time: 4_577 nanoseconds. + Weight::from_parts(4_956_000, 0u64) + .saturating_add(Weight::from_parts(0, 1485)) + .saturating_add(T::DbWeight::get().reads(1_u64)) + .saturating_add(T::DbWeight::get().writes(2_u64)) } // Storage: Skipped Metadata (r:0 w:0) + // Proof Skipped: Skipped Metadata (max_values: None, max_size: None, mode: Measured) + /// The range of component `i` is `[0, 1000]`. fn set_storage(i: u32, ) -> Weight { - (0 as Weight) - // Standard Error: 1_000 - .saturating_add((1_485_000 as Weight).saturating_mul(i as Weight)) - .saturating_add(T::DbWeight::get().writes((1 as Weight).saturating_mul(i as Weight))) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 2_329 nanoseconds. + Weight::from_parts(2_364_000, 0u64) + .saturating_add(Weight::from_parts(0, 0)) + // Standard Error: 1_189 + .saturating_add(Weight::from_parts(878_135, 0u64).saturating_mul(i.into())) + .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(i.into()))) } // Storage: Skipped Metadata (r:0 w:0) + // Proof Skipped: Skipped Metadata (max_values: None, max_size: None, mode: Measured) + /// The range of component `i` is `[0, 1000]`. fn kill_storage(i: u32, ) -> Weight { - (0 as Weight) - // Standard Error: 1_000 - .saturating_add((1_013_000 as Weight).saturating_mul(i as Weight)) - .saturating_add(T::DbWeight::get().writes((1 as Weight).saturating_mul(i as Weight))) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 2_158 nanoseconds. + Weight::from_parts(2_279_000, 0u64) + .saturating_add(Weight::from_parts(0, 0)) + // Standard Error: 943 + .saturating_add(Weight::from_parts(657_573, 0u64).saturating_mul(i.into())) + .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(i.into()))) } // Storage: Skipped Metadata (r:0 w:0) + // Proof Skipped: Skipped Metadata (max_values: None, max_size: None, mode: Measured) + /// The range of component `p` is `[0, 1000]`. fn kill_prefix(p: u32, ) -> Weight { - (0 as Weight) - // Standard Error: 2_000 - .saturating_add((2_170_000 as Weight).saturating_mul(p as Weight)) - .saturating_add(T::DbWeight::get().writes((1 as Weight).saturating_mul(p as Weight))) + // Proof Size summary in bytes: + // Measured: `91 + p * (69 ±0)` + // Estimated: `96 + p * (70 ±0)` + // Minimum execution time: 4_476 nanoseconds. + Weight::from_parts(4_674_000, 0u64) + .saturating_add(Weight::from_parts(0, 96)) + // Standard Error: 1_748 + .saturating_add(Weight::from_parts(1_332_208, 0u64).saturating_mul(p.into())) + .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(p.into()))) + .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(p.into()))) + .saturating_add(Weight::from_parts(0, 70).saturating_mul(p.into())) } } diff --git a/runtime/src/weights/mod.rs b/runtime/src/weights/mod.rs index 98637e76d5..e14a53342c 100644 --- a/runtime/src/weights/mod.rs +++ b/runtime/src/weights/mod.rs @@ -26,7 +26,7 @@ pub mod pallet_babe; pub mod pallet_bags_list; pub mod pallet_balances; pub mod pallet_election_provider_multi_phase; -pub mod pallet_election_provider_support_benchmarking; +// pub mod pallet_election_provider_support_benchmarking; pub mod pallet_grandpa; pub mod pallet_im_online; pub mod pallet_multisig; diff --git a/runtime/src/weights/pallet_babe.rs b/runtime/src/weights/pallet_babe.rs index e5b974809b..97ffdee99c 100644 --- a/runtime/src/weights/pallet_babe.rs +++ b/runtime/src/weights/pallet_babe.rs @@ -21,7 +21,7 @@ use frame_support::{ traits::Get, weights::{ - constants::{WEIGHT_PER_MICROS, WEIGHT_PER_NANOS}, + constants::{WEIGHT_REF_TIME_PER_MICROS, WEIGHT_REF_TIME_PER_NANOS}, Weight, }, }; @@ -41,18 +41,24 @@ impl WeightInfo for SubstrateWeight { let validator_count = validator_count.max(100) as u64; // worst case we are considering is that the given offender - // is backed by 1000 nominators + // is backed by 200 nominators const MAX_NOMINATORS: u64 = 1000; // checking membership proof - (35 * WEIGHT_PER_MICROS) - .saturating_add((175 * WEIGHT_PER_NANOS).saturating_mul(validator_count)) + Weight::from_parts(35u64 * WEIGHT_REF_TIME_PER_MICROS, 0) + .saturating_add( + Weight::from_parts(175u64 * WEIGHT_REF_TIME_PER_NANOS, 0) + .saturating_mul(validator_count), + ) .saturating_add(T::DbWeight::get().reads(5)) // check equivocation proof - .saturating_add(110 * WEIGHT_PER_MICROS) + .saturating_add(Weight::from_parts(110u64 * WEIGHT_REF_TIME_PER_MICROS, 0)) // report offence - .saturating_add(110 * WEIGHT_PER_MICROS) - .saturating_add(25 * WEIGHT_PER_MICROS * MAX_NOMINATORS) + .saturating_add(Weight::from_parts(110u64 * WEIGHT_REF_TIME_PER_MICROS, 0)) + .saturating_add(Weight::from_parts( + 25u64 * WEIGHT_REF_TIME_PER_MICROS * MAX_NOMINATORS, + 0, + )) .saturating_add(T::DbWeight::get().reads(14 + 3 * MAX_NOMINATORS)) .saturating_add(T::DbWeight::get().writes(10 + 3 * MAX_NOMINATORS)) } diff --git a/runtime/src/weights/pallet_bags_list.rs b/runtime/src/weights/pallet_bags_list.rs index b1ed877d26..baaff476eb 100644 --- a/runtime/src/weights/pallet_bags_list.rs +++ b/runtime/src/weights/pallet_bags_list.rs @@ -18,21 +18,21 @@ //! Autogenerated weights for pallet_bags_list //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-10-23, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("dev"), DB CACHE: 1024 +//! DATE: 2023-11-06, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("prod-test"), DB CACHE: 1024 // Executed Command: -// ./../target/release/joystream-node +// ./scripts/../target/release/joystream-node // benchmark // pallet // --pallet=pallet_bags_list // --extrinsic=* -// --chain=dev +// --chain=prod-test // --steps=50 // --repeat=20 // --execution=wasm -// --template=./../devops/frame-weight-template.hbs -// --output=./../runtime/src/weights/pallet_bags_list.rs +// --template=./scripts/../devops/frame-weight-template.hbs +// --output=./scripts/../runtime/src/weights/pallet_bags_list.rs #![cfg_attr(rustfmt, rustfmt_skip)] #![allow(unused_parens)] @@ -48,31 +48,59 @@ pub use pallet_bags_list::weights::WeightInfo; pub struct SubstrateWeight(PhantomData); impl WeightInfo for SubstrateWeight { // Storage: Staking Bonded (r:1 w:0) + // Proof: Staking Bonded (max_values: None, max_size: Some(72), added: 2547, mode: MaxEncodedLen) // Storage: Staking Ledger (r:1 w:0) - // Storage: BagsList ListNodes (r:4 w:4) - // Storage: BagsList ListBags (r:1 w:1) + // Proof: Staking Ledger (max_values: None, max_size: Some(1235), added: 3710, mode: MaxEncodedLen) + // Storage: VoterList ListNodes (r:4 w:4) + // Proof: VoterList ListNodes (max_values: None, max_size: Some(154), added: 2629, mode: MaxEncodedLen) + // Storage: VoterList ListBags (r:1 w:1) + // Proof: VoterList ListBags (max_values: None, max_size: Some(82), added: 2557, mode: MaxEncodedLen) fn rebag_non_terminal() -> Weight { - (47_000_000 as Weight) - .saturating_add(T::DbWeight::get().reads(7 as Weight)) - .saturating_add(T::DbWeight::get().writes(5 as Weight)) + // Proof Size summary in bytes: + // Measured: `1677` + // Estimated: `23290` + // Minimum execution time: 67_769 nanoseconds. + Weight::from_parts(70_218_000, 0u64) + .saturating_add(Weight::from_parts(0, 23290)) + .saturating_add(T::DbWeight::get().reads(7_u64)) + .saturating_add(T::DbWeight::get().writes(5_u64)) } // Storage: Staking Bonded (r:1 w:0) + // Proof: Staking Bonded (max_values: None, max_size: Some(72), added: 2547, mode: MaxEncodedLen) // Storage: Staking Ledger (r:1 w:0) - // Storage: BagsList ListNodes (r:3 w:3) - // Storage: BagsList ListBags (r:2 w:2) + // Proof: Staking Ledger (max_values: None, max_size: Some(1235), added: 3710, mode: MaxEncodedLen) + // Storage: VoterList ListNodes (r:3 w:3) + // Proof: VoterList ListNodes (max_values: None, max_size: Some(154), added: 2629, mode: MaxEncodedLen) + // Storage: VoterList ListBags (r:2 w:2) + // Proof: VoterList ListBags (max_values: None, max_size: Some(82), added: 2557, mode: MaxEncodedLen) fn rebag_terminal() -> Weight { - (46_000_000 as Weight) - .saturating_add(T::DbWeight::get().reads(7 as Weight)) - .saturating_add(T::DbWeight::get().writes(5 as Weight)) + // Proof Size summary in bytes: + // Measured: `1571` + // Estimated: `23218` + // Minimum execution time: 65_934 nanoseconds. + Weight::from_parts(67_726_000, 0u64) + .saturating_add(Weight::from_parts(0, 23218)) + .saturating_add(T::DbWeight::get().reads(7_u64)) + .saturating_add(T::DbWeight::get().writes(5_u64)) } - // Storage: BagsList ListNodes (r:4 w:4) + // Storage: VoterList ListNodes (r:4 w:4) + // Proof: VoterList ListNodes (max_values: None, max_size: Some(154), added: 2629, mode: MaxEncodedLen) // Storage: Staking Bonded (r:2 w:0) + // Proof: Staking Bonded (max_values: None, max_size: Some(72), added: 2547, mode: MaxEncodedLen) // Storage: Staking Ledger (r:2 w:0) - // Storage: BagsList CounterForListNodes (r:1 w:1) - // Storage: BagsList ListBags (r:1 w:1) + // Proof: Staking Ledger (max_values: None, max_size: Some(1235), added: 3710, mode: MaxEncodedLen) + // Storage: VoterList CounterForListNodes (r:1 w:1) + // Proof: VoterList CounterForListNodes (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + // Storage: VoterList ListBags (r:1 w:1) + // Proof: VoterList ListBags (max_values: None, max_size: Some(82), added: 2557, mode: MaxEncodedLen) fn put_in_front_of() -> Weight { - (50_000_000 as Weight) - .saturating_add(T::DbWeight::get().reads(10 as Weight)) - .saturating_add(T::DbWeight::get().writes(6 as Weight)) + // Proof Size summary in bytes: + // Measured: `1883` + // Estimated: `31036` + // Minimum execution time: 74_521 nanoseconds. + Weight::from_parts(77_006_000, 0u64) + .saturating_add(Weight::from_parts(0, 31036)) + .saturating_add(T::DbWeight::get().reads(10_u64)) + .saturating_add(T::DbWeight::get().writes(6_u64)) } } diff --git a/runtime/src/weights/pallet_balances.rs b/runtime/src/weights/pallet_balances.rs index 2b6cf28cd4..487a77cd20 100644 --- a/runtime/src/weights/pallet_balances.rs +++ b/runtime/src/weights/pallet_balances.rs @@ -18,22 +18,21 @@ //! Autogenerated weights for pallet_balances //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-10-20, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("dev"), DB CACHE: 1024 +//! DATE: 2023-11-06, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("prod-test"), DB CACHE: 1024 // Executed Command: -// ./../target/release/joystream-node +// ./scripts/../target/release/joystream-node // benchmark // pallet -// --base-path=/mnt/disks/local-ssd/ // --pallet=pallet_balances // --extrinsic=* -// --chain=dev +// --chain=prod-test // --steps=50 // --repeat=20 // --execution=wasm -// --template=./../devops/frame-weight-template.hbs -// --output=./../runtime/src/weights/pallet_balances.rs +// --template=./scripts/../devops/frame-weight-template.hbs +// --output=./scripts/../runtime/src/weights/pallet_balances.rs #![cfg_attr(rustfmt, rustfmt_skip)] #![allow(unused_parens)] @@ -49,45 +48,87 @@ pub use pallet_balances::weights::WeightInfo; pub struct SubstrateWeight(PhantomData); impl WeightInfo for SubstrateWeight { // Storage: System Account (r:1 w:1) + // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) fn transfer() -> Weight { - (126_170_000 as Weight) - .saturating_add(T::DbWeight::get().reads(1 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `3593` + // Minimum execution time: 41_517 nanoseconds. + Weight::from_parts(42_448_000, 0u64) + .saturating_add(Weight::from_parts(0, 3593)) + .saturating_add(T::DbWeight::get().reads(1_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) } // Storage: System Account (r:1 w:1) + // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) fn transfer_keep_alive() -> Weight { - (95_270_000 as Weight) - .saturating_add(T::DbWeight::get().reads(1 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `3593` + // Minimum execution time: 31_367 nanoseconds. + Weight::from_parts(33_357_000, 0u64) + .saturating_add(Weight::from_parts(0, 3593)) + .saturating_add(T::DbWeight::get().reads(1_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) } // Storage: System Account (r:1 w:1) + // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) fn set_balance_creating() -> Weight { - (55_370_000 as Weight) - .saturating_add(T::DbWeight::get().reads(1 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + // Proof Size summary in bytes: + // Measured: `207` + // Estimated: `3593` + // Minimum execution time: 19_960 nanoseconds. + Weight::from_parts(20_387_000, 0u64) + .saturating_add(Weight::from_parts(0, 3593)) + .saturating_add(T::DbWeight::get().reads(1_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) } // Storage: System Account (r:1 w:1) + // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) fn set_balance_killing() -> Weight { - (65_300_000 as Weight) - .saturating_add(T::DbWeight::get().reads(1 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + // Proof Size summary in bytes: + // Measured: `207` + // Estimated: `3593` + // Minimum execution time: 23_167 nanoseconds. + Weight::from_parts(23_877_000, 0u64) + .saturating_add(Weight::from_parts(0, 3593)) + .saturating_add(T::DbWeight::get().reads(1_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) } // Storage: System Account (r:2 w:2) + // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) fn force_transfer() -> Weight { - (125_600_000 as Weight) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) - .saturating_add(T::DbWeight::get().writes(2 as Weight)) + // Proof Size summary in bytes: + // Measured: `140` + // Estimated: `6196` + // Minimum execution time: 46_074 nanoseconds. + Weight::from_parts(47_009_000, 0u64) + .saturating_add(Weight::from_parts(0, 6196)) + .saturating_add(T::DbWeight::get().reads(2_u64)) + .saturating_add(T::DbWeight::get().writes(2_u64)) } // Storage: System Account (r:1 w:1) + // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) fn transfer_all() -> Weight { - (117_730_000 as Weight) - .saturating_add(T::DbWeight::get().reads(1 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `3593` + // Minimum execution time: 39_322 nanoseconds. + Weight::from_parts(40_086_000, 0u64) + .saturating_add(Weight::from_parts(0, 3593)) + .saturating_add(T::DbWeight::get().reads(1_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) } // Storage: System Account (r:1 w:1) + // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) fn force_unreserve() -> Weight { - (50_930_000 as Weight) - .saturating_add(T::DbWeight::get().reads(1 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + // Proof Size summary in bytes: + // Measured: `207` + // Estimated: `3593` + // Minimum execution time: 18_292 nanoseconds. + Weight::from_parts(18_897_000, 0u64) + .saturating_add(Weight::from_parts(0, 3593)) + .saturating_add(T::DbWeight::get().reads(1_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) } } diff --git a/runtime/src/weights/pallet_election_provider_multi_phase.rs b/runtime/src/weights/pallet_election_provider_multi_phase.rs index f583c2f9fc..4b41788ead 100644 --- a/runtime/src/weights/pallet_election_provider_multi_phase.rs +++ b/runtime/src/weights/pallet_election_provider_multi_phase.rs @@ -18,22 +18,21 @@ //! Autogenerated weights for pallet_election_provider_multi_phase //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-10-28, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("dev"), DB CACHE: 1024 +//! DATE: 2023-11-06, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("prod-test"), DB CACHE: 1024 // Executed Command: -// ./../target/release/joystream-node +// ./scripts/../target/release/joystream-node // benchmark // pallet -// --base-path=/mnt/disks/local-ssd/ // --pallet=pallet_election_provider_multi_phase // --extrinsic=* -// --chain=dev +// --chain=prod-test // --steps=50 // --repeat=20 // --execution=wasm -// --template=./../devops/frame-weight-template.hbs -// --output=./../runtime/src/weights/pallet_election_provider_multi_phase.rs +// --template=./scripts/../devops/frame-weight-template.hbs +// --output=./scripts/../runtime/src/weights/pallet_election_provider_multi_phase.rs #![cfg_attr(rustfmt, rustfmt_skip)] #![allow(unused_parens)] @@ -49,118 +48,220 @@ pub use pallet_election_provider_multi_phase::weights::WeightInfo; pub struct SubstrateWeight(PhantomData); impl WeightInfo for SubstrateWeight { // Storage: Staking CurrentEra (r:1 w:0) + // Proof: Staking CurrentEra (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) // Storage: Staking CurrentPlannedSession (r:1 w:0) + // Proof: Staking CurrentPlannedSession (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) // Storage: Staking ErasStartSessionIndex (r:1 w:0) + // Proof: Staking ErasStartSessionIndex (max_values: None, max_size: Some(16), added: 2491, mode: MaxEncodedLen) // Storage: Babe EpochIndex (r:1 w:0) + // Proof: Babe EpochIndex (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) // Storage: Babe GenesisSlot (r:1 w:0) + // Proof: Babe GenesisSlot (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) // Storage: Babe CurrentSlot (r:1 w:0) + // Proof: Babe CurrentSlot (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) // Storage: Staking ForceEra (r:1 w:0) + // Proof: Staking ForceEra (max_values: Some(1), max_size: Some(1), added: 496, mode: MaxEncodedLen) // Storage: ElectionProviderMultiPhase CurrentPhase (r:1 w:0) + // Proof Skipped: ElectionProviderMultiPhase CurrentPhase (max_values: Some(1), max_size: None, mode: Measured) fn on_initialize_nothing() -> Weight { - (54_030_000 as Weight) - .saturating_add(T::DbWeight::get().reads(8 as Weight)) + // Proof Size summary in bytes: + // Measured: `845` + // Estimated: `14754` + // Minimum execution time: 22_067 nanoseconds. + Weight::from_parts(22_863_000, 0u64) + .saturating_add(Weight::from_parts(0, 14754)) + .saturating_add(T::DbWeight::get().reads(8_u64)) } // Storage: ElectionProviderMultiPhase Round (r:1 w:0) - // Storage: ElectionProviderMultiPhase CurrentPhase (r:0 w:1) + // Proof Skipped: ElectionProviderMultiPhase Round (max_values: Some(1), max_size: None, mode: Measured) + // Storage: ElectionProviderMultiPhase CurrentPhase (r:1 w:1) + // Proof Skipped: ElectionProviderMultiPhase CurrentPhase (max_values: Some(1), max_size: None, mode: Measured) fn on_initialize_open_signed() -> Weight { - (38_840_000 as Weight) - .saturating_add(T::DbWeight::get().reads(1 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + // Proof Size summary in bytes: + // Measured: `42` + // Estimated: `3054` + // Minimum execution time: 14_458 nanoseconds. + Weight::from_parts(15_139_000, 0u64) + .saturating_add(Weight::from_parts(0, 3054)) + .saturating_add(T::DbWeight::get().reads(2_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) } // Storage: ElectionProviderMultiPhase Round (r:1 w:0) - // Storage: ElectionProviderMultiPhase CurrentPhase (r:0 w:1) + // Proof Skipped: ElectionProviderMultiPhase Round (max_values: Some(1), max_size: None, mode: Measured) + // Storage: ElectionProviderMultiPhase CurrentPhase (r:1 w:1) + // Proof Skipped: ElectionProviderMultiPhase CurrentPhase (max_values: Some(1), max_size: None, mode: Measured) fn on_initialize_open_unsigned() -> Weight { - (37_120_000 as Weight) - .saturating_add(T::DbWeight::get().reads(1 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + // Proof Size summary in bytes: + // Measured: `42` + // Estimated: `3054` + // Minimum execution time: 16_081 nanoseconds. + Weight::from_parts(16_418_000, 0u64) + .saturating_add(Weight::from_parts(0, 3054)) + .saturating_add(T::DbWeight::get().reads(2_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) } // Storage: System Account (r:1 w:1) + // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) // Storage: ElectionProviderMultiPhase QueuedSolution (r:0 w:1) + // Proof Skipped: ElectionProviderMultiPhase QueuedSolution (max_values: Some(1), max_size: None, mode: Measured) fn finalize_signed_phase_accept_solution() -> Weight { - (93_140_000 as Weight) - .saturating_add(T::DbWeight::get().reads(1 as Weight)) - .saturating_add(T::DbWeight::get().writes(2 as Weight)) + // Proof Size summary in bytes: + // Measured: `174` + // Estimated: `3767` + // Minimum execution time: 32_558 nanoseconds. + Weight::from_parts(33_355_000, 0u64) + .saturating_add(Weight::from_parts(0, 3767)) + .saturating_add(T::DbWeight::get().reads(1_u64)) + .saturating_add(T::DbWeight::get().writes(2_u64)) } // Storage: System Account (r:1 w:1) + // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) fn finalize_signed_phase_reject_solution() -> Weight { - (67_790_000 as Weight) - .saturating_add(T::DbWeight::get().reads(1 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + // Proof Size summary in bytes: + // Measured: `174` + // Estimated: `3593` + // Minimum execution time: 22_260 nanoseconds. + Weight::from_parts(22_790_000, 0u64) + .saturating_add(Weight::from_parts(0, 3593)) + .saturating_add(T::DbWeight::get().reads(1_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) } // Storage: ElectionProviderMultiPhase SnapshotMetadata (r:0 w:1) + // Proof Skipped: ElectionProviderMultiPhase SnapshotMetadata (max_values: Some(1), max_size: None, mode: Measured) // Storage: ElectionProviderMultiPhase DesiredTargets (r:0 w:1) + // Proof Skipped: ElectionProviderMultiPhase DesiredTargets (max_values: Some(1), max_size: None, mode: Measured) // Storage: ElectionProviderMultiPhase Snapshot (r:0 w:1) - fn create_snapshot_internal(v: u32, t: u32, ) -> Weight { - (0 as Weight) - // Standard Error: 13_000 - .saturating_add((393_000 as Weight).saturating_mul(v as Weight)) - // Standard Error: 26_000 - .saturating_add((210_000 as Weight).saturating_mul(t as Weight)) - .saturating_add(T::DbWeight::get().writes(3 as Weight)) + // Proof Skipped: ElectionProviderMultiPhase Snapshot (max_values: Some(1), max_size: None, mode: Measured) + /// The range of component `v` is `[1000, 2000]`. + /// The range of component `t` is `[500, 1000]`. + fn create_snapshot_internal(v: u32, _t: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 421_232 nanoseconds. + Weight::from_parts(428_446_000, 0u64) + .saturating_add(Weight::from_parts(0, 0)) + // Standard Error: 2_648 + .saturating_add(Weight::from_parts(206_516, 0u64).saturating_mul(v.into())) + .saturating_add(T::DbWeight::get().writes(3_u64)) } // Storage: ElectionProviderMultiPhase SignedSubmissionIndices (r:1 w:1) + // Proof Skipped: ElectionProviderMultiPhase SignedSubmissionIndices (max_values: Some(1), max_size: None, mode: Measured) // Storage: ElectionProviderMultiPhase SignedSubmissionNextIndex (r:1 w:1) + // Proof Skipped: ElectionProviderMultiPhase SignedSubmissionNextIndex (max_values: Some(1), max_size: None, mode: Measured) // Storage: ElectionProviderMultiPhase SnapshotMetadata (r:1 w:1) + // Proof Skipped: ElectionProviderMultiPhase SnapshotMetadata (max_values: Some(1), max_size: None, mode: Measured) // Storage: ElectionProviderMultiPhase SignedSubmissionsMap (r:1 w:0) + // Proof Skipped: ElectionProviderMultiPhase SignedSubmissionsMap (max_values: None, max_size: None, mode: Measured) // Storage: ElectionProviderMultiPhase QueuedSolution (r:1 w:1) + // Proof Skipped: ElectionProviderMultiPhase QueuedSolution (max_values: Some(1), max_size: None, mode: Measured) // Storage: ElectionProviderMultiPhase Round (r:1 w:1) + // Proof Skipped: ElectionProviderMultiPhase Round (max_values: Some(1), max_size: None, mode: Measured) + // Storage: ElectionProviderMultiPhase CurrentPhase (r:1 w:1) + // Proof Skipped: ElectionProviderMultiPhase CurrentPhase (max_values: Some(1), max_size: None, mode: Measured) // Storage: ElectionProviderMultiPhase DesiredTargets (r:0 w:1) + // Proof Skipped: ElectionProviderMultiPhase DesiredTargets (max_values: Some(1), max_size: None, mode: Measured) // Storage: ElectionProviderMultiPhase Snapshot (r:0 w:1) - // Storage: ElectionProviderMultiPhase CurrentPhase (r:0 w:1) + // Proof Skipped: ElectionProviderMultiPhase Snapshot (max_values: Some(1), max_size: None, mode: Measured) + /// The range of component `a` is `[500, 800]`. + /// The range of component `d` is `[200, 400]`. fn elect_queued(a: u32, d: u32, ) -> Weight { - (0 as Weight) - // Standard Error: 44_000 - .saturating_add((1_437_000 as Weight).saturating_mul(a as Weight)) - // Standard Error: 66_000 - .saturating_add((761_000 as Weight).saturating_mul(d as Weight)) - .saturating_add(T::DbWeight::get().reads(6 as Weight)) - .saturating_add(T::DbWeight::get().writes(8 as Weight)) + // Proof Size summary in bytes: + // Measured: `265 + a * (768 ±0) + d * (48 ±0)` + // Estimated: `15543 + a * (6912 ±0) + d * (441 ±0)` + // Minimum execution time: 463_240 nanoseconds. + Weight::from_parts(97_192_509, 0u64) + .saturating_add(Weight::from_parts(0, 15543)) + // Standard Error: 7_234 + .saturating_add(Weight::from_parts(671_464, 0u64).saturating_mul(a.into())) + // Standard Error: 10_844 + .saturating_add(Weight::from_parts(147_107, 0u64).saturating_mul(d.into())) + .saturating_add(T::DbWeight::get().reads(7_u64)) + .saturating_add(T::DbWeight::get().writes(8_u64)) + .saturating_add(Weight::from_parts(0, 6912).saturating_mul(a.into())) + .saturating_add(Weight::from_parts(0, 441).saturating_mul(d.into())) } // Storage: ElectionProviderMultiPhase CurrentPhase (r:1 w:0) + // Proof Skipped: ElectionProviderMultiPhase CurrentPhase (max_values: Some(1), max_size: None, mode: Measured) // Storage: ElectionProviderMultiPhase SnapshotMetadata (r:1 w:0) + // Proof Skipped: ElectionProviderMultiPhase SnapshotMetadata (max_values: Some(1), max_size: None, mode: Measured) // Storage: TransactionPayment NextFeeMultiplier (r:1 w:0) + // Proof: TransactionPayment NextFeeMultiplier (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) // Storage: ElectionProviderMultiPhase SignedSubmissionIndices (r:1 w:1) + // Proof Skipped: ElectionProviderMultiPhase SignedSubmissionIndices (max_values: Some(1), max_size: None, mode: Measured) // Storage: ElectionProviderMultiPhase SignedSubmissionNextIndex (r:1 w:1) + // Proof Skipped: ElectionProviderMultiPhase SignedSubmissionNextIndex (max_values: Some(1), max_size: None, mode: Measured) // Storage: ElectionProviderMultiPhase SignedSubmissionsMap (r:0 w:1) + // Proof Skipped: ElectionProviderMultiPhase SignedSubmissionsMap (max_values: None, max_size: None, mode: Measured) fn submit() -> Weight { - (125_180_000 as Weight) - .saturating_add(T::DbWeight::get().reads(5 as Weight)) - .saturating_add(T::DbWeight::get().writes(3 as Weight)) + // Proof Size summary in bytes: + // Measured: `1157` + // Estimated: `13226` + // Minimum execution time: 54_248 nanoseconds. + Weight::from_parts(56_685_000, 0u64) + .saturating_add(Weight::from_parts(0, 13226)) + .saturating_add(T::DbWeight::get().reads(5_u64)) + .saturating_add(T::DbWeight::get().writes(3_u64)) } // Storage: ElectionProviderMultiPhase CurrentPhase (r:1 w:0) + // Proof Skipped: ElectionProviderMultiPhase CurrentPhase (max_values: Some(1), max_size: None, mode: Measured) // Storage: ElectionProviderMultiPhase Round (r:1 w:0) + // Proof Skipped: ElectionProviderMultiPhase Round (max_values: Some(1), max_size: None, mode: Measured) // Storage: ElectionProviderMultiPhase DesiredTargets (r:1 w:0) + // Proof Skipped: ElectionProviderMultiPhase DesiredTargets (max_values: Some(1), max_size: None, mode: Measured) // Storage: ElectionProviderMultiPhase QueuedSolution (r:1 w:1) + // Proof Skipped: ElectionProviderMultiPhase QueuedSolution (max_values: Some(1), max_size: None, mode: Measured) // Storage: ElectionProviderMultiPhase SnapshotMetadata (r:1 w:0) + // Proof Skipped: ElectionProviderMultiPhase SnapshotMetadata (max_values: Some(1), max_size: None, mode: Measured) + // Storage: ElectionProviderMultiPhase Snapshot (r:1 w:0) + // Proof Skipped: ElectionProviderMultiPhase Snapshot (max_values: Some(1), max_size: None, mode: Measured) // Storage: ElectionProviderMultiPhase MinimumUntrustedScore (r:1 w:0) + // Proof Skipped: ElectionProviderMultiPhase MinimumUntrustedScore (max_values: Some(1), max_size: None, mode: Measured) + /// The range of component `v` is `[1000, 2000]`. + /// The range of component `t` is `[500, 1000]`. + /// The range of component `a` is `[500, 800]`. + /// The range of component `d` is `[200, 400]`. + fn submit_unsigned(v: u32, t: u32, a: u32, _d: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `147 + v * (553 ±0) + t * (32 ±0)` + // Estimated: `11424 + v * (3871 ±0) + t * (224 ±0)` + // Minimum execution time: 6_346_063 nanoseconds. + Weight::from_parts(6_428_758_000, 0u64) + .saturating_add(Weight::from_parts(0, 11424)) + // Standard Error: 18_616 + .saturating_add(Weight::from_parts(234_857, 0u64).saturating_mul(v.into())) + // Standard Error: 55_166 + .saturating_add(Weight::from_parts(4_846_250, 0u64).saturating_mul(a.into())) + .saturating_add(T::DbWeight::get().reads(7_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) + .saturating_add(Weight::from_parts(0, 3871).saturating_mul(v.into())) + .saturating_add(Weight::from_parts(0, 224).saturating_mul(t.into())) + } + // Storage: ElectionProviderMultiPhase DesiredTargets (r:1 w:0) + // Proof Skipped: ElectionProviderMultiPhase DesiredTargets (max_values: Some(1), max_size: None, mode: Measured) // Storage: ElectionProviderMultiPhase Snapshot (r:1 w:0) - fn submit_unsigned(v: u32, t: u32, a: u32, d: u32, ) -> Weight { - (0 as Weight) - // Standard Error: 17_000 - .saturating_add((1_437_000 as Weight).saturating_mul(v as Weight)) - // Standard Error: 38_000 - .saturating_add((651_000 as Weight).saturating_mul(t as Weight)) - // Standard Error: 58_000 - .saturating_add((11_297_000 as Weight).saturating_mul(a as Weight)) - // Standard Error: 87_000 - .saturating_add((2_790_000 as Weight).saturating_mul(d as Weight)) - .saturating_add(T::DbWeight::get().reads(7 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + // Proof Skipped: ElectionProviderMultiPhase Snapshot (max_values: Some(1), max_size: None, mode: Measured) + // Storage: ElectionProviderMultiPhase Round (r:1 w:0) + // Proof Skipped: ElectionProviderMultiPhase Round (max_values: Some(1), max_size: None, mode: Measured) + // Storage: ElectionProviderMultiPhase MinimumUntrustedScore (r:1 w:0) + // Proof Skipped: ElectionProviderMultiPhase MinimumUntrustedScore (max_values: Some(1), max_size: None, mode: Measured) + /// The range of component `v` is `[1000, 2000]`. + /// The range of component `t` is `[500, 1000]`. + /// The range of component `a` is `[500, 800]`. + /// The range of component `d` is `[200, 400]`. + fn feasibility_check(v: u32, t: u32, a: u32, _d: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `122 + v * (553 ±0) + t * (32 ±0)` + // Estimated: `6428 + v * (2212 ±0) + t * (128 ±0)` + // Minimum execution time: 5_471_441 nanoseconds. + Weight::from_parts(5_515_262_000, 0u64) + .saturating_add(Weight::from_parts(0, 6428)) + // Standard Error: 14_947 + .saturating_add(Weight::from_parts(298_330, 0u64).saturating_mul(v.into())) + // Standard Error: 44_295 + .saturating_add(Weight::from_parts(3_781_459, 0u64).saturating_mul(a.into())) + .saturating_add(T::DbWeight::get().reads(4_u64)) + .saturating_add(Weight::from_parts(0, 2212).saturating_mul(v.into())) + .saturating_add(Weight::from_parts(0, 128).saturating_mul(t.into())) } - // Storage: ElectionProviderMultiPhase Round (r:1 w:0) - // Storage: ElectionProviderMultiPhase DesiredTargets (r:1 w:0) - // Storage: ElectionProviderMultiPhase MinimumUntrustedScore (r:1 w:0) - // Storage: ElectionProviderMultiPhase Snapshot (r:1 w:0) - fn feasibility_check(v: u32, t: u32, a: u32, d: u32, ) -> Weight { - (0 as Weight) - // Standard Error: 14_000 - .saturating_add((1_267_000 as Weight).saturating_mul(v as Weight)) - // Standard Error: 29_000 - .saturating_add((340_000 as Weight).saturating_mul(t as Weight)) - // Standard Error: 49_000 - .saturating_add((9_141_000 as Weight).saturating_mul(a as Weight)) - // Standard Error: 74_000 - .saturating_add((2_428_000 as Weight).saturating_mul(d as Weight)) - .saturating_add(T::DbWeight::get().reads(4 as Weight)) - } } diff --git a/runtime/src/weights/pallet_election_provider_support_benchmarking.rs b/runtime/src/weights/pallet_election_provider_support_benchmarking.rs index 767b0ab463..25e2afcc56 100644 --- a/runtime/src/weights/pallet_election_provider_support_benchmarking.rs +++ b/runtime/src/weights/pallet_election_provider_support_benchmarking.rs @@ -18,22 +18,21 @@ //! Autogenerated weights for pallet_election_provider_support_benchmarking //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-10-24, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("dev"), DB CACHE: 1024 +//! DATE: 2023-03-15, STEPS: `2`, REPEAT: 2, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("prod-test"), DB CACHE: 1024 // Executed Command: -// ./../target/release/joystream-node +// ./scripts/../target/release/joystream-node // benchmark // pallet -// --base-path=/mnt/disks/local-ssd/ // --pallet=pallet_election_provider_support_benchmarking // --extrinsic=* -// --chain=dev -// --steps=50 -// --repeat=20 +// --chain=prod-test +// --steps=2 +// --repeat=2 // --execution=wasm -// --template=./../devops/frame-weight-template.hbs -// --output=./../runtime/src/weights/pallet_election_provider_support_benchmarking.rs +// --template=./scripts/../devops/frame-weight-template.hbs +// --output=./scripts/../runtime/src/weights/pallet_election_provider_support_benchmarking.rs #![cfg_attr(rustfmt, rustfmt_skip)] #![allow(unused_parens)] @@ -43,23 +42,39 @@ use frame_support::{traits::Get, weights::Weight}; use sp_std::marker::PhantomData; -pub use frame_election_provider_support::weights::WeightInfo; +pub use pallet_election_provider_support_benchmarking::weights::WeightInfo; /// Weights for pallet_election_provider_support_benchmarking using the Substrate node and recommended hardware. pub struct SubstrateWeight(PhantomData); impl WeightInfo for SubstrateWeight { + /// The range of component `v` is `[1000, 2000]`. + /// The range of component `t` is `[500, 1000]`. + /// The range of component `d` is `[5, 16]`. fn phragmen(v: u32, _t: u32, d: u32, ) -> Weight { - (0 as Weight) - // Standard Error: 39_000 - .saturating_add((20_828_000 as Weight).saturating_mul(v as Weight)) - // Standard Error: 5_421_000 - .saturating_add((2_843_690_000 as Weight).saturating_mul(d as Weight)) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 5_413_000 nanoseconds. + Weight::from_parts(5_413_000_000, 0) + .saturating_add(Weight::from_parts(0, 0)) + // Standard Error: 1_826_275 + .saturating_add(Weight::from_parts(4_576_023, 0).saturating_mul(v.into())) + // Standard Error: 193_190_520 + .saturating_add(Weight::from_parts(930_362_548, 0).saturating_mul(d.into())) } + /// The range of component `v` is `[1000, 2000]`. + /// The range of component `t` is `[500, 1000]`. + /// The range of component `d` is `[5, 16]`. fn phragmms(v: u32, _t: u32, d: u32, ) -> Weight { - (0 as Weight) - // Standard Error: 41_000 - .saturating_add((15_474_000 as Weight).saturating_mul(v as Weight)) - // Standard Error: 5_756_000 - .saturating_add((2_222_343_000 as Weight).saturating_mul(d as Weight)) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 3_688_000 nanoseconds. + Weight::from_parts(3_688_000_000, 0) + .saturating_add(Weight::from_parts(0, 0)) + // Standard Error: 1_567_672 + .saturating_add(Weight::from_parts(3_777_978, 0).saturating_mul(v.into())) + // Standard Error: 165_834_471 + .saturating_add(Weight::from_parts(860_747_576, 0).saturating_mul(d.into())) } } diff --git a/runtime/src/weights/pallet_grandpa.rs b/runtime/src/weights/pallet_grandpa.rs index b16449d105..cc1a53f3e7 100644 --- a/runtime/src/weights/pallet_grandpa.rs +++ b/runtime/src/weights/pallet_grandpa.rs @@ -21,7 +21,7 @@ use frame_support::{ traits::Get, weights::{ - constants::{WEIGHT_PER_MICROS, WEIGHT_PER_NANOS}, + constants::{WEIGHT_REF_TIME_PER_MICROS, WEIGHT_REF_TIME_PER_NANOS}, Weight, }, }; @@ -38,18 +38,24 @@ impl WeightInfo for SubstrateWeight { let validator_count = validator_count.max(100) as u64; // worst case we are considering is that the given offender - // is backed by 1000 nominators + // is backed by 200 nominators const MAX_NOMINATORS: u64 = 1000; // checking membership proof - (35 * WEIGHT_PER_MICROS) - .saturating_add((175 * WEIGHT_PER_NANOS).saturating_mul(validator_count)) + Weight::from_parts(35u64 * WEIGHT_REF_TIME_PER_MICROS, 0) + .saturating_add( + Weight::from_parts(175u64 * WEIGHT_REF_TIME_PER_NANOS, 0) + .saturating_mul(validator_count), + ) .saturating_add(T::DbWeight::get().reads(5)) // check equivocation proof - .saturating_add(95 * WEIGHT_PER_MICROS) + .saturating_add(Weight::from_parts(95u64 * WEIGHT_REF_TIME_PER_MICROS, 0)) // report offence - .saturating_add(110 * WEIGHT_PER_MICROS) - .saturating_add(25 * WEIGHT_PER_MICROS * MAX_NOMINATORS) + .saturating_add(Weight::from_parts(110u64 * WEIGHT_REF_TIME_PER_MICROS, 0)) + .saturating_add(Weight::from_parts( + 25u64 * WEIGHT_REF_TIME_PER_MICROS * MAX_NOMINATORS, + 0, + )) .saturating_add(T::DbWeight::get().reads(14 + 3 * MAX_NOMINATORS)) .saturating_add(T::DbWeight::get().writes(10 + 3 * MAX_NOMINATORS)) // fetching set id -> session index mappings @@ -57,6 +63,7 @@ impl WeightInfo for SubstrateWeight { } fn note_stalled() -> Weight { - (3 * WEIGHT_PER_MICROS).saturating_add(T::DbWeight::get().writes(1)) + Weight::from_parts(3u64 * WEIGHT_REF_TIME_PER_MICROS, 0) + .saturating_add(T::DbWeight::get().writes(1)) } } diff --git a/runtime/src/weights/pallet_im_online.rs b/runtime/src/weights/pallet_im_online.rs index 0c350b7866..50b1a76d5b 100644 --- a/runtime/src/weights/pallet_im_online.rs +++ b/runtime/src/weights/pallet_im_online.rs @@ -18,22 +18,21 @@ //! Autogenerated weights for pallet_im_online //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-10-20, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("dev"), DB CACHE: 1024 +//! DATE: 2023-11-06, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("prod-test"), DB CACHE: 1024 // Executed Command: -// ./../target/release/joystream-node +// ./scripts/../target/release/joystream-node // benchmark // pallet -// --base-path=/mnt/disks/local-ssd/ // --pallet=pallet_im_online // --extrinsic=* -// --chain=dev +// --chain=prod-test // --steps=50 // --repeat=20 // --execution=wasm -// --template=./../devops/frame-weight-template.hbs -// --output=./../runtime/src/weights/pallet_im_online.rs +// --template=./scripts/../devops/frame-weight-template.hbs +// --output=./scripts/../runtime/src/weights/pallet_im_online.rs #![cfg_attr(rustfmt, rustfmt_skip)] #![allow(unused_parens)] @@ -49,17 +48,31 @@ pub use pallet_im_online::weights::WeightInfo; pub struct SubstrateWeight(PhantomData); impl WeightInfo for SubstrateWeight { // Storage: Session Validators (r:1 w:0) + // Proof Skipped: Session Validators (max_values: Some(1), max_size: None, mode: Measured) // Storage: Session CurrentIndex (r:1 w:0) + // Proof Skipped: Session CurrentIndex (max_values: Some(1), max_size: None, mode: Measured) + // Storage: ImOnline Keys (r:1 w:0) + // Proof: ImOnline Keys (max_values: Some(1), max_size: Some(320002), added: 320497, mode: MaxEncodedLen) // Storage: ImOnline ReceivedHeartbeats (r:1 w:1) + // Proof: ImOnline ReceivedHeartbeats (max_values: None, max_size: Some(10021032), added: 10023507, mode: MaxEncodedLen) // Storage: ImOnline AuthoredBlocks (r:1 w:0) - // Storage: ImOnline Keys (r:1 w:0) + // Proof: ImOnline AuthoredBlocks (max_values: None, max_size: Some(56), added: 2531, mode: MaxEncodedLen) + /// The range of component `k` is `[1, 1000]`. + /// The range of component `e` is `[1, 100]`. fn validate_unsigned_and_then_heartbeat(k: u32, e: u32, ) -> Weight { - (0 as Weight) - // Standard Error: 3_000 - .saturating_add((181_000 as Weight).saturating_mul(k as Weight)) - // Standard Error: 33_000 - .saturating_add((1_320_000 as Weight).saturating_mul(e as Weight)) - .saturating_add(T::DbWeight::get().reads(4 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + // Proof Size summary in bytes: + // Measured: `295 + k * (32 ±0)` + // Estimated: `10349544 + k * (64 ±0) + e * (35 ±0)` + // Minimum execution time: 133_001 nanoseconds. + Weight::from_parts(99_544_474, 0u64) + .saturating_add(Weight::from_parts(0, 10349544)) + // Standard Error: 353 + .saturating_add(Weight::from_parts(38_634, 0u64).saturating_mul(k.into())) + // Standard Error: 3_565 + .saturating_add(Weight::from_parts(511_916, 0u64).saturating_mul(e.into())) + .saturating_add(T::DbWeight::get().reads(4_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) + .saturating_add(Weight::from_parts(0, 64).saturating_mul(k.into())) + .saturating_add(Weight::from_parts(0, 35).saturating_mul(e.into())) } } diff --git a/runtime/src/weights/pallet_multisig.rs b/runtime/src/weights/pallet_multisig.rs index d6317982f7..b9a1bffb53 100644 --- a/runtime/src/weights/pallet_multisig.rs +++ b/runtime/src/weights/pallet_multisig.rs @@ -18,22 +18,21 @@ //! Autogenerated weights for pallet_multisig //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-10-20, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("dev"), DB CACHE: 1024 +//! DATE: 2023-11-06, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("prod-test"), DB CACHE: 1024 // Executed Command: -// ./../target/release/joystream-node +// ./scripts/../target/release/joystream-node // benchmark // pallet -// --base-path=/mnt/disks/local-ssd/ // --pallet=pallet_multisig // --extrinsic=* -// --chain=dev +// --chain=prod-test // --steps=50 // --repeat=20 // --execution=wasm -// --template=./../devops/frame-weight-template.hbs -// --output=./../runtime/src/weights/pallet_multisig.rs +// --template=./scripts/../devops/frame-weight-template.hbs +// --output=./scripts/../runtime/src/weights/pallet_multisig.rs #![cfg_attr(rustfmt, rustfmt_skip)] #![allow(unused_parens)] @@ -48,100 +47,116 @@ pub use pallet_multisig::weights::WeightInfo; /// Weights for pallet_multisig using the Substrate node and recommended hardware. pub struct SubstrateWeight(PhantomData); impl WeightInfo for SubstrateWeight { - fn as_multi_threshold_1(_z: u32, ) -> Weight { - (17_428_000 as Weight) + /// The range of component `z` is `[0, 10000]`. + fn as_multi_threshold_1(z: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 14_894 nanoseconds. + Weight::from_parts(15_581_844, 0u64) + .saturating_add(Weight::from_parts(0, 0)) + // Standard Error: 5 + .saturating_add(Weight::from_parts(569, 0u64).saturating_mul(z.into())) } // Storage: Multisig Multisigs (r:1 w:1) - // Storage: unknown [0x3a65787472696e7369635f696e646578] (r:1 w:0) + // Proof: Multisig Multisigs (max_values: None, max_size: Some(3346), added: 5821, mode: MaxEncodedLen) + /// The range of component `s` is `[2, 100]`. + /// The range of component `z` is `[0, 10000]`. fn as_multi_create(s: u32, z: u32, ) -> Weight { - (92_931_000 as Weight) - // Standard Error: 1_000 - .saturating_add((130_000 as Weight).saturating_mul(s as Weight)) - // Standard Error: 0 - .saturating_add((1_000 as Weight).saturating_mul(z as Weight)) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) - } - // Storage: Multisig Multisigs (r:1 w:1) - // Storage: Multisig Calls (r:1 w:1) - // Storage: unknown [0x3a65787472696e7369635f696e646578] (r:1 w:0) - fn as_multi_create_store(s: u32, z: u32, ) -> Weight { - (105_996_000 as Weight) - // Standard Error: 1_000 - .saturating_add((142_000 as Weight).saturating_mul(s as Weight)) - // Standard Error: 0 - .saturating_add((2_000 as Weight).saturating_mul(z as Weight)) - .saturating_add(T::DbWeight::get().reads(3 as Weight)) - .saturating_add(T::DbWeight::get().writes(2 as Weight)) + // Proof Size summary in bytes: + // Measured: `367 + s * (2 ±0)` + // Estimated: `6811` + // Minimum execution time: 47_341 nanoseconds. + Weight::from_parts(36_305_906, 0u64) + .saturating_add(Weight::from_parts(0, 6811)) + // Standard Error: 937 + .saturating_add(Weight::from_parts(126_511, 0u64).saturating_mul(s.into())) + // Standard Error: 9 + .saturating_add(Weight::from_parts(1_508, 0u64).saturating_mul(z.into())) + .saturating_add(T::DbWeight::get().reads(1_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) } // Storage: Multisig Multisigs (r:1 w:1) + // Proof: Multisig Multisigs (max_values: None, max_size: Some(3346), added: 5821, mode: MaxEncodedLen) + /// The range of component `s` is `[3, 100]`. + /// The range of component `z` is `[0, 10000]`. fn as_multi_approve(s: u32, z: u32, ) -> Weight { - (52_406_000 as Weight) - // Standard Error: 1_000 - .saturating_add((119_000 as Weight).saturating_mul(s as Weight)) - // Standard Error: 0 - .saturating_add((1_000 as Weight).saturating_mul(z as Weight)) - .saturating_add(T::DbWeight::get().reads(1 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) - } - // Storage: Multisig Multisigs (r:1 w:1) - // Storage: Multisig Calls (r:1 w:1) - fn as_multi_approve_store(s: u32, z: u32, ) -> Weight { - (100_204_000 as Weight) - // Standard Error: 1_000 - .saturating_add((123_000 as Weight).saturating_mul(s as Weight)) - // Standard Error: 0 - .saturating_add((2_000 as Weight).saturating_mul(z as Weight)) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) - .saturating_add(T::DbWeight::get().writes(2 as Weight)) + // Proof Size summary in bytes: + // Measured: `354` + // Estimated: `6811` + // Minimum execution time: 33_468 nanoseconds. + Weight::from_parts(23_656_470, 0u64) + .saturating_add(Weight::from_parts(0, 6811)) + // Standard Error: 618 + .saturating_add(Weight::from_parts(109_796, 0u64).saturating_mul(s.into())) + // Standard Error: 6 + .saturating_add(Weight::from_parts(1_544, 0u64).saturating_mul(z.into())) + .saturating_add(T::DbWeight::get().reads(1_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) } // Storage: Multisig Multisigs (r:1 w:1) - // Storage: Multisig Calls (r:1 w:1) + // Proof: Multisig Multisigs (max_values: None, max_size: Some(3346), added: 5821, mode: MaxEncodedLen) // Storage: System Account (r:1 w:1) + // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + /// The range of component `s` is `[2, 100]`. + /// The range of component `z` is `[0, 10000]`. fn as_multi_complete(s: u32, z: u32, ) -> Weight { - (121_333_000 as Weight) - // Standard Error: 1_000 - .saturating_add((185_000 as Weight).saturating_mul(s as Weight)) - // Standard Error: 0 - .saturating_add((2_000 as Weight).saturating_mul(z as Weight)) - .saturating_add(T::DbWeight::get().reads(3 as Weight)) - .saturating_add(T::DbWeight::get().writes(3 as Weight)) + // Proof Size summary in bytes: + // Measured: `490 + s * (33 ±0)` + // Estimated: `10404` + // Minimum execution time: 52_237 nanoseconds. + Weight::from_parts(38_987_573, 0u64) + .saturating_add(Weight::from_parts(0, 10404)) + // Standard Error: 1_034 + .saturating_add(Weight::from_parts(150_759, 0u64).saturating_mul(s.into())) + // Standard Error: 10 + .saturating_add(Weight::from_parts(1_577, 0u64).saturating_mul(z.into())) + .saturating_add(T::DbWeight::get().reads(2_u64)) + .saturating_add(T::DbWeight::get().writes(2_u64)) } // Storage: Multisig Multisigs (r:1 w:1) - // Storage: unknown [0x3a65787472696e7369635f696e646578] (r:1 w:0) + // Proof: Multisig Multisigs (max_values: None, max_size: Some(3346), added: 5821, mode: MaxEncodedLen) + /// The range of component `s` is `[2, 100]`. fn approve_as_multi_create(s: u32, ) -> Weight { - (90_766_000 as Weight) - // Standard Error: 1_000 - .saturating_add((125_000 as Weight).saturating_mul(s as Weight)) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + // Proof Size summary in bytes: + // Measured: `368 + s * (2 ±0)` + // Estimated: `6811` + // Minimum execution time: 33_518 nanoseconds. + Weight::from_parts(34_864_531, 0u64) + .saturating_add(Weight::from_parts(0, 6811)) + // Standard Error: 1_246 + .saturating_add(Weight::from_parts(124_065, 0u64).saturating_mul(s.into())) + .saturating_add(T::DbWeight::get().reads(1_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) } // Storage: Multisig Multisigs (r:1 w:1) - // Storage: Multisig Calls (r:1 w:0) + // Proof: Multisig Multisigs (max_values: None, max_size: Some(3346), added: 5821, mode: MaxEncodedLen) + /// The range of component `s` is `[2, 100]`. fn approve_as_multi_approve(s: u32, ) -> Weight { - (51_360_000 as Weight) - // Standard Error: 1_000 - .saturating_add((119_000 as Weight).saturating_mul(s as Weight)) - .saturating_add(T::DbWeight::get().reads(1 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) - } - // Storage: Multisig Multisigs (r:1 w:1) - // Storage: Multisig Calls (r:1 w:1) - // Storage: System Account (r:1 w:1) - fn approve_as_multi_complete(s: u32, ) -> Weight { - (140_632_000 as Weight) - // Standard Error: 2_000 - .saturating_add((196_000 as Weight).saturating_mul(s as Weight)) - .saturating_add(T::DbWeight::get().reads(3 as Weight)) - .saturating_add(T::DbWeight::get().writes(3 as Weight)) + // Proof Size summary in bytes: + // Measured: `354` + // Estimated: `6811` + // Minimum execution time: 21_585 nanoseconds. + Weight::from_parts(22_455_505, 0u64) + .saturating_add(Weight::from_parts(0, 6811)) + // Standard Error: 775 + .saturating_add(Weight::from_parts(113_679, 0u64).saturating_mul(s.into())) + .saturating_add(T::DbWeight::get().reads(1_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) } // Storage: Multisig Multisigs (r:1 w:1) - // Storage: Multisig Calls (r:1 w:1) + // Proof: Multisig Multisigs (max_values: None, max_size: Some(3346), added: 5821, mode: MaxEncodedLen) + /// The range of component `s` is `[2, 100]`. fn cancel_as_multi(s: u32, ) -> Weight { - (124_818_000 as Weight) - // Standard Error: 1_000 - .saturating_add((151_000 as Weight).saturating_mul(s as Weight)) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) - .saturating_add(T::DbWeight::get().writes(2 as Weight)) + // Proof Size summary in bytes: + // Measured: `559 + s * (1 ±0)` + // Estimated: `6811` + // Minimum execution time: 33_654 nanoseconds. + Weight::from_parts(35_754_941, 0u64) + .saturating_add(Weight::from_parts(0, 6811)) + // Standard Error: 1_018 + .saturating_add(Weight::from_parts(116_827, 0u64).saturating_mul(s.into())) + .saturating_add(T::DbWeight::get().reads(1_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) } } diff --git a/runtime/src/weights/pallet_session.rs b/runtime/src/weights/pallet_session.rs index beec3af4b8..2cbbf59fbe 100644 --- a/runtime/src/weights/pallet_session.rs +++ b/runtime/src/weights/pallet_session.rs @@ -18,22 +18,21 @@ //! Autogenerated weights for pallet_session //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-10-20, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("dev"), DB CACHE: 1024 +//! DATE: 2023-11-06, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("prod-test"), DB CACHE: 1024 // Executed Command: -// ./../target/release/joystream-node +// ./scripts/../target/release/joystream-node // benchmark // pallet -// --base-path=/mnt/disks/local-ssd/ // --pallet=pallet_session // --extrinsic=* -// --chain=dev +// --chain=prod-test // --steps=50 // --repeat=20 // --execution=wasm -// --template=./../devops/frame-weight-template.hbs -// --output=./../runtime/src/weights/pallet_session.rs +// --template=./scripts/../devops/frame-weight-template.hbs +// --output=./scripts/../runtime/src/weights/pallet_session.rs #![cfg_attr(rustfmt, rustfmt_skip)] #![allow(unused_parens)] @@ -49,19 +48,35 @@ pub use pallet_session::weights::WeightInfo; pub struct SubstrateWeight(PhantomData); impl WeightInfo for SubstrateWeight { // Storage: Staking Ledger (r:1 w:0) + // Proof: Staking Ledger (max_values: None, max_size: Some(1235), added: 3710, mode: MaxEncodedLen) // Storage: Session NextKeys (r:1 w:1) + // Proof Skipped: Session NextKeys (max_values: None, max_size: None, mode: Measured) // Storage: Session KeyOwner (r:4 w:4) + // Proof Skipped: Session KeyOwner (max_values: None, max_size: None, mode: Measured) fn set_keys() -> Weight { - (114_260_000 as Weight) - .saturating_add(T::DbWeight::get().reads(6 as Weight)) - .saturating_add(T::DbWeight::get().writes(5 as Weight)) + // Proof Size summary in bytes: + // Measured: `1804` + // Estimated: `22663` + // Minimum execution time: 61_742 nanoseconds. + Weight::from_parts(63_554_000, 0u64) + .saturating_add(Weight::from_parts(0, 22663)) + .saturating_add(T::DbWeight::get().reads(6_u64)) + .saturating_add(T::DbWeight::get().writes(5_u64)) } // Storage: Staking Ledger (r:1 w:0) + // Proof: Staking Ledger (max_values: None, max_size: Some(1235), added: 3710, mode: MaxEncodedLen) // Storage: Session NextKeys (r:1 w:1) + // Proof Skipped: Session NextKeys (max_values: None, max_size: None, mode: Measured) // Storage: Session KeyOwner (r:0 w:4) + // Proof Skipped: Session KeyOwner (max_values: None, max_size: None, mode: Measured) fn purge_keys() -> Weight { - (71_830_000 as Weight) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) - .saturating_add(T::DbWeight::get().writes(5 as Weight)) + // Proof Size summary in bytes: + // Measured: `1671` + // Estimated: `11507` + // Minimum execution time: 45_988 nanoseconds. + Weight::from_parts(46_876_000, 0u64) + .saturating_add(Weight::from_parts(0, 11507)) + .saturating_add(T::DbWeight::get().reads(2_u64)) + .saturating_add(T::DbWeight::get().writes(5_u64)) } } diff --git a/runtime/src/weights/pallet_staking.rs b/runtime/src/weights/pallet_staking.rs index 0d837c8128..985288afbf 100644 --- a/runtime/src/weights/pallet_staking.rs +++ b/runtime/src/weights/pallet_staking.rs @@ -18,22 +18,21 @@ //! Autogenerated weights for pallet_staking //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-10-20, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("dev"), DB CACHE: 1024 +//! DATE: 2023-11-06, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("prod-test"), DB CACHE: 1024 // Executed Command: -// ./../target/release/joystream-node +// ./scripts/../target/release/joystream-node // benchmark // pallet -// --base-path=/mnt/disks/local-ssd/ // --pallet=pallet_staking // --extrinsic=* -// --chain=dev +// --chain=prod-test // --steps=50 // --repeat=20 // --execution=wasm -// --template=./../devops/frame-weight-template.hbs -// --output=./../runtime/src/weights/pallet_staking.rs +// --template=./scripts/../devops/frame-weight-template.hbs +// --output=./scripts/../runtime/src/weights/pallet_staking.rs #![cfg_attr(rustfmt, rustfmt_skip)] #![allow(unused_parens)] @@ -49,381 +48,729 @@ pub use pallet_staking::weights::WeightInfo; pub struct SubstrateWeight(PhantomData); impl WeightInfo for SubstrateWeight { // Storage: Staking Bonded (r:1 w:1) + // Proof: Staking Bonded (max_values: None, max_size: Some(72), added: 2547, mode: MaxEncodedLen) // Storage: Staking Ledger (r:1 w:1) + // Proof: Staking Ledger (max_values: None, max_size: Some(1235), added: 3710, mode: MaxEncodedLen) // Storage: Balances Locks (r:1 w:1) + // Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) // Storage: Staking CurrentEra (r:1 w:0) - // Storage: Staking HistoryDepth (r:1 w:0) + // Proof: Staking CurrentEra (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) // Storage: Staking Payee (r:0 w:1) + // Proof: Staking Payee (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) fn bond() -> Weight { - (130_400_000 as Weight) - .saturating_add(T::DbWeight::get().reads(5 as Weight)) - .saturating_add(T::DbWeight::get().writes(4 as Weight)) + // Proof Size summary in bytes: + // Measured: `999` + // Estimated: `14490` + // Minimum execution time: 51_582 nanoseconds. + Weight::from_parts(52_750_000, 0u64) + .saturating_add(Weight::from_parts(0, 14490)) + .saturating_add(T::DbWeight::get().reads(4_u64)) + .saturating_add(T::DbWeight::get().writes(4_u64)) } // Storage: Staking Bonded (r:1 w:0) + // Proof: Staking Bonded (max_values: None, max_size: Some(72), added: 2547, mode: MaxEncodedLen) // Storage: Staking Ledger (r:1 w:1) + // Proof: Staking Ledger (max_values: None, max_size: Some(1235), added: 3710, mode: MaxEncodedLen) // Storage: Balances Locks (r:1 w:1) - // Storage: BagsList ListNodes (r:3 w:3) - // Storage: BagsList ListBags (r:2 w:2) + // Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) + // Storage: VoterList ListNodes (r:3 w:3) + // Proof: VoterList ListNodes (max_values: None, max_size: Some(154), added: 2629, mode: MaxEncodedLen) + // Storage: VoterList ListBags (r:2 w:2) + // Proof: VoterList ListBags (max_values: None, max_size: Some(82), added: 2557, mode: MaxEncodedLen) fn bond_extra() -> Weight { - (217_860_000 as Weight) - .saturating_add(T::DbWeight::get().reads(8 as Weight)) - .saturating_add(T::DbWeight::get().writes(7 as Weight)) + // Proof Size summary in bytes: + // Measured: `2012` + // Estimated: `27982` + // Minimum execution time: 99_765 nanoseconds. + Weight::from_parts(102_585_000, 0u64) + .saturating_add(Weight::from_parts(0, 27982)) + .saturating_add(T::DbWeight::get().reads(8_u64)) + .saturating_add(T::DbWeight::get().writes(7_u64)) } // Storage: Staking Ledger (r:1 w:1) + // Proof: Staking Ledger (max_values: None, max_size: Some(1235), added: 3710, mode: MaxEncodedLen) // Storage: Staking Nominators (r:1 w:0) + // Proof: Staking Nominators (max_values: None, max_size: Some(558), added: 3033, mode: MaxEncodedLen) // Storage: Staking MinNominatorBond (r:1 w:0) + // Proof: Staking MinNominatorBond (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) // Storage: Staking CurrentEra (r:1 w:0) + // Proof: Staking CurrentEra (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) // Storage: Balances Locks (r:1 w:1) + // Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) // Storage: System Account (r:1 w:1) - // Storage: BagsList ListNodes (r:3 w:3) + // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + // Storage: VoterList ListNodes (r:3 w:3) + // Proof: VoterList ListNodes (max_values: None, max_size: Some(154), added: 2629, mode: MaxEncodedLen) // Storage: Staking Bonded (r:1 w:0) - // Storage: BagsList ListBags (r:2 w:2) + // Proof: Staking Bonded (max_values: None, max_size: Some(72), added: 2547, mode: MaxEncodedLen) + // Storage: VoterList ListBags (r:2 w:2) + // Proof: VoterList ListBags (max_values: None, max_size: Some(82), added: 2557, mode: MaxEncodedLen) fn unbond() -> Weight { - (243_010_000 as Weight) - .saturating_add(T::DbWeight::get().reads(12 as Weight)) - .saturating_add(T::DbWeight::get().writes(8 as Weight)) + // Proof Size summary in bytes: + // Measured: `2245` + // Estimated: `38588` + // Minimum execution time: 107_669 nanoseconds. + Weight::from_parts(110_427_000, 0u64) + .saturating_add(Weight::from_parts(0, 38588)) + .saturating_add(T::DbWeight::get().reads(12_u64)) + .saturating_add(T::DbWeight::get().writes(8_u64)) } // Storage: Staking Ledger (r:1 w:1) + // Proof: Staking Ledger (max_values: None, max_size: Some(1235), added: 3710, mode: MaxEncodedLen) // Storage: Staking CurrentEra (r:1 w:0) + // Proof: Staking CurrentEra (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) // Storage: Balances Locks (r:1 w:1) + // Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) // Storage: System Account (r:1 w:1) + // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + /// The range of component `s` is `[0, 100]`. fn withdraw_unbonded_update(s: u32, ) -> Weight { - (91_409_000 as Weight) - // Standard Error: 1_000 - .saturating_add((46_000 as Weight).saturating_mul(s as Weight)) - .saturating_add(T::DbWeight::get().reads(4 as Weight)) - .saturating_add(T::DbWeight::get().writes(3 as Weight)) + // Proof Size summary in bytes: + // Measured: `931` + // Estimated: `14546` + // Minimum execution time: 38_269 nanoseconds. + Weight::from_parts(40_572_245, 0u64) + .saturating_add(Weight::from_parts(0, 14546)) + // Standard Error: 926 + .saturating_add(Weight::from_parts(40_311, 0u64).saturating_mul(s.into())) + .saturating_add(T::DbWeight::get().reads(4_u64)) + .saturating_add(T::DbWeight::get().writes(3_u64)) } // Storage: Staking Ledger (r:1 w:1) + // Proof: Staking Ledger (max_values: None, max_size: Some(1235), added: 3710, mode: MaxEncodedLen) // Storage: Staking CurrentEra (r:1 w:0) + // Proof: Staking CurrentEra (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) // Storage: Staking Bonded (r:1 w:1) - // Storage: Staking SlashingSpans (r:1 w:0) + // Proof: Staking Bonded (max_values: None, max_size: Some(72), added: 2547, mode: MaxEncodedLen) + // Storage: Staking SlashingSpans (r:1 w:1) + // Proof Skipped: Staking SlashingSpans (max_values: None, max_size: None, mode: Measured) // Storage: Staking Validators (r:1 w:0) + // Proof: Staking Validators (max_values: None, max_size: Some(45), added: 2520, mode: MaxEncodedLen) // Storage: Staking Nominators (r:1 w:1) + // Proof: Staking Nominators (max_values: None, max_size: Some(558), added: 3033, mode: MaxEncodedLen) // Storage: Staking CounterForNominators (r:1 w:1) - // Storage: BagsList ListNodes (r:2 w:2) - // Storage: BagsList ListBags (r:1 w:1) - // Storage: BagsList CounterForListNodes (r:1 w:1) + // Proof: Staking CounterForNominators (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + // Storage: VoterList ListNodes (r:2 w:2) + // Proof: VoterList ListNodes (max_values: None, max_size: Some(154), added: 2629, mode: MaxEncodedLen) + // Storage: VoterList ListBags (r:1 w:1) + // Proof: VoterList ListBags (max_values: None, max_size: Some(82), added: 2557, mode: MaxEncodedLen) + // Storage: VoterList CounterForListNodes (r:1 w:1) + // Proof: VoterList CounterForListNodes (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) // Storage: System Account (r:1 w:1) + // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) // Storage: Balances Locks (r:1 w:1) + // Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) // Storage: Staking Payee (r:0 w:1) - fn withdraw_unbonded_kill(_s: u32, ) -> Weight { - (195_422_000 as Weight) - .saturating_add(T::DbWeight::get().reads(13 as Weight)) - .saturating_add(T::DbWeight::get().writes(11 as Weight)) + // Proof: Staking Payee (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) + // Storage: Staking SpanSlash (r:0 w:100) + // Proof: Staking SpanSlash (max_values: None, max_size: Some(76), added: 2551, mode: MaxEncodedLen) + /// The range of component `s` is `[0, 100]`. + fn withdraw_unbonded_kill(s: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `2290 + s * (4 ±0)` + // Estimated: `44139 + s * (4 ±0)` + // Minimum execution time: 95_737 nanoseconds. + Weight::from_parts(104_705_712, 0u64) + .saturating_add(Weight::from_parts(0, 44139)) + // Standard Error: 3_403 + .saturating_add(Weight::from_parts(1_599_906, 0u64).saturating_mul(s.into())) + .saturating_add(T::DbWeight::get().reads(13_u64)) + .saturating_add(T::DbWeight::get().writes(12_u64)) + .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(s.into()))) + .saturating_add(Weight::from_parts(0, 4).saturating_mul(s.into())) } // Storage: Staking Ledger (r:1 w:0) + // Proof: Staking Ledger (max_values: None, max_size: Some(1235), added: 3710, mode: MaxEncodedLen) // Storage: Staking MinValidatorBond (r:1 w:0) + // Proof: Staking MinValidatorBond (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) // Storage: Staking MinCommission (r:1 w:0) + // Proof: Staking MinCommission (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) // Storage: Staking Validators (r:1 w:1) + // Proof: Staking Validators (max_values: None, max_size: Some(45), added: 2520, mode: MaxEncodedLen) // Storage: Staking MaxValidatorsCount (r:1 w:0) + // Proof: Staking MaxValidatorsCount (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) // Storage: Staking CounterForValidators (r:1 w:1) + // Proof: Staking CounterForValidators (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) // Storage: Staking Nominators (r:1 w:0) + // Proof: Staking Nominators (max_values: None, max_size: Some(558), added: 3033, mode: MaxEncodedLen) // Storage: Staking Bonded (r:1 w:0) - // Storage: BagsList ListNodes (r:2 w:2) - // Storage: BagsList ListBags (r:1 w:1) - // Storage: BagsList CounterForListNodes (r:1 w:1) + // Proof: Staking Bonded (max_values: None, max_size: Some(72), added: 2547, mode: MaxEncodedLen) + // Storage: VoterList ListNodes (r:2 w:2) + // Proof: VoterList ListNodes (max_values: None, max_size: Some(154), added: 2629, mode: MaxEncodedLen) + // Storage: VoterList ListBags (r:1 w:1) + // Proof: VoterList ListBags (max_values: None, max_size: Some(82), added: 2557, mode: MaxEncodedLen) + // Storage: VoterList CounterForListNodes (r:1 w:1) + // Proof: VoterList CounterForListNodes (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) fn validate() -> Weight { - (178_470_000 as Weight) - .saturating_add(T::DbWeight::get().reads(12 as Weight)) - .saturating_add(T::DbWeight::get().writes(6 as Weight)) + // Proof Size summary in bytes: + // Measured: `1390` + // Estimated: `33022` + // Minimum execution time: 72_501 nanoseconds. + Weight::from_parts(74_120_000, 0u64) + .saturating_add(Weight::from_parts(0, 33022)) + .saturating_add(T::DbWeight::get().reads(12_u64)) + .saturating_add(T::DbWeight::get().writes(6_u64)) } // Storage: Staking Ledger (r:1 w:0) - // Storage: Staking Nominators (r:1 w:1) + // Proof: Staking Ledger (max_values: None, max_size: Some(1235), added: 3710, mode: MaxEncodedLen) + // Storage: Staking Nominators (r:128 w:128) + // Proof: Staking Nominators (max_values: None, max_size: Some(558), added: 3033, mode: MaxEncodedLen) + /// The range of component `k` is `[1, 128]`. fn kick(k: u32, ) -> Weight { - (14_901_000 as Weight) - // Standard Error: 20_000 - .saturating_add((28_658_000 as Weight).saturating_mul(k as Weight)) - .saturating_add(T::DbWeight::get().reads(1 as Weight)) - .saturating_add(T::DbWeight::get().reads((1 as Weight).saturating_mul(k as Weight))) - .saturating_add(T::DbWeight::get().writes((1 as Weight).saturating_mul(k as Weight))) + // Proof Size summary in bytes: + // Measured: `1195 + k * (569 ±0)` + // Estimated: `5690 + k * (3033 ±0)` + // Minimum execution time: 35_418 nanoseconds. + Weight::from_parts(31_937_311, 0u64) + .saturating_add(Weight::from_parts(0, 5690)) + // Standard Error: 9_672 + .saturating_add(Weight::from_parts(9_410_084, 0u64).saturating_mul(k.into())) + .saturating_add(T::DbWeight::get().reads(1_u64)) + .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(k.into()))) + .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(k.into()))) + .saturating_add(Weight::from_parts(0, 3033).saturating_mul(k.into())) } // Storage: Staking Ledger (r:1 w:0) + // Proof: Staking Ledger (max_values: None, max_size: Some(1235), added: 3710, mode: MaxEncodedLen) // Storage: Staking MinNominatorBond (r:1 w:0) + // Proof: Staking MinNominatorBond (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) // Storage: Staking Nominators (r:1 w:1) + // Proof: Staking Nominators (max_values: None, max_size: Some(558), added: 3033, mode: MaxEncodedLen) // Storage: Staking MaxNominatorsCount (r:1 w:0) + // Proof: Staking MaxNominatorsCount (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) // Storage: Staking CounterForNominators (r:1 w:1) - // Storage: Staking Validators (r:2 w:0) + // Proof: Staking CounterForNominators (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + // Storage: Staking Validators (r:17 w:0) + // Proof: Staking Validators (max_values: None, max_size: Some(45), added: 2520, mode: MaxEncodedLen) // Storage: Staking CurrentEra (r:1 w:0) + // Proof: Staking CurrentEra (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) // Storage: Staking Bonded (r:1 w:0) - // Storage: BagsList ListNodes (r:2 w:2) - // Storage: BagsList ListBags (r:1 w:1) - // Storage: BagsList CounterForListNodes (r:1 w:1) + // Proof: Staking Bonded (max_values: None, max_size: Some(72), added: 2547, mode: MaxEncodedLen) + // Storage: VoterList ListNodes (r:2 w:2) + // Proof: VoterList ListNodes (max_values: None, max_size: Some(154), added: 2629, mode: MaxEncodedLen) + // Storage: VoterList ListBags (r:1 w:1) + // Proof: VoterList ListBags (max_values: None, max_size: Some(82), added: 2557, mode: MaxEncodedLen) + // Storage: VoterList CounterForListNodes (r:1 w:1) + // Proof: VoterList CounterForListNodes (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + /// The range of component `n` is `[1, 16]`. fn nominate(n: u32, ) -> Weight { - (158_961_000 as Weight) - // Standard Error: 57_000 - .saturating_add((12_860_000 as Weight).saturating_mul(n as Weight)) - .saturating_add(T::DbWeight::get().reads(12 as Weight)) - .saturating_add(T::DbWeight::get().reads((1 as Weight).saturating_mul(n as Weight))) - .saturating_add(T::DbWeight::get().writes(6 as Weight)) + // Proof Size summary in bytes: + // Measured: `1852 + n * (104 ±0)` + // Estimated: `33022 + n * (2520 ±0)` + // Minimum execution time: 77_899 nanoseconds. + Weight::from_parts(76_058_247, 0u64) + .saturating_add(Weight::from_parts(0, 33022)) + // Standard Error: 9_770 + .saturating_add(Weight::from_parts(4_092_389, 0u64).saturating_mul(n.into())) + .saturating_add(T::DbWeight::get().reads(12_u64)) + .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(n.into()))) + .saturating_add(T::DbWeight::get().writes(6_u64)) + .saturating_add(Weight::from_parts(0, 2520).saturating_mul(n.into())) } // Storage: Staking Ledger (r:1 w:0) + // Proof: Staking Ledger (max_values: None, max_size: Some(1235), added: 3710, mode: MaxEncodedLen) // Storage: Staking Validators (r:1 w:0) + // Proof: Staking Validators (max_values: None, max_size: Some(45), added: 2520, mode: MaxEncodedLen) // Storage: Staking Nominators (r:1 w:1) + // Proof: Staking Nominators (max_values: None, max_size: Some(558), added: 3033, mode: MaxEncodedLen) // Storage: Staking CounterForNominators (r:1 w:1) - // Storage: BagsList ListNodes (r:2 w:2) - // Storage: BagsList ListBags (r:1 w:1) - // Storage: BagsList CounterForListNodes (r:1 w:1) + // Proof: Staking CounterForNominators (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + // Storage: VoterList ListNodes (r:2 w:2) + // Proof: VoterList ListNodes (max_values: None, max_size: Some(154), added: 2629, mode: MaxEncodedLen) + // Storage: VoterList ListBags (r:1 w:1) + // Proof: VoterList ListBags (max_values: None, max_size: Some(82), added: 2557, mode: MaxEncodedLen) + // Storage: VoterList CounterForListNodes (r:1 w:1) + // Proof: VoterList CounterForListNodes (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) fn chill() -> Weight { - (139_470_000 as Weight) - .saturating_add(T::DbWeight::get().reads(8 as Weight)) - .saturating_add(T::DbWeight::get().writes(6 as Weight)) + // Proof Size summary in bytes: + // Measured: `1707` + // Estimated: `25006` + // Minimum execution time: 67_611 nanoseconds. + Weight::from_parts(70_696_000, 0u64) + .saturating_add(Weight::from_parts(0, 25006)) + .saturating_add(T::DbWeight::get().reads(8_u64)) + .saturating_add(T::DbWeight::get().writes(6_u64)) } // Storage: Staking Ledger (r:1 w:0) + // Proof: Staking Ledger (max_values: None, max_size: Some(1235), added: 3710, mode: MaxEncodedLen) // Storage: Staking Payee (r:0 w:1) + // Proof: Staking Payee (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) fn set_payee() -> Weight { - (19_610_000 as Weight) - .saturating_add(T::DbWeight::get().reads(1 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + // Proof Size summary in bytes: + // Measured: `721` + // Estimated: `4700` + // Minimum execution time: 16_221 nanoseconds. + Weight::from_parts(17_009_000, 0u64) + .saturating_add(Weight::from_parts(0, 4700)) + .saturating_add(T::DbWeight::get().reads(1_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) } // Storage: Staking Bonded (r:1 w:1) + // Proof: Staking Bonded (max_values: None, max_size: Some(72), added: 2547, mode: MaxEncodedLen) // Storage: Staking Ledger (r:2 w:2) + // Proof: Staking Ledger (max_values: None, max_size: Some(1235), added: 3710, mode: MaxEncodedLen) fn set_controller() -> Weight { - (45_940_000 as Weight) - .saturating_add(T::DbWeight::get().reads(3 as Weight)) - .saturating_add(T::DbWeight::get().writes(3 as Weight)) + // Proof Size summary in bytes: + // Measured: `820` + // Estimated: `11947` + // Minimum execution time: 25_310 nanoseconds. + Weight::from_parts(25_984_000, 0u64) + .saturating_add(Weight::from_parts(0, 11947)) + .saturating_add(T::DbWeight::get().reads(3_u64)) + .saturating_add(T::DbWeight::get().writes(3_u64)) } // Storage: Staking ValidatorCount (r:0 w:1) + // Proof: Staking ValidatorCount (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) fn set_validator_count() -> Weight { - (3_350_000 as Weight) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 3_205 nanoseconds. + Weight::from_parts(3_446_000, 0u64) + .saturating_add(Weight::from_parts(0, 0)) + .saturating_add(T::DbWeight::get().writes(1_u64)) } // Storage: Staking ForceEra (r:0 w:1) + // Proof: Staking ForceEra (max_values: Some(1), max_size: Some(1), added: 496, mode: MaxEncodedLen) fn force_no_eras() -> Weight { - (3_620_000 as Weight) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 11_726 nanoseconds. + Weight::from_parts(12_143_000, 0u64) + .saturating_add(Weight::from_parts(0, 0)) + .saturating_add(T::DbWeight::get().writes(1_u64)) } // Storage: Staking ForceEra (r:0 w:1) + // Proof: Staking ForceEra (max_values: Some(1), max_size: Some(1), added: 496, mode: MaxEncodedLen) fn force_new_era() -> Weight { - (3_650_000 as Weight) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 11_873 nanoseconds. + Weight::from_parts(12_097_000, 0u64) + .saturating_add(Weight::from_parts(0, 0)) + .saturating_add(T::DbWeight::get().writes(1_u64)) } // Storage: Staking ForceEra (r:0 w:1) + // Proof: Staking ForceEra (max_values: Some(1), max_size: Some(1), added: 496, mode: MaxEncodedLen) fn force_new_era_always() -> Weight { - (3_609_000 as Weight) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 11_918 nanoseconds. + Weight::from_parts(12_337_000, 0u64) + .saturating_add(Weight::from_parts(0, 0)) + .saturating_add(T::DbWeight::get().writes(1_u64)) } // Storage: Staking Invulnerables (r:0 w:1) + // Proof Skipped: Staking Invulnerables (max_values: Some(1), max_size: None, mode: Measured) + /// The range of component `v` is `[0, 400]`. fn set_invulnerables(v: u32, ) -> Weight { - (4_173_000 as Weight) - // Standard Error: 0 - .saturating_add((10_000 as Weight).saturating_mul(v as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 3_549 nanoseconds. + Weight::from_parts(4_460_076, 0u64) + .saturating_add(Weight::from_parts(0, 0)) + // Standard Error: 85 + .saturating_add(Weight::from_parts(8_771, 0u64).saturating_mul(v.into())) + .saturating_add(T::DbWeight::get().writes(1_u64)) } // Storage: Staking Bonded (r:1 w:1) - // Storage: Staking SlashingSpans (r:1 w:0) + // Proof: Staking Bonded (max_values: None, max_size: Some(72), added: 2547, mode: MaxEncodedLen) + // Storage: Staking SlashingSpans (r:1 w:1) + // Proof Skipped: Staking SlashingSpans (max_values: None, max_size: None, mode: Measured) // Storage: Staking Validators (r:1 w:0) + // Proof: Staking Validators (max_values: None, max_size: Some(45), added: 2520, mode: MaxEncodedLen) // Storage: Staking Nominators (r:1 w:1) + // Proof: Staking Nominators (max_values: None, max_size: Some(558), added: 3033, mode: MaxEncodedLen) // Storage: Staking CounterForNominators (r:1 w:1) - // Storage: BagsList ListNodes (r:2 w:2) - // Storage: BagsList ListBags (r:1 w:1) - // Storage: BagsList CounterForListNodes (r:1 w:1) + // Proof: Staking CounterForNominators (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + // Storage: VoterList ListNodes (r:2 w:2) + // Proof: VoterList ListNodes (max_values: None, max_size: Some(154), added: 2629, mode: MaxEncodedLen) + // Storage: VoterList ListBags (r:1 w:1) + // Proof: VoterList ListBags (max_values: None, max_size: Some(82), added: 2557, mode: MaxEncodedLen) + // Storage: VoterList CounterForListNodes (r:1 w:1) + // Proof: VoterList CounterForListNodes (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) // Storage: System Account (r:1 w:1) + // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) // Storage: Balances Locks (r:1 w:1) + // Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) // Storage: Staking Ledger (r:0 w:1) + // Proof: Staking Ledger (max_values: None, max_size: Some(1235), added: 3710, mode: MaxEncodedLen) // Storage: Staking Payee (r:0 w:1) - // Storage: Staking SpanSlash (r:0 w:2) + // Proof: Staking Payee (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) + // Storage: Staking SpanSlash (r:0 w:100) + // Proof: Staking SpanSlash (max_values: None, max_size: Some(76), added: 2551, mode: MaxEncodedLen) + /// The range of component `s` is `[0, 100]`. fn force_unstake(s: u32, ) -> Weight { - (182_831_000 as Weight) - // Standard Error: 4_000 - .saturating_add((3_845_000 as Weight).saturating_mul(s as Weight)) - .saturating_add(T::DbWeight::get().reads(11 as Weight)) - .saturating_add(T::DbWeight::get().writes(12 as Weight)) - .saturating_add(T::DbWeight::get().writes((1 as Weight).saturating_mul(s as Weight))) + // Proof Size summary in bytes: + // Measured: `2020 + s * (4 ±0)` + // Estimated: `37680 + s * (4 ±0)` + // Minimum execution time: 86_934 nanoseconds. + Weight::from_parts(95_797_312, 0u64) + .saturating_add(Weight::from_parts(0, 37680)) + // Standard Error: 3_348 + .saturating_add(Weight::from_parts(1_591_416, 0u64).saturating_mul(s.into())) + .saturating_add(T::DbWeight::get().reads(11_u64)) + .saturating_add(T::DbWeight::get().writes(12_u64)) + .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(s.into()))) + .saturating_add(Weight::from_parts(0, 4).saturating_mul(s.into())) } // Storage: Staking UnappliedSlashes (r:1 w:1) + // Proof Skipped: Staking UnappliedSlashes (max_values: None, max_size: None, mode: Measured) + /// The range of component `s` is `[1, 1000]`. fn cancel_deferred_slash(s: u32, ) -> Weight { - (1_170_952_000 as Weight) - // Standard Error: 71_000 - .saturating_add((6_332_000 as Weight).saturating_mul(s as Weight)) - .saturating_add(T::DbWeight::get().reads(1 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + // Proof Size summary in bytes: + // Measured: `66558` + // Estimated: `70023` + // Minimum execution time: 112_961 nanoseconds. + Weight::from_parts(884_448_135, 0u64) + .saturating_add(Weight::from_parts(0, 70023)) + // Standard Error: 55_936 + .saturating_add(Weight::from_parts(4_732_729, 0u64).saturating_mul(s.into())) + .saturating_add(T::DbWeight::get().reads(1_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) } // Storage: Staking CurrentEra (r:1 w:0) - // Storage: Staking HistoryDepth (r:1 w:0) + // Proof: Staking CurrentEra (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) // Storage: Staking ErasValidatorReward (r:1 w:0) - // Storage: Staking Bonded (r:2 w:0) + // Proof: Staking ErasValidatorReward (max_values: None, max_size: Some(28), added: 2503, mode: MaxEncodedLen) + // Storage: Staking Bonded (r:257 w:0) + // Proof: Staking Bonded (max_values: None, max_size: Some(72), added: 2547, mode: MaxEncodedLen) // Storage: Staking Ledger (r:1 w:1) + // Proof: Staking Ledger (max_values: None, max_size: Some(1235), added: 3710, mode: MaxEncodedLen) // Storage: Staking ErasStakersClipped (r:1 w:0) + // Proof Skipped: Staking ErasStakersClipped (max_values: None, max_size: None, mode: Measured) // Storage: Staking ErasRewardPoints (r:1 w:0) + // Proof Skipped: Staking ErasRewardPoints (max_values: None, max_size: None, mode: Measured) // Storage: Staking ErasValidatorPrefs (r:1 w:0) - // Storage: Staking Payee (r:2 w:0) - // Storage: System Account (r:2 w:2) + // Proof: Staking ErasValidatorPrefs (max_values: None, max_size: Some(57), added: 2532, mode: MaxEncodedLen) + // Storage: Staking Payee (r:257 w:0) + // Proof: Staking Payee (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) + // Storage: System Account (r:257 w:257) + // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + /// The range of component `n` is `[0, 256]`. fn payout_stakers_dead_controller(n: u32, ) -> Weight { - (168_060_000 as Weight) - // Standard Error: 60_000 - .saturating_add((96_923_000 as Weight).saturating_mul(n as Weight)) - .saturating_add(T::DbWeight::get().reads(10 as Weight)) - .saturating_add(T::DbWeight::get().reads((3 as Weight).saturating_mul(n as Weight))) - .saturating_add(T::DbWeight::get().writes(2 as Weight)) - .saturating_add(T::DbWeight::get().writes((1 as Weight).saturating_mul(n as Weight))) + // Proof Size summary in bytes: + // Measured: `20459 + n * (140 ±0)` + // Estimated: `63972 + n * (8020 ±1)` + // Minimum execution time: 109_350 nanoseconds. + Weight::from_parts(79_995_136, 0u64) + .saturating_add(Weight::from_parts(0, 63972)) + // Standard Error: 81_986 + .saturating_add(Weight::from_parts(33_399_350, 0u64).saturating_mul(n.into())) + .saturating_add(T::DbWeight::get().reads(9_u64)) + .saturating_add(T::DbWeight::get().reads((3_u64).saturating_mul(n.into()))) + .saturating_add(T::DbWeight::get().writes(2_u64)) + .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(n.into()))) + .saturating_add(Weight::from_parts(0, 8020).saturating_mul(n.into())) } // Storage: Staking CurrentEra (r:1 w:0) - // Storage: Staking HistoryDepth (r:1 w:0) + // Proof: Staking CurrentEra (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) // Storage: Staking ErasValidatorReward (r:1 w:0) - // Storage: Staking Bonded (r:2 w:0) - // Storage: Staking Ledger (r:2 w:2) + // Proof: Staking ErasValidatorReward (max_values: None, max_size: Some(28), added: 2503, mode: MaxEncodedLen) + // Storage: Staking Bonded (r:257 w:0) + // Proof: Staking Bonded (max_values: None, max_size: Some(72), added: 2547, mode: MaxEncodedLen) + // Storage: Staking Ledger (r:257 w:257) + // Proof: Staking Ledger (max_values: None, max_size: Some(1235), added: 3710, mode: MaxEncodedLen) // Storage: Staking ErasStakersClipped (r:1 w:0) + // Proof Skipped: Staking ErasStakersClipped (max_values: None, max_size: None, mode: Measured) // Storage: Staking ErasRewardPoints (r:1 w:0) + // Proof Skipped: Staking ErasRewardPoints (max_values: None, max_size: None, mode: Measured) // Storage: Staking ErasValidatorPrefs (r:1 w:0) - // Storage: Staking Payee (r:2 w:0) - // Storage: System Account (r:2 w:2) - // Storage: Balances Locks (r:2 w:2) + // Proof: Staking ErasValidatorPrefs (max_values: None, max_size: Some(57), added: 2532, mode: MaxEncodedLen) + // Storage: Staking Payee (r:257 w:0) + // Proof: Staking Payee (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) + // Storage: System Account (r:257 w:257) + // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + // Storage: Balances Locks (r:257 w:257) + // Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) + /// The range of component `n` is `[0, 256]`. fn payout_stakers_alive_staked(n: u32, ) -> Weight { - (252_418_000 as Weight) - // Standard Error: 76_000 - .saturating_add((125_054_000 as Weight).saturating_mul(n as Weight)) - .saturating_add(T::DbWeight::get().reads(11 as Weight)) - .saturating_add(T::DbWeight::get().reads((5 as Weight).saturating_mul(n as Weight))) - .saturating_add(T::DbWeight::get().writes(3 as Weight)) - .saturating_add(T::DbWeight::get().writes((3 as Weight).saturating_mul(n as Weight))) + // Proof Size summary in bytes: + // Measured: `35362 + n * (392 ±0)` + // Estimated: `94078 + n * (16024 ±3)` + // Minimum execution time: 135_211 nanoseconds. + Weight::from_parts(159_494_766, 0u64) + .saturating_add(Weight::from_parts(0, 94078)) + // Standard Error: 54_916 + .saturating_add(Weight::from_parts(44_977_025, 0u64).saturating_mul(n.into())) + .saturating_add(T::DbWeight::get().reads(10_u64)) + .saturating_add(T::DbWeight::get().reads((5_u64).saturating_mul(n.into()))) + .saturating_add(T::DbWeight::get().writes(3_u64)) + .saturating_add(T::DbWeight::get().writes((3_u64).saturating_mul(n.into()))) + .saturating_add(Weight::from_parts(0, 16024).saturating_mul(n.into())) } // Storage: Staking Ledger (r:1 w:1) + // Proof: Staking Ledger (max_values: None, max_size: Some(1235), added: 3710, mode: MaxEncodedLen) // Storage: Balances Locks (r:1 w:1) + // Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) // Storage: System Account (r:1 w:1) - // Storage: BagsList ListNodes (r:3 w:3) + // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + // Storage: VoterList ListNodes (r:3 w:3) + // Proof: VoterList ListNodes (max_values: None, max_size: Some(154), added: 2629, mode: MaxEncodedLen) // Storage: Staking Bonded (r:1 w:0) - // Storage: BagsList ListBags (r:2 w:2) + // Proof: Staking Bonded (max_values: None, max_size: Some(72), added: 2547, mode: MaxEncodedLen) + // Storage: VoterList ListBags (r:2 w:2) + // Proof: VoterList ListBags (max_values: None, max_size: Some(82), added: 2557, mode: MaxEncodedLen) + /// The range of component `l` is `[1, 32]`. fn rebond(l: u32, ) -> Weight { - (214_471_000 as Weight) - // Standard Error: 15_000 - .saturating_add((104_000 as Weight).saturating_mul(l as Weight)) - .saturating_add(T::DbWeight::get().reads(9 as Weight)) - .saturating_add(T::DbWeight::get().writes(8 as Weight)) - } - // Storage: Staking CurrentEra (r:1 w:0) - // Storage: Staking HistoryDepth (r:1 w:1) - // Storage: Staking ErasStakersClipped (r:0 w:2) - // Storage: Staking ErasValidatorPrefs (r:0 w:2) - // Storage: Staking ErasValidatorReward (r:0 w:1) - // Storage: Staking ErasRewardPoints (r:0 w:1) - // Storage: Staking ErasStakers (r:0 w:2) - // Storage: Staking ErasTotalStake (r:0 w:1) - // Storage: Staking ErasStartSessionIndex (r:0 w:1) - fn set_history_depth(e: u32, ) -> Weight { - (0 as Weight) - // Standard Error: 172_000 - .saturating_add((76_377_000 as Weight).saturating_mul(e as Weight)) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) - .saturating_add(T::DbWeight::get().writes(4 as Weight)) - .saturating_add(T::DbWeight::get().writes((7 as Weight).saturating_mul(e as Weight))) + // Proof Size summary in bytes: + // Measured: `2013 + l * (8 ±0)` + // Estimated: `31575` + // Minimum execution time: 97_616 nanoseconds. + Weight::from_parts(100_800_718, 0u64) + .saturating_add(Weight::from_parts(0, 31575)) + // Standard Error: 4_128 + .saturating_add(Weight::from_parts(74_428, 0u64).saturating_mul(l.into())) + .saturating_add(T::DbWeight::get().reads(9_u64)) + .saturating_add(T::DbWeight::get().writes(8_u64)) } // Storage: System Account (r:1 w:1) + // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) // Storage: Staking Bonded (r:1 w:1) + // Proof: Staking Bonded (max_values: None, max_size: Some(72), added: 2547, mode: MaxEncodedLen) // Storage: Staking Ledger (r:1 w:1) + // Proof: Staking Ledger (max_values: None, max_size: Some(1235), added: 3710, mode: MaxEncodedLen) // Storage: Staking SlashingSpans (r:1 w:1) + // Proof Skipped: Staking SlashingSpans (max_values: None, max_size: None, mode: Measured) // Storage: Staking Validators (r:1 w:0) + // Proof: Staking Validators (max_values: None, max_size: Some(45), added: 2520, mode: MaxEncodedLen) // Storage: Staking Nominators (r:1 w:1) + // Proof: Staking Nominators (max_values: None, max_size: Some(558), added: 3033, mode: MaxEncodedLen) // Storage: Staking CounterForNominators (r:1 w:1) - // Storage: BagsList ListNodes (r:2 w:2) - // Storage: BagsList ListBags (r:1 w:1) - // Storage: BagsList CounterForListNodes (r:1 w:1) + // Proof: Staking CounterForNominators (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + // Storage: VoterList ListNodes (r:2 w:2) + // Proof: VoterList ListNodes (max_values: None, max_size: Some(154), added: 2629, mode: MaxEncodedLen) + // Storage: VoterList ListBags (r:1 w:1) + // Proof: VoterList ListBags (max_values: None, max_size: Some(82), added: 2557, mode: MaxEncodedLen) + // Storage: VoterList CounterForListNodes (r:1 w:1) + // Proof: VoterList CounterForListNodes (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) // Storage: Balances Locks (r:1 w:1) + // Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) // Storage: Staking Payee (r:0 w:1) - // Storage: Staking SpanSlash (r:0 w:1) + // Proof: Staking Payee (max_values: None, max_size: Some(73), added: 2548, mode: MaxEncodedLen) + // Storage: Staking SpanSlash (r:0 w:100) + // Proof: Staking SpanSlash (max_values: None, max_size: Some(76), added: 2551, mode: MaxEncodedLen) + /// The range of component `s` is `[1, 100]`. fn reap_stash(s: u32, ) -> Weight { - (202_216_000 as Weight) - // Standard Error: 4_000 - .saturating_add((3_894_000 as Weight).saturating_mul(s as Weight)) - .saturating_add(T::DbWeight::get().reads(12 as Weight)) - .saturating_add(T::DbWeight::get().writes(12 as Weight)) - .saturating_add(T::DbWeight::get().writes((1 as Weight).saturating_mul(s as Weight))) + // Proof Size summary in bytes: + // Measured: `2290 + s * (4 ±0)` + // Estimated: `42655 + s * (4 ±0)` + // Minimum execution time: 103_010 nanoseconds. + Weight::from_parts(107_424_481, 0u64) + .saturating_add(Weight::from_parts(0, 42655)) + // Standard Error: 3_320 + .saturating_add(Weight::from_parts(1_603_566, 0u64).saturating_mul(s.into())) + .saturating_add(T::DbWeight::get().reads(12_u64)) + .saturating_add(T::DbWeight::get().writes(12_u64)) + .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(s.into()))) + .saturating_add(Weight::from_parts(0, 4).saturating_mul(s.into())) } - // Storage: BagsList CounterForListNodes (r:1 w:0) - // Storage: Staking SlashingSpans (r:1 w:0) - // Storage: BagsList ListBags (r:200 w:0) - // Storage: BagsList ListNodes (r:101 w:0) - // Storage: Staking Nominators (r:101 w:0) - // Storage: Staking Validators (r:2 w:0) - // Storage: Staking Bonded (r:101 w:0) - // Storage: Staking Ledger (r:101 w:0) + // Storage: VoterList CounterForListNodes (r:1 w:0) + // Proof: VoterList CounterForListNodes (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + // Storage: VoterList ListBags (r:200 w:0) + // Proof: VoterList ListBags (max_values: None, max_size: Some(82), added: 2557, mode: MaxEncodedLen) + // Storage: VoterList ListNodes (r:110 w:0) + // Proof: VoterList ListNodes (max_values: None, max_size: Some(154), added: 2629, mode: MaxEncodedLen) + // Storage: Staking Nominators (r:110 w:0) + // Proof: Staking Nominators (max_values: None, max_size: Some(558), added: 3033, mode: MaxEncodedLen) + // Storage: Staking Validators (r:11 w:0) + // Proof: Staking Validators (max_values: None, max_size: Some(45), added: 2520, mode: MaxEncodedLen) + // Storage: Staking Bonded (r:110 w:0) + // Proof: Staking Bonded (max_values: None, max_size: Some(72), added: 2547, mode: MaxEncodedLen) + // Storage: Staking Ledger (r:110 w:0) + // Proof: Staking Ledger (max_values: None, max_size: Some(1235), added: 3710, mode: MaxEncodedLen) // Storage: Staking CounterForValidators (r:1 w:0) + // Proof: Staking CounterForValidators (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) // Storage: Staking ValidatorCount (r:1 w:0) + // Proof: Staking ValidatorCount (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) // Storage: Staking MinimumValidatorCount (r:1 w:0) + // Proof: Staking MinimumValidatorCount (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) // Storage: Staking CurrentEra (r:1 w:1) - // Storage: Staking HistoryDepth (r:1 w:0) - // Storage: Staking ErasStakersClipped (r:0 w:1) - // Storage: Staking ErasValidatorPrefs (r:0 w:1) - // Storage: Staking ErasStakers (r:0 w:1) + // Proof: Staking CurrentEra (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + // Storage: Staking ErasStakersClipped (r:0 w:10) + // Proof Skipped: Staking ErasStakersClipped (max_values: None, max_size: None, mode: Measured) + // Storage: Staking ErasValidatorPrefs (r:0 w:10) + // Proof: Staking ErasValidatorPrefs (max_values: None, max_size: Some(57), added: 2532, mode: MaxEncodedLen) + // Storage: Staking ErasStakers (r:0 w:10) + // Proof Skipped: Staking ErasStakers (max_values: None, max_size: None, mode: Measured) // Storage: Staking ErasTotalStake (r:0 w:1) + // Proof: Staking ErasTotalStake (max_values: None, max_size: Some(28), added: 2503, mode: MaxEncodedLen) // Storage: Staking ErasStartSessionIndex (r:0 w:1) + // Proof: Staking ErasStartSessionIndex (max_values: None, max_size: Some(16), added: 2491, mode: MaxEncodedLen) + // Storage: Staking MinimumActiveStake (r:0 w:1) + // Proof: Staking MinimumActiveStake (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) + /// The range of component `v` is `[1, 10]`. + /// The range of component `n` is `[0, 100]`. fn new_era(v: u32, n: u32, ) -> Weight { - (0 as Weight) - // Standard Error: 1_988_000 - .saturating_add((325_255_000 as Weight).saturating_mul(v as Weight)) - // Standard Error: 99_000 - .saturating_add((76_748_000 as Weight).saturating_mul(n as Weight)) - .saturating_add(T::DbWeight::get().reads(208 as Weight)) - .saturating_add(T::DbWeight::get().reads((5 as Weight).saturating_mul(v as Weight))) - .saturating_add(T::DbWeight::get().reads((4 as Weight).saturating_mul(n as Weight))) - .saturating_add(T::DbWeight::get().writes(3 as Weight)) - .saturating_add(T::DbWeight::get().writes((3 as Weight).saturating_mul(v as Weight))) + // Proof Size summary in bytes: + // Measured: `0 + v * (3592 ±0) + n * (714 ±0)` + // Estimated: `537149 + v * (16867 ±0) + n * (12899 ±0)` + // Minimum execution time: 658_043 nanoseconds. + Weight::from_parts(660_281_000, 0u64) + .saturating_add(Weight::from_parts(0, 537149)) + // Standard Error: 2_195_296 + .saturating_add(Weight::from_parts(70_196_586, 0u64).saturating_mul(v.into())) + // Standard Error: 218_749 + .saturating_add(Weight::from_parts(19_750_864, 0u64).saturating_mul(n.into())) + .saturating_add(T::DbWeight::get().reads(206_u64)) + .saturating_add(T::DbWeight::get().reads((5_u64).saturating_mul(v.into()))) + .saturating_add(T::DbWeight::get().reads((4_u64).saturating_mul(n.into()))) + .saturating_add(T::DbWeight::get().writes(4_u64)) + .saturating_add(T::DbWeight::get().writes((3_u64).saturating_mul(v.into()))) + .saturating_add(Weight::from_parts(0, 16867).saturating_mul(v.into())) + .saturating_add(Weight::from_parts(0, 12899).saturating_mul(n.into())) } - // Storage: BagsList CounterForListNodes (r:1 w:0) - // Storage: Staking SlashingSpans (r:21 w:0) - // Storage: BagsList ListBags (r:200 w:0) - // Storage: BagsList ListNodes (r:1200 w:0) - // Storage: Staking Nominators (r:1200 w:0) - // Storage: Staking Validators (r:200 w:0) - // Storage: Staking Bonded (r:1200 w:0) - // Storage: Staking Ledger (r:1200 w:0) - fn get_npos_voters(v: u32, n: u32, s: u32, ) -> Weight { - (129_872_588_000 as Weight) - // Standard Error: 1_995_000 - .saturating_add((12_970_000 as Weight).saturating_mul(n as Weight)) - .saturating_add(T::DbWeight::get().reads(202 as Weight)) - .saturating_add(T::DbWeight::get().reads((5 as Weight).saturating_mul(v as Weight))) - .saturating_add(T::DbWeight::get().reads((4 as Weight).saturating_mul(n as Weight))) - .saturating_add(T::DbWeight::get().reads((1 as Weight).saturating_mul(s as Weight))) + // Storage: VoterList CounterForListNodes (r:1 w:0) + // Proof: VoterList CounterForListNodes (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + // Storage: VoterList ListBags (r:200 w:0) + // Proof: VoterList ListBags (max_values: None, max_size: Some(82), added: 2557, mode: MaxEncodedLen) + // Storage: VoterList ListNodes (r:1400 w:0) + // Proof: VoterList ListNodes (max_values: None, max_size: Some(154), added: 2629, mode: MaxEncodedLen) + // Storage: Staking Nominators (r:1400 w:0) + // Proof: Staking Nominators (max_values: None, max_size: Some(558), added: 3033, mode: MaxEncodedLen) + // Storage: Staking Validators (r:400 w:0) + // Proof: Staking Validators (max_values: None, max_size: Some(45), added: 2520, mode: MaxEncodedLen) + // Storage: Staking Bonded (r:1400 w:0) + // Proof: Staking Bonded (max_values: None, max_size: Some(72), added: 2547, mode: MaxEncodedLen) + // Storage: Staking Ledger (r:1400 w:0) + // Proof: Staking Ledger (max_values: None, max_size: Some(1235), added: 3710, mode: MaxEncodedLen) + // Storage: Staking MinimumActiveStake (r:0 w:1) + // Proof: Staking MinimumActiveStake (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) + /// The range of component `v` is `[200, 400]`. + /// The range of component `n` is `[500, 1000]`. + fn get_npos_voters(v: u32, n: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `2951 + v * (389 ±0) + n * (905 ±0)` + // Estimated: `518829 + v * (14439 ±0) + n * (11919 ±0)` + // Minimum execution time: 21_002_921 nanoseconds. + Weight::from_parts(21_184_855_000, 0u64) + .saturating_add(Weight::from_parts(0, 518829)) + // Standard Error: 233_613 + .saturating_add(Weight::from_parts(13_363_337, 0u64).saturating_mul(n.into())) + .saturating_add(T::DbWeight::get().reads(201_u64)) + .saturating_add(T::DbWeight::get().reads((5_u64).saturating_mul(v.into()))) + .saturating_add(T::DbWeight::get().reads((4_u64).saturating_mul(n.into()))) + .saturating_add(T::DbWeight::get().writes(1_u64)) + .saturating_add(Weight::from_parts(0, 14439).saturating_mul(v.into())) + .saturating_add(Weight::from_parts(0, 11919).saturating_mul(n.into())) } - // Storage: Staking Validators (r:201 w:0) + // Storage: Staking CounterForValidators (r:1 w:0) + // Proof: Staking CounterForValidators (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + // Storage: Staking Validators (r:401 w:0) + // Proof: Staking Validators (max_values: None, max_size: Some(45), added: 2520, mode: MaxEncodedLen) + /// The range of component `v` is `[200, 400]`. fn get_npos_targets(v: u32, ) -> Weight { - (0 as Weight) - // Standard Error: 39_000 - .saturating_add((11_520_000 as Weight).saturating_mul(v as Weight)) - .saturating_add(T::DbWeight::get().reads(1 as Weight)) - .saturating_add(T::DbWeight::get().reads((1 as Weight).saturating_mul(v as Weight))) + // Proof Size summary in bytes: + // Measured: `512 + v * (50 ±0)` + // Estimated: `4999 + v * (2520 ±0)` + // Minimum execution time: 1_103_555 nanoseconds. + Weight::from_parts(52_053_306, 0u64) + .saturating_add(Weight::from_parts(0, 4999)) + // Standard Error: 19_191 + .saturating_add(Weight::from_parts(5_380_903, 0u64).saturating_mul(v.into())) + .saturating_add(T::DbWeight::get().reads(2_u64)) + .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(v.into()))) + .saturating_add(Weight::from_parts(0, 2520).saturating_mul(v.into())) } // Storage: Staking MinCommission (r:0 w:1) + // Proof: Staking MinCommission (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) // Storage: Staking MinValidatorBond (r:0 w:1) + // Proof: Staking MinValidatorBond (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) // Storage: Staking MaxValidatorsCount (r:0 w:1) + // Proof: Staking MaxValidatorsCount (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) // Storage: Staking ChillThreshold (r:0 w:1) + // Proof: Staking ChillThreshold (max_values: Some(1), max_size: Some(1), added: 496, mode: MaxEncodedLen) // Storage: Staking MaxNominatorsCount (r:0 w:1) + // Proof: Staking MaxNominatorsCount (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) // Storage: Staking MinNominatorBond (r:0 w:1) + // Proof: Staking MinNominatorBond (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) fn set_staking_configs_all_set() -> Weight { - (5_230_000 as Weight) - .saturating_add(T::DbWeight::get().writes(6 as Weight)) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 7_819 nanoseconds. + Weight::from_parts(8_234_000, 0u64) + .saturating_add(Weight::from_parts(0, 0)) + .saturating_add(T::DbWeight::get().writes(6_u64)) } // Storage: Staking MinCommission (r:0 w:1) + // Proof: Staking MinCommission (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) // Storage: Staking MinValidatorBond (r:0 w:1) + // Proof: Staking MinValidatorBond (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) // Storage: Staking MaxValidatorsCount (r:0 w:1) + // Proof: Staking MaxValidatorsCount (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) // Storage: Staking ChillThreshold (r:0 w:1) + // Proof: Staking ChillThreshold (max_values: Some(1), max_size: Some(1), added: 496, mode: MaxEncodedLen) // Storage: Staking MaxNominatorsCount (r:0 w:1) + // Proof: Staking MaxNominatorsCount (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) // Storage: Staking MinNominatorBond (r:0 w:1) + // Proof: Staking MinNominatorBond (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) fn set_staking_configs_all_remove() -> Weight { - (4_840_000 as Weight) - .saturating_add(T::DbWeight::get().writes(6 as Weight)) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 7_185 nanoseconds. + Weight::from_parts(7_520_000, 0u64) + .saturating_add(Weight::from_parts(0, 0)) + .saturating_add(T::DbWeight::get().writes(6_u64)) } // Storage: Staking Ledger (r:1 w:0) + // Proof: Staking Ledger (max_values: None, max_size: Some(1235), added: 3710, mode: MaxEncodedLen) // Storage: Staking Nominators (r:1 w:1) + // Proof: Staking Nominators (max_values: None, max_size: Some(558), added: 3033, mode: MaxEncodedLen) // Storage: Staking ChillThreshold (r:1 w:0) + // Proof: Staking ChillThreshold (max_values: Some(1), max_size: Some(1), added: 496, mode: MaxEncodedLen) // Storage: Staking MaxNominatorsCount (r:1 w:0) + // Proof: Staking MaxNominatorsCount (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) // Storage: Staking CounterForNominators (r:1 w:1) + // Proof: Staking CounterForNominators (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) // Storage: Staking MinNominatorBond (r:1 w:0) + // Proof: Staking MinNominatorBond (max_values: Some(1), max_size: Some(16), added: 511, mode: MaxEncodedLen) // Storage: Staking Validators (r:1 w:0) - // Storage: BagsList ListNodes (r:2 w:2) - // Storage: BagsList ListBags (r:1 w:1) - // Storage: BagsList CounterForListNodes (r:1 w:1) + // Proof: Staking Validators (max_values: None, max_size: Some(45), added: 2520, mode: MaxEncodedLen) + // Storage: VoterList ListNodes (r:2 w:2) + // Proof: VoterList ListNodes (max_values: None, max_size: Some(154), added: 2629, mode: MaxEncodedLen) + // Storage: VoterList ListBags (r:1 w:1) + // Proof: VoterList ListBags (max_values: None, max_size: Some(82), added: 2557, mode: MaxEncodedLen) + // Storage: VoterList CounterForListNodes (r:1 w:1) + // Proof: VoterList CounterForListNodes (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) fn chill_other() -> Weight { - (84_620_000 as Weight) - .saturating_add(T::DbWeight::get().reads(11 as Weight)) - .saturating_add(T::DbWeight::get().writes(6 as Weight)) + // Proof Size summary in bytes: + // Measured: `1785` + // Estimated: `29482` + // Minimum execution time: 83_769 nanoseconds. + Weight::from_parts(86_442_000, 0u64) + .saturating_add(Weight::from_parts(0, 29482)) + .saturating_add(T::DbWeight::get().reads(11_u64)) + .saturating_add(T::DbWeight::get().writes(6_u64)) } // Storage: Staking MinCommission (r:1 w:0) + // Proof: Staking MinCommission (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) // Storage: Staking Validators (r:1 w:1) + // Proof: Staking Validators (max_values: None, max_size: Some(45), added: 2520, mode: MaxEncodedLen) fn force_apply_min_commission() -> Weight { - (12_960_000 as Weight) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + // Proof Size summary in bytes: + // Measured: `613` + // Estimated: `4999` + // Minimum execution time: 15_270 nanoseconds. + Weight::from_parts(15_757_000, 0u64) + .saturating_add(Weight::from_parts(0, 4999)) + .saturating_add(T::DbWeight::get().reads(2_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) + } + // Storage: Staking MinCommission (r:0 w:1) + // Proof: Staking MinCommission (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen) + fn set_min_commission() -> Weight { + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 3_328 nanoseconds. + Weight::from_parts(3_502_000, 0u64) + .saturating_add(Weight::from_parts(0, 0)) + .saturating_add(T::DbWeight::get().writes(1_u64)) } } diff --git a/runtime/src/weights/pallet_timestamp.rs b/runtime/src/weights/pallet_timestamp.rs index 9d3a4d4338..e51b359a9f 100644 --- a/runtime/src/weights/pallet_timestamp.rs +++ b/runtime/src/weights/pallet_timestamp.rs @@ -18,22 +18,21 @@ //! Autogenerated weights for pallet_timestamp //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-10-20, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("dev"), DB CACHE: 1024 +//! DATE: 2023-11-06, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("prod-test"), DB CACHE: 1024 // Executed Command: -// ./../target/release/joystream-node +// ./scripts/../target/release/joystream-node // benchmark // pallet -// --base-path=/mnt/disks/local-ssd/ // --pallet=pallet_timestamp // --extrinsic=* -// --chain=dev +// --chain=prod-test // --steps=50 // --repeat=20 // --execution=wasm -// --template=./../devops/frame-weight-template.hbs -// --output=./../runtime/src/weights/pallet_timestamp.rs +// --template=./scripts/../devops/frame-weight-template.hbs +// --output=./scripts/../runtime/src/weights/pallet_timestamp.rs #![cfg_attr(rustfmt, rustfmt_skip)] #![allow(unused_parens)] @@ -49,13 +48,25 @@ pub use pallet_timestamp::weights::WeightInfo; pub struct SubstrateWeight(PhantomData); impl WeightInfo for SubstrateWeight { // Storage: Timestamp Now (r:1 w:1) + // Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) // Storage: Babe CurrentSlot (r:1 w:0) + // Proof: Babe CurrentSlot (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) fn set() -> Weight { - (8_930_000 as Weight) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + // Proof Size summary in bytes: + // Measured: `249` + // Estimated: `2986` + // Minimum execution time: 12_154 nanoseconds. + Weight::from_parts(12_574_000, 0u64) + .saturating_add(Weight::from_parts(0, 2986)) + .saturating_add(T::DbWeight::get().reads(2_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) } fn on_finalize() -> Weight { - (3_890_000 as Weight) + // Proof Size summary in bytes: + // Measured: `94` + // Estimated: `0` + // Minimum execution time: 5_309 nanoseconds. + Weight::from_parts(5_530_000, 0u64) + .saturating_add(Weight::from_parts(0, 0)) } } diff --git a/runtime/src/weights/pallet_vesting.rs b/runtime/src/weights/pallet_vesting.rs index 3ae2ec3c3e..0258a6383c 100644 --- a/runtime/src/weights/pallet_vesting.rs +++ b/runtime/src/weights/pallet_vesting.rs @@ -18,22 +18,21 @@ //! Autogenerated weights for pallet_vesting //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-10-20, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("dev"), DB CACHE: 1024 +//! DATE: 2023-11-06, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("prod-test"), DB CACHE: 1024 // Executed Command: -// ./../target/release/joystream-node +// ./scripts/../target/release/joystream-node // benchmark // pallet -// --base-path=/mnt/disks/local-ssd/ // --pallet=pallet_vesting // --extrinsic=* -// --chain=dev +// --chain=prod-test // --steps=50 // --repeat=20 // --execution=wasm -// --template=./../devops/frame-weight-template.hbs -// --output=./../runtime/src/weights/pallet_vesting.rs +// --template=./scripts/../devops/frame-weight-template.hbs +// --output=./scripts/../runtime/src/weights/pallet_vesting.rs #![cfg_attr(rustfmt, rustfmt_skip)] #![allow(unused_parens)] @@ -49,97 +48,175 @@ pub use pallet_vesting::weights::WeightInfo; pub struct SubstrateWeight(PhantomData); impl WeightInfo for SubstrateWeight { // Storage: Vesting Vesting (r:1 w:1) + // Proof: Vesting Vesting (max_values: None, max_size: Some(1057), added: 3532, mode: MaxEncodedLen) // Storage: Balances Locks (r:1 w:1) + // Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) + /// The range of component `l` is `[0, 49]`. + /// The range of component `s` is `[1, 28]`. fn vest_locked(l: u32, s: u32, ) -> Weight { - (41_327_000 as Weight) - // Standard Error: 1_000 - .saturating_add((86_000 as Weight).saturating_mul(l as Weight)) - // Standard Error: 4_000 - .saturating_add((87_000 as Weight).saturating_mul(s as Weight)) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) - .saturating_add(T::DbWeight::get().writes(2 as Weight)) + // Proof Size summary in bytes: + // Measured: `277 + l * (25 ±0) + s * (36 ±0)` + // Estimated: `9286` + // Minimum execution time: 33_594 nanoseconds. + Weight::from_parts(32_345_629, 0u64) + .saturating_add(Weight::from_parts(0, 9286)) + // Standard Error: 1_683 + .saturating_add(Weight::from_parts(86_872, 0u64).saturating_mul(l.into())) + // Standard Error: 2_995 + .saturating_add(Weight::from_parts(93_231, 0u64).saturating_mul(s.into())) + .saturating_add(T::DbWeight::get().reads(2_u64)) + .saturating_add(T::DbWeight::get().writes(2_u64)) } // Storage: Vesting Vesting (r:1 w:1) + // Proof: Vesting Vesting (max_values: None, max_size: Some(1057), added: 3532, mode: MaxEncodedLen) // Storage: Balances Locks (r:1 w:1) + // Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) + /// The range of component `l` is `[0, 49]`. + /// The range of component `s` is `[1, 28]`. fn vest_unlocked(l: u32, s: u32, ) -> Weight { - (40_576_000 as Weight) - // Standard Error: 1_000 - .saturating_add((74_000 as Weight).saturating_mul(l as Weight)) - // Standard Error: 3_000 - .saturating_add((74_000 as Weight).saturating_mul(s as Weight)) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) - .saturating_add(T::DbWeight::get().writes(2 as Weight)) + // Proof Size summary in bytes: + // Measured: `277 + l * (25 ±0) + s * (36 ±0)` + // Estimated: `9286` + // Minimum execution time: 32_698 nanoseconds. + Weight::from_parts(32_743_015, 0u64) + .saturating_add(Weight::from_parts(0, 9286)) + // Standard Error: 1_416 + .saturating_add(Weight::from_parts(75_162, 0u64).saturating_mul(l.into())) + // Standard Error: 2_519 + .saturating_add(Weight::from_parts(41_032, 0u64).saturating_mul(s.into())) + .saturating_add(T::DbWeight::get().reads(2_u64)) + .saturating_add(T::DbWeight::get().writes(2_u64)) } // Storage: Vesting Vesting (r:1 w:1) + // Proof: Vesting Vesting (max_values: None, max_size: Some(1057), added: 3532, mode: MaxEncodedLen) // Storage: Balances Locks (r:1 w:1) + // Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) // Storage: System Account (r:1 w:1) + // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + /// The range of component `l` is `[0, 49]`. + /// The range of component `s` is `[1, 28]`. fn vest_other_locked(l: u32, s: u32, ) -> Weight { - (39_740_000 as Weight) - // Standard Error: 1_000 - .saturating_add((90_000 as Weight).saturating_mul(l as Weight)) - // Standard Error: 3_000 - .saturating_add((126_000 as Weight).saturating_mul(s as Weight)) - .saturating_add(T::DbWeight::get().reads(3 as Weight)) - .saturating_add(T::DbWeight::get().writes(3 as Weight)) + // Proof Size summary in bytes: + // Measured: `417 + l * (25 ±0) + s * (36 ±0)` + // Estimated: `12879` + // Minimum execution time: 37_388 nanoseconds. + Weight::from_parts(36_697_224, 0u64) + .saturating_add(Weight::from_parts(0, 12879)) + // Standard Error: 1_843 + .saturating_add(Weight::from_parts(79_577, 0u64).saturating_mul(l.into())) + // Standard Error: 3_279 + .saturating_add(Weight::from_parts(85_469, 0u64).saturating_mul(s.into())) + .saturating_add(T::DbWeight::get().reads(3_u64)) + .saturating_add(T::DbWeight::get().writes(3_u64)) } // Storage: Vesting Vesting (r:1 w:1) + // Proof: Vesting Vesting (max_values: None, max_size: Some(1057), added: 3532, mode: MaxEncodedLen) // Storage: Balances Locks (r:1 w:1) + // Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) // Storage: System Account (r:1 w:1) + // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + /// The range of component `l` is `[0, 49]`. + /// The range of component `s` is `[1, 28]`. fn vest_other_unlocked(l: u32, s: u32, ) -> Weight { - (40_335_000 as Weight) - // Standard Error: 1_000 - .saturating_add((72_000 as Weight).saturating_mul(l as Weight)) - // Standard Error: 3_000 - .saturating_add((71_000 as Weight).saturating_mul(s as Weight)) - .saturating_add(T::DbWeight::get().reads(3 as Weight)) - .saturating_add(T::DbWeight::get().writes(3 as Weight)) + // Proof Size summary in bytes: + // Measured: `417 + l * (25 ±0) + s * (36 ±0)` + // Estimated: `12879` + // Minimum execution time: 36_290 nanoseconds. + Weight::from_parts(36_336_632, 0u64) + .saturating_add(Weight::from_parts(0, 12879)) + // Standard Error: 1_557 + .saturating_add(Weight::from_parts(75_609, 0u64).saturating_mul(l.into())) + // Standard Error: 2_771 + .saturating_add(Weight::from_parts(47_094, 0u64).saturating_mul(s.into())) + .saturating_add(T::DbWeight::get().reads(3_u64)) + .saturating_add(T::DbWeight::get().writes(3_u64)) } // Storage: Vesting Vesting (r:1 w:1) + // Proof: Vesting Vesting (max_values: None, max_size: Some(1057), added: 3532, mode: MaxEncodedLen) // Storage: System Account (r:1 w:1) + // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) // Storage: Balances Locks (r:1 w:1) + // Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) + /// The range of component `l` is `[0, 49]`. + /// The range of component `s` is `[0, 27]`. fn vested_transfer(l: u32, s: u32, ) -> Weight { - (66_416_000 as Weight) - // Standard Error: 3_000 - .saturating_add((76_000 as Weight).saturating_mul(l as Weight)) - // Standard Error: 6_000 - .saturating_add((67_000 as Weight).saturating_mul(s as Weight)) - .saturating_add(T::DbWeight::get().reads(3 as Weight)) - .saturating_add(T::DbWeight::get().writes(3 as Weight)) + // Proof Size summary in bytes: + // Measured: `451 + l * (25 ±0) + s * (36 ±0)` + // Estimated: `12879` + // Minimum execution time: 55_525 nanoseconds. + Weight::from_parts(56_750_470, 0u64) + .saturating_add(Weight::from_parts(0, 12879)) + // Standard Error: 3_339 + .saturating_add(Weight::from_parts(78_481, 0u64).saturating_mul(l.into())) + // Standard Error: 5_940 + .saturating_add(Weight::from_parts(31_594, 0u64).saturating_mul(s.into())) + .saturating_add(T::DbWeight::get().reads(3_u64)) + .saturating_add(T::DbWeight::get().writes(3_u64)) } // Storage: Vesting Vesting (r:1 w:1) + // Proof: Vesting Vesting (max_values: None, max_size: Some(1057), added: 3532, mode: MaxEncodedLen) // Storage: System Account (r:2 w:2) + // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) // Storage: Balances Locks (r:1 w:1) + // Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) + /// The range of component `l` is `[0, 49]`. + /// The range of component `s` is `[0, 27]`. fn force_vested_transfer(l: u32, s: u32, ) -> Weight { - (66_612_000 as Weight) - // Standard Error: 3_000 - .saturating_add((85_000 as Weight).saturating_mul(l as Weight)) - // Standard Error: 7_000 - .saturating_add((55_000 as Weight).saturating_mul(s as Weight)) - .saturating_add(T::DbWeight::get().reads(4 as Weight)) - .saturating_add(T::DbWeight::get().writes(4 as Weight)) + // Proof Size summary in bytes: + // Measured: `591 + l * (25 ±0) + s * (36 ±0)` + // Estimated: `15482` + // Minimum execution time: 59_039 nanoseconds. + Weight::from_parts(60_423_948, 0u64) + .saturating_add(Weight::from_parts(0, 15482)) + // Standard Error: 2_852 + .saturating_add(Weight::from_parts(70_919, 0u64).saturating_mul(l.into())) + // Standard Error: 5_074 + .saturating_add(Weight::from_parts(40_965, 0u64).saturating_mul(s.into())) + .saturating_add(T::DbWeight::get().reads(4_u64)) + .saturating_add(T::DbWeight::get().writes(4_u64)) } // Storage: Vesting Vesting (r:1 w:1) + // Proof: Vesting Vesting (max_values: None, max_size: Some(1057), added: 3532, mode: MaxEncodedLen) // Storage: Balances Locks (r:1 w:1) + // Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) // Storage: System Account (r:1 w:1) + // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + /// The range of component `l` is `[0, 49]`. + /// The range of component `s` is `[2, 28]`. fn not_unlocking_merge_schedules(l: u32, s: u32, ) -> Weight { - (42_433_000 as Weight) - // Standard Error: 2_000 - .saturating_add((84_000 as Weight).saturating_mul(l as Weight)) - // Standard Error: 4_000 - .saturating_add((96_000 as Weight).saturating_mul(s as Weight)) - .saturating_add(T::DbWeight::get().reads(3 as Weight)) - .saturating_add(T::DbWeight::get().writes(3 as Weight)) + // Proof Size summary in bytes: + // Measured: `378 + l * (25 ±0) + s * (36 ±0)` + // Estimated: `12879` + // Minimum execution time: 37_170 nanoseconds. + Weight::from_parts(37_093_757, 0u64) + .saturating_add(Weight::from_parts(0, 12879)) + // Standard Error: 1_612 + .saturating_add(Weight::from_parts(83_984, 0u64).saturating_mul(l.into())) + // Standard Error: 2_977 + .saturating_add(Weight::from_parts(69_455, 0u64).saturating_mul(s.into())) + .saturating_add(T::DbWeight::get().reads(3_u64)) + .saturating_add(T::DbWeight::get().writes(3_u64)) } // Storage: Vesting Vesting (r:1 w:1) + // Proof: Vesting Vesting (max_values: None, max_size: Some(1057), added: 3532, mode: MaxEncodedLen) // Storage: Balances Locks (r:1 w:1) + // Proof: Balances Locks (max_values: None, max_size: Some(1299), added: 3774, mode: MaxEncodedLen) // Storage: System Account (r:1 w:1) + // Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) + /// The range of component `l` is `[0, 49]`. + /// The range of component `s` is `[2, 28]`. fn unlocking_merge_schedules(l: u32, s: u32, ) -> Weight { - (41_796_000 as Weight) - // Standard Error: 1_000 - .saturating_add((87_000 as Weight).saturating_mul(l as Weight)) - // Standard Error: 3_000 - .saturating_add((105_000 as Weight).saturating_mul(s as Weight)) - .saturating_add(T::DbWeight::get().reads(3 as Weight)) - .saturating_add(T::DbWeight::get().writes(3 as Weight)) + // Proof Size summary in bytes: + // Measured: `378 + l * (25 ±0) + s * (36 ±0)` + // Estimated: `12879` + // Minimum execution time: 38_230 nanoseconds. + Weight::from_parts(36_422_597, 0u64) + .saturating_add(Weight::from_parts(0, 12879)) + // Standard Error: 1_674 + .saturating_add(Weight::from_parts(94_406, 0u64).saturating_mul(l.into())) + // Standard Error: 3_091 + .saturating_add(Weight::from_parts(97_972, 0u64).saturating_mul(s.into())) + .saturating_add(T::DbWeight::get().reads(3_u64)) + .saturating_add(T::DbWeight::get().writes(3_u64)) } } diff --git a/runtime/src/weights/rocksdb_weights.rs b/runtime/src/weights/rocksdb_weights.rs index 8f277f4127..95899420ca 100644 --- a/runtime/src/weights/rocksdb_weights.rs +++ b/runtime/src/weights/rocksdb_weights.rs @@ -1,47 +1,29 @@ -// This file is part of Substrate. - -// Copyright (C) 2022 Parity Technologies (UK) Ltd. -// SPDX-License-Identifier: Apache-2.0 - -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-10-20 (Y/M/D) +//! DATE: 2023-11-06 (Y/M/D) +//! HOSTNAME: `ip-172-31-43-193`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` //! //! DATABASE: `RocksDb`, RUNTIME: `Development` //! BLOCK-NUM: `BlockId::Number(0)` //! SKIP-WRITE: `false`, SKIP-READ: `false`, WARMUPS: `100` -//! STATE-VERSION: `V1`, STATE-CACHE-SIZE: `0` -//! WEIGHT-PATH: `./../runtime/src/weights/` +//! STATE-VERSION: `V1`, STATE-CACHE-SIZE: `` +//! WEIGHT-PATH: `./scripts/../runtime/src/weights/` //! METRIC: `Average`, WEIGHT-MUL: `1.0`, WEIGHT-ADD: `0` // Executed Command: -// ./../target/release/joystream-node +// ./scripts/../target/release/joystream-node // benchmark // storage -// --base-path=/mnt/disks/local-ssd/ -// --chain=dev +// --chain=prod-test // --warmups=100 -// --weight-path=./../runtime/src/weights/ +// --weight-path=./scripts/../runtime/src/weights/ // --state-version // 1 /// Storage DB weights for the `Development` runtime and `RocksDb`. pub mod constants { - use frame_support::{ - parameter_types, - weights::{constants, RuntimeDbWeight}, - }; + use frame_support::weights::constants; + use sp_core::parameter_types; + use sp_weights::RuntimeDbWeight; parameter_types! { /// By default, Substrate uses `RocksDB`, so this will be the weight used throughout @@ -51,38 +33,38 @@ pub mod constants { /// Calculated by multiplying the *Average* of all values with `1.0` and adding `0`. /// /// Stats nanoseconds: - /// Min, Max: 3_780, 590_000 - /// Average: 8_997 - /// Median: 5_490 - /// Std-Dev: 43436.83 + /// Min, Max: 1_696, 336_369 + /// Average: 4_968 + /// Median: 2_991 + /// Std-Dev: 25574.72 /// /// Percentiles nanoseconds: - /// 99th: 8_780 - /// 95th: 7_570 - /// 75th: 6_340 - read: 8_997 * constants::WEIGHT_PER_NANOS, + /// 99th: 5_278 + /// 95th: 4_072 + /// 75th: 3_355 + read: 4_968 * constants::WEIGHT_REF_TIME_PER_NANOS, /// Time to write one storage item. /// Calculated by multiplying the *Average* of all values with `1.0` and adding `0`. /// /// Stats nanoseconds: - /// Min, Max: 11_740, 5_390_690 - /// Average: 54_966 - /// Median: 24_860 - /// Std-Dev: 398861.54 + /// Min, Max: 9_954, 7_566_780 + /// Average: 64_373 + /// Median: 19_318 + /// Std-Dev: 578848.27 /// /// Percentiles nanoseconds: - /// 99th: 46_410 - /// 95th: 36_880 - /// 75th: 29_580 - write: 54_966 * constants::WEIGHT_PER_NANOS, + /// 99th: 57_547 + /// 95th: 28_325 + /// 75th: 22_513 + write: 64_373 * constants::WEIGHT_REF_TIME_PER_NANOS, }; } #[cfg(test)] mod test_db_weights { use super::constants::RocksDbWeight as W; - use frame_support::weights::constants; + use sp_weights::constants; /// Checks that all weights exist and have sane values. // NOTE: If this test fails but you are sure that the generated values are fine, @@ -91,20 +73,20 @@ pub mod constants { fn bound() { // At least 1 µs. assert!( - W::get().reads(1) >= constants::WEIGHT_PER_MICROS, + W::get().reads(1).ref_time() >= constants::WEIGHT_REF_TIME_PER_MICROS, "Read weight should be at least 1 µs." ); assert!( - W::get().writes(1) >= constants::WEIGHT_PER_MICROS, + W::get().writes(1).ref_time() >= constants::WEIGHT_REF_TIME_PER_MICROS, "Write weight should be at least 1 µs." ); // At most 1 ms. assert!( - W::get().reads(1) <= constants::WEIGHT_PER_MILLIS, + W::get().reads(1).ref_time() <= constants::WEIGHT_REF_TIME_PER_MILLIS, "Read weight should be at most 1 ms." ); assert!( - W::get().writes(1) <= constants::WEIGHT_PER_MILLIS, + W::get().writes(1).ref_time() <= constants::WEIGHT_REF_TIME_PER_MILLIS, "Write weight should be at most 1 ms." ); } diff --git a/runtime/src/weights/substrate_utility.rs b/runtime/src/weights/substrate_utility.rs index 7bb78e2e44..b215cf394d 100644 --- a/runtime/src/weights/substrate_utility.rs +++ b/runtime/src/weights/substrate_utility.rs @@ -18,22 +18,21 @@ //! Autogenerated weights for substrate_utility //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-10-20, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("dev"), DB CACHE: 1024 +//! DATE: 2023-11-06, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("prod-test"), DB CACHE: 1024 // Executed Command: -// ./../target/release/joystream-node +// ./scripts/../target/release/joystream-node // benchmark // pallet -// --base-path=/mnt/disks/local-ssd/ // --pallet=substrate_utility // --extrinsic=* -// --chain=dev +// --chain=prod-test // --steps=50 // --repeat=20 // --execution=wasm -// --template=./../devops/frame-weight-template.hbs -// --output=./../runtime/src/weights/substrate_utility.rs +// --template=./scripts/../devops/frame-weight-template.hbs +// --output=./scripts/../runtime/src/weights/substrate_utility.rs #![cfg_attr(rustfmt, rustfmt_skip)] #![allow(unused_parens)] @@ -48,25 +47,53 @@ pub use substrate_utility::weights::WeightInfo; /// Weights for substrate_utility using the Substrate node and recommended hardware. pub struct SubstrateWeight(PhantomData); impl WeightInfo for SubstrateWeight { + /// The range of component `c` is `[0, 1000]`. fn batch(c: u32, ) -> Weight { - (18_478_000 as Weight) - // Standard Error: 1_000 - .saturating_add((4_361_000 as Weight).saturating_mul(c as Weight)) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 7_460 nanoseconds. + Weight::from_parts(14_226_467, 0u64) + .saturating_add(Weight::from_parts(0, 0)) + // Standard Error: 2_102 + .saturating_add(Weight::from_parts(5_120_344, 0u64).saturating_mul(c.into())) } fn as_derivative() -> Weight { - (2_280_000 as Weight) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 5_473 nanoseconds. + Weight::from_parts(5_823_000, 0u64) + .saturating_add(Weight::from_parts(0, 0)) } + /// The range of component `c` is `[0, 1000]`. fn batch_all(c: u32, ) -> Weight { - (21_448_000 as Weight) - // Standard Error: 1_000 - .saturating_add((4_642_000 as Weight).saturating_mul(c as Weight)) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 7_653 nanoseconds. + Weight::from_parts(7_273_584, 0u64) + .saturating_add(Weight::from_parts(0, 0)) + // Standard Error: 4_606 + .saturating_add(Weight::from_parts(5_357_894, 0u64).saturating_mul(c.into())) } fn dispatch_as() -> Weight { - (13_380_000 as Weight) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 9_847 nanoseconds. + Weight::from_parts(10_284_000, 0u64) + .saturating_add(Weight::from_parts(0, 0)) } + /// The range of component `c` is `[0, 1000]`. fn force_batch(c: u32, ) -> Weight { - (17_584_000 as Weight) - // Standard Error: 1_000 - .saturating_add((4_362_000 as Weight).saturating_mul(c as Weight)) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 7_518 nanoseconds. + Weight::from_parts(17_110_707, 0u64) + .saturating_add(Weight::from_parts(0, 0)) + // Standard Error: 1_927 + .saturating_add(Weight::from_parts(5_202_384, 0u64).saturating_mul(c.into())) } } diff --git a/scripts/cargo-build-with-benchmarking.sh b/scripts/cargo-build-with-benchmarking.sh index 4cf8d16d3d..84ee670867 100755 --- a/scripts/cargo-build-with-benchmarking.sh +++ b/scripts/cargo-build-with-benchmarking.sh @@ -1,9 +1,9 @@ #!/usr/bin/env bash set -e -SCRIPT_PATH="$(dirname "${BASH_SOURCE[0]}")" +SCRIPT_PATH=`dirname "${BASH_SOURCE[0]}"` cd $SCRIPT_PATH -export WASM_BUILD_TOOLCHAIN=nightly-2022-05-11 +export WASM_BUILD_TOOLCHAIN=nightly-2022-11-15 -cargo +nightly-2022-05-11 build --release --features runtime-benchmarks +cargo +nightly-2022-11-15 build --release --features runtime-benchmarks diff --git a/scripts/cargo-build.sh b/scripts/cargo-build.sh index fc6247e790..beb48b091d 100755 --- a/scripts/cargo-build.sh +++ b/scripts/cargo-build.sh @@ -1,11 +1,11 @@ #!/usr/bin/env bash set -e -SCRIPT_PATH="$(dirname "${BASH_SOURCE[0]}")" +SCRIPT_PATH=`dirname "${BASH_SOURCE[0]}"` cd $SCRIPT_PATH -source features.sh +FEATURES=`./features.sh` -export WASM_BUILD_TOOLCHAIN=nightly-2022-05-11 +export WASM_BUILD_TOOLCHAIN=nightly-2022-11-15 -cargo +nightly-2022-05-11 build --release --features "${FEATURES}" \ No newline at end of file +cargo +nightly-2022-11-15 build --release --locked --features "${FEATURES}" $* diff --git a/scripts/cargo-checks-with-benchmarking.sh b/scripts/cargo-checks-with-benchmarking.sh new file mode 100755 index 0000000000..572fd0211d --- /dev/null +++ b/scripts/cargo-checks-with-benchmarking.sh @@ -0,0 +1,16 @@ +#!/usr/bin/env bash +set -e + +SCRIPT_PATH=`dirname "${BASH_SOURCE[0]}"` +cd $SCRIPT_PATH + +echo 'running rust-fmt' +cargo fmt --all -- --check + +export WASM_BUILD_TOOLCHAIN=nightly-2022-11-15 + +echo 'running cargo clippy' +cargo "+$WASM_BUILD_TOOLCHAIN" clippy --release --all --features runtime-benchmarks -- -D warnings + +echo 'running all cargo tests' +cargo +nightly-2022-11-15 test --release --features runtime-benchmarks --all diff --git a/scripts/cargo-checks.sh b/scripts/cargo-checks.sh index 1380e67fec..9bcc58dc66 100755 --- a/scripts/cargo-checks.sh +++ b/scripts/cargo-checks.sh @@ -1,23 +1,22 @@ #!/usr/bin/env bash set -e -SCRIPT_PATH="$(dirname "${BASH_SOURCE[0]}")" +SCRIPT_PATH=`dirname "${BASH_SOURCE[0]}"` cd $SCRIPT_PATH echo 'running rust-fmt' cargo fmt --all -- --check -source ./features.sh +FEATURES=`./features.sh` -export WASM_BUILD_TOOLCHAIN=nightly-2022-05-11 +export WASM_BUILD_TOOLCHAIN=nightly-2022-11-15 -echo 'running clippy (rust linter)' # When custom build.rs triggers wasm-build-runner-impl to build we get error: # "Rust WASM toolchain not installed, please install it!" # So we skip building the WASM binary by setting BUILD_DUMMY_WASM_BINARY=1 # Aggressive linting echo 'running cargo clippy' -BUILD_DUMMY_WASM_BINARY=1 cargo "+$WASM_BUILD_TOOLCHAIN" clippy --release --all -- -D warnings +cargo "+$WASM_BUILD_TOOLCHAIN" clippy --release --all --features "${FEATURES}" $* -- -D warnings echo 'running cargo unit tests' -cargo "+$WASM_BUILD_TOOLCHAIN" test --release --all --features "${FEATURES}" \ No newline at end of file +cargo "+$WASM_BUILD_TOOLCHAIN" test --release --all --features "${FEATURES}" $* diff --git a/scripts/cargo-test-all.sh b/scripts/cargo-test-all.sh new file mode 100755 index 0000000000..2a386aaf56 --- /dev/null +++ b/scripts/cargo-test-all.sh @@ -0,0 +1,15 @@ +#!/usr/bin/env bash +set -e + +SCRIPT_PATH=`dirname "${BASH_SOURCE[0]}"` +cd $SCRIPT_PATH + +echo 'running rust-fmt' +cargo fmt --all -- --check + +FEATURES=`./features.sh` + +export WASM_BUILD_TOOLCHAIN=nightly-2022-11-15 + +echo 'running cargo unit tests' +cargo "+$WASM_BUILD_TOOLCHAIN" test --release --all --features "${FEATURES}" -- --ignored diff --git a/scripts/cargo-tests-with-networking.sh b/scripts/cargo-tests-with-networking.sh deleted file mode 100755 index 87ff2817d6..0000000000 --- a/scripts/cargo-tests-with-networking.sh +++ /dev/null @@ -1,12 +0,0 @@ -#!/usr/bin/env bash -set -e - -SCRIPT_PATH="$(dirname "${BASH_SOURCE[0]}")" -cd $SCRIPT_PATH - -source features.sh - -export WASM_BUILD_TOOLCHAIN=nightly-2022-05-11 - -echo 'running all cargo tests' -cargo +nightly-2022-05-11 test --release --features "${FEATURES}" --all -- --ignored diff --git a/scripts/compute-runtime-blob-hash.sh b/scripts/compute-runtime-blob-hash.sh index 198424719f..be47c1bfd1 100755 --- a/scripts/compute-runtime-blob-hash.sh +++ b/scripts/compute-runtime-blob-hash.sh @@ -1,10 +1,28 @@ #!/usr/bin/env bash +set -e # The script computes the b2sum of the wasm blob in a pre-built joystream/node image +# Specifically amd64 architecture image, as that is what we use as the "reference" images +# for deterministic builds. # Assumes b2sum is already instally on the host machine. -# Create a non running container from joystream/node -docker create --name temp-container-joystream-node joystream/node +SCRIPT_PATH=`$(dirname "${BASH_SOURCE[0]}")` +cd $SCRIPT_PATH + +CODE_SHASUM=`./runtime-code-shasum.sh` +IMAGE=joystream/node:${CODE_SHASUM} + +IMG_ARCH=`docker inspect ${IMAGE} --format='{{.Architecture}}'` + +if [ "$IMG_ARCH" != "amd64" ]; then + echo "You must fetch the amd64 architecture image with following command:" + echo "docker image rm ${IMAGE}" + echo "docker pull ${IMAGE} --platform amd64" + exit 1 +fi + +# Create a non running container from joystream/node using the amd64 +docker create --name temp-container-joystream-node ${IMAGE} --platform amd64 # Copy the compiled wasm blob from the docker container to our host docker cp temp-container-joystream-node:/joystream/runtime.compact.compressed.wasm joystream_runtime.wasm diff --git a/scripts/features.sh b/scripts/features.sh old mode 100644 new mode 100755 index ef153da8a3..1f65b5e0f2 --- a/scripts/features.sh +++ b/scripts/features.sh @@ -1,12 +1,31 @@ -FEATURES= +#!/usr/bin/env bash +set -e + if [[ "$RUNTIME_PROFILE" == "TESTING" ]]; then - FEATURES="testing-runtime" + echo "testing-runtime" + exit 0 fi if [[ "$RUNTIME_PROFILE" == "STAGING" ]]; then - FEATURES="staging-runtime" + echo "staging-runtime" + exit 0 fi if [[ "$RUNTIME_PROFILE" == "PLAYGROUND" ]]; then - FEATURES="playground-runtime" -fi \ No newline at end of file + echo "playground-runtime" + exit 0 +fi + +# Production runtime, no extra features needed +if [[ "$RUNTIME_PROFILE" == "" ]]; then + exit 0 +fi + +# Fast Production runtime +if [[ "$RUNTIME_PROFILE" == "FAST-PROD" ]]; then + echo "warp-time" + exit 0 +fi + +>&2 echo "Unrecognized RUNTIME_PROFILE ${RUNTIME_PROFILE}" +exit -1 \ No newline at end of file diff --git a/scripts/fetch-chain-metadata.sh b/scripts/fetch-chain-metadata.sh index f6860b62f3..081f7bd7b7 100755 --- a/scripts/fetch-chain-metadata.sh +++ b/scripts/fetch-chain-metadata.sh @@ -1,4 +1,4 @@ -curl\ +curl \ -H "Content-Type: application/json"\ -d '{"id":"1", "jsonrpc":"2.0", "method": "state_getMetadata", "params":[]}'\ http://localhost:9933 diff --git a/scripts/fetch-chain-spec-version.sh b/scripts/fetch-chain-spec-version.sh index 4cb79596ab..fa3eaea579 100755 --- a/scripts/fetch-chain-spec-version.sh +++ b/scripts/fetch-chain-spec-version.sh @@ -1,5 +1,3 @@ -SPEC_VERSION=$(curl -H "Content-Type: application/json" \ +curl -H "Content-Type: application/json" \ -s -d '{"id":"1", "jsonrpc":"2.0", "method": "state_getRuntimeVersion"}' \ - http://localhost:9933 | jq -r '.result.specVersion') - -echo $SPEC_VERSION + http://localhost:9933 | jq -r '.result.specVersion' diff --git a/scripts/generate-weights.sh b/scripts/generate-weights.sh index a74aa0b545..1188d1f0ac 100755 --- a/scripts/generate-weights.sh +++ b/scripts/generate-weights.sh @@ -2,7 +2,7 @@ # Executes and replaces all benchmarks with the new weights -SCRIPT_DIR=$(dirname "${BASH_SOURCE[0]}") +SCRIPT_DIR=`dirname "${BASH_SOURCE[0]}"` STEPS=${1:-50} REPEAT=${2:-20} @@ -116,7 +116,7 @@ substrate_pallet_benchmark pallet_vesting substrate_pallet_benchmark pallet_multisig substrate_pallet_benchmark pallet_bags_list substrate_pallet_benchmark pallet_election_provider_multi_phase -substrate_pallet_benchmark pallet_election_provider_support_benchmarking +# substrate_pallet_benchmark pallet_election_provider_support_benchmarking substrate_pallet_benchmark pallet_staking substrate_pallet_benchmark pallet_balances substrate_pallet_benchmark pallet_im_online diff --git a/scripts/run-dev-chain.sh b/scripts/run-dev-chain.sh index 74856f2804..be95abe58b 100755 --- a/scripts/run-dev-chain.sh +++ b/scripts/run-dev-chain.sh @@ -1,19 +1,19 @@ #!/usr/bin/env bash set -e -SCRIPT_PATH="$(dirname "${BASH_SOURCE[0]}")" +SCRIPT_PATH=`dirname "${BASH_SOURCE[0]}"` cd $SCRIPT_PATH -source features.sh +FEATURES=`./features.sh` -export WASM_BUILD_TOOLCHAIN=nightly-2022-05-11 +export WASM_BUILD_TOOLCHAIN=nightly-2022-11-15 # Build release binary -cargo +nightly-2022-05-11 build --release --features "${FEATURES}" +cargo +nightly-2022-11-15 build --release --features "${FEATURES}" # Purge existing local chain -yes | cargo +nightly-2022-05-11 run --release --features "${FEATURES}" -- purge-chain --dev +yes | cargo +nightly-2022-11-15 run --release --features "${FEATURES}" -- purge-chain --dev # Run local development chain - # No need to specify `-p joystream-node` it is the default bin crate in the cargo workspace -cargo +nightly-2022-05-11 run --release --features "${FEATURES}" -- --dev --log runtime +cargo +nightly-2022-11-15 run --release --features "${FEATURES}" -- --dev --log runtime diff --git a/scripts/runtime-code-shasum.sh b/scripts/runtime-code-shasum.sh index 4830864cac..9775b1ea53 100755 --- a/scripts/runtime-code-shasum.sh +++ b/scripts/runtime-code-shasum.sh @@ -1,9 +1,13 @@ #!/usr/bin/env bash +set -e # Compute a hash over files related to building joystream/node docker image # Assuming cargo workspace root is same as the git repo root -cd $(git rev-parse --show-toplevel) +cd `git rev-parse --show-toplevel` + +# Make sure a recognized RUNTIME_PROFILE is used +_=`./scripts/features.sh` TAR=tar SED=sed diff --git a/scripts/runtime-code-tarball.sh b/scripts/runtime-code-tarball.sh index b17b3e0172..b07e6d6a10 100755 --- a/scripts/runtime-code-tarball.sh +++ b/scripts/runtime-code-tarball.sh @@ -1,7 +1,8 @@ #!/usr/bin/env bash +set -e # Assuming cargo workspace root is same as the git repo root -cd $(git rev-parse --show-toplevel) +cd `git rev-parse --show-toplevel` tar -czf joystream.tar.gz \ Cargo.lock \ diff --git a/scripts/save-to-docker-images.sh b/scripts/save-to-docker-images.sh index 10ee226b43..7c2914ccbb 100755 --- a/scripts/save-to-docker-images.sh +++ b/scripts/save-to-docker-images.sh @@ -12,7 +12,7 @@ trap cleanup EXIT export RUNTIME_PROFILE=TESTING -TAG=$(./runtime-code-shasum.sh) +TAG=`./runtime-code-shasum.sh` #./scripts/cargo-build.sh diff --git a/scripts/try-runtime-upgrade.sh b/scripts/try-runtime-upgrade.sh new file mode 100755 index 0000000000..9ca19fa6ce --- /dev/null +++ b/scripts/try-runtime-upgrade.sh @@ -0,0 +1,8 @@ +#!/usr/bin/env bash +set -e + +cd `git rev-parse --show-toplevel` + +# Always runs pre-and-post checks +RUN_MIGRATION_TESTS=true RUST_LOG=info WS=wss://rpc.joystream.org:443/ \ + cargo +nightly-2022-11-15 test remote_tests::run_migrations --release --features try-runtime diff --git a/scripts/verify-chain-metadata.sh b/scripts/verify-chain-metadata.sh index c3da97b5d9..7c6c78b888 100755 --- a/scripts/verify-chain-metadata.sh +++ b/scripts/verify-chain-metadata.sh @@ -4,8 +4,8 @@ set -e SCRIPT_PATH="$(dirname "${BASH_SOURCE[0]}")" cd $SCRIPT_PATH -JSON_METADATA=$(cat ../chain-metadata.json) -CHAIN_METADATA=$(./fetch-chain-metadata.sh) +JSON_METADATA=`cat ../chain-metadata.json` +CHAIN_METADATA=`./fetch-chain-metadata.sh` if [[ $(echo "$JSON_METADATA") == $(echo "$CHAIN_METADATA") ]]; then echo "OK"; else diff --git a/setup.sh b/setup.sh index 19264947e7..96b3e52602 100755 --- a/setup.sh +++ b/setup.sh @@ -17,18 +17,18 @@ if [[ "$OSTYPE" == "linux-gnu" ]]; then sudo apt-get install -y docker.io containerd runc fi # Install latest version of docker-compose - COMPOSE_VERSION=$(curl -sL https://api.github.com/repos/docker/compose/releases/latest | jq -r ".tag_name") + COMPOSE_VERSION=`curl -sL https://api.github.com/repos/docker/compose/releases/latest | jq -r ".tag_name"` sudo curl -L "https://github.com/docker/compose/releases/download/${COMPOSE_VERSION}/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose sudo chmod +x /usr/local/bin/docker-compose sudo ln -sf /usr/local/bin/docker-compose /usr/bin/docker-compose elif [[ "$OSTYPE" == "darwin"* ]]; then # install brew package manager if ! which brew >/dev/null 2>&1; then - /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)" + bash -c "`curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh`" fi # install additional packages brew update - brew install coreutils gnu-tar jq curl llvm gnu-sed cmake || : + brew install coreutils gnu-tar jq curl llvm gnu-sed cmake protobuf || : echo "It is recommended to setup Docker desktop from: https://www.docker.com/products/docker-desktop" echo "It is also recommended to install qemu emulators with following command:" echo "docker run --privileged --rm tonistiigi/binfmt --install all" @@ -47,10 +47,10 @@ source ~/.cargo/env rustup update rustup update nightly -rustup install nightly-2022-05-11 -rustup target add wasm32-unknown-unknown --toolchain nightly-2022-05-11 +rustup install nightly-2022-11-15 +rustup target add wasm32-unknown-unknown --toolchain nightly-2022-11-15 -rustup component add --toolchain nightly-2022-05-11 clippy +rustup component add --toolchain nightly-2022-11-15 clippy rustup component add rustfmt # Install substrate keychain tool diff --git a/start-multistorage.sh b/start-multistorage.sh index de914f5cef..6c436de666 100755 --- a/start-multistorage.sh +++ b/start-multistorage.sh @@ -7,8 +7,13 @@ cd $SCRIPT_PATH rm tests/network-tests/output.json || : # Run a complete joystream development network on your machine using docker -export RUNTIME_PROFILE=${RUNTIME_PROFILE:=TESTING} -export JOYSTREAM_NODE_TAG=${JOYSTREAM_NODE_TAG:=$(./scripts/runtime-code-shasum.sh)} + +JOYSTREAM_NODE_TAG=${JOYSTREAM_NODE_TAG} +if [[ "$JOYSTREAM_NODE_TAG" == "" ]]; then + export RUNTIME_PROFILE=${RUNTIME_PROFILE:=TESTING} + JOYSTREAM_NODE_TAG=`./scripts/runtime-code-shasum.sh` +fi +export JOYSTREAM_NODE_TAG=${JOYSTREAM_NODE_TAG} INIT_CHAIN_SCENARIO=${INIT_CHAIN_SCENARIO:=setupNewChainMultiStorage} @@ -23,7 +28,7 @@ else docker-compose down -v } - trap down EXIT + trap down EXIT ERR SIGINT SIGTERM fi if [ "${SKIP_NODE}" != true ] @@ -44,7 +49,7 @@ docker-compose -f ./docker-compose.storage-squid.yml up -d ## Init the chain with some state if [[ $SKIP_CHAIN_SETUP != 'true' ]]; then export SKIP_QUERY_NODE_CHECKS=true - HOST_IP=$(tests/network-tests/get-host-ip.sh) + HOST_IP=`tests/network-tests/get-host-ip.sh` export COLOSSUS_1_URL=${COLOSSUS_1_URL:="http://${HOST_IP}:3333"} export DISTRIBUTOR_1_URL=${DISTRIBUTOR_1_URL:="http://${HOST_IP}:3334"} export COLOSSUS_2_URL=${COLOSSUS_2_URL:="http://${HOST_IP}:3335"} @@ -52,7 +57,7 @@ if [[ $SKIP_CHAIN_SETUP != 'true' ]]; then ./tests/network-tests/run-test-scenario.sh ${INIT_CHAIN_SCENARIO} ## Member faucet - export INVITER_KEY=$(cat ./tests/network-tests/output.json | jq -r .faucet.suri) + export INVITER_KEY=`cat ./tests/network-tests/output.json | jq -r .faucet.suri` docker-compose up -d faucet ## Storage Infrastructure Nodes diff --git a/start.sh b/start.sh index 1f45516574..8fdd660394 100755 --- a/start.sh +++ b/start.sh @@ -7,14 +7,21 @@ cd $SCRIPT_PATH rm tests/network-tests/output.json || : # Run a complete joystream development network on your machine using docker -export RUNTIME_PROFILE=${RUNTIME_PROFILE:=TESTING} -export JOYSTREAM_NODE_TAG=${JOYSTREAM_NODE_TAG:=$(./scripts/runtime-code-shasum.sh)} + +JOYSTREAM_NODE_TAG=${JOYSTREAM_NODE_TAG} +if [[ "$JOYSTREAM_NODE_TAG" == "" ]]; then + export RUNTIME_PROFILE=${RUNTIME_PROFILE:=TESTING} + JOYSTREAM_NODE_TAG=`./scripts/runtime-code-shasum.sh` +fi +export JOYSTREAM_NODE_TAG=${JOYSTREAM_NODE_TAG} INIT_CHAIN_SCENARIO=${INIT_CHAIN_SCENARIO:=setupNewChain} +echo "Creating Local Joystream Network" + if [ "${PERSIST}" == true ] then - echo "Services starting up.." + echo "Services will persist" else function down() { @@ -23,7 +30,7 @@ else docker-compose down -v } - trap down EXIT + trap down EXIT ERR SIGINT SIGTERM fi if [ "${SKIP_NODE}" != true ] @@ -42,15 +49,15 @@ fi docker-compose -f ./docker-compose.storage-squid.yml up -d ## Init the chain with some state -if [[ $SKIP_CHAIN_SETUP != 'true' ]]; then +if [[ $SKIP_CHAIN_SETUP != true ]]; then export SKIP_QUERY_NODE_CHECKS=true - HOST_IP=$(tests/network-tests/get-host-ip.sh) + HOST_IP=`tests/network-tests/get-host-ip.sh` export COLOSSUS_1_URL=${COLOSSUS_1_URL:="http://${HOST_IP}:3333"} export DISTRIBUTOR_1_URL=${DISTRIBUTOR_1_URL:="http://${HOST_IP}:3334"} ./tests/network-tests/run-test-scenario.sh ${INIT_CHAIN_SCENARIO} ## Member faucet - export INVITER_KEY=$(cat ./tests/network-tests/output.json | jq -r .faucet.suri) + export INVITER_KEY=`cat ./tests/network-tests/output.json | jq -r .faucet.suri` docker-compose up -d faucet ## Storage Infrastructure Nodes diff --git a/storage-node/CHANGELOG.md b/storage-node/CHANGELOG.md index 00960c0fba..a0ba50c800 100644 --- a/storage-node/CHANGELOG.md +++ b/storage-node/CHANGELOG.md @@ -1,3 +1,7 @@ +### 4.1.0 + +- Nara release. + ### 4.0.1 - Set the `server.requestTimeout` option in `http.Server` instance to 0 to disable the timeout. This was default behaviour pre Node.js `18.x` diff --git a/storage-node/client/package.json b/storage-node/client/package.json index c6c279981b..1883f12b03 100644 --- a/storage-node/client/package.json +++ b/storage-node/client/package.json @@ -8,7 +8,7 @@ "axios": "^0.21.1" }, "devDependencies": { - "typescript": "^4.4.3" + "typescript": "^5.0.2" }, "engines": { "node": ">=14.18.0" diff --git a/storage-node/package.json b/storage-node/package.json index d0bf332519..37b8867109 100644 --- a/storage-node/package.json +++ b/storage-node/package.json @@ -1,7 +1,7 @@ { "name": "storage-node", "description": "Joystream storage subsystem.", - "version": "4.0.1", + "version": "4.1.0", "author": "Joystream contributors", "bin": { "storage-node": "./bin/run" @@ -10,13 +10,13 @@ "dependencies": { "@apollo/client": "^3.3.21", "@elastic/ecs-winston-format": "^1.3.1", - "@joystream/metadata-protobuf": "^2.8.0", + "@joystream/metadata-protobuf": "^2.15.0", "@joystream/opentelemetry": "1.0.0", - "@joystream/types": "^2.0.0", + "@joystream/types": "^4.0.0", "@oclif/command": "^1", "@oclif/config": "^1", "@oclif/plugin-help": "^3", - "@polkadot/api": "8.9.1", + "@polkadot/api": "10.1.4", "@types/base64url": "^2.0.0", "@types/express": "4.17.13", "@types/file-type": "^10.9.1", @@ -100,7 +100,7 @@ "swagger-ui-express": "^4.1.6", "ts-node": "^10.2.1", "type-doc": "^0.1.41", - "typescript": "^4.4.3" + "typescript": "^5.0.2" }, "engines": { "node": ">=14.18.0" diff --git a/storage-node/src/services/queryNode/api.ts b/storage-node/src/services/queryNode/api.ts index 44ab277d74..e074905b11 100644 --- a/storage-node/src/services/queryNode/api.ts +++ b/storage-node/src/services/queryNode/api.ts @@ -138,7 +138,7 @@ export class QueryNodeApi { while (hasNextPage) { const paginationVariables = { limit: itemsPerPage, cursor: lastCursor } const queryVariables = { ...variables, ...paginationVariables } - logger.debug(`Query - ${resultKey}`) + logger.debug(`Query - ${String(resultKey)}`) const result = await this.apolloClient.query({ query, variables: queryVariables, diff --git a/storage-node/src/services/runtime/api.ts b/storage-node/src/services/runtime/api.ts index b0e49d4297..569bc733ea 100644 --- a/storage-node/src/services/runtime/api.ts +++ b/storage-node/src/services/runtime/api.ts @@ -12,6 +12,7 @@ import stringify from 'fast-safe-stringify' import sleep from 'sleep-promise' import ExitCodes from '../../command-base/ExitCodes' import logger from '../../services/logger' +import { SpRuntimeDispatchError } from '@polkadot/types/lookup' /** * Dedicated error for the failed extrinsics. @@ -171,7 +172,7 @@ async function lockAndGetNonce(api: ApiPromise, account: KeyringPair): Promise( logger.debug(`Sending ${tx.method.section}.${tx.method.method} extrinsic...`) const result = await sendExtrinsic(api, account, tx) - let eventResult: T | void + if (eventParser) { - eventResult = eventParser(result) + return eventParser(result) } - logger.debug(`Extrinsic successful!`) - return eventResult + logger.debug(`Extrinsic successful!`) } /** diff --git a/storage-node/src/services/runtime/extrinsics.ts b/storage-node/src/services/runtime/extrinsics.ts index a3a96a91ea..924009f4f8 100644 --- a/storage-node/src/services/runtime/extrinsics.ts +++ b/storage-node/src/services/runtime/extrinsics.ts @@ -1,6 +1,5 @@ import { ApiPromise } from '@polkadot/api' import { KeyringPair } from '@polkadot/keyring/types' -import { DispatchError } from '@polkadot/types/interfaces/system' import { PalletStorageBagIdType as BagId, PalletStorageDynamicBagType as DynamicBagType } from '@polkadot/types/lookup' import BN from 'bn.js' import { timeout } from 'promise-timeout' @@ -120,7 +119,7 @@ export async function updateStorageBucketsForBags( if (e.method === 'ItemFailed') { return { args: txs[i].args.toString(), - error: formatDispatchError(api, e.data[0] as DispatchError), + error: formatDispatchError(api, e.data[0]), } } }) diff --git a/tests/network-tests/package.json b/tests/network-tests/package.json index 1891512904..21e2243b72 100644 --- a/tests/network-tests/package.json +++ b/tests/network-tests/package.json @@ -16,9 +16,11 @@ }, "dependencies": { "@apollo/client": "^3.2.5", + "@babel/helper-get-function-arity": "^7.16.7", "@joystream/distributor-node-client": "^2.0.0", - "@polkadot/api": "8.9.1", - "@polkadot/keyring": "9.5.1", + "@joystream/js": "^1.6.0", + "@polkadot/api": "10.1.4", + "@polkadot/keyring": "11.1.1", "@types/async-lock": "^1.1.3", "@types/bmp-js": "^0.1.0", "@types/bn.js": "^5.1.0", @@ -31,10 +33,10 @@ "fs": "^0.0.1-security", "graphql": "^15.3.0", "long": "^4.0.0", + "multihashes": "^4.0.3", "node-cleanup": "^2.1.2", - "@joystream/js": "^1.6.0", - "uuid": "^7.0.3", - "sleep-promise": "^9.1.0" + "sleep-promise": "^9.1.0", + "uuid": "^7.0.3" }, "devDependencies": { "@graphql-codegen/cli": "^1.21.4", @@ -47,7 +49,7 @@ "chai": "^4.2.0", "prettier": "^2.2.1", "ts-node": "^10.2.1", - "typescript": "^4.4.3" + "typescript": "^5.0.2" }, "volta": { "extends": "../../package.json" diff --git a/tests/network-tests/run-node-docker.sh b/tests/network-tests/run-node-docker.sh index e83653851c..370c0df6e0 100755 --- a/tests/network-tests/run-node-docker.sh +++ b/tests/network-tests/run-node-docker.sh @@ -1,7 +1,7 @@ #!/usr/bin/env bash set -e -SCRIPT_PATH="$(dirname "${BASH_SOURCE[0]}")" +SCRIPT_PATH=`dirname "${BASH_SOURCE[0]}"` cd $SCRIPT_PATH rm ./output.json || : @@ -15,12 +15,14 @@ DATA_PATH=$PWD/data mkdir -p ${DATA_PATH} # The docker image tag to use for joystream/node -RUNTIME=${RUNTIME:=$(../../scripts/runtime-code-shasum.sh)} +if [[ "$RUNTIME" == "" ]]; then + RUNTIME=`../../scripts/runtime-code-shasum.sh` +fi # Source of funds for all new accounts that are created in the tests. TREASURY_INITIAL_BALANCE=${TREASURY_INITIAL_BALANCE:="100000000"} TREASURY_ACCOUNT_URI=${TREASURY_ACCOUNT_URI:="//Bob"} -TREASURY_ACCOUNT=$(docker run --rm joystream/node:${RUNTIME} key inspect ${TREASURY_ACCOUNT_URI} --output-type json | jq .ss58Address -r) +TREASURY_ACCOUNT=`docker run --pull never --rm joystream/node:${RUNTIME} key inspect ${TREASURY_ACCOUNT_URI} --output-type json | jq .ss58Address -r` >&2 echo "treasury account from suri: ${TREASURY_ACCOUNT}" @@ -49,7 +51,7 @@ else fi # Create a chain spec file -docker run --rm -v ${DATA_PATH}:/spec --entrypoint ./chain-spec-builder joystream/node:${RUNTIME} \ +docker run --pull never --rm -v ${DATA_PATH}:/spec --entrypoint ./chain-spec-builder joystream/node:${RUNTIME} \ new \ --fund-accounts \ --authorities //Alice \ @@ -58,14 +60,15 @@ docker run --rm -v ${DATA_PATH}:/spec --entrypoint ./chain-spec-builder joystrea --initial-balances-path /spec/initial-balances.json # Convert the chain spec file to a raw chainspec file -docker run --rm -v ${DATA_PATH}:/spec joystream/node:${RUNTIME} build-spec \ +docker run --pull never --rm -v ${DATA_PATH}:/spec joystream/node:${RUNTIME} build-spec \ --raw --disable-default-bootnode \ --chain /spec/chain-spec.json > ${DATA_PATH}/chain-spec-raw.json # Start a chain with generated chain spec export JOYSTREAM_NODE_TAG=${RUNTIME} -docker-compose -f ../../docker-compose.yml run -d -v ${DATA_PATH}:/spec --name joystream-node \ - -p 9944:9944 -p 9933:9933 joystream-node \ +docker-compose -p joystream -f ../../docker-compose.yml run -d -v ${DATA_PATH}:/spec --name joystream-node \ + --service-ports joystream-node \ --alice --validator --unsafe-ws-external --unsafe-rpc-external \ --rpc-methods Unsafe --rpc-cors=all -l runtime \ - --chain /spec/chain-spec-raw.json --pruning=archive --no-telemetry + --chain /spec/chain-spec-raw.json --pruning=archive --no-telemetry \ + --no-hardware-benchmarks diff --git a/tests/network-tests/run-runtime-upgrade-tests.sh b/tests/network-tests/run-runtime-upgrade-tests.sh index d4f8d2d75b..6a9319cc55 100755 --- a/tests/network-tests/run-runtime-upgrade-tests.sh +++ b/tests/network-tests/run-runtime-upgrade-tests.sh @@ -6,9 +6,6 @@ cd $SCRIPT_PATH rm ./output.json || : -# Log only to stderr -# Only output from this script should be the container id of the node at the very end - # Location that will be mounted to /spec in containers # This is where the initial balances files and generated chainspec files will be located. DATA_PATH=$PWD/data @@ -21,9 +18,8 @@ TARGET_RUNTIME=${TARGET_RUNTIME:=target} # Source of funds for all new accounts that are created in the tests. TREASURY_INITIAL_BALANCE=${TREASURY_INITIAL_BALANCE:="100000000"} TREASURY_ACCOUNT_URI=${TREASURY_ACCOUNT_URI:="//Bob"} -TREASURY_ACCOUNT=$(docker run --rm joystream/node:${RUNTIME} key inspect ${TREASURY_ACCOUNT_URI} --output-type json | jq .ss58Address -r) +TREASURY_ACCOUNT=`docker run --pull never --rm joystream/node:${RUNTIME} key inspect ${TREASURY_ACCOUNT_URI} --output-type json | jq .ss58Address -r` -echo >&2 "sudo account from suri: ${SUDO_ACCOUNT}" echo >&2 "treasury account from suri: ${TREASURY_ACCOUNT}" # Default initial balances @@ -53,7 +49,7 @@ function generate_config_files() { # Create a chain spec file function create_raw_chain_spec() { - docker run --rm -v ${DATA_PATH}:/spec --entrypoint ./chain-spec-builder joystream/node:${RUNTIME} \ + docker run --pull never --rm -v ${DATA_PATH}:/spec --entrypoint ./chain-spec-builder joystream/node:${RUNTIME} \ generate \ --authorities 1 \ --nominators 1 \ @@ -64,20 +60,23 @@ function create_raw_chain_spec() { --keystore-path /spec/keystore # Convert the chain spec file to a raw chainspec file - docker run --rm -v ${DATA_PATH}:/spec joystream/node:${RUNTIME} build-spec \ + docker run --pull never --rm -v ${DATA_PATH}:/spec joystream/node:${RUNTIME} build-spec \ --raw --disable-default-bootnode \ --chain /spec/chain-spec.json >${DATA_PATH}/chain-spec-raw.json } # Start a chain with generated chain spec -function start_old_joystream_node { - docker-compose -f ../../docker-compose.yml run -d -v ${DATA_PATH}:/spec --name joystream-node \ +function start_joystream_node { + docker-compose -f ../../docker-compose.yml run -d -v ${DATA_PATH}:/spec \ + --name joystream-node \ -p 9944:9944 -p 9933:9933 joystream-node \ --validator --unsafe-ws-external --unsafe-rpc-external \ --rpc-methods Unsafe --rpc-cors=all -l runtime \ - --chain /spec/chain-spec-forked.json --pruning=archive --no-telemetry \ - --keystore-path /spec/keystore/auth-0 + --chain /spec/chain-spec-forked.json --pruning=archive --no-telemetry --no-mdns \ + --no-hardware-benchmarks \ + --keystore-path /spec/keystore/auth-0 \ + --base-path /data } ####################################### @@ -91,6 +90,7 @@ function start_old_joystream_node { function set_new_runtime_wasm_path() { docker create --name target-node joystream/node:${TARGET_RUNTIME} docker cp target-node:/joystream/runtime.compact.compressed.wasm ${DATA_PATH}/new_runtime.wasm + docker rm target-node } ####################################### @@ -115,6 +115,7 @@ function fork_off_init() { # download the raw storage state if ! [[ -f ${DATA_PATH}/storage.json ]]; then + echo >&2 "fetching state storage from $HTTP_RPC_ENDPOINT" curl $HTTP_RPC_ENDPOINT -H \ "Content-type: application/json" -d \ '{"jsonrpc":"2.0","id":1,"method":"state_getPairs","params":["0x"]}' \ @@ -122,7 +123,8 @@ function fork_off_init() { echo >&2 "storage trie downloaded at ${DATA_PATH}/storage.json" fi - yarn workspace api-scripts tsnode-strict src/fork-off.ts ${DATA_PATH} ${WS_RPC_ENDPOINT} + yarn workspace api-scripts tsnode-strict --max-old-space-size=6144 \ + src/fork-off.ts ${DATA_PATH} ${WS_RPC_ENDPOINT} } ####################################### @@ -132,38 +134,25 @@ function fork_off_init() { # Arguments: # None ####################################### -function export_chainspec_file_to_disk() { +function init_chain_db() { # write the initial genesis state to db, in order to avoid waiting for an arbitrary amount of time + # when starting the node to startup. it can take a significant amount of time + # if the initial state is large. # exporting should give some essential tasks errors but they are harmless https://github.com/paritytech/substrate/issues/10583 echo >&2 "exporting state" - docker-compose -f ../../docker-compose.yml run \ + docker-compose -f ../../docker-compose.yml run --rm \ -v ${DATA_PATH}:/spec joystream-node export-state \ - --chain /spec/chain-spec-raw.json \ + --chain /spec/chain-spec-forked.json \ --base-path /data --pruning archive >${DATA_PATH}/exported-state.json } -# cleanup -function cleanup() { - docker logs ${CONTAINER_ID} --tail 15 - docker rm --volumes target-node - docker-compose -f ../../docker-compose.yml down -v --remove-orphans - docker volume prune -f # sometimes volumes are still running -} - # entrypoint function main { - CONTAINER_ID="" - export JOYSTREAM_NODE_TAG=${RUNTIME} if [ $TARGET_RUNTIME == $RUNTIME ]; then echo >&2 "Same tag for runtime and target runtime aborting..." exit 0 fi - # Start a query-node - if [ "${NO_QN}" != true ]; then - ../../query-node/start.sh - fi - # 0. Generate config files generate_config_files echo >&2 "config files generated" @@ -176,23 +165,39 @@ function main { # 3. set path to new runtime.wasm set_new_runtime_wasm_path echo >&2 "new wasm path set" - # 4. copy chainspec to disk - export_chainspec_file_to_disk - echo >&2 "chainspec exported" - # 5. start node - CONTAINER_ID=$(start_old_joystream_node) - echo >&2 "mainnet node starting" - # wait 1 minute - sleep 90 + # 4. early chain db init + export JOYSTREAM_NODE_TAG=${RUNTIME} + init_chain_db + echo >&2 "chain db initialized" + # 5. start node using new version + export JOYSTREAM_NODE_TAG=${TARGET_RUNTIME} + start_joystream_node + echo >&2 "joystream node starting" + + # Start a query-node + # Its important to remember the query-node processor is starting with an empty state + # and not inline with the chain state. This means some integration test scenarios might + # not function correctly, but we need it to at least have the council election and runtime upgrade + # proposal to be created and passed. + ../../query-node/start.sh + + # Wait for chain and query node to get in sync + sleep 200 # 6. Bootstrap storage infra because we need to run content-directory tests after runtime upgrade if [ "${NO_STORAGE}" != true ]; then ./start-storage.sh fi + # Do some setup and checks before the upgrade + ./run-test-scenario.sh preRuntimeUpgrade + ./run-test-scenario.sh runtimeUpgrade - ./run-test-scenario.sh content-directory + + sleep 20 + + ./run-test-scenario.sh postRuntimeUpgrade } # main entrypoint diff --git a/tests/network-tests/run-test-node.sh b/tests/network-tests/run-test-node.sh index 67d7eb586d..ef65101fa3 100755 --- a/tests/network-tests/run-test-node.sh +++ b/tests/network-tests/run-test-node.sh @@ -1,7 +1,7 @@ #!/usr/bin/env bash set -e -SCRIPT_PATH="$(dirname "${BASH_SOURCE[0]}")" +SCRIPT_PATH=`dirname "${BASH_SOURCE[0]}"` cd $SCRIPT_PATH rm ./output.json || : @@ -61,4 +61,5 @@ fi --validator --chain ${DATA_PATH}/chain-spec.json \ --unsafe-ws-external --unsafe-rpc-external \ --rpc-methods Unsafe --rpc-cors=all \ - --pruning=archive --no-telemetry + --pruning=archive --no-telemetry \ + --no-hardware-benchmarks diff --git a/tests/network-tests/run-test-scenario.sh b/tests/network-tests/run-test-scenario.sh index c19ee5bdbc..80285f73dc 100755 --- a/tests/network-tests/run-test-scenario.sh +++ b/tests/network-tests/run-test-scenario.sh @@ -1,7 +1,7 @@ #!/usr/bin/env bash set -e -SCRIPT_PATH="$(dirname "${BASH_SOURCE[0]}")" +SCRIPT_PATH=`dirname "${BASH_SOURCE[0]}"` cd $SCRIPT_PATH # pass the scenario name without .ts extension diff --git a/tests/network-tests/run-tests.sh b/tests/network-tests/run-tests.sh index bea4e536cd..0dc698f58b 100755 --- a/tests/network-tests/run-tests.sh +++ b/tests/network-tests/run-tests.sh @@ -6,20 +6,14 @@ cd $SCRIPT_PATH rm ./output.json || : -export RUNTIME_PROFILE=TESTING -CONTAINER_ID=$(./run-node-docker.sh) - -if [ "${PERSIST}" == true ]; then - echo "Starting services" -else - function cleanup() { +function cleanup() { + docker logs joystream-node --tail 15 || : + docker stop joystream-node || : + docker rm joystream-node || : echo "# Colossus-1 Logs" docker logs colossus-1 --tail 100 || : echo "# Colossus-2 Logs" docker logs colossus-2 --tail 100 || : - docker logs ${CONTAINER_ID} --tail 15 - docker stop ${CONTAINER_ID} - docker rm ${CONTAINER_ID} if [ "${NO_STORAGE}" != true ]; then docker-compose -f ../../docker-compose.storage-squid.yml down -v @@ -28,10 +22,12 @@ else docker-compose -f ../../docker-compose.yml down -v } - trap cleanup EXIT -fi +trap cleanup EXIT ERR SIGINT SIGTERM + +export JOYSTREAM_NODE_TAG=`RUNTIME_PROFILE=TESTING ../../scripts/runtime-code-shasum.sh` +CHAIN=dev docker compose -f ../../docker-compose.yml up -d joystream-node -sleep 3 +sleep 30 # Display runtime version yarn workspace api-scripts tsnode-strict src/status.ts | grep Runtime diff --git a/tests/network-tests/src/QueryNodeApi.ts b/tests/network-tests/src/QueryNodeApi.ts index 08580fa8b1..8a81ee958c 100644 --- a/tests/network-tests/src/QueryNodeApi.ts +++ b/tests/network-tests/src/QueryNodeApi.ts @@ -1,478 +1,473 @@ import { ApolloClient, DocumentNode, NormalizedCacheObject } from '@apollo/client/core' import { - MemberId, ApplicationId, - OpeningId, - WorkerId, - ProposalId, ForumCategoryId, ForumPostId, ForumThreadId, + MemberId, + OpeningId, + ProposalId, + WorkerId, } from '@joystream/types/primitives' -import { extendDebug, Debugger } from './Debugger' -import { EventDetails, WorkingGroupModuleName } from './types' +import { OperationDefinitionNode } from 'graphql' +import { Debugger, extendDebug } from './Debugger' +import { BLOCKTIME } from './consts' import { - ElectedCouncilFieldsFragment, - GetCurrentCouncilMembers, - GetCurrentCouncilMembersQuery, - GetCurrentCouncilMembersQueryVariables, + AppFieldsFragment, + ApplicationFieldsFragment, + ApplicationWithdrawnEventFieldsFragment, + AppliedOnOpeningEventFieldsFragment, + BidFieldsFragment, + BudgetFundedEventFieldsFragment, + BudgetSetEventFieldsFragment, + BudgetSpendingEventFieldsFragment, CandidateFieldsFragment, - GetReferendumIntermediateWinners, - GetReferendumIntermediateWinnersQuery, - GetReferendumIntermediateWinnersQueryVariables, - GetMemberByIdQuery, - GetMemberByIdQueryVariables, - GetMemberById, - GetMemberProfileUpdatedEventsByMemberIdQuery, - GetMemberProfileUpdatedEventsByMemberIdQueryVariables, - GetMemberProfileUpdatedEventsByMemberId, - GetMemberAccountsUpdatedEventsByMemberIdQuery, - GetMemberAccountsUpdatedEventsByMemberIdQueryVariables, - GetMemberAccountsUpdatedEventsByMemberId, - GetInvitesTransferredEventsBySourceMemberIdQuery, - GetInvitesTransferredEventsBySourceMemberIdQueryVariables, - GetInvitesTransferredEventsBySourceMemberId, - GetStakingAccountRemovedEventsByMemberIdQuery, - GetStakingAccountRemovedEventsByMemberIdQueryVariables, - GetStakingAccountRemovedEventsByMemberId, - GetReferralCutUpdatedEventsByEventIdQuery, - GetReferralCutUpdatedEventsByEventIdQueryVariables, - GetReferralCutUpdatedEventsByEventId, - GetMembershipPriceUpdatedEventsByEventIdQuery, - GetMembershipPriceUpdatedEventsByEventIdQueryVariables, - GetMembershipPriceUpdatedEventsByEventId, - GetInitialInvitationBalanceUpdatedEventsByEventIdQuery, - GetInitialInvitationBalanceUpdatedEventsByEventIdQueryVariables, - GetInitialInvitationBalanceUpdatedEventsByEventId, - GetInitialInvitationCountUpdatedEventsByEventIdQuery, - GetInitialInvitationCountUpdatedEventsByEventIdQueryVariables, - GetInitialInvitationCountUpdatedEventsByEventId, - GetOpeningByIdQuery, - GetOpeningByIdQueryVariables, - GetOpeningById, + CategoryArchivalStatusUpdatedEventFieldsFragment, + CategoryCreatedEventFieldsFragment, + CategoryDeletedEventFieldsFragment, + CategoryMembershipOfModeratorUpdatedEventFieldsFragment, + CategoryStickyThreadUpdateEventFieldsFragment, + ChannelAssetsDeletedByModeratorEventFieldsFragment, + ChannelFieldsFragment, + ChannelFundsWithdrawnEventFieldsFragment, + ChannelNftCollectorFieldsFragment, + ChannelPaymentMadeEventFieldsFragment, + ChannelPayoutsUpdatedEventFragment, + ChannelRewardClaimedAndWithdrawnEventFieldsFragment, + ChannelRewardClaimedEventFieldsFragment, + CollaboratorsFieldsFragment, + CommentCreatedEventFieldsFragment, + CommentDeletedEventFieldsFragment, + CommentFieldsFragment, + CommentModeratedEventFieldsFragment, + CommentPinnedEventFieldsFragment, + CommentReactedEventFieldsFragment, + CommentTextUpdatedEventFieldsFragment, + CouncilBudgetFundedEventFieldsFragment, + CuratorAgentPermissionsFieldsFragment, + DistributionBucketFamilyFieldsFragment, + ElectedCouncilFieldsFragment, + EnglishAuctionSettledEventFieldsFragment, + EnglishAuctionStartedEventFieldsFragment, + ForumCategoryFieldsFragment, + ForumPostFieldsFragment, + ForumThreadWithInitialPostFragment, + GetAppById, + GetAppByIdQuery, + GetAppByIdQueryVariables, + GetApplicationById, GetApplicationByIdQuery, GetApplicationByIdQueryVariables, - GetApplicationById, - GetAppliedOnOpeningEventsByEventIdsQuery, - GetAppliedOnOpeningEventsByEventIdsQueryVariables, - GetAppliedOnOpeningEventsByEventIds, - GetOpeningAddedEventsByEventIdsQuery, - GetOpeningAddedEventsByEventIdsQueryVariables, - GetOpeningAddedEventsByEventIds, - GetOpeningFilledEventsByEventIdsQuery, - GetOpeningFilledEventsByEventIdsQueryVariables, - GetOpeningFilledEventsByEventIds, + GetApplicationWithdrawnEventsByEventIds, GetApplicationWithdrawnEventsByEventIdsQuery, GetApplicationWithdrawnEventsByEventIdsQueryVariables, - GetApplicationWithdrawnEventsByEventIds, - GetOpeningCancelledEventsByEventIdsQuery, - GetOpeningCancelledEventsByEventIdsQueryVariables, - GetOpeningCancelledEventsByEventIds, - GetStatusTextChangedEventsByEventIdsQuery, - GetStatusTextChangedEventsByEventIdsQueryVariables, - GetStatusTextChangedEventsByEventIds, - GetUpcomingOpeningsByCreatedInEventIdsQuery, - GetUpcomingOpeningsByCreatedInEventIdsQueryVariables, - GetUpcomingOpeningsByCreatedInEventIds, - GetWorkingGroupByNameQuery, - GetWorkingGroupByNameQueryVariables, - GetWorkingGroupByName, - GetWorkingGroupMetadataSnapshotsByTimeAsc, - GetWorkingGroupMetadataSnapshotsByTimeAscQuery, - GetWorkingGroupMetadataSnapshotsByTimeAscQueryVariables, - MembershipFieldsFragment, - MembershipBoughtEventFieldsFragment, - MemberProfileUpdatedEventFieldsFragment, - MemberAccountsUpdatedEventFieldsFragment, - MemberInvitedEventFieldsFragment, - InvitesTransferredEventFieldsFragment, - StakingAccountAddedEventFieldsFragment, - StakingAccountConfirmedEventFieldsFragment, - StakingAccountRemovedEventFieldsFragment, - ReferralCutUpdatedEventFieldsFragment, - MembershipPriceUpdatedEventFieldsFragment, - InitialInvitationBalanceUpdatedEventFieldsFragment, - InitialInvitationCountUpdatedEventFieldsFragment, - OpeningFieldsFragment, - ApplicationFieldsFragment, - AppliedOnOpeningEventFieldsFragment, - OpeningAddedEventFieldsFragment, - OpeningFilledEventFieldsFragment, - ApplicationWithdrawnEventFieldsFragment, - OpeningCanceledEventFieldsFragment, - StatusTextChangedEventFieldsFragment, - UpcomingOpeningFieldsFragment, - WorkingGroupFieldsFragment, - WorkingGroupMetadataFieldsFragment, - GetUpcomingOpeningByIdQuery, - GetUpcomingOpeningByIdQueryVariables, - GetUpcomingOpeningById, - GetOpeningsByIdsQuery, - GetOpeningsByIdsQueryVariables, - GetOpeningsByIds, + GetApplicationsByIds, GetApplicationsByIdsQuery, GetApplicationsByIdsQueryVariables, - GetApplicationsByIds, - GetWorkerRoleAccountUpdatedEventsByEventIdsQuery, - GetWorkerRoleAccountUpdatedEventsByEventIdsQueryVariables, - WorkerRoleAccountUpdatedEventFieldsFragment, - GetWorkerRoleAccountUpdatedEventsByEventIds, - GetWorkerRewardAccountUpdatedEventsByEventIdsQuery, - GetWorkerRewardAccountUpdatedEventsByEventIdsQueryVariables, - WorkerRewardAccountUpdatedEventFieldsFragment, - GetWorkerRewardAccountUpdatedEventsByEventIds, - StakeIncreasedEventFieldsFragment, - GetStakeIncreasedEventsByEventIdsQuery, - GetStakeIncreasedEventsByEventIdsQueryVariables, - GetStakeIncreasedEventsByEventIds, - WorkerFieldsFragment, - GetWorkersByRuntimeIdsQuery, - GetWorkersByRuntimeIdsQueryVariables, - GetWorkersByRuntimeIds, - GetWorkerStartedLeavingEventsByEventIdsQuery, - GetWorkerStartedLeavingEventsByEventIdsQueryVariables, - GetWorkerStartedLeavingEventsByEventIds, - WorkerStartedLeavingEventFieldsFragment, - TerminatedWorkerEventFieldsFragment, - GetTerminatedWorkerEventsByEventIdsQuery, - GetTerminatedWorkerEventsByEventIdsQueryVariables, - GetTerminatedWorkerEventsByEventIds, - TerminatedLeaderEventFieldsFragment, - GetTerminatedLeaderEventsByEventIdsQuery, - GetTerminatedLeaderEventsByEventIdsQueryVariables, - GetTerminatedLeaderEventsByEventIds, - WorkerRewardAmountUpdatedEventFieldsFragment, - GetWorkerRewardAmountUpdatedEventsByEventIdsQuery, - GetWorkerRewardAmountUpdatedEventsByEventIdsQueryVariables, - GetWorkerRewardAmountUpdatedEventsByEventIds, - StakeSlashedEventFieldsFragment, - GetStakeSlashedEventsByEventIdsQuery, - GetStakeSlashedEventsByEventIdsQueryVariables, - GetStakeSlashedEventsByEventIds, - StakeDecreasedEventFieldsFragment, - GetStakeDecreasedEventsByEventIdsQuery, - GetStakeDecreasedEventsByEventIdsQueryVariables, - GetStakeDecreasedEventsByEventIds, - BudgetSetEventFieldsFragment, + GetAppliedOnOpeningEventsByEventIds, + GetAppliedOnOpeningEventsByEventIdsQuery, + GetAppliedOnOpeningEventsByEventIdsQueryVariables, + GetAppsByName, + GetAppsByNameQuery, + GetAppsByNameQueryVariables, + GetBidsByMemberId, + GetBidsByMemberIdQuery, + GetBidsByMemberIdQueryVariables, + GetBudgetFundedEventsByEventIds, + GetBudgetFundedEventsByEventIdsQuery, + GetBudgetFundedEventsByEventIdsQueryVariables, + GetBudgetSetEventsByEventIds, GetBudgetSetEventsByEventIdsQuery, GetBudgetSetEventsByEventIdsQueryVariables, - GetBudgetSetEventsByEventIds, - BudgetSpendingEventFieldsFragment, + GetBudgetSpendingEventsByEventIds, GetBudgetSpendingEventsByEventIdsQuery, GetBudgetSpendingEventsByEventIdsQueryVariables, - GetBudgetSpendingEventsByEventIds, - LeaderUnsetEventFieldsFragment, - GetLeaderUnsetEventsByEventIdsQuery, - GetLeaderUnsetEventsByEventIdsQueryVariables, - GetLeaderUnsetEventsByEventIds, - LeaderSetEventFieldsFragment, - GetLeaderSetEventsByEventIdsQuery, - GetLeaderSetEventsByEventIdsQueryVariables, - GetLeaderSetEventsByEventIds, - ForumCategoryFieldsFragment, + GetCategoriesByIds, GetCategoriesByIdsQuery, GetCategoriesByIdsQueryVariables, - GetCategoriesByIds, - CategoryCreatedEventFieldsFragment, - GetCategoryCreatedEventsByEventIdsQuery, - GetCategoryCreatedEventsByEventIdsQueryVariables, - GetCategoryCreatedEventsByEventIds, GetCategoryArchivalStatusUpdatedEventsByEventIds, GetCategoryArchivalStatusUpdatedEventsByEventIdsQuery, GetCategoryArchivalStatusUpdatedEventsByEventIdsQueryVariables, - CategoryDeletedEventFieldsFragment, + GetCategoryCreatedEventsByEventIds, + GetCategoryCreatedEventsByEventIdsQuery, + GetCategoryCreatedEventsByEventIdsQueryVariables, + GetCategoryDeletedEventsByEventIds, GetCategoryDeletedEventsByEventIdsQuery, GetCategoryDeletedEventsByEventIdsQueryVariables, - GetCategoryDeletedEventsByEventIds, - ThreadCreatedEventFieldsFragment, - GetThreadCreatedEventsByEventIdsQuery, - GetThreadCreatedEventsByEventIds, - GetThreadCreatedEventsByEventIdsQueryVariables, - ThreadDeletedEventFieldsFragment, - GetThreadDeletedEventsByEventIdsQuery, - GetThreadDeletedEventsByEventIdsQueryVariables, - GetThreadDeletedEventsByEventIds, - ForumThreadWithInitialPostFragment, - GetThreadsWithInitialPostsByIds, - GetThreadsWithInitialPostsByIdsQuery, - GetThreadsWithInitialPostsByIdsQueryVariables, - GetMembershipBoughtEventsByEventIdsQuery, - GetMembershipBoughtEventsByEventIdsQueryVariables, - GetMembershipBoughtEventsByEventIds, - GetMembersByIdsQuery, - GetMembersByIdsQueryVariables, - GetMembersByIds, - GetMemberInvitedEventsByEventIdsQuery, - GetMemberInvitedEventsByEventIdsQueryVariables, - GetMemberInvitedEventsByEventIds, - GetMemberCreatedEventsByEventIdsQuery, - GetMemberCreatedEventsByEventIdsQueryVariables, - GetMemberCreatedEventsByEventIds, - MemberCreatedEventFieldsFragment, - GetMembershipGiftedEventsByEventIdsQuery, - GetMembershipGiftedEventsByEventIdsQueryVariables, - GetMembershipGiftedEventsByEventIds, - MembershipGiftedEventFieldsFragment, - ProposalFieldsFragment, - GetProposalsByIdsQuery, - GetProposalsByIdsQueryVariables, - GetProposalsByIds, - GetStakingAccountConfirmedEventsByEventIdsQuery, - GetStakingAccountConfirmedEventsByEventIdsQueryVariables, - GetStakingAccountConfirmedEventsByEventIds, - GetStakingAccountAddedEventsByEventIdsQuery, - GetStakingAccountAddedEventsByEventIdsQueryVariables, - GetStakingAccountAddedEventsByEventIds, - ProposalVotedEventFieldsFragment, - GetProposalVotedEventsByEventIdsQuery, - GetProposalVotedEventsByEventIdsQueryVariables, - GetProposalVotedEventsByEventIds, - ProposalCancelledEventFieldsFragment, - GetProposalCancelledEventsByEventIdsQuery, - GetProposalCancelledEventsByEventIdsQueryVariables, - GetProposalCancelledEventsByEventIds, - ForumPostFieldsFragment, - GetPostsByIdsQuery, - GetPostsByIdsQueryVariables, - GetPostsByIds, - PostAddedEventFieldsFragment, - GetPostAddedEventsByEventIdsQuery, - GetPostAddedEventsByEventIdsQueryVariables, - GetPostAddedEventsByEventIds, - ThreadMetadataUpdatedEventFieldsFragment, - GetThreadMetadataUpdatedEventsByEventIds, - GetThreadMetadataUpdatedEventsByEventIdsQuery, - GetThreadMetadataUpdatedEventsByEventIdsQueryVariables, - ThreadMovedEventFieldsFragment, - GetThreadMovedEventsByEventIdsQuery, - GetThreadMovedEventsByEventIdsQueryVariables, - GetThreadMovedEventsByEventIds, - CategoryStickyThreadUpdateEventFieldsFragment, - GetCategoryStickyThreadUpdateEventsByEventIdsQuery, - GetCategoryStickyThreadUpdateEventsByEventIdsQueryVariables, - GetCategoryStickyThreadUpdateEventsByEventIds, - CategoryMembershipOfModeratorUpdatedEventFieldsFragment, + GetCategoryMembershipOfModeratorUpdatedEventsByEventIds, GetCategoryMembershipOfModeratorUpdatedEventsByEventIdsQuery, GetCategoryMembershipOfModeratorUpdatedEventsByEventIdsQueryVariables, - GetCategoryMembershipOfModeratorUpdatedEventsByEventIds, - ThreadModeratedEventFieldsFragment, - GetThreadModeratedEventsByEventIdsQuery, - GetThreadModeratedEventsByEventIdsQueryVariables, - GetThreadModeratedEventsByEventIds, - PostModeratedEventFieldsFragment, + GetCategoryStickyThreadUpdateEventsByEventIds, + GetCategoryStickyThreadUpdateEventsByEventIdsQuery, + GetCategoryStickyThreadUpdateEventsByEventIdsQueryVariables, + GetChannelAssetsDeletedByModeratorEventsByEventIds, + GetChannelAssetsDeletedByModeratorEventsByEventIdsQuery, + GetChannelAssetsDeletedByModeratorEventsByEventIdsQueryVariables, + GetChannelById, + GetChannelByIdQuery, + GetChannelByIdQueryVariables, + GetChannelFundsWithdrawnEventsByEventIds, + GetChannelFundsWithdrawnEventsByEventIdsQuery, + GetChannelFundsWithdrawnEventsByEventIdsQueryVariables, + GetChannelNftCollectors, + GetChannelNftCollectorsQuery, + GetChannelNftCollectorsQueryVariables, + GetChannelPaymentMadeEventsByEventIds, + GetChannelPaymentMadeEventsByEventIdsQuery, + GetChannelPaymentMadeEventsByEventIdsQueryVariables, + GetChannelRewardClaimedAndWithdrawnEventsByEventIds, + GetChannelRewardClaimedAndWithdrawnEventsByEventIdsQuery, + GetChannelRewardClaimedAndWithdrawnEventsByEventIdsQueryVariables, + GetChannelRewardClaimedEventsByEventIds, + GetChannelRewardClaimedEventsByEventIdsQuery, + GetChannelRewardClaimedEventsByEventIdsQueryVariables, + GetChannelsByIds, + GetChannelsByIdsQuery, + GetChannelsByIdsQueryVariables, + GetChannelsCount, + GetChannelsCountQuery, + GetChannelsCountQueryVariables, + GetCollaboratorsByChannelId, + GetCollaboratorsByChannelIdQuery, + GetCollaboratorsByChannelIdQueryVariables, + GetCommentCreatedEventsByEventIds, + GetCommentCreatedEventsByEventIdsQuery, + GetCommentCreatedEventsByEventIdsQueryVariables, + GetCommentDeletedEventsByEventIds, + GetCommentDeletedEventsByEventIdsQuery, + GetCommentDeletedEventsByEventIdsQueryVariables, + GetCommentEditedEventsByEventIds, + GetCommentEditedEventsByEventIdsQuery, + GetCommentEditedEventsByEventIdsQueryVariables, + GetCommentModeratedEventsByEventIds, + GetCommentModeratedEventsByEventIdsQuery, + GetCommentModeratedEventsByEventIdsQueryVariables, + GetCommentPinnedEventsByEventIds, + GetCommentPinnedEventsByEventIdsQuery, + GetCommentPinnedEventsByEventIdsQueryVariables, + GetCommentReactedEventsByEventIds, + GetCommentReactedEventsByEventIdsQuery, + GetCommentReactedEventsByEventIdsQueryVariables, + GetCommentsByIds, + GetCommentsByIdsQuery, + GetCommentsByIdsQueryVariables, + GetCouncilBudgetFundedEventsByEventIds, + GetCouncilBudgetFundedEventsByEventIdsQuery, + GetCouncilBudgetFundedEventsByEventIdsQueryVariables, + GetCuratorPermissionsByIdAndGroupId, + GetCuratorPermissionsByIdAndGroupIdQuery, + GetCuratorPermissionsByIdAndGroupIdQueryVariables, + GetCurrentCouncilMembers, + GetCurrentCouncilMembersQuery, + GetCurrentCouncilMembersQueryVariables, + GetDataObjectsByChannelId, + GetDataObjectsByChannelIdQuery, + GetDataObjectsByChannelIdQueryVariables, + GetDataObjectsByVideoId, + GetDataObjectsByVideoIdQuery, + GetDataObjectsByVideoIdQueryVariables, + GetDistributionFamiliesAdndBuckets, + GetDistributionFamiliesAdndBucketsQuery, + GetDistributionFamiliesAdndBucketsQueryVariables, + GetEnglishAuctionSettledEventsByEventIds, + GetEnglishAuctionSettledEventsByEventIdsQuery, + GetEnglishAuctionSettledEventsByEventIdsQueryVariables, + GetEnglishAuctionStartedEventsByEventIds, + GetEnglishAuctionStartedEventsByEventIdsQuery, + GetEnglishAuctionStartedEventsByEventIdsQueryVariables, + GetInitialInvitationBalanceUpdatedEventsByEventId, + GetInitialInvitationBalanceUpdatedEventsByEventIdQuery, + GetInitialInvitationBalanceUpdatedEventsByEventIdQueryVariables, + GetInitialInvitationCountUpdatedEventsByEventId, + GetInitialInvitationCountUpdatedEventsByEventIdQuery, + GetInitialInvitationCountUpdatedEventsByEventIdQueryVariables, + GetInvitesTransferredEventsBySourceMemberId, + GetInvitesTransferredEventsBySourceMemberIdQuery, + GetInvitesTransferredEventsBySourceMemberIdQueryVariables, + GetLeaderSetEventsByEventIds, + GetLeaderSetEventsByEventIdsQuery, + GetLeaderSetEventsByEventIdsQueryVariables, + GetLeaderUnsetEventsByEventIds, + GetLeaderUnsetEventsByEventIdsQuery, + GetLeaderUnsetEventsByEventIdsQueryVariables, + GetMemberAccountsUpdatedEventsByMemberId, + GetMemberAccountsUpdatedEventsByMemberIdQuery, + GetMemberAccountsUpdatedEventsByMemberIdQueryVariables, + GetMemberBannedFromChannelEventsByEventIds, + GetMemberBannedFromChannelEventsByEventIdsQuery, + GetMemberBannedFromChannelEventsByEventIdsQueryVariables, + GetMemberById, + GetMemberByIdQuery, + GetMemberByIdQueryVariables, + GetMemberCreatedEventsByEventIds, + GetMemberCreatedEventsByEventIdsQuery, + GetMemberCreatedEventsByEventIdsQueryVariables, + GetMemberInvitedEventsByEventIds, + GetMemberInvitedEventsByEventIdsQuery, + GetMemberInvitedEventsByEventIdsQueryVariables, + GetMemberProfileUpdatedEventsByMemberId, + GetMemberProfileUpdatedEventsByMemberIdQuery, + GetMemberProfileUpdatedEventsByMemberIdQueryVariables, + GetMemberVerificationStatusUpdatedEventsByEventIds, + GetMemberVerificationStatusUpdatedEventsByEventIdsQuery, + GetMemberVerificationStatusUpdatedEventsByEventIdsQueryVariables, + GetMembersByIds, + GetMembersByIdsQuery, + GetMembersByIdsQueryVariables, + GetMembershipBoughtEventsByEventIds, + GetMembershipBoughtEventsByEventIdsQuery, + GetMembershipBoughtEventsByEventIdsQueryVariables, + GetMembershipGiftedEventsByEventIds, + GetMembershipGiftedEventsByEventIdsQuery, + GetMembershipGiftedEventsByEventIdsQueryVariables, + GetMembershipPriceUpdatedEventsByEventId, + GetMembershipPriceUpdatedEventsByEventIdQuery, + GetMembershipPriceUpdatedEventsByEventIdQueryVariables, + GetMetaprotocolTransactionalStatusEventsByEventIds, + GetMetaprotocolTransactionalStatusEventsByEventIdsQuery, + GetMetaprotocolTransactionalStatusEventsByEventIdsQueryVariables, + GetMostRecentChannelPayoutsUpdatedEvent, + GetMostRecentChannelPayoutsUpdatedEventQuery, + GetMostRecentChannelPayoutsUpdatedEventQueryVariables, + GetNftIssuedEventsByEventIds, + GetNftIssuedEventsByEventIdsQuery, + GetNftIssuedEventsByEventIdsQueryVariables, + GetOpeningAddedEventsByEventIds, + GetOpeningAddedEventsByEventIdsQuery, + GetOpeningAddedEventsByEventIdsQueryVariables, + GetOpeningById, + GetOpeningByIdQuery, + GetOpeningByIdQueryVariables, + GetOpeningCancelledEventsByEventIds, + GetOpeningCancelledEventsByEventIdsQuery, + GetOpeningCancelledEventsByEventIdsQueryVariables, + GetOpeningFilledEventsByEventIds, + GetOpeningFilledEventsByEventIdsQuery, + GetOpeningFilledEventsByEventIdsQueryVariables, + GetOpeningsByIds, + GetOpeningsByIdsQuery, + GetOpeningsByIdsQueryVariables, + GetOwnedNftByVideoId, + GetOwnedNftByVideoIdQuery, + GetOwnedNftByVideoIdQueryVariables, + GetPostAddedEventsByEventIds, + GetPostAddedEventsByEventIdsQuery, + GetPostAddedEventsByEventIdsQueryVariables, + GetPostDeletedEventsByEventIds, + GetPostDeletedEventsByEventIdsQuery, + GetPostDeletedEventsByEventIdsQueryVariables, + GetPostModeratedEventsByEventIds, GetPostModeratedEventsByEventIdsQuery, GetPostModeratedEventsByEventIdsQueryVariables, - GetPostModeratedEventsByEventIds, - PostTextUpdatedEventFieldsFragment, + GetPostTextUpdatedEventsByEventIds, GetPostTextUpdatedEventsByEventIdsQuery, GetPostTextUpdatedEventsByEventIdsQueryVariables, - GetPostTextUpdatedEventsByEventIds, - PostDeletedEventFieldsFragment, - GetPostDeletedEventsByEventIdsQuery, - GetPostDeletedEventsByEventIdsQueryVariables, - GetPostDeletedEventsByEventIds, - CategoryArchivalStatusUpdatedEventFieldsFragment, - ProposalDiscussionPostCreatedEventFieldsFragment, + GetPostsByIds, + GetPostsByIdsQuery, + GetPostsByIdsQueryVariables, + GetProposalCancelledEventsByEventIds, + GetProposalCancelledEventsByEventIdsQuery, + GetProposalCancelledEventsByEventIdsQueryVariables, + GetProposalDiscussionPostCreatedEvents, GetProposalDiscussionPostCreatedEventsQuery, GetProposalDiscussionPostCreatedEventsQueryVariables, - GetProposalDiscussionPostCreatedEvents, - ProposalDiscussionPostUpdatedEventFieldsFragment, - GetProposalDiscussionPostUpdatedEventsQuery, - GetProposalDiscussionPostUpdatedEventsQueryVariables, - GetProposalDiscussionPostUpdatedEvents, - ProposalDiscussionThreadModeChangedEventFieldsFragment, - GetProposalDiscussionThreadModeChangedEventsQuery, - GetProposalDiscussionThreadModeChangedEventsQueryVariables, - GetProposalDiscussionThreadModeChangedEvents, - ProposalDiscussionPostDeletedEventFieldsFragment, + GetProposalDiscussionPostDeletedEvents, GetProposalDiscussionPostDeletedEventsQuery, GetProposalDiscussionPostDeletedEventsQueryVariables, - GetProposalDiscussionPostDeletedEvents, - ProposalDiscussionPostFieldsFragment, + GetProposalDiscussionPostUpdatedEvents, + GetProposalDiscussionPostUpdatedEventsQuery, + GetProposalDiscussionPostUpdatedEventsQueryVariables, + GetProposalDiscussionPostsByIds, GetProposalDiscussionPostsByIdsQuery, GetProposalDiscussionPostsByIdsQueryVariables, - GetProposalDiscussionPostsByIds, - ProposalDiscussionThreadFieldsFragment, + GetProposalDiscussionThreadModeChangedEvents, + GetProposalDiscussionThreadModeChangedEventsQuery, + GetProposalDiscussionThreadModeChangedEventsQueryVariables, + GetProposalDiscussionThreadsByIds, GetProposalDiscussionThreadsByIdsQuery, GetProposalDiscussionThreadsByIdsQueryVariables, - GetProposalDiscussionThreadsByIds, - GetChannelById, - GetChannelByIdQuery, - GetChannelByIdQueryVariables, - ChannelFieldsFragment, - GetChannelsByIds, - GetChannelsByIdsQuery, - GetChannelsByIdsQueryVariables, - VideoCategoryFieldsFragment, - GetVideoCategoryByIdQuery, - GetVideoCategoryByIdQueryVariables, - GetVideoCategoryById, + GetProposalVotedEventsByEventIds, + GetProposalVotedEventsByEventIdsQuery, + GetProposalVotedEventsByEventIdsQueryVariables, + GetProposalsByIds, + GetProposalsByIdsQuery, + GetProposalsByIdsQueryVariables, + GetReferendumIntermediateWinners, + GetReferendumIntermediateWinnersQuery, + GetReferendumIntermediateWinnersQueryVariables, + GetReferralCutUpdatedEventsByEventId, + GetReferralCutUpdatedEventsByEventIdQuery, + GetReferralCutUpdatedEventsByEventIdQueryVariables, + GetStakeDecreasedEventsByEventIds, + GetStakeDecreasedEventsByEventIdsQuery, + GetStakeDecreasedEventsByEventIdsQueryVariables, + GetStakeIncreasedEventsByEventIds, + GetStakeIncreasedEventsByEventIdsQuery, + GetStakeIncreasedEventsByEventIdsQueryVariables, + GetStakeSlashedEventsByEventIds, + GetStakeSlashedEventsByEventIdsQuery, + GetStakeSlashedEventsByEventIdsQueryVariables, + GetStakingAccountAddedEventsByEventIds, + GetStakingAccountAddedEventsByEventIdsQuery, + GetStakingAccountAddedEventsByEventIdsQueryVariables, + GetStakingAccountConfirmedEventsByEventIds, + GetStakingAccountConfirmedEventsByEventIdsQuery, + GetStakingAccountConfirmedEventsByEventIdsQueryVariables, + GetStakingAccountRemovedEventsByMemberId, + GetStakingAccountRemovedEventsByMemberIdQuery, + GetStakingAccountRemovedEventsByMemberIdQueryVariables, + GetStatusTextChangedEventsByEventIds, + GetStatusTextChangedEventsByEventIdsQuery, + GetStatusTextChangedEventsByEventIdsQueryVariables, + GetStorageBuckets, + GetStorageBucketsQuery, + GetStorageBucketsQueryVariables, + GetStorageNodesInfoByBagId, + GetStorageNodesInfoByBagIdQuery, + GetStorageNodesInfoByBagIdQueryVariables, + GetTerminatedLeaderEventsByEventIds, + GetTerminatedLeaderEventsByEventIdsQuery, + GetTerminatedLeaderEventsByEventIdsQueryVariables, + GetTerminatedWorkerEventsByEventIds, + GetTerminatedWorkerEventsByEventIdsQuery, + GetTerminatedWorkerEventsByEventIdsQueryVariables, + GetThreadCreatedEventsByEventIds, + GetThreadCreatedEventsByEventIdsQuery, + GetThreadCreatedEventsByEventIdsQueryVariables, + GetThreadDeletedEventsByEventIds, + GetThreadDeletedEventsByEventIdsQuery, + GetThreadDeletedEventsByEventIdsQueryVariables, + GetThreadMetadataUpdatedEventsByEventIds, + GetThreadMetadataUpdatedEventsByEventIdsQuery, + GetThreadMetadataUpdatedEventsByEventIdsQueryVariables, + GetThreadModeratedEventsByEventIds, + GetThreadModeratedEventsByEventIdsQuery, + GetThreadModeratedEventsByEventIdsQueryVariables, + GetThreadMovedEventsByEventIds, + GetThreadMovedEventsByEventIdsQuery, + GetThreadMovedEventsByEventIdsQueryVariables, + GetThreadsWithInitialPostsByIds, + GetThreadsWithInitialPostsByIdsQuery, + GetThreadsWithInitialPostsByIdsQueryVariables, + GetUpcomingOpeningById, + GetUpcomingOpeningByIdQuery, + GetUpcomingOpeningByIdQueryVariables, + GetUpcomingOpeningsByCreatedInEventIds, + GetUpcomingOpeningsByCreatedInEventIdsQuery, + GetUpcomingOpeningsByCreatedInEventIdsQueryVariables, + GetVideoAssetsDeletedByModeratorEventsByEventIds, + GetVideoAssetsDeletedByModeratorEventsByEventIdsQuery, + GetVideoAssetsDeletedByModeratorEventsByEventIdsQueryVariables, + GetVideoById, + GetVideoByIdQuery, + GetVideoByIdQueryVariables, + GetVideoCategories, GetVideoCategoriesQuery, GetVideoCategoriesQueryVariables, - GetVideoCategories, - OwnedNftFieldsFragment, - GetOwnedNftByVideoId, - GetOwnedNftByVideoIdQuery, - GetOwnedNftByVideoIdQueryVariables, - ChannelNftCollectorFieldsFragment, - GetChannelNftCollectorsQuery, - GetChannelNftCollectorsQueryVariables, - GetChannelNftCollectors, - MemberVerificationStatusUpdatedEventFieldsFragment, - GetMemberVerificationStatusUpdatedEventsByEventIdsQuery, - GetMemberVerificationStatusUpdatedEventsByEventIdsQueryVariables, - GetMemberVerificationStatusUpdatedEventsByEventIds, - CommentCreatedEventFieldsFragment, - GetCommentCreatedEventsByEventIdsQuery, - GetCommentCreatedEventsByEventIdsQueryVariables, - GetCommentCreatedEventsByEventIds, - GetCommentsByIds, - GetCommentsByIdsQuery, - GetCommentsByIdsQueryVariables, - CommentDeletedEventFieldsFragment, - GetCommentDeletedEventsByEventIdsQuery, - GetCommentDeletedEventsByEventIdsQueryVariables, - GetCommentDeletedEventsByEventIds, - VideoReactedEventFieldsFragment, + GetVideoCategoryById, + GetVideoCategoryByIdQuery, + GetVideoCategoryByIdQueryVariables, GetVideoReactedEventsByEventIds, GetVideoReactedEventsByEventIdsQuery, GetVideoReactedEventsByEventIdsQueryVariables, - CommentReactedEventFieldsFragment, - GetCommentReactedEventsByEventIds, - GetCommentReactedEventsByEventIdsQuery, - GetCommentReactedEventsByEventIdsQueryVariables, - MemberBannedFromChannelEventFieldsFragment, - GetMemberBannedFromChannelEventsByEventIdsQuery, - GetMemberBannedFromChannelEventsByEventIdsQueryVariables, - GetMemberBannedFromChannelEventsByEventIds, - VideoFieldsFragment, + GetVideoReactionsPreferenceEventsByEventIds, + GetVideoReactionsPreferenceEventsByEventIdsQuery, + GetVideoReactionsPreferenceEventsByEventIdsQueryVariables, + GetVideoVisibilitySetByModeratorEventsByEventIdsQuery, + GetVideoVisibilitySetByModeratorEventsByEventIdsQueryVariables, + GetVideosByIds, GetVideosByIdsQuery, GetVideosByIdsQueryVariables, - GetVideosByIds, - CommentPinnedEventFieldsFragment, - GetCommentPinnedEventsByEventIdsQuery, - GetCommentPinnedEventsByEventIdsQueryVariables, - GetCommentPinnedEventsByEventIds, - CommentTextUpdatedEventFieldsFragment, - GetCommentEditedEventsByEventIdsQuery, - GetCommentEditedEventsByEventIdsQueryVariables, - GetCommentEditedEventsByEventIds, - CommentModeratedEventFieldsFragment, - EnglishAuctionStartedEventFieldsFragment, - GetEnglishAuctionStartedEventsByEventIdsQuery, - GetEnglishAuctionStartedEventsByEventIdsQueryVariables, - GetEnglishAuctionStartedEventsByEventIds, - GetNftIssuedEventsByEventIds, + GetWorkerRewardAccountUpdatedEventsByEventIds, + GetWorkerRewardAccountUpdatedEventsByEventIdsQuery, + GetWorkerRewardAccountUpdatedEventsByEventIdsQueryVariables, + GetWorkerRewardAmountUpdatedEventsByEventIds, + GetWorkerRewardAmountUpdatedEventsByEventIdsQuery, + GetWorkerRewardAmountUpdatedEventsByEventIdsQueryVariables, + GetWorkerRoleAccountUpdatedEventsByEventIds, + GetWorkerRoleAccountUpdatedEventsByEventIdsQuery, + GetWorkerRoleAccountUpdatedEventsByEventIdsQueryVariables, + GetWorkerStartedLeavingEventsByEventIds, + GetWorkerStartedLeavingEventsByEventIdsQuery, + GetWorkerStartedLeavingEventsByEventIdsQueryVariables, + GetWorkersByRuntimeIds, + GetWorkersByRuntimeIdsQuery, + GetWorkersByRuntimeIdsQueryVariables, + GetWorkingGroupByName, + GetWorkingGroupByNameQuery, + GetWorkingGroupByNameQueryVariables, + GetWorkingGroupMetadataSnapshotsByTimeAsc, + GetWorkingGroupMetadataSnapshotsByTimeAscQuery, + GetWorkingGroupMetadataSnapshotsByTimeAscQueryVariables, + InitialInvitationBalanceUpdatedEventFieldsFragment, + InitialInvitationCountUpdatedEventFieldsFragment, + InvitesTransferredEventFieldsFragment, + LeaderSetEventFieldsFragment, + LeaderUnsetEventFieldsFragment, + MemberAccountsUpdatedEventFieldsFragment, + MemberBannedFromChannelEventFieldsFragment, + MemberCreatedEventFieldsFragment, + MemberInvitedEventFieldsFragment, + MemberProfileUpdatedEventFieldsFragment, + MemberVerificationStatusUpdatedEventFieldsFragment, + MembershipBoughtEventFieldsFragment, + MembershipFieldsFragment, + MembershipGiftedEventFieldsFragment, + MembershipPriceUpdatedEventFieldsFragment, + MetaprotocolTransactionStatusEventFieldsFragment, NftIssuedEventFieldsFragment, - GetNftIssuedEventsByEventIdsQuery, - GetNftIssuedEventsByEventIdsQueryVariables, - EnglishAuctionSettledEventFieldsFragment, - GetEnglishAuctionSettledEventsByEventIdsQuery, - GetEnglishAuctionSettledEventsByEventIdsQueryVariables, - GetEnglishAuctionSettledEventsByEventIds, - GetCommentModeratedEventsByEventIdsQuery, - GetCommentModeratedEventsByEventIdsQueryVariables, - GetCommentModeratedEventsByEventIds, - CommentFieldsFragment, - BidFieldsFragment, - GetBidsByMemberIdQuery, - GetBidsByMemberIdQueryVariables, - GetBidsByMemberId, - VideoDeletedByModeratorEventFieldsFragment, - GetVideoDeletedByModeratorEventsByEventIdsQuery, - GetVideoDeletedByModeratorEventsByEventIdsQueryVariables, - GetVideoDeletedByModeratorEventsByEventIds, - ChannelAssetsDeletedByModeratorEventFieldsFragment, - GetChannelAssetsDeletedByModeratorEventsByEventIdsQuery, - GetChannelAssetsDeletedByModeratorEventsByEventIdsQueryVariables, - GetChannelAssetsDeletedByModeratorEventsByEventIds, - VideoAssetsDeletedByModeratorEventFieldsFragment, - GetVideoAssetsDeletedByModeratorEventsByEventIdsQuery, - GetVideoAssetsDeletedByModeratorEventsByEventIdsQueryVariables, - GetVideoAssetsDeletedByModeratorEventsByEventIds, - VideoVisibilitySetByModeratorEventFieldsFragment, - GetVideoVisibilitySetByModeratorEventsByEventIdsQuery, - GetVideoVisibilitySetByModeratorEventsByEventIdsQueryVariables, - GetDataObjectsByVideoIdQuery, - GetDataObjectsByVideoIdQueryVariables, - GetDataObjectsByVideoId, + OpeningAddedEventFieldsFragment, + OpeningCanceledEventFieldsFragment, + OpeningFieldsFragment, + OpeningFilledEventFieldsFragment, + OwnedNftFieldsFragment, + PostAddedEventFieldsFragment, + PostDeletedEventFieldsFragment, + PostModeratedEventFieldsFragment, + PostTextUpdatedEventFieldsFragment, + ProposalCancelledEventFieldsFragment, + ProposalDiscussionPostCreatedEventFieldsFragment, + ProposalDiscussionPostDeletedEventFieldsFragment, + ProposalDiscussionPostFieldsFragment, + ProposalDiscussionPostUpdatedEventFieldsFragment, + ProposalDiscussionThreadFieldsFragment, + ProposalDiscussionThreadModeChangedEventFieldsFragment, + ProposalFieldsFragment, + ProposalVotedEventFieldsFragment, + ReferralCutUpdatedEventFieldsFragment, + StakeDecreasedEventFieldsFragment, + StakeIncreasedEventFieldsFragment, + StakeSlashedEventFieldsFragment, + StakingAccountAddedEventFieldsFragment, + StakingAccountConfirmedEventFieldsFragment, + StakingAccountRemovedEventFieldsFragment, + StatusTextChangedEventFieldsFragment, StorageDataObjectFieldsFragment, - CuratorAgentPermissionsFieldsFragment, - GetCuratorPermissionsByIdAndGroupId, - GetCuratorPermissionsByIdAndGroupIdQuery, - GetCuratorPermissionsByIdAndGroupIdQueryVariables, - CollaboratorsFieldsFragment, - GetCollaboratorsByChannelId, - GetCollaboratorsByChannelIdQuery, - GetCollaboratorsByChannelIdQueryVariables, - GetChannelDeletedByModeratorEventsByEventIdsQuery, - GetChannelDeletedByModeratorEventsByEventIdsQueryVariables, - GetChannelDeletedByModeratorEventsByEventIds, - ChannelDeletedByModeratorEventFieldsFragment, - VideoReactionsPreferenceEventFieldsFragment, - GetVideoReactionsPreferenceEventsByEventIdsQuery, - GetVideoReactionsPreferenceEventsByEventIdsQueryVariables, - GetVideoReactionsPreferenceEventsByEventIds, StorageNodeInfoFragment, - GetStorageBucketsQuery, - GetStorageBucketsQueryVariables, - GetStorageBuckets, - DistributionBucketFamilyFieldsFragment, - GetDistributionFamiliesAdndBucketsQuery, - GetDistributionFamiliesAdndBucketsQueryVariables, - GetDistributionFamiliesAdndBuckets, - GetVideoByIdQuery, - GetVideoByIdQueryVariables, - GetVideoById, - GetMostRecentChannelPayoutsUpdatedEventQueryVariables, - GetMostRecentChannelPayoutsUpdatedEventQuery, - GetMostRecentChannelPayoutsUpdatedEvent, - ChannelPayoutsUpdatedEventFragment, - CouncilBudgetFundedEventFieldsFragment, - GetCouncilBudgetFundedEventsByEventIdsQuery, - GetCouncilBudgetFundedEventsByEventIdsQueryVariables, - GetCouncilBudgetFundedEventsByEventIds, - ChannelRewardClaimedEventFieldsFragment, - GetChannelRewardClaimedEventsByEventIdsQuery, - GetChannelRewardClaimedEventsByEventIdsQueryVariables, - ChannelFundsWithdrawnEventFieldsFragment, - GetChannelFundsWithdrawnEventsByEventIdsQuery, - GetChannelFundsWithdrawnEventsByEventIdsQueryVariables, - GetChannelFundsWithdrawnEventsByEventIds, - GetStorageNodesInfoByBagIdQuery, - GetStorageNodesInfoByBagIdQueryVariables, - GetStorageNodesInfoByBagId, - GetChannelRewardClaimedEventsByEventIds, - ChannelPaymentMadeEventFieldsFragment, - GetChannelPaymentMadeEventsByEventIdsQuery, - GetChannelPaymentMadeEventsByEventIdsQueryVariables, - GetChannelPaymentMadeEventsByEventIds, - MetaprotocolTransactionStatusEventFieldsFragment, - GetMetaprotocolTransactionalStatusEventsByEventIdsQuery, - GetMetaprotocolTransactionalStatusEventsByEventIdsQueryVariables, - GetMetaprotocolTransactionalStatusEventsByEventIds, - ChannelRewardClaimedAndWithdrawnEventFieldsFragment, - GetChannelRewardClaimedAndWithdrawnEventsByEventIdsQuery, - GetChannelRewardClaimedAndWithdrawnEventsByEventIdsQueryVariables, - GetChannelRewardClaimedAndWithdrawnEventsByEventIds, - GetAppByIdQuery, - GetAppByIdQueryVariables, - GetAppById, - AppFieldsFragment, - GetAppsByNameQuery, - GetAppsByNameQueryVariables, - GetAppsByName, - GetChannelsCount, - GetChannelsCountQuery, - GetChannelsCountQueryVariables, - BudgetFundedEventFieldsFragment, - GetBudgetFundedEventsByEventIdsQuery, - GetBudgetFundedEventsByEventIdsQueryVariables, - GetBudgetFundedEventsByEventIds, + TerminatedLeaderEventFieldsFragment, + TerminatedWorkerEventFieldsFragment, + ThreadCreatedEventFieldsFragment, + ThreadDeletedEventFieldsFragment, + ThreadMetadataUpdatedEventFieldsFragment, + ThreadModeratedEventFieldsFragment, + ThreadMovedEventFieldsFragment, + UpcomingOpeningFieldsFragment, + VideoAssetsDeletedByModeratorEventFieldsFragment, + VideoCategoryFieldsFragment, + VideoFieldsFragment, + VideoReactedEventFieldsFragment, + VideoReactionsPreferenceEventFieldsFragment, + VideoVisibilitySetByModeratorEventFieldsFragment, + WorkerFieldsFragment, + WorkerRewardAccountUpdatedEventFieldsFragment, + WorkerRewardAmountUpdatedEventFieldsFragment, + WorkerRoleAccountUpdatedEventFieldsFragment, + WorkerStartedLeavingEventFieldsFragment, + WorkingGroupFieldsFragment, + WorkingGroupMetadataFieldsFragment, } from './graphql/generated/queries' import { Maybe } from './graphql/generated/schema' -import { OperationDefinitionNode } from 'graphql' -import { BLOCKTIME } from './consts' +import { EventDetails, WorkingGroupModuleName } from './types' import { Utils } from './utils' export class QueryNodeApi { @@ -1297,6 +1292,14 @@ export class QueryNodeApi { ) } + public async dataObjectsByChannelId(channelId: string): Promise { + return this.multipleEntitiesQuery( + GetDataObjectsByChannelId, + { channelId }, + 'storageDataObjects' + ) + } + public async dataObjectsByVideoId(videoId: string): Promise { return this.multipleEntitiesQuery( GetDataObjectsByVideoId, @@ -1462,26 +1465,6 @@ export class QueryNodeApi { >(GetEnglishAuctionSettledEventsByEventIds, { eventIds }, 'englishAuctionSettledEvents') } - public async getVideoDeletedByModeratorEvents( - events: EventDetails[] - ): Promise { - const eventIds = events.map((e) => this.getQueryNodeEventId(e.blockNumber, e.indexInBlock)) - return this.multipleEntitiesQuery< - GetVideoDeletedByModeratorEventsByEventIdsQuery, - GetVideoDeletedByModeratorEventsByEventIdsQueryVariables - >(GetVideoDeletedByModeratorEventsByEventIds, { eventIds }, 'videoDeletedByModeratorEvents') - } - - public async getChannelDeletedByModeratorEvents( - events: EventDetails[] - ): Promise { - const eventIds = events.map((e) => this.getQueryNodeEventId(e.blockNumber, e.indexInBlock)) - return this.multipleEntitiesQuery< - GetChannelDeletedByModeratorEventsByEventIdsQuery, - GetChannelDeletedByModeratorEventsByEventIdsQueryVariables - >(GetChannelDeletedByModeratorEventsByEventIds, { eventIds }, 'channelDeletedByModeratorEvents') - } - public async getChannelAssetsDeletedByModeratorEvents( events: EventDetails[] ): Promise { diff --git a/tests/network-tests/src/consts.ts b/tests/network-tests/src/consts.ts index ed01eb2b79..9d8ea45eab 100644 --- a/tests/network-tests/src/consts.ts +++ b/tests/network-tests/src/consts.ts @@ -92,6 +92,7 @@ export const proposalTypeToProposalParamsKey = { 'VetoProposal': 'vetoProposalProposalParameters', 'UpdateGlobalNftLimit': 'updateGlobalNftLimitProposalParameters', 'UpdateChannelPayouts': 'updateChannelPayoutsProposalParameters', + 'SetPalletFozenStatus': 'setPalletFozenStatusProposalParameters', } as const type ProposalTypeToProposalParamsKeyMap = { [K in ProposalType]: keyof AugmentedConsts<'promise'>['proposalsCodex'] } diff --git a/tests/network-tests/src/fixtures/content/channelPayouts/ClaimAndWithdrawChannelRewardFixture.ts b/tests/network-tests/src/fixtures/content/channelPayouts/ClaimAndWithdrawChannelRewardFixture.ts deleted file mode 100644 index 31d0533826..0000000000 --- a/tests/network-tests/src/fixtures/content/channelPayouts/ClaimAndWithdrawChannelRewardFixture.ts +++ /dev/null @@ -1,85 +0,0 @@ -import { prepareClaimChannelRewardExtrinsicArgs } from '@joystream/js/content' -import { SubmittableExtrinsic } from '@polkadot/api/types' -import { ISubmittableResult } from '@polkadot/types/types/' -import { assert } from 'chai' -import { Utils } from '../../../utils' -import { Api } from '../../../Api' -import { StandardizedFixture } from '../../../Fixture' -import { - ChannelFieldsFragment, - ChannelRewardClaimedAndWithdrawnEventFieldsFragment, -} from '../../../graphql/generated/queries' -import { QueryNodeApi } from '../../../QueryNodeApi' -import { EventDetails, EventType } from '../../../types' -import { ClaimChannelRewardParams, getExpectedClaims } from './ClaimChannelRewardFixture' -import { BN } from 'bn.js' - -type ClaimAndWithdrawChannelRewardEventDetails = EventDetails> - -export class ClaimAndWithdrawChannelRewardFixture extends StandardizedFixture { - protected claimChannelRewardParams: ClaimChannelRewardParams[] - protected expectedClaims: string[] = [] - - public constructor(api: Api, query: QueryNodeApi, claimChannelRewardParams: ClaimChannelRewardParams[]) { - super(api, query) - this.claimChannelRewardParams = claimChannelRewardParams - } - - protected async getEventFromResult(result: ISubmittableResult): Promise { - return this.api.getEventDetails(result, 'content', 'ChannelRewardClaimedAndWithdrawn') - } - - protected async getSignerAccountOrAccounts(): Promise { - return await Promise.all( - this.claimChannelRewardParams.map(async ({ asMember }) => - (await this.api.query.members.membershipById(asMember)).unwrap().controllerAccount.toString() - ) - ) - } - - protected async getExtrinsics(): Promise[]> { - return this.claimChannelRewardParams.map((params) => { - // Prepare extrinsic arguments - const { pullPayment, proofElements } = prepareClaimChannelRewardExtrinsicArgs(params.payoutProof) - - return this.api.tx.content.claimAndWithdrawChannelReward({ Member: params.asMember }, proofElements, pullPayment) - }) - } - - protected assertQueryNodeEventIsValid(qEvent: ChannelRewardClaimedAndWithdrawnEventFieldsFragment, i: number): void { - const params = this.claimChannelRewardParams[i] - assert.equal(qEvent.channel.id, params.payoutProof.channelId.toString()) - assert.equal(qEvent.amount, this.expectedClaims[i]) - assert.equal(qEvent.account, this.extrinsics[i].signer.toString()) - } - - protected assertQueryNodeChannelsAreValid(qChannels: ChannelFieldsFragment[]): void { - this.claimChannelRewardParams.forEach((p) => { - const channelId = p.payoutProof.channelId.toString() - const qChannel = qChannels.find((c) => c.id === channelId) - Utils.assert(qChannel, `Channel not found by id: ${channelId}`) - assert.equal(qChannel.cumulativeRewardClaimed, p.payoutProof.cumulativeRewardEarned) - }) - } - - public async execute(): Promise { - this.expectedClaims = await getExpectedClaims(this.api, this.claimChannelRewardParams) - await super.execute() - // For now we assume all channels are member-owned - } - - async runQueryNodeChecks(): Promise { - await super.runQueryNodeChecks() - // Query the events - await this.query.tryQueryWithTimeout( - () => this.query.getChannelRewardClaimedAndWithdrawnEvents(this.events), - (qEvents) => this.assertQueryNodeEventsAreValid(qEvents) - ) - // Query the channels - const channelIds = this.claimChannelRewardParams.map((p) => p.payoutProof.channelId.toString()) - await this.query.tryQueryWithTimeout( - () => this.query.channelsByIds(channelIds), - (qChannels) => this.assertQueryNodeChannelsAreValid(qChannels) - ) - } -} diff --git a/tests/network-tests/src/fixtures/content/channelPayouts/index.ts b/tests/network-tests/src/fixtures/content/channelPayouts/index.ts index 090c8f9400..4dc7372f88 100644 --- a/tests/network-tests/src/fixtures/content/channelPayouts/index.ts +++ b/tests/network-tests/src/fixtures/content/channelPayouts/index.ts @@ -1,4 +1,3 @@ export * from './ClaimChannelRewardFixture' export * from './UpdateChannelPayoutsProposalFixture' export * from './WithdrawChannelRewardFixture' -export * from './ClaimAndWithdrawChannelRewardFixture' diff --git a/tests/network-tests/src/fixtures/content/createCuratorGroupFixture.ts b/tests/network-tests/src/fixtures/content/createCuratorGroupFixture.ts index cfb2ec9ffc..f633238396 100644 --- a/tests/network-tests/src/fixtures/content/createCuratorGroupFixture.ts +++ b/tests/network-tests/src/fixtures/content/createCuratorGroupFixture.ts @@ -33,7 +33,7 @@ export class CreateCuratorGroupFixture extends BaseQueryNodeFixture { return this.createdCuratorGroupId as CuratorGroupId } - protected async getContentWgLeadAccount(): Promise { + public async getContentWgLeadAccount(): Promise { const contentWgLead = await this.api.query.contentWorkingGroup.currentLead() if (contentWgLead.isNone) { throw new Error('Content working group lead not set!') diff --git a/tests/network-tests/src/fixtures/content/curatorModeration/DeleteChannelAsModerator.ts b/tests/network-tests/src/fixtures/content/curatorModeration/DeleteChannelAsModerator.ts deleted file mode 100644 index a1100ef5cc..0000000000 --- a/tests/network-tests/src/fixtures/content/curatorModeration/DeleteChannelAsModerator.ts +++ /dev/null @@ -1,71 +0,0 @@ -import { createType } from '@joystream/types' -import { WorkerId, CuratorGroupId } from '@joystream/types/primitives' -import { SubmittableExtrinsic } from '@polkadot/api/types' -import { ISubmittableResult } from '@polkadot/types/types/' -import { assert } from 'chai' -import { ChannelDeletedByModeratorEventFieldsFragment } from 'src/graphql/generated/queries' -import { Api } from '../../../Api' -import { StandardizedFixture } from '../../../Fixture' -import { QueryNodeApi } from '../../../QueryNodeApi' -import { EventDetails, EventType } from '../../../types' - -type ChannelDeletedByModeratorEventDetails = EventDetails> - -export type DeleteChannelAsModeratorParams = { - asCurator?: [CuratorGroupId, WorkerId] - channelId: number - numOfObjectsToDelete: number - rationale: string -} - -export class DeleteChannelAsModeratorFixture extends StandardizedFixture { - protected deleteChannelAsModeratorParams: DeleteChannelAsModeratorParams[] - - public constructor(api: Api, query: QueryNodeApi, deleteChannelAsModeratorParams: DeleteChannelAsModeratorParams[]) { - super(api, query) - this.deleteChannelAsModeratorParams = deleteChannelAsModeratorParams - } - - protected async getEventFromResult(result: ISubmittableResult): Promise { - return this.api.getEventDetails(result, 'content', 'ChannelDeletedByModerator') - } - - protected async getSignerAccountOrAccounts(): Promise { - return await Promise.all( - this.deleteChannelAsModeratorParams.map(async ({ asCurator }) => { - return asCurator - ? (await this.api.query.contentWorkingGroup.workerById(asCurator[1])).unwrap().roleAccountId.toString() - : await this.api.getLeadRoleKey('contentWorkingGroup') - }) - ) - } - - protected async getExtrinsics(): Promise[]> { - return Promise.all( - this.deleteChannelAsModeratorParams.map(async ({ asCurator, channelId, numOfObjectsToDelete, rationale }) => - this.api.tx.content.deleteChannelAsModerator( - createType('PalletContentPermissionsContentActor', asCurator ? { Curator: asCurator } : 'Lead'), - channelId, - await this.api.channelBagWitness(channelId), - numOfObjectsToDelete, - rationale - ) - ) - ) - } - - protected assertQueryNodeEventIsValid(qEvent: ChannelDeletedByModeratorEventFieldsFragment, i: number): void { - const params = this.deleteChannelAsModeratorParams[i] - assert.equal(qEvent.channelId, params.channelId) - assert.equal(qEvent.rationale, params.rationale) - } - - async runQueryNodeChecks(): Promise { - await super.runQueryNodeChecks() - // Query the events - await this.query.tryQueryWithTimeout( - () => this.query.getChannelDeletedByModeratorEvents(this.events), - (qEvents) => this.assertQueryNodeEventsAreValid(qEvents) - ) - } -} diff --git a/tests/network-tests/src/fixtures/content/curatorModeration/DeleteChannelAssetByModerator.ts b/tests/network-tests/src/fixtures/content/curatorModeration/DeleteChannelAssetByModerator.ts new file mode 100644 index 0000000000..b3778542a7 --- /dev/null +++ b/tests/network-tests/src/fixtures/content/curatorModeration/DeleteChannelAssetByModerator.ts @@ -0,0 +1,73 @@ +import { createType } from '@joystream/types' +import { CuratorGroupId, WorkerId } from '@joystream/types/primitives' +import { SubmittableExtrinsic } from '@polkadot/api/types' +import { ISubmittableResult } from '@polkadot/types/types/' +import { assert } from 'chai' +import { Api } from '../../../Api' +import { StandardizedFixture } from '../../../Fixture' +import { QueryNodeApi } from '../../../QueryNodeApi' +import { ChannelAssetsDeletedByModeratorEventFieldsFragment } from '../../../graphql/generated/queries' +import { EventDetails, EventType } from '../../../types' + +type ChannelAssetsDeletedByModeratorEventDetails = EventDetails> + +export type DeleteChannelAssetsAsModeratorParams = { + asCurator: [CuratorGroupId, WorkerId] + channelId: number + assetsToRemove: number[] + rationale: string +} + +export class DeleteChannelAssetsAsModeratorFixture extends StandardizedFixture { + protected deleteChannelAssetsAsModeratorParams: DeleteChannelAssetsAsModeratorParams[] + + public constructor( + api: Api, + query: QueryNodeApi, + deleteVideoAssetsAsModeratorParams: DeleteChannelAssetsAsModeratorParams[] + ) { + super(api, query) + this.deleteChannelAssetsAsModeratorParams = deleteVideoAssetsAsModeratorParams + } + + protected async getEventFromResult(result: ISubmittableResult): Promise { + return this.api.getEventDetails(result, 'content', 'ChannelAssetsDeletedByModerator') + } + + protected async getSignerAccountOrAccounts(): Promise { + return await Promise.all( + this.deleteChannelAssetsAsModeratorParams.map(async ({ asCurator }) => + (await this.api.query.contentWorkingGroup.workerById(asCurator[1])).unwrap().roleAccountId.toString() + ) + ) + } + + protected async getExtrinsics(): Promise[]> { + return Promise.all( + this.deleteChannelAssetsAsModeratorParams.map(async ({ asCurator, channelId, assetsToRemove, rationale }) => + this.api.tx.content.deleteChannelAssetsAsModerator( + createType('PalletContentPermissionsContentActor', { Curator: asCurator }), + channelId, + createType('BTreeSet', assetsToRemove), + await this.api.storageBucketsNumWitness(channelId), + rationale + ) + ) + ) + } + + protected assertQueryNodeEventIsValid(qEvent: ChannelAssetsDeletedByModeratorEventFieldsFragment, i: number): void { + const params = this.deleteChannelAssetsAsModeratorParams[i] + assert.equal(qEvent.channelId, params.channelId) + assert.equal(qEvent.rationale, params.rationale) + } + + async runQueryNodeChecks(): Promise { + await super.runQueryNodeChecks() + // Query the events + await this.query.tryQueryWithTimeout( + () => this.query.getChannelAssetsDeletedByModeratorEvents(this.events), + (qEvents) => this.assertQueryNodeEventsAreValid(qEvents) + ) + } +} diff --git a/tests/network-tests/src/fixtures/content/curatorModeration/DeleteVideoByModerator.ts b/tests/network-tests/src/fixtures/content/curatorModeration/DeleteVideoByModerator.ts deleted file mode 100644 index b4507afe1c..0000000000 --- a/tests/network-tests/src/fixtures/content/curatorModeration/DeleteVideoByModerator.ts +++ /dev/null @@ -1,69 +0,0 @@ -import { createType } from '@joystream/types' -import { WorkerId, CuratorGroupId } from '@joystream/types/primitives' -import { SubmittableExtrinsic } from '@polkadot/api/types' -import { ISubmittableResult } from '@polkadot/types/types/' -import { assert } from 'chai' -import { Api } from '../../../Api' -import { StandardizedFixture } from '../../../Fixture' -import { VideoDeletedByModeratorEventFieldsFragment } from '../../../graphql/generated/queries' -import { QueryNodeApi } from '../../../QueryNodeApi' -import { EventDetails, EventType } from '../../../types' - -type VideoDeletedByModeratorEventDetails = EventDetails> - -export type DeleteVideoAsModeratorParams = { - asCurator: [CuratorGroupId, WorkerId] - videoId: number - numOfObjectsToDelete: number - rationale: string -} - -export class DeleteVideoAsModeratorFixture extends StandardizedFixture { - protected deleteVideoAsModeratorParams: DeleteVideoAsModeratorParams[] - - public constructor(api: Api, query: QueryNodeApi, deleteVideoAsModeratorParams: DeleteVideoAsModeratorParams[]) { - super(api, query) - this.deleteVideoAsModeratorParams = deleteVideoAsModeratorParams - } - - protected async getEventFromResult(result: ISubmittableResult): Promise { - return this.api.getEventDetails(result, 'content', 'VideoDeletedByModerator') - } - - protected async getSignerAccountOrAccounts(): Promise { - return await Promise.all( - this.deleteVideoAsModeratorParams.map(async ({ asCurator }) => - (await this.api.query.contentWorkingGroup.workerById(asCurator[1])).unwrap().roleAccountId.toString() - ) - ) - } - - protected async getExtrinsics(): Promise[]> { - return Promise.all( - this.deleteVideoAsModeratorParams.map(async ({ asCurator, videoId, numOfObjectsToDelete, rationale }) => - this.api.tx.content.deleteVideoAsModerator( - createType('PalletContentPermissionsContentActor', { Curator: asCurator }), - videoId, - createType('Option', await this.api.storageBucketsNumWitnessByVideoId(videoId)), - numOfObjectsToDelete, - rationale - ) - ) - ) - } - - protected assertQueryNodeEventIsValid(qEvent: VideoDeletedByModeratorEventFieldsFragment, i: number): void { - const params = this.deleteVideoAsModeratorParams[i] - assert.equal(qEvent.videoId, params.videoId) - assert.equal(qEvent.rationale, params.rationale) - } - - async runQueryNodeChecks(): Promise { - await super.runQueryNodeChecks() - // Query the events - await this.query.tryQueryWithTimeout( - () => this.query.getVideoDeletedByModeratorEvents(this.events), - (qEvents) => this.assertQueryNodeEventsAreValid(qEvents) - ) - } -} diff --git a/tests/network-tests/src/flows/content/collaboratorAndCuratorPermissions.ts b/tests/network-tests/src/flows/content/collaboratorAndCuratorPermissions.ts index 005f26bc1a..840636b79c 100644 --- a/tests/network-tests/src/flows/content/collaboratorAndCuratorPermissions.ts +++ b/tests/network-tests/src/flows/content/collaboratorAndCuratorPermissions.ts @@ -12,7 +12,6 @@ import { DeleteChannelWithVideosFixture, UpdateChannelCollaboratorsFixture, } from '../../fixtures/content' -import { DeleteChannelAsModeratorFixture } from '../../fixtures/content/curatorModeration/DeleteChannelAsModerator' import { createJoystreamCli } from '../utils' export default async function collaboratorCuratorPermissions({ api, query }: FlowProps): Promise { @@ -110,11 +109,5 @@ export default async function collaboratorCuratorPermissions({ api, query }: Flo const deleteChannelWithVideosFixture = new DeleteChannelWithVideosFixture(api, query, joystreamCli, [channelIds[0]]) await new FixtureRunner(deleteChannelWithVideosFixture).run() - // Delete channel as moderator (to ensure all referencing relations are properly removed without causing QN processor crash) - const deleteChannelAsModeratorFixture = new DeleteChannelAsModeratorFixture(api, query, [ - { channelId: channelIds[1], rationale: 'Test', numOfObjectsToDelete: 2 }, - ]) - await new FixtureRunner(deleteChannelAsModeratorFixture).runWithQueryNodeChecks() - debug('Done') } diff --git a/tests/network-tests/src/flows/content/commentsAndReactions.ts b/tests/network-tests/src/flows/content/commentsAndReactions.ts index 5f87b6188a..4c22db6afe 100644 --- a/tests/network-tests/src/flows/content/commentsAndReactions.ts +++ b/tests/network-tests/src/flows/content/commentsAndReactions.ts @@ -3,28 +3,27 @@ import BN from 'bn.js' import Long from 'long' import { extendDebug } from '../../Debugger' import { FixtureRunner } from '../../Fixture' +import { FlowProps } from '../../Flow' import { + BanOrUnbanMemberParams, + BanOrUnbanMembersFixture, CreateChannelsAndVideosFixture, CreateCommentParams, CreateCommentsFixture, CreateContentStructureFixture, CreateMembersFixture, + DeleteChannelWithVideosFixture, DeleteCommentParams, DeleteCommentsFixture, - ReactCommentParams, - ReactToCommentsFixture, - ReactToVideosFixture, - ReactVideoParams, EditCommentParams, EditCommentsFixture, ModerateCommentParams, ModerateCommentsFixture, - DeleteChannelWithVideosFixture, - BanOrUnbanMemberParams, - BanOrUnbanMembersFixture, + ReactCommentParams, + ReactToCommentsFixture, + ReactToVideosFixture, + ReactVideoParams, } from '../../fixtures/content' -import { DeleteChannelAsModeratorFixture } from '../../fixtures/content/curatorModeration/DeleteChannelAsModerator' -import { FlowProps } from '../../Flow' import { createJoystreamCli } from '../utils' export default async function commentsAndReactions({ api, query }: FlowProps): Promise { @@ -288,11 +287,5 @@ export default async function commentsAndReactions({ api, query }: FlowProps): P const deleteChannelWithVideosFixture = new DeleteChannelWithVideosFixture(api, query, joystreamCli, [channelIds[0]]) await new FixtureRunner(deleteChannelWithVideosFixture).run() - // Delete channel as moderator (to ensure all referencing relations are properly removed without causing QN processor crash) - const deleteChannelAsModeratorFixture = new DeleteChannelAsModeratorFixture(api, query, [ - { channelId: channelIds[1], rationale: 'Test', numOfObjectsToDelete: 2 }, - ]) - await new FixtureRunner(deleteChannelAsModeratorFixture).runWithQueryNodeChecks() - debug('Done') } diff --git a/tests/network-tests/src/flows/content/curatorModerationActions.ts b/tests/network-tests/src/flows/content/curatorModerationActions.ts index b4948e80f5..0949069737 100644 --- a/tests/network-tests/src/flows/content/curatorModerationActions.ts +++ b/tests/network-tests/src/flows/content/curatorModerationActions.ts @@ -1,33 +1,30 @@ import BN from 'bn.js' -import { - AddCuratorToCuratorGroupFixture, - AddCuratorToGroupParams, -} from '../../fixtures/content/collaboratorAndCurator/addCuratorsToCuratorGroupFixture' -import { CreateCuratorGroupFixture, CuratorGroupParams } from '../../fixtures/content/createCuratorGroupFixture' import { extendDebug } from '../../Debugger' import { FixtureRunner } from '../../Fixture' +import { FlowProps } from '../../Flow' import { CreateChannelsAndVideosFixture, CreateContentStructureFixture, CreateMembersFixture, } from '../../fixtures/content' -import { FlowProps } from '../../Flow' -import { createJoystreamCli } from '../utils' import { - DeleteVideoAsModeratorFixture, - DeleteVideoAsModeratorParams, -} from '../../fixtures/content/curatorModeration/DeleteVideoByModerator' + AddCuratorToCuratorGroupFixture, + AddCuratorToGroupParams, +} from '../../fixtures/content/collaboratorAndCurator/addCuratorsToCuratorGroupFixture' +import { CreateCuratorGroupFixture, CuratorGroupParams } from '../../fixtures/content/createCuratorGroupFixture' +import { + DeleteChannelAssetsAsModeratorFixture, + DeleteChannelAssetsAsModeratorParams, +} from '../../fixtures/content/curatorModeration/DeleteChannelAssetByModerator' import { DeleteVideoAssetsAsModeratorFixture, DeleteVideoAssetsAsModeratorParams, } from '../../fixtures/content/curatorModeration/DeleteVideoAssetsByModerator' -import { - DeleteChannelAsModeratorFixture, - DeleteChannelAsModeratorParams, -} from '../../fixtures/content/curatorModeration/DeleteChannelAsModerator' +import { createJoystreamCli } from '../utils' + import sleep from 'sleep-promise' -export default async function curatorModerationActions({ api, query, env }: FlowProps): Promise { +export default async function curatorModerationActions({ api, query }: FlowProps): Promise { const debug = extendDebug('flow:curator-moderation-actions') debug('Started') api.enableDebugTxLogs() @@ -78,6 +75,9 @@ export default async function curatorModerationActions({ api, query, env }: Flow const { channelIds, videosData } = createChannelsAndVideos.getCreatedItems() + // Allow time for processor to process videos created + await sleep(10 * 1000) + // create curator & curator group const createCuratorGroupParams: CuratorGroupParams[] = [ @@ -86,7 +86,7 @@ export default async function curatorModerationActions({ api, query, env }: Flow permissionsByLevel: [ { channelPrivilegeLevel: 0, - contentModerationActionSet: ['DeleteChannel', 'DeleteVideo', 'DeleteVideoAssets'], + contentModerationActionSet: ['DeleteVideoAssets', 'DeleteNonVideoChannelAssets'], permissionToDeleteNftAssets: false, }, ], @@ -115,34 +115,40 @@ export default async function curatorModerationActions({ api, query, env }: Flow // test curator moderation actions /** - * delete video as moderator + * delete channel assets as moderator */ - const numOfVideoObjectsToDelete = (await query.dataObjectsByVideoId(videosData[0].videoId.toString())).length - const deleteVideoAsModeratorParams: DeleteVideoAsModeratorParams[] = [ + const channelAssetsToRemove = (await query.dataObjectsByChannelId(channelIds[0].toString())).map(({ id }) => + Number(id) + ) + const deleteChannelAssetsAsModeratorParams: DeleteChannelAssetsAsModeratorParams[] = [ { asCurator: [curatorGroupId, curatorId], - videoId: videosData[0].videoId, // first video - numOfObjectsToDelete: numOfVideoObjectsToDelete, - rationale: 'Deleted video due to offensive content', + channelId: channelIds[0], // first channel + assetsToRemove: channelAssetsToRemove, + rationale: 'Deleted channel assets due to pirated content', }, ] - const deleteVideoAsModeratorFixture = new DeleteVideoAsModeratorFixture(api, query, deleteVideoAsModeratorParams) - await new FixtureRunner(deleteVideoAsModeratorFixture).runWithQueryNodeChecks() + const deleteChannelAssetsAsModeratorFixture = new DeleteChannelAssetsAsModeratorFixture( + api, + query, + deleteChannelAssetsAsModeratorParams + ) + await new FixtureRunner(deleteChannelAssetsAsModeratorFixture).runWithQueryNodeChecks() /** * delete video assets as moderator */ - const assetsToRemove = (await query.dataObjectsByVideoId(videosData[1].videoId.toString())).map(({ id }) => + const videoAssetsToRemove = (await query.dataObjectsByVideoId(videosData[1].videoId.toString())).map(({ id }) => Number(id) ) const deleteVideoAssetsAsModeratorParams: DeleteVideoAssetsAsModeratorParams[] = [ { asCurator: [curatorGroupId, curatorId], videoId: videosData[1].videoId, // second video - assetsToRemove, + assetsToRemove: videoAssetsToRemove, rationale: 'Deleted video assets due to pirated content', }, ] @@ -154,42 +160,5 @@ export default async function curatorModerationActions({ api, query, env }: Flow ) await new FixtureRunner(deleteVideoAssetsAsModeratorFixture).runWithQueryNodeChecks() - /** - * delete channel as moderator - */ - - // delete other video as well because for channel to be deleted, it should have no video - const deleteSecondVideoAsModeratorParams: DeleteVideoAsModeratorParams[] = [ - { - asCurator: [curatorGroupId, curatorId], - videoId: videosData[1].videoId, // second video - numOfObjectsToDelete: 0, - rationale: 'Deleted 2nd video', - }, - ] - - const deleteSecondVideoAsModeratorFixture = new DeleteVideoAsModeratorFixture( - api, - query, - deleteSecondVideoAsModeratorParams - ) - await new FixtureRunner(deleteSecondVideoAsModeratorFixture).runWithQueryNodeChecks() - - const deleteChannelAsModeratorParams: DeleteChannelAsModeratorParams[] = [ - { - asCurator: [curatorGroupId, curatorId], - channelId: channelIds[0], - numOfObjectsToDelete: 2, - rationale: 'Deleted channel due to repeated violations of ToS', - }, - ] - - const deleteChannelAsModeratorFixture = new DeleteChannelAsModeratorFixture( - api, - query, - deleteChannelAsModeratorParams - ) - await new FixtureRunner(deleteChannelAsModeratorFixture).runWithQueryNodeChecks() - debug('Done') } diff --git a/tests/network-tests/src/flows/council/electOnlyIfNoElected.ts b/tests/network-tests/src/flows/council/electOnlyIfNoElected.ts new file mode 100644 index 0000000000..f4742a6f59 --- /dev/null +++ b/tests/network-tests/src/flows/council/electOnlyIfNoElected.ts @@ -0,0 +1,19 @@ +import { FlowProps } from '../../Flow' +import { extendDebug } from '../../Debugger' +import { FixtureRunner } from '../../Fixture' +import { ElectCouncilFixture } from '../../fixtures/council/ElectCouncilFixture' + +export default async function electCouncil({ api, query }: FlowProps): Promise { + const debug = extendDebug('flow:elect-council-if-no-members') + debug('Started') + api.enableDebugTxLogs() + + const councilMembers = await api.query.council.councilMembers() + if (councilMembers.length === 0) { + const electCouncilFixture = new ElectCouncilFixture(api, query) + await new FixtureRunner(electCouncilFixture).run() + } else { + debug('Council exists, not electing new council.') + } + debug('Done') +} diff --git a/tests/network-tests/src/flows/proposals/channelPayouts.ts b/tests/network-tests/src/flows/proposals/channelPayouts.ts index b4ecd575dc..3447f54d7c 100644 --- a/tests/network-tests/src/flows/proposals/channelPayouts.ts +++ b/tests/network-tests/src/flows/proposals/channelPayouts.ts @@ -5,7 +5,6 @@ import { getChannelDefaults } from '../../fixtures/content/contentTemplates' import { extendDebug } from '../../Debugger' import { FixtureRunner } from '../../Fixture' import { - ClaimAndWithdrawChannelRewardFixture, ClaimChannelRewardFixture, ClaimChannelRewardParams, cliExamplesFolderPath, @@ -146,30 +145,20 @@ export default async function channelPayouts({ api, query, lock }: FlowProps): P }, ] - // If it's the the 2nd attempt, we'll use claimAndWithdraw tx - if (i === 2) { - const claimAndWithdrawChannelRewardFixture = new ClaimAndWithdrawChannelRewardFixture( - api, - query, - claimChannelRewardParams - ) - await new FixtureRunner(claimAndWithdrawChannelRewardFixture).runWithQueryNodeChecks() - } else { - // Otherwise we claim and withdraw separately - const claimChannelRewardFixture = new ClaimChannelRewardFixture(api, query, claimChannelRewardParams) - await new FixtureRunner(claimChannelRewardFixture).runWithQueryNodeChecks() - - // Withdraw channel reward to destination account - const withdrawChannelRewardParams: WithdrawChannelRewardParams[] = [ - { - asMember: channelOwner.memberId, - channelId: rewardChannelId, - amount: minCashout, - }, - ] - const withdrawChannelRewardFixture = new WithdrawChannelRewardFixture(api, query, withdrawChannelRewardParams) - await new FixtureRunner(withdrawChannelRewardFixture).runWithQueryNodeChecks() - } + // Otherwise we claim and withdraw separately + const claimChannelRewardFixture = new ClaimChannelRewardFixture(api, query, claimChannelRewardParams) + await new FixtureRunner(claimChannelRewardFixture).runWithQueryNodeChecks() + + // Withdraw channel reward to destination account + const withdrawChannelRewardParams: WithdrawChannelRewardParams[] = [ + { + asMember: channelOwner.memberId, + channelId: rewardChannelId, + amount: minCashout, + }, + ] + const withdrawChannelRewardFixture = new WithdrawChannelRewardFixture(api, query, withdrawChannelRewardParams) + await new FixtureRunner(withdrawChannelRewardFixture).runWithQueryNodeChecks() } unlock() diff --git a/tests/network-tests/src/flows/proposals/index.ts b/tests/network-tests/src/flows/proposals/index.ts index cb2b58a0ba..e42a904c23 100644 --- a/tests/network-tests/src/flows/proposals/index.ts +++ b/tests/network-tests/src/flows/proposals/index.ts @@ -157,6 +157,12 @@ export default async function creatingProposals({ api, query, lock }: FlowProps) }, }), }, + { + // Setting freeze status to false incase other tests need pallet to not be frozen + details: createType('PalletProposalsCodexProposalDetails', { + SetPalletFozenStatus: [false, 'ProjectToken'], + }), + }, ] const testAllOutcomesFixture = new AllProposalsOutcomesFixture(api, query, lock, proposalsToTest) diff --git a/tests/network-tests/src/flows/storage/storageSync.ts b/tests/network-tests/src/flows/storage/storageSync.ts index 6eb6f95c96..29d97baef6 100644 --- a/tests/network-tests/src/flows/storage/storageSync.ts +++ b/tests/network-tests/src/flows/storage/storageSync.ts @@ -24,7 +24,8 @@ export async function storageSync({ api, query }: FlowProps): Promise { await new FixtureRunner(buyMembershipFixture).run() const [memberId] = buyMembershipFixture.getCreatedMembers() - // Create 10_000 channels + const existingChannelCount = await query.getChannelsCount() + // Create channels const storageBuckets = (await api.query.storage.storageBucketById.keys()).map((k) => k.args[0]) const distributionBucketFamilies = (await api.query.storage.distributionBucketFamilyById.keys()).map((k) => k.args[0]) const distributionBuckets = ( @@ -41,10 +42,16 @@ export async function storageSync({ api, query }: FlowProps): Promise { ).flat() const expectedChannelStateBloatBond = await api.getChannelStateBloatBond() const expectedDataObjectStateBloatBond = await api.getDataObjectStateBloatBond() - await api.treasuryTransferBalance(memberAddr, new BN(expectedChannelStateBloatBond).muln(10_000)) - for (let i = 1; i <= 10; ++i) { - debug(`Creating channel batch no. ${i} (${i * 1000} / 10000)`) - const createChannelTxBatch = Array.from({ length: 1000 }, () => + const numberOfBatches = 5 + const channelsPerBatch = 1000 + // Make sure the treasury has enough funds to cover the expected channel state bloat bond and some extra + await api.treasuryTransferBalance( + memberAddr, + new BN(expectedChannelStateBloatBond).muln(channelsPerBatch * numberOfBatches * 1.1) + ) + for (let i = 1; i <= numberOfBatches; ++i) { + debug(`Creating channel batch no. ${i} (${i * channelsPerBatch} / ${channelsPerBatch * numberOfBatches})`) + const createChannelTxBatch = Array.from({ length: channelsPerBatch }, () => api.tx.content.createChannel( createType('PalletContentChannelOwner', { Member: memberId }), createType('PalletContentChannelCreationParametersRecord', { @@ -62,13 +69,12 @@ export async function storageSync({ api, query }: FlowProps): Promise { await api.sendExtrinsicsAndGetResults(createChannelTxBatch, memberAddr) } - debug('Waiting until the query node processes 10_000 channels...') - // Make sure there are indeed 10_000 channels processed by the QN + debug('Waiting until the query node processes all new channels...') await query.tryQueryWithTimeout( () => query.getChannelsCount(), - (r) => assert.equal(r, 10_000), + (r) => assert.equal(r, existingChannelCount + numberOfBatches * channelsPerBatch), 10_000, - 42 // 10s * 42 = 420s = 7 minutes timeout + 50 // 10s * 50 = 500s = 8.33 minutes timeout ) // Create channel w/ some data objects diff --git a/tests/network-tests/src/graphql/queries/content.graphql b/tests/network-tests/src/graphql/queries/content.graphql index b836248c5f..3e2f565f3b 100644 --- a/tests/network-tests/src/graphql/queries/content.graphql +++ b/tests/network-tests/src/graphql/queries/content.graphql @@ -391,6 +391,12 @@ query getChannelNftCollectors { } } +query getDataObjectsByChannelId($channelId: ID) { + storageDataObjects(where: { type_json: { channelId_eq: $channelId } }) { + ...StorageDataObjectFields + } +} + query getDataObjectsByVideoId($videoId: ID) { storageDataObjects(where: { type_json: { videoId_eq: $videoId } }) { ...StorageDataObjectFields diff --git a/tests/network-tests/src/graphql/queries/contentEvents.graphql b/tests/network-tests/src/graphql/queries/contentEvents.graphql index e9294066de..8b507139b1 100644 --- a/tests/network-tests/src/graphql/queries/contentEvents.graphql +++ b/tests/network-tests/src/graphql/queries/contentEvents.graphql @@ -183,40 +183,6 @@ query getVideoReactionsPreferenceEventsByEventIds($eventIds: [ID!]) { } } -fragment VideoDeletedByModeratorEventFields on VideoDeletedByModeratorEvent { - id - createdAt - inBlock - network - inExtrinsic - indexInBlock - videoId - rationale -} - -query getVideoDeletedByModeratorEventsByEventIds($eventIds: [ID!]) { - videoDeletedByModeratorEvents(where: { id_in: $eventIds }) { - ...VideoDeletedByModeratorEventFields - } -} - -fragment ChannelDeletedByModeratorEventFields on ChannelDeletedByModeratorEvent { - id - createdAt - inBlock - network - inExtrinsic - indexInBlock - channelId - rationale -} - -query getChannelDeletedByModeratorEventsByEventIds($eventIds: [ID!]) { - channelDeletedByModeratorEvents(where: { id_in: $eventIds }) { - ...ChannelDeletedByModeratorEventFields - } -} - fragment ChannelAssetsDeletedByModeratorEventFields on ChannelAssetsDeletedByModeratorEvent { id createdAt diff --git a/tests/network-tests/src/misc/forkOffChecks.ts b/tests/network-tests/src/misc/forkOffChecks.ts index 937f00bea2..b22a28b0c2 100644 --- a/tests/network-tests/src/misc/forkOffChecks.ts +++ b/tests/network-tests/src/misc/forkOffChecks.ts @@ -10,11 +10,9 @@ export default async function assertValues({ api }: FlowProps): Promise { debug('Check that storage values have been successfully cloned into chainspec') const nextMemberId = (await api.query.members.nextMemberId()).toBn() const nextVideoId = (await api.query.content.nextVideoId()).toBn() - const councilors = await api.query.council.councilMembers() assert(nextMemberId > new BN(1000), 'next member id') assert(nextVideoId > new BN(100), 'next video id') - // assert(councilors.length === 0, 'council is not empty') debug('Done') } diff --git a/tests/network-tests/src/misc/postRuntimUpdateChecks.ts b/tests/network-tests/src/misc/postRuntimUpdateChecks.ts deleted file mode 100644 index 3ed99a7d39..0000000000 --- a/tests/network-tests/src/misc/postRuntimUpdateChecks.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { assert } from 'chai' -import { FlowProps } from '../Flow' -import { extendDebug } from '../Debugger' - -export default async function assertValues({ api }: FlowProps): Promise { - const debug = extendDebug('flow:postMigrationAssertions') - debug('Started') - - debug('Check runtime spec version') - const version = await api.rpc.state.getRuntimeVersion() - assert.equal(version.specVersion.toNumber(), 2001) - - debug('Done') -} diff --git a/tests/network-tests/src/misc/postRuntimeUpgrade.ts b/tests/network-tests/src/misc/postRuntimeUpgrade.ts new file mode 100644 index 0000000000..231c0a4e3b --- /dev/null +++ b/tests/network-tests/src/misc/postRuntimeUpgrade.ts @@ -0,0 +1,68 @@ +import { assert } from 'chai' +import { FlowProps } from '../Flow' +import { extendDebug } from '../Debugger' +import type { u32 } from '@polkadot/types-codec' +import { createType } from '@joystream/types' + +export default async function assertValues({ api }: FlowProps): Promise { + const debug = extendDebug('flow:postRuntimeUpdateChecks') + debug('Started') + + debug('Check runtime spec version') + const version = await api.rpc.state.getRuntimeVersion() + assert.equal(version.specVersion.toNumber(), 2002) + + debug('Check forum sub category limit') + const subCategoryLimit = api.consts.forum.maxDirectSubcategoriesInCategory.toNumber() + assert.equal(subCategoryLimit, 10) + + debug('Check workers limit') + for (const group of ['storageWorkingGroup', 'distributionWorkingGroup']) { + const workerLimit = (api.consts[group].maxWorkerNumberLimit as u32).toNumber() + assert.equal(workerLimit, 50, `${group} invalid limit of workers`) + } + + for (const group of [ + 'forumWorkingGroup', + 'contentWorkingGroup', + 'membershipWorkingGroup', + 'appWorkingGroup', + 'operationsWorkingGroupAlpha', + 'operationsWorkingGroupBeta', + 'operationsWorkingGroupGamma', + ]) { + const workerLimit = (api.consts[group].maxWorkerNumberLimit as u32).toNumber() + assert.equal(workerLimit, 30, `${group} invalid limit of workers`) + } + + const expectedPermissions = createType( + 'BTreeMap>', + new Map([ + [ + 0, + [ + { 'HideVideo': null }, + { 'ChangeChannelFeatureStatus': { 'CreatorTokenIssuance': null } }, + { 'DeleteVideoAssets': true }, + ], + ], + [ + 1, + [ + { 'HideChannel': null }, + { 'ChangeChannelFeatureStatus': { 'VideoUpdate': null } }, + { 'DeleteVideoAssets': false }, + ], + ], + ]) + ) + + const lastCuratorGroup = (await api.query.content.nextCuratorGroupId()).subn(1) + const curatorGroup = await api.query.content.curatorGroupById(lastCuratorGroup) + assert(curatorGroup.active.eq(true)) + // This would be cleaner but doesn't work correctly + // assert.deepEqual(curatorGroup.permissionsByLevel, expectedPermissions) + assert.equal(`${curatorGroup.permissionsByLevel}`, `${expectedPermissions}`) + + debug('Done') +} diff --git a/tests/network-tests/src/misc/preRuntimeUpgrade.ts b/tests/network-tests/src/misc/preRuntimeUpgrade.ts new file mode 100644 index 0000000000..60b5e9ba68 --- /dev/null +++ b/tests/network-tests/src/misc/preRuntimeUpgrade.ts @@ -0,0 +1,66 @@ +import { assert } from 'chai' +import { FlowProps } from '../Flow' +import { extendDebug } from '../Debugger' +import type { u32 } from '@polkadot/types-codec' +import { CreateCuratorGroupFixture } from '../fixtures/content' + +export default async function assertValues({ api, query }: FlowProps): Promise { + const debug = extendDebug('flow:preRuntimeUpdateChecks') + debug('Started') + + debug('Check runtime spec version') + const version = await api.rpc.state.getRuntimeVersion() + assert.equal(version.specVersion.toNumber(), 2001) + + debug('Check forum sub category limit') + const subCategoryLimit = api.consts.forum.maxDirectSubcategoriesInCategory.toNumber() + assert.equal(subCategoryLimit, 5) + + debug('Check workers limit') + for (const group of ['storageWorkingGroup', 'distributionWorkingGroup']) { + const workerLimit = (api.consts[group].maxWorkerNumberLimit as u32).toNumber() + assert.equal(workerLimit, 30) + } + + /* + Add curator groups as test cases for the content pallet runtime migration to cover case with actions + we need to be sure are migrated correctly. We used a pre-computed tx hex-string for the older runtime, + as new runtime types cannot be used without some hacks. + Paste the call hex string into: https://polkadot.js.org/apps/#/extrinsics/decode to confirm it corresponds to + the call: content.createCuratorGroup(isActive, permissionsByLevel) with following arguments: + + isActive: bool + Yes + permissionsByLevel: BTreeMap> + { + 0: [ + HideVideo + { + ChangeChannelFeatureStatus: CreatorTokenIssuance + } + DeleteVideo // This will get removed in the migration + { + DeleteVideoAssets: true + } + ] + 1: [ + HideChannel + { + ChangeChannelFeatureStatus: VideoUpdate + } + DeleteChannel // This will get removed in the migration + { + DeleteVideoAssets: false + } + ] + } + + */ + const tx = '0x54041a00010800100002060305010110010204040500' + const contentLeadAccountId = await new CreateCuratorGroupFixture(api, query, []).getContentWgLeadAccount() + await api.signAndSend(api.tx(tx), contentLeadAccountId) + await api.signAndSend(api.tx(tx), contentLeadAccountId) + await api.signAndSend(api.tx(tx), contentLeadAccountId) + + debug('Done') +} diff --git a/tests/network-tests/src/scenarios/full.ts b/tests/network-tests/src/scenarios/full.ts index 2b06d3b280..8dce228885 100644 --- a/tests/network-tests/src/scenarios/full.ts +++ b/tests/network-tests/src/scenarios/full.ts @@ -19,7 +19,6 @@ import cancellingProposals from '../flows/proposals/cancellingProposal' import vetoProposal from '../flows/proposals/vetoProposal' import electCouncil from '../flows/council/elect' import failToElect from '../flows/council/failToElect' -import runtimeUpgradeProposal from '../flows/proposals/runtimeUpgradeProposal' import exactExecutionBlock from '../flows/proposals/exactExecutionBlock' import expireProposal from '../flows/proposals/expireProposal' import proposalsDiscussion from '../flows/proposalsDiscussion' @@ -40,18 +39,13 @@ import invitingMembers from '../flows/membership/invitingMembers' import { createAppActions } from '../flows/content/createAppActions' import { createApp } from '../flows/content/createApp' import { updateApp } from '../flows/content/updateApp' +import curatorModerationActions from '../flows/content/curatorModerationActions' +import collaboratorAndCuratorPermissions from '../flows/content/collaboratorAndCuratorPermissions' import updateValidatorVerificationStatus from '../flows/membership/updateValidatorVerifications' // eslint-disable-next-line @typescript-eslint/no-floating-promises -scenario('Full', async ({ job, env }) => { - // Runtime upgrade should always be first job - // (except councilJob, which is required for voting and should probably depend on the "source" runtime) - const councilJob = job('electing council', electCouncil) - const runtimeUpgradeProposalJob = env.RUNTIME_UPGRADE_TARGET_WASM_PATH - ? job('runtime upgrade proposal', runtimeUpgradeProposal).requires(councilJob) - : undefined - - const coreJob = runtimeUpgradeProposalJob || councilJob +scenario('Full', async ({ job }) => { + const coreJob = job('electing council', electCouncil) // All other jobs should be executed after coreJob @@ -111,9 +105,16 @@ scenario('Full', async ({ job, env }) => { const commentsAndReactionsJob = job('video comments and reactions', commentsAndReactions).after( nftAuctionAndOffersJob ) - const directChannelPaymentJob = job('direct channel payment by members', directChannelPayment).after( + const curatorModerationActionsJob = job('curator moderation actions', curatorModerationActions).after( commentsAndReactionsJob ) + const collaboratorAndCuratorPermissionsJob = job( + 'curators and collaborators permissions', + collaboratorAndCuratorPermissions + ).after(curatorModerationActionsJob) + const directChannelPaymentJob = job('direct channel payment by members', directChannelPayment).after( + collaboratorAndCuratorPermissionsJob + ) // Apps job('create app', createApp).after(hireLeads) diff --git a/tests/network-tests/src/scenarios/postRuntimeUpgrade.ts b/tests/network-tests/src/scenarios/postRuntimeUpgrade.ts new file mode 100644 index 0000000000..066a15ccc3 --- /dev/null +++ b/tests/network-tests/src/scenarios/postRuntimeUpgrade.ts @@ -0,0 +1,8 @@ +import { scenario } from '../Scenario' +import post from '../misc/postRuntimeUpgrade' + +// eslint-disable-next-line @typescript-eslint/no-floating-promises +scenario('Post-RuntimeUpgrade', async ({ job }) => { + // Runtime checks + job('Post-Upgrade Checks', post) +}) diff --git a/tests/network-tests/src/scenarios/preRuntimeUpgrade.ts b/tests/network-tests/src/scenarios/preRuntimeUpgrade.ts new file mode 100644 index 0000000000..a0b7738924 --- /dev/null +++ b/tests/network-tests/src/scenarios/preRuntimeUpgrade.ts @@ -0,0 +1,8 @@ +import { scenario } from '../Scenario' +import pre from '../misc/preRuntimeUpgrade' +import leadOpening from '../flows/working-groups/leadOpening' + +// eslint-disable-next-line @typescript-eslint/no-floating-promises +scenario('Pre-RuntimeUpgrade', async ({ job }) => { + job('Pre-Upgrade setup and checks', pre).after(job('Hire content lead', leadOpening(true, ['contentWorkingGroup']))) +}) diff --git a/tests/network-tests/src/scenarios/runtimeUpgrade.ts b/tests/network-tests/src/scenarios/runtimeUpgrade.ts index dc10c2c5f0..d70f24d4b4 100644 --- a/tests/network-tests/src/scenarios/runtimeUpgrade.ts +++ b/tests/network-tests/src/scenarios/runtimeUpgrade.ts @@ -1,17 +1,8 @@ -import electCouncil from '../flows/council/elect' +import electCouncil from '../flows/council/electOnlyIfNoElected' import runtimeUpgradeProposal from '../flows/proposals/runtimeUpgradeProposal' import { scenario } from '../Scenario' -import postRuntimeUpdateChecks from '../misc/postRuntimUpdateChecks' -import forkOffChecks from '../misc/forkOffChecks' // eslint-disable-next-line @typescript-eslint/no-floating-promises -scenario('Full', async ({ job, env, debug }) => { - // Runtime upgrade should always be first job - // (except councilJob, which is required for voting and should probably depend on the "source" runtime) - const forkOffChecksJob = job('fork-off successful checks', forkOffChecks) - const councilJob = job('electing council', electCouncil).after(forkOffChecksJob) - const runtimeUpgradeProposalJob = job('runtime upgrade proposal', runtimeUpgradeProposal).requires(councilJob) - - // Runtime checks - job('Run Post Upgrade Checks', postRuntimeUpdateChecks).requires(runtimeUpgradeProposalJob) +scenario('Runtime Upgrade', async ({ job }) => { + job('Perform runtime upgrade', runtimeUpgradeProposal).requires(job('electing council', electCouncil)) }) diff --git a/tests/network-tests/src/sender.ts b/tests/network-tests/src/sender.ts index bf79e4bae2..6a94e4749b 100644 --- a/tests/network-tests/src/sender.ts +++ b/tests/network-tests/src/sender.ts @@ -124,7 +124,7 @@ export class Sender { const nodeNonce = await this.api.rpc.system.accountNextIndex(senderKeyPair.address) const cachedNonce = nonceCacheByAccount.get(senderKeyPair.address) const nonce = BN.max(nodeNonce, new BN(cachedNonce || 0)) - const signedTx = tx.sign(senderKeyPair, { nonce, tip }) + const signedTx = await tx.signAsync(senderKeyPair, { nonce, tip }) sentTx = signedTx.toHuman() const { method, section } = signedTx.method try { diff --git a/tests/network-tests/start-storage.sh b/tests/network-tests/start-storage.sh index a16df4237e..445c2b4125 100755 --- a/tests/network-tests/start-storage.sh +++ b/tests/network-tests/start-storage.sh @@ -15,6 +15,9 @@ export COLOSSUS_2_URL="http://${HOST_IP}:3335" export DISTRIBUTOR_2_URL="http://${HOST_IP}:3336" $THIS_DIR/run-test-scenario.sh initStorageAndDistribution +# give QN time to catch up so nodes can get their initial state +sleep 30 + # Start colossus & argus docker-compose -f $THIS_DIR/../../docker-compose.yml up -d colossus-1 docker-compose -f $THIS_DIR/../../docker-compose.yml up -d distributor-1 diff --git a/tests/network-tests/test-setup-new-chain.sh b/tests/network-tests/test-setup-new-chain.sh index 89ef4fc599..1bc9c5710e 100755 --- a/tests/network-tests/test-setup-new-chain.sh +++ b/tests/network-tests/test-setup-new-chain.sh @@ -1,7 +1,7 @@ #!/usr/bin/env bash set -e -SCRIPT_PATH="$(dirname "${BASH_SOURCE[0]}")" +SCRIPT_PATH=`dirname "${BASH_SOURCE[0]}"` cd $SCRIPT_PATH rm ./output.json || : @@ -12,14 +12,16 @@ export TREASURY_ACCOUNT_URI=//Bob export TREASURY_INITIAL_BALANCE=1000000 export RUNTIME_PROFILE=TESTING -CONTAINER_ID=$(./run-node-docker.sh) +CONTAINER_ID=`./run-node-docker.sh` function cleanup() { docker logs ${CONTAINER_ID} --tail 15 + docker stop ${CONTAINER_ID} + docker rm ${CONTAINER_ID} docker-compose -f ../../docker-compose.yml down -v } -trap cleanup EXIT +trap cleanup EXIT ERR SIGINT SIGTERM sleep 3 diff --git a/tsconfig.json b/tsconfig.json index 0e0dcd235c..61ed3384e9 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,3 +1,12 @@ { - + "compilerOptions": { + // generated graphql-server uses "keyofStringsOnly:true" which will be deprecated in 5.0 + "ignoreDeprecations": "5.0", + }, + "include": [ + "src" + ], + "exclude": [ + "node_modules" + ] } \ No newline at end of file diff --git a/types/package.json b/types/package.json index 7abecd79ee..29ae83dea0 100644 --- a/types/package.json +++ b/types/package.json @@ -1,7 +1,7 @@ { "name": "@joystream/types", - "version": "2.1.0", - "description": "Types for Joystream Substrate Runtime - Carthage release", + "version": "4.3.0", + "description": "Types for Joystream Substrate Runtime - Nara release", "main": "lib/cjs/index.js", "types": "lib/index.d.ts", "exports": { @@ -29,26 +29,27 @@ "lint": "eslint ./ --ext .ts", "format": "prettier ./ --write", "checks": "yarn build && madge --circular ./ && prettier ./ --check && yarn lint", - "generate:interfaces": "yarn ts-node node_modules/.bin/polkadot-types-from-defs --package . --input ./src/augment --endpoint ../chain-metadata.json && rm ./src/augment/index.ts ./src/augment/types.ts", - "generate:meta": "yarn ts-node node_modules/.bin/polkadot-types-from-chain --package . --endpoint ../chain-metadata.json --output ./src/augment --strict", + "generate:interfaces": "mkdir -p src/augment/ && yarn tsx node_modules/.bin/polkadot-types-from-defs --package . --endpoint ../chain-metadata.json --input ./src/augment && rm src/augment/index.ts && rm src/augment/types.ts", + "generate:meta": "mkdir -p src/augment/ && yarn tsx node_modules/.bin/polkadot-types-from-chain --package . --endpoint ../chain-metadata.json --output ./src/augment --strict", "generate:all": "yarn generate:interfaces && yarn generate:meta" }, "author": "Joystream contributors", "maintainers": [], "dependencies": { - "@polkadot/api": "8.9.1", - "@polkadot/types": "8.9.1", - "@polkadot/keyring": "9.5.1", + "@polkadot/api": "10.1.4", + "@polkadot/keyring": "11.1.1", + "@polkadot/types": "10.1.4", "@types/lodash": "^4.14.157", "@types/vfile": "^4.0.0", "lodash": "^4.17.15", "moment": "^2.24.0" }, "devDependencies": { - "@polkadot/typegen": "8.9.1", + "@polkadot/typegen": "10.1.4", + "madge": "^3.9.2", "ts-node": "^10.2.1", - "typescript": "^4.4.3", - "madge": "^3.9.2" + "tsx": "^4.7.1", + "typescript": "^5.0.2" }, "engines": { "node": ">=14.18.0", diff --git a/types/src/augment/augment-api-consts.ts b/types/src/augment/augment-api-consts.ts index cc3dddd658..c82de3001c 100644 --- a/types/src/augment/augment-api-consts.ts +++ b/types/src/augment/augment-api-consts.ts @@ -1,13 +1,19 @@ // Auto-generated via `yarn polkadot-types-from-chain`, do not edit /* eslint-disable */ -import type { ApiTypes } from '@polkadot/api-base/types'; +// import type lookup before we augment - in some environments +// this is required to allow for ambient/previous definitions +import '@polkadot/api-base/types/consts'; + +import type { ApiTypes, AugmentedConst } from '@polkadot/api-base/types'; import type { U8aFixed, Vec, u128, u16, u32, u64, u8 } from '@polkadot/types-codec'; import type { Perbill } from '@polkadot/types/interfaces/runtime'; -import type { FrameSupportWeightsRuntimeDbWeight, FrameSystemLimitsBlockLength, FrameSystemLimitsBlockWeights, PalletContentLimitPerPeriod, PalletProposalsEngineProposalParameters, SpVersionRuntimeVersion } from '@polkadot/types/lookup'; +import type { FrameSystemLimitsBlockLength, FrameSystemLimitsBlockWeights, PalletContentLimitPerPeriod, PalletProposalsEngineProposalParameters, SpVersionRuntimeVersion, SpWeightsRuntimeDbWeight, SpWeightsWeightV2Weight } from '@polkadot/types/lookup'; + +export type __AugmentedConst = AugmentedConst; declare module '@polkadot/api-base/types/consts' { - export interface AugmentedConsts { + interface AugmentedConsts { appWorkingGroup: { /** * Stake needed to create an opening. @@ -35,14 +41,6 @@ declare module '@polkadot/api-base/types/consts' { **/ stakingHandlerLockId: U8aFixed & AugmentedConst; }; - authorship: { - /** - * The number of blocks back we should accept uncles. - * This means that we will deal with uncle-parents that are - * `UncleGenerations + 1` before `now`. - **/ - uncleGenerations: u32 & AugmentedConst; - }; babe: { /** * The amount of time, in slots, that each epoch should last. @@ -63,54 +61,6 @@ declare module '@polkadot/api-base/types/consts' { **/ maxAuthorities: u32 & AugmentedConst; }; - bagsList: { - /** - * The list of thresholds separating the various bags. - * - * Ids are separated into unsorted bags according to their score. This specifies the - * thresholds separating the bags. An id's bag is the largest bag for which the id's score - * is less than or equal to its upper threshold. - * - * When ids are iterated, higher bags are iterated completely before lower bags. This means - * that iteration is _semi-sorted_: ids of higher score tend to come before ids of lower - * score, but peer ids within a particular bag are sorted in insertion order. - * - * # Expressing the constant - * - * This constant must be sorted in strictly increasing order. Duplicate items are not - * permitted. - * - * There is an implied upper limit of `Score::MAX`; that value does not need to be - * specified within the bag. For any two threshold lists, if one ends with - * `Score::MAX`, the other one does not, and they are otherwise equal, the two - * lists will behave identically. - * - * # Calculation - * - * It is recommended to generate the set of thresholds in a geometric series, such that - * there exists some constant ratio such that `threshold[k + 1] == (threshold[k] * - * constant_ratio).max(threshold[k] + 1)` for all `k`. - * - * The helpers in the `/utils/frame/generate-bags` module can simplify this calculation. - * - * # Examples - * - * - If `BagThresholds::get().is_empty()`, then all ids are put into the same bag, and - * iteration is strictly in insertion order. - * - If `BagThresholds::get().len() == 64`, and the thresholds are determined according to - * the procedure given above, then the constant ratio is equal to 2. - * - If `BagThresholds::get().len() == 200`, and the thresholds are determined according to - * the procedure given above, then the constant ratio is approximately equal to 1.248. - * - If the threshold list begins `[1, 2, 3, ...]`, then an id with score 0 or 1 will fall - * into bag 0, an id with score 2 will fall into bag 1, etc. - * - * # Migration - * - * In the event that this list ever changes, a copy of the old bags list must be retained. - * With that `List::migrate` can be called, which will perform the appropriate migration. - **/ - bagThresholds: Vec & AugmentedConst; - }; balances: { /** * The minimum amount required to keep an account open. @@ -296,6 +246,17 @@ declare module '@polkadot/api-base/types/consts' { * take place over multiple blocks. **/ maxElectingVoters: u32 & AugmentedConst; + /** + * The maximum number of winners that can be elected by this `ElectionProvider` + * implementation. + * + * Note: This must always be greater or equal to `T::DataProvider::desired_targets()`. + **/ + maxWinners: u32 & AugmentedConst; + minerMaxLength: u32 & AugmentedConst; + minerMaxVotesPerVoter: u32 & AugmentedConst; + minerMaxWeight: SpWeightsWeightV2Weight & AugmentedConst; + minerMaxWinners: u32 & AugmentedConst; /** * The priority of the unsigned transaction submitted in the unsigned-phase **/ @@ -340,7 +301,7 @@ declare module '@polkadot/api-base/types/consts' { * this pallet), then [`MinerConfig::solution_weight`] is used to compare against * this value. **/ - signedMaxWeight: u64 & AugmentedConst; + signedMaxWeight: SpWeightsWeightV2Weight & AugmentedConst; /** * Duration of the signed phase. **/ @@ -405,6 +366,15 @@ declare module '@polkadot/api-base/types/consts' { * Max Authorities in use **/ maxAuthorities: u32 & AugmentedConst; + /** + * The maximum number of entries to keep in the set id to session index mapping. + * + * Since the `SetIdSession` map is only used for validating equivocations this + * value should relate to the bonding duration of whatever staking system is + * being used (if any). If equivocation handling is not enabled then this value + * can be zero. + **/ + maxSetIdSessionEntries: u64 & AugmentedConst; }; imOnline: { /** @@ -487,7 +457,7 @@ declare module '@polkadot/api-base/types/consts' { /** * The maximum amount of signatories allowed in the multisig. **/ - maxSignatories: u16 & AugmentedConst; + maxSignatories: u32 & AugmentedConst; }; operationsWorkingGroupAlpha: { /** @@ -633,6 +603,7 @@ declare module '@polkadot/api-base/types/consts' { * Exports 'Set Membership Price' proposal parameters. **/ setMembershipPriceProposalParameters: PalletProposalsEngineProposalParameters & AugmentedConst; + setPalletFozenStatusProposalParameters: PalletProposalsEngineProposalParameters & AugmentedConst; setReferralCutProposalParameters: PalletProposalsEngineProposalParameters & AugmentedConst; /** * Exports 'Set Working Group Lead Reward' proposal parameters. @@ -727,6 +698,29 @@ declare module '@polkadot/api-base/types/consts' { * Number of eras that staked funds must remain bonded for. **/ bondingDuration: u32 & AugmentedConst; + /** + * Number of eras to keep in history. + * + * Following information is kept for eras in `[current_era - + * HistoryDepth, current_era]`: `ErasStakers`, `ErasStakersClipped`, + * `ErasValidatorPrefs`, `ErasValidatorReward`, `ErasRewardPoints`, + * `ErasTotalStake`, `ErasStartSessionIndex`, + * `StakingLedger.claimed_rewards`. + * + * Must be more than the number of eras delayed by session. + * I.e. active era must always be in history. I.e. `active_era > + * current_era - history_depth` must be guaranteed. + * + * If migrating an existing pallet from storage value to config value, + * this should be set to same value or greater as in storage. + * + * Note: `HistoryDepth` is used as the upper bound for the `BoundedVec` + * item `StakingLedger.claimed_rewards`. Setting this value lower than + * the existing value can lead to inconsistencies in the + * `StakingLedger` and will need to be handled properly in a migration. + * The test `reducing_history_depth_abrupt` shows this effect. + **/ + historyDepth: u32 & AugmentedConst; /** * Maximum number of nominations per nominator. **/ @@ -739,8 +733,16 @@ declare module '@polkadot/api-base/types/consts' { **/ maxNominatorRewardedPerValidator: u32 & AugmentedConst; /** - * The maximum number of `unlocking` chunks a [`StakingLedger`] can have. Effectively - * determines how many unique eras a staker may be unbonding in. + * The maximum number of `unlocking` chunks a [`StakingLedger`] can + * have. Effectively determines how many unique eras a staker may be + * unbonding in. + * + * Note: `MaxUnlockingChunks` is used as the upper bound for the + * `BoundedVec` item `StakingLedger.unlocking`. Setting this value + * lower than the existing value can lead to inconsistencies in the + * `StakingLedger` and will need to be handled properly in a runtime + * migration. The test `reducing_max_unlocking_chunks_abrupt` shows + * this effect. **/ maxUnlockingChunks: u32 & AugmentedConst; /** @@ -846,9 +848,9 @@ declare module '@polkadot/api-base/types/consts' { /** * The weight of runtime database operations the runtime can invoke. **/ - dbWeight: FrameSupportWeightsRuntimeDbWeight & AugmentedConst; + dbWeight: SpWeightsRuntimeDbWeight & AugmentedConst; /** - * The designated SS85 prefix of this chain. + * The designated SS58 prefix of this chain. * * This replaces the "ss58Format" property declared in the chain spec. Reason is * that the runtime should know about the prefix in order to make use of it as @@ -908,5 +910,53 @@ declare module '@polkadot/api-base/types/consts' { **/ minVestedTransfer: u128 & AugmentedConst; }; + voterList: { + /** + * The list of thresholds separating the various bags. + * + * Ids are separated into unsorted bags according to their score. This specifies the + * thresholds separating the bags. An id's bag is the largest bag for which the id's score + * is less than or equal to its upper threshold. + * + * When ids are iterated, higher bags are iterated completely before lower bags. This means + * that iteration is _semi-sorted_: ids of higher score tend to come before ids of lower + * score, but peer ids within a particular bag are sorted in insertion order. + * + * # Expressing the constant + * + * This constant must be sorted in strictly increasing order. Duplicate items are not + * permitted. + * + * There is an implied upper limit of `Score::MAX`; that value does not need to be + * specified within the bag. For any two threshold lists, if one ends with + * `Score::MAX`, the other one does not, and they are otherwise equal, the two + * lists will behave identically. + * + * # Calculation + * + * It is recommended to generate the set of thresholds in a geometric series, such that + * there exists some constant ratio such that `threshold[k + 1] == (threshold[k] * + * constant_ratio).max(threshold[k] + 1)` for all `k`. + * + * The helpers in the `/utils/frame/generate-bags` module can simplify this calculation. + * + * # Examples + * + * - If `BagThresholds::get().is_empty()`, then all ids are put into the same bag, and + * iteration is strictly in insertion order. + * - If `BagThresholds::get().len() == 64`, and the thresholds are determined according to + * the procedure given above, then the constant ratio is equal to 2. + * - If `BagThresholds::get().len() == 200`, and the thresholds are determined according to + * the procedure given above, then the constant ratio is approximately equal to 1.248. + * - If the threshold list begins `[1, 2, 3, ...]`, then an id with score 0 or 1 will fall + * into bag 0, an id with score 2 will fall into bag 1, etc. + * + * # Migration + * + * In the event that this list ever changes, a copy of the old bags list must be retained. + * With that `List::migrate` can be called, which will perform the appropriate migration. + **/ + bagThresholds: Vec & AugmentedConst; + }; } // AugmentedConsts } // declare module diff --git a/types/src/augment/augment-api-errors.ts b/types/src/augment/augment-api-errors.ts index 0a4a7329cb..98b5b35477 100644 --- a/types/src/augment/augment-api-errors.ts +++ b/types/src/augment/augment-api-errors.ts @@ -1,10 +1,16 @@ // Auto-generated via `yarn polkadot-types-from-chain`, do not edit /* eslint-disable */ -import type { ApiTypes } from '@polkadot/api-base/types'; +// import type lookup before we augment - in some environments +// this is required to allow for ambient/previous definitions +import '@polkadot/api-base/types/errors'; + +import type { ApiTypes, AugmentedError } from '@polkadot/api-base/types'; + +export type __AugmentedError = AugmentedError; declare module '@polkadot/api-base/types/errors' { - export interface AugmentedErrors { + interface AugmentedErrors { appWorkingGroup: { /** * Trying to fill opening with an application for other opening @@ -135,36 +141,6 @@ declare module '@polkadot/api-base/types/errors' { **/ ZeroTokensFunding: AugmentedError; }; - authorship: { - /** - * The uncle is genesis. - **/ - GenesisUncle: AugmentedError; - /** - * The uncle parent not in the chain. - **/ - InvalidUncleParent: AugmentedError; - /** - * The uncle isn't recent enough to be included. - **/ - OldUncle: AugmentedError; - /** - * The uncle is too high in chain. - **/ - TooHighUncle: AugmentedError; - /** - * Too many uncles. - **/ - TooManyUncles: AugmentedError; - /** - * The uncle is already included. - **/ - UncleAlreadyIncluded: AugmentedError; - /** - * Uncles already set in the block. - **/ - UnclesAlreadySet: AugmentedError; - }; babe: { /** * A given equivocation report is valid but already previously reported. @@ -183,12 +159,6 @@ declare module '@polkadot/api-base/types/errors' { **/ InvalidKeyOwnershipProof: AugmentedError; }; - bagsList: { - /** - * A error in the list interface implementation. - **/ - List: AugmentedError; - }; balances: { /** * Beneficiary account must pre-exist @@ -203,7 +173,7 @@ declare module '@polkadot/api-base/types/errors' { **/ ExistingVestingSchedule: AugmentedError; /** - * Balance too low to send value + * Balance too low to send value. **/ InsufficientBalance: AugmentedError; /** @@ -513,6 +483,10 @@ declare module '@polkadot/api-base/types/errors' { * Invalid extrinsic call: Channel state bloat bond changed. **/ ChannelStateBloatBondChanged: AugmentedError; + /** + * Channel Transfers are blocked during active AMM + **/ + ChannelTransfersBlockedDuringActiveAmm: AugmentedError; /** * Channel Transfers are blocked during revenue splits **/ @@ -1233,6 +1207,10 @@ declare module '@polkadot/api-base/types/errors' { ZeroTokensFunding: AugmentedError; }; electionProviderMultiPhase: { + /** + * Some bound not met + **/ + BoundNotMet: AugmentedError; /** * The call is not allowed at this point. **/ @@ -1281,6 +1259,10 @@ declare module '@polkadot/api-base/types/errors' { * The signed submission consumes too much weight **/ SignedTooMuchWeight: AugmentedError; + /** + * Submitted solution has too many winners + **/ + TooManyWinners: AugmentedError; }; forum: { /** @@ -2280,6 +2262,10 @@ declare module '@polkadot/api-base/types/errors' { * Cannot Deissue Token with outstanding accounts **/ CannotDeissueTokenWithOutstandingAccounts: AugmentedError; + /** + * No Sale if Amm is active + **/ + CannotInitSaleIfAmmIsActive: AugmentedError; /** * Attempt to issue in a split with zero allocation amount **/ @@ -2296,6 +2282,14 @@ declare module '@polkadot/api-base/types/errors' { * Attempt to participate in a split with zero token to stake **/ CannotParticipateInSplitWithZeroAmount: AugmentedError; + /** + * Curve slope parameters below minimum allowed + **/ + CurveSlopeParametersTooLow: AugmentedError; + /** + * Deadline constraint not satisfied + **/ + DeadlineExpired: AugmentedError; /** * At least one of the members provided as part of InitialAllocation does not exist **/ @@ -2312,10 +2306,18 @@ declare module '@polkadot/api-base/types/errors' { * Insufficient JOY Balance to cover the transaction costs **/ InsufficientJoyBalance: AugmentedError; + /** + * Creator token balance is insufficient + **/ + InsufficientTokenBalance: AugmentedError; /** * Account's transferrable balance is insufficient to perform the transfer or initialize token sale **/ InsufficientTransferrableBalance: AugmentedError; + /** + * Invalid bonding curve construction parameters + **/ + InvalidCurveParameters: AugmentedError; /** * The amount of JOY to be transferred is not enough to keep the destination account alive **/ @@ -2333,10 +2335,19 @@ declare module '@polkadot/api-base/types/errors' { * The token has no active sale at the moment **/ NoActiveSale: AugmentedError; + /** + * Attempting to sell more than amm provided supply + **/ + NotEnoughTokenMintedByAmmForThisSale: AugmentedError; /** * Amount of tokens to purchase on sale exceeds the quantity of tokens still available on the sale **/ NotEnoughTokensOnSale: AugmentedError; + /** + * ------ AMM --------------------------------------------------------- + * not in AMM state + **/ + NotInAmmState: AugmentedError; /** * There are no remaining tokes to recover from the previous token sale. **/ @@ -2345,6 +2356,14 @@ declare module '@polkadot/api-base/types/errors' { * The token has no upcoming sale **/ NoUpcomingSale: AugmentedError; + /** + * Oustanding AMM-provided supply constitutes too large percentage of the token's total supply + **/ + OutstandingAmmProvidedSupplyTooLarge: AugmentedError; + /** + * Attempt to perform an action when pallet is frozen + **/ + PalletFrozen: AugmentedError; /** * Previous sale was still not finalized, finalize it first. **/ @@ -2420,6 +2439,11 @@ declare module '@polkadot/api-base/types/errors' { **/ SaleUpperBoundQuantityIsZero: AugmentedError; /** + * Slippage tolerance constraint tolerance not satisfied + **/ + SlippageToleranceExceeded: AugmentedError; + /** + * -------- Patronage -------------------------------------------------- * Target Rate is higher than current patronage rate **/ TargetPatronageRateIsHigherThanCurrentRate: AugmentedError; @@ -2435,6 +2459,10 @@ declare module '@polkadot/api-base/types/errors' { * Symbol already in use **/ TokenSymbolAlreadyInUse: AugmentedError; + /** + * Transfer destination member id invalid + **/ + TooManyTransferOutputs: AugmentedError; /** * At least one of the transfer destinations is not an existing member id **/ @@ -2447,6 +2475,10 @@ declare module '@polkadot/api-base/types/errors' { * User is not participating in any split **/ UserNotParticipantingInAnySplit: AugmentedError; + /** + * Provided value for patronage is too big (yearly format) + **/ + YearlyPatronageRateLimitExceeded: AugmentedError; }; proposalsCodex: { /** @@ -2796,6 +2828,10 @@ declare module '@polkadot/api-base/types/errors' { * External restriction prevents bonding with given account **/ BondingRestricted: AugmentedError; + /** + * Some bound is not met. + **/ + BoundNotMet: AugmentedError; /** * The user has enough bond and thus cannot be chilled forcefully by an external person. **/ @@ -2872,8 +2908,8 @@ declare module '@polkadot/api-base/types/errors' { **/ TooManyTargets: AugmentedError; /** - * There are too many validators in the system. Governance needs to adjust the staking - * settings to keep things safe for the runtime. + * There are too many validator candidates in the system. Governance needs to adjust the + * staking settings to keep things safe for the runtime. **/ TooManyValidators: AugmentedError; }; @@ -3330,5 +3366,11 @@ declare module '@polkadot/api-base/types/errors' { **/ ScheduleIndexOutOfBounds: AugmentedError; }; + voterList: { + /** + * A error in the list interface implementation. + **/ + List: AugmentedError; + }; } // AugmentedErrors } // declare module diff --git a/types/src/augment/augment-api-events.ts b/types/src/augment/augment-api-events.ts index 49d4405e2f..26e6f1fd2f 100644 --- a/types/src/augment/augment-api-events.ts +++ b/types/src/augment/augment-api-events.ts @@ -1,14 +1,20 @@ // Auto-generated via `yarn polkadot-types-from-chain`, do not edit /* eslint-disable */ -import type { ApiTypes } from '@polkadot/api-base/types'; +// import type lookup before we augment - in some environments +// this is required to allow for ambient/previous definitions +import '@polkadot/api-base/types/events'; + +import type { ApiTypes, AugmentedEvent } from '@polkadot/api-base/types'; import type { BTreeMap, BTreeSet, Bytes, Null, Option, Result, U8aFixed, Vec, bool, u128, u32, u64, u8 } from '@polkadot/types-codec'; import type { ITuple } from '@polkadot/types-codec/types'; -import type { AccountId32, H256, Perquintill } from '@polkadot/types/interfaces/runtime'; -import type { FrameSupportTokensMiscBalanceStatus, FrameSupportWeightsDispatchInfo, PalletBountyBountyActor, PalletBountyBountyParametersBTreeSet, PalletBountyOracleWorkEntryJudgment, PalletCommonBalanceKind, PalletCommonWorkingGroupIterableEnumsWorkingGroup, PalletContentChannelCreationParametersRecord, PalletContentChannelFundsDestination, PalletContentChannelRecord, PalletContentChannelUpdateParametersRecord, PalletContentIterableEnumsChannelActionPermission, PalletContentNftLimitPeriod, PalletContentNftTypesEnglishAuctionParamsRecord, PalletContentNftTypesNftIssuanceParametersRecord, PalletContentNftTypesOpenAuctionParamsRecord, PalletContentPendingTransfer, PalletContentPermissionsContentActor, PalletContentPermissionsCuratorGroupIterableEnumsContentModerationAction, PalletContentPermissionsCuratorGroupIterableEnumsPausableChannelFeature, PalletContentTransferCommitmentParametersBTreeMap, PalletContentUpdateChannelPayoutsParametersRecord, PalletContentVideoCreationParametersRecord, PalletContentVideoUpdateParametersRecord, PalletElectionProviderMultiPhaseElectionCompute, PalletForumExtendedPostIdObject, PalletForumPrivilegedActor, PalletImOnlineSr25519AppSr25519Public, PalletMembershipBuyMembershipParameters, PalletMembershipCreateMemberParameters, PalletMembershipGiftMembershipParameters, PalletMembershipInviteMembershipParameters, PalletMultisigTimepoint, PalletProjectTokenTokenIssuanceParameters, PalletProjectTokenTokenSale, PalletProjectTokenTransferPolicy, PalletProjectTokenValidated, PalletProjectTokenValidatedPayment, PalletProposalsCodexGeneralProposalParams, PalletProposalsCodexProposalDetails, PalletProposalsDiscussionThreadModeBTreeSet, PalletProposalsEngineProposalStatusesExecutionStatus, PalletProposalsEngineProposalStatusesProposalDecision, PalletProposalsEngineProposalStatusesProposalStatus, PalletProposalsEngineVoteKind, PalletReferendumOptionResult, PalletStakingExposure, PalletStakingValidatorPrefs, PalletStorageBagIdType, PalletStorageDistributionBucketIdRecord, PalletStorageDynBagCreationParametersRecord, PalletStorageDynamicBagIdType, PalletStorageDynamicBagType, PalletStorageUploadParametersRecord, PalletStorageVoucher, PalletWorkingGroupApplyOnOpeningParams, PalletWorkingGroupOpeningType, PalletWorkingGroupRewardPaymentType, PalletWorkingGroupStakePolicy, SpFinalityGrandpaAppPublic, SpRuntimeDispatchError } from '@polkadot/types/lookup'; +import type { AccountId32, H256, Perbill, Permill } from '@polkadot/types/interfaces/runtime'; +import type { FrameSupportDispatchDispatchInfo, FrameSupportTokensMiscBalanceStatus, PalletBountyBountyActor, PalletBountyBountyParametersBTreeSet, PalletBountyOracleWorkEntryJudgment, PalletCommonBalanceKind, PalletCommonWorkingGroupIterableEnumsWorkingGroup, PalletContentChannelCreationParametersRecord, PalletContentChannelFundsDestination, PalletContentChannelRecord, PalletContentChannelUpdateParametersRecord, PalletContentIterableEnumsChannelActionPermission, PalletContentNftLimitPeriod, PalletContentNftTypesEnglishAuctionParamsRecord, PalletContentNftTypesNftIssuanceParametersRecord, PalletContentNftTypesOpenAuctionParamsRecord, PalletContentPendingTransfer, PalletContentPermissionsContentActor, PalletContentPermissionsCuratorGroupIterableEnumsContentModerationAction, PalletContentPermissionsCuratorGroupIterableEnumsPausableChannelFeature, PalletContentTransferCommitmentParametersBTreeMap, PalletContentUpdateChannelPayoutsParametersRecord, PalletContentVideoCreationParametersRecord, PalletContentVideoUpdateParametersRecord, PalletElectionProviderMultiPhaseElectionCompute, PalletElectionProviderMultiPhasePhase, PalletForumExtendedPostIdObject, PalletForumPrivilegedActor, PalletImOnlineSr25519AppSr25519Public, PalletMembershipBuyMembershipParameters, PalletMembershipCreateMemberParameters, PalletMembershipGiftMembershipParameters, PalletMembershipInviteMembershipParameters, PalletMultisigTimepoint, PalletProjectTokenAmmCurve, PalletProjectTokenTokenIssuanceParameters, PalletProjectTokenTokenSale, PalletProjectTokenTransferPolicy, PalletProjectTokenTransfers, PalletProposalsCodexGeneralProposalParams, PalletProposalsCodexProposalDetails, PalletProposalsDiscussionThreadModeBTreeSet, PalletProposalsEngineProposalStatusesExecutionStatus, PalletProposalsEngineProposalStatusesProposalDecision, PalletProposalsEngineProposalStatusesProposalStatus, PalletProposalsEngineVoteKind, PalletReferendumOptionResult, PalletStakingExposure, PalletStakingForcing, PalletStakingValidatorPrefs, PalletStorageBagIdType, PalletStorageDistributionBucketIdRecord, PalletStorageDynBagCreationParametersRecord, PalletStorageDynamicBagIdType, PalletStorageDynamicBagType, PalletStorageUploadParametersRecord, PalletStorageVoucher, PalletWorkingGroupApplyOnOpeningParams, PalletWorkingGroupOpeningType, PalletWorkingGroupRewardPaymentType, PalletWorkingGroupStakePolicy, SpConsensusGrandpaAppPublic, SpNposElectionsElectionScore, SpRuntimeDispatchError } from '@polkadot/types/lookup'; + +export type __AugmentedEvent = AugmentedEvent; declare module '@polkadot/api-base/types/events' { - export interface AugmentedEvents { + interface AugmentedEvents { appWorkingGroup: { /** * Emits on withdrawing the application for the regular worker/lead opening. @@ -190,16 +196,6 @@ declare module '@polkadot/api-base/types/events' { **/ WorkingGroupBudgetFunded: AugmentedEvent; }; - bagsList: { - /** - * Moved an account from one bag to another. - **/ - Rebagged: AugmentedEvent; - /** - * Updated the score of some account to the given amount. - **/ - ScoreUpdated: AugmentedEvent; - }; balances: { /** * A balance was set by root. @@ -452,7 +448,6 @@ declare module '@polkadot/api-base/types/events' { ChannelAssetsRemoved: AugmentedEvent, PalletContentChannelRecord]>; ChannelCreated: AugmentedEvent; ChannelDeleted: AugmentedEvent; - ChannelDeletedByModerator: AugmentedEvent; ChannelFundsWithdrawn: AugmentedEvent; ChannelNftLimitUpdated: AugmentedEvent; /** @@ -469,6 +464,7 @@ declare module '@polkadot/api-base/types/events' { ChannelUpdated: AugmentedEvent]>; ChannelVisibilitySetByModerator: AugmentedEvent; CreatorTokenIssued: AugmentedEvent; + CreatorTokenIssuerRemarked: AugmentedEvent; CuratorAdded: AugmentedEvent]>; CuratorGroupCreated: AugmentedEvent; CuratorGroupPermissionsUpdated: AugmentedEvent>]>; @@ -493,7 +489,6 @@ declare module '@polkadot/api-base/types/events' { VideoAssetsDeletedByModerator: AugmentedEvent, bool, Bytes]>; VideoCreated: AugmentedEvent]>; VideoDeleted: AugmentedEvent; - VideoDeletedByModerator: AugmentedEvent; VideoStateBloatBondValueUpdated: AugmentedEvent; VideoUpdated: AugmentedEvent]>; VideoVisibilitySetByModerator: AugmentedEvent; @@ -944,18 +939,23 @@ declare module '@polkadot/api-base/types/events' { }; electionProviderMultiPhase: { /** - * The election has been finalized, with `Some` of the given computation, or else if the - * election failed, `None`. + * An election failed. + * + * Not much can be said about which computes failed in the process. **/ - ElectionFinalized: AugmentedEvent], { electionCompute: Option }>; + ElectionFailed: AugmentedEvent; /** - * An account has been rewarded for their signed submission being finalized. + * The election has been finalized, with the given computation and score. **/ - Rewarded: AugmentedEvent; + ElectionFinalized: AugmentedEvent; + /** + * There was a phase transition in a given round. + **/ + PhaseTransitioned: AugmentedEvent; /** - * The signed phase of the given round has started. + * An account has been rewarded for their signed submission being finalized. **/ - SignedPhaseStarted: AugmentedEvent; + Rewarded: AugmentedEvent; /** * An account has been slashed for submitting an invalid signed submission. **/ @@ -963,16 +963,13 @@ declare module '@polkadot/api-base/types/events' { /** * A solution was stored with the given compute. * - * If the solution is signed, this means that it hasn't yet been processed. If the - * solution is unsigned, this means that it has also been processed. - * - * The `bool` is `true` when a previous solution was ejected to make room for this one. + * The `origin` indicates the origin of the solution. If `origin` is `Some(AccountId)`, + * the stored solution was submited in the signed phase by a miner with the `AccountId`. + * Otherwise, the solution was stored either during the unsigned phase or by + * `T::ForceOrigin`. The `bool` is `true` when a previous solution was ejected to make + * room for this one. **/ - SolutionStored: AugmentedEvent; - /** - * The unsigned phase of the given round has started. - **/ - UnsignedPhaseStarted: AugmentedEvent; + SolutionStored: AugmentedEvent, prevEjected: bool], { compute: PalletElectionProviderMultiPhaseElectionCompute, origin: Option, prevEjected: bool }>; }; forum: { /** @@ -1235,7 +1232,7 @@ declare module '@polkadot/api-base/types/events' { /** * New authority set has been applied. **/ - NewAuthorities: AugmentedEvent>], { authoritySet: Vec> }>; + NewAuthorities: AugmentedEvent>], { authoritySet: Vec> }>; /** * Current authority set has been paused. **/ @@ -2068,6 +2065,28 @@ declare module '@polkadot/api-base/types/events' { * - ongoing policy **/ AccountDustedBy: AugmentedEvent; + /** + * AMM activated + * Params: + * - token id + * - member id + * - params for the bonding curve + **/ + AmmActivated: AugmentedEvent; + /** + * AMM deactivated + * Params: + * - token id + * - member id + * - amm treasury amount burned upon deactivation + **/ + AmmDeactivated: AugmentedEvent; + /** + * Pallet Frozen status toggled + * Params: + * - new frozen status (true | false) + **/ + FrozenStatusUpdated: AugmentedEvent; /** * Member joined whitelist * Params: @@ -2090,7 +2109,7 @@ declare module '@polkadot/api-base/types/events' { * - token identifier * - new patronage rate **/ - PatronageRateDecreasedTo: AugmentedEvent; + PatronageRateDecreasedTo: AugmentedEvent; /** * Revenue Split finalized * Params: @@ -2124,7 +2143,7 @@ declare module '@polkadot/api-base/types/events' { * - map containing validated outputs (amount indexed by (member_id + account existance)) * - transfer's metadata **/ - TokenAmountTransferred: AugmentedEvent, Bytes]>; + TokenAmountTransferred: AugmentedEvent; /** * Token amount transferred by issuer * Params: @@ -2135,7 +2154,7 @@ declare module '@polkadot/api-base/types/events' { * (account_id + account existance) * - transfer's metadata **/ - TokenAmountTransferredByIssuer: AugmentedEvent, Bytes]>; + TokenAmountTransferredByIssuer: AugmentedEvent; /** * Token Deissued * Params: @@ -2167,6 +2186,15 @@ declare module '@polkadot/api-base/types/events' { * - token sale metadata **/ TokenSaleInitialized: AugmentedEvent]>; + /** + * Tokens Bought on AMM + * Params: + * - token id + * - member id + * - amount of CRT minted + * - amount of JOY deposited into curve treasury + **/ + TokensBoughtOnAmm: AugmentedEvent; /** * Tokens Burned * Params: @@ -2184,6 +2212,15 @@ declare module '@polkadot/api-base/types/events' { * - buyer's member id **/ TokensPurchasedOnSale: AugmentedEvent; + /** + * Tokens Sold on AMM + * Params: + * - token id + * - member id + * - amount of CRT burned + * - amount of JOY withdrawn from curve treasury + **/ + TokensSoldOnAmm: AugmentedEvent; /** * Transfer Policy Changed To Permissionless * Params: @@ -2337,40 +2374,46 @@ declare module '@polkadot/api-base/types/events' { * NOTE: This event is only emitted when funds are bonded via a dispatchable. Notably, * it will not be emitted for staking rewards when they are added to stake. **/ - Bonded: AugmentedEvent; + Bonded: AugmentedEvent; /** * An account has stopped participating as either a validator or nominator. - * \[stash\] **/ - Chilled: AugmentedEvent; + Chilled: AugmentedEvent; /** * The era payout has been set; the first balance is the validator-payout; the second is * the remainder from the maximum amount of reward. - * \[era_index, validator_payout, remainder\] **/ - EraPaid: AugmentedEvent; + EraPaid: AugmentedEvent; + /** + * A new force era mode was set. + **/ + ForceEra: AugmentedEvent; /** - * A nominator has been kicked from a validator. \[nominator, stash\] + * A nominator has been kicked from a validator. **/ - Kicked: AugmentedEvent; + Kicked: AugmentedEvent; /** * An old slashing report from a prior era was discarded because it could - * not be processed. \[session_index\] + * not be processed. + **/ + OldSlashingReportDiscarded: AugmentedEvent; + /** + * The stakers' rewards are getting paid. **/ - OldSlashingReportDiscarded: AugmentedEvent; + PayoutStarted: AugmentedEvent; /** - * The stakers' rewards are getting paid. \[era_index, validator_stash\] + * The nominator has been rewarded by this amount. **/ - PayoutStarted: AugmentedEvent; + Rewarded: AugmentedEvent; /** - * The nominator has been rewarded by this amount. \[stash, amount\] + * A staker (validator or nominator) has been slashed by the given amount. **/ - Rewarded: AugmentedEvent; + Slashed: AugmentedEvent; /** - * One validator (and its nominators) has been slashed by the given amount. - * \[validator, amount\] + * A slash for the given validator, for the given percentage of their stake, at the given + * era as been reported. **/ - Slashed: AugmentedEvent; + SlashReported: AugmentedEvent; /** * A new set of stakers was elected. **/ @@ -2380,18 +2423,18 @@ declare module '@polkadot/api-base/types/events' { **/ StakingElectionFailed: AugmentedEvent; /** - * An account has unbonded this amount. \[stash, amount\] + * An account has unbonded this amount. **/ - Unbonded: AugmentedEvent; + Unbonded: AugmentedEvent; /** * A validator has set their preferences. **/ - ValidatorPrefsSet: AugmentedEvent; + ValidatorPrefsSet: AugmentedEvent; /** * An account has called `withdraw_unbonded` and removed unbonding chunks worth `Balance` - * from the unlocking queue. \[stash, amount\] + * from the unlocking queue. **/ - Withdrawn: AugmentedEvent; + Withdrawn: AugmentedEvent; }; storage: { /** @@ -2884,11 +2927,11 @@ declare module '@polkadot/api-base/types/events' { /** * An extrinsic failed. **/ - ExtrinsicFailed: AugmentedEvent; + ExtrinsicFailed: AugmentedEvent; /** * An extrinsic completed successfully. **/ - ExtrinsicSuccess: AugmentedEvent; + ExtrinsicSuccess: AugmentedEvent; /** * An account was reaped. **/ @@ -2902,6 +2945,13 @@ declare module '@polkadot/api-base/types/events' { **/ Remarked: AugmentedEvent; }; + transactionPayment: { + /** + * A transaction fee `actual_fee`, of which `tip` was added to the minimum inclusion fee, + * has been paid by `who`. + **/ + TransactionFeePaid: AugmentedEvent; + }; utility: { /** * Batch of dispatches completed fully with no error. @@ -2940,5 +2990,15 @@ declare module '@polkadot/api-base/types/events' { **/ VestingUpdated: AugmentedEvent; }; + voterList: { + /** + * Moved an account from one bag to another. + **/ + Rebagged: AugmentedEvent; + /** + * Updated the score of some account to the given amount. + **/ + ScoreUpdated: AugmentedEvent; + }; } // AugmentedEvents } // declare module diff --git a/types/src/augment/augment-api-query.ts b/types/src/augment/augment-api-query.ts index fec922c150..cea2802dc6 100644 --- a/types/src/augment/augment-api-query.ts +++ b/types/src/augment/augment-api-query.ts @@ -1,15 +1,22 @@ // Auto-generated via `yarn polkadot-types-from-chain`, do not edit /* eslint-disable */ -import type { ApiTypes } from '@polkadot/api-base/types'; -import type { BTreeMap, Bytes, Null, Option, U8aFixed, Vec, WrapperKeepOpaque, WrapperOpaque, bool, u128, u32, u64, u8 } from '@polkadot/types-codec'; +// import type lookup before we augment - in some environments +// this is required to allow for ambient/previous definitions +import '@polkadot/api-base/types/storage'; + +import type { ApiTypes, AugmentedQuery, QueryableStorageEntry } from '@polkadot/api-base/types'; +import type { Bytes, Null, Option, U8aFixed, Vec, WrapperOpaque, bool, u128, u32, u64, u8 } from '@polkadot/types-codec'; import type { AnyNumber, ITuple } from '@polkadot/types-codec/types'; -import type { AccountId32, Call, H256, Perbill, Percent, Permill } from '@polkadot/types/interfaces/runtime'; -import type { FrameSupportWeightsPerDispatchClassU64, FrameSystemAccountInfo, FrameSystemEventRecord, FrameSystemLastRuntimeUpgradeInfo, FrameSystemPhase, JoystreamNodeRuntimeSessionKeys, PalletAuthorshipUncleEntryItem, PalletBagsListListBag, PalletBagsListListNode, PalletBalancesAccountData, PalletBalancesBalanceLock, PalletBalancesReleases, PalletBalancesReserveData, PalletBountyBountyActor, PalletBountyBountyRecord, PalletBountyContribution, PalletBountyEntryRecord, PalletConstitutionConstitutionInfo, PalletContentChannelRecord, PalletContentLimitPerPeriod, PalletContentNftCounter, PalletContentNftTypesOpenAuctionBidRecord, PalletContentPermissionsCuratorGroupCuratorGroupRecord, PalletContentVideoRecord, PalletCouncilCandidate, PalletCouncilCouncilMember, PalletCouncilCouncilStageUpdate, PalletElectionProviderMultiPhasePhase, PalletElectionProviderMultiPhaseReadySolution, PalletElectionProviderMultiPhaseRoundSnapshot, PalletElectionProviderMultiPhaseSignedSignedSubmission, PalletElectionProviderMultiPhaseSolutionOrSnapshotSize, PalletForumCategory, PalletForumPost, PalletForumThread, PalletGrandpaStoredPendingChange, PalletGrandpaStoredState, PalletImOnlineBoundedOpaqueNetworkState, PalletImOnlineSr25519AppSr25519Public, PalletMembershipMembershipObject, PalletMembershipStakingAccountMemberBinding, PalletMultisigMultisig, PalletProjectTokenAccountData, PalletProjectTokenTokenData, PalletProposalsDiscussionDiscussionPost, PalletProposalsDiscussionDiscussionThread, PalletProposalsEngineProposal, PalletProposalsEngineVoteKind, PalletReferendumCastVote, PalletReferendumReferendumStage, PalletStakingActiveEraInfo, PalletStakingEraRewardPoints, PalletStakingExposure, PalletStakingForcing, PalletStakingNominations, PalletStakingReleases, PalletStakingRewardDestination, PalletStakingSlashingSlashingSpans, PalletStakingSlashingSpanRecord, PalletStakingStakingLedger, PalletStakingUnappliedSlash, PalletStakingValidatorPrefs, PalletStorageBagIdType, PalletStorageBagRecord, PalletStorageDataObject, PalletStorageDistributionBucketFamilyRecord, PalletStorageDistributionBucketRecord, PalletStorageDynamicBagCreationPolicy, PalletStorageDynamicBagType, PalletStorageStorageBucketRecord, PalletTransactionPaymentReleases, PalletVestingReleases, PalletVestingVestingInfo, PalletWorkingGroupGroupWorker, PalletWorkingGroupJobApplication, PalletWorkingGroupOpening, SpAuthorityDiscoveryAppPublic, SpConsensusBabeAppPublic, SpConsensusBabeBabeEpochConfiguration, SpConsensusBabeDigestsNextConfigDescriptor, SpConsensusBabeDigestsPreDigest, SpCoreCryptoKeyTypeId, SpNposElectionsElectionScore, SpRuntimeDigest, SpStakingOffenceOffenceDetails } from '@polkadot/types/lookup'; +import type { AccountId32, H256, Perbill, Percent, Permill } from '@polkadot/types/interfaces/runtime'; +import type { FrameSupportDispatchPerDispatchClassWeight, FrameSystemAccountInfo, FrameSystemEventRecord, FrameSystemLastRuntimeUpgradeInfo, FrameSystemPhase, JoystreamNodeRuntimeSessionKeys, PalletBagsListListBag, PalletBagsListListNode, PalletBalancesAccountData, PalletBalancesBalanceLock, PalletBalancesReserveData, PalletBountyBountyActor, PalletBountyBountyRecord, PalletBountyContribution, PalletBountyEntryRecord, PalletConstitutionConstitutionInfo, PalletContentChannelRecord, PalletContentLimitPerPeriod, PalletContentNftCounter, PalletContentNftTypesOpenAuctionBidRecord, PalletContentPermissionsCuratorGroupCuratorGroupRecord, PalletContentVideoRecord, PalletCouncilCandidate, PalletCouncilCouncilMember, PalletCouncilCouncilStageUpdate, PalletElectionProviderMultiPhasePhase, PalletElectionProviderMultiPhaseReadySolution, PalletElectionProviderMultiPhaseRoundSnapshot, PalletElectionProviderMultiPhaseSignedSignedSubmission, PalletElectionProviderMultiPhaseSolutionOrSnapshotSize, PalletForumCategory, PalletForumPost, PalletForumThread, PalletGrandpaStoredPendingChange, PalletGrandpaStoredState, PalletImOnlineBoundedOpaqueNetworkState, PalletImOnlineSr25519AppSr25519Public, PalletMembershipMembershipObject, PalletMembershipStakingAccountMemberBinding, PalletMultisigMultisig, PalletProjectTokenAccountData, PalletProjectTokenTokenData, PalletProposalsDiscussionDiscussionPost, PalletProposalsDiscussionDiscussionThread, PalletProposalsEngineProposal, PalletProposalsEngineVoteKind, PalletReferendumCastVote, PalletReferendumReferendumStage, PalletStakingActiveEraInfo, PalletStakingEraRewardPoints, PalletStakingExposure, PalletStakingForcing, PalletStakingNominations, PalletStakingRewardDestination, PalletStakingSlashingSlashingSpans, PalletStakingSlashingSpanRecord, PalletStakingStakingLedger, PalletStakingUnappliedSlash, PalletStakingValidatorPrefs, PalletStorageBagIdType, PalletStorageBagRecord, PalletStorageDataObject, PalletStorageDistributionBucketFamilyRecord, PalletStorageDistributionBucketRecord, PalletStorageDynamicBagCreationPolicy, PalletStorageDynamicBagType, PalletStorageStorageBucketRecord, PalletTransactionPaymentReleases, PalletVestingReleases, PalletVestingVestingInfo, PalletWorkingGroupGroupWorker, PalletWorkingGroupJobApplication, PalletWorkingGroupOpening, SpAuthorityDiscoveryAppPublic, SpConsensusBabeAppPublic, SpConsensusBabeBabeEpochConfiguration, SpConsensusBabeDigestsNextConfigDescriptor, SpConsensusBabeDigestsPreDigest, SpCoreCryptoKeyTypeId, SpNposElectionsElectionScore, SpRuntimeDigest, SpStakingOffenceOffenceDetails } from '@polkadot/types/lookup'; import type { Observable } from '@polkadot/types/types'; +export type __AugmentedQuery = AugmentedQuery unknown>; +export type __QueryableStorageEntry = QueryableStorageEntry; + declare module '@polkadot/api-base/types/storage' { - export interface AugmentedQueries { + interface AugmentedQueries { appWorkingGroup: { /** * Count of active workers. @@ -67,14 +74,6 @@ declare module '@polkadot/api-base/types/storage' { * Author of current block. **/ author: AugmentedQuery Observable>, []>; - /** - * Whether uncles were already set in this block. - **/ - didSetUncles: AugmentedQuery Observable, []>; - /** - * Uncles - **/ - uncles: AugmentedQuery Observable>, []>; }; babe: { /** @@ -170,27 +169,20 @@ declare module '@polkadot/api-base/types/storage' { **/ segmentIndex: AugmentedQuery Observable, []>; /** - * TWOX-NOTE: `SegmentIndex` is an increasing integer, so this is okay. - **/ - underConstruction: AugmentedQuery Observable>, [u32]>; - }; - bagsList: { - /** - * Counter for the related counted storage map - **/ - counterForListNodes: AugmentedQuery Observable, []>; - /** - * A bag stored in storage. + * A list of the last 100 skipped epochs and the corresponding session index + * when the epoch was skipped. * - * Stores a `Bag` struct, which stores head and tail pointers to itself. + * This is only used for validating equivocation proofs. An equivocation proof + * must contains a key-ownership proof for a given session, therefore we need a + * way to tie together sessions and epoch indices, i.e. we need to validate that + * a validator was the owner of a given key on a given session, and what the + * active epoch index was during that session. **/ - listBags: AugmentedQuery Observable>, [u64]>; + skippedEpochs: AugmentedQuery Observable>>, []>; /** - * A single node, within some bag. - * - * Nodes store links forward and back within their respective bags. + * TWOX-NOTE: `SegmentIndex` is an increasing integer, so this is okay. **/ - listNodes: AugmentedQuery Observable>, [AccountId32]>; + underConstruction: AugmentedQuery Observable>, [u32]>; }; balances: { /** @@ -220,6 +212,10 @@ declare module '@polkadot/api-base/types/storage' { * NOTE: This is only used in the case that this pallet is used to store balances. **/ account: AugmentedQuery Observable, [AccountId32]>; + /** + * The total units of outstanding deactivated balance in the system. + **/ + inactiveIssuance: AugmentedQuery Observable, []>; /** * Any liquidity locks on some account balances. * NOTE: Should only be accessed when setting, changing and freeing a lock. @@ -229,12 +225,6 @@ declare module '@polkadot/api-base/types/storage' { * Named reserves on some account balances. **/ reserves: AugmentedQuery Observable>, [AccountId32]>; - /** - * Storage version of the pallet. - * - * This is set to v2.0.0 for new networks. - **/ - storageVersion: AugmentedQuery Observable, []>; /** * The total units issued in the system. **/ @@ -522,14 +512,14 @@ declare module '@polkadot/api-base/types/storage' { **/ round: AugmentedQuery Observable, []>; /** - * A sorted, bounded set of `(score, index)`, where each `index` points to a value in - * `SignedSubmissions`. + * A sorted, bounded vector of `(score, block_number, index)`, where each `index` points to a + * value in `SignedSubmissions`. * * We never need to process more than a single signed submission at a time. Signed submissions * can be quite large, so we're willing to pay the cost of multiple database accesses to access * them one at a time instead of reading and decoding all of them at once. **/ - signedSubmissionIndices: AugmentedQuery Observable>, []>; + signedSubmissionIndices: AugmentedQuery Observable>>, []>; /** * The next index to be assigned to an incoming signed submission. * @@ -659,6 +649,12 @@ declare module '@polkadot/api-base/types/storage' { * A mapping from grandpa set ID to the index of the *most recent* session for which its * members were responsible. * + * This is only used for validating equivocation proofs. An equivocation proof must + * contains a key-ownership proof for a given session, therefore we need a way to tie + * together sessions and GRANDPA set ids, i.e. we need to validate that a validator + * was the owner of a given key on a given session, and what the active set ID was + * during that session. + * * TWOX-NOTE: `SetId` is not under user control. **/ setIdSession: AugmentedQuery Observable>, [u64]>; @@ -791,7 +787,6 @@ declare module '@polkadot/api-base/types/storage' { workerById: AugmentedQuery Observable>, [u64]>; }; multisig: { - calls: AugmentedQuery Observable, AccountId32, u128]>>>, [U8aFixed]>; /** * The set of open multisig operations. **/ @@ -947,10 +942,30 @@ declare module '@polkadot/api-base/types/storage' { * Double map TokenId x MemberId => AccountData for managing account data **/ accountInfoByTokenAndMember: AugmentedQuery Observable, [u64, u64]>; + /** + * AMM buy transaction fee percentage + **/ + ammBuyTxFees: AugmentedQuery Observable, []>; + /** + * Percentage threshold for deactivating the amm functionality + **/ + ammDeactivationThreshold: AugmentedQuery Observable, []>; + /** + * AMM sell transaction fee percentage + **/ + ammSellTxFees: AugmentedQuery Observable, []>; /** * Bloat Bond value used during account creation **/ bloatBond: AugmentedQuery Observable, []>; + /** + * Max patronage rate allowed + **/ + maxYearlyPatronageRate: AugmentedQuery Observable, []>; + /** + * Minimum slope parameters allowed for AMM curve + **/ + minAmmSlopeParameter: AugmentedQuery Observable, []>; /** * Minimum revenue split duration constraint **/ @@ -968,13 +983,13 @@ declare module '@polkadot/api-base/types/storage' { **/ nextTokenId: AugmentedQuery Observable, []>; /** - * Platform fee (percentage) charged on top of each sale purchase (in JOY) and burned + * Current frozen state. **/ - salePlatformFee: AugmentedQuery Observable, []>; + palletFrozen: AugmentedQuery Observable, []>; /** - * Set for the tokens symbols + * Platform fee (percentage) charged on top of each sale purchase (in JOY) and burned **/ - symbolsUsed: AugmentedQuery Observable, [H256]>; + salePlatformFee: AugmentedQuery Observable, []>; /** * map TokenId => TokenData to retrieve token information **/ @@ -1099,6 +1114,8 @@ declare module '@polkadot/api-base/types/storage' { activeEra: AugmentedQuery Observable>, []>; /** * Map from all locked "stash" accounts to the controller account. + * + * TWOX-NOTE: SAFE since `AccountId` is a secure hash. **/ bonded: AugmentedQuery Observable>, [AccountId32]>; /** @@ -1140,10 +1157,6 @@ declare module '@polkadot/api-base/types/storage' { * This is basically in sync with the call to [`pallet_session::SessionManager::new_session`]. **/ currentPlannedSession: AugmentedQuery Observable, []>; - /** - * The earliest era for which we have a pending, unapplied slash. - **/ - earliestUnappliedSlash: AugmentedQuery Observable>, []>; /** * Rewards for the last `HISTORY_DEPTH` eras. * If reward hasn't been set or has been removed then 0 reward is returned. @@ -1202,16 +1215,6 @@ declare module '@polkadot/api-base/types/storage' { * Mode of era forcing. **/ forceEra: AugmentedQuery Observable, []>; - /** - * Number of eras to keep in history. - * - * Information is kept for eras in `[current_era - history_depth; current_era]`. - * - * Must be more than the number of eras delayed by session otherwise. I.e. active era must - * always be in history. I.e. `active_era > current_era - history_depth` must be - * guaranteed. - **/ - historyDepth: AugmentedQuery Observable, []>; /** * Any validators that may never be slashed or forcibly kicked. It's a Vec since they're * easy to initialize and the performance hit is minimal (we expect no more than four @@ -1240,6 +1243,10 @@ declare module '@polkadot/api-base/types/storage' { * If set to `0`, no limit exists. **/ minCommission: AugmentedQuery Observable, []>; + /** + * The minimum active nominator stake of the last successful election. + **/ + minimumActiveStake: AugmentedQuery Observable, []>; /** * Minimum number of staking participants before emergency conditions are imposed. **/ @@ -1269,6 +1276,8 @@ declare module '@polkadot/api-base/types/storage' { * * Lastly, if any of the nominators become non-decodable, they can be chilled immediately via * [`Call::chill_other`] dispatchable by anyone. + * + * TWOX-NOTE: SAFE since `AccountId` is a secure hash. **/ nominators: AugmentedQuery Observable>, [AccountId32]>; /** @@ -1289,6 +1298,8 @@ declare module '@polkadot/api-base/types/storage' { offendingValidators: AugmentedQuery Observable>>, []>; /** * Where the reward payment should be made. Keyed by stash. + * + * TWOX-NOTE: SAFE since `AccountId` is a secure hash. **/ payee: AugmentedQuery Observable, [AccountId32]>; /** @@ -1306,23 +1317,18 @@ declare module '@polkadot/api-base/types/storage' { * as well as how much reward has been paid out. **/ spanSlash: AugmentedQuery | [AccountId32 | string | Uint8Array, u32 | AnyNumber | Uint8Array]) => Observable, [ITuple<[AccountId32, u32]>]>; - /** - * True if network has been upgraded to this version. - * Storage version of the pallet. - * - * This is set to v7.0.0 for new networks. - **/ - storageVersion: AugmentedQuery Observable, []>; /** * All unapplied slashes that are queued for later. **/ unappliedSlashes: AugmentedQuery Observable>, [u32]>; /** - * The ideal number of staking participants. + * The ideal number of active validators. **/ validatorCount: AugmentedQuery Observable, []>; /** * The map from (wannabe) validator stash key to the preferences of that validator. + * + * TWOX-NOTE: SAFE since `AccountId` is a secure hash. **/ validators: AugmentedQuery Observable, [AccountId32]>; /** @@ -1467,7 +1473,7 @@ declare module '@polkadot/api-base/types/storage' { /** * The current weight for the block. **/ - blockWeight: AugmentedQuery Observable, []>; + blockWeight: AugmentedQuery Observable, []>; /** * Digest of the current block, also part of the block header. **/ @@ -1559,5 +1565,23 @@ declare module '@polkadot/api-base/types/storage' { **/ vesting: AugmentedQuery Observable>>, [AccountId32]>; }; + voterList: { + /** + * Counter for the related counted storage map + **/ + counterForListNodes: AugmentedQuery Observable, []>; + /** + * A bag stored in storage. + * + * Stores a `Bag` struct, which stores head and tail pointers to itself. + **/ + listBags: AugmentedQuery Observable>, [u64]>; + /** + * A single node, within some bag. + * + * Nodes store links forward and back within their respective bags. + **/ + listNodes: AugmentedQuery Observable>, [AccountId32]>; + }; } // AugmentedQueries } // declare module diff --git a/types/src/augment/augment-api-rpc.ts b/types/src/augment/augment-api-rpc.ts index 9c59ccaa52..f882746f38 100644 --- a/types/src/augment/augment-api-rpc.ts +++ b/types/src/augment/augment-api-rpc.ts @@ -1,9 +1,13 @@ // Auto-generated via `yarn polkadot-types-from-chain`, do not edit /* eslint-disable */ +// import type lookup before we augment - in some environments +// this is required to allow for ambient/previous definitions +import '@polkadot/rpc-core/types/jsonrpc'; + import type { AugmentedRpc } from '@polkadot/rpc-core/types'; import type { Metadata, StorageKey } from '@polkadot/types'; -import type { Bytes, HashMap, Json, Null, Option, Text, U256, U64, Vec, bool, u32, u64 } from '@polkadot/types-codec'; +import type { Bytes, HashMap, Json, Null, Option, Text, U256, U64, Vec, bool, f64, u32, u64 } from '@polkadot/types-codec'; import type { AnyNumber, Codec } from '@polkadot/types-codec/types'; import type { ExtrinsicOrHash, ExtrinsicStatus } from '@polkadot/types/interfaces/author'; import type { EpochAuthorship } from '@polkadot/types/interfaces/babe'; @@ -11,23 +15,25 @@ import type { BeefySignedCommitment } from '@polkadot/types/interfaces/beefy'; import type { BlockHash } from '@polkadot/types/interfaces/chain'; import type { PrefixedStorageKey } from '@polkadot/types/interfaces/childstate'; import type { AuthorityId } from '@polkadot/types/interfaces/consensus'; -import type { CodeUploadRequest, CodeUploadResult, ContractCallRequest, ContractExecResult, ContractInstantiateResult, InstantiateRequest } from '@polkadot/types/interfaces/contracts'; +import type { CodeUploadRequest, CodeUploadResult, ContractCallRequest, ContractExecResult, ContractInstantiateResult, InstantiateRequestV1 } from '@polkadot/types/interfaces/contracts'; import type { BlockStats } from '@polkadot/types/interfaces/dev'; import type { CreatedBlock } from '@polkadot/types/interfaces/engine'; -import type { EthAccount, EthCallRequest, EthFilter, EthFilterChanges, EthLog, EthReceipt, EthRichBlock, EthSubKind, EthSubParams, EthSyncStatus, EthTransaction, EthTransactionRequest, EthWork } from '@polkadot/types/interfaces/eth'; +import type { EthAccount, EthCallRequest, EthFeeHistory, EthFilter, EthFilterChanges, EthLog, EthReceipt, EthRichBlock, EthSubKind, EthSubParams, EthSyncStatus, EthTransaction, EthTransactionRequest, EthWork } from '@polkadot/types/interfaces/eth'; import type { Extrinsic } from '@polkadot/types/interfaces/extrinsics'; import type { EncodedFinalityProofs, JustificationNotification, ReportedRoundStates } from '@polkadot/types/interfaces/grandpa'; import type { MmrLeafBatchProof, MmrLeafProof } from '@polkadot/types/interfaces/mmr'; import type { StorageKind } from '@polkadot/types/interfaces/offchain'; -import type { FeeDetails, RuntimeDispatchInfo } from '@polkadot/types/interfaces/payment'; +import type { FeeDetails, RuntimeDispatchInfoV1 } from '@polkadot/types/interfaces/payment'; import type { RpcMethods } from '@polkadot/types/interfaces/rpc'; import type { AccountId, BlockNumber, H160, H256, H64, Hash, Header, Index, Justification, KeyValue, SignedBlock, StorageData } from '@polkadot/types/interfaces/runtime'; import type { MigrationStatusResult, ReadProof, RuntimeVersion, TraceBlockResponse } from '@polkadot/types/interfaces/state'; import type { ApplyExtrinsicResult, ChainProperties, ChainType, Health, NetworkState, NodeRole, PeerInfo, SyncState } from '@polkadot/types/interfaces/system'; import type { IExtrinsic, Observable } from '@polkadot/types/types'; +export type __AugmentedRpc = AugmentedRpc<() => unknown>; + declare module '@polkadot/rpc-core/types/jsonrpc' { - export interface RpcInterface { + interface RpcInterface { author: { /** * Returns true if the keystore has private keys for the given public key and key type. @@ -56,11 +62,11 @@ declare module '@polkadot/rpc-core/types/jsonrpc' { /** * Submit and subscribe to watch an extrinsic until unsubscribed **/ - submitAndWatchExtrinsic: AugmentedRpc<(extrinsic: IExtrinsic) => Observable>; + submitAndWatchExtrinsic: AugmentedRpc<(extrinsic: Extrinsic | IExtrinsic | string | Uint8Array) => Observable>; /** * Submit a fully formatted extrinsic for block inclusion **/ - submitExtrinsic: AugmentedRpc<(extrinsic: IExtrinsic) => Observable>; + submitExtrinsic: AugmentedRpc<(extrinsic: Extrinsic | IExtrinsic | string | Uint8Array) => Observable>; }; babe: { /** @@ -136,22 +142,27 @@ declare module '@polkadot/rpc-core/types/jsonrpc' { }; contracts: { /** + * @deprecated Use the runtime interface `api.call.contractsApi.call` instead * Executes a call to a contract **/ call: AugmentedRpc<(callRequest: ContractCallRequest | { origin?: any; dest?: any; value?: any; gasLimit?: any; storageDepositLimit?: any; inputData?: any } | string | Uint8Array, at?: BlockHash | string | Uint8Array) => Observable>; /** + * @deprecated Use the runtime interface `api.call.contractsApi.getStorage` instead * Returns the value under a specified storage key in a contract **/ getStorage: AugmentedRpc<(address: AccountId | string | Uint8Array, key: H256 | string | Uint8Array, at?: BlockHash | string | Uint8Array) => Observable>>; /** + * @deprecated Use the runtime interface `api.call.contractsApi.instantiate` instead * Instantiate a new contract **/ - instantiate: AugmentedRpc<(request: InstantiateRequest | { origin?: any; value?: any; gasLimit?: any; storageDepositLimit?: any; code?: any; data?: any; salt?: any } | string | Uint8Array, at?: BlockHash | string | Uint8Array) => Observable>; + instantiate: AugmentedRpc<(request: InstantiateRequestV1 | { origin?: any; value?: any; gasLimit?: any; code?: any; data?: any; salt?: any } | string | Uint8Array, at?: BlockHash | string | Uint8Array) => Observable>; /** + * @deprecated Not available in newer versions of the contracts interfaces * Returns the projected time a given contract will be able to sustain paying its rent **/ rentProjection: AugmentedRpc<(address: AccountId | string | Uint8Array, at?: BlockHash | string | Uint8Array) => Observable>>; /** + * @deprecated Use the runtime interface `api.call.contractsApi.uploadCode` instead * Upload new code without instantiating a contract from it **/ uploadCode: AugmentedRpc<(uploadRequest: CodeUploadRequest | { origin?: any; code?: any; storageDepositLimit?: any } | string | Uint8Array, at?: BlockHash | string | Uint8Array) => Observable>; @@ -197,6 +208,10 @@ declare module '@polkadot/rpc-core/types/jsonrpc' { * Estimate gas needed for execution of given contract. **/ estimateGas: AugmentedRpc<(request: EthCallRequest | { from?: any; to?: any; gasPrice?: any; gas?: any; value?: any; data?: any; nonce?: any } | string | Uint8Array, number?: BlockNumber | AnyNumber | Uint8Array) => Observable>; + /** + * Returns fee history for given block count & reward percentiles + **/ + feeHistory: AugmentedRpc<(blockCount: U256 | AnyNumber | Uint8Array, newestBlock: BlockNumber | AnyNumber | Uint8Array, rewardPercentiles: Option> | null | Uint8Array | Vec | (f64)[]) => Observable>; /** * Returns current gas price. **/ @@ -260,7 +275,7 @@ declare module '@polkadot/rpc-core/types/jsonrpc' { /** * Returns the number of transactions sent from given address at given time (block number). **/ - getTransactionCount: AugmentedRpc<(hash: H256 | string | Uint8Array, number?: BlockNumber | AnyNumber | Uint8Array) => Observable>; + getTransactionCount: AugmentedRpc<(address: H160 | string | Uint8Array, number?: BlockNumber | AnyNumber | Uint8Array) => Observable>; /** * Returns transaction receipt by transaction hash. **/ @@ -289,6 +304,10 @@ declare module '@polkadot/rpc-core/types/jsonrpc' { * Returns the number of hashes per second that the node is mining with. **/ hashrate: AugmentedRpc<() => Observable>; + /** + * Returns max priority fee per gas + **/ + maxPriorityFeePerGas: AugmentedRpc<() => Observable>; /** * Returns true if client is actively mining new blocks. **/ @@ -388,13 +407,15 @@ declare module '@polkadot/rpc-core/types/jsonrpc' { }; payment: { /** + * @deprecated Use `api.call.transactionPaymentApi.queryFeeDetails` instead * Query the detailed fee of a given encoded extrinsic **/ queryFeeDetails: AugmentedRpc<(extrinsic: Bytes | string | Uint8Array, at?: BlockHash | string | Uint8Array) => Observable>; /** + * @deprecated Use `api.call.transactionPaymentApi.queryInfo` instead * Retrieves the fee information for an encoded extrinsic **/ - queryInfo: AugmentedRpc<(extrinsic: Bytes | string | Uint8Array, at?: BlockHash | string | Uint8Array) => Observable>; + queryInfo: AugmentedRpc<(extrinsic: Bytes | string | Uint8Array, at?: BlockHash | string | Uint8Array) => Observable>; }; rpc: { /** @@ -428,6 +449,7 @@ declare module '@polkadot/rpc-core/types/jsonrpc' { **/ getChildStorageSize: AugmentedRpc<(childStorageKey: StorageKey | string | Uint8Array | any, childDefinition: StorageKey | string | Uint8Array | any, childType: u32 | AnyNumber | Uint8Array, key: StorageKey | string | Uint8Array | any, at?: BlockHash | string | Uint8Array) => Observable>; /** + * @deprecated Use `api.rpc.state.getKeysPaged` to retrieve keys * Retrieves the keys with a certain prefix **/ getKeys: AugmentedRpc<(key: StorageKey | string | Uint8Array | any, at?: BlockHash | string | Uint8Array) => Observable>>; @@ -440,6 +462,7 @@ declare module '@polkadot/rpc-core/types/jsonrpc' { **/ getMetadata: AugmentedRpc<(at?: BlockHash | string | Uint8Array) => Observable>; /** + * @deprecated Use `api.rpc.state.getKeysPaged` to retrieve keys * Returns the keys with prefix, leave empty to get all the keys (deprecated: Use getKeysPaged) **/ getPairs: AugmentedRpc<(prefix: StorageKey | string | Uint8Array | any, at?: BlockHash | string | Uint8Array) => Observable>>; @@ -482,7 +505,7 @@ declare module '@polkadot/rpc-core/types/jsonrpc' { /** * Provides a way to trace the re-execution of a single block **/ - traceBlock: AugmentedRpc<(block: Hash | string | Uint8Array, targets: Option | null | object | string | Uint8Array, storageKeys: Option | null | object | string | Uint8Array, methods: Option | null | object | string | Uint8Array) => Observable>; + traceBlock: AugmentedRpc<(block: Hash | string | Uint8Array, targets: Option | null | Uint8Array | Text | string, storageKeys: Option | null | Uint8Array | Text | string, methods: Option | null | Uint8Array | Text | string) => Observable>; /** * Check current migration state **/ diff --git a/types/src/augment/augment-api-runtime.ts b/types/src/augment/augment-api-runtime.ts new file mode 100644 index 0000000000..ded29c45a0 --- /dev/null +++ b/types/src/augment/augment-api-runtime.ts @@ -0,0 +1,183 @@ +// Auto-generated via `yarn polkadot-types-from-chain`, do not edit +/* eslint-disable */ + +// import type lookup before we augment - in some environments +// this is required to allow for ambient/previous definitions +import '@polkadot/api-base/types/calls'; + +import type { ApiTypes, AugmentedCall, DecoratedCallBase } from '@polkadot/api-base/types'; +import type { Bytes, Null, Option, Vec, u32 } from '@polkadot/types-codec'; +import type { AnyNumber, ITuple } from '@polkadot/types-codec/types'; +import type { BabeEquivocationProof, BabeGenesisConfiguration, Epoch, OpaqueKeyOwnershipProof } from '@polkadot/types/interfaces/babe'; +import type { CheckInherentsResult, InherentData } from '@polkadot/types/interfaces/blockbuilder'; +import type { BlockHash } from '@polkadot/types/interfaces/chain'; +import type { AuthorityId } from '@polkadot/types/interfaces/consensus'; +import type { Extrinsic } from '@polkadot/types/interfaces/extrinsics'; +import type { AuthorityList, GrandpaEquivocationProof, SetId } from '@polkadot/types/interfaces/grandpa'; +import type { OpaqueMetadata } from '@polkadot/types/interfaces/metadata'; +import type { FeeDetails, RuntimeDispatchInfo } from '@polkadot/types/interfaces/payment'; +import type { AccountId, Balance, Block, Header, Index, KeyTypeId, Slot, Weight } from '@polkadot/types/interfaces/runtime'; +import type { RuntimeVersion } from '@polkadot/types/interfaces/state'; +import type { ApplyExtrinsicResult } from '@polkadot/types/interfaces/system'; +import type { TransactionSource, TransactionValidity } from '@polkadot/types/interfaces/txqueue'; +import type { IExtrinsic, Observable } from '@polkadot/types/types'; + +export type __AugmentedCall = AugmentedCall; +export type __DecoratedCallBase = DecoratedCallBase; + +declare module '@polkadot/api-base/types/calls' { + interface AugmentedCalls { + /** 0xbc9d89904f5b923f/1 */ + accountNonceApi: { + /** + * The API to query account nonce (aka transaction index) + **/ + accountNonce: AugmentedCall Observable>; + }; + /** 0x687ad44ad37f03c2/1 */ + authorityDiscoveryApi: { + /** + * Retrieve authority identifiers of the current and next authority set. + **/ + authorities: AugmentedCall Observable>>; + }; + /** 0xcbca25e39f142387/2 */ + babeApi: { + /** + * Return the genesis configuration for BABE. The configuration is only read on genesis. + **/ + configuration: AugmentedCall Observable>; + /** + * Returns information regarding the current epoch. + **/ + currentEpoch: AugmentedCall Observable>; + /** + * Returns the slot that started the current epoch. + **/ + currentEpochStart: AugmentedCall Observable>; + /** + * Generates a proof of key ownership for the given authority in the current epoch. + **/ + generateKeyOwnershipProof: AugmentedCall Observable>>; + /** + * Returns information regarding the next epoch (which was already previously announced). + **/ + nextEpoch: AugmentedCall Observable>; + /** + * Submits an unsigned extrinsic to report an equivocation. + **/ + submitReportEquivocationUnsignedExtrinsic: AugmentedCall Observable>>; + }; + /** 0x40fe3ad401f8959a/6 */ + blockBuilder: { + /** + * Apply the given extrinsic. + **/ + applyExtrinsic: AugmentedCall Observable>; + /** + * Check that the inherents are valid. + **/ + checkInherents: AugmentedCall Observable>; + /** + * Finish the current block. + **/ + finalizeBlock: AugmentedCall Observable
>; + /** + * Generate inherent extrinsics. + **/ + inherentExtrinsics: AugmentedCall Observable>>; + }; + /** 0xdf6acb689907609b/4 */ + core: { + /** + * Execute the given block. + **/ + executeBlock: AugmentedCall Observable>; + /** + * Initialize a block with the given header. + **/ + initializeBlock: AugmentedCall Observable>; + /** + * Returns the version of the runtime. + **/ + version: AugmentedCall Observable>; + }; + /** 0xed99c5acb25eedf5/3 */ + grandpaApi: { + /** + * Get current GRANDPA authority set id. + **/ + currentSetId: AugmentedCall Observable>; + /** + * Generates a proof of key ownership for the given authority in the given set. + **/ + generateKeyOwnershipProof: AugmentedCall Observable>>; + /** + * Get the current GRANDPA authorities and weights. This should not change except for when changes are scheduled and the corresponding delay has passed. + **/ + grandpaAuthorities: AugmentedCall Observable>; + /** + * Submits an unsigned extrinsic to report an equivocation. + **/ + submitReportEquivocationUnsignedExtrinsic: AugmentedCall Observable>>; + }; + /** 0x37e397fc7c91f5e4/1 */ + metadata: { + /** + * Returns the metadata of a runtime + **/ + metadata: AugmentedCall Observable>; + }; + /** 0xf78b278be53f454c/2 */ + offchainWorkerApi: { + /** + * Starts the off-chain task for given block header. + **/ + offchainWorker: AugmentedCall Observable>; + }; + /** 0xab3c0572291feb8b/1 */ + sessionKeys: { + /** + * Decode the given public session keys. + **/ + decodeSessionKeys: AugmentedCall Observable>>>>; + /** + * Generate a set of session keys with optionally using the given seed. + **/ + generateSessionKeys: AugmentedCall | null | Uint8Array | Bytes | string) => Observable>; + }; + /** 0x18ef58a3b67ba770/1 */ + stakingApi: { + /** + * Returns the nominations quota for a nominator with a given balance. + **/ + nominationsQuota: AugmentedCall Observable>; + }; + /** 0xd2bc9897eed08f15/3 */ + taggedTransactionQueue: { + /** + * Validate the transaction. + **/ + validateTransaction: AugmentedCall Observable>; + }; + /** 0x37c8bb1350a9a2a8/3 */ + transactionPaymentApi: { + /** + * The transaction fee details + **/ + queryFeeDetails: AugmentedCall Observable>; + /** + * The transaction info + **/ + queryInfo: AugmentedCall Observable>; + /** + * Query the output of the current LengthToFee given some input + **/ + queryLengthToFee: AugmentedCall Observable>; + /** + * Query the output of the current WeightToFee given some input + **/ + queryWeightToFee: AugmentedCall Observable>; + }; + } // AugmentedCalls +} // declare module diff --git a/types/src/augment/augment-api-tx.ts b/types/src/augment/augment-api-tx.ts index 250eb8a601..ab25a69a7c 100644 --- a/types/src/augment/augment-api-tx.ts +++ b/types/src/augment/augment-api-tx.ts @@ -1,14 +1,22 @@ // Auto-generated via `yarn polkadot-types-from-chain`, do not edit /* eslint-disable */ -import type { ApiTypes } from '@polkadot/api-base/types'; -import type { BTreeMap, BTreeSet, Bytes, Compact, Option, U8aFixed, Vec, WrapperKeepOpaque, bool, u128, u16, u32, u64, u8 } from '@polkadot/types-codec'; +// import type lookup before we augment - in some environments +// this is required to allow for ambient/previous definitions +import '@polkadot/api-base/types/submittable'; + +import type { ApiTypes, AugmentedSubmittable, SubmittableExtrinsic, SubmittableExtrinsicFunction } from '@polkadot/api-base/types'; +import type { BTreeMap, BTreeSet, Bytes, Compact, Option, U8aFixed, Vec, bool, u128, u16, u32, u64, u8 } from '@polkadot/types-codec'; import type { AnyNumber, IMethod, ITuple } from '@polkadot/types-codec/types'; import type { AccountId32, Call, H256, Perbill, Percent, Permill } from '@polkadot/types/interfaces/runtime'; -import type { JoystreamNodeRuntimeOriginCaller, JoystreamNodeRuntimeSessionKeys, PalletBountyBountyActor, PalletBountyBountyParametersBTreeSet, PalletBountyOracleWorkEntryJudgment, PalletCommonBalanceKind, PalletCommonFundingRequestParameters, PalletCommonMerkleTreeProofElementRecord, PalletCommonWorkingGroupIterableEnumsWorkingGroup, PalletContentChannelBagWitness, PalletContentChannelCreationParametersRecord, PalletContentChannelOwner, PalletContentChannelUpdateParametersRecord, PalletContentInitTransferParameters, PalletContentIterableEnumsChannelActionPermission, PalletContentNftLimitPeriod, PalletContentNftTypesEnglishAuctionParamsRecord, PalletContentNftTypesNftIssuanceParametersRecord, PalletContentNftTypesOpenAuctionParamsRecord, PalletContentPermissionsContentActor, PalletContentPermissionsCuratorGroupIterableEnumsContentModerationAction, PalletContentPermissionsCuratorGroupIterableEnumsPausableChannelFeature, PalletContentPullPaymentElement, PalletContentTransferCommitmentParametersBTreeMap, PalletContentUpdateChannelPayoutsParametersRecord, PalletContentVideoCreationParametersRecord, PalletContentVideoUpdateParametersRecord, PalletElectionProviderMultiPhaseRawSolution, PalletElectionProviderMultiPhaseSolutionOrSnapshotSize, PalletForumExtendedPostIdObject, PalletForumPrivilegedActor, PalletImOnlineHeartbeat, PalletImOnlineSr25519AppSr25519Signature, PalletMembershipBuyMembershipParameters, PalletMembershipCreateMemberParameters, PalletMembershipGiftMembershipParameters, PalletMembershipInviteMembershipParameters, PalletMultisigTimepoint, PalletProjectTokenMerkleProof, PalletProjectTokenTokenIssuanceParameters, PalletProjectTokenTokenSaleParams, PalletProjectTokenTransfersPayment, PalletProjectTokenTransfersPaymentWithVesting, PalletProposalsCodexGeneralProposalParams, PalletProposalsCodexProposalDetails, PalletProposalsDiscussionThreadModeBTreeSet, PalletProposalsEngineVoteKind, PalletStakingPalletConfigOpPerbill, PalletStakingPalletConfigOpPercent, PalletStakingPalletConfigOpU128, PalletStakingPalletConfigOpU32, PalletStakingRewardDestination, PalletStakingValidatorPrefs, PalletStorageBagIdType, PalletStorageDistributionBucketIdRecord, PalletStorageDynamicBagType, PalletVestingVestingInfo, PalletWorkingGroupApplyOnOpeningParams, PalletWorkingGroupOpeningType, PalletWorkingGroupStakePolicy, SpConsensusBabeDigestsNextConfigDescriptor, SpConsensusSlotsEquivocationProof, SpFinalityGrandpaEquivocationProof, SpNposElectionsElectionScore, SpNposElectionsSupport, SpRuntimeHeader, SpSessionMembershipProof } from '@polkadot/types/lookup'; +import type { JoystreamNodeRuntimeOriginCaller, JoystreamNodeRuntimeSessionKeys, PalletBountyBountyActor, PalletBountyBountyParametersBTreeSet, PalletBountyOracleWorkEntryJudgment, PalletCommonBalanceKind, PalletCommonFundingRequestParameters, PalletCommonMerkleTreeProofElementRecord, PalletCommonWorkingGroupIterableEnumsWorkingGroup, PalletContentChannelBagWitness, PalletContentChannelCreationParametersRecord, PalletContentChannelOwner, PalletContentChannelUpdateParametersRecord, PalletContentInitTransferParameters, PalletContentIterableEnumsChannelActionPermission, PalletContentNftLimitPeriod, PalletContentNftTypesEnglishAuctionParamsRecord, PalletContentNftTypesNftIssuanceParametersRecord, PalletContentNftTypesOpenAuctionParamsRecord, PalletContentPermissionsContentActor, PalletContentPermissionsCuratorGroupIterableEnumsContentModerationAction, PalletContentPermissionsCuratorGroupIterableEnumsPausableChannelFeature, PalletContentPullPaymentElement, PalletContentTransferCommitmentParametersBTreeMap, PalletContentUpdateChannelPayoutsParametersRecord, PalletContentVideoCreationParametersRecord, PalletContentVideoUpdateParametersRecord, PalletElectionProviderMultiPhaseRawSolution, PalletElectionProviderMultiPhaseSolutionOrSnapshotSize, PalletForumExtendedPostIdObject, PalletForumPrivilegedActor, PalletImOnlineHeartbeat, PalletImOnlineSr25519AppSr25519Signature, PalletMembershipBuyMembershipParameters, PalletMembershipCreateMemberParameters, PalletMembershipGiftMembershipParameters, PalletMembershipInviteMembershipParameters, PalletMultisigTimepoint, PalletProjectTokenAmmParams, PalletProjectTokenMerkleProof, PalletProjectTokenPaymentWithVesting, PalletProjectTokenTokenIssuanceParameters, PalletProjectTokenTokenSaleParams, PalletProposalsCodexGeneralProposalParams, PalletProposalsCodexProposalDetails, PalletProposalsDiscussionThreadModeBTreeSet, PalletProposalsEngineVoteKind, PalletStakingPalletConfigOpPerbill, PalletStakingPalletConfigOpPercent, PalletStakingPalletConfigOpU128, PalletStakingPalletConfigOpU32, PalletStakingRewardDestination, PalletStakingValidatorPrefs, PalletStorageBagIdType, PalletStorageDistributionBucketIdRecord, PalletStorageDynamicBagType, PalletVestingVestingInfo, PalletWorkingGroupApplyOnOpeningParams, PalletWorkingGroupOpeningType, PalletWorkingGroupStakePolicy, SpConsensusBabeDigestsNextConfigDescriptor, SpConsensusGrandpaEquivocationProof, SpConsensusSlotsEquivocationProof, SpNposElectionsElectionScore, SpNposElectionsSupport, SpSessionMembershipProof, SpWeightsWeightV2Weight } from '@polkadot/types/lookup'; + +export type __AugmentedSubmittable = AugmentedSubmittable<() => unknown>; +export type __SubmittableExtrinsic = SubmittableExtrinsic; +export type __SubmittableExtrinsicFunction = SubmittableExtrinsicFunction; declare module '@polkadot/api-base/types/submittable' { - export interface AugmentedSubmittables { + interface AugmentedSubmittables { appWorkingGroup: { /** * Add a job opening for a regular worker/lead role. @@ -23,7 +31,7 @@ declare module '@polkadot/api-base/types/submittable' { * - O(1) doesn't depend on the state or parameters * # **/ - addOpening: AugmentedSubmittable<(description: Bytes | string | Uint8Array, openingType: PalletWorkingGroupOpeningType | 'Leader' | 'Regular' | number | Uint8Array, stakePolicy: PalletWorkingGroupStakePolicy | { stakeAmount?: any; leavingUnstakingPeriod?: any } | string | Uint8Array, rewardPerBlock: Option | null | object | string | Uint8Array) => SubmittableExtrinsic, [Bytes, PalletWorkingGroupOpeningType, PalletWorkingGroupStakePolicy, Option]>; + addOpening: AugmentedSubmittable<(description: Bytes | string | Uint8Array, openingType: PalletWorkingGroupOpeningType | 'Leader' | 'Regular' | number | Uint8Array, stakePolicy: PalletWorkingGroupStakePolicy | { stakeAmount?: any; leavingUnstakingPeriod?: any } | string | Uint8Array, rewardPerBlock: Option | null | Uint8Array | u128 | AnyNumber) => SubmittableExtrinsic, [Bytes, PalletWorkingGroupOpeningType, PalletWorkingGroupStakePolicy, Option]>; /** * Apply on a worker opening. * @@ -126,7 +134,7 @@ declare module '@polkadot/api-base/types/submittable' { * - O(1) doesn't depend on the state or parameters * # **/ - leaveRole: AugmentedSubmittable<(workerId: u64 | AnyNumber | Uint8Array, rationale: Option | null | object | string | Uint8Array) => SubmittableExtrinsic, [u64, Option]>; + leaveRole: AugmentedSubmittable<(workerId: u64 | AnyNumber | Uint8Array, rationale: Option | null | Uint8Array | Bytes | string) => SubmittableExtrinsic, [u64, Option]>; /** * Sets a new budget for the working group. * Requires root origin. @@ -154,7 +162,7 @@ declare module '@polkadot/api-base/types/submittable' { * - O(1) doesn't depend on the state or parameters * # **/ - setStatusText: AugmentedSubmittable<(statusText: Option | null | object | string | Uint8Array) => SubmittableExtrinsic, [Option]>; + setStatusText: AugmentedSubmittable<(statusText: Option | null | Uint8Array | Bytes | string) => SubmittableExtrinsic, [Option]>; /** * Slashes the regular worker stake, demands a leader origin. No limits, no actions on zero stake. * If slashing balance greater than the existing stake - stake is slashed to zero. @@ -168,7 +176,7 @@ declare module '@polkadot/api-base/types/submittable' { * - O(1) doesn't depend on the state or parameters * # **/ - slashStake: AugmentedSubmittable<(workerId: u64 | AnyNumber | Uint8Array, penalty: u128 | AnyNumber | Uint8Array, rationale: Option | null | object | string | Uint8Array) => SubmittableExtrinsic, [u64, u128, Option]>; + slashStake: AugmentedSubmittable<(workerId: u64 | AnyNumber | Uint8Array, penalty: u128 | AnyNumber | Uint8Array, rationale: Option | null | Uint8Array | Bytes | string) => SubmittableExtrinsic, [u64, u128, Option]>; /** * Transfers specified amount to any account. * Requires leader origin. @@ -181,7 +189,7 @@ declare module '@polkadot/api-base/types/submittable' { * - O(1) doesn't depend on the state or parameters * # **/ - spendFromBudget: AugmentedSubmittable<(accountId: AccountId32 | string | Uint8Array, amount: u128 | AnyNumber | Uint8Array, rationale: Option | null | object | string | Uint8Array) => SubmittableExtrinsic, [AccountId32, u128, Option]>; + spendFromBudget: AugmentedSubmittable<(accountId: AccountId32 | string | Uint8Array, amount: u128 | AnyNumber | Uint8Array, rationale: Option | null | Uint8Array | Bytes | string) => SubmittableExtrinsic, [AccountId32, u128, Option]>; /** * Terminate the active worker by the lead. * Requires signed leader origin or the root (to terminate the leader role). @@ -194,7 +202,7 @@ declare module '@polkadot/api-base/types/submittable' { * - O(1) doesn't depend on the state or parameters * # **/ - terminateRole: AugmentedSubmittable<(workerId: u64 | AnyNumber | Uint8Array, penalty: Option | null | object | string | Uint8Array, rationale: Option | null | object | string | Uint8Array) => SubmittableExtrinsic, [u64, Option, Option]>; + terminateRole: AugmentedSubmittable<(workerId: u64 | AnyNumber | Uint8Array, penalty: Option | null | Uint8Array | u128 | AnyNumber, rationale: Option | null | Uint8Array | Bytes | string) => SubmittableExtrinsic, [u64, Option, Option]>; /** * Update the reward account associated with a set reward relationship for the active worker. * @@ -219,7 +227,7 @@ declare module '@polkadot/api-base/types/submittable' { * - O(1) doesn't depend on the state or parameters * # **/ - updateRewardAmount: AugmentedSubmittable<(workerId: u64 | AnyNumber | Uint8Array, rewardPerBlock: Option | null | object | string | Uint8Array) => SubmittableExtrinsic, [u64, Option]>; + updateRewardAmount: AugmentedSubmittable<(workerId: u64 | AnyNumber | Uint8Array, rewardPerBlock: Option | null | Uint8Array | u128 | AnyNumber) => SubmittableExtrinsic, [u64, Option]>; /** * Update the associated role account of the active regular worker/lead. * @@ -258,12 +266,6 @@ declare module '@polkadot/api-base/types/submittable' { **/ workerRemark: AugmentedSubmittable<(workerId: u64 | AnyNumber | Uint8Array, msg: Bytes | string | Uint8Array) => SubmittableExtrinsic, [u64, Bytes]>; }; - authorship: { - /** - * Provide a set of uncles. - **/ - setUncles: AugmentedSubmittable<(newUncles: Vec | (SpRuntimeHeader | { parentHash?: any; number?: any; stateRoot?: any; extrinsicsRoot?: any; digest?: any } | string | Uint8Array)[]) => SubmittableExtrinsic, [Vec]>; - }; babe: { /** * Plan an epoch config change. The epoch config change is recorded and will be enacted on @@ -291,40 +293,13 @@ declare module '@polkadot/api-base/types/submittable' { **/ reportEquivocationUnsigned: AugmentedSubmittable<(equivocationProof: SpConsensusSlotsEquivocationProof | { offender?: any; slot?: any; firstHeader?: any; secondHeader?: any } | string | Uint8Array, keyOwnerProof: SpSessionMembershipProof | { session?: any; trieNodes?: any; validatorCount?: any } | string | Uint8Array) => SubmittableExtrinsic, [SpConsensusSlotsEquivocationProof, SpSessionMembershipProof]>; }; - bagsList: { - /** - * Move the caller's Id directly in front of `lighter`. - * - * The dispatch origin for this call must be _Signed_ and can only be called by the Id of - * the account going in front of `lighter`. - * - * Only works if - * - both nodes are within the same bag, - * - and `origin` has a greater `Score` than `lighter`. - **/ - putInFrontOf: AugmentedSubmittable<(lighter: AccountId32 | string | Uint8Array) => SubmittableExtrinsic, [AccountId32]>; - /** - * Declare that some `dislocated` account has, through rewards or penalties, sufficiently - * changed its score that it should properly fall into a different bag than its current - * one. - * - * Anyone can call this function about any potentially dislocated account. - * - * Will always update the stored score of `dislocated` to the correct score, based on - * `ScoreProvider`. - * - * If `dislocated` does not exists, it returns an error. - **/ - rebag: AugmentedSubmittable<(dislocated: AccountId32 | string | Uint8Array) => SubmittableExtrinsic, [AccountId32]>; - }; balances: { /** * Exactly as `transfer`, except the origin must be root and the source account may be * specified. - * # + * ## Complexity * - Same as transfer, but additional read and write because the source account is not * assumed to be in the overlay. - * # **/ forceTransfer: AugmentedSubmittable<(source: AccountId32 | string | Uint8Array, dest: AccountId32 | string | Uint8Array, value: Compact | AnyNumber | Uint8Array) => SubmittableExtrinsic, [AccountId32, AccountId32, Compact]>; /** @@ -353,7 +328,7 @@ declare module '@polkadot/api-base/types/submittable' { * * The dispatch origin for this call must be `Signed` by the transactor. * - * # + * ## Complexity * - Dependent on arguments but not critical, given proper implementations for input config * types. See related functions below. * - It contains a limited number of reads and writes internally and no complex @@ -367,9 +342,6 @@ declare module '@polkadot/api-base/types/submittable' { * - Removing enough funds from an account will trigger `T::DustRemoval::on_unbalanced`. * - `transfer_keep_alive` works the same way as `transfer`, but has an additional check * that the transfer will not kill the origin account. - * --------------------------------- - * - Origin account is already in memory, so no DB operations for them. - * # **/ transfer: AugmentedSubmittable<(dest: AccountId32 | string | Uint8Array, value: Compact | AnyNumber | Uint8Array) => SubmittableExtrinsic, [AccountId32, Compact]>; /** @@ -387,9 +359,8 @@ declare module '@polkadot/api-base/types/submittable' { * - `keep_alive`: A boolean to determine if the `transfer_all` operation should send all * of the funds the account has, causing the sender account to be killed (false), or * transfer everything except at least the existential deposit, which will guarantee to - * keep the sender account alive (true). # + * keep the sender account alive (true). ## Complexity * - O(1). Just like transfer, but reading the user's transferable balance first. - * # **/ transferAll: AugmentedSubmittable<(dest: AccountId32 | string | Uint8Array, keepAlive: bool | boolean | Uint8Array) => SubmittableExtrinsic, [AccountId32, bool]>; /** @@ -631,7 +602,11 @@ declare module '@polkadot/api-base/types/submittable' { * - O(1) * # **/ - acceptIncomingOffer: AugmentedSubmittable<(videoId: u64 | AnyNumber | Uint8Array, witnessPrice: Option | null | object | string | Uint8Array) => SubmittableExtrinsic, [u64, Option]>; + acceptIncomingOffer: AugmentedSubmittable<(videoId: u64 | AnyNumber | Uint8Array, witnessPrice: Option | null | Uint8Array | u128 | AnyNumber) => SubmittableExtrinsic, [u64, Option]>; + /** + * Activate Amm functionality for token + **/ + activateAmm: AugmentedSubmittable<(actor: PalletContentPermissionsContentActor | { Curator: any } | { Member: any } | { Lead: any } | string | Uint8Array, channelId: u64 | AnyNumber | Uint8Array, params: PalletProjectTokenAmmParams | { slope?: any; intercept?: any } | string | Uint8Array) => SubmittableExtrinsic, [PalletContentPermissionsContentActor, u64, PalletProjectTokenAmmParams]>; /** * Add curator to curator group under given `curator_group_id` * @@ -751,19 +726,6 @@ declare module '@polkadot/api-base/types/submittable' { * # **/ channelOwnerRemark: AugmentedSubmittable<(channelId: u64 | AnyNumber | Uint8Array, msg: Bytes | string | Uint8Array) => SubmittableExtrinsic, [u64, Bytes]>; - /** - * Claim and withdraw reward in JOY from channel account - * - * - * - * ## Weight - * `O (H)` where: - * - `H` is the lenght of the provided merkle `proof` - * - DB: - * - O(1) - * # - **/ - claimAndWithdrawChannelReward: AugmentedSubmittable<(actor: PalletContentPermissionsContentActor | { Curator: any } | { Member: any } | { Lead: any } | string | Uint8Array, proof: Vec | (PalletCommonMerkleTreeProofElementRecord | { hash_?: any; side?: any } | string | Uint8Array)[], item: PalletContentPullPaymentElement | { channelId?: any; cumulativeRewardEarned?: any; reason?: any } | string | Uint8Array) => SubmittableExtrinsic, [PalletContentPermissionsContentActor, Vec, PalletContentPullPaymentElement]>; /** * Claim reward in JOY from channel account * @@ -831,6 +793,10 @@ declare module '@polkadot/api-base/types/submittable' { * # **/ createVideo: AugmentedSubmittable<(actor: PalletContentPermissionsContentActor | { Curator: any } | { Member: any } | { Lead: any } | string | Uint8Array, channelId: u64 | AnyNumber | Uint8Array, params: PalletContentVideoCreationParametersRecord | { assets?: any; meta?: any; autoIssueNft?: any; expectedVideoStateBloatBond?: any; expectedDataObjectStateBloatBond?: any; storageBucketsNumWitness?: any } | string | Uint8Array) => SubmittableExtrinsic, [PalletContentPermissionsContentActor, u64, PalletContentVideoCreationParametersRecord]>; + /** + * Allow crt issuer to update metadata for an existing token + **/ + creatorTokenIssuerRemark: AugmentedSubmittable<(actor: PalletContentPermissionsContentActor | { Curator: any } | { Member: any } | { Lead: any } | string | Uint8Array, channelId: u64 | AnyNumber | Uint8Array, remark: Bytes | string | Uint8Array) => SubmittableExtrinsic, [PalletContentPermissionsContentActor, u64, Bytes]>; /** * Perform transfer of tokens as creator token issuer * @@ -844,7 +810,11 @@ declare module '@polkadot/api-base/types/submittable' { * - `O(A)` - from the the generated weights * # **/ - creatorTokenIssuerTransfer: AugmentedSubmittable<(actor: PalletContentPermissionsContentActor | { Curator: any } | { Member: any } | { Lead: any } | string | Uint8Array, channelId: u64 | AnyNumber | Uint8Array, outputs: PalletProjectTokenTransfersPaymentWithVesting, metadata: Bytes | string | Uint8Array) => SubmittableExtrinsic, [PalletContentPermissionsContentActor, u64, PalletProjectTokenTransfersPaymentWithVesting, Bytes]>; + creatorTokenIssuerTransfer: AugmentedSubmittable<(actor: PalletContentPermissionsContentActor | { Curator: any } | { Member: any } | { Lead: any } | string | Uint8Array, channelId: u64 | AnyNumber | Uint8Array, outputs: Vec> | ([u64 | AnyNumber | Uint8Array, PalletProjectTokenPaymentWithVesting | { amount?: any; vestingSchedule?: any } | string | Uint8Array])[], metadata: Bytes | string | Uint8Array) => SubmittableExtrinsic, [PalletContentPermissionsContentActor, u64, Vec>, Bytes]>; + /** + * Deactivate Amm functionality for token + **/ + deactivateAmm: AugmentedSubmittable<(actor: PalletContentPermissionsContentActor | { Curator: any } | { Member: any } | { Lead: any } | string | Uint8Array, channelId: u64 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [PalletContentPermissionsContentActor, u64]>; /** * Deissue channel's creator token * @@ -870,7 +840,6 @@ declare module '@polkadot/api-base/types/submittable' { * # **/ deleteChannel: AugmentedSubmittable<(actor: PalletContentPermissionsContentActor | { Curator: any } | { Member: any } | { Lead: any } | string | Uint8Array, channelId: u64 | AnyNumber | Uint8Array, channelBagWitness: PalletContentChannelBagWitness | { storageBucketsNum?: any; distributionBucketsNum?: any } | string | Uint8Array, numObjectsToDelete: u64 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [PalletContentPermissionsContentActor, u64, PalletContentChannelBagWitness, u64]>; - deleteChannelAsModerator: AugmentedSubmittable<(actor: PalletContentPermissionsContentActor | { Curator: any } | { Member: any } | { Lead: any } | string | Uint8Array, channelId: u64 | AnyNumber | Uint8Array, channelBagWitness: PalletContentChannelBagWitness | { storageBucketsNum?: any; distributionBucketsNum?: any } | string | Uint8Array, numObjectsToDelete: u64 | AnyNumber | Uint8Array, rationale: Bytes | string | Uint8Array) => SubmittableExtrinsic, [PalletContentPermissionsContentActor, u64, PalletContentChannelBagWitness, u64, Bytes]>; /** * * @@ -895,20 +864,7 @@ declare module '@polkadot/api-base/types/submittable' { * - `O(A + B)` - from the the generated weights * # **/ - deleteVideo: AugmentedSubmittable<(actor: PalletContentPermissionsContentActor | { Curator: any } | { Member: any } | { Lead: any } | string | Uint8Array, videoId: u64 | AnyNumber | Uint8Array, numObjectsToDelete: u64 | AnyNumber | Uint8Array, storageBucketsNumWitness: Option | null | object | string | Uint8Array) => SubmittableExtrinsic, [PalletContentPermissionsContentActor, u64, u64, Option]>; - /** - * - * - * ## Weight - * `O (A + B + C)` where: - * - `A` is the value of `num_objects_to_delete` - * - `B` is the value of `storage_buckets_num_witness` - * - `C` is the size of `rationale` in kilobytes - * - DB: - * - `O(A + B)` - from the the generated weights - * # - **/ - deleteVideoAsModerator: AugmentedSubmittable<(actor: PalletContentPermissionsContentActor | { Curator: any } | { Member: any } | { Lead: any } | string | Uint8Array, videoId: u64 | AnyNumber | Uint8Array, storageBucketsNumWitness: Option | null | object | string | Uint8Array, numObjectsToDelete: u64 | AnyNumber | Uint8Array, rationale: Bytes | string | Uint8Array) => SubmittableExtrinsic, [PalletContentPermissionsContentActor, u64, Option, u64, Bytes]>; + deleteVideo: AugmentedSubmittable<(actor: PalletContentPermissionsContentActor | { Curator: any } | { Member: any } | { Lead: any } | string | Uint8Array, videoId: u64 | AnyNumber | Uint8Array, numObjectsToDelete: u64 | AnyNumber | Uint8Array, storageBucketsNumWitness: Option | null | Uint8Array | u32 | AnyNumber) => SubmittableExtrinsic, [PalletContentPermissionsContentActor, u64, u64, Option]>; /** * * @@ -996,7 +952,7 @@ declare module '@polkadot/api-base/types/submittable' { * - `O(A)` - from the the generated weights * # **/ - issueCreatorToken: AugmentedSubmittable<(actor: PalletContentPermissionsContentActor | { Curator: any } | { Member: any } | { Lead: any } | string | Uint8Array, channelId: u64 | AnyNumber | Uint8Array, params: PalletProjectTokenTokenIssuanceParameters | { initialAllocation?: any; symbol?: any; transferPolicy?: any; patronageRate?: any; revenueSplitRate?: any } | string | Uint8Array) => SubmittableExtrinsic, [PalletContentPermissionsContentActor, u64, PalletProjectTokenTokenIssuanceParameters]>; + issueCreatorToken: AugmentedSubmittable<(actor: PalletContentPermissionsContentActor | { Curator: any } | { Member: any } | { Lead: any } | string | Uint8Array, channelId: u64 | AnyNumber | Uint8Array, params: PalletProjectTokenTokenIssuanceParameters | { initialAllocation?: any; transferPolicy?: any; patronageRate?: any; revenueSplitRate?: any; metadata?: any } | string | Uint8Array) => SubmittableExtrinsic, [PalletContentPermissionsContentActor, u64, PalletProjectTokenTokenIssuanceParameters]>; /** * Issue NFT * @@ -1023,7 +979,7 @@ declare module '@polkadot/api-base/types/submittable' { * - O(1) doesn't depend on the state or parameters * # **/ - issueRevenueSplit: AugmentedSubmittable<(actor: PalletContentPermissionsContentActor | { Curator: any } | { Member: any } | { Lead: any } | string | Uint8Array, channelId: u64 | AnyNumber | Uint8Array, start: Option | null | object | string | Uint8Array, duration: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [PalletContentPermissionsContentActor, u64, Option, u32]>; + issueRevenueSplit: AugmentedSubmittable<(actor: PalletContentPermissionsContentActor | { Curator: any } | { Member: any } | { Lead: any } | string | Uint8Array, channelId: u64 | AnyNumber | Uint8Array, start: Option | null | Uint8Array | u32 | AnyNumber, duration: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [PalletContentPermissionsContentActor, u64, Option, u32]>; /** * Make channel's creator token permissionless * @@ -1082,7 +1038,7 @@ declare module '@polkadot/api-base/types/submittable' { * - O(1) * # **/ - offerNft: AugmentedSubmittable<(videoId: u64 | AnyNumber | Uint8Array, ownerId: PalletContentPermissionsContentActor | { Curator: any } | { Member: any } | { Lead: any } | string | Uint8Array, to: u64 | AnyNumber | Uint8Array, price: Option | null | object | string | Uint8Array) => SubmittableExtrinsic, [u64, PalletContentPermissionsContentActor, u64, Option]>; + offerNft: AugmentedSubmittable<(videoId: u64 | AnyNumber | Uint8Array, ownerId: PalletContentPermissionsContentActor | { Curator: any } | { Member: any } | { Lead: any } | string | Uint8Array, to: u64 | AnyNumber | Uint8Array, price: Option | null | Uint8Array | u128 | AnyNumber) => SubmittableExtrinsic, [u64, PalletContentPermissionsContentActor, u64, Option]>; /** * Accept open auction bid * Should only be called by auctioneer @@ -1350,7 +1306,7 @@ declare module '@polkadot/api-base/types/submittable' { * - O(1) doesn't depend on the state or parameters * # **/ - updateUpcomingCreatorTokenSale: AugmentedSubmittable<(actor: PalletContentPermissionsContentActor | { Curator: any } | { Member: any } | { Lead: any } | string | Uint8Array, channelId: u64 | AnyNumber | Uint8Array, newStartBlock: Option | null | object | string | Uint8Array, newDuration: Option | null | object | string | Uint8Array) => SubmittableExtrinsic, [PalletContentPermissionsContentActor, u64, Option, Option]>; + updateUpcomingCreatorTokenSale: AugmentedSubmittable<(actor: PalletContentPermissionsContentActor | { Curator: any } | { Member: any } | { Lead: any } | string | Uint8Array, channelId: u64 | AnyNumber | Uint8Array, newStartBlock: Option | null | Uint8Array | u32 | AnyNumber, newDuration: Option | null | Uint8Array | u32 | AnyNumber) => SubmittableExtrinsic, [PalletContentPermissionsContentActor, u64, Option, Option]>; /** * * @@ -1406,7 +1362,7 @@ declare module '@polkadot/api-base/types/submittable' { * - O(1) doesn't depend on the state or parameters * # **/ - addOpening: AugmentedSubmittable<(description: Bytes | string | Uint8Array, openingType: PalletWorkingGroupOpeningType | 'Leader' | 'Regular' | number | Uint8Array, stakePolicy: PalletWorkingGroupStakePolicy | { stakeAmount?: any; leavingUnstakingPeriod?: any } | string | Uint8Array, rewardPerBlock: Option | null | object | string | Uint8Array) => SubmittableExtrinsic, [Bytes, PalletWorkingGroupOpeningType, PalletWorkingGroupStakePolicy, Option]>; + addOpening: AugmentedSubmittable<(description: Bytes | string | Uint8Array, openingType: PalletWorkingGroupOpeningType | 'Leader' | 'Regular' | number | Uint8Array, stakePolicy: PalletWorkingGroupStakePolicy | { stakeAmount?: any; leavingUnstakingPeriod?: any } | string | Uint8Array, rewardPerBlock: Option | null | Uint8Array | u128 | AnyNumber) => SubmittableExtrinsic, [Bytes, PalletWorkingGroupOpeningType, PalletWorkingGroupStakePolicy, Option]>; /** * Apply on a worker opening. * @@ -1509,7 +1465,7 @@ declare module '@polkadot/api-base/types/submittable' { * - O(1) doesn't depend on the state or parameters * # **/ - leaveRole: AugmentedSubmittable<(workerId: u64 | AnyNumber | Uint8Array, rationale: Option | null | object | string | Uint8Array) => SubmittableExtrinsic, [u64, Option]>; + leaveRole: AugmentedSubmittable<(workerId: u64 | AnyNumber | Uint8Array, rationale: Option | null | Uint8Array | Bytes | string) => SubmittableExtrinsic, [u64, Option]>; /** * Sets a new budget for the working group. * Requires root origin. @@ -1537,7 +1493,7 @@ declare module '@polkadot/api-base/types/submittable' { * - O(1) doesn't depend on the state or parameters * # **/ - setStatusText: AugmentedSubmittable<(statusText: Option | null | object | string | Uint8Array) => SubmittableExtrinsic, [Option]>; + setStatusText: AugmentedSubmittable<(statusText: Option | null | Uint8Array | Bytes | string) => SubmittableExtrinsic, [Option]>; /** * Slashes the regular worker stake, demands a leader origin. No limits, no actions on zero stake. * If slashing balance greater than the existing stake - stake is slashed to zero. @@ -1551,7 +1507,7 @@ declare module '@polkadot/api-base/types/submittable' { * - O(1) doesn't depend on the state or parameters * # **/ - slashStake: AugmentedSubmittable<(workerId: u64 | AnyNumber | Uint8Array, penalty: u128 | AnyNumber | Uint8Array, rationale: Option | null | object | string | Uint8Array) => SubmittableExtrinsic, [u64, u128, Option]>; + slashStake: AugmentedSubmittable<(workerId: u64 | AnyNumber | Uint8Array, penalty: u128 | AnyNumber | Uint8Array, rationale: Option | null | Uint8Array | Bytes | string) => SubmittableExtrinsic, [u64, u128, Option]>; /** * Transfers specified amount to any account. * Requires leader origin. @@ -1564,7 +1520,7 @@ declare module '@polkadot/api-base/types/submittable' { * - O(1) doesn't depend on the state or parameters * # **/ - spendFromBudget: AugmentedSubmittable<(accountId: AccountId32 | string | Uint8Array, amount: u128 | AnyNumber | Uint8Array, rationale: Option | null | object | string | Uint8Array) => SubmittableExtrinsic, [AccountId32, u128, Option]>; + spendFromBudget: AugmentedSubmittable<(accountId: AccountId32 | string | Uint8Array, amount: u128 | AnyNumber | Uint8Array, rationale: Option | null | Uint8Array | Bytes | string) => SubmittableExtrinsic, [AccountId32, u128, Option]>; /** * Terminate the active worker by the lead. * Requires signed leader origin or the root (to terminate the leader role). @@ -1577,7 +1533,7 @@ declare module '@polkadot/api-base/types/submittable' { * - O(1) doesn't depend on the state or parameters * # **/ - terminateRole: AugmentedSubmittable<(workerId: u64 | AnyNumber | Uint8Array, penalty: Option | null | object | string | Uint8Array, rationale: Option | null | object | string | Uint8Array) => SubmittableExtrinsic, [u64, Option, Option]>; + terminateRole: AugmentedSubmittable<(workerId: u64 | AnyNumber | Uint8Array, penalty: Option | null | Uint8Array | u128 | AnyNumber, rationale: Option | null | Uint8Array | Bytes | string) => SubmittableExtrinsic, [u64, Option, Option]>; /** * Update the reward account associated with a set reward relationship for the active worker. * @@ -1602,7 +1558,7 @@ declare module '@polkadot/api-base/types/submittable' { * - O(1) doesn't depend on the state or parameters * # **/ - updateRewardAmount: AugmentedSubmittable<(workerId: u64 | AnyNumber | Uint8Array, rewardPerBlock: Option | null | object | string | Uint8Array) => SubmittableExtrinsic, [u64, Option]>; + updateRewardAmount: AugmentedSubmittable<(workerId: u64 | AnyNumber | Uint8Array, rewardPerBlock: Option | null | Uint8Array | u128 | AnyNumber) => SubmittableExtrinsic, [u64, Option]>; /** * Update the associated role account of the active regular worker/lead. * @@ -1802,7 +1758,7 @@ declare module '@polkadot/api-base/types/submittable' { * - O(1) doesn't depend on the state or parameters * # **/ - addOpening: AugmentedSubmittable<(description: Bytes | string | Uint8Array, openingType: PalletWorkingGroupOpeningType | 'Leader' | 'Regular' | number | Uint8Array, stakePolicy: PalletWorkingGroupStakePolicy | { stakeAmount?: any; leavingUnstakingPeriod?: any } | string | Uint8Array, rewardPerBlock: Option | null | object | string | Uint8Array) => SubmittableExtrinsic, [Bytes, PalletWorkingGroupOpeningType, PalletWorkingGroupStakePolicy, Option]>; + addOpening: AugmentedSubmittable<(description: Bytes | string | Uint8Array, openingType: PalletWorkingGroupOpeningType | 'Leader' | 'Regular' | number | Uint8Array, stakePolicy: PalletWorkingGroupStakePolicy | { stakeAmount?: any; leavingUnstakingPeriod?: any } | string | Uint8Array, rewardPerBlock: Option | null | Uint8Array | u128 | AnyNumber) => SubmittableExtrinsic, [Bytes, PalletWorkingGroupOpeningType, PalletWorkingGroupStakePolicy, Option]>; /** * Apply on a worker opening. * @@ -1905,7 +1861,7 @@ declare module '@polkadot/api-base/types/submittable' { * - O(1) doesn't depend on the state or parameters * # **/ - leaveRole: AugmentedSubmittable<(workerId: u64 | AnyNumber | Uint8Array, rationale: Option | null | object | string | Uint8Array) => SubmittableExtrinsic, [u64, Option]>; + leaveRole: AugmentedSubmittable<(workerId: u64 | AnyNumber | Uint8Array, rationale: Option | null | Uint8Array | Bytes | string) => SubmittableExtrinsic, [u64, Option]>; /** * Sets a new budget for the working group. * Requires root origin. @@ -1933,7 +1889,7 @@ declare module '@polkadot/api-base/types/submittable' { * - O(1) doesn't depend on the state or parameters * # **/ - setStatusText: AugmentedSubmittable<(statusText: Option | null | object | string | Uint8Array) => SubmittableExtrinsic, [Option]>; + setStatusText: AugmentedSubmittable<(statusText: Option | null | Uint8Array | Bytes | string) => SubmittableExtrinsic, [Option]>; /** * Slashes the regular worker stake, demands a leader origin. No limits, no actions on zero stake. * If slashing balance greater than the existing stake - stake is slashed to zero. @@ -1947,7 +1903,7 @@ declare module '@polkadot/api-base/types/submittable' { * - O(1) doesn't depend on the state or parameters * # **/ - slashStake: AugmentedSubmittable<(workerId: u64 | AnyNumber | Uint8Array, penalty: u128 | AnyNumber | Uint8Array, rationale: Option | null | object | string | Uint8Array) => SubmittableExtrinsic, [u64, u128, Option]>; + slashStake: AugmentedSubmittable<(workerId: u64 | AnyNumber | Uint8Array, penalty: u128 | AnyNumber | Uint8Array, rationale: Option | null | Uint8Array | Bytes | string) => SubmittableExtrinsic, [u64, u128, Option]>; /** * Transfers specified amount to any account. * Requires leader origin. @@ -1960,7 +1916,7 @@ declare module '@polkadot/api-base/types/submittable' { * - O(1) doesn't depend on the state or parameters * # **/ - spendFromBudget: AugmentedSubmittable<(accountId: AccountId32 | string | Uint8Array, amount: u128 | AnyNumber | Uint8Array, rationale: Option | null | object | string | Uint8Array) => SubmittableExtrinsic, [AccountId32, u128, Option]>; + spendFromBudget: AugmentedSubmittable<(accountId: AccountId32 | string | Uint8Array, amount: u128 | AnyNumber | Uint8Array, rationale: Option | null | Uint8Array | Bytes | string) => SubmittableExtrinsic, [AccountId32, u128, Option]>; /** * Terminate the active worker by the lead. * Requires signed leader origin or the root (to terminate the leader role). @@ -1973,7 +1929,7 @@ declare module '@polkadot/api-base/types/submittable' { * - O(1) doesn't depend on the state or parameters * # **/ - terminateRole: AugmentedSubmittable<(workerId: u64 | AnyNumber | Uint8Array, penalty: Option | null | object | string | Uint8Array, rationale: Option | null | object | string | Uint8Array) => SubmittableExtrinsic, [u64, Option, Option]>; + terminateRole: AugmentedSubmittable<(workerId: u64 | AnyNumber | Uint8Array, penalty: Option | null | Uint8Array | u128 | AnyNumber, rationale: Option | null | Uint8Array | Bytes | string) => SubmittableExtrinsic, [u64, Option, Option]>; /** * Update the reward account associated with a set reward relationship for the active worker. * @@ -1998,7 +1954,7 @@ declare module '@polkadot/api-base/types/submittable' { * - O(1) doesn't depend on the state or parameters * # **/ - updateRewardAmount: AugmentedSubmittable<(workerId: u64 | AnyNumber | Uint8Array, rewardPerBlock: Option | null | object | string | Uint8Array) => SubmittableExtrinsic, [u64, Option]>; + updateRewardAmount: AugmentedSubmittable<(workerId: u64 | AnyNumber | Uint8Array, rewardPerBlock: Option | null | Uint8Array | u128 | AnyNumber) => SubmittableExtrinsic, [u64, Option]>; /** * Update the associated role account of the active regular worker/lead. * @@ -2044,7 +2000,7 @@ declare module '@polkadot/api-base/types/submittable' { * This can only be called when [`Phase::Emergency`] is enabled, as an alternative to * calling [`Call::set_emergency_election_result`]. **/ - governanceFallback: AugmentedSubmittable<(maybeMaxVoters: Option | null | object | string | Uint8Array, maybeMaxTargets: Option | null | object | string | Uint8Array) => SubmittableExtrinsic, [Option, Option]>; + governanceFallback: AugmentedSubmittable<(maybeMaxVoters: Option | null | Uint8Array | u32 | AnyNumber, maybeMaxTargets: Option | null | Uint8Array | u32 | AnyNumber) => SubmittableExtrinsic, [Option, Option]>; /** * Set a solution in the queue, to be handed out to the client of this pallet in the next * call to `ElectionProvider::elect`. @@ -2063,7 +2019,7 @@ declare module '@polkadot/api-base/types/submittable' { * * This check can be turned off by setting the value to `None`. **/ - setMinimumUntrustedScore: AugmentedSubmittable<(maybeNextScore: Option | null | object | string | Uint8Array) => SubmittableExtrinsic, [Option]>; + setMinimumUntrustedScore: AugmentedSubmittable<(maybeNextScore: Option | null | Uint8Array | SpNposElectionsElectionScore | { minimalStake?: any; sumStake?: any; sumStakeSquared?: any } | string) => SubmittableExtrinsic, [Option]>; /** * Submit a solution for the signed phase. * @@ -2123,7 +2079,7 @@ declare module '@polkadot/api-base/types/submittable' { * - O(W) * # **/ - createCategory: AugmentedSubmittable<(parentCategoryId: Option | null | object | string | Uint8Array, title: Bytes | string | Uint8Array, description: Bytes | string | Uint8Array) => SubmittableExtrinsic, [Option, Bytes, Bytes]>; + createCategory: AugmentedSubmittable<(parentCategoryId: Option | null | Uint8Array | u64 | AnyNumber, title: Bytes | string | Uint8Array, description: Bytes | string | Uint8Array) => SubmittableExtrinsic, [Option, Bytes, Bytes]>; /** * Create new thread in category * @@ -2333,7 +2289,7 @@ declare module '@polkadot/api-base/types/submittable' { * - O(1) doesn't depend on the state or parameters * # **/ - addOpening: AugmentedSubmittable<(description: Bytes | string | Uint8Array, openingType: PalletWorkingGroupOpeningType | 'Leader' | 'Regular' | number | Uint8Array, stakePolicy: PalletWorkingGroupStakePolicy | { stakeAmount?: any; leavingUnstakingPeriod?: any } | string | Uint8Array, rewardPerBlock: Option | null | object | string | Uint8Array) => SubmittableExtrinsic, [Bytes, PalletWorkingGroupOpeningType, PalletWorkingGroupStakePolicy, Option]>; + addOpening: AugmentedSubmittable<(description: Bytes | string | Uint8Array, openingType: PalletWorkingGroupOpeningType | 'Leader' | 'Regular' | number | Uint8Array, stakePolicy: PalletWorkingGroupStakePolicy | { stakeAmount?: any; leavingUnstakingPeriod?: any } | string | Uint8Array, rewardPerBlock: Option | null | Uint8Array | u128 | AnyNumber) => SubmittableExtrinsic, [Bytes, PalletWorkingGroupOpeningType, PalletWorkingGroupStakePolicy, Option]>; /** * Apply on a worker opening. * @@ -2436,7 +2392,7 @@ declare module '@polkadot/api-base/types/submittable' { * - O(1) doesn't depend on the state or parameters * # **/ - leaveRole: AugmentedSubmittable<(workerId: u64 | AnyNumber | Uint8Array, rationale: Option | null | object | string | Uint8Array) => SubmittableExtrinsic, [u64, Option]>; + leaveRole: AugmentedSubmittable<(workerId: u64 | AnyNumber | Uint8Array, rationale: Option | null | Uint8Array | Bytes | string) => SubmittableExtrinsic, [u64, Option]>; /** * Sets a new budget for the working group. * Requires root origin. @@ -2464,7 +2420,7 @@ declare module '@polkadot/api-base/types/submittable' { * - O(1) doesn't depend on the state or parameters * # **/ - setStatusText: AugmentedSubmittable<(statusText: Option | null | object | string | Uint8Array) => SubmittableExtrinsic, [Option]>; + setStatusText: AugmentedSubmittable<(statusText: Option | null | Uint8Array | Bytes | string) => SubmittableExtrinsic, [Option]>; /** * Slashes the regular worker stake, demands a leader origin. No limits, no actions on zero stake. * If slashing balance greater than the existing stake - stake is slashed to zero. @@ -2478,7 +2434,7 @@ declare module '@polkadot/api-base/types/submittable' { * - O(1) doesn't depend on the state or parameters * # **/ - slashStake: AugmentedSubmittable<(workerId: u64 | AnyNumber | Uint8Array, penalty: u128 | AnyNumber | Uint8Array, rationale: Option | null | object | string | Uint8Array) => SubmittableExtrinsic, [u64, u128, Option]>; + slashStake: AugmentedSubmittable<(workerId: u64 | AnyNumber | Uint8Array, penalty: u128 | AnyNumber | Uint8Array, rationale: Option | null | Uint8Array | Bytes | string) => SubmittableExtrinsic, [u64, u128, Option]>; /** * Transfers specified amount to any account. * Requires leader origin. @@ -2491,7 +2447,7 @@ declare module '@polkadot/api-base/types/submittable' { * - O(1) doesn't depend on the state or parameters * # **/ - spendFromBudget: AugmentedSubmittable<(accountId: AccountId32 | string | Uint8Array, amount: u128 | AnyNumber | Uint8Array, rationale: Option | null | object | string | Uint8Array) => SubmittableExtrinsic, [AccountId32, u128, Option]>; + spendFromBudget: AugmentedSubmittable<(accountId: AccountId32 | string | Uint8Array, amount: u128 | AnyNumber | Uint8Array, rationale: Option | null | Uint8Array | Bytes | string) => SubmittableExtrinsic, [AccountId32, u128, Option]>; /** * Terminate the active worker by the lead. * Requires signed leader origin or the root (to terminate the leader role). @@ -2504,7 +2460,7 @@ declare module '@polkadot/api-base/types/submittable' { * - O(1) doesn't depend on the state or parameters * # **/ - terminateRole: AugmentedSubmittable<(workerId: u64 | AnyNumber | Uint8Array, penalty: Option | null | object | string | Uint8Array, rationale: Option | null | object | string | Uint8Array) => SubmittableExtrinsic, [u64, Option, Option]>; + terminateRole: AugmentedSubmittable<(workerId: u64 | AnyNumber | Uint8Array, penalty: Option | null | Uint8Array | u128 | AnyNumber, rationale: Option | null | Uint8Array | Bytes | string) => SubmittableExtrinsic, [u64, Option, Option]>; /** * Update the reward account associated with a set reward relationship for the active worker. * @@ -2529,7 +2485,7 @@ declare module '@polkadot/api-base/types/submittable' { * - O(1) doesn't depend on the state or parameters * # **/ - updateRewardAmount: AugmentedSubmittable<(workerId: u64 | AnyNumber | Uint8Array, rewardPerBlock: Option | null | object | string | Uint8Array) => SubmittableExtrinsic, [u64, Option]>; + updateRewardAmount: AugmentedSubmittable<(workerId: u64 | AnyNumber | Uint8Array, rewardPerBlock: Option | null | Uint8Array | u128 | AnyNumber) => SubmittableExtrinsic, [u64, Option]>; /** * Update the associated role account of the active regular worker/lead. * @@ -2570,12 +2526,17 @@ declare module '@polkadot/api-base/types/submittable' { }; grandpa: { /** - * Note that the current authority set of the GRANDPA finality gadget has - * stalled. This will trigger a forced authority set change at the beginning - * of the next session, to be enacted `delay` blocks after that. The delay - * should be high enough to safely assume that the block signalling the - * forced change will not be re-orged (e.g. 1000 blocks). The GRANDPA voters - * will start the new authority set using the given finalized block as base. + * Note that the current authority set of the GRANDPA finality gadget has stalled. + * + * This will trigger a forced authority set change at the beginning of the next session, to + * be enacted `delay` blocks after that. The `delay` should be high enough to safely assume + * that the block signalling the forced change will not be re-orged e.g. 1000 blocks. + * The block production rate (which may be slowed down because of finality lagging) should + * be taken into account when choosing the `delay`. The GRANDPA voters based on the new + * authority will start voting on top of `best_finalized_block_number` for new finalized + * blocks. `best_finalized_block_number` should be the highest of the latest finalized + * block of all validators of the new authority set. + * * Only callable by root. **/ noteStalled: AugmentedSubmittable<(delay: u32 | AnyNumber | Uint8Array, bestFinalizedBlockNumber: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [u32, u32]>; @@ -2585,7 +2546,7 @@ declare module '@polkadot/api-base/types/submittable' { * against the extracted offender. If both are valid, the offence * will be reported. **/ - reportEquivocation: AugmentedSubmittable<(equivocationProof: SpFinalityGrandpaEquivocationProof | { setId?: any; equivocation?: any } | string | Uint8Array, keyOwnerProof: SpSessionMembershipProof | { session?: any; trieNodes?: any; validatorCount?: any } | string | Uint8Array) => SubmittableExtrinsic, [SpFinalityGrandpaEquivocationProof, SpSessionMembershipProof]>; + reportEquivocation: AugmentedSubmittable<(equivocationProof: SpConsensusGrandpaEquivocationProof | { setId?: any; equivocation?: any } | string | Uint8Array, keyOwnerProof: SpSessionMembershipProof | { session?: any; trieNodes?: any; validatorCount?: any } | string | Uint8Array) => SubmittableExtrinsic, [SpConsensusGrandpaEquivocationProof, SpSessionMembershipProof]>; /** * Report voter equivocation/misbehavior. This method will verify the * equivocation proof and validate the given key ownership proof @@ -2597,19 +2558,15 @@ declare module '@polkadot/api-base/types/submittable' { * if the block author is defined it will be defined as the equivocation * reporter. **/ - reportEquivocationUnsigned: AugmentedSubmittable<(equivocationProof: SpFinalityGrandpaEquivocationProof | { setId?: any; equivocation?: any } | string | Uint8Array, keyOwnerProof: SpSessionMembershipProof | { session?: any; trieNodes?: any; validatorCount?: any } | string | Uint8Array) => SubmittableExtrinsic, [SpFinalityGrandpaEquivocationProof, SpSessionMembershipProof]>; + reportEquivocationUnsigned: AugmentedSubmittable<(equivocationProof: SpConsensusGrandpaEquivocationProof | { setId?: any; equivocation?: any } | string | Uint8Array, keyOwnerProof: SpSessionMembershipProof | { session?: any; trieNodes?: any; validatorCount?: any } | string | Uint8Array) => SubmittableExtrinsic, [SpConsensusGrandpaEquivocationProof, SpSessionMembershipProof]>; }; imOnline: { /** - * # - * - Complexity: `O(K + E)` where K is length of `Keys` (heartbeat.validators_len) and E is - * length of `heartbeat.network_state.external_address` + * ## Complexity: + * - `O(K + E)` where K is length of `Keys` (heartbeat.validators_len) and E is length of + * `heartbeat.network_state.external_address` * - `O(K)`: decoding of length `K` * - `O(E)`: decoding/encoding of length `E` - * - DbReads: pallet_session `Validators`, pallet_session `CurrentIndex`, `Keys`, - * `ReceivedHeartbeats` - * - DbWrites: `ReceivedHeartbeats` - * # **/ heartbeat: AugmentedSubmittable<(heartbeat: PalletImOnlineHeartbeat | { blockNumber?: any; networkState?: any; sessionIndex?: any; authorityIndex?: any; validatorsLen?: any } | string | Uint8Array, signature: PalletImOnlineSr25519AppSr25519Signature | string | Uint8Array) => SubmittableExtrinsic, [PalletImOnlineHeartbeat, PalletImOnlineSr25519AppSr25519Signature]>; }; @@ -2748,7 +2705,7 @@ declare module '@polkadot/api-base/types/submittable' { * - O(1) doesn't depend on the state or parameters * # **/ - memberRemark: AugmentedSubmittable<(memberId: u64 | AnyNumber | Uint8Array, msg: Bytes | string | Uint8Array, payment: Option> | null | object | string | Uint8Array) => SubmittableExtrinsic, [u64, Bytes, Option>]>; + memberRemark: AugmentedSubmittable<(memberId: u64 | AnyNumber | Uint8Array, msg: Bytes | string | Uint8Array, payment: Option> | null | Uint8Array | ITuple<[AccountId32, u128]> | [AccountId32 | string | Uint8Array, u128 | AnyNumber | Uint8Array]) => SubmittableExtrinsic, [u64, Bytes, Option>]>; /** * Remove staking account for a member. * @@ -2846,7 +2803,7 @@ declare module '@polkadot/api-base/types/submittable' { * - O(1) doesn't depend on the state or parameters * # **/ - updateAccounts: AugmentedSubmittable<(memberId: u64 | AnyNumber | Uint8Array, newRootAccount: Option | null | object | string | Uint8Array, newControllerAccount: Option | null | object | string | Uint8Array) => SubmittableExtrinsic, [u64, Option, Option]>; + updateAccounts: AugmentedSubmittable<(memberId: u64 | AnyNumber | Uint8Array, newRootAccount: Option | null | Uint8Array | AccountId32 | string, newControllerAccount: Option | null | Uint8Array | AccountId32 | string) => SubmittableExtrinsic, [u64, Option, Option]>; /** * Update member's all or some of name, handle, avatar and about text. * No effect if no changed fields. @@ -2861,7 +2818,7 @@ declare module '@polkadot/api-base/types/submittable' { * - O(1) * # **/ - updateProfile: AugmentedSubmittable<(memberId: u64 | AnyNumber | Uint8Array, handle: Option | null | object | string | Uint8Array, metadata: Option | null | object | string | Uint8Array) => SubmittableExtrinsic, [u64, Option, Option]>; + updateProfile: AugmentedSubmittable<(memberId: u64 | AnyNumber | Uint8Array, handle: Option | null | Uint8Array | Bytes | string, metadata: Option | null | Uint8Array | Bytes | string) => SubmittableExtrinsic, [u64, Option, Option]>; /** * Updates member profile verification status. Requires working group member origin. * @@ -2889,7 +2846,7 @@ declare module '@polkadot/api-base/types/submittable' { * - O(1) doesn't depend on the state or parameters * # **/ - addOpening: AugmentedSubmittable<(description: Bytes | string | Uint8Array, openingType: PalletWorkingGroupOpeningType | 'Leader' | 'Regular' | number | Uint8Array, stakePolicy: PalletWorkingGroupStakePolicy | { stakeAmount?: any; leavingUnstakingPeriod?: any } | string | Uint8Array, rewardPerBlock: Option | null | object | string | Uint8Array) => SubmittableExtrinsic, [Bytes, PalletWorkingGroupOpeningType, PalletWorkingGroupStakePolicy, Option]>; + addOpening: AugmentedSubmittable<(description: Bytes | string | Uint8Array, openingType: PalletWorkingGroupOpeningType | 'Leader' | 'Regular' | number | Uint8Array, stakePolicy: PalletWorkingGroupStakePolicy | { stakeAmount?: any; leavingUnstakingPeriod?: any } | string | Uint8Array, rewardPerBlock: Option | null | Uint8Array | u128 | AnyNumber) => SubmittableExtrinsic, [Bytes, PalletWorkingGroupOpeningType, PalletWorkingGroupStakePolicy, Option]>; /** * Apply on a worker opening. * @@ -2992,7 +2949,7 @@ declare module '@polkadot/api-base/types/submittable' { * - O(1) doesn't depend on the state or parameters * # **/ - leaveRole: AugmentedSubmittable<(workerId: u64 | AnyNumber | Uint8Array, rationale: Option | null | object | string | Uint8Array) => SubmittableExtrinsic, [u64, Option]>; + leaveRole: AugmentedSubmittable<(workerId: u64 | AnyNumber | Uint8Array, rationale: Option | null | Uint8Array | Bytes | string) => SubmittableExtrinsic, [u64, Option]>; /** * Sets a new budget for the working group. * Requires root origin. @@ -3020,7 +2977,7 @@ declare module '@polkadot/api-base/types/submittable' { * - O(1) doesn't depend on the state or parameters * # **/ - setStatusText: AugmentedSubmittable<(statusText: Option | null | object | string | Uint8Array) => SubmittableExtrinsic, [Option]>; + setStatusText: AugmentedSubmittable<(statusText: Option | null | Uint8Array | Bytes | string) => SubmittableExtrinsic, [Option]>; /** * Slashes the regular worker stake, demands a leader origin. No limits, no actions on zero stake. * If slashing balance greater than the existing stake - stake is slashed to zero. @@ -3034,7 +2991,7 @@ declare module '@polkadot/api-base/types/submittable' { * - O(1) doesn't depend on the state or parameters * # **/ - slashStake: AugmentedSubmittable<(workerId: u64 | AnyNumber | Uint8Array, penalty: u128 | AnyNumber | Uint8Array, rationale: Option | null | object | string | Uint8Array) => SubmittableExtrinsic, [u64, u128, Option]>; + slashStake: AugmentedSubmittable<(workerId: u64 | AnyNumber | Uint8Array, penalty: u128 | AnyNumber | Uint8Array, rationale: Option | null | Uint8Array | Bytes | string) => SubmittableExtrinsic, [u64, u128, Option]>; /** * Transfers specified amount to any account. * Requires leader origin. @@ -3047,7 +3004,7 @@ declare module '@polkadot/api-base/types/submittable' { * - O(1) doesn't depend on the state or parameters * # **/ - spendFromBudget: AugmentedSubmittable<(accountId: AccountId32 | string | Uint8Array, amount: u128 | AnyNumber | Uint8Array, rationale: Option | null | object | string | Uint8Array) => SubmittableExtrinsic, [AccountId32, u128, Option]>; + spendFromBudget: AugmentedSubmittable<(accountId: AccountId32 | string | Uint8Array, amount: u128 | AnyNumber | Uint8Array, rationale: Option | null | Uint8Array | Bytes | string) => SubmittableExtrinsic, [AccountId32, u128, Option]>; /** * Terminate the active worker by the lead. * Requires signed leader origin or the root (to terminate the leader role). @@ -3060,7 +3017,7 @@ declare module '@polkadot/api-base/types/submittable' { * - O(1) doesn't depend on the state or parameters * # **/ - terminateRole: AugmentedSubmittable<(workerId: u64 | AnyNumber | Uint8Array, penalty: Option | null | object | string | Uint8Array, rationale: Option | null | object | string | Uint8Array) => SubmittableExtrinsic, [u64, Option, Option]>; + terminateRole: AugmentedSubmittable<(workerId: u64 | AnyNumber | Uint8Array, penalty: Option | null | Uint8Array | u128 | AnyNumber, rationale: Option | null | Uint8Array | Bytes | string) => SubmittableExtrinsic, [u64, Option, Option]>; /** * Update the reward account associated with a set reward relationship for the active worker. * @@ -3085,7 +3042,7 @@ declare module '@polkadot/api-base/types/submittable' { * - O(1) doesn't depend on the state or parameters * # **/ - updateRewardAmount: AugmentedSubmittable<(workerId: u64 | AnyNumber | Uint8Array, rewardPerBlock: Option | null | object | string | Uint8Array) => SubmittableExtrinsic, [u64, Option]>; + updateRewardAmount: AugmentedSubmittable<(workerId: u64 | AnyNumber | Uint8Array, rewardPerBlock: Option | null | Uint8Array | u128 | AnyNumber) => SubmittableExtrinsic, [u64, Option]>; /** * Update the associated role account of the active regular worker/lead. * @@ -3145,7 +3102,7 @@ declare module '@polkadot/api-base/types/submittable' { * * NOTE: If this is the final approval, you will want to use `as_multi` instead. * - * # + * ## Complexity * - `O(S)`. * - Up to one balance-reserve or unreserve operation. * - One passthrough operation, one insert, both `O(S)` where `S` is the number of @@ -3156,13 +3113,8 @@ declare module '@polkadot/api-base/types/submittable' { * - One event. * - Storage: inserts one item, value size bounded by `MaxSignatories`, with a deposit * taken for its lifetime of `DepositBase + threshold * DepositFactor`. - * ---------------------------------- - * - DB Weight: - * - Read: Multisig Storage, [Caller Account] - * - Write: Multisig Storage, [Caller Account] - * # **/ - approveAsMulti: AugmentedSubmittable<(threshold: u16 | AnyNumber | Uint8Array, otherSignatories: Vec | (AccountId32 | string | Uint8Array)[], maybeTimepoint: Option | null | object | string | Uint8Array, callHash: U8aFixed | string | Uint8Array, maxWeight: u64 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [u16, Vec, Option, U8aFixed, u64]>; + approveAsMulti: AugmentedSubmittable<(threshold: u16 | AnyNumber | Uint8Array, otherSignatories: Vec | (AccountId32 | string | Uint8Array)[], maybeTimepoint: Option | null | Uint8Array | PalletMultisigTimepoint | { height?: any; index?: any } | string, callHash: U8aFixed | string | Uint8Array, maxWeight: SpWeightsWeightV2Weight | { refTime?: any; proofSize?: any } | string | Uint8Array) => SubmittableExtrinsic, [u16, Vec, Option, U8aFixed, SpWeightsWeightV2Weight]>; /** * Register approval for a dispatch to be made from a deterministic composite account if * approved by a total of `threshold - 1` of `other_signatories`. @@ -3190,7 +3142,7 @@ declare module '@polkadot/api-base/types/submittable' { * on success, result is `Ok` and the result from the interior call, if it was executed, * may be found in the deposited `MultisigExecuted` event. * - * # + * ## Complexity * - `O(S + Z + Call)`. * - Up to one balance-reserve or unreserve operation. * - One passthrough operation, one insert, both `O(S)` where `S` is the number of @@ -3203,14 +3155,8 @@ declare module '@polkadot/api-base/types/submittable' { * - The weight of the `call`. * - Storage: inserts one item, value size bounded by `MaxSignatories`, with a deposit * taken for its lifetime of `DepositBase + threshold * DepositFactor`. - * ------------------------------- - * - DB Weight: - * - Reads: Multisig Storage, [Caller Account], Calls (if `store_call`) - * - Writes: Multisig Storage, [Caller Account], Calls (if `store_call`) - * - Plus Call Weight - * # **/ - asMulti: AugmentedSubmittable<(threshold: u16 | AnyNumber | Uint8Array, otherSignatories: Vec | (AccountId32 | string | Uint8Array)[], maybeTimepoint: Option | null | object | string | Uint8Array, call: WrapperKeepOpaque | object | string | Uint8Array, storeCall: bool | boolean | Uint8Array, maxWeight: u64 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [u16, Vec, Option, WrapperKeepOpaque, bool, u64]>; + asMulti: AugmentedSubmittable<(threshold: u16 | AnyNumber | Uint8Array, otherSignatories: Vec | (AccountId32 | string | Uint8Array)[], maybeTimepoint: Option | null | Uint8Array | PalletMultisigTimepoint | { height?: any; index?: any } | string, call: Call | IMethod | string | Uint8Array, maxWeight: SpWeightsWeightV2Weight | { refTime?: any; proofSize?: any } | string | Uint8Array) => SubmittableExtrinsic, [u16, Vec, Option, Call, SpWeightsWeightV2Weight]>; /** * Immediately dispatch a multi-signature call using a single approval from the caller. * @@ -3222,12 +3168,8 @@ declare module '@polkadot/api-base/types/submittable' { * * Result is equivalent to the dispatched result. * - * # + * ## Complexity * O(Z + C) where Z is the length of the call and C its execution weight. - * ------------------------------- - * - DB Weight: None - * - Plus Call Weight - * # **/ asMultiThreshold1: AugmentedSubmittable<(otherSignatories: Vec | (AccountId32 | string | Uint8Array)[], call: Call | IMethod | string | Uint8Array) => SubmittableExtrinsic, [Vec, Call]>; /** @@ -3243,7 +3185,7 @@ declare module '@polkadot/api-base/types/submittable' { * transaction for this dispatch. * - `call_hash`: The hash of the call to be executed. * - * # + * ## Complexity * - `O(S)`. * - Up to one balance-reserve or unreserve operation. * - One passthrough operation, one insert, both `O(S)` where `S` is the number of @@ -3252,11 +3194,6 @@ declare module '@polkadot/api-base/types/submittable' { * - One event. * - I/O: 1 read `O(S)`, one remove. * - Storage: removes one item. - * ---------------------------------- - * - DB Weight: - * - Read: Multisig Storage, [Caller Account], Refund Account, Calls - * - Write: Multisig Storage, [Caller Account], Refund Account, Calls - * # **/ cancelAsMulti: AugmentedSubmittable<(threshold: u16 | AnyNumber | Uint8Array, otherSignatories: Vec | (AccountId32 | string | Uint8Array)[], timepoint: PalletMultisigTimepoint | { height?: any; index?: any } | string | Uint8Array, callHash: U8aFixed | string | Uint8Array) => SubmittableExtrinsic, [u16, Vec, PalletMultisigTimepoint, U8aFixed]>; }; @@ -3274,7 +3211,7 @@ declare module '@polkadot/api-base/types/submittable' { * - O(1) doesn't depend on the state or parameters * # **/ - addOpening: AugmentedSubmittable<(description: Bytes | string | Uint8Array, openingType: PalletWorkingGroupOpeningType | 'Leader' | 'Regular' | number | Uint8Array, stakePolicy: PalletWorkingGroupStakePolicy | { stakeAmount?: any; leavingUnstakingPeriod?: any } | string | Uint8Array, rewardPerBlock: Option | null | object | string | Uint8Array) => SubmittableExtrinsic, [Bytes, PalletWorkingGroupOpeningType, PalletWorkingGroupStakePolicy, Option]>; + addOpening: AugmentedSubmittable<(description: Bytes | string | Uint8Array, openingType: PalletWorkingGroupOpeningType | 'Leader' | 'Regular' | number | Uint8Array, stakePolicy: PalletWorkingGroupStakePolicy | { stakeAmount?: any; leavingUnstakingPeriod?: any } | string | Uint8Array, rewardPerBlock: Option | null | Uint8Array | u128 | AnyNumber) => SubmittableExtrinsic, [Bytes, PalletWorkingGroupOpeningType, PalletWorkingGroupStakePolicy, Option]>; /** * Apply on a worker opening. * @@ -3377,7 +3314,7 @@ declare module '@polkadot/api-base/types/submittable' { * - O(1) doesn't depend on the state or parameters * # **/ - leaveRole: AugmentedSubmittable<(workerId: u64 | AnyNumber | Uint8Array, rationale: Option | null | object | string | Uint8Array) => SubmittableExtrinsic, [u64, Option]>; + leaveRole: AugmentedSubmittable<(workerId: u64 | AnyNumber | Uint8Array, rationale: Option | null | Uint8Array | Bytes | string) => SubmittableExtrinsic, [u64, Option]>; /** * Sets a new budget for the working group. * Requires root origin. @@ -3405,7 +3342,7 @@ declare module '@polkadot/api-base/types/submittable' { * - O(1) doesn't depend on the state or parameters * # **/ - setStatusText: AugmentedSubmittable<(statusText: Option | null | object | string | Uint8Array) => SubmittableExtrinsic, [Option]>; + setStatusText: AugmentedSubmittable<(statusText: Option | null | Uint8Array | Bytes | string) => SubmittableExtrinsic, [Option]>; /** * Slashes the regular worker stake, demands a leader origin. No limits, no actions on zero stake. * If slashing balance greater than the existing stake - stake is slashed to zero. @@ -3419,7 +3356,7 @@ declare module '@polkadot/api-base/types/submittable' { * - O(1) doesn't depend on the state or parameters * # **/ - slashStake: AugmentedSubmittable<(workerId: u64 | AnyNumber | Uint8Array, penalty: u128 | AnyNumber | Uint8Array, rationale: Option | null | object | string | Uint8Array) => SubmittableExtrinsic, [u64, u128, Option]>; + slashStake: AugmentedSubmittable<(workerId: u64 | AnyNumber | Uint8Array, penalty: u128 | AnyNumber | Uint8Array, rationale: Option | null | Uint8Array | Bytes | string) => SubmittableExtrinsic, [u64, u128, Option]>; /** * Transfers specified amount to any account. * Requires leader origin. @@ -3432,7 +3369,7 @@ declare module '@polkadot/api-base/types/submittable' { * - O(1) doesn't depend on the state or parameters * # **/ - spendFromBudget: AugmentedSubmittable<(accountId: AccountId32 | string | Uint8Array, amount: u128 | AnyNumber | Uint8Array, rationale: Option | null | object | string | Uint8Array) => SubmittableExtrinsic, [AccountId32, u128, Option]>; + spendFromBudget: AugmentedSubmittable<(accountId: AccountId32 | string | Uint8Array, amount: u128 | AnyNumber | Uint8Array, rationale: Option | null | Uint8Array | Bytes | string) => SubmittableExtrinsic, [AccountId32, u128, Option]>; /** * Terminate the active worker by the lead. * Requires signed leader origin or the root (to terminate the leader role). @@ -3445,7 +3382,7 @@ declare module '@polkadot/api-base/types/submittable' { * - O(1) doesn't depend on the state or parameters * # **/ - terminateRole: AugmentedSubmittable<(workerId: u64 | AnyNumber | Uint8Array, penalty: Option | null | object | string | Uint8Array, rationale: Option | null | object | string | Uint8Array) => SubmittableExtrinsic, [u64, Option, Option]>; + terminateRole: AugmentedSubmittable<(workerId: u64 | AnyNumber | Uint8Array, penalty: Option | null | Uint8Array | u128 | AnyNumber, rationale: Option | null | Uint8Array | Bytes | string) => SubmittableExtrinsic, [u64, Option, Option]>; /** * Update the reward account associated with a set reward relationship for the active worker. * @@ -3470,7 +3407,7 @@ declare module '@polkadot/api-base/types/submittable' { * - O(1) doesn't depend on the state or parameters * # **/ - updateRewardAmount: AugmentedSubmittable<(workerId: u64 | AnyNumber | Uint8Array, rewardPerBlock: Option | null | object | string | Uint8Array) => SubmittableExtrinsic, [u64, Option]>; + updateRewardAmount: AugmentedSubmittable<(workerId: u64 | AnyNumber | Uint8Array, rewardPerBlock: Option | null | Uint8Array | u128 | AnyNumber) => SubmittableExtrinsic, [u64, Option]>; /** * Update the associated role account of the active regular worker/lead. * @@ -3523,7 +3460,7 @@ declare module '@polkadot/api-base/types/submittable' { * - O(1) doesn't depend on the state or parameters * # **/ - addOpening: AugmentedSubmittable<(description: Bytes | string | Uint8Array, openingType: PalletWorkingGroupOpeningType | 'Leader' | 'Regular' | number | Uint8Array, stakePolicy: PalletWorkingGroupStakePolicy | { stakeAmount?: any; leavingUnstakingPeriod?: any } | string | Uint8Array, rewardPerBlock: Option | null | object | string | Uint8Array) => SubmittableExtrinsic, [Bytes, PalletWorkingGroupOpeningType, PalletWorkingGroupStakePolicy, Option]>; + addOpening: AugmentedSubmittable<(description: Bytes | string | Uint8Array, openingType: PalletWorkingGroupOpeningType | 'Leader' | 'Regular' | number | Uint8Array, stakePolicy: PalletWorkingGroupStakePolicy | { stakeAmount?: any; leavingUnstakingPeriod?: any } | string | Uint8Array, rewardPerBlock: Option | null | Uint8Array | u128 | AnyNumber) => SubmittableExtrinsic, [Bytes, PalletWorkingGroupOpeningType, PalletWorkingGroupStakePolicy, Option]>; /** * Apply on a worker opening. * @@ -3626,7 +3563,7 @@ declare module '@polkadot/api-base/types/submittable' { * - O(1) doesn't depend on the state or parameters * # **/ - leaveRole: AugmentedSubmittable<(workerId: u64 | AnyNumber | Uint8Array, rationale: Option | null | object | string | Uint8Array) => SubmittableExtrinsic, [u64, Option]>; + leaveRole: AugmentedSubmittable<(workerId: u64 | AnyNumber | Uint8Array, rationale: Option | null | Uint8Array | Bytes | string) => SubmittableExtrinsic, [u64, Option]>; /** * Sets a new budget for the working group. * Requires root origin. @@ -3654,7 +3591,7 @@ declare module '@polkadot/api-base/types/submittable' { * - O(1) doesn't depend on the state or parameters * # **/ - setStatusText: AugmentedSubmittable<(statusText: Option | null | object | string | Uint8Array) => SubmittableExtrinsic, [Option]>; + setStatusText: AugmentedSubmittable<(statusText: Option | null | Uint8Array | Bytes | string) => SubmittableExtrinsic, [Option]>; /** * Slashes the regular worker stake, demands a leader origin. No limits, no actions on zero stake. * If slashing balance greater than the existing stake - stake is slashed to zero. @@ -3668,7 +3605,7 @@ declare module '@polkadot/api-base/types/submittable' { * - O(1) doesn't depend on the state or parameters * # **/ - slashStake: AugmentedSubmittable<(workerId: u64 | AnyNumber | Uint8Array, penalty: u128 | AnyNumber | Uint8Array, rationale: Option | null | object | string | Uint8Array) => SubmittableExtrinsic, [u64, u128, Option]>; + slashStake: AugmentedSubmittable<(workerId: u64 | AnyNumber | Uint8Array, penalty: u128 | AnyNumber | Uint8Array, rationale: Option | null | Uint8Array | Bytes | string) => SubmittableExtrinsic, [u64, u128, Option]>; /** * Transfers specified amount to any account. * Requires leader origin. @@ -3681,7 +3618,7 @@ declare module '@polkadot/api-base/types/submittable' { * - O(1) doesn't depend on the state or parameters * # **/ - spendFromBudget: AugmentedSubmittable<(accountId: AccountId32 | string | Uint8Array, amount: u128 | AnyNumber | Uint8Array, rationale: Option | null | object | string | Uint8Array) => SubmittableExtrinsic, [AccountId32, u128, Option]>; + spendFromBudget: AugmentedSubmittable<(accountId: AccountId32 | string | Uint8Array, amount: u128 | AnyNumber | Uint8Array, rationale: Option | null | Uint8Array | Bytes | string) => SubmittableExtrinsic, [AccountId32, u128, Option]>; /** * Terminate the active worker by the lead. * Requires signed leader origin or the root (to terminate the leader role). @@ -3694,7 +3631,7 @@ declare module '@polkadot/api-base/types/submittable' { * - O(1) doesn't depend on the state or parameters * # **/ - terminateRole: AugmentedSubmittable<(workerId: u64 | AnyNumber | Uint8Array, penalty: Option | null | object | string | Uint8Array, rationale: Option | null | object | string | Uint8Array) => SubmittableExtrinsic, [u64, Option, Option]>; + terminateRole: AugmentedSubmittable<(workerId: u64 | AnyNumber | Uint8Array, penalty: Option | null | Uint8Array | u128 | AnyNumber, rationale: Option | null | Uint8Array | Bytes | string) => SubmittableExtrinsic, [u64, Option, Option]>; /** * Update the reward account associated with a set reward relationship for the active worker. * @@ -3719,7 +3656,7 @@ declare module '@polkadot/api-base/types/submittable' { * - O(1) doesn't depend on the state or parameters * # **/ - updateRewardAmount: AugmentedSubmittable<(workerId: u64 | AnyNumber | Uint8Array, rewardPerBlock: Option | null | object | string | Uint8Array) => SubmittableExtrinsic, [u64, Option]>; + updateRewardAmount: AugmentedSubmittable<(workerId: u64 | AnyNumber | Uint8Array, rewardPerBlock: Option | null | Uint8Array | u128 | AnyNumber) => SubmittableExtrinsic, [u64, Option]>; /** * Update the associated role account of the active regular worker/lead. * @@ -3772,7 +3709,7 @@ declare module '@polkadot/api-base/types/submittable' { * - O(1) doesn't depend on the state or parameters * # **/ - addOpening: AugmentedSubmittable<(description: Bytes | string | Uint8Array, openingType: PalletWorkingGroupOpeningType | 'Leader' | 'Regular' | number | Uint8Array, stakePolicy: PalletWorkingGroupStakePolicy | { stakeAmount?: any; leavingUnstakingPeriod?: any } | string | Uint8Array, rewardPerBlock: Option | null | object | string | Uint8Array) => SubmittableExtrinsic, [Bytes, PalletWorkingGroupOpeningType, PalletWorkingGroupStakePolicy, Option]>; + addOpening: AugmentedSubmittable<(description: Bytes | string | Uint8Array, openingType: PalletWorkingGroupOpeningType | 'Leader' | 'Regular' | number | Uint8Array, stakePolicy: PalletWorkingGroupStakePolicy | { stakeAmount?: any; leavingUnstakingPeriod?: any } | string | Uint8Array, rewardPerBlock: Option | null | Uint8Array | u128 | AnyNumber) => SubmittableExtrinsic, [Bytes, PalletWorkingGroupOpeningType, PalletWorkingGroupStakePolicy, Option]>; /** * Apply on a worker opening. * @@ -3875,7 +3812,7 @@ declare module '@polkadot/api-base/types/submittable' { * - O(1) doesn't depend on the state or parameters * # **/ - leaveRole: AugmentedSubmittable<(workerId: u64 | AnyNumber | Uint8Array, rationale: Option | null | object | string | Uint8Array) => SubmittableExtrinsic, [u64, Option]>; + leaveRole: AugmentedSubmittable<(workerId: u64 | AnyNumber | Uint8Array, rationale: Option | null | Uint8Array | Bytes | string) => SubmittableExtrinsic, [u64, Option]>; /** * Sets a new budget for the working group. * Requires root origin. @@ -3903,7 +3840,7 @@ declare module '@polkadot/api-base/types/submittable' { * - O(1) doesn't depend on the state or parameters * # **/ - setStatusText: AugmentedSubmittable<(statusText: Option | null | object | string | Uint8Array) => SubmittableExtrinsic, [Option]>; + setStatusText: AugmentedSubmittable<(statusText: Option | null | Uint8Array | Bytes | string) => SubmittableExtrinsic, [Option]>; /** * Slashes the regular worker stake, demands a leader origin. No limits, no actions on zero stake. * If slashing balance greater than the existing stake - stake is slashed to zero. @@ -3917,7 +3854,7 @@ declare module '@polkadot/api-base/types/submittable' { * - O(1) doesn't depend on the state or parameters * # **/ - slashStake: AugmentedSubmittable<(workerId: u64 | AnyNumber | Uint8Array, penalty: u128 | AnyNumber | Uint8Array, rationale: Option | null | object | string | Uint8Array) => SubmittableExtrinsic, [u64, u128, Option]>; + slashStake: AugmentedSubmittable<(workerId: u64 | AnyNumber | Uint8Array, penalty: u128 | AnyNumber | Uint8Array, rationale: Option | null | Uint8Array | Bytes | string) => SubmittableExtrinsic, [u64, u128, Option]>; /** * Transfers specified amount to any account. * Requires leader origin. @@ -3930,7 +3867,7 @@ declare module '@polkadot/api-base/types/submittable' { * - O(1) doesn't depend on the state or parameters * # **/ - spendFromBudget: AugmentedSubmittable<(accountId: AccountId32 | string | Uint8Array, amount: u128 | AnyNumber | Uint8Array, rationale: Option | null | object | string | Uint8Array) => SubmittableExtrinsic, [AccountId32, u128, Option]>; + spendFromBudget: AugmentedSubmittable<(accountId: AccountId32 | string | Uint8Array, amount: u128 | AnyNumber | Uint8Array, rationale: Option | null | Uint8Array | Bytes | string) => SubmittableExtrinsic, [AccountId32, u128, Option]>; /** * Terminate the active worker by the lead. * Requires signed leader origin or the root (to terminate the leader role). @@ -3943,7 +3880,7 @@ declare module '@polkadot/api-base/types/submittable' { * - O(1) doesn't depend on the state or parameters * # **/ - terminateRole: AugmentedSubmittable<(workerId: u64 | AnyNumber | Uint8Array, penalty: Option | null | object | string | Uint8Array, rationale: Option | null | object | string | Uint8Array) => SubmittableExtrinsic, [u64, Option, Option]>; + terminateRole: AugmentedSubmittable<(workerId: u64 | AnyNumber | Uint8Array, penalty: Option | null | Uint8Array | u128 | AnyNumber, rationale: Option | null | Uint8Array | Bytes | string) => SubmittableExtrinsic, [u64, Option, Option]>; /** * Update the reward account associated with a set reward relationship for the active worker. * @@ -3968,7 +3905,7 @@ declare module '@polkadot/api-base/types/submittable' { * - O(1) doesn't depend on the state or parameters * # **/ - updateRewardAmount: AugmentedSubmittable<(workerId: u64 | AnyNumber | Uint8Array, rewardPerBlock: Option | null | object | string | Uint8Array) => SubmittableExtrinsic, [u64, Option]>; + updateRewardAmount: AugmentedSubmittable<(workerId: u64 | AnyNumber | Uint8Array, rewardPerBlock: Option | null | Uint8Array | u128 | AnyNumber) => SubmittableExtrinsic, [u64, Option]>; /** * Update the associated role account of the active regular worker/lead. * @@ -4041,6 +3978,21 @@ declare module '@polkadot/api-base/types/submittable' { * # **/ burn: AugmentedSubmittable<(tokenId: u64 | AnyNumber | Uint8Array, memberId: u64 | AnyNumber | Uint8Array, amount: u128 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [u64, u64, u128]>; + /** + * Mint desired `token_id` amount into user account via JOY exchnage + * Preconditions + * - origin, member_id pair must be a valid authentication pair + * - token_id must exist + * - user usable JOY balance must be enough for buying (+ existential deposit) + * - slippage tolerance constraints respected if provided + * - token total supply and amount value must be s.t. `eval` function doesn't overflow + * + * Postconditions + * - `amount` CRT minted into account (which is created if necessary with existential deposit transferred to it) + * - respective JOY amount transferred from user balance to amm treasury account + * - event deposited + **/ + buyOnAmm: AugmentedSubmittable<(tokenId: u64 | AnyNumber | Uint8Array, memberId: u64 | AnyNumber | Uint8Array, amount: u128 | AnyNumber | Uint8Array, slippageTolerance: Option> | null | Uint8Array | ITuple<[Permill, u128]> | [Permill | AnyNumber | Uint8Array, u128 | AnyNumber | Uint8Array]) => SubmittableExtrinsic, [u64, u64, u128, Option>]>; /** * Allow any user to remove an account * @@ -4199,6 +4151,36 @@ declare module '@polkadot/api-base/types/submittable' { * # **/ purchaseTokensOnSale: AugmentedSubmittable<(tokenId: u64 | AnyNumber | Uint8Array, memberId: u64 | AnyNumber | Uint8Array, amount: u128 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [u64, u64, u128]>; + /** + * Burn desired `token_id` amount from user account and get JOY from treasury account + * Preconditions + * - origin, member_id pair must be a valid authentication pair + * - token_id must exist + * - token_id, member_id must be valid account coordinates + * - user usable CRT balance must be at least `amount` + * - slippage tolerance constraints respected if provided + * - token total supply and amount value must be s.t. `eval` function doesn't overflow + * - amm treasury account must have sufficient JOYs for the operation + * + * Postconditions + * - `amount` burned from user account + * - total supply decreased by amount + * - respective JOY amount transferred from amm treasury account to user account + * - event deposited + **/ + sellOnAmm: AugmentedSubmittable<(tokenId: u64 | AnyNumber | Uint8Array, memberId: u64 | AnyNumber | Uint8Array, amount: u128 | AnyNumber | Uint8Array, slippageTolerance: Option> | null | Uint8Array | ITuple<[Permill, u128]> | [Permill | AnyNumber | Uint8Array, u128 | AnyNumber | Uint8Array]) => SubmittableExtrinsic, [u64, u64, u128, Option>]>; + /** + * Allows to freeze or unfreeze this pallet. Requires root origin. + * + * + * + * ## Weight + * `O (1)` + * - DB: + * - O(1) doesn't depend on the state or parameters + * # + **/ + setFrozenStatus: AugmentedSubmittable<(freeze: bool | boolean | Uint8Array) => SubmittableExtrinsic, [bool]>; /** * Allow to transfer from `src_member_id` account to the various `outputs` beneficiaries * in the specified amounts. @@ -4227,7 +4209,7 @@ declare module '@polkadot/api-base/types/submittable' { * - `O(T)` - from the the generated weights * # **/ - transfer: AugmentedSubmittable<(srcMemberId: u64 | AnyNumber | Uint8Array, tokenId: u64 | AnyNumber | Uint8Array, outputs: PalletProjectTokenTransfersPayment, metadata: Bytes | string | Uint8Array) => SubmittableExtrinsic, [u64, u64, PalletProjectTokenTransfersPayment, Bytes]>; + transfer: AugmentedSubmittable<(srcMemberId: u64 | AnyNumber | Uint8Array, tokenId: u64 | AnyNumber | Uint8Array, outputs: Vec> | ([u64 | AnyNumber | Uint8Array, u128 | AnyNumber | Uint8Array])[], metadata: Bytes | string | Uint8Array) => SubmittableExtrinsic, [u64, u64, Vec>, Bytes]>; }; proposalsCodex: { /** @@ -4245,7 +4227,7 @@ declare module '@polkadot/api-base/types/submittable' { * - O(1) doesn't depend on the state or parameters * # **/ - createProposal: AugmentedSubmittable<(generalProposalParameters: PalletProposalsCodexGeneralProposalParams | { memberId?: any; title?: any; description?: any; stakingAccountId?: any; exactExecutionBlock?: any } | string | Uint8Array, proposalDetails: PalletProposalsCodexProposalDetails | { Signal: any } | { RuntimeUpgrade: any } | { FundingRequest: any } | { SetMaxValidatorCount: any } | { CreateWorkingGroupLeadOpening: any } | { FillWorkingGroupLeadOpening: any } | { UpdateWorkingGroupBudget: any } | { DecreaseWorkingGroupLeadStake: any } | { SlashWorkingGroupLead: any } | { SetWorkingGroupLeadReward: any } | { TerminateWorkingGroupLead: any } | { AmendConstitution: any } | { CancelWorkingGroupLeadOpening: any } | { SetMembershipPrice: any } | { SetCouncilBudgetIncrement: any } | { SetCouncilorReward: any } | { SetInitialInvitationBalance: any } | { SetInitialInvitationCount: any } | { SetMembershipLeadInvitationQuota: any } | { SetReferralCut: any } | { VetoProposal: any } | { UpdateGlobalNftLimit: any } | { UpdateChannelPayouts: any } | string | Uint8Array) => SubmittableExtrinsic, [PalletProposalsCodexGeneralProposalParams, PalletProposalsCodexProposalDetails]>; + createProposal: AugmentedSubmittable<(generalProposalParameters: PalletProposalsCodexGeneralProposalParams | { memberId?: any; title?: any; description?: any; stakingAccountId?: any; exactExecutionBlock?: any } | string | Uint8Array, proposalDetails: PalletProposalsCodexProposalDetails | { Signal: any } | { RuntimeUpgrade: any } | { FundingRequest: any } | { SetMaxValidatorCount: any } | { CreateWorkingGroupLeadOpening: any } | { FillWorkingGroupLeadOpening: any } | { UpdateWorkingGroupBudget: any } | { DecreaseWorkingGroupLeadStake: any } | { SlashWorkingGroupLead: any } | { SetWorkingGroupLeadReward: any } | { TerminateWorkingGroupLead: any } | { AmendConstitution: any } | { CancelWorkingGroupLeadOpening: any } | { SetMembershipPrice: any } | { SetCouncilBudgetIncrement: any } | { SetCouncilorReward: any } | { SetInitialInvitationBalance: any } | { SetInitialInvitationCount: any } | { SetMembershipLeadInvitationQuota: any } | { SetReferralCut: any } | { VetoProposal: any } | { UpdateGlobalNftLimit: any } | { UpdateChannelPayouts: any } | { SetPalletFozenStatus: any } | string | Uint8Array) => SubmittableExtrinsic, [PalletProposalsCodexGeneralProposalParams, PalletProposalsCodexProposalDetails]>; }; proposalsDiscussion: { /** @@ -4415,13 +4397,9 @@ declare module '@polkadot/api-base/types/submittable' { * means being a controller account) or directly convertible into a validator ID (which * usually means being a stash account). * - * # - * - Complexity: `O(1)` in number of key types. Actual cost depends on the number of length - * of `T::Keys::key_ids()` which is fixed. - * - DbReads: `T::ValidatorIdOf`, `NextKeys`, `origin account` - * - DbWrites: `NextKeys`, `origin account` - * - DbWrites per key id: `KeyOwner` - * # + * ## Complexity + * - `O(1)` in number of key types. Actual cost depends on the number of length of + * `T::Keys::key_ids()` which is fixed. **/ purgeKeys: AugmentedSubmittable<() => SubmittableExtrinsic, []>; /** @@ -4431,14 +4409,9 @@ declare module '@polkadot/api-base/types/submittable' { * * The dispatch origin of this function must be signed. * - * # - * - Complexity: `O(1)`. Actual cost depends on the number of length of - * `T::Keys::key_ids()` which is fixed. - * - DbReads: `origin account`, `T::ValidatorIdOf`, `NextKeys` - * - DbWrites: `origin account`, `NextKeys` - * - DbReads per key id: `KeyOwner` - * - DbWrites per key id: `KeyOwner` - * # + * ## Complexity + * - `O(1)`. Actual cost depends on the number of length of `T::Keys::key_ids()` which is + * fixed. **/ setKeys: AugmentedSubmittable<(keys: JoystreamNodeRuntimeSessionKeys | { grandpa?: any; babe?: any; imOnline?: any; authorityDiscovery?: any } | string | Uint8Array, proof: Bytes | string | Uint8Array) => SubmittableExtrinsic, [JoystreamNodeRuntimeSessionKeys, Bytes]>; }; @@ -4452,15 +4425,13 @@ declare module '@polkadot/api-base/types/submittable' { * The dispatch origin for this call must be _Signed_ by the stash account. * * Emits `Bonded`. - * # + * ## Complexity * - Independent of the arguments. Moderate complexity. * - O(1). * - Three extra DB entries. * * NOTE: Two of the storage writes (`Self::bonded`, `Self::payee`) are _never_ cleaned * unless the `origin` falls below _existential deposit_ and gets removed as dust. - * ------------------ - * # **/ bond: AugmentedSubmittable<(controller: AccountId32 | string | Uint8Array, value: Compact | AnyNumber | Uint8Array, payee: PalletStakingRewardDestination | { Staked: any } | { Stash: any } | { Controller: any } | { Account: any } | { None: any } | string | Uint8Array) => SubmittableExtrinsic, [AccountId32, Compact, PalletStakingRewardDestination]>; /** @@ -4475,16 +4446,15 @@ declare module '@polkadot/api-base/types/submittable' { * * Emits `Bonded`. * - * # + * ## Complexity * - Independent of the arguments. Insignificant complexity. * - O(1). - * # **/ bondExtra: AugmentedSubmittable<(maxAdditional: Compact | AnyNumber | Uint8Array) => SubmittableExtrinsic, [Compact]>; /** * Cancel enactment of a deferred slash. * - * Can be called by the `T::SlashCancelOrigin`. + * Can be called by the `T::AdminOrigin`. * * Parameters: era and indices of the slashes for that era to kill. **/ @@ -4496,11 +4466,10 @@ declare module '@polkadot/api-base/types/submittable' { * * The dispatch origin for this call must be _Signed_ by the controller, not the stash. * - * # + * ## Complexity * - Independent of the arguments. Insignificant complexity. * - Contains one read. * - Writes are limited to the `origin` account key. - * # **/ chill: AugmentedSubmittable<() => SubmittableExtrinsic, []>; /** @@ -4550,11 +4519,9 @@ declare module '@polkadot/api-base/types/submittable' { * If this is called just before a new era is triggered, the election process may not * have enough blocks to get a result. * - * # + * ## Complexity * - No arguments. * - Weight: O(1) - * - Write ForceEra - * # **/ forceNewEra: AugmentedSubmittable<() => SubmittableExtrinsic, []>; /** @@ -4580,11 +4547,9 @@ declare module '@polkadot/api-base/types/submittable' { * Thus the election process may be ongoing when this is called. In this case the * election will continue until the next era is triggered. * - * # + * ## Complexity * - No arguments. * - Weight: O(1) - * - Write: ForceEra - * # **/ forceNoEras: AugmentedSubmittable<() => SubmittableExtrinsic, []>; /** @@ -4594,13 +4559,13 @@ declare module '@polkadot/api-base/types/submittable' { **/ forceUnstake: AugmentedSubmittable<(stash: AccountId32 | string | Uint8Array, numSlashingSpans: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [AccountId32, u32]>; /** - * Increments the ideal number of validators. + * Increments the ideal number of validators upto maximum of + * `ElectionProviderBase::MaxWinners`. * * The dispatch origin must be Root. * - * # + * ## Complexity * Same as [`Self::set_validator_count`]. - * # **/ increaseValidatorCount: AugmentedSubmittable<(additional: Compact | AnyNumber | Uint8Array) => SubmittableExtrinsic, [Compact]>; /** @@ -4624,11 +4589,10 @@ declare module '@polkadot/api-base/types/submittable' { * * The dispatch origin for this call must be _Signed_ by the controller, not the stash. * - * # + * ## Complexity * - The transaction's complexity is proportional to the size of `targets` (N) * which is capped at CompactAssignments::LIMIT (T::MaxNominations). * - Both the reads and writes follow a similar pattern. - * # **/ nominate: AugmentedSubmittable<(targets: Vec | (AccountId32 | string | Uint8Array)[]) => SubmittableExtrinsic, [Vec]>; /** @@ -4641,18 +4605,8 @@ declare module '@polkadot/api-base/types/submittable' { * The origin of this call must be _Signed_. Any account can call this function, even if * it is not one of the stakers. * - * # - * - Time complexity: at most O(MaxNominatorRewardedPerValidator). - * - Contains a limited number of reads and writes. - * ----------- - * N is the Number of payouts for the validator (including the validator) - * Weight: - * - Reward Destination Staked: O(N) - * - Reward Destination Controller (Creating): O(N) - * - * NOTE: weights are assuming that payouts are made to alive stash account (Staked). - * Paying even a dead controller is cheaper weight-wise. We don't do any refunds here. - * # + * ## Complexity + * - At most O(MaxNominatorRewardedPerValidator). **/ payoutStakers: AugmentedSubmittable<(validatorStash: AccountId32 | string | Uint8Array, era: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [AccountId32, u32]>; /** @@ -4675,21 +4629,19 @@ declare module '@polkadot/api-base/types/submittable' { * * The dispatch origin must be signed by the controller. * - * # + * ## Complexity * - Time complexity: O(L), where L is unlocking chunks * - Bounded by `MaxUnlockingChunks`. - * - Storage changes: Can't increase storage, only decrease it. - * # **/ rebond: AugmentedSubmittable<(value: Compact | AnyNumber | Uint8Array) => SubmittableExtrinsic, [Compact]>; /** - * Scale up the ideal number of validators by a factor. + * Scale up the ideal number of validators by a factor upto maximum of + * `ElectionProviderBase::MaxWinners`. * * The dispatch origin must be Root. * - * # + * ## Complexity * Same as [`Self::set_validator_count`]. - * # **/ scaleValidatorCount: AugmentedSubmittable<(factor: Percent | AnyNumber | Uint8Array) => SubmittableExtrinsic, [Percent]>; /** @@ -4699,49 +4651,26 @@ declare module '@polkadot/api-base/types/submittable' { * * The dispatch origin for this call must be _Signed_ by the stash, not the controller. * - * # + * ## Complexity + * O(1) * - Independent of the arguments. Insignificant complexity. * - Contains a limited number of reads. * - Writes are limited to the `origin` account key. - * ---------- - * Weight: O(1) - * DB Weight: - * - Read: Bonded, Ledger New Controller, Ledger Old Controller - * - Write: Bonded, Ledger New Controller, Ledger Old Controller - * # **/ setController: AugmentedSubmittable<(controller: AccountId32 | string | Uint8Array) => SubmittableExtrinsic, [AccountId32]>; - /** - * Set `HistoryDepth` value. This function will delete any history information - * when `HistoryDepth` is reduced. - * - * Parameters: - * - `new_history_depth`: The new history depth you would like to set. - * - `era_items_deleted`: The number of items that will be deleted by this dispatch. This - * should report all the storage items that will be deleted by clearing old era history. - * Needed to report an accurate weight for the dispatch. Trusted by `Root` to report an - * accurate number. - * - * Origin must be root. - * - * # - * - E: Number of history depths removed, i.e. 10 -> 7 = 3 - * - Weight: O(E) - * - DB Weight: - * - Reads: Current Era, History Depth - * - Writes: History Depth - * - Clear Prefix Each: Era Stakers, EraStakersClipped, ErasValidatorPrefs - * - Writes Each: ErasValidatorReward, ErasRewardPoints, ErasTotalStake, - * ErasStartSessionIndex - * # - **/ - setHistoryDepth: AugmentedSubmittable<(newHistoryDepth: Compact | AnyNumber | Uint8Array, eraItemsDeleted: Compact | AnyNumber | Uint8Array) => SubmittableExtrinsic, [Compact, Compact]>; /** * Set the validators who cannot be slashed (if any). * * The dispatch origin must be Root. **/ setInvulnerables: AugmentedSubmittable<(invulnerables: Vec | (AccountId32 | string | Uint8Array)[]) => SubmittableExtrinsic, [Vec]>; + /** + * Sets the minimum amount of commission that each validators must maintain. + * + * This call has lower privilege requirements than `set_staking_config` and can be called + * by the `T::AdminOrigin`. Root can always call this. + **/ + setMinCommission: AugmentedSubmittable<(updated: Perbill | AnyNumber | Uint8Array) => SubmittableExtrinsic, [Perbill]>; /** * (Re-)set the payment target for a controller. * @@ -4749,16 +4678,12 @@ declare module '@polkadot/api-base/types/submittable' { * * The dispatch origin for this call must be _Signed_ by the controller, not the stash. * - * # + * ## Complexity + * - O(1) * - Independent of the arguments. Insignificant complexity. * - Contains a limited number of reads. * - Writes are limited to the `origin` account key. * --------- - * - Weight: O(1) - * - DB Weight: - * - Read: Ledger - * - Write: Payee - * # **/ setPayee: AugmentedSubmittable<(payee: PalletStakingRewardDestination | { Staked: any } | { Stash: any } | { Controller: any } | { Account: any } | { None: any } | string | Uint8Array) => SubmittableExtrinsic, [PalletStakingRewardDestination]>; /** @@ -4775,7 +4700,7 @@ declare module '@polkadot/api-base/types/submittable' { * * `min_commission`: The minimum amount of commission that each validators must maintain. * This is checked only upon calling `validate`. Existing validators are not affected. * - * Origin must be Root to call this function. + * RuntimeOrigin must be Root to call this function. * * NOTE: Existing nominators and validators will not be affected by this update. * to kick people under the new limits, `chill_other` should be called. @@ -4786,10 +4711,8 @@ declare module '@polkadot/api-base/types/submittable' { * * The dispatch origin must be Root. * - * # - * Weight: O(1) - * Write: Validator Count - * # + * ## Complexity + * O(1) **/ setValidatorCount: AugmentedSubmittable<(updated: Compact | AnyNumber | Uint8Array) => SubmittableExtrinsic, [Compact]>; /** @@ -4803,8 +4726,8 @@ declare module '@polkadot/api-base/types/submittable' { * the funds out of management ready for transfer. * * No more than a limited number of unlocking chunks (see `MaxUnlockingChunks`) - * can co-exists at the same time. In that case, [`Call::withdraw_unbonded`] need - * to be called first to remove some of the chunks (if possible). + * can co-exists at the same time. If there are no unlocking chunks slots available + * [`Call::withdraw_unbonded`] is called to remove some of the chunks (if possible). * * If a user encounters the `InsufficientBond` error when calling this extrinsic, * they should call `chill` first in order to free up their bonded funds. @@ -4834,10 +4757,9 @@ declare module '@polkadot/api-base/types/submittable' { * * See also [`Call::unbond`]. * - * # - * Complexity O(S) where S is the number of slashing spans to remove + * ## Complexity + * O(S) where S is the number of slashing spans to remove * NOTE: Weight annotation is the kill scenario, we refund otherwise. - * # **/ withdrawUnbonded: AugmentedSubmittable<(numSlashingSpans: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [u32]>; }; @@ -4932,7 +4854,7 @@ declare module '@polkadot/api-base/types/submittable' { * - O(1) doesn't depend on the state or parameters * # **/ - createStorageBucket: AugmentedSubmittable<(inviteWorker: Option | null | object | string | Uint8Array, acceptingNewBags: bool | boolean | Uint8Array, sizeLimit: u64 | AnyNumber | Uint8Array, objectsLimit: u64 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [Option, bool, u64, u64]>; + createStorageBucket: AugmentedSubmittable<(inviteWorker: Option | null | Uint8Array | u64 | AnyNumber, acceptingNewBags: bool | boolean | Uint8Array, sizeLimit: u64 | AnyNumber | Uint8Array, objectsLimit: u64 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [Option, bool, u64, u64]>; /** * Delete distribution bucket. Must be empty. * @@ -5259,7 +5181,7 @@ declare module '@polkadot/api-base/types/submittable' { * - O(1) doesn't depend on the state or parameters * # **/ - addOpening: AugmentedSubmittable<(description: Bytes | string | Uint8Array, openingType: PalletWorkingGroupOpeningType | 'Leader' | 'Regular' | number | Uint8Array, stakePolicy: PalletWorkingGroupStakePolicy | { stakeAmount?: any; leavingUnstakingPeriod?: any } | string | Uint8Array, rewardPerBlock: Option | null | object | string | Uint8Array) => SubmittableExtrinsic, [Bytes, PalletWorkingGroupOpeningType, PalletWorkingGroupStakePolicy, Option]>; + addOpening: AugmentedSubmittable<(description: Bytes | string | Uint8Array, openingType: PalletWorkingGroupOpeningType | 'Leader' | 'Regular' | number | Uint8Array, stakePolicy: PalletWorkingGroupStakePolicy | { stakeAmount?: any; leavingUnstakingPeriod?: any } | string | Uint8Array, rewardPerBlock: Option | null | Uint8Array | u128 | AnyNumber) => SubmittableExtrinsic, [Bytes, PalletWorkingGroupOpeningType, PalletWorkingGroupStakePolicy, Option]>; /** * Apply on a worker opening. * @@ -5362,7 +5284,7 @@ declare module '@polkadot/api-base/types/submittable' { * - O(1) doesn't depend on the state or parameters * # **/ - leaveRole: AugmentedSubmittable<(workerId: u64 | AnyNumber | Uint8Array, rationale: Option | null | object | string | Uint8Array) => SubmittableExtrinsic, [u64, Option]>; + leaveRole: AugmentedSubmittable<(workerId: u64 | AnyNumber | Uint8Array, rationale: Option | null | Uint8Array | Bytes | string) => SubmittableExtrinsic, [u64, Option]>; /** * Sets a new budget for the working group. * Requires root origin. @@ -5390,7 +5312,7 @@ declare module '@polkadot/api-base/types/submittable' { * - O(1) doesn't depend on the state or parameters * # **/ - setStatusText: AugmentedSubmittable<(statusText: Option | null | object | string | Uint8Array) => SubmittableExtrinsic, [Option]>; + setStatusText: AugmentedSubmittable<(statusText: Option | null | Uint8Array | Bytes | string) => SubmittableExtrinsic, [Option]>; /** * Slashes the regular worker stake, demands a leader origin. No limits, no actions on zero stake. * If slashing balance greater than the existing stake - stake is slashed to zero. @@ -5404,7 +5326,7 @@ declare module '@polkadot/api-base/types/submittable' { * - O(1) doesn't depend on the state or parameters * # **/ - slashStake: AugmentedSubmittable<(workerId: u64 | AnyNumber | Uint8Array, penalty: u128 | AnyNumber | Uint8Array, rationale: Option | null | object | string | Uint8Array) => SubmittableExtrinsic, [u64, u128, Option]>; + slashStake: AugmentedSubmittable<(workerId: u64 | AnyNumber | Uint8Array, penalty: u128 | AnyNumber | Uint8Array, rationale: Option | null | Uint8Array | Bytes | string) => SubmittableExtrinsic, [u64, u128, Option]>; /** * Transfers specified amount to any account. * Requires leader origin. @@ -5417,7 +5339,7 @@ declare module '@polkadot/api-base/types/submittable' { * - O(1) doesn't depend on the state or parameters * # **/ - spendFromBudget: AugmentedSubmittable<(accountId: AccountId32 | string | Uint8Array, amount: u128 | AnyNumber | Uint8Array, rationale: Option | null | object | string | Uint8Array) => SubmittableExtrinsic, [AccountId32, u128, Option]>; + spendFromBudget: AugmentedSubmittable<(accountId: AccountId32 | string | Uint8Array, amount: u128 | AnyNumber | Uint8Array, rationale: Option | null | Uint8Array | Bytes | string) => SubmittableExtrinsic, [AccountId32, u128, Option]>; /** * Terminate the active worker by the lead. * Requires signed leader origin or the root (to terminate the leader role). @@ -5430,7 +5352,7 @@ declare module '@polkadot/api-base/types/submittable' { * - O(1) doesn't depend on the state or parameters * # **/ - terminateRole: AugmentedSubmittable<(workerId: u64 | AnyNumber | Uint8Array, penalty: Option | null | object | string | Uint8Array, rationale: Option | null | object | string | Uint8Array) => SubmittableExtrinsic, [u64, Option, Option]>; + terminateRole: AugmentedSubmittable<(workerId: u64 | AnyNumber | Uint8Array, penalty: Option | null | Uint8Array | u128 | AnyNumber, rationale: Option | null | Uint8Array | Bytes | string) => SubmittableExtrinsic, [u64, Option, Option]>; /** * Update the reward account associated with a set reward relationship for the active worker. * @@ -5455,7 +5377,7 @@ declare module '@polkadot/api-base/types/submittable' { * - O(1) doesn't depend on the state or parameters * # **/ - updateRewardAmount: AugmentedSubmittable<(workerId: u64 | AnyNumber | Uint8Array, rewardPerBlock: Option | null | object | string | Uint8Array) => SubmittableExtrinsic, [u64, Option]>; + updateRewardAmount: AugmentedSubmittable<(workerId: u64 | AnyNumber | Uint8Array, rewardPerBlock: Option | null | Uint8Array | u128 | AnyNumber) => SubmittableExtrinsic, [u64, Option]>; /** * Update the associated role account of the active regular worker/lead. * @@ -5495,10 +5417,6 @@ declare module '@polkadot/api-base/types/submittable' { workerRemark: AugmentedSubmittable<(workerId: u64 | AnyNumber | Uint8Array, msg: Bytes | string | Uint8Array) => SubmittableExtrinsic, [u64, Bytes]>; }; system: { - /** - * A dispatch that will fill the block weight up to the given ratio. - **/ - fillBlock: AugmentedSubmittable<(ratio: Perbill | AnyNumber | Uint8Array) => SubmittableExtrinsic, [Perbill]>; /** * Kill all storage items with a key that starts with the given prefix. * @@ -5513,9 +5431,8 @@ declare module '@polkadot/api-base/types/submittable' { /** * Make some on-chain remark. * - * # + * ## Complexity * - `O(1)` - * # **/ remark: AugmentedSubmittable<(remark: Bytes | string | Uint8Array) => SubmittableExtrinsic, [Bytes]>; /** @@ -5525,28 +5442,15 @@ declare module '@polkadot/api-base/types/submittable' { /** * Set the new runtime code. * - * # + * ## Complexity * - `O(C + S)` where `C` length of `code` and `S` complexity of `can_set_code` - * - 1 call to `can_set_code`: `O(S)` (calls `sp_io::misc::runtime_version` which is - * expensive). - * - 1 storage write (codec `O(C)`). - * - 1 digest item. - * - 1 event. - * The weight of this function is dependent on the runtime, but generally this is very - * expensive. We will treat this as a full block. - * # **/ setCode: AugmentedSubmittable<(code: Bytes | string | Uint8Array) => SubmittableExtrinsic, [Bytes]>; /** * Set the new runtime code without doing any checks of the given `code`. * - * # + * ## Complexity * - `O(C)` where `C` length of `code` - * - 1 storage write (codec `O(C)`). - * - 1 digest item. - * - 1 event. - * The weight of this function is dependent on the runtime. We will treat this as a full - * block. # **/ setCodeWithoutChecks: AugmentedSubmittable<(code: Bytes | string | Uint8Array) => SubmittableExtrinsic, [Bytes]>; /** @@ -5570,12 +5474,11 @@ declare module '@polkadot/api-base/types/submittable' { * * The dispatch origin for this call must be `Inherent`. * - * # + * ## Complexity * - `O(1)` (Note that implementations of `OnTimestampSet` must also be `O(1)`) * - 1 storage read and 1 storage mutation (codec `O(1)`). (because of `DidUpdate::take` in * `on_finalize`) * - 1 event handler `on_timestamp_set`. Must be `O(1)`. - * # **/ set: AugmentedSubmittable<(now: Compact | AnyNumber | Uint8Array) => SubmittableExtrinsic, [Compact]>; }; @@ -5599,17 +5502,16 @@ declare module '@polkadot/api-base/types/submittable' { /** * Send a batch of dispatch calls. * - * May be called from any origin. + * May be called from any origin except `None`. * * - `calls`: The calls to be dispatched from the same origin. The number of call must not * exceed the constant: `batched_calls_limit` (available in constant metadata). * - * If origin is root then call are dispatch without checking origin filter. (This includes - * bypassing `frame_system::Config::BaseCallFilter`). + * If origin is root then the calls are dispatched without checking origin filter. (This + * includes bypassing `frame_system::Config::BaseCallFilter`). * - * # - * - Complexity: O(C) where C is the number of calls to be batched. - * # + * ## Complexity + * - O(C) where C is the number of calls to be batched. * * This will return `Ok` in all circumstances. To determine the success of the batch, an * event is deposited. If a call failed and the batch was interrupted, then the @@ -5622,17 +5524,16 @@ declare module '@polkadot/api-base/types/submittable' { * Send a batch of dispatch calls and atomically execute them. * The whole transaction will rollback and fail if any of the calls failed. * - * May be called from any origin. + * May be called from any origin except `None`. * * - `calls`: The calls to be dispatched from the same origin. The number of call must not * exceed the constant: `batched_calls_limit` (available in constant metadata). * - * If origin is root then call are dispatch without checking origin filter. (This includes - * bypassing `frame_system::Config::BaseCallFilter`). + * If origin is root then the calls are dispatched without checking origin filter. (This + * includes bypassing `frame_system::Config::BaseCallFilter`). * - * # - * - Complexity: O(C) where C is the number of calls to be batched. - * # + * ## Complexity + * - O(C) where C is the number of calls to be batched. **/ batchAll: AugmentedSubmittable<(calls: Vec | (Call | IMethod | string | Uint8Array)[]) => SubmittableExtrinsic, [Vec]>; /** @@ -5640,31 +5541,35 @@ declare module '@polkadot/api-base/types/submittable' { * * The dispatch origin for this call must be _Root_. * - * # + * ## Complexity * - O(1). - * - Limited storage reads. - * - One DB write (event). - * - Weight of derivative `call` execution + T::WeightInfo::dispatch_as(). - * # **/ dispatchAs: AugmentedSubmittable<(asOrigin: JoystreamNodeRuntimeOriginCaller | { system: any } | { Void: any } | string | Uint8Array, call: Call | IMethod | string | Uint8Array) => SubmittableExtrinsic, [JoystreamNodeRuntimeOriginCaller, Call]>; /** * Send a batch of dispatch calls. * Unlike `batch`, it allows errors and won't interrupt. * - * May be called from any origin. + * May be called from any origin except `None`. * * - `calls`: The calls to be dispatched from the same origin. The number of call must not * exceed the constant: `batched_calls_limit` (available in constant metadata). * - * If origin is root then call are dispatch without checking origin filter. (This includes - * bypassing `frame_system::Config::BaseCallFilter`). + * If origin is root then the calls are dispatch without checking origin filter. (This + * includes bypassing `frame_system::Config::BaseCallFilter`). * - * # - * - Complexity: O(C) where C is the number of calls to be batched. - * # + * ## Complexity + * - O(C) where C is the number of calls to be batched. **/ forceBatch: AugmentedSubmittable<(calls: Vec | (Call | IMethod | string | Uint8Array)[]) => SubmittableExtrinsic, [Vec]>; + /** + * Dispatch a function call with a specified weight. + * + * This function does not check the weight of the call, and instead allows the + * Root origin to specify the weight of the call. + * + * The dispatch origin for this call must be _Root_. + **/ + withWeight: AugmentedSubmittable<(call: Call | IMethod | string | Uint8Array, weight: SpWeightsWeightV2Weight | { refTime?: any; proofSize?: any } | string | Uint8Array) => SubmittableExtrinsic, [Call, SpWeightsWeightV2Weight]>; }; vesting: { /** @@ -5680,12 +5585,8 @@ declare module '@polkadot/api-base/types/submittable' { * * NOTE: This will unlock all schedules through the current block. * - * # + * ## Complexity * - `O(1)`. - * - DbWeight: 4 Reads, 4 Writes - * - Reads: Vesting Storage, Balances Locks, Target Account, Source Account - * - Writes: Vesting Storage, Balances Locks, Target Account, Source Account - * # **/ forceVestedTransfer: AugmentedSubmittable<(source: AccountId32 | string | Uint8Array, target: AccountId32 | string | Uint8Array, schedule: PalletVestingVestingInfo | { locked?: any; perBlock?: any; startingBlock?: any } | string | Uint8Array) => SubmittableExtrinsic, [AccountId32, AccountId32, PalletVestingVestingInfo]>; /** @@ -5720,12 +5621,8 @@ declare module '@polkadot/api-base/types/submittable' { * * Emits either `VestingCompleted` or `VestingUpdated`. * - * # + * ## Complexity * - `O(1)`. - * - DbWeight: 2 Reads, 2 Writes - * - Reads: Vesting Storage, Balances Locks, [Sender Account] - * - Writes: Vesting Storage, Balances Locks, [Sender Account] - * # **/ vest: AugmentedSubmittable<() => SubmittableExtrinsic, []>; /** @@ -5740,12 +5637,8 @@ declare module '@polkadot/api-base/types/submittable' { * * NOTE: This will unlock all schedules through the current block. * - * # + * ## Complexity * - `O(1)`. - * - DbWeight: 3 Reads, 3 Writes - * - Reads: Vesting Storage, Balances Locks, Target Account, [Sender Account] - * - Writes: Vesting Storage, Balances Locks, Target Account, [Sender Account] - * # **/ vestedTransfer: AugmentedSubmittable<(target: AccountId32 | string | Uint8Array, schedule: PalletVestingVestingInfo | { locked?: any; perBlock?: any; startingBlock?: any } | string | Uint8Array) => SubmittableExtrinsic, [AccountId32, PalletVestingVestingInfo]>; /** @@ -5758,14 +5651,36 @@ declare module '@polkadot/api-base/types/submittable' { * * Emits either `VestingCompleted` or `VestingUpdated`. * - * # + * ## Complexity * - `O(1)`. - * - DbWeight: 3 Reads, 3 Writes - * - Reads: Vesting Storage, Balances Locks, Target Account - * - Writes: Vesting Storage, Balances Locks, Target Account - * # **/ vestOther: AugmentedSubmittable<(target: AccountId32 | string | Uint8Array) => SubmittableExtrinsic, [AccountId32]>; }; + voterList: { + /** + * Move the caller's Id directly in front of `lighter`. + * + * The dispatch origin for this call must be _Signed_ and can only be called by the Id of + * the account going in front of `lighter`. + * + * Only works if + * - both nodes are within the same bag, + * - and `origin` has a greater `Score` than `lighter`. + **/ + putInFrontOf: AugmentedSubmittable<(lighter: AccountId32 | string | Uint8Array) => SubmittableExtrinsic, [AccountId32]>; + /** + * Declare that some `dislocated` account has, through rewards or penalties, sufficiently + * changed its score that it should properly fall into a different bag than its current + * one. + * + * Anyone can call this function about any potentially dislocated account. + * + * Will always update the stored score of `dislocated` to the correct score, based on + * `ScoreProvider`. + * + * If `dislocated` does not exists, it returns an error. + **/ + rebag: AugmentedSubmittable<(dislocated: AccountId32 | string | Uint8Array) => SubmittableExtrinsic, [AccountId32]>; + }; } // AugmentedSubmittables } // declare module diff --git a/types/src/augment/augment-api.ts b/types/src/augment/augment-api.ts index 921d2f824d..53c9c77017 100644 --- a/types/src/augment/augment-api.ts +++ b/types/src/augment/augment-api.ts @@ -1,9 +1,10 @@ // Auto-generated via `yarn polkadot-types-from-chain`, do not edit /* eslint-disable */ -import './augment-api-consts'; -import './augment-api-errors'; -import './augment-api-events'; -import './augment-api-query'; -import './augment-api-tx'; -import './augment-api-rpc'; +import './augment-api-consts.js'; +import './augment-api-errors.js'; +import './augment-api-events.js'; +import './augment-api-query.js'; +import './augment-api-tx.js'; +import './augment-api-rpc.js'; +import './augment-api-runtime.js'; diff --git a/types/src/augment/augment-types.ts b/types/src/augment/augment-types.ts index e1592ae60e..5ce509bfd6 100644 --- a/types/src/augment/augment-types.ts +++ b/types/src/augment/augment-types.ts @@ -1,32 +1,38 @@ // Auto-generated via `yarn polkadot-types-from-defs`, do not edit /* eslint-disable */ +// import type lookup before we augment - in some environments +// this is required to allow for ambient/previous definitions +import '@polkadot/types/types/registry'; + import type { Data, StorageKey } from '@polkadot/types'; -import type { BitVec, Bool, Bytes, I128, I16, I256, I32, I64, I8, Json, Null, OptionBool, Raw, Text, Type, U128, U16, U256, U32, U64, U8, USize, bool, i128, i16, i256, i32, i64, i8, u128, u16, u256, u32, u64, u8, usize } from '@polkadot/types-codec'; +import type { BitVec, Bool, Bytes, F32, F64, I128, I16, I256, I32, I64, I8, Json, Null, OptionBool, Raw, Text, Type, U128, U16, U256, U32, U64, U8, USize, bool, f32, f64, i128, i16, i256, i32, i64, i8, u128, u16, u256, u32, u64, u8, usize } from '@polkadot/types-codec'; import type { AssetApproval, AssetApprovalKey, AssetBalance, AssetDestroyWitness, AssetDetails, AssetMetadata, TAssetBalance, TAssetDepositBalance } from '@polkadot/types/interfaces/assets'; import type { BlockAttestations, IncludedBlocks, MoreAttestations } from '@polkadot/types/interfaces/attestations'; import type { RawAuraPreDigest } from '@polkadot/types/interfaces/aura'; import type { ExtrinsicOrHash, ExtrinsicStatus } from '@polkadot/types/interfaces/author'; import type { UncleEntryItem } from '@polkadot/types/interfaces/authorship'; -import type { AllowedSlots, BabeAuthorityWeight, BabeBlockWeight, BabeEpochConfiguration, BabeEquivocationProof, BabeWeight, EpochAuthorship, MaybeRandomness, MaybeVrf, NextConfigDescriptor, NextConfigDescriptorV1, Randomness, RawBabePreDigest, RawBabePreDigestCompat, RawBabePreDigestPrimary, RawBabePreDigestPrimaryTo159, RawBabePreDigestSecondaryPlain, RawBabePreDigestSecondaryTo159, RawBabePreDigestSecondaryVRF, RawBabePreDigestTo159, SlotNumber, VrfData, VrfOutput, VrfProof } from '@polkadot/types/interfaces/babe'; +import type { AllowedSlots, BabeAuthorityWeight, BabeBlockWeight, BabeEpochConfiguration, BabeEquivocationProof, BabeGenesisConfiguration, BabeGenesisConfigurationV1, BabeWeight, Epoch, EpochAuthorship, MaybeRandomness, MaybeVrf, NextConfigDescriptor, NextConfigDescriptorV1, OpaqueKeyOwnershipProof, Randomness, RawBabePreDigest, RawBabePreDigestCompat, RawBabePreDigestPrimary, RawBabePreDigestPrimaryTo159, RawBabePreDigestSecondaryPlain, RawBabePreDigestSecondaryTo159, RawBabePreDigestSecondaryVRF, RawBabePreDigestTo159, SlotNumber, VrfData, VrfOutput, VrfProof } from '@polkadot/types/interfaces/babe'; import type { AccountData, BalanceLock, BalanceLockTo212, BalanceStatus, Reasons, ReserveData, ReserveIdentifier, VestingSchedule, WithdrawReasons } from '@polkadot/types/interfaces/balances'; -import type { BeefyCommitment, BeefyId, BeefyNextAuthoritySet, BeefyPayload, BeefySignedCommitment, MmrRootHash, ValidatorSetId } from '@polkadot/types/interfaces/beefy'; +import type { BeefyAuthoritySet, BeefyCommitment, BeefyEquivocationProof, BeefyId, BeefyNextAuthoritySet, BeefyPayload, BeefyPayloadId, BeefySignedCommitment, BeefyVoteMessage, MmrRootHash, ValidatorSet, ValidatorSetId } from '@polkadot/types/interfaces/beefy'; +import type { BenchmarkBatch, BenchmarkConfig, BenchmarkList, BenchmarkMetadata, BenchmarkParameter, BenchmarkResult } from '@polkadot/types/interfaces/benchmark'; +import type { CheckInherentsResult, InherentData, InherentIdentifier } from '@polkadot/types/interfaces/blockbuilder'; import type { BridgeMessageId, BridgedBlockHash, BridgedBlockNumber, BridgedHeader, CallOrigin, ChainId, DeliveredMessages, DispatchFeePayment, InboundLaneData, InboundRelayer, InitializationData, LaneId, MessageData, MessageKey, MessageNonce, MessagesDeliveryProofOf, MessagesProofOf, OperatingMode, OutboundLaneData, OutboundMessageFee, OutboundPayload, Parameter, RelayerId, UnrewardedRelayer, UnrewardedRelayersState } from '@polkadot/types/interfaces/bridges'; import type { BlockHash } from '@polkadot/types/interfaces/chain'; import type { PrefixedStorageKey } from '@polkadot/types/interfaces/childstate'; import type { StatementKind } from '@polkadot/types/interfaces/claims'; import type { CollectiveOrigin, MemberCount, ProposalIndex, Votes, VotesTo230 } from '@polkadot/types/interfaces/collective'; import type { AuthorityId, RawVRFOutput } from '@polkadot/types/interfaces/consensus'; -import type { AliveContractInfo, CodeHash, CodeSource, CodeUploadRequest, CodeUploadResult, CodeUploadResultValue, ContractCallFlags, ContractCallRequest, ContractExecResult, ContractExecResultOk, ContractExecResultResult, ContractExecResultSuccessTo255, ContractExecResultSuccessTo260, ContractExecResultTo255, ContractExecResultTo260, ContractExecResultTo267, ContractInfo, ContractInstantiateResult, ContractInstantiateResultTo267, ContractInstantiateResultTo299, ContractReturnFlags, ContractStorageKey, DeletedContract, ExecReturnValue, Gas, HostFnWeights, HostFnWeightsTo264, InstantiateRequest, InstantiateRequestV1, InstantiateRequestV2, InstantiateReturnValue, InstantiateReturnValueOk, InstantiateReturnValueTo267, InstructionWeights, Limits, LimitsTo264, PrefabWasmModule, RentProjection, Schedule, ScheduleTo212, ScheduleTo258, ScheduleTo264, SeedOf, StorageDeposit, TombstoneContractInfo, TrieId } from '@polkadot/types/interfaces/contracts'; -import type { ContractConstructorSpecLatest, ContractConstructorSpecV0, ContractConstructorSpecV1, ContractConstructorSpecV2, ContractConstructorSpecV3, ContractContractSpecV0, ContractContractSpecV1, ContractContractSpecV2, ContractContractSpecV3, ContractCryptoHasher, ContractDiscriminant, ContractDisplayName, ContractEventParamSpecLatest, ContractEventParamSpecV0, ContractEventParamSpecV2, ContractEventSpecLatest, ContractEventSpecV0, ContractEventSpecV1, ContractEventSpecV2, ContractLayoutArray, ContractLayoutCell, ContractLayoutEnum, ContractLayoutHash, ContractLayoutHashingStrategy, ContractLayoutKey, ContractLayoutStruct, ContractLayoutStructField, ContractMessageParamSpecLatest, ContractMessageParamSpecV0, ContractMessageParamSpecV2, ContractMessageSpecLatest, ContractMessageSpecV0, ContractMessageSpecV1, ContractMessageSpecV2, ContractMetadata, ContractMetadataLatest, ContractMetadataV0, ContractMetadataV1, ContractMetadataV2, ContractMetadataV3, ContractProject, ContractProjectContract, ContractProjectInfo, ContractProjectSource, ContractProjectV0, ContractSelector, ContractStorageLayout, ContractTypeSpec } from '@polkadot/types/interfaces/contractsAbi'; +import type { AliveContractInfo, CodeHash, CodeSource, CodeUploadRequest, CodeUploadResult, CodeUploadResultValue, ContractCallFlags, ContractCallRequest, ContractExecResult, ContractExecResultOk, ContractExecResultResult, ContractExecResultSuccessTo255, ContractExecResultSuccessTo260, ContractExecResultTo255, ContractExecResultTo260, ContractExecResultTo267, ContractExecResultU64, ContractInfo, ContractInstantiateResult, ContractInstantiateResultTo267, ContractInstantiateResultTo299, ContractInstantiateResultU64, ContractReturnFlags, ContractStorageKey, DeletedContract, ExecReturnValue, Gas, HostFnWeights, HostFnWeightsTo264, InstantiateRequest, InstantiateRequestV1, InstantiateRequestV2, InstantiateReturnValue, InstantiateReturnValueOk, InstantiateReturnValueTo267, InstructionWeights, Limits, LimitsTo264, PrefabWasmModule, RentProjection, Schedule, ScheduleTo212, ScheduleTo258, ScheduleTo264, SeedOf, StorageDeposit, TombstoneContractInfo, TrieId } from '@polkadot/types/interfaces/contracts'; +import type { ContractConstructorSpecLatest, ContractConstructorSpecV0, ContractConstructorSpecV1, ContractConstructorSpecV2, ContractConstructorSpecV3, ContractContractSpecV0, ContractContractSpecV1, ContractContractSpecV2, ContractContractSpecV3, ContractContractSpecV4, ContractCryptoHasher, ContractDiscriminant, ContractDisplayName, ContractEventParamSpecLatest, ContractEventParamSpecV0, ContractEventParamSpecV2, ContractEventSpecLatest, ContractEventSpecV0, ContractEventSpecV1, ContractEventSpecV2, ContractLayoutArray, ContractLayoutCell, ContractLayoutEnum, ContractLayoutHash, ContractLayoutHashingStrategy, ContractLayoutKey, ContractLayoutStruct, ContractLayoutStructField, ContractMessageParamSpecLatest, ContractMessageParamSpecV0, ContractMessageParamSpecV2, ContractMessageSpecLatest, ContractMessageSpecV0, ContractMessageSpecV1, ContractMessageSpecV2, ContractMetadata, ContractMetadataLatest, ContractMetadataV0, ContractMetadataV1, ContractMetadataV2, ContractMetadataV3, ContractMetadataV4, ContractProject, ContractProjectContract, ContractProjectInfo, ContractProjectSource, ContractProjectV0, ContractSelector, ContractStorageLayout, ContractTypeSpec } from '@polkadot/types/interfaces/contractsAbi'; import type { FundIndex, FundInfo, LastContribution, TrieIndex } from '@polkadot/types/interfaces/crowdloan'; -import type { ConfigData, MessageId, OverweightIndex, PageCounter, PageIndexData } from '@polkadot/types/interfaces/cumulus'; +import type { CollationInfo, CollationInfoV1, ConfigData, MessageId, OverweightIndex, PageCounter, PageIndexData } from '@polkadot/types/interfaces/cumulus'; import type { AccountVote, AccountVoteSplit, AccountVoteStandard, Conviction, Delegations, PreimageStatus, PreimageStatusAvailable, PriorLock, PropIndex, Proposal, ProxyState, ReferendumIndex, ReferendumInfo, ReferendumInfoFinished, ReferendumInfoTo239, ReferendumStatus, Tally, Voting, VotingDelegating, VotingDirect, VotingDirectVote } from '@polkadot/types/interfaces/democracy'; import type { BlockStats } from '@polkadot/types/interfaces/dev'; import type { ApprovalFlag, DefunctVoter, Renouncing, SetIndex, Vote, VoteIndex, VoteThreshold, VoterInfo } from '@polkadot/types/interfaces/elections'; import type { CreatedBlock, ImportedAux } from '@polkadot/types/interfaces/engine'; -import type { BlockV0, BlockV1, BlockV2, EIP1559Transaction, EIP2930Transaction, EthAccessList, EthAccessListItem, EthAccount, EthAddress, EthBlock, EthBloom, EthCallRequest, EthFilter, EthFilterAddress, EthFilterChanges, EthFilterTopic, EthFilterTopicEntry, EthFilterTopicInner, EthHeader, EthLog, EthReceipt, EthRichBlock, EthRichHeader, EthStorageProof, EthSubKind, EthSubParams, EthSubResult, EthSyncInfo, EthSyncStatus, EthTransaction, EthTransactionAction, EthTransactionCondition, EthTransactionRequest, EthTransactionSignature, EthTransactionStatus, EthWork, EthereumAccountId, EthereumAddress, EthereumLookupSource, EthereumSignature, LegacyTransaction, TransactionV0, TransactionV1, TransactionV2 } from '@polkadot/types/interfaces/eth'; -import type { EvmAccount, EvmLog, EvmVicinity, ExitError, ExitFatal, ExitReason, ExitRevert, ExitSucceed } from '@polkadot/types/interfaces/evm'; +import type { BlockV0, BlockV1, BlockV2, EIP1559Transaction, EIP2930Transaction, EthAccessList, EthAccessListItem, EthAccount, EthAddress, EthBlock, EthBloom, EthCallRequest, EthFeeHistory, EthFilter, EthFilterAddress, EthFilterChanges, EthFilterTopic, EthFilterTopicEntry, EthFilterTopicInner, EthHeader, EthLog, EthReceipt, EthReceiptV0, EthReceiptV3, EthRichBlock, EthRichHeader, EthStorageProof, EthSubKind, EthSubParams, EthSubResult, EthSyncInfo, EthSyncStatus, EthTransaction, EthTransactionAction, EthTransactionCondition, EthTransactionRequest, EthTransactionSignature, EthTransactionStatus, EthWork, EthereumAccountId, EthereumAddress, EthereumLookupSource, EthereumSignature, LegacyTransaction, TransactionV0, TransactionV1, TransactionV2 } from '@polkadot/types/interfaces/eth'; +import type { EvmAccount, EvmCallInfo, EvmCreateInfo, EvmLog, EvmVicinity, ExitError, ExitFatal, ExitReason, ExitRevert, ExitSucceed } from '@polkadot/types/interfaces/evm'; import type { AnySignature, EcdsaSignature, Ed25519Signature, Era, Extrinsic, ExtrinsicEra, ExtrinsicPayload, ExtrinsicPayloadUnknown, ExtrinsicPayloadV4, ExtrinsicSignature, ExtrinsicSignatureV4, ExtrinsicUnknown, ExtrinsicV4, ImmortalEra, MortalEra, MultiSignature, Signature, SignerPayload, Sr25519Signature } from '@polkadot/types/interfaces/extrinsics'; import type { AssetOptions, Owner, PermissionLatest, PermissionVersions, PermissionsV1 } from '@polkadot/types/interfaces/genericAsset'; import type { ActiveGilt, ActiveGiltsTotal, ActiveIndex, GiltBid } from '@polkadot/types/interfaces/gilt'; @@ -34,35 +40,38 @@ import type { AuthorityIndex, AuthorityList, AuthoritySet, AuthoritySetChange, A import type { IdentityFields, IdentityInfo, IdentityInfoAdditional, IdentityInfoTo198, IdentityJudgement, RegistrarIndex, RegistrarInfo, Registration, RegistrationJudgement, RegistrationTo198 } from '@polkadot/types/interfaces/identity'; import type { AuthIndex, AuthoritySignature, Heartbeat, HeartbeatTo244, OpaqueMultiaddr, OpaqueNetworkState, OpaquePeerId } from '@polkadot/types/interfaces/imOnline'; import type { CallIndex, LotteryConfig } from '@polkadot/types/interfaces/lottery'; -import type { ErrorMetadataLatest, ErrorMetadataV10, ErrorMetadataV11, ErrorMetadataV12, ErrorMetadataV13, ErrorMetadataV14, ErrorMetadataV9, EventMetadataLatest, EventMetadataV10, EventMetadataV11, EventMetadataV12, EventMetadataV13, EventMetadataV14, EventMetadataV9, ExtrinsicMetadataLatest, ExtrinsicMetadataV11, ExtrinsicMetadataV12, ExtrinsicMetadataV13, ExtrinsicMetadataV14, FunctionArgumentMetadataLatest, FunctionArgumentMetadataV10, FunctionArgumentMetadataV11, FunctionArgumentMetadataV12, FunctionArgumentMetadataV13, FunctionArgumentMetadataV14, FunctionArgumentMetadataV9, FunctionMetadataLatest, FunctionMetadataV10, FunctionMetadataV11, FunctionMetadataV12, FunctionMetadataV13, FunctionMetadataV14, FunctionMetadataV9, MetadataAll, MetadataLatest, MetadataV10, MetadataV11, MetadataV12, MetadataV13, MetadataV14, MetadataV9, ModuleConstantMetadataV10, ModuleConstantMetadataV11, ModuleConstantMetadataV12, ModuleConstantMetadataV13, ModuleConstantMetadataV9, ModuleMetadataV10, ModuleMetadataV11, ModuleMetadataV12, ModuleMetadataV13, ModuleMetadataV9, PalletCallMetadataLatest, PalletCallMetadataV14, PalletConstantMetadataLatest, PalletConstantMetadataV14, PalletErrorMetadataLatest, PalletErrorMetadataV14, PalletEventMetadataLatest, PalletEventMetadataV14, PalletMetadataLatest, PalletMetadataV14, PalletStorageMetadataLatest, PalletStorageMetadataV14, PortableType, PortableTypeV14, SignedExtensionMetadataLatest, SignedExtensionMetadataV14, StorageEntryMetadataLatest, StorageEntryMetadataV10, StorageEntryMetadataV11, StorageEntryMetadataV12, StorageEntryMetadataV13, StorageEntryMetadataV14, StorageEntryMetadataV9, StorageEntryModifierLatest, StorageEntryModifierV10, StorageEntryModifierV11, StorageEntryModifierV12, StorageEntryModifierV13, StorageEntryModifierV14, StorageEntryModifierV9, StorageEntryTypeLatest, StorageEntryTypeV10, StorageEntryTypeV11, StorageEntryTypeV12, StorageEntryTypeV13, StorageEntryTypeV14, StorageEntryTypeV9, StorageHasher, StorageHasherV10, StorageHasherV11, StorageHasherV12, StorageHasherV13, StorageHasherV14, StorageHasherV9, StorageMetadataV10, StorageMetadataV11, StorageMetadataV12, StorageMetadataV13, StorageMetadataV9 } from '@polkadot/types/interfaces/metadata'; -import type { MmrLeafBatchProof, MmrLeafProof } from '@polkadot/types/interfaces/mmr'; +import type { ErrorMetadataLatest, ErrorMetadataV10, ErrorMetadataV11, ErrorMetadataV12, ErrorMetadataV13, ErrorMetadataV14, ErrorMetadataV9, EventMetadataLatest, EventMetadataV10, EventMetadataV11, EventMetadataV12, EventMetadataV13, EventMetadataV14, EventMetadataV9, ExtrinsicMetadataLatest, ExtrinsicMetadataV11, ExtrinsicMetadataV12, ExtrinsicMetadataV13, ExtrinsicMetadataV14, FunctionArgumentMetadataLatest, FunctionArgumentMetadataV10, FunctionArgumentMetadataV11, FunctionArgumentMetadataV12, FunctionArgumentMetadataV13, FunctionArgumentMetadataV14, FunctionArgumentMetadataV9, FunctionMetadataLatest, FunctionMetadataV10, FunctionMetadataV11, FunctionMetadataV12, FunctionMetadataV13, FunctionMetadataV14, FunctionMetadataV9, MetadataAll, MetadataLatest, MetadataV10, MetadataV11, MetadataV12, MetadataV13, MetadataV14, MetadataV9, ModuleConstantMetadataV10, ModuleConstantMetadataV11, ModuleConstantMetadataV12, ModuleConstantMetadataV13, ModuleConstantMetadataV9, ModuleMetadataV10, ModuleMetadataV11, ModuleMetadataV12, ModuleMetadataV13, ModuleMetadataV9, OpaqueMetadata, PalletCallMetadataLatest, PalletCallMetadataV14, PalletConstantMetadataLatest, PalletConstantMetadataV14, PalletErrorMetadataLatest, PalletErrorMetadataV14, PalletEventMetadataLatest, PalletEventMetadataV14, PalletMetadataLatest, PalletMetadataV14, PalletStorageMetadataLatest, PalletStorageMetadataV14, PortableType, PortableTypeV14, SignedExtensionMetadataLatest, SignedExtensionMetadataV14, StorageEntryMetadataLatest, StorageEntryMetadataV10, StorageEntryMetadataV11, StorageEntryMetadataV12, StorageEntryMetadataV13, StorageEntryMetadataV14, StorageEntryMetadataV9, StorageEntryModifierLatest, StorageEntryModifierV10, StorageEntryModifierV11, StorageEntryModifierV12, StorageEntryModifierV13, StorageEntryModifierV14, StorageEntryModifierV9, StorageEntryTypeLatest, StorageEntryTypeV10, StorageEntryTypeV11, StorageEntryTypeV12, StorageEntryTypeV13, StorageEntryTypeV14, StorageEntryTypeV9, StorageHasher, StorageHasherV10, StorageHasherV11, StorageHasherV12, StorageHasherV13, StorageHasherV14, StorageHasherV9, StorageMetadataV10, StorageMetadataV11, StorageMetadataV12, StorageMetadataV13, StorageMetadataV9 } from '@polkadot/types/interfaces/metadata'; +import type { MmrBatchProof, MmrEncodableOpaqueLeaf, MmrError, MmrLeafBatchProof, MmrLeafIndex, MmrLeafProof, MmrNodeIndex, MmrProof } from '@polkadot/types/interfaces/mmr'; +import type { NftCollectionId, NftItemId } from '@polkadot/types/interfaces/nfts'; +import type { NpApiError, NpPoolId } from '@polkadot/types/interfaces/nompools'; import type { StorageKind } from '@polkadot/types/interfaces/offchain'; import type { DeferredOffenceOf, Kind, OffenceDetails, Offender, OpaqueTimeSlot, ReportIdOf, Reporter } from '@polkadot/types/interfaces/offences'; -import type { AbridgedCandidateReceipt, AbridgedHostConfiguration, AbridgedHrmpChannel, AssignmentId, AssignmentKind, AttestedCandidate, AuctionIndex, AuthorityDiscoveryId, AvailabilityBitfield, AvailabilityBitfieldRecord, BackedCandidate, Bidder, BufferedSessionChange, CandidateCommitments, CandidateDescriptor, CandidateHash, CandidateInfo, CandidatePendingAvailability, CandidateReceipt, CollatorId, CollatorSignature, CommittedCandidateReceipt, CoreAssignment, CoreIndex, CoreOccupied, DisputeLocation, DisputeResult, DisputeState, DisputeStatement, DisputeStatementSet, DoubleVoteReport, DownwardMessage, ExplicitDisputeStatement, GlobalValidationData, GlobalValidationSchedule, GroupIndex, HeadData, HostConfiguration, HrmpChannel, HrmpChannelId, HrmpOpenChannelRequest, InboundDownwardMessage, InboundHrmpMessage, InboundHrmpMessages, IncomingParachain, IncomingParachainDeploy, IncomingParachainFixed, InvalidDisputeStatementKind, LeasePeriod, LeasePeriodOf, LocalValidationData, MessageIngestionType, MessageQueueChain, MessagingStateSnapshot, MessagingStateSnapshotEgressEntry, MultiDisputeStatementSet, NewBidder, OutboundHrmpMessage, ParaGenesisArgs, ParaId, ParaInfo, ParaLifecycle, ParaPastCodeMeta, ParaScheduling, ParaValidatorIndex, ParachainDispatchOrigin, ParachainInherentData, ParachainProposal, ParachainsInherentData, ParathreadClaim, ParathreadClaimQueue, ParathreadEntry, PersistedValidationData, QueuedParathread, RegisteredParachainInfo, RelayBlockNumber, RelayChainBlockNumber, RelayChainHash, RelayHash, Remark, ReplacementTimes, Retriable, Scheduling, ServiceQuality, SessionInfo, SessionInfoValidatorGroup, SignedAvailabilityBitfield, SignedAvailabilityBitfields, SigningContext, SlotRange, SlotRange10, Statement, SubId, SystemInherentData, TransientValidationData, UpgradeGoAhead, UpgradeRestriction, UpwardMessage, ValidDisputeStatementKind, ValidationCode, ValidationCodeHash, ValidationData, ValidationDataType, ValidationFunctionParams, ValidatorSignature, ValidityAttestation, VecInboundHrmpMessage, WinnersData, WinnersData10, WinnersDataTuple, WinnersDataTuple10, WinningData, WinningData10, WinningDataEntry } from '@polkadot/types/interfaces/parachains'; -import type { FeeDetails, InclusionFee, RuntimeDispatchInfo } from '@polkadot/types/interfaces/payment'; +import type { AbridgedCandidateReceipt, AbridgedHostConfiguration, AbridgedHrmpChannel, AssignmentId, AssignmentKind, AttestedCandidate, AuctionIndex, AuthorityDiscoveryId, AvailabilityBitfield, AvailabilityBitfieldRecord, BackedCandidate, Bidder, BufferedSessionChange, CandidateCommitments, CandidateDescriptor, CandidateEvent, CandidateHash, CandidateInfo, CandidatePendingAvailability, CandidateReceipt, CollatorId, CollatorSignature, CommittedCandidateReceipt, CoreAssignment, CoreIndex, CoreOccupied, CoreState, DisputeLocation, DisputeResult, DisputeState, DisputeStatement, DisputeStatementSet, DoubleVoteReport, DownwardMessage, ExplicitDisputeStatement, GlobalValidationData, GlobalValidationSchedule, GroupIndex, GroupRotationInfo, HeadData, HostConfiguration, HrmpChannel, HrmpChannelId, HrmpOpenChannelRequest, InboundDownwardMessage, InboundHrmpMessage, InboundHrmpMessages, IncomingParachain, IncomingParachainDeploy, IncomingParachainFixed, InvalidDisputeStatementKind, LeasePeriod, LeasePeriodOf, LocalValidationData, MessageIngestionType, MessageQueueChain, MessagingStateSnapshot, MessagingStateSnapshotEgressEntry, MultiDisputeStatementSet, NewBidder, OccupiedCore, OccupiedCoreAssumption, OldV1SessionInfo, OutboundHrmpMessage, ParaGenesisArgs, ParaId, ParaInfo, ParaLifecycle, ParaPastCodeMeta, ParaScheduling, ParaValidatorIndex, ParachainDispatchOrigin, ParachainInherentData, ParachainProposal, ParachainsInherentData, ParathreadClaim, ParathreadClaimQueue, ParathreadEntry, PersistedValidationData, PvfCheckStatement, QueuedParathread, RegisteredParachainInfo, RelayBlockNumber, RelayChainBlockNumber, RelayChainHash, RelayHash, Remark, ReplacementTimes, Retriable, ScheduledCore, Scheduling, ScrapedOnChainVotes, ServiceQuality, SessionInfo, SessionInfoValidatorGroup, SignedAvailabilityBitfield, SignedAvailabilityBitfields, SigningContext, SlotRange, SlotRange10, Statement, SubId, SystemInherentData, TransientValidationData, UpgradeGoAhead, UpgradeRestriction, UpwardMessage, ValidDisputeStatementKind, ValidationCode, ValidationCodeHash, ValidationData, ValidationDataType, ValidationFunctionParams, ValidatorSignature, ValidityAttestation, VecInboundHrmpMessage, WinnersData, WinnersData10, WinnersDataTuple, WinnersDataTuple10, WinningData, WinningData10, WinningDataEntry } from '@polkadot/types/interfaces/parachains'; +import type { FeeDetails, InclusionFee, RuntimeDispatchInfo, RuntimeDispatchInfoV1, RuntimeDispatchInfoV2 } from '@polkadot/types/interfaces/payment'; import type { Approvals } from '@polkadot/types/interfaces/poll'; import type { ProxyAnnouncement, ProxyDefinition, ProxyType } from '@polkadot/types/interfaces/proxy'; import type { AccountStatus, AccountValidity } from '@polkadot/types/interfaces/purchase'; import type { ActiveRecovery, RecoveryConfig } from '@polkadot/types/interfaces/recovery'; import type { RpcMethods } from '@polkadot/types/interfaces/rpc'; -import type { AccountId, AccountId20, AccountId32, AccountIdOf, AccountIndex, Address, AssetId, Balance, BalanceOf, Block, BlockNumber, BlockNumberFor, BlockNumberOf, Call, CallHash, CallHashOf, ChangesTrieConfiguration, ChangesTrieSignal, CodecHash, Consensus, ConsensusEngineId, CrateVersion, Digest, DigestItem, EncodedJustification, ExtrinsicsWeight, Fixed128, Fixed64, FixedI128, FixedI64, FixedU128, FixedU64, H1024, H128, H160, H2048, H256, H32, H512, H64, Hash, Header, HeaderPartial, I32F32, Index, IndicesLookupSource, Justification, Justifications, KeyTypeId, KeyValue, LockIdentifier, LookupSource, LookupTarget, ModuleId, Moment, MultiAddress, MultiSigner, OpaqueCall, Origin, OriginCaller, PalletId, PalletVersion, PalletsOrigin, Pays, PerU16, Perbill, Percent, Permill, Perquintill, Phantom, PhantomData, PreRuntime, Releases, RuntimeDbWeight, Seal, SealV0, SignedBlock, SignedBlockWithJustification, SignedBlockWithJustifications, Slot, StorageData, StorageProof, TransactionInfo, TransactionPriority, TransactionStorageProof, U32F32, ValidatorId, ValidatorIdOf, Weight, WeightMultiplier } from '@polkadot/types/interfaces/runtime'; +import type { AccountId, AccountId20, AccountId32, AccountId33, AccountIdOf, AccountIndex, Address, AssetId, Balance, BalanceOf, Block, BlockNumber, BlockNumberFor, BlockNumberOf, Call, CallHash, CallHashOf, ChangesTrieConfiguration, ChangesTrieSignal, CodecHash, Consensus, ConsensusEngineId, CrateVersion, Digest, DigestItem, EncodedJustification, ExtrinsicsWeight, Fixed128, Fixed64, FixedI128, FixedI64, FixedU128, FixedU64, H1024, H128, H160, H2048, H256, H32, H512, H64, Hash, Header, HeaderPartial, I32F32, Index, IndicesLookupSource, Justification, Justifications, KeyTypeId, KeyValue, LockIdentifier, LookupSource, LookupTarget, ModuleId, Moment, MultiAddress, MultiSigner, OpaqueCall, Origin, OriginCaller, PalletId, PalletVersion, PalletsOrigin, Pays, PerU16, Perbill, Percent, Permill, Perquintill, Phantom, PhantomData, PreRuntime, Releases, RuntimeCall, RuntimeDbWeight, RuntimeEvent, Seal, SealV0, SignedBlock, SignedBlockWithJustification, SignedBlockWithJustifications, Slot, SlotDuration, StorageData, StorageInfo, StorageProof, TransactionInfo, TransactionLongevity, TransactionPriority, TransactionStorageProof, TransactionTag, U32F32, ValidatorId, ValidatorIdOf, Weight, WeightMultiplier, WeightV0, WeightV1, WeightV2 } from '@polkadot/types/interfaces/runtime'; import type { Si0Field, Si0LookupTypeId, Si0Path, Si0Type, Si0TypeDef, Si0TypeDefArray, Si0TypeDefBitSequence, Si0TypeDefCompact, Si0TypeDefComposite, Si0TypeDefPhantom, Si0TypeDefPrimitive, Si0TypeDefSequence, Si0TypeDefTuple, Si0TypeDefVariant, Si0TypeParameter, Si0Variant, Si1Field, Si1LookupTypeId, Si1Path, Si1Type, Si1TypeDef, Si1TypeDefArray, Si1TypeDefBitSequence, Si1TypeDefCompact, Si1TypeDefComposite, Si1TypeDefPrimitive, Si1TypeDefSequence, Si1TypeDefTuple, Si1TypeDefVariant, Si1TypeParameter, Si1Variant, SiField, SiLookupTypeId, SiPath, SiType, SiTypeDef, SiTypeDefArray, SiTypeDefBitSequence, SiTypeDefCompact, SiTypeDefComposite, SiTypeDefPrimitive, SiTypeDefSequence, SiTypeDefTuple, SiTypeDefVariant, SiTypeParameter, SiVariant } from '@polkadot/types/interfaces/scaleInfo'; import type { Period, Priority, SchedulePeriod, SchedulePriority, Scheduled, ScheduledTo254, TaskAddress } from '@polkadot/types/interfaces/scheduler'; import type { BeefyKey, FullIdentification, IdentificationTuple, Keys, MembershipProof, SessionIndex, SessionKeys1, SessionKeys10, SessionKeys10B, SessionKeys2, SessionKeys3, SessionKeys4, SessionKeys5, SessionKeys6, SessionKeys6B, SessionKeys7, SessionKeys7B, SessionKeys8, SessionKeys8B, SessionKeys9, SessionKeys9B, ValidatorCount } from '@polkadot/types/interfaces/session'; import type { Bid, BidKind, SocietyJudgement, SocietyVote, StrikeCount, VouchingStatus } from '@polkadot/types/interfaces/society'; import type { ActiveEraInfo, CompactAssignments, CompactAssignmentsTo257, CompactAssignmentsTo265, CompactAssignmentsWith16, CompactAssignmentsWith24, CompactScore, CompactScoreCompact, ElectionCompute, ElectionPhase, ElectionResult, ElectionScore, ElectionSize, ElectionStatus, EraIndex, EraPoints, EraRewardPoints, EraRewards, Exposure, ExtendedBalance, Forcing, IndividualExposure, KeyType, MomentOf, Nominations, NominatorIndex, NominatorIndexCompact, OffchainAccuracy, OffchainAccuracyCompact, PhragmenScore, Points, RawSolution, RawSolutionTo265, RawSolutionWith16, RawSolutionWith24, ReadySolution, RewardDestination, RewardPoint, RoundSnapshot, SeatHolder, SignedSubmission, SignedSubmissionOf, SignedSubmissionTo276, SlashJournalEntry, SlashingSpans, SlashingSpansTo204, SolutionOrSnapshotSize, SolutionSupport, SolutionSupports, SpanIndex, SpanRecord, StakingLedger, StakingLedgerTo223, StakingLedgerTo240, SubmissionIndicesOf, Supports, UnappliedSlash, UnappliedSlashOther, UnlockChunk, ValidatorIndex, ValidatorIndexCompact, ValidatorPrefs, ValidatorPrefsTo145, ValidatorPrefsTo196, ValidatorPrefsWithBlocked, ValidatorPrefsWithCommission, VoteWeight, Voter } from '@polkadot/types/interfaces/staking'; -import type { ApiId, BlockTrace, BlockTraceEvent, BlockTraceEventData, BlockTraceSpan, KeyValueOption, MigrationStatusResult, ReadProof, RuntimeVersion, RuntimeVersionApi, RuntimeVersionPartial, SpecVersion, StorageChangeSet, TraceBlockResponse, TraceError } from '@polkadot/types/interfaces/state'; +import type { ApiId, BlockTrace, BlockTraceEvent, BlockTraceEventData, BlockTraceSpan, KeyValueOption, MigrationStatusResult, ReadProof, RuntimeVersion, RuntimeVersionApi, RuntimeVersionPartial, RuntimeVersionPre3, RuntimeVersionPre4, SpecVersion, StorageChangeSet, TraceBlockResponse, TraceError } from '@polkadot/types/interfaces/state'; import type { WeightToFeeCoefficient } from '@polkadot/types/interfaces/support'; -import type { AccountInfo, AccountInfoWithDualRefCount, AccountInfoWithProviders, AccountInfoWithRefCount, AccountInfoWithRefCountU8, AccountInfoWithTripleRefCount, ApplyExtrinsicResult, ArithmeticError, BlockLength, BlockWeights, ChainProperties, ChainType, ConsumedWeight, DigestOf, DispatchClass, DispatchError, DispatchErrorModule, DispatchErrorModuleU8, DispatchErrorModuleU8a, DispatchErrorTo198, DispatchInfo, DispatchInfoTo190, DispatchInfoTo244, DispatchOutcome, DispatchResult, DispatchResultOf, DispatchResultTo198, Event, EventId, EventIndex, EventRecord, Health, InvalidTransaction, Key, LastRuntimeUpgradeInfo, NetworkState, NetworkStatePeerset, NetworkStatePeersetInfo, NodeRole, NotConnectedPeer, Peer, PeerEndpoint, PeerEndpointAddr, PeerInfo, PeerPing, PerDispatchClassU32, PerDispatchClassWeight, PerDispatchClassWeightsPerClass, Phase, RawOrigin, RefCount, RefCountTo259, SyncState, SystemOrigin, TokenError, TransactionValidityError, TransactionalError, UnknownTransaction, WeightPerClass } from '@polkadot/types/interfaces/system'; +import type { AccountInfo, AccountInfoWithDualRefCount, AccountInfoWithProviders, AccountInfoWithRefCount, AccountInfoWithRefCountU8, AccountInfoWithTripleRefCount, ApplyExtrinsicResult, ApplyExtrinsicResultPre6, ArithmeticError, BlockLength, BlockWeights, ChainProperties, ChainType, ConsumedWeight, DigestOf, DispatchClass, DispatchError, DispatchErrorModule, DispatchErrorModulePre6, DispatchErrorModuleU8, DispatchErrorModuleU8a, DispatchErrorPre6, DispatchErrorPre6First, DispatchErrorTo198, DispatchInfo, DispatchInfoTo190, DispatchInfoTo244, DispatchOutcome, DispatchOutcomePre6, DispatchResult, DispatchResultOf, DispatchResultTo198, Event, EventId, EventIndex, EventRecord, Health, InvalidTransaction, Key, LastRuntimeUpgradeInfo, NetworkState, NetworkStatePeerset, NetworkStatePeersetInfo, NodeRole, NotConnectedPeer, Peer, PeerEndpoint, PeerEndpointAddr, PeerInfo, PeerPing, PerDispatchClassU32, PerDispatchClassWeight, PerDispatchClassWeightsPerClass, Phase, RawOrigin, RefCount, RefCountTo259, SyncState, SystemOrigin, TokenError, TransactionValidityError, TransactionalError, UnknownTransaction, WeightPerClass } from '@polkadot/types/interfaces/system'; import type { Bounty, BountyIndex, BountyStatus, BountyStatusActive, BountyStatusCuratorProposed, BountyStatusPendingPayout, OpenTip, OpenTipFinderTo225, OpenTipTip, OpenTipTo225, TreasuryProposal } from '@polkadot/types/interfaces/treasury'; import type { Multiplier } from '@polkadot/types/interfaces/txpayment'; +import type { TransactionSource, TransactionValidity, ValidTransaction } from '@polkadot/types/interfaces/txqueue'; import type { ClassDetails, ClassId, ClassMetadata, DepositBalance, DepositBalanceOf, DestroyWitness, InstanceDetails, InstanceId, InstanceMetadata } from '@polkadot/types/interfaces/uniques'; import type { Multisig, Timepoint } from '@polkadot/types/interfaces/utility'; import type { VestingInfo } from '@polkadot/types/interfaces/vesting'; import type { AssetInstance, AssetInstanceV0, AssetInstanceV1, AssetInstanceV2, BodyId, BodyPart, DoubleEncodedCall, Fungibility, FungibilityV0, FungibilityV1, FungibilityV2, InboundStatus, InstructionV2, InteriorMultiLocation, Junction, JunctionV0, JunctionV1, JunctionV2, Junctions, JunctionsV1, JunctionsV2, MultiAsset, MultiAssetFilter, MultiAssetFilterV1, MultiAssetFilterV2, MultiAssetV0, MultiAssetV1, MultiAssetV2, MultiAssets, MultiAssetsV1, MultiAssetsV2, MultiLocation, MultiLocationV0, MultiLocationV1, MultiLocationV2, NetworkId, OriginKindV0, OriginKindV1, OriginKindV2, OutboundStatus, Outcome, QueryId, QueryStatus, QueueConfigData, Response, ResponseV0, ResponseV1, ResponseV2, ResponseV2Error, ResponseV2Result, VersionMigrationStage, VersionedMultiAsset, VersionedMultiAssets, VersionedMultiLocation, VersionedResponse, VersionedXcm, WeightLimitV2, WildFungibility, WildFungibilityV0, WildFungibilityV1, WildFungibilityV2, WildMultiAsset, WildMultiAssetV1, WildMultiAssetV2, Xcm, XcmAssetId, XcmError, XcmErrorV0, XcmErrorV1, XcmErrorV2, XcmOrder, XcmOrderV0, XcmOrderV1, XcmOrderV2, XcmOrigin, XcmOriginKind, XcmV0, XcmV1, XcmV2, XcmVersion, XcmpMessageFormat } from '@polkadot/types/interfaces/xcm'; declare module '@polkadot/types/types/registry' { - export interface InterfaceTypes { + interface InterfaceTypes { AbridgedCandidateReceipt: AbridgedCandidateReceipt; AbridgedHostConfiguration: AbridgedHostConfiguration; AbridgedHrmpChannel: AbridgedHrmpChannel; @@ -70,6 +79,7 @@ declare module '@polkadot/types/types/registry' { AccountId: AccountId; AccountId20: AccountId20; AccountId32: AccountId32; + AccountId33: AccountId33; AccountIdOf: AccountIdOf; AccountIndex: AccountIndex; AccountInfo: AccountInfo; @@ -94,6 +104,7 @@ declare module '@polkadot/types/types/registry' { AnySignature: AnySignature; ApiId: ApiId; ApplyExtrinsicResult: ApplyExtrinsicResult; + ApplyExtrinsicResultPre6: ApplyExtrinsicResultPre6; ApprovalFlag: ApprovalFlag; Approvals: Approvals; ArithmeticError: ArithmeticError; @@ -129,6 +140,8 @@ declare module '@polkadot/types/types/registry' { BabeBlockWeight: BabeBlockWeight; BabeEpochConfiguration: BabeEpochConfiguration; BabeEquivocationProof: BabeEquivocationProof; + BabeGenesisConfiguration: BabeGenesisConfiguration; + BabeGenesisConfigurationV1: BabeGenesisConfigurationV1; BabeWeight: BabeWeight; BackedCandidate: BackedCandidate; Balance: Balance; @@ -136,12 +149,22 @@ declare module '@polkadot/types/types/registry' { BalanceLockTo212: BalanceLockTo212; BalanceOf: BalanceOf; BalanceStatus: BalanceStatus; + BeefyAuthoritySet: BeefyAuthoritySet; BeefyCommitment: BeefyCommitment; + BeefyEquivocationProof: BeefyEquivocationProof; BeefyId: BeefyId; BeefyKey: BeefyKey; BeefyNextAuthoritySet: BeefyNextAuthoritySet; BeefyPayload: BeefyPayload; + BeefyPayloadId: BeefyPayloadId; BeefySignedCommitment: BeefySignedCommitment; + BeefyVoteMessage: BeefyVoteMessage; + BenchmarkBatch: BenchmarkBatch; + BenchmarkConfig: BenchmarkConfig; + BenchmarkList: BenchmarkList; + BenchmarkMetadata: BenchmarkMetadata; + BenchmarkParameter: BenchmarkParameter; + BenchmarkResult: BenchmarkResult; Bid: Bid; Bidder: Bidder; BidKind: BidKind; @@ -185,6 +208,7 @@ declare module '@polkadot/types/types/registry' { CallOrigin: CallOrigin; CandidateCommitments: CandidateCommitments; CandidateDescriptor: CandidateDescriptor; + CandidateEvent: CandidateEvent; CandidateHash: CandidateHash; CandidateInfo: CandidateInfo; CandidatePendingAvailability: CandidatePendingAvailability; @@ -194,6 +218,7 @@ declare module '@polkadot/types/types/registry' { ChainType: ChainType; ChangesTrieConfiguration: ChangesTrieConfiguration; ChangesTrieSignal: ChangesTrieSignal; + CheckInherentsResult: CheckInherentsResult; ClassDetails: ClassDetails; ClassId: ClassId; ClassMetadata: ClassMetadata; @@ -203,6 +228,8 @@ declare module '@polkadot/types/types/registry' { CodeUploadRequest: CodeUploadRequest; CodeUploadResult: CodeUploadResult; CodeUploadResultValue: CodeUploadResultValue; + CollationInfo: CollationInfo; + CollationInfoV1: CollationInfoV1; CollatorId: CollatorId; CollatorSignature: CollatorSignature; CollectiveOrigin: CollectiveOrigin; @@ -229,6 +256,7 @@ declare module '@polkadot/types/types/registry' { ContractContractSpecV1: ContractContractSpecV1; ContractContractSpecV2: ContractContractSpecV2; ContractContractSpecV3: ContractContractSpecV3; + ContractContractSpecV4: ContractContractSpecV4; ContractCryptoHasher: ContractCryptoHasher; ContractDiscriminant: ContractDiscriminant; ContractDisplayName: ContractDisplayName; @@ -247,10 +275,12 @@ declare module '@polkadot/types/types/registry' { ContractExecResultTo255: ContractExecResultTo255; ContractExecResultTo260: ContractExecResultTo260; ContractExecResultTo267: ContractExecResultTo267; + ContractExecResultU64: ContractExecResultU64; ContractInfo: ContractInfo; ContractInstantiateResult: ContractInstantiateResult; ContractInstantiateResultTo267: ContractInstantiateResultTo267; ContractInstantiateResultTo299: ContractInstantiateResultTo299; + ContractInstantiateResultU64: ContractInstantiateResultU64; ContractLayoutArray: ContractLayoutArray; ContractLayoutCell: ContractLayoutCell; ContractLayoutEnum: ContractLayoutEnum; @@ -272,6 +302,7 @@ declare module '@polkadot/types/types/registry' { ContractMetadataV1: ContractMetadataV1; ContractMetadataV2: ContractMetadataV2; ContractMetadataV3: ContractMetadataV3; + ContractMetadataV4: ContractMetadataV4; ContractProject: ContractProject; ContractProjectContract: ContractProjectContract; ContractProjectInfo: ContractProjectInfo; @@ -286,6 +317,7 @@ declare module '@polkadot/types/types/registry' { CoreAssignment: CoreAssignment; CoreIndex: CoreIndex; CoreOccupied: CoreOccupied; + CoreState: CoreState; CrateVersion: CrateVersion; CreatedBlock: CreatedBlock; Data: Data; @@ -305,14 +337,18 @@ declare module '@polkadot/types/types/registry' { DispatchClass: DispatchClass; DispatchError: DispatchError; DispatchErrorModule: DispatchErrorModule; + DispatchErrorModulePre6: DispatchErrorModulePre6; DispatchErrorModuleU8: DispatchErrorModuleU8; DispatchErrorModuleU8a: DispatchErrorModuleU8a; + DispatchErrorPre6: DispatchErrorPre6; + DispatchErrorPre6First: DispatchErrorPre6First; DispatchErrorTo198: DispatchErrorTo198; DispatchFeePayment: DispatchFeePayment; DispatchInfo: DispatchInfo; DispatchInfoTo190: DispatchInfoTo190; DispatchInfoTo244: DispatchInfoTo244; DispatchOutcome: DispatchOutcome; + DispatchOutcomePre6: DispatchOutcomePre6; DispatchResult: DispatchResult; DispatchResultOf: DispatchResultOf; DispatchResultTo198: DispatchResultTo198; @@ -336,6 +372,7 @@ declare module '@polkadot/types/types/registry' { ElectionStatus: ElectionStatus; EncodedFinalityProofs: EncodedFinalityProofs; EncodedJustification: EncodedJustification; + Epoch: Epoch; EpochAuthorship: EpochAuthorship; Era: Era; EraIndex: EraIndex; @@ -360,6 +397,7 @@ declare module '@polkadot/types/types/registry' { EthereumAddress: EthereumAddress; EthereumLookupSource: EthereumLookupSource; EthereumSignature: EthereumSignature; + EthFeeHistory: EthFeeHistory; EthFilter: EthFilter; EthFilterAddress: EthFilterAddress; EthFilterChanges: EthFilterChanges; @@ -369,6 +407,8 @@ declare module '@polkadot/types/types/registry' { EthHeader: EthHeader; EthLog: EthLog; EthReceipt: EthReceipt; + EthReceiptV0: EthReceiptV0; + EthReceiptV3: EthReceiptV3; EthRichBlock: EthRichBlock; EthRichHeader: EthRichHeader; EthStorageProof: EthStorageProof; @@ -396,6 +436,8 @@ declare module '@polkadot/types/types/registry' { EventMetadataV9: EventMetadataV9; EventRecord: EventRecord; EvmAccount: EvmAccount; + EvmCallInfo: EvmCallInfo; + EvmCreateInfo: EvmCreateInfo; EvmLog: EvmLog; EvmVicinity: EvmVicinity; ExecReturnValue: ExecReturnValue; @@ -424,6 +466,10 @@ declare module '@polkadot/types/types/registry' { ExtrinsicsWeight: ExtrinsicsWeight; ExtrinsicUnknown: ExtrinsicUnknown; ExtrinsicV4: ExtrinsicV4; + f32: f32; + F32: F32; + f64: f64; + F64: F64; FeeDetails: FeeDetails; Fixed128: Fixed128; Fixed64: Fixed64; @@ -468,6 +514,7 @@ declare module '@polkadot/types/types/registry' { GrandpaPrevote: GrandpaPrevote; GrandpaSignedPrecommit: GrandpaSignedPrecommit; GroupIndex: GroupIndex; + GroupRotationInfo: GroupRotationInfo; H1024: H1024; H128: H128; H160: H160; @@ -524,6 +571,8 @@ declare module '@polkadot/types/types/registry' { Index: Index; IndicesLookupSource: IndicesLookupSource; IndividualExposure: IndividualExposure; + InherentData: InherentData; + InherentIdentifier: InherentIdentifier; InitializationData: InitializationData; InstanceDetails: InstanceDetails; InstanceId: InstanceId; @@ -594,8 +643,14 @@ declare module '@polkadot/types/types/registry' { MetadataV14: MetadataV14; MetadataV9: MetadataV9; MigrationStatusResult: MigrationStatusResult; + MmrBatchProof: MmrBatchProof; + MmrEncodableOpaqueLeaf: MmrEncodableOpaqueLeaf; + MmrError: MmrError; MmrLeafBatchProof: MmrLeafBatchProof; + MmrLeafIndex: MmrLeafIndex; MmrLeafProof: MmrLeafProof; + MmrNodeIndex: MmrNodeIndex; + MmrProof: MmrProof; MmrRootHash: MmrRootHash; ModuleConstantMetadataV10: ModuleConstantMetadataV10; ModuleConstantMetadataV11: ModuleConstantMetadataV11; @@ -640,17 +695,26 @@ declare module '@polkadot/types/types/registry' { NextAuthority: NextAuthority; NextConfigDescriptor: NextConfigDescriptor; NextConfigDescriptorV1: NextConfigDescriptorV1; + NftCollectionId: NftCollectionId; + NftItemId: NftItemId; NodeRole: NodeRole; Nominations: Nominations; NominatorIndex: NominatorIndex; NominatorIndexCompact: NominatorIndexCompact; NotConnectedPeer: NotConnectedPeer; + NpApiError: NpApiError; + NpPoolId: NpPoolId; Null: Null; + OccupiedCore: OccupiedCore; + OccupiedCoreAssumption: OccupiedCoreAssumption; OffchainAccuracy: OffchainAccuracy; OffchainAccuracyCompact: OffchainAccuracyCompact; OffenceDetails: OffenceDetails; Offender: Offender; + OldV1SessionInfo: OldV1SessionInfo; OpaqueCall: OpaqueCall; + OpaqueKeyOwnershipProof: OpaqueKeyOwnershipProof; + OpaqueMetadata: OpaqueMetadata; OpaqueMultiaddr: OpaqueMultiaddr; OpaqueNetworkState: OpaqueNetworkState; OpaquePeerId: OpaquePeerId; @@ -751,6 +815,7 @@ declare module '@polkadot/types/types/registry' { ProxyDefinition: ProxyDefinition; ProxyState: ProxyState; ProxyType: ProxyType; + PvfCheckStatement: PvfCheckStatement; QueryId: QueryId; QueryStatus: QueryStatus; QueueConfigData: QueueConfigData; @@ -816,13 +881,20 @@ declare module '@polkadot/types/types/registry' { RoundSnapshot: RoundSnapshot; RoundState: RoundState; RpcMethods: RpcMethods; + RuntimeCall: RuntimeCall; RuntimeDbWeight: RuntimeDbWeight; RuntimeDispatchInfo: RuntimeDispatchInfo; + RuntimeDispatchInfoV1: RuntimeDispatchInfoV1; + RuntimeDispatchInfoV2: RuntimeDispatchInfoV2; + RuntimeEvent: RuntimeEvent; RuntimeVersion: RuntimeVersion; RuntimeVersionApi: RuntimeVersionApi; RuntimeVersionPartial: RuntimeVersionPartial; + RuntimeVersionPre3: RuntimeVersionPre3; + RuntimeVersionPre4: RuntimeVersionPre4; Schedule: Schedule; Scheduled: Scheduled; + ScheduledCore: ScheduledCore; ScheduledTo254: ScheduledTo254; SchedulePeriod: SchedulePeriod; SchedulePriority: SchedulePriority; @@ -830,6 +902,7 @@ declare module '@polkadot/types/types/registry' { ScheduleTo258: ScheduleTo258; ScheduleTo264: ScheduleTo264; Scheduling: Scheduling; + ScrapedOnChainVotes: ScrapedOnChainVotes; Seal: Seal; SealV0: SealV0; SeatHolder: SeatHolder; @@ -918,6 +991,7 @@ declare module '@polkadot/types/types/registry' { SlashingSpansTo204: SlashingSpansTo204; SlashJournalEntry: SlashJournalEntry; Slot: Slot; + SlotDuration: SlotDuration; SlotNumber: SlotNumber; SlotRange: SlotRange; SlotRange10: SlotRange10; @@ -966,6 +1040,7 @@ declare module '@polkadot/types/types/registry' { StorageHasherV13: StorageHasherV13; StorageHasherV14: StorageHasherV14; StorageHasherV9: StorageHasherV9; + StorageInfo: StorageInfo; StorageKey: StorageKey; StorageKind: StorageKind; StorageMetadataV10: StorageMetadataV10; @@ -995,11 +1070,15 @@ declare module '@polkadot/types/types/registry' { TraceError: TraceError; TransactionalError: TransactionalError; TransactionInfo: TransactionInfo; + TransactionLongevity: TransactionLongevity; TransactionPriority: TransactionPriority; + TransactionSource: TransactionSource; TransactionStorageProof: TransactionStorageProof; + TransactionTag: TransactionTag; TransactionV0: TransactionV0; TransactionV1: TransactionV1; TransactionV2: TransactionV2; + TransactionValidity: TransactionValidity; TransactionValidityError: TransactionValidityError; TransientValidationData: TransientValidationData; TreasuryProposal: TreasuryProposal; @@ -1046,10 +1125,12 @@ declare module '@polkadot/types/types/registry' { ValidatorPrefsTo196: ValidatorPrefsTo196; ValidatorPrefsWithBlocked: ValidatorPrefsWithBlocked; ValidatorPrefsWithCommission: ValidatorPrefsWithCommission; + ValidatorSet: ValidatorSet; ValidatorSetId: ValidatorSetId; ValidatorSignature: ValidatorSignature; ValidDisputeStatementKind: ValidDisputeStatementKind; ValidityAttestation: ValidityAttestation; + ValidTransaction: ValidTransaction; VecInboundHrmpMessage: VecInboundHrmpMessage; VersionedMultiAsset: VersionedMultiAsset; VersionedMultiAssets: VersionedMultiAssets; @@ -1080,6 +1161,9 @@ declare module '@polkadot/types/types/registry' { WeightMultiplier: WeightMultiplier; WeightPerClass: WeightPerClass; WeightToFeeCoefficient: WeightToFeeCoefficient; + WeightV0: WeightV0; + WeightV1: WeightV1; + WeightV2: WeightV2; WildFungibility: WildFungibility; WildFungibilityV0: WildFungibilityV0; WildFungibilityV1: WildFungibilityV1; diff --git a/types/src/augment/lookup.ts b/types/src/augment/lookup.ts index 547a621508..143f41ba8e 100644 --- a/types/src/augment/lookup.ts +++ b/types/src/augment/lookup.ts @@ -24,21 +24,28 @@ export default { feeFrozen: 'u128' }, /** - * Lookup7: frame_support::weights::PerDispatchClass + * Lookup7: frame_support::dispatch::PerDispatchClass **/ - FrameSupportWeightsPerDispatchClassU64: { - normal: 'u64', - operational: 'u64', - mandatory: 'u64' + FrameSupportDispatchPerDispatchClassWeight: { + normal: 'SpWeightsWeightV2Weight', + operational: 'SpWeightsWeightV2Weight', + mandatory: 'SpWeightsWeightV2Weight' }, /** - * Lookup11: sp_runtime::generic::digest::Digest + * Lookup8: sp_weights::weight_v2::Weight + **/ + SpWeightsWeightV2Weight: { + refTime: 'Compact', + proofSize: 'Compact' + }, + /** + * Lookup13: sp_runtime::generic::digest::Digest **/ SpRuntimeDigest: { logs: 'Vec' }, /** - * Lookup13: sp_runtime::generic::digest::DigestItem + * Lookup15: sp_runtime::generic::digest::DigestItem **/ SpRuntimeDigestDigestItem: { _enum: { @@ -54,7 +61,7 @@ export default { } }, /** - * Lookup16: frame_system::EventRecord + * Lookup18: frame_system::EventRecord **/ FrameSystemEventRecord: { phase: 'FrameSystemPhase', @@ -62,16 +69,16 @@ export default { topics: 'Vec' }, /** - * Lookup18: frame_system::pallet::Event + * Lookup20: frame_system::pallet::Event **/ FrameSystemEvent: { _enum: { ExtrinsicSuccess: { - dispatchInfo: 'FrameSupportWeightsDispatchInfo', + dispatchInfo: 'FrameSupportDispatchDispatchInfo', }, ExtrinsicFailed: { dispatchError: 'SpRuntimeDispatchError', - dispatchInfo: 'FrameSupportWeightsDispatchInfo', + dispatchInfo: 'FrameSupportDispatchDispatchInfo', }, CodeUpdated: 'Null', NewAccount: { @@ -90,27 +97,27 @@ export default { } }, /** - * Lookup19: frame_support::weights::DispatchInfo + * Lookup21: frame_support::dispatch::DispatchInfo **/ - FrameSupportWeightsDispatchInfo: { - weight: 'u64', - class: 'FrameSupportWeightsDispatchClass', - paysFee: 'FrameSupportWeightsPays' + FrameSupportDispatchDispatchInfo: { + weight: 'SpWeightsWeightV2Weight', + class: 'FrameSupportDispatchDispatchClass', + paysFee: 'FrameSupportDispatchPays' }, /** - * Lookup20: frame_support::weights::DispatchClass + * Lookup22: frame_support::dispatch::DispatchClass **/ - FrameSupportWeightsDispatchClass: { + FrameSupportDispatchDispatchClass: { _enum: ['Normal', 'Operational', 'Mandatory'] }, /** - * Lookup21: frame_support::weights::Pays + * Lookup23: frame_support::dispatch::Pays **/ - FrameSupportWeightsPays: { + FrameSupportDispatchPays: { _enum: ['Yes', 'No'] }, /** - * Lookup22: sp_runtime::DispatchError + * Lookup24: sp_runtime::DispatchError **/ SpRuntimeDispatchError: { _enum: { @@ -122,37 +129,40 @@ export default { NoProviders: 'Null', TooManyConsumers: 'Null', Token: 'SpRuntimeTokenError', - Arithmetic: 'SpRuntimeArithmeticError', - Transactional: 'SpRuntimeTransactionalError' + Arithmetic: 'SpArithmeticArithmeticError', + Transactional: 'SpRuntimeTransactionalError', + Exhausted: 'Null', + Corruption: 'Null', + Unavailable: 'Null' } }, /** - * Lookup23: sp_runtime::ModuleError + * Lookup25: sp_runtime::ModuleError **/ SpRuntimeModuleError: { index: 'u8', error: '[u8;4]' }, /** - * Lookup24: sp_runtime::TokenError + * Lookup26: sp_runtime::TokenError **/ SpRuntimeTokenError: { _enum: ['NoFunds', 'WouldDie', 'BelowMinimum', 'CannotCreate', 'UnknownAsset', 'Frozen', 'Unsupported'] }, /** - * Lookup25: sp_runtime::ArithmeticError + * Lookup27: sp_arithmetic::ArithmeticError **/ - SpRuntimeArithmeticError: { + SpArithmeticArithmeticError: { _enum: ['Underflow', 'Overflow', 'DivisionByZero'] }, /** - * Lookup26: sp_runtime::TransactionalError + * Lookup28: sp_runtime::TransactionalError **/ SpRuntimeTransactionalError: { _enum: ['LimitReached', 'NoLayer'] }, /** - * Lookup27: pallet_utility::pallet::Event + * Lookup29: pallet_utility::pallet::Event **/ PalletUtilityEvent: { _enum: { @@ -172,7 +182,7 @@ export default { } }, /** - * Lookup30: pallet_balances::pallet::Event + * Lookup32: pallet_balances::pallet::Event **/ PalletBalancesEvent: { _enum: { @@ -223,23 +233,38 @@ export default { } }, /** - * Lookup31: frame_support::traits::tokens::misc::BalanceStatus + * Lookup33: frame_support::traits::tokens::misc::BalanceStatus **/ FrameSupportTokensMiscBalanceStatus: { _enum: ['Free', 'Reserved'] }, /** - * Lookup32: pallet_election_provider_multi_phase::pallet::Event + * Lookup34: pallet_transaction_payment::pallet::Event + **/ + PalletTransactionPaymentEvent: { + _enum: { + TransactionFeePaid: { + who: 'AccountId32', + actualFee: 'u128', + tip: 'u128' + } + } + }, + /** + * Lookup35: pallet_election_provider_multi_phase::pallet::Event **/ PalletElectionProviderMultiPhaseEvent: { _enum: { SolutionStored: { - electionCompute: 'PalletElectionProviderMultiPhaseElectionCompute', + compute: 'PalletElectionProviderMultiPhaseElectionCompute', + origin: 'Option', prevEjected: 'bool', }, ElectionFinalized: { - electionCompute: 'Option', + compute: 'PalletElectionProviderMultiPhaseElectionCompute', + score: 'SpNposElectionsElectionScore', }, + ElectionFailed: 'Null', Rewarded: { account: 'AccountId32', value: 'u128', @@ -248,49 +273,113 @@ export default { account: 'AccountId32', value: 'u128', }, - SignedPhaseStarted: { - round: 'u32', - }, - UnsignedPhaseStarted: { + PhaseTransitioned: { + from: 'PalletElectionProviderMultiPhasePhase', + to: 'PalletElectionProviderMultiPhasePhase', round: 'u32' } } }, /** - * Lookup33: pallet_election_provider_multi_phase::ElectionCompute + * Lookup36: pallet_election_provider_multi_phase::ElectionCompute **/ PalletElectionProviderMultiPhaseElectionCompute: { _enum: ['OnChain', 'Signed', 'Unsigned', 'Fallback', 'Emergency'] }, /** - * Lookup36: pallet_staking::pallet::pallet::Event + * Lookup39: sp_npos_elections::ElectionScore + **/ + SpNposElectionsElectionScore: { + minimalStake: 'u128', + sumStake: 'u128', + sumStakeSquared: 'u128' + }, + /** + * Lookup40: pallet_election_provider_multi_phase::Phase + **/ + PalletElectionProviderMultiPhasePhase: { + _enum: { + Off: 'Null', + Signed: 'Null', + Unsigned: '(bool,u32)', + Emergency: 'Null' + } + }, + /** + * Lookup42: pallet_staking::pallet::pallet::Event **/ PalletStakingPalletEvent: { _enum: { - EraPaid: '(u32,u128,u128)', - Rewarded: '(AccountId32,u128)', - Slashed: '(AccountId32,u128)', - OldSlashingReportDiscarded: 'u32', + EraPaid: { + eraIndex: 'u32', + validatorPayout: 'u128', + remainder: 'u128', + }, + Rewarded: { + stash: 'AccountId32', + amount: 'u128', + }, + Slashed: { + staker: 'AccountId32', + amount: 'u128', + }, + SlashReported: { + validator: 'AccountId32', + fraction: 'Perbill', + slashEra: 'u32', + }, + OldSlashingReportDiscarded: { + sessionIndex: 'u32', + }, StakersElected: 'Null', - Bonded: '(AccountId32,u128)', - Unbonded: '(AccountId32,u128)', - Withdrawn: '(AccountId32,u128)', - Kicked: '(AccountId32,AccountId32)', + Bonded: { + stash: 'AccountId32', + amount: 'u128', + }, + Unbonded: { + stash: 'AccountId32', + amount: 'u128', + }, + Withdrawn: { + stash: 'AccountId32', + amount: 'u128', + }, + Kicked: { + nominator: 'AccountId32', + stash: 'AccountId32', + }, StakingElectionFailed: 'Null', - Chilled: 'AccountId32', - PayoutStarted: '(u32,AccountId32)', - ValidatorPrefsSet: '(AccountId32,PalletStakingValidatorPrefs)' + Chilled: { + stash: 'AccountId32', + }, + PayoutStarted: { + eraIndex: 'u32', + validatorStash: 'AccountId32', + }, + ValidatorPrefsSet: { + stash: 'AccountId32', + prefs: 'PalletStakingValidatorPrefs', + }, + ForceEra: { + mode: 'PalletStakingForcing' + } } }, /** - * Lookup37: pallet_staking::ValidatorPrefs + * Lookup44: pallet_staking::ValidatorPrefs **/ PalletStakingValidatorPrefs: { commission: 'Compact', blocked: 'bool' }, /** - * Lookup40: pallet_session::pallet::Event + * Lookup46: pallet_staking::Forcing + **/ + PalletStakingForcing: { + _enum: ['NotForcing', 'ForceNew', 'ForceNone', 'ForceAlways'] + }, + /** + * Lookup47: pallet_session::pallet::Event **/ PalletSessionEvent: { _enum: { @@ -300,27 +389,27 @@ export default { } }, /** - * Lookup41: pallet_grandpa::pallet::Event + * Lookup48: pallet_grandpa::pallet::Event **/ PalletGrandpaEvent: { _enum: { NewAuthorities: { - authoritySet: 'Vec<(SpFinalityGrandpaAppPublic,u64)>', + authoritySet: 'Vec<(SpConsensusGrandpaAppPublic,u64)>', }, Paused: 'Null', Resumed: 'Null' } }, /** - * Lookup44: sp_finality_grandpa::app::Public + * Lookup51: sp_consensus_grandpa::app::Public **/ - SpFinalityGrandpaAppPublic: 'SpCoreEd25519Public', + SpConsensusGrandpaAppPublic: 'SpCoreEd25519Public', /** - * Lookup45: sp_core::ed25519::Public + * Lookup52: sp_core::ed25519::Public **/ SpCoreEd25519Public: '[u8;32]', /** - * Lookup46: pallet_im_online::pallet::Event + * Lookup53: pallet_im_online::pallet::Event **/ PalletImOnlineEvent: { _enum: { @@ -334,15 +423,15 @@ export default { } }, /** - * Lookup47: pallet_im_online::sr25519::app_sr25519::Public + * Lookup54: pallet_im_online::sr25519::app_sr25519::Public **/ PalletImOnlineSr25519AppSr25519Public: 'SpCoreSr25519Public', /** - * Lookup48: sp_core::sr25519::Public + * Lookup55: sp_core::sr25519::Public **/ SpCoreSr25519Public: '[u8;32]', /** - * Lookup51: pallet_staking::Exposure + * Lookup58: pallet_staking::Exposure **/ PalletStakingExposure: { total: 'Compact', @@ -350,14 +439,14 @@ export default { others: 'Vec' }, /** - * Lookup54: pallet_staking::IndividualExposure + * Lookup61: pallet_staking::IndividualExposure **/ PalletStakingIndividualExposure: { who: 'AccountId32', value: 'Compact' }, /** - * Lookup55: pallet_offences::pallet::Event + * Lookup62: pallet_offences::pallet::Event **/ PalletOffencesEvent: { _enum: { @@ -368,7 +457,7 @@ export default { } }, /** - * Lookup57: pallet_bags_list::pallet::Event + * Lookup64: pallet_bags_list::pallet::Event **/ PalletBagsListEvent: { _enum: { @@ -384,7 +473,7 @@ export default { } }, /** - * Lookup58: pallet_vesting::pallet::Event + * Lookup65: pallet_vesting::pallet::Event **/ PalletVestingEvent: { _enum: { @@ -398,7 +487,7 @@ export default { } }, /** - * Lookup59: pallet_multisig::pallet::Event + * Lookup66: pallet_multisig::pallet::Event **/ PalletMultisigEvent: { _enum: { @@ -429,14 +518,14 @@ export default { } }, /** - * Lookup60: pallet_multisig::Timepoint + * Lookup67: pallet_multisig::Timepoint **/ PalletMultisigTimepoint: { height: 'u32', index: 'u32' }, /** - * Lookup61: pallet_council::RawEvent + * Lookup68: pallet_council::RawEvent **/ PalletCouncilRawEvent: { _enum: { @@ -462,7 +551,7 @@ export default { } }, /** - * Lookup63: pallet_referendum::RawEvent + * Lookup70: pallet_referendum::RawEvent **/ PalletReferendumRawEvent: { _enum: { @@ -477,18 +566,18 @@ export default { } }, /** - * Lookup64: pallet_referendum::Instance1 + * Lookup71: pallet_referendum::Instance1 **/ PalletReferendumInstance1: 'Null', /** - * Lookup66: pallet_referendum::OptionResult + * Lookup73: pallet_referendum::OptionResult **/ PalletReferendumOptionResult: { optionId: 'u64', votePower: 'u128' }, /** - * Lookup67: pallet_membership::RawEvent, ActorId, pallet_membership::InviteMembershipParameters, pallet_membership::CreateMemberParameters, pallet_membership::GiftMembershipParameters> + * Lookup74: pallet_membership::RawEvent, ActorId, pallet_membership::InviteMembershipParameters, pallet_membership::CreateMemberParameters, pallet_membership::GiftMembershipParameters> **/ PalletMembershipRawEvent: { _enum: { @@ -512,7 +601,7 @@ export default { } }, /** - * Lookup68: pallet_membership::BuyMembershipParameters + * Lookup75: pallet_membership::BuyMembershipParameters **/ PalletMembershipBuyMembershipParameters: { rootAccount: 'AccountId32', @@ -522,7 +611,7 @@ export default { referrerId: 'Option' }, /** - * Lookup71: pallet_membership::InviteMembershipParameters + * Lookup78: pallet_membership::InviteMembershipParameters **/ PalletMembershipInviteMembershipParameters: { invitingMemberId: 'u64', @@ -532,7 +621,7 @@ export default { metadata: 'Bytes' }, /** - * Lookup72: pallet_membership::CreateMemberParameters + * Lookup79: pallet_membership::CreateMemberParameters **/ PalletMembershipCreateMemberParameters: { rootAccount: 'AccountId32', @@ -542,7 +631,7 @@ export default { isFoundingMember: 'bool' }, /** - * Lookup73: pallet_membership::GiftMembershipParameters + * Lookup80: pallet_membership::GiftMembershipParameters **/ PalletMembershipGiftMembershipParameters: { rootAccount: 'AccountId32', @@ -555,7 +644,7 @@ export default { applyRootAccountInvitationLock: 'Option' }, /** - * Lookup78: pallet_forum::RawEvent, pallet_forum::ExtendedPostIdObject> + * Lookup84: pallet_forum::RawEvent, pallet_forum::ExtendedPostIdObject> **/ PalletForumRawEvent: { _enum: { @@ -579,7 +668,7 @@ export default { } }, /** - * Lookup79: pallet_forum::PrivilegedActor + * Lookup85: pallet_forum::PrivilegedActor **/ PalletForumPrivilegedActor: { _enum: { @@ -588,7 +677,7 @@ export default { } }, /** - * Lookup80: pallet_forum::ExtendedPostIdObject + * Lookup86: pallet_forum::ExtendedPostIdObject **/ PalletForumExtendedPostIdObject: { categoryId: 'u64', @@ -596,7 +685,7 @@ export default { postId: 'u64' }, /** - * Lookup85: pallet_constitution::RawEvent + * Lookup91: pallet_constitution::RawEvent **/ PalletConstitutionRawEvent: { _enum: { @@ -604,7 +693,7 @@ export default { } }, /** - * Lookup86: pallet_bounty::RawEvent>, BTreeMap>> + * Lookup92: pallet_bounty::RawEvent>, BTreeMap>> **/ PalletBountyRawEvent: { _enum: { @@ -634,7 +723,7 @@ export default { } }, /** - * Lookup87: pallet_bounty::BountyParameters> + * Lookup93: pallet_bounty::BountyParameters> **/ PalletBountyBountyParametersBTreeSet: { oracle: 'PalletBountyBountyActor', @@ -646,7 +735,7 @@ export default { fundingType: 'PalletBountyFundingType' }, /** - * Lookup88: pallet_bounty::BountyActor + * Lookup94: pallet_bounty::BountyActor **/ PalletBountyBountyActor: { _enum: { @@ -655,7 +744,7 @@ export default { } }, /** - * Lookup89: pallet_bounty::AssuranceContractType> + * Lookup95: pallet_bounty::AssuranceContractType> **/ PalletBountyAssuranceContractTypeBTreeSet: { _enum: { @@ -664,7 +753,7 @@ export default { } }, /** - * Lookup90: pallet_bounty::FundingType + * Lookup96: pallet_bounty::FundingType **/ PalletBountyFundingType: { _enum: { @@ -678,7 +767,7 @@ export default { } }, /** - * Lookup92: pallet_bounty::OracleWorkEntryJudgment + * Lookup98: pallet_bounty::OracleWorkEntryJudgment **/ PalletBountyOracleWorkEntryJudgment: { _enum: { @@ -692,9 +781,9 @@ export default { } }, /** - * Lookup95: pallet_utility::RawEvent + * Lookup101: pallet_joystream_utility::RawEvent **/ - PalletUtilityRawEvent: { + PalletJoystreamUtilityRawEvent: { _enum: { Signaled: 'Bytes', RuntimeUpgraded: 'Bytes', @@ -703,19 +792,19 @@ export default { } }, /** - * Lookup96: pallet_common::working_group::iterable_enums::WorkingGroup + * Lookup102: pallet_common::working_group::iterable_enums::WorkingGroup **/ PalletCommonWorkingGroupIterableEnumsWorkingGroup: { _enum: ['Forum', 'Storage', 'Content', 'OperationsAlpha', 'App', 'Distribution', 'OperationsBeta', 'OperationsGamma', 'Membership'] }, /** - * Lookup97: pallet_common::BalanceKind + * Lookup103: pallet_common::BalanceKind **/ PalletCommonBalanceKind: { _enum: ['Positive', 'Negative'] }, /** - * Lookup98: pallet_content::RawEvent, MemberId, CuratorGroupId, CuratorId, VideoId, ChannelId, pallet_content::types::ChannelRecord, frame_support::storage::bounded_btree_map::BoundedBTreeMap, S>, frame_support::storage::bounded_btree_set::BoundedBTreeSet, pallet_common::bloat_bond::RepayableBloatBond>, DataObjectId, pallet_content::nft::types::EnglishAuctionParamsRecord, pallet_content::nft::types::OpenAuctionParamsRecord, OpenAuctionId, pallet_content::nft::types::NftIssuanceParametersRecord, pallet_content::nft::types::OpenAuctionParamsRecord, MemberId, Balance>>, Balance, pallet_content::types::ChannelCreationParametersRecord, MemberId, StorageBucketId, pallet_storage::DistributionBucketIdRecord, Balance>, pallet_content::types::ChannelUpdateParametersRecord, DataObjectId, MemberId, Balance>, pallet_content::types::VideoCreationParametersRecord, pallet_content::nft::types::NftIssuanceParametersRecord, pallet_content::nft::types::OpenAuctionParamsRecord, MemberId, Balance>>, Balance>, pallet_content::types::VideoUpdateParametersRecord, DataObjectId, pallet_content::nft::types::NftIssuanceParametersRecord, pallet_content::nft::types::OpenAuctionParamsRecord, MemberId, Balance>>, Balance>, ChannelPrivilegeLevel, BTreeMap>, pallet_content::types::TransferCommitmentParameters>, Balance, TransferId>, pallet_content::types::PendingTransfer, S>>, sp_core::crypto::AccountId32, pallet_content::types::UpdateChannelPayoutsParametersRecord, Balance, primitive_types::H256>, TokenId, pallet_content::types::ChannelFundsDestination> + * Lookup104: pallet_content::RawEvent, MemberId, CuratorGroupId, CuratorId, VideoId, ChannelId, pallet_content::types::ChannelRecord, bounded_collections::bounded_btree_map::BoundedBTreeMap, S>, bounded_collections::bounded_btree_set::BoundedBTreeSet, pallet_common::bloat_bond::RepayableBloatBond>, DataObjectId, pallet_content::nft::types::EnglishAuctionParamsRecord, pallet_content::nft::types::OpenAuctionParamsRecord, OpenAuctionId, pallet_content::nft::types::NftIssuanceParametersRecord, pallet_content::nft::types::OpenAuctionParamsRecord, MemberId, Balance>>, Balance, pallet_content::types::ChannelCreationParametersRecord, MemberId, StorageBucketId, pallet_storage::DistributionBucketIdRecord, Balance>, pallet_content::types::ChannelUpdateParametersRecord, DataObjectId, MemberId, Balance>, pallet_content::types::VideoCreationParametersRecord, pallet_content::nft::types::NftIssuanceParametersRecord, pallet_content::nft::types::OpenAuctionParamsRecord, MemberId, Balance>>, Balance>, pallet_content::types::VideoUpdateParametersRecord, DataObjectId, pallet_content::nft::types::NftIssuanceParametersRecord, pallet_content::nft::types::OpenAuctionParamsRecord, MemberId, Balance>>, Balance>, ChannelPrivilegeLevel, BTreeMap>, pallet_content::types::TransferCommitmentParameters>, Balance, TransferId>, pallet_content::types::PendingTransfer, S>>, sp_core::crypto::AccountId32, pallet_content::types::UpdateChannelPayoutsParametersRecord, Balance, primitive_types::H256>, TokenId, pallet_content::types::ChannelFundsDestination> **/ PalletContentRawEvent: { _enum: { @@ -731,7 +820,6 @@ export default { VideoStateBloatBondValueUpdated: 'u128', ChannelAssetsRemoved: '(PalletContentPermissionsContentActor,u64,BTreeSet,PalletContentChannelRecord)', ChannelDeleted: '(PalletContentPermissionsContentActor,u64)', - ChannelDeletedByModerator: '(PalletContentPermissionsContentActor,u64,Bytes)', ChannelVisibilitySetByModerator: '(PalletContentPermissionsContentActor,u64,bool,Bytes)', ChannelPausedFeaturesUpdatedByModerator: '(PalletContentPermissionsContentActor,u64,BTreeSet,Bytes)', ChannelAssetsDeletedByModerator: '(PalletContentPermissionsContentActor,u64,BTreeSet,Bytes)', @@ -740,7 +828,6 @@ export default { VideoCreated: '(PalletContentPermissionsContentActor,u64,u64,PalletContentVideoCreationParametersRecord,BTreeSet)', VideoUpdated: '(PalletContentPermissionsContentActor,u64,PalletContentVideoUpdateParametersRecord,BTreeSet)', VideoDeleted: '(PalletContentPermissionsContentActor,u64)', - VideoDeletedByModerator: '(PalletContentPermissionsContentActor,u64,Bytes)', VideoVisibilitySetByModerator: '(PalletContentPermissionsContentActor,u64,bool,Bytes)', VideoAssetsDeletedByModerator: '(PalletContentPermissionsContentActor,u64,BTreeSet,bool,Bytes)', ChannelPayoutsUpdated: '(PalletContentUpdateChannelPayoutsParametersRecord,Option,AccountId32)', @@ -772,11 +859,12 @@ export default { GlobalNftLimitUpdated: '(PalletContentNftLimitPeriod,u64)', ChannelNftLimitUpdated: '(PalletContentPermissionsContentActor,PalletContentNftLimitPeriod,u64,u64)', ToggledNftLimits: 'bool', - CreatorTokenIssued: '(PalletContentPermissionsContentActor,u64,u64)' + CreatorTokenIssued: '(PalletContentPermissionsContentActor,u64,u64)', + CreatorTokenIssuerRemarked: '(u64,u64,Bytes)' } }, /** - * Lookup99: pallet_content::permissions::ContentActor + * Lookup105: pallet_content::permissions::ContentActor **/ PalletContentPermissionsContentActor: { _enum: { @@ -786,7 +874,7 @@ export default { } }, /** - * Lookup100: pallet_content::types::ChannelRecord, frame_support::storage::bounded_btree_map::BoundedBTreeMap, S>, frame_support::storage::bounded_btree_set::BoundedBTreeSet, pallet_common::bloat_bond::RepayableBloatBond> + * Lookup106: pallet_content::types::ChannelRecord, bounded_collections::bounded_btree_map::BoundedBTreeMap, S>, bounded_collections::bounded_btree_set::BoundedBTreeSet, pallet_common::bloat_bond::RepayableBloatBond> **/ PalletContentChannelRecord: { owner: 'PalletContentChannelOwner', @@ -805,26 +893,26 @@ export default { channelStateBloatBond: 'PalletCommonBloatBondRepayableBloatBond' }, /** - * Lookup104: pallet_content::types::iterable_enums::ChannelActionPermission + * Lookup110: pallet_content::types::iterable_enums::ChannelActionPermission **/ PalletContentIterableEnumsChannelActionPermission: { - _enum: ['UpdateChannelMetadata', 'ManageNonVideoChannelAssets', 'ManageChannelCollaborators', 'UpdateVideoMetadata', 'AddVideo', 'ManageVideoAssets', 'DeleteChannel', 'DeleteVideo', 'ManageVideoNfts', 'AgentRemark', 'TransferChannel', 'ClaimChannelReward', 'WithdrawFromChannelBalance', 'IssueCreatorToken', 'ClaimCreatorTokenPatronage', 'InitAndManageCreatorTokenSale', 'CreatorTokenIssuerTransfer', 'MakeCreatorTokenPermissionless', 'ReduceCreatorTokenPatronageRate', 'ManageRevenueSplits', 'DeissueCreatorToken'] + _enum: ['UpdateChannelMetadata', 'ManageNonVideoChannelAssets', 'ManageChannelCollaborators', 'UpdateVideoMetadata', 'AddVideo', 'ManageVideoAssets', 'DeleteChannel', 'DeleteVideo', 'ManageVideoNfts', 'AgentRemark', 'TransferChannel', 'ClaimChannelReward', 'WithdrawFromChannelBalance', 'IssueCreatorToken', 'ClaimCreatorTokenPatronage', 'InitAndManageCreatorTokenSale', 'CreatorTokenIssuerTransfer', 'MakeCreatorTokenPermissionless', 'ReduceCreatorTokenPatronageRate', 'ManageRevenueSplits', 'DeissueCreatorToken', 'AmmControl'] }, /** - * Lookup111: pallet_content::permissions::curator_group::iterable_enums::PausableChannelFeature + * Lookup117: pallet_content::permissions::curator_group::iterable_enums::PausableChannelFeature **/ PalletContentPermissionsCuratorGroupIterableEnumsPausableChannelFeature: { _enum: ['ChannelFundsTransfer', 'CreatorCashout', 'VideoNftIssuance', 'VideoCreation', 'VideoUpdate', 'ChannelUpdate', 'CreatorTokenIssuance'] }, /** - * Lookup114: pallet_common::bloat_bond::RepayableBloatBond + * Lookup120: pallet_common::bloat_bond::RepayableBloatBond **/ PalletCommonBloatBondRepayableBloatBond: { repaymentRestrictedTo: 'Option', amount: 'u128' }, /** - * Lookup115: pallet_content::types::ChannelOwner + * Lookup121: pallet_content::types::ChannelOwner **/ PalletContentChannelOwner: { _enum: { @@ -833,7 +921,7 @@ export default { } }, /** - * Lookup116: pallet_content::types::ChannelTransferStatus, S>> + * Lookup122: pallet_content::types::ChannelTransferStatus, S>> **/ PalletContentChannelTransferStatus: { _enum: { @@ -842,14 +930,14 @@ export default { } }, /** - * Lookup117: pallet_content::types::PendingTransfer, S>> + * Lookup123: pallet_content::types::PendingTransfer, S>> **/ PalletContentPendingTransfer: { newOwner: 'PalletContentChannelOwner', transferParams: 'PalletContentTransferCommitmentParametersBoundedBTreeMap' }, /** - * Lookup118: pallet_content::types::TransferCommitmentParameters, S>, Balance, TransferId> + * Lookup124: pallet_content::types::TransferCommitmentParameters, S>, Balance, TransferId> **/ PalletContentTransferCommitmentParametersBoundedBTreeMap: { newCollaborators: 'BTreeMap>', @@ -857,21 +945,21 @@ export default { transferId: 'u64' }, /** - * Lookup119: pallet_content::types::LimitPerPeriod + * Lookup125: pallet_content::types::LimitPerPeriod **/ PalletContentLimitPerPeriod: { limit: 'u64', blockNumberPeriod: 'u32' }, /** - * Lookup120: pallet_content::types::NftCounter + * Lookup126: pallet_content::types::NftCounter **/ PalletContentNftCounter: { counter: 'u64', lastUpdated: 'u32' }, /** - * Lookup121: pallet_content::nft::types::EnglishAuctionParamsRecord + * Lookup127: pallet_content::nft::types::EnglishAuctionParamsRecord **/ PalletContentNftTypesEnglishAuctionParamsRecord: { startingPrice: 'u128', @@ -883,7 +971,7 @@ export default { minBidStep: 'u128' }, /** - * Lookup123: pallet_content::nft::types::OpenAuctionParamsRecord + * Lookup129: pallet_content::nft::types::OpenAuctionParamsRecord **/ PalletContentNftTypesOpenAuctionParamsRecord: { startingPrice: 'u128', @@ -893,7 +981,7 @@ export default { bidLockDuration: 'u32' }, /** - * Lookup124: pallet_content::nft::types::NftIssuanceParametersRecord, pallet_content::nft::types::OpenAuctionParamsRecord, MemberId, Balance>> + * Lookup130: pallet_content::nft::types::NftIssuanceParametersRecord, pallet_content::nft::types::OpenAuctionParamsRecord, MemberId, Balance>> **/ PalletContentNftTypesNftIssuanceParametersRecord: { royalty: 'Option', @@ -902,7 +990,7 @@ export default { initTransactionalStatus: 'PalletContentNftTypesInitTransactionalStatusRecord' }, /** - * Lookup125: pallet_content::nft::types::InitTransactionalStatusRecord, pallet_content::nft::types::OpenAuctionParamsRecord, MemberId, Balance> + * Lookup131: pallet_content::nft::types::InitTransactionalStatusRecord, pallet_content::nft::types::OpenAuctionParamsRecord, MemberId, Balance> **/ PalletContentNftTypesInitTransactionalStatusRecord: { _enum: { @@ -914,7 +1002,7 @@ export default { } }, /** - * Lookup127: pallet_content::types::ChannelCreationParametersRecord, MemberId, StorageBucketId, pallet_storage::DistributionBucketIdRecord, Balance> + * Lookup133: pallet_content::types::ChannelCreationParametersRecord, MemberId, StorageBucketId, pallet_storage::DistributionBucketIdRecord, Balance> **/ PalletContentChannelCreationParametersRecord: { assets: 'Option', @@ -926,14 +1014,14 @@ export default { expectedDataObjectStateBloatBond: 'u128' }, /** - * Lookup128: pallet_content::types::StorageAssetsRecord + * Lookup134: pallet_content::types::StorageAssetsRecord **/ PalletContentStorageAssetsRecord: { objectCreationList: 'Vec', expectedDataSizeFee: 'u128' }, /** - * Lookup130: pallet_storage::DataObjectCreationParameters + * Lookup136: pallet_storage::DataObjectCreationParameters **/ PalletStorageDataObjectCreationParameters: { _alias: { @@ -943,14 +1031,14 @@ export default { ipfsContentId: 'Bytes' }, /** - * Lookup131: pallet_storage::DistributionBucketIdRecord + * Lookup137: pallet_storage::DistributionBucketIdRecord **/ PalletStorageDistributionBucketIdRecord: { distributionBucketFamilyId: 'u64', distributionBucketIndex: 'u64' }, /** - * Lookup138: pallet_content::types::ChannelUpdateParametersRecord, DataObjectId, MemberId, Balance> + * Lookup144: pallet_content::types::ChannelUpdateParametersRecord, DataObjectId, MemberId, Balance> **/ PalletContentChannelUpdateParametersRecord: { assetsToUpload: 'Option', @@ -961,7 +1049,7 @@ export default { storageBucketsNumWitness: 'Option' }, /** - * Lookup140: pallet_content::types::VideoCreationParametersRecord, pallet_content::nft::types::NftIssuanceParametersRecord, pallet_content::nft::types::OpenAuctionParamsRecord, MemberId, Balance>>, Balance> + * Lookup146: pallet_content::types::VideoCreationParametersRecord, pallet_content::nft::types::NftIssuanceParametersRecord, pallet_content::nft::types::OpenAuctionParamsRecord, MemberId, Balance>>, Balance> **/ PalletContentVideoCreationParametersRecord: { assets: 'Option', @@ -972,7 +1060,7 @@ export default { storageBucketsNumWitness: 'u32' }, /** - * Lookup142: pallet_content::types::VideoUpdateParametersRecord, DataObjectId, pallet_content::nft::types::NftIssuanceParametersRecord, pallet_content::nft::types::OpenAuctionParamsRecord, MemberId, Balance>>, Balance> + * Lookup148: pallet_content::types::VideoUpdateParametersRecord, DataObjectId, pallet_content::nft::types::NftIssuanceParametersRecord, pallet_content::nft::types::OpenAuctionParamsRecord, MemberId, Balance>>, Balance> **/ PalletContentVideoUpdateParametersRecord: { assetsToUpload: 'Option', @@ -983,22 +1071,20 @@ export default { storageBucketsNumWitness: 'Option' }, /** - * Lookup145: pallet_content::permissions::curator_group::iterable_enums::ContentModerationAction + * Lookup151: pallet_content::permissions::curator_group::iterable_enums::ContentModerationAction **/ PalletContentPermissionsCuratorGroupIterableEnumsContentModerationAction: { _enum: { HideVideo: 'Null', HideChannel: 'Null', ChangeChannelFeatureStatus: 'PalletContentPermissionsCuratorGroupIterableEnumsPausableChannelFeature', - DeleteVideo: 'Null', - DeleteChannel: 'Null', DeleteVideoAssets: 'bool', DeleteNonVideoChannelAssets: 'Null', UpdateChannelNftLimits: 'Null' } }, /** - * Lookup149: pallet_content::types::TransferCommitmentParameters>, Balance, TransferId> + * Lookup155: pallet_content::types::TransferCommitmentParameters>, Balance, TransferId> **/ PalletContentTransferCommitmentParametersBTreeMap: { newCollaborators: 'BTreeMap>', @@ -1006,7 +1092,7 @@ export default { transferId: 'u64' }, /** - * Lookup150: pallet_content::types::UpdateChannelPayoutsParametersRecord, Balance, primitive_types::H256> + * Lookup156: pallet_content::types::UpdateChannelPayoutsParametersRecord, Balance, primitive_types::H256> **/ PalletContentUpdateChannelPayoutsParametersRecord: { commitment: 'Option', @@ -1016,7 +1102,7 @@ export default { channelCashoutsEnabled: 'Option' }, /** - * Lookup151: pallet_content::types::ChannelPayoutsPayloadParametersRecord + * Lookup157: pallet_content::types::ChannelPayoutsPayloadParametersRecord **/ PalletContentChannelPayoutsPayloadParametersRecord: { objectCreationParams: 'PalletStorageDataObjectCreationParameters', @@ -1024,7 +1110,7 @@ export default { expectedDataObjectStateBloatBond: 'u128' }, /** - * Lookup155: pallet_content::types::ChannelFundsDestination + * Lookup161: pallet_content::types::ChannelFundsDestination **/ PalletContentChannelFundsDestination: { _enum: { @@ -1033,13 +1119,13 @@ export default { } }, /** - * Lookup156: pallet_content::types::NftLimitPeriod + * Lookup162: pallet_content::types::NftLimitPeriod **/ PalletContentNftLimitPeriod: { _enum: ['Daily', 'Weekly'] }, /** - * Lookup157: pallet_storage::RawEvent, sp_core::crypto::AccountId32, Balance>, pallet_storage::BagIdType, pallet_storage::DynamicBagIdType, sp_core::crypto::AccountId32, Balance, DistributionBucketFamilyId, pallet_storage::DistributionBucketIdRecord, DistributionBucketIndex, pallet_storage::DynBagCreationParametersRecord, sp_core::crypto::AccountId32, Balance, StorageBucketId, pallet_storage::DistributionBucketIdRecord>> + * Lookup163: pallet_storage::RawEvent, sp_core::crypto::AccountId32, Balance>, pallet_storage::BagIdType, pallet_storage::DynamicBagIdType, sp_core::crypto::AccountId32, Balance, DistributionBucketFamilyId, pallet_storage::DistributionBucketIdRecord, DistributionBucketIndex, pallet_storage::DynBagCreationParametersRecord, sp_core::crypto::AccountId32, Balance, StorageBucketId, pallet_storage::DistributionBucketIdRecord>> **/ PalletStorageRawEvent: { _enum: { @@ -1088,7 +1174,7 @@ export default { } }, /** - * Lookup158: pallet_storage::UploadParametersRecord, sp_core::crypto::AccountId32, Balance> + * Lookup164: pallet_storage::UploadParametersRecord, sp_core::crypto::AccountId32, Balance> **/ PalletStorageUploadParametersRecord: { bagId: 'PalletStorageBagIdType', @@ -1098,7 +1184,7 @@ export default { expectedDataObjectStateBloatBond: 'u128' }, /** - * Lookup159: pallet_storage::BagIdType + * Lookup165: pallet_storage::BagIdType **/ PalletStorageBagIdType: { _enum: { @@ -1107,7 +1193,7 @@ export default { } }, /** - * Lookup160: pallet_storage::StaticBagId + * Lookup166: pallet_storage::StaticBagId **/ PalletStorageStaticBagId: { _enum: { @@ -1116,7 +1202,7 @@ export default { } }, /** - * Lookup161: pallet_storage::DynamicBagIdType + * Lookup167: pallet_storage::DynamicBagIdType **/ PalletStorageDynamicBagIdType: { _enum: { @@ -1125,7 +1211,7 @@ export default { } }, /** - * Lookup162: pallet_storage::DynBagCreationParametersRecord, sp_core::crypto::AccountId32, Balance, StorageBucketId, pallet_storage::DistributionBucketIdRecord> + * Lookup168: pallet_storage::DynBagCreationParametersRecord, sp_core::crypto::AccountId32, Balance, StorageBucketId, pallet_storage::DistributionBucketIdRecord> **/ PalletStorageDynBagCreationParametersRecord: { bagId: 'PalletStorageDynamicBagIdType', @@ -1137,7 +1223,7 @@ export default { distributionBuckets: 'BTreeSet' }, /** - * Lookup165: pallet_storage::Voucher + * Lookup171: pallet_storage::Voucher **/ PalletStorageVoucher: { sizeLimit: 'u64', @@ -1146,19 +1232,19 @@ export default { objectsUsed: 'u64' }, /** - * Lookup166: pallet_storage::DynamicBagType + * Lookup172: pallet_storage::DynamicBagType **/ PalletStorageDynamicBagType: { _enum: ['Member', 'Channel'] }, /** - * Lookup170: pallet_project_token::events::RawEvent, pallet_project_token::types::TokenIssuanceParameters>, pallet_project_token::types::TransferPolicyParams>>, MemberId>, pallet_project_token::types::Transfers, pallet_project_token::types::ValidatedPayment>>>, pallet_project_token::types::TokenSale, MemberId, sp_core::crypto::AccountId32>> + * Lookup176: pallet_project_token::events::RawEvent, pallet_project_token::types::TokenIssuanceParameters>, pallet_project_token::types::TransferPolicyParams>>, MemberId>, pallet_project_token::types::Transfers, pallet_project_token::types::ValidatedPayment>>>, pallet_project_token::types::TokenSale, MemberId, sp_core::crypto::AccountId32>, pallet_project_token::types::AmmCurve> **/ PalletProjectTokenEventsRawEvent: { _enum: { - TokenAmountTransferred: '(u64,u64,BTreeMap,Bytes)', - TokenAmountTransferredByIssuer: '(u64,u64,BTreeMap,Bytes)', - PatronageRateDecreasedTo: '(u64,Perquintill)', + TokenAmountTransferred: '(u64,u64,PalletProjectTokenTransfers,Bytes)', + TokenAmountTransferredByIssuer: '(u64,u64,PalletProjectTokenTransfers,Bytes)', + PatronageRateDecreasedTo: '(u64,Permill)', PatronageCreditClaimed: '(u64,u128,u64)', RevenueSplitIssued: '(u64,u32,u32,u128)', RevenueSplitFinalized: '(u64,AccountId32,u128)', @@ -1173,11 +1259,16 @@ export default { TokensPurchasedOnSale: '(u64,u32,u128,u64)', TokenSaleFinalized: '(u64,u32,u128,u128)', TransferPolicyChangedToPermissionless: 'u64', - TokensBurned: '(u64,u64,u128)' + TokensBurned: '(u64,u64,u128)', + AmmActivated: '(u64,u64,PalletProjectTokenAmmCurve)', + TokensBoughtOnAmm: '(u64,u64,u128,u128)', + TokensSoldOnAmm: '(u64,u64,u128,u128)', + AmmDeactivated: '(u64,u64,u128)', + FrozenStatusUpdated: 'bool' } }, /** - * Lookup171: pallet_project_token::types::TransferPolicy + * Lookup177: pallet_project_token::types::TransferPolicy **/ PalletProjectTokenTransferPolicy: { _enum: { @@ -1186,24 +1277,24 @@ export default { } }, /** - * Lookup172: pallet_project_token::types::TokenIssuanceParameters>, pallet_project_token::types::TransferPolicyParams>>, MemberId> + * Lookup178: pallet_project_token::types::TokenIssuanceParameters>, pallet_project_token::types::TransferPolicyParams>>, MemberId> **/ PalletProjectTokenTokenIssuanceParameters: { initialAllocation: 'BTreeMap', - symbol: 'H256', transferPolicy: 'PalletProjectTokenTransferPolicyParams', patronageRate: 'Permill', - revenueSplitRate: 'Permill' + revenueSplitRate: 'Permill', + metadata: 'Bytes' }, /** - * Lookup173: pallet_project_token::types::TokenAllocation> + * Lookup179: pallet_project_token::types::TokenAllocation> **/ PalletProjectTokenTokenAllocation: { amount: 'u128', vestingScheduleParams: 'Option' }, /** - * Lookup174: pallet_project_token::types::VestingScheduleParams + * Lookup180: pallet_project_token::types::VestingScheduleParams **/ PalletProjectTokenVestingScheduleParams: { linearVestingDuration: 'u32', @@ -1211,7 +1302,7 @@ export default { cliffAmountPercentage: 'Permill' }, /** - * Lookup177: pallet_project_token::types::TransferPolicyParams>> + * Lookup183: pallet_project_token::types::TransferPolicyParams>> **/ PalletProjectTokenTransferPolicyParams: { _enum: { @@ -1220,14 +1311,14 @@ export default { } }, /** - * Lookup178: pallet_project_token::types::WhitelistParams> + * Lookup184: pallet_project_token::types::WhitelistParams> **/ PalletProjectTokenWhitelistParams: { commitment: 'H256', payload: 'Option' }, /** - * Lookup179: pallet_project_token::types::SingleDataObjectUploadParams + * Lookup185: pallet_project_token::types::SingleDataObjectUploadParams **/ PalletProjectTokenSingleDataObjectUploadParams: { objectCreationParams: 'PalletStorageDataObjectCreationParameters', @@ -1235,7 +1326,11 @@ export default { expectedDataObjectStateBloatBond: 'u128' }, /** - * Lookup186: pallet_project_token::types::Validated + * Lookup191: pallet_project_token::types::Transfers, pallet_project_token::types::ValidatedPayment>>> + **/ + PalletProjectTokenTransfers: 'BTreeMap', + /** + * Lookup192: pallet_project_token::types::Validated **/ PalletProjectTokenValidated: { _enum: { @@ -1244,21 +1339,21 @@ export default { } }, /** - * Lookup187: pallet_project_token::types::ValidatedPayment>> + * Lookup193: pallet_project_token::types::ValidatedPayment>> **/ PalletProjectTokenValidatedPayment: { payment: 'PalletProjectTokenPaymentWithVesting', vestingCleanupCandidate: 'Option' }, /** - * Lookup188: pallet_project_token::types::PaymentWithVesting> + * Lookup194: pallet_project_token::types::PaymentWithVesting> **/ PalletProjectTokenPaymentWithVesting: { amount: 'u128', vestingSchedule: 'Option' }, /** - * Lookup190: pallet_project_token::types::VestingSource + * Lookup196: pallet_project_token::types::VestingSource **/ PalletProjectTokenVestingSource: { _enum: { @@ -1268,7 +1363,7 @@ export default { } }, /** - * Lookup194: pallet_project_token::types::TokenSale, MemberId, sp_core::crypto::AccountId32> + * Lookup200: pallet_project_token::types::TokenSale, MemberId, sp_core::crypto::AccountId32> **/ PalletProjectTokenTokenSale: { unitPrice: 'u128', @@ -1283,7 +1378,15 @@ export default { autoFinalize: 'bool' }, /** - * Lookup196: pallet_proposals_engine::RawEvent + * Lookup201: pallet_project_token::types::AmmCurve + **/ + PalletProjectTokenAmmCurve: { + slope: 'u128', + intercept: 'u128', + providedSupply: 'u128' + }, + /** + * Lookup202: pallet_proposals_engine::RawEvent **/ PalletProposalsEngineRawEvent: { _enum: { @@ -1296,7 +1399,7 @@ export default { } }, /** - * Lookup197: pallet_proposals_engine::types::proposal_statuses::ProposalStatus + * Lookup203: pallet_proposals_engine::types::proposal_statuses::ProposalStatus **/ PalletProposalsEngineProposalStatusesProposalStatus: { _enum: { @@ -1306,7 +1409,7 @@ export default { } }, /** - * Lookup198: pallet_proposals_engine::types::proposal_statuses::ProposalDecision + * Lookup204: pallet_proposals_engine::types::proposal_statuses::ProposalDecision **/ PalletProposalsEngineProposalStatusesProposalDecision: { _enum: { @@ -1320,13 +1423,13 @@ export default { } }, /** - * Lookup199: pallet_proposals_engine::types::proposal_statuses::ApprovedProposalDecision + * Lookup205: pallet_proposals_engine::types::proposal_statuses::ApprovedProposalDecision **/ PalletProposalsEngineProposalStatusesApprovedProposalDecision: { _enum: ['PendingExecution', 'PendingConstitutionality'] }, /** - * Lookup200: pallet_proposals_engine::types::proposal_statuses::ExecutionStatus + * Lookup206: pallet_proposals_engine::types::proposal_statuses::ExecutionStatus **/ PalletProposalsEngineProposalStatusesExecutionStatus: { _enum: { @@ -1337,13 +1440,13 @@ export default { } }, /** - * Lookup201: pallet_proposals_engine::types::VoteKind + * Lookup207: pallet_proposals_engine::types::VoteKind **/ PalletProposalsEngineVoteKind: { _enum: ['Approve', 'Reject', 'Slash', 'Abstain'] }, /** - * Lookup202: pallet_proposals_discussion::RawEvent + * Lookup208: pallet_proposals_discussion::RawEvent **/ PalletProposalsDiscussionRawEvent: { _enum: { @@ -1355,7 +1458,7 @@ export default { } }, /** - * Lookup203: pallet_proposals_discussion::types::ThreadMode> + * Lookup209: pallet_proposals_discussion::types::ThreadMode> **/ PalletProposalsDiscussionThreadModeBTreeSet: { _enum: { @@ -1364,7 +1467,7 @@ export default { } }, /** - * Lookup204: pallet_proposals_codex::RawEvent, pallet_proposals_codex::types::ProposalDetails, Balance, primitive_types::H256>>, ProposalId, ThreadId> + * Lookup210: pallet_proposals_codex::RawEvent, pallet_proposals_codex::types::ProposalDetails, Balance, primitive_types::H256>>, ProposalId, ThreadId> **/ PalletProposalsCodexRawEvent: { _enum: { @@ -1372,7 +1475,7 @@ export default { } }, /** - * Lookup205: pallet_proposals_codex::types::GeneralProposalParams + * Lookup211: pallet_proposals_codex::types::GeneralProposalParams **/ PalletProposalsCodexGeneralProposalParams: { memberId: 'u64', @@ -1382,7 +1485,7 @@ export default { exactExecutionBlock: 'Option' }, /** - * Lookup206: pallet_proposals_codex::types::ProposalDetails, Balance, primitive_types::H256>> + * Lookup212: pallet_proposals_codex::types::ProposalDetails, Balance, primitive_types::H256>> **/ PalletProposalsCodexProposalDetails: { _enum: { @@ -1408,18 +1511,19 @@ export default { SetReferralCut: 'u8', VetoProposal: 'u32', UpdateGlobalNftLimit: '(PalletContentNftLimitPeriod,u64)', - UpdateChannelPayouts: 'PalletContentUpdateChannelPayoutsParametersRecord' + UpdateChannelPayouts: 'PalletContentUpdateChannelPayoutsParametersRecord', + SetPalletFozenStatus: '(bool,PalletCommonFreezablePallet)' } }, /** - * Lookup208: pallet_common::FundingRequestParameters + * Lookup214: pallet_common::FundingRequestParameters **/ PalletCommonFundingRequestParameters: { account: 'AccountId32', amount: 'u128' }, /** - * Lookup209: pallet_proposals_codex::types::CreateOpeningParameters + * Lookup215: pallet_proposals_codex::types::CreateOpeningParameters **/ PalletProposalsCodexCreateOpeningParameters: { description: 'Bytes', @@ -1428,14 +1532,14 @@ export default { group: 'PalletCommonWorkingGroupIterableEnumsWorkingGroup' }, /** - * Lookup210: pallet_working_group::types::StakePolicy + * Lookup216: pallet_working_group::types::StakePolicy **/ PalletWorkingGroupStakePolicy: { stakeAmount: 'u128', leavingUnstakingPeriod: 'u32' }, /** - * Lookup211: pallet_proposals_codex::types::FillOpeningParameters + * Lookup217: pallet_proposals_codex::types::FillOpeningParameters **/ PalletProposalsCodexFillOpeningParameters: { openingId: 'u64', @@ -1443,7 +1547,7 @@ export default { workingGroup: 'PalletCommonWorkingGroupIterableEnumsWorkingGroup' }, /** - * Lookup212: pallet_proposals_codex::types::TerminateRoleParameters + * Lookup218: pallet_proposals_codex::types::TerminateRoleParameters **/ PalletProposalsCodexTerminateRoleParameters: { workerId: 'u64', @@ -1451,7 +1555,13 @@ export default { group: 'PalletCommonWorkingGroupIterableEnumsWorkingGroup' }, /** - * Lookup213: pallet_working_group::RawEvent, WorkerId, sp_core::crypto::AccountId32, Balance, pallet_working_group::types::OpeningType, pallet_working_group::types::StakePolicy, pallet_working_group::types::ApplyOnOpeningParams, MemberId, primitive_types::H256, pallet_working_group::Instance1> + * Lookup219: pallet_common::FreezablePallet + **/ + PalletCommonFreezablePallet: { + _enum: ['ProjectToken'] + }, + /** + * Lookup220: pallet_working_group::RawEvent, WorkerId, sp_core::crypto::AccountId32, Balance, pallet_working_group::types::OpeningType, pallet_working_group::types::StakePolicy, pallet_working_group::types::ApplyOnOpeningParams, MemberId, primitive_types::H256, pallet_working_group::Instance1> **/ PalletWorkingGroupRawEventInstance1: { _enum: { @@ -1483,13 +1593,13 @@ export default { } }, /** - * Lookup217: pallet_working_group::types::OpeningType + * Lookup224: pallet_working_group::types::OpeningType **/ PalletWorkingGroupOpeningType: { _enum: ['Leader', 'Regular'] }, /** - * Lookup218: pallet_working_group::types::ApplyOnOpeningParams + * Lookup225: pallet_working_group::types::ApplyOnOpeningParams **/ PalletWorkingGroupApplyOnOpeningParams: { memberId: 'u64', @@ -1500,24 +1610,24 @@ export default { stakeParameters: 'PalletWorkingGroupStakeParameters' }, /** - * Lookup219: pallet_working_group::types::StakeParameters + * Lookup226: pallet_working_group::types::StakeParameters **/ PalletWorkingGroupStakeParameters: { stake: 'u128', stakingAccountId: 'AccountId32' }, /** - * Lookup220: pallet_working_group::Instance1 + * Lookup227: pallet_working_group::Instance1 **/ PalletWorkingGroupInstance1: 'Null', /** - * Lookup221: pallet_working_group::types::RewardPaymentType + * Lookup228: pallet_working_group::types::RewardPaymentType **/ PalletWorkingGroupRewardPaymentType: { _enum: ['MissedReward', 'RegularReward'] }, /** - * Lookup222: pallet_working_group::RawEvent, WorkerId, sp_core::crypto::AccountId32, Balance, pallet_working_group::types::OpeningType, pallet_working_group::types::StakePolicy, pallet_working_group::types::ApplyOnOpeningParams, MemberId, primitive_types::H256, pallet_working_group::Instance2> + * Lookup229: pallet_working_group::RawEvent, WorkerId, sp_core::crypto::AccountId32, Balance, pallet_working_group::types::OpeningType, pallet_working_group::types::StakePolicy, pallet_working_group::types::ApplyOnOpeningParams, MemberId, primitive_types::H256, pallet_working_group::Instance2> **/ PalletWorkingGroupRawEventInstance2: { _enum: { @@ -1549,11 +1659,11 @@ export default { } }, /** - * Lookup223: pallet_working_group::Instance2 + * Lookup230: pallet_working_group::Instance2 **/ PalletWorkingGroupInstance2: 'Null', /** - * Lookup224: pallet_working_group::RawEvent, WorkerId, sp_core::crypto::AccountId32, Balance, pallet_working_group::types::OpeningType, pallet_working_group::types::StakePolicy, pallet_working_group::types::ApplyOnOpeningParams, MemberId, primitive_types::H256, pallet_working_group::Instance3> + * Lookup231: pallet_working_group::RawEvent, WorkerId, sp_core::crypto::AccountId32, Balance, pallet_working_group::types::OpeningType, pallet_working_group::types::StakePolicy, pallet_working_group::types::ApplyOnOpeningParams, MemberId, primitive_types::H256, pallet_working_group::Instance3> **/ PalletWorkingGroupRawEventInstance3: { _enum: { @@ -1585,11 +1695,11 @@ export default { } }, /** - * Lookup225: pallet_working_group::Instance3 + * Lookup232: pallet_working_group::Instance3 **/ PalletWorkingGroupInstance3: 'Null', /** - * Lookup226: pallet_working_group::RawEvent, WorkerId, sp_core::crypto::AccountId32, Balance, pallet_working_group::types::OpeningType, pallet_working_group::types::StakePolicy, pallet_working_group::types::ApplyOnOpeningParams, MemberId, primitive_types::H256, pallet_working_group::Instance4> + * Lookup233: pallet_working_group::RawEvent, WorkerId, sp_core::crypto::AccountId32, Balance, pallet_working_group::types::OpeningType, pallet_working_group::types::StakePolicy, pallet_working_group::types::ApplyOnOpeningParams, MemberId, primitive_types::H256, pallet_working_group::Instance4> **/ PalletWorkingGroupRawEventInstance4: { _enum: { @@ -1621,11 +1731,11 @@ export default { } }, /** - * Lookup227: pallet_working_group::Instance4 + * Lookup234: pallet_working_group::Instance4 **/ PalletWorkingGroupInstance4: 'Null', /** - * Lookup228: pallet_working_group::RawEvent, WorkerId, sp_core::crypto::AccountId32, Balance, pallet_working_group::types::OpeningType, pallet_working_group::types::StakePolicy, pallet_working_group::types::ApplyOnOpeningParams, MemberId, primitive_types::H256, pallet_working_group::Instance5> + * Lookup235: pallet_working_group::RawEvent, WorkerId, sp_core::crypto::AccountId32, Balance, pallet_working_group::types::OpeningType, pallet_working_group::types::StakePolicy, pallet_working_group::types::ApplyOnOpeningParams, MemberId, primitive_types::H256, pallet_working_group::Instance5> **/ PalletWorkingGroupRawEventInstance5: { _enum: { @@ -1657,11 +1767,11 @@ export default { } }, /** - * Lookup229: pallet_working_group::Instance5 + * Lookup236: pallet_working_group::Instance5 **/ PalletWorkingGroupInstance5: 'Null', /** - * Lookup230: pallet_working_group::RawEvent, WorkerId, sp_core::crypto::AccountId32, Balance, pallet_working_group::types::OpeningType, pallet_working_group::types::StakePolicy, pallet_working_group::types::ApplyOnOpeningParams, MemberId, primitive_types::H256, pallet_working_group::Instance6> + * Lookup237: pallet_working_group::RawEvent, WorkerId, sp_core::crypto::AccountId32, Balance, pallet_working_group::types::OpeningType, pallet_working_group::types::StakePolicy, pallet_working_group::types::ApplyOnOpeningParams, MemberId, primitive_types::H256, pallet_working_group::Instance6> **/ PalletWorkingGroupRawEventInstance6: { _enum: { @@ -1693,11 +1803,11 @@ export default { } }, /** - * Lookup231: pallet_working_group::Instance6 + * Lookup238: pallet_working_group::Instance6 **/ PalletWorkingGroupInstance6: 'Null', /** - * Lookup232: pallet_working_group::RawEvent, WorkerId, sp_core::crypto::AccountId32, Balance, pallet_working_group::types::OpeningType, pallet_working_group::types::StakePolicy, pallet_working_group::types::ApplyOnOpeningParams, MemberId, primitive_types::H256, pallet_working_group::Instance7> + * Lookup239: pallet_working_group::RawEvent, WorkerId, sp_core::crypto::AccountId32, Balance, pallet_working_group::types::OpeningType, pallet_working_group::types::StakePolicy, pallet_working_group::types::ApplyOnOpeningParams, MemberId, primitive_types::H256, pallet_working_group::Instance7> **/ PalletWorkingGroupRawEventInstance7: { _enum: { @@ -1729,11 +1839,11 @@ export default { } }, /** - * Lookup233: pallet_working_group::Instance7 + * Lookup240: pallet_working_group::Instance7 **/ PalletWorkingGroupInstance7: 'Null', /** - * Lookup234: pallet_working_group::RawEvent, WorkerId, sp_core::crypto::AccountId32, Balance, pallet_working_group::types::OpeningType, pallet_working_group::types::StakePolicy, pallet_working_group::types::ApplyOnOpeningParams, MemberId, primitive_types::H256, pallet_working_group::Instance8> + * Lookup241: pallet_working_group::RawEvent, WorkerId, sp_core::crypto::AccountId32, Balance, pallet_working_group::types::OpeningType, pallet_working_group::types::StakePolicy, pallet_working_group::types::ApplyOnOpeningParams, MemberId, primitive_types::H256, pallet_working_group::Instance8> **/ PalletWorkingGroupRawEventInstance8: { _enum: { @@ -1765,11 +1875,11 @@ export default { } }, /** - * Lookup235: pallet_working_group::Instance8 + * Lookup242: pallet_working_group::Instance8 **/ PalletWorkingGroupInstance8: 'Null', /** - * Lookup236: pallet_working_group::RawEvent, WorkerId, sp_core::crypto::AccountId32, Balance, pallet_working_group::types::OpeningType, pallet_working_group::types::StakePolicy, pallet_working_group::types::ApplyOnOpeningParams, MemberId, primitive_types::H256, pallet_working_group::Instance9> + * Lookup243: pallet_working_group::RawEvent, WorkerId, sp_core::crypto::AccountId32, Balance, pallet_working_group::types::OpeningType, pallet_working_group::types::StakePolicy, pallet_working_group::types::ApplyOnOpeningParams, MemberId, primitive_types::H256, pallet_working_group::Instance9> **/ PalletWorkingGroupRawEventInstance9: { _enum: { @@ -1801,11 +1911,11 @@ export default { } }, /** - * Lookup237: pallet_working_group::Instance9 + * Lookup244: pallet_working_group::Instance9 **/ PalletWorkingGroupInstance9: 'Null', /** - * Lookup238: frame_system::Phase + * Lookup245: frame_system::Phase **/ FrameSystemPhase: { _enum: { @@ -1815,20 +1925,17 @@ export default { } }, /** - * Lookup242: frame_system::LastRuntimeUpgradeInfo + * Lookup249: frame_system::LastRuntimeUpgradeInfo **/ FrameSystemLastRuntimeUpgradeInfo: { specVersion: 'Compact', specName: 'Text' }, /** - * Lookup245: frame_system::pallet::Call + * Lookup252: frame_system::pallet::Call **/ FrameSystemCall: { _enum: { - fill_block: { - ratio: 'Perbill', - }, remark: { remark: 'Bytes', }, @@ -1860,53 +1967,53 @@ export default { } }, /** - * Lookup248: frame_system::limits::BlockWeights + * Lookup255: frame_system::limits::BlockWeights **/ FrameSystemLimitsBlockWeights: { - baseBlock: 'u64', - maxBlock: 'u64', - perClass: 'FrameSupportWeightsPerDispatchClassWeightsPerClass' + baseBlock: 'SpWeightsWeightV2Weight', + maxBlock: 'SpWeightsWeightV2Weight', + perClass: 'FrameSupportDispatchPerDispatchClassWeightsPerClass' }, /** - * Lookup249: frame_support::weights::PerDispatchClass + * Lookup256: frame_support::dispatch::PerDispatchClass **/ - FrameSupportWeightsPerDispatchClassWeightsPerClass: { + FrameSupportDispatchPerDispatchClassWeightsPerClass: { normal: 'FrameSystemLimitsWeightsPerClass', operational: 'FrameSystemLimitsWeightsPerClass', mandatory: 'FrameSystemLimitsWeightsPerClass' }, /** - * Lookup250: frame_system::limits::WeightsPerClass + * Lookup257: frame_system::limits::WeightsPerClass **/ FrameSystemLimitsWeightsPerClass: { - baseExtrinsic: 'u64', - maxExtrinsic: 'Option', - maxTotal: 'Option', - reserved: 'Option' + baseExtrinsic: 'SpWeightsWeightV2Weight', + maxExtrinsic: 'Option', + maxTotal: 'Option', + reserved: 'Option' }, /** - * Lookup251: frame_system::limits::BlockLength + * Lookup259: frame_system::limits::BlockLength **/ FrameSystemLimitsBlockLength: { - max: 'FrameSupportWeightsPerDispatchClassU32' + max: 'FrameSupportDispatchPerDispatchClassU32' }, /** - * Lookup252: frame_support::weights::PerDispatchClass + * Lookup260: frame_support::dispatch::PerDispatchClass **/ - FrameSupportWeightsPerDispatchClassU32: { + FrameSupportDispatchPerDispatchClassU32: { normal: 'u32', operational: 'u32', mandatory: 'u32' }, /** - * Lookup253: frame_support::weights::RuntimeDbWeight + * Lookup261: sp_weights::RuntimeDbWeight **/ - FrameSupportWeightsRuntimeDbWeight: { + SpWeightsRuntimeDbWeight: { read: 'u64', write: 'u64' }, /** - * Lookup254: sp_version::RuntimeVersion + * Lookup262: sp_version::RuntimeVersion **/ SpVersionRuntimeVersion: { specName: 'Text', @@ -1919,13 +2026,13 @@ export default { stateVersion: 'u8' }, /** - * Lookup260: frame_system::pallet::Error + * Lookup268: frame_system::pallet::Error **/ FrameSystemError: { _enum: ['InvalidSpecName', 'SpecVersionNeedsToIncrease', 'FailedToExtractRuntimeVersion', 'NonDefaultComposite', 'NonZeroRefCount', 'CallFiltered'] }, /** - * Lookup261: pallet_utility::pallet::Call + * Lookup269: pallet_utility::pallet::Call **/ PalletUtilityCall: { _enum: { @@ -1944,12 +2051,16 @@ export default { call: 'Call', }, force_batch: { - calls: 'Vec' + calls: 'Vec', + }, + with_weight: { + call: 'Call', + weight: 'SpWeightsWeightV2Weight' } } }, /** - * Lookup264: pallet_babe::pallet::Call + * Lookup272: pallet_babe::pallet::Call **/ PalletBabeCall: { _enum: { @@ -1967,7 +2078,7 @@ export default { } }, /** - * Lookup265: sp_consensus_slots::EquivocationProof, sp_consensus_babe::app::Public> + * Lookup273: sp_consensus_slots::EquivocationProof, sp_consensus_babe::app::Public> **/ SpConsensusSlotsEquivocationProof: { offender: 'SpConsensusBabeAppPublic', @@ -1976,7 +2087,7 @@ export default { secondHeader: 'SpRuntimeHeader' }, /** - * Lookup266: sp_runtime::generic::header::Header + * Lookup274: sp_runtime::generic::header::Header **/ SpRuntimeHeader: { parentHash: 'H256', @@ -1986,15 +2097,15 @@ export default { digest: 'SpRuntimeDigest' }, /** - * Lookup267: sp_runtime::traits::BlakeTwo256 + * Lookup275: sp_runtime::traits::BlakeTwo256 **/ SpRuntimeBlakeTwo256: 'Null', /** - * Lookup268: sp_consensus_babe::app::Public + * Lookup276: sp_consensus_babe::app::Public **/ SpConsensusBabeAppPublic: 'SpCoreSr25519Public', /** - * Lookup270: sp_session::MembershipProof + * Lookup278: sp_session::MembershipProof **/ SpSessionMembershipProof: { session: 'u32', @@ -2002,7 +2113,7 @@ export default { validatorCount: 'u32' }, /** - * Lookup271: sp_consensus_babe::digests::NextConfigDescriptor + * Lookup279: sp_consensus_babe::digests::NextConfigDescriptor **/ SpConsensusBabeDigestsNextConfigDescriptor: { _enum: { @@ -2014,13 +2125,13 @@ export default { } }, /** - * Lookup272: sp_consensus_babe::AllowedSlots + * Lookup280: sp_consensus_babe::AllowedSlots **/ SpConsensusBabeAllowedSlots: { _enum: ['PrimarySlots', 'PrimaryAndSecondaryPlainSlots', 'PrimaryAndSecondaryVRFSlots'] }, /** - * Lookup273: pallet_timestamp::pallet::Call + * Lookup281: pallet_timestamp::pallet::Call **/ PalletTimestampCall: { _enum: { @@ -2030,17 +2141,7 @@ export default { } }, /** - * Lookup275: pallet_authorship::pallet::Call - **/ - PalletAuthorshipCall: { - _enum: { - set_uncles: { - newUncles: 'Vec' - } - } - }, - /** - * Lookup277: pallet_balances::pallet::Call + * Lookup282: pallet_balances::pallet::Call **/ PalletBalancesCall: { _enum: { @@ -2073,7 +2174,7 @@ export default { } }, /** - * Lookup278: pallet_election_provider_multi_phase::pallet::Call + * Lookup283: pallet_election_provider_multi_phase::pallet::Call **/ PalletElectionProviderMultiPhaseCall: { _enum: { @@ -2097,7 +2198,7 @@ export default { } }, /** - * Lookup279: pallet_election_provider_multi_phase::RawSolution + * Lookup284: pallet_election_provider_multi_phase::RawSolution **/ PalletElectionProviderMultiPhaseRawSolution: { solution: 'JoystreamNodeRuntimeNposSolution16', @@ -2105,7 +2206,7 @@ export default { round: 'u32' }, /** - * Lookup280: joystream_node_runtime::NposSolution16 + * Lookup285: joystream_node_runtime::NposSolution16 **/ JoystreamNodeRuntimeNposSolution16: { votes1: 'Vec<(Compact,Compact)>', @@ -2126,29 +2227,21 @@ export default { votes16: 'Vec<(Compact,[(Compact,Compact);15],Compact)>' }, /** - * Lookup331: sp_npos_elections::ElectionScore - **/ - SpNposElectionsElectionScore: { - minimalStake: 'u128', - sumStake: 'u128', - sumStakeSquared: 'u128' - }, - /** - * Lookup332: pallet_election_provider_multi_phase::SolutionOrSnapshotSize + * Lookup336: pallet_election_provider_multi_phase::SolutionOrSnapshotSize **/ PalletElectionProviderMultiPhaseSolutionOrSnapshotSize: { voters: 'Compact', targets: 'Compact' }, /** - * Lookup336: sp_npos_elections::Support + * Lookup340: sp_npos_elections::Support **/ SpNposElectionsSupport: { total: 'u128', voters: 'Vec<(AccountId32,u128)>' }, /** - * Lookup338: pallet_staking::pallet::pallet::Call + * Lookup342: pallet_staking::pallet::pallet::Call **/ PalletStakingPalletCall: { _enum: { @@ -2212,10 +2305,6 @@ export default { rebond: { value: 'Compact', }, - set_history_depth: { - newHistoryDepth: 'Compact', - eraItemsDeleted: 'Compact', - }, reap_stash: { stash: 'AccountId32', numSlashingSpans: 'u32', @@ -2235,12 +2324,18 @@ export default { controller: 'AccountId32', }, force_apply_min_commission: { - validatorStash: 'AccountId32' + validatorStash: 'AccountId32', + }, + set_min_commission: { + _alias: { + new_: 'new', + }, + new_: 'Perbill' } } }, /** - * Lookup339: pallet_staking::RewardDestination + * Lookup343: pallet_staking::RewardDestination **/ PalletStakingRewardDestination: { _enum: { @@ -2252,7 +2347,7 @@ export default { } }, /** - * Lookup343: pallet_staking::pallet::pallet::ConfigOp + * Lookup347: pallet_staking::pallet::pallet::ConfigOp **/ PalletStakingPalletConfigOpU128: { _enum: { @@ -2262,7 +2357,7 @@ export default { } }, /** - * Lookup344: pallet_staking::pallet::pallet::ConfigOp + * Lookup348: pallet_staking::pallet::pallet::ConfigOp **/ PalletStakingPalletConfigOpU32: { _enum: { @@ -2272,7 +2367,7 @@ export default { } }, /** - * Lookup345: pallet_staking::pallet::pallet::ConfigOp + * Lookup349: pallet_staking::pallet::pallet::ConfigOp **/ PalletStakingPalletConfigOpPercent: { _enum: { @@ -2282,7 +2377,7 @@ export default { } }, /** - * Lookup346: pallet_staking::pallet::pallet::ConfigOp + * Lookup350: pallet_staking::pallet::pallet::ConfigOp **/ PalletStakingPalletConfigOpPerbill: { _enum: { @@ -2292,7 +2387,7 @@ export default { } }, /** - * Lookup347: pallet_session::pallet::Call + * Lookup351: pallet_session::pallet::Call **/ PalletSessionCall: { _enum: { @@ -2307,29 +2402,29 @@ export default { } }, /** - * Lookup348: joystream_node_runtime::SessionKeys + * Lookup352: joystream_node_runtime::SessionKeys **/ JoystreamNodeRuntimeSessionKeys: { - grandpa: 'SpFinalityGrandpaAppPublic', + grandpa: 'SpConsensusGrandpaAppPublic', babe: 'SpConsensusBabeAppPublic', imOnline: 'PalletImOnlineSr25519AppSr25519Public', authorityDiscovery: 'SpAuthorityDiscoveryAppPublic' }, /** - * Lookup349: sp_authority_discovery::app::Public + * Lookup353: sp_authority_discovery::app::Public **/ SpAuthorityDiscoveryAppPublic: 'SpCoreSr25519Public', /** - * Lookup350: pallet_grandpa::pallet::Call + * Lookup354: pallet_grandpa::pallet::Call **/ PalletGrandpaCall: { _enum: { report_equivocation: { - equivocationProof: 'SpFinalityGrandpaEquivocationProof', + equivocationProof: 'SpConsensusGrandpaEquivocationProof', keyOwnerProof: 'SpSessionMembershipProof', }, report_equivocation_unsigned: { - equivocationProof: 'SpFinalityGrandpaEquivocationProof', + equivocationProof: 'SpConsensusGrandpaEquivocationProof', keyOwnerProof: 'SpSessionMembershipProof', }, note_stalled: { @@ -2339,63 +2434,63 @@ export default { } }, /** - * Lookup351: sp_finality_grandpa::EquivocationProof + * Lookup355: sp_consensus_grandpa::EquivocationProof **/ - SpFinalityGrandpaEquivocationProof: { + SpConsensusGrandpaEquivocationProof: { setId: 'u64', - equivocation: 'SpFinalityGrandpaEquivocation' + equivocation: 'SpConsensusGrandpaEquivocation' }, /** - * Lookup352: sp_finality_grandpa::Equivocation + * Lookup356: sp_consensus_grandpa::Equivocation **/ - SpFinalityGrandpaEquivocation: { + SpConsensusGrandpaEquivocation: { _enum: { Prevote: 'FinalityGrandpaEquivocationPrevote', Precommit: 'FinalityGrandpaEquivocationPrecommit' } }, /** - * Lookup353: finality_grandpa::Equivocation, sp_finality_grandpa::app::Signature> + * Lookup357: finality_grandpa::Equivocation, sp_consensus_grandpa::app::Signature> **/ FinalityGrandpaEquivocationPrevote: { roundNumber: 'u64', - identity: 'SpFinalityGrandpaAppPublic', - first: '(FinalityGrandpaPrevote,SpFinalityGrandpaAppSignature)', - second: '(FinalityGrandpaPrevote,SpFinalityGrandpaAppSignature)' + identity: 'SpConsensusGrandpaAppPublic', + first: '(FinalityGrandpaPrevote,SpConsensusGrandpaAppSignature)', + second: '(FinalityGrandpaPrevote,SpConsensusGrandpaAppSignature)' }, /** - * Lookup354: finality_grandpa::Prevote + * Lookup358: finality_grandpa::Prevote **/ FinalityGrandpaPrevote: { targetHash: 'H256', targetNumber: 'u32' }, /** - * Lookup355: sp_finality_grandpa::app::Signature + * Lookup359: sp_consensus_grandpa::app::Signature **/ - SpFinalityGrandpaAppSignature: 'SpCoreEd25519Signature', + SpConsensusGrandpaAppSignature: 'SpCoreEd25519Signature', /** - * Lookup356: sp_core::ed25519::Signature + * Lookup360: sp_core::ed25519::Signature **/ SpCoreEd25519Signature: '[u8;64]', /** - * Lookup359: finality_grandpa::Equivocation, sp_finality_grandpa::app::Signature> + * Lookup363: finality_grandpa::Equivocation, sp_consensus_grandpa::app::Signature> **/ FinalityGrandpaEquivocationPrecommit: { roundNumber: 'u64', - identity: 'SpFinalityGrandpaAppPublic', - first: '(FinalityGrandpaPrecommit,SpFinalityGrandpaAppSignature)', - second: '(FinalityGrandpaPrecommit,SpFinalityGrandpaAppSignature)' + identity: 'SpConsensusGrandpaAppPublic', + first: '(FinalityGrandpaPrecommit,SpConsensusGrandpaAppSignature)', + second: '(FinalityGrandpaPrecommit,SpConsensusGrandpaAppSignature)' }, /** - * Lookup360: finality_grandpa::Precommit + * Lookup364: finality_grandpa::Precommit **/ FinalityGrandpaPrecommit: { targetHash: 'H256', targetNumber: 'u32' }, /** - * Lookup362: pallet_im_online::pallet::Call + * Lookup366: pallet_im_online::pallet::Call **/ PalletImOnlineCall: { _enum: { @@ -2406,7 +2501,7 @@ export default { } }, /** - * Lookup363: pallet_im_online::Heartbeat + * Lookup367: pallet_im_online::Heartbeat **/ PalletImOnlineHeartbeat: { blockNumber: 'u32', @@ -2416,22 +2511,22 @@ export default { validatorsLen: 'u32' }, /** - * Lookup364: sp_core::offchain::OpaqueNetworkState + * Lookup368: sp_core::offchain::OpaqueNetworkState **/ SpCoreOffchainOpaqueNetworkState: { - peerId: 'Bytes', - externalAddresses: 'Vec' + peerId: 'OpaquePeerId', + externalAddresses: 'Vec' }, /** - * Lookup368: pallet_im_online::sr25519::app_sr25519::Signature + * Lookup372: pallet_im_online::sr25519::app_sr25519::Signature **/ PalletImOnlineSr25519AppSr25519Signature: 'SpCoreSr25519Signature', /** - * Lookup369: sp_core::sr25519::Signature + * Lookup373: sp_core::sr25519::Signature **/ SpCoreSr25519Signature: '[u8;64]', /** - * Lookup370: pallet_bags_list::pallet::Call + * Lookup374: pallet_bags_list::pallet::Call **/ PalletBagsListCall: { _enum: { @@ -2444,7 +2539,7 @@ export default { } }, /** - * Lookup371: pallet_vesting::pallet::Call + * Lookup375: pallet_vesting::pallet::Call **/ PalletVestingCall: { _enum: { @@ -2468,7 +2563,7 @@ export default { } }, /** - * Lookup372: pallet_vesting::vesting_info::VestingInfo + * Lookup376: pallet_vesting::vesting_info::VestingInfo **/ PalletVestingVestingInfo: { locked: 'u128', @@ -2476,7 +2571,7 @@ export default { startingBlock: 'u32' }, /** - * Lookup373: pallet_multisig::pallet::Call + * Lookup377: pallet_multisig::pallet::Call **/ PalletMultisigCall: { _enum: { @@ -2488,16 +2583,15 @@ export default { threshold: 'u16', otherSignatories: 'Vec', maybeTimepoint: 'Option', - call: 'WrapperKeepOpaque', - storeCall: 'bool', - maxWeight: 'u64', + call: 'Call', + maxWeight: 'SpWeightsWeightV2Weight', }, approve_as_multi: { threshold: 'u16', otherSignatories: 'Vec', maybeTimepoint: 'Option', callHash: '[u8;32]', - maxWeight: 'u64', + maxWeight: 'SpWeightsWeightV2Weight', }, cancel_as_multi: { threshold: 'u16', @@ -2508,7 +2602,7 @@ export default { } }, /** - * Lookup376: pallet_council::Call + * Lookup379: pallet_council::Call **/ PalletCouncilCall: { _enum: { @@ -2559,7 +2653,7 @@ export default { } }, /** - * Lookup377: pallet_referendum::Call + * Lookup380: pallet_referendum::Call **/ PalletReferendumCall: { _enum: { @@ -2576,7 +2670,7 @@ export default { } }, /** - * Lookup378: pallet_membership::Call + * Lookup381: pallet_membership::Call **/ PalletMembershipCall: { _enum: { @@ -2645,7 +2739,7 @@ export default { } }, /** - * Lookup379: pallet_forum::Call + * Lookup382: pallet_forum::Call **/ PalletForumCall: { _enum: { @@ -2742,7 +2836,7 @@ export default { } }, /** - * Lookup380: pallet_constitution::Call + * Lookup383: pallet_constitution::Call **/ PalletConstitutionCall: { _enum: { @@ -2752,7 +2846,7 @@ export default { } }, /** - * Lookup381: pallet_bounty::Call + * Lookup384: pallet_bounty::Call **/ PalletBountyCall: { _enum: { @@ -2828,7 +2922,28 @@ export default { } }, /** - * Lookup383: pallet_content::Call + * Lookup385: pallet_joystream_utility::Call + **/ + PalletJoystreamUtilityCall: { + _enum: { + execute_signal_proposal: { + signal: 'Bytes', + }, + execute_runtime_upgrade_proposal: { + wasm: 'Bytes', + }, + update_working_group_budget: { + workingGroup: 'PalletCommonWorkingGroupIterableEnumsWorkingGroup', + amount: 'u128', + balanceKind: 'PalletCommonBalanceKind', + }, + burn_account_tokens: { + amount: 'u128' + } + } + }, + /** + * Lookup386: pallet_content::Call **/ PalletContentCall: { _enum: { @@ -2885,13 +3000,6 @@ export default { storageBucketsNumWitness: 'u32', rationale: 'Bytes', }, - delete_channel_as_moderator: { - actor: 'PalletContentPermissionsContentActor', - channelId: 'u64', - channelBagWitness: 'PalletContentChannelBagWitness', - numObjectsToDelete: 'u64', - rationale: 'Bytes', - }, set_channel_visibility_as_moderator: { actor: 'PalletContentPermissionsContentActor', channelId: 'u64', @@ -2921,13 +3029,6 @@ export default { assetsToRemove: 'BTreeSet', rationale: 'Bytes', }, - delete_video_as_moderator: { - actor: 'PalletContentPermissionsContentActor', - videoId: 'u64', - storageBucketsNumWitness: 'Option', - numObjectsToDelete: 'u64', - rationale: 'Bytes', - }, set_video_visibility_as_moderator: { actor: 'PalletContentPermissionsContentActor', videoId: 'u64', @@ -2954,11 +3055,6 @@ export default { update_video_state_bloat_bond: { newVideoStateBloatBond: 'u128', }, - claim_and_withdraw_channel_reward: { - actor: 'PalletContentPermissionsContentActor', - proof: 'Vec', - item: 'PalletContentPullPaymentElement', - }, issue_nft: { actor: 'PalletContentPermissionsContentActor', videoId: 'u64', @@ -3105,7 +3201,7 @@ export default { creator_token_issuer_transfer: { actor: 'PalletContentPermissionsContentActor', channelId: 'u64', - outputs: 'PalletProjectTokenTransfersPaymentWithVesting', + outputs: 'Vec<(u64,PalletProjectTokenPaymentWithVesting)>', metadata: 'Bytes', }, make_creator_token_permissionless: { @@ -3137,19 +3233,33 @@ export default { }, deissue_creator_token: { actor: 'PalletContentPermissionsContentActor', - channelId: 'u64' + channelId: 'u64', + }, + activate_amm: { + actor: 'PalletContentPermissionsContentActor', + channelId: 'u64', + params: 'PalletProjectTokenAmmParams', + }, + deactivate_amm: { + actor: 'PalletContentPermissionsContentActor', + channelId: 'u64', + }, + creator_token_issuer_remark: { + actor: 'PalletContentPermissionsContentActor', + channelId: 'u64', + remark: 'Bytes' } } }, /** - * Lookup384: pallet_content::types::ChannelBagWitness + * Lookup387: pallet_content::types::ChannelBagWitness **/ PalletContentChannelBagWitness: { storageBucketsNum: 'u32', distributionBucketsNum: 'u32' }, /** - * Lookup386: pallet_common::merkle_tree::ProofElementRecord + * Lookup389: pallet_common::merkle_tree::ProofElementRecord **/ PalletCommonMerkleTreeProofElementRecord: { _alias: { @@ -3159,13 +3269,13 @@ export default { side: 'PalletCommonMerkleTreeSide' }, /** - * Lookup387: pallet_common::merkle_tree::Side + * Lookup390: pallet_common::merkle_tree::Side **/ PalletCommonMerkleTreeSide: { _enum: ['Left', 'Right'] }, /** - * Lookup388: pallet_content::types::PullPaymentElement + * Lookup391: pallet_content::types::PullPaymentElement **/ PalletContentPullPaymentElement: { channelId: 'u64', @@ -3173,7 +3283,7 @@ export default { reason: 'H256' }, /** - * Lookup389: pallet_content::types::InitTransferParameters + * Lookup392: pallet_content::types::InitTransferParameters **/ PalletContentInitTransferParameters: { newCollaborators: 'BTreeMap>', @@ -3181,7 +3291,7 @@ export default { newOwner: 'PalletContentChannelOwner' }, /** - * Lookup390: pallet_project_token::types::TokenSaleParams> + * Lookup393: pallet_project_token::types::TokenSaleParams> **/ PalletProjectTokenTokenSaleParams: { unitPrice: 'u128', @@ -3193,11 +3303,14 @@ export default { metadata: 'Option' }, /** - * Lookup391: pallet_project_token::types::Transfers>> + * Lookup397: pallet_project_token::types::AmmParams **/ - PalletProjectTokenTransfersPaymentWithVesting: 'BTreeMap', + PalletProjectTokenAmmParams: { + slope: 'u128', + intercept: 'u128' + }, /** - * Lookup395: pallet_storage::Call + * Lookup398: pallet_storage::Call **/ PalletStorageCall: { _enum: { @@ -3344,14 +3457,14 @@ export default { } }, /** - * Lookup396: pallet_project_token::Call + * Lookup399: pallet_project_token::Call **/ PalletProjectTokenCall: { _enum: { transfer: { srcMemberId: 'u64', tokenId: 'u64', - outputs: 'PalletProjectTokenTransfersPayment', + outputs: 'Vec<(u64,u128)>', metadata: 'Bytes', }, burn: { @@ -3380,32 +3493,37 @@ export default { }, exit_revenue_split: { tokenId: 'u64', - memberId: 'u64' + memberId: 'u64', + }, + buy_on_amm: { + tokenId: 'u64', + memberId: 'u64', + amount: 'u128', + slippageTolerance: 'Option<(Permill,u128)>', + }, + sell_on_amm: { + tokenId: 'u64', + memberId: 'u64', + amount: 'u128', + slippageTolerance: 'Option<(Permill,u128)>', + }, + set_frozen_status: { + freeze: 'bool' } } }, /** - * Lookup397: pallet_project_token::types::Transfers> - **/ - PalletProjectTokenTransfersPayment: 'BTreeMap', - /** - * Lookup398: pallet_project_token::types::Payment - **/ - PalletProjectTokenPayment: { - amount: 'u128' - }, - /** - * Lookup402: pallet_project_token::types::MerkleProof + * Lookup403: pallet_project_token::types::MerkleProof **/ PalletProjectTokenMerkleProof: 'Vec<(H256,PalletProjectTokenMerkleSide)>', /** - * Lookup405: pallet_project_token::types::MerkleSide + * Lookup406: pallet_project_token::types::MerkleSide **/ PalletProjectTokenMerkleSide: { _enum: ['Right', 'Left'] }, /** - * Lookup406: pallet_proposals_engine::Call + * Lookup409: pallet_proposals_engine::Call **/ PalletProposalsEngineCall: { _enum: { @@ -3430,7 +3548,7 @@ export default { } }, /** - * Lookup407: pallet_proposals_discussion::Call + * Lookup410: pallet_proposals_discussion::Call **/ PalletProposalsDiscussionCall: { _enum: { @@ -3459,7 +3577,7 @@ export default { } }, /** - * Lookup408: pallet_proposals_codex::Call + * Lookup411: pallet_proposals_codex::Call **/ PalletProposalsCodexCall: { _enum: { @@ -3470,7 +3588,7 @@ export default { } }, /** - * Lookup409: pallet_working_group::Call + * Lookup412: pallet_working_group::Call **/ PalletWorkingGroupCall: { _enum: { @@ -3553,7 +3671,7 @@ export default { } }, /** - * Lookup418: joystream_node_runtime::OriginCaller + * Lookup421: joystream_node_runtime::OriginCaller **/ JoystreamNodeRuntimeOriginCaller: { _enum: { @@ -3562,7 +3680,7 @@ export default { } }, /** - * Lookup419: frame_support::dispatch::RawOrigin + * Lookup422: frame_support::dispatch::RawOrigin **/ FrameSupportDispatchRawOrigin: { _enum: { @@ -3572,17 +3690,17 @@ export default { } }, /** - * Lookup420: sp_core::Void + * Lookup423: sp_core::Void **/ SpCoreVoid: 'Null', /** - * Lookup421: pallet_utility::pallet::Error + * Lookup424: pallet_utility::pallet::Error **/ PalletUtilityError: { _enum: ['TooManyCalls'] }, /** - * Lookup428: sp_consensus_babe::digests::PreDigest + * Lookup431: sp_consensus_babe::digests::PreDigest **/ SpConsensusBabeDigestsPreDigest: { _enum: { @@ -3593,7 +3711,7 @@ export default { } }, /** - * Lookup429: sp_consensus_babe::digests::PrimaryPreDigest + * Lookup432: sp_consensus_babe::digests::PrimaryPreDigest **/ SpConsensusBabeDigestsPrimaryPreDigest: { authorityIndex: 'u32', @@ -3602,14 +3720,14 @@ export default { vrfProof: '[u8;64]' }, /** - * Lookup430: sp_consensus_babe::digests::SecondaryPlainPreDigest + * Lookup433: sp_consensus_babe::digests::SecondaryPlainPreDigest **/ SpConsensusBabeDigestsSecondaryPlainPreDigest: { authorityIndex: 'u32', slot: 'u64' }, /** - * Lookup431: sp_consensus_babe::digests::SecondaryVRFPreDigest + * Lookup434: sp_consensus_babe::digests::SecondaryVRFPreDigest **/ SpConsensusBabeDigestsSecondaryVRFPreDigest: { authorityIndex: 'u32', @@ -3618,35 +3736,20 @@ export default { vrfProof: '[u8;64]' }, /** - * Lookup433: sp_consensus_babe::BabeEpochConfiguration + * Lookup436: sp_consensus_babe::BabeEpochConfiguration **/ SpConsensusBabeBabeEpochConfiguration: { c: '(u64,u64)', allowedSlots: 'SpConsensusBabeAllowedSlots' }, /** - * Lookup434: pallet_babe::pallet::Error + * Lookup438: pallet_babe::pallet::Error **/ PalletBabeError: { _enum: ['InvalidEquivocationProof', 'InvalidKeyOwnershipProof', 'DuplicateOffenceReport', 'InvalidConfiguration'] }, /** - * Lookup436: pallet_authorship::UncleEntryItem - **/ - PalletAuthorshipUncleEntryItem: { - _enum: { - InclusionHeight: 'u32', - Uncle: '(H256,Option)' - } - }, - /** - * Lookup437: pallet_authorship::pallet::Error - **/ - PalletAuthorshipError: { - _enum: ['InvalidUncleParent', 'UnclesAlreadySet', 'TooManyUncles', 'GenesisUncle', 'TooHighUncle', 'UncleAlreadyIncluded', 'OldUncle'] - }, - /** - * Lookup439: pallet_balances::BalanceLock + * Lookup440: pallet_balances::BalanceLock **/ PalletBalancesBalanceLock: { id: '[u8;8]', @@ -3654,24 +3757,18 @@ export default { reasons: 'PalletBalancesReasons' }, /** - * Lookup440: pallet_balances::Reasons + * Lookup441: pallet_balances::Reasons **/ PalletBalancesReasons: { _enum: ['Fee', 'Misc', 'All'] }, /** - * Lookup443: pallet_balances::ReserveData + * Lookup444: pallet_balances::ReserveData **/ PalletBalancesReserveData: { id: '[u8;8]', amount: 'u128' }, - /** - * Lookup445: pallet_balances::Releases - **/ - PalletBalancesReleases: { - _enum: ['V1_0_0', 'V2_0_0'] - }, /** * Lookup446: pallet_balances::pallet::Error **/ @@ -3685,18 +3782,7 @@ export default { _enum: ['V1Ancient', 'V2'] }, /** - * Lookup449: pallet_election_provider_multi_phase::Phase - **/ - PalletElectionProviderMultiPhasePhase: { - _enum: { - Off: 'Null', - Signed: 'Null', - Unsigned: '(bool,u32)', - Emergency: 'Null' - } - }, - /** - * Lookup451: pallet_election_provider_multi_phase::ReadySolution + * Lookup449: pallet_election_provider_multi_phase::ReadySolution **/ PalletElectionProviderMultiPhaseReadySolution: { supports: 'Vec<(AccountId32,SpNposElectionsSupport)>', @@ -3704,14 +3790,14 @@ export default { compute: 'PalletElectionProviderMultiPhaseElectionCompute' }, /** - * Lookup452: pallet_election_provider_multi_phase::RoundSnapshot + * Lookup451: pallet_election_provider_multi_phase::RoundSnapshot **/ PalletElectionProviderMultiPhaseRoundSnapshot: { voters: 'Vec<(AccountId32,u64,Vec)>', targets: 'Vec' }, /** - * Lookup460: pallet_election_provider_multi_phase::signed::SignedSubmission + * Lookup458: pallet_election_provider_multi_phase::signed::SignedSubmission **/ PalletElectionProviderMultiPhaseSignedSignedSubmission: { who: 'AccountId32', @@ -3720,13 +3806,13 @@ export default { callFee: 'u128' }, /** - * Lookup461: pallet_election_provider_multi_phase::pallet::Error + * Lookup459: pallet_election_provider_multi_phase::pallet::Error **/ PalletElectionProviderMultiPhaseError: { - _enum: ['PreDispatchEarlySubmission', 'PreDispatchWrongWinnerCount', 'PreDispatchWeakSubmission', 'SignedQueueFull', 'SignedCannotPayDeposit', 'SignedInvalidWitness', 'SignedTooMuchWeight', 'OcwCallWrongEra', 'MissingSnapshotMetadata', 'InvalidSubmissionIndex', 'CallNotAllowed', 'FallbackFailed'] + _enum: ['PreDispatchEarlySubmission', 'PreDispatchWrongWinnerCount', 'PreDispatchWeakSubmission', 'SignedQueueFull', 'SignedCannotPayDeposit', 'SignedInvalidWitness', 'SignedTooMuchWeight', 'OcwCallWrongEra', 'MissingSnapshotMetadata', 'InvalidSubmissionIndex', 'CallNotAllowed', 'FallbackFailed', 'BoundNotMet', 'TooManyWinners'] }, /** - * Lookup462: pallet_staking::StakingLedger + * Lookup460: pallet_staking::StakingLedger **/ PalletStakingStakingLedger: { stash: 'AccountId32', @@ -3736,14 +3822,14 @@ export default { claimedRewards: 'Vec' }, /** - * Lookup464: pallet_staking::UnlockChunk + * Lookup462: pallet_staking::UnlockChunk **/ PalletStakingUnlockChunk: { value: 'Compact', era: 'Compact' }, /** - * Lookup466: pallet_staking::Nominations + * Lookup465: pallet_staking::Nominations **/ PalletStakingNominations: { targets: 'Vec', @@ -3751,27 +3837,21 @@ export default { suppressed: 'bool' }, /** - * Lookup467: pallet_staking::ActiveEraInfo + * Lookup466: pallet_staking::ActiveEraInfo **/ PalletStakingActiveEraInfo: { index: 'u32', start: 'Option' }, /** - * Lookup469: pallet_staking::EraRewardPoints + * Lookup468: pallet_staking::EraRewardPoints **/ PalletStakingEraRewardPoints: { total: 'u32', individual: 'BTreeMap' }, /** - * Lookup473: pallet_staking::Forcing - **/ - PalletStakingForcing: { - _enum: ['NotForcing', 'ForceNew', 'ForceNone', 'ForceAlways'] - }, - /** - * Lookup475: pallet_staking::UnappliedSlash + * Lookup473: pallet_staking::UnappliedSlash **/ PalletStakingUnappliedSlash: { validator: 'AccountId32', @@ -3781,7 +3861,7 @@ export default { payout: 'u128' }, /** - * Lookup477: pallet_staking::slashing::SlashingSpans + * Lookup475: pallet_staking::slashing::SlashingSpans **/ PalletStakingSlashingSlashingSpans: { spanIndex: 'u32', @@ -3790,36 +3870,30 @@ export default { prior: 'Vec' }, /** - * Lookup478: pallet_staking::slashing::SpanRecord + * Lookup476: pallet_staking::slashing::SpanRecord **/ PalletStakingSlashingSpanRecord: { slashed: 'u128', paidOut: 'u128' }, /** - * Lookup481: pallet_staking::Releases - **/ - PalletStakingReleases: { - _enum: ['V1_0_0Ancient', 'V2_0_0', 'V3_0_0', 'V4_0_0', 'V5_0_0', 'V6_0_0', 'V7_0_0', 'V8_0_0', 'V9_0_0'] - }, - /** - * Lookup482: pallet_staking::pallet::pallet::Error + * Lookup479: pallet_staking::pallet::pallet::Error **/ PalletStakingPalletError: { - _enum: ['NotController', 'NotStash', 'AlreadyBonded', 'AlreadyPaired', 'EmptyTargets', 'DuplicateIndex', 'InvalidSlashIndex', 'InsufficientBond', 'NoMoreChunks', 'NoUnlockChunk', 'FundedTarget', 'InvalidEraToReward', 'InvalidNumberOfNominations', 'NotSortedAndUnique', 'AlreadyClaimed', 'IncorrectHistoryDepth', 'IncorrectSlashingSpans', 'BadState', 'TooManyTargets', 'BadTarget', 'CannotChillOther', 'TooManyNominators', 'TooManyValidators', 'CommissionTooLow', 'BondingRestricted'] + _enum: ['NotController', 'NotStash', 'AlreadyBonded', 'AlreadyPaired', 'EmptyTargets', 'DuplicateIndex', 'InvalidSlashIndex', 'InsufficientBond', 'NoMoreChunks', 'NoUnlockChunk', 'FundedTarget', 'InvalidEraToReward', 'InvalidNumberOfNominations', 'NotSortedAndUnique', 'AlreadyClaimed', 'IncorrectHistoryDepth', 'IncorrectSlashingSpans', 'BadState', 'TooManyTargets', 'BadTarget', 'CannotChillOther', 'TooManyNominators', 'TooManyValidators', 'CommissionTooLow', 'BoundNotMet', 'BondingRestricted'] }, /** - * Lookup486: sp_core::crypto::KeyTypeId + * Lookup483: sp_core::crypto::KeyTypeId **/ SpCoreCryptoKeyTypeId: '[u8;4]', /** - * Lookup487: pallet_session::pallet::Error + * Lookup484: pallet_session::pallet::Error **/ PalletSessionError: { _enum: ['InvalidProof', 'NoAssociatedValidatorId', 'DuplicatedKey', 'NoKeys', 'NoAccount'] }, /** - * Lookup489: pallet_grandpa::StoredState + * Lookup486: pallet_grandpa::StoredState **/ PalletGrandpaStoredState: { _enum: { @@ -3836,42 +3910,42 @@ export default { } }, /** - * Lookup490: pallet_grandpa::StoredPendingChange + * Lookup487: pallet_grandpa::StoredPendingChange **/ PalletGrandpaStoredPendingChange: { scheduledAt: 'u32', delay: 'u32', - nextAuthorities: 'Vec<(SpFinalityGrandpaAppPublic,u64)>', + nextAuthorities: 'Vec<(SpConsensusGrandpaAppPublic,u64)>', forced: 'Option' }, /** - * Lookup492: pallet_grandpa::pallet::Error + * Lookup489: pallet_grandpa::pallet::Error **/ PalletGrandpaError: { _enum: ['PauseFailed', 'ResumeFailed', 'ChangePending', 'TooSoon', 'InvalidKeyOwnershipProof', 'InvalidEquivocationProof', 'DuplicateOffenceReport'] }, /** - * Lookup498: pallet_im_online::BoundedOpaqueNetworkState + * Lookup495: pallet_im_online::BoundedOpaqueNetworkState **/ PalletImOnlineBoundedOpaqueNetworkState: { peerId: 'Bytes', externalAddresses: 'Vec' }, /** - * Lookup502: pallet_im_online::pallet::Error + * Lookup499: pallet_im_online::pallet::Error **/ PalletImOnlineError: { _enum: ['InvalidKey', 'DuplicatedHeartbeat'] }, /** - * Lookup503: sp_staking::offence::OffenceDetails + * Lookup500: sp_staking::offence::OffenceDetails **/ SpStakingOffenceOffenceDetails: { offender: '(AccountId32,PalletStakingExposure)', reporters: 'Vec' }, /** - * Lookup506: pallet_bags_list::list::Node + * Lookup503: pallet_bags_list::list::Node **/ PalletBagsListListNode: { id: 'AccountId32', @@ -3881,14 +3955,14 @@ export default { score: 'u64' }, /** - * Lookup507: pallet_bags_list::list::Bag + * Lookup504: pallet_bags_list::list::Bag **/ PalletBagsListListBag: { head: 'Option', tail: 'Option' }, /** - * Lookup508: pallet_bags_list::pallet::Error + * Lookup505: pallet_bags_list::pallet::Error **/ PalletBagsListError: { _enum: { @@ -3896,25 +3970,25 @@ export default { } }, /** - * Lookup509: pallet_bags_list::list::ListError + * Lookup506: pallet_bags_list::list::ListError **/ PalletBagsListListListError: { _enum: ['Duplicate', 'NotHeavier', 'NotInSameBag', 'NodeNotFound'] }, /** - * Lookup512: pallet_vesting::Releases + * Lookup509: pallet_vesting::Releases **/ PalletVestingReleases: { _enum: ['V0', 'V1'] }, /** - * Lookup513: pallet_vesting::pallet::Error + * Lookup510: pallet_vesting::pallet::Error **/ PalletVestingError: { _enum: ['NotVesting', 'AtMaxVestingSchedules', 'AmountLow', 'ScheduleIndexOutOfBounds', 'InvalidScheduleParams'] }, /** - * Lookup515: pallet_multisig::Multisig + * Lookup512: pallet_multisig::Multisig **/ PalletMultisigMultisig: { when: 'PalletMultisigTimepoint', @@ -3923,20 +3997,20 @@ export default { approvals: 'Vec' }, /** - * Lookup517: pallet_multisig::pallet::Error + * Lookup514: pallet_multisig::pallet::Error **/ PalletMultisigError: { _enum: ['MinimumThreshold', 'AlreadyApproved', 'NoApprovalsNeeded', 'TooFewSignatories', 'TooManySignatories', 'SignatoriesOutOfOrder', 'SenderInSignatories', 'NotFound', 'NotOwner', 'NoTimepoint', 'WrongTimepoint', 'UnexpectedTimepoint', 'MaxWeightTooLow', 'AlreadyStored'] }, /** - * Lookup518: pallet_council::CouncilStageUpdate + * Lookup515: pallet_council::CouncilStageUpdate **/ PalletCouncilCouncilStageUpdate: { stage: 'PalletCouncilCouncilStage', changedAt: 'u32' }, /** - * Lookup519: pallet_council::CouncilStage + * Lookup516: pallet_council::CouncilStage **/ PalletCouncilCouncilStage: { _enum: { @@ -3946,26 +4020,26 @@ export default { } }, /** - * Lookup520: pallet_council::CouncilStageAnnouncing + * Lookup517: pallet_council::CouncilStageAnnouncing **/ PalletCouncilCouncilStageAnnouncing: { candidatesCount: 'u32', endsAt: 'u32' }, /** - * Lookup521: pallet_council::CouncilStageElection + * Lookup518: pallet_council::CouncilStageElection **/ PalletCouncilCouncilStageElection: { candidatesCount: 'u32' }, /** - * Lookup522: pallet_council::CouncilStageIdle + * Lookup519: pallet_council::CouncilStageIdle **/ PalletCouncilCouncilStageIdle: { endsAt: 'u32' }, /** - * Lookup524: pallet_council::CouncilMember + * Lookup521: pallet_council::CouncilMember **/ PalletCouncilCouncilMember: { stakingAccountId: 'AccountId32', @@ -3976,7 +4050,7 @@ export default { unpaidReward: 'u128' }, /** - * Lookup526: pallet_council::Candidate + * Lookup523: pallet_council::Candidate **/ PalletCouncilCandidate: { stakingAccountId: 'AccountId32', @@ -3987,13 +4061,13 @@ export default { noteHash: 'Option' }, /** - * Lookup527: pallet_council::Error + * Lookup524: pallet_council::Error **/ PalletCouncilError: { _enum: ['ArithmeticError', 'BadOrigin', 'CantCandidateNow', 'CantReleaseStakeNow', 'CandidacyStakeTooLow', 'CantCandidateTwice', 'ConflictingStake', 'StakeStillNeeded', 'NoStake', 'InsufficientBalanceForStaking', 'CantVoteForYourself', 'MemberIdNotMatchAccount', 'InvalidAccountToStakeReuse', 'NotCandidatingNow', 'CantWithdrawCandidacyNow', 'NotCouncilor', 'InsufficientFundsForFundingRequest', 'ZeroBalanceFundRequest', 'RepeatedFundRequestAccount', 'EmptyFundingRequests', 'InsufficientTokensForFunding', 'ZeroTokensFunding', 'CandidateDoesNotExist', 'InsufficientBalanceForTransfer'] }, /** - * Lookup528: pallet_referendum::ReferendumStage, S>> + * Lookup525: pallet_referendum::ReferendumStage, S>> **/ PalletReferendumReferendumStage: { _enum: { @@ -4003,7 +4077,7 @@ export default { } }, /** - * Lookup530: pallet_referendum::ReferendumStageVoting + * Lookup527: pallet_referendum::ReferendumStageVoting **/ PalletReferendumReferendumStageVoting: { started: 'u32', @@ -4012,7 +4086,7 @@ export default { endsAt: 'u32' }, /** - * Lookup531: pallet_referendum::ReferendumStageRevealing, S>> + * Lookup528: pallet_referendum::ReferendumStageRevealing, S>> **/ PalletReferendumReferendumStageRevealing: { started: 'u32', @@ -4022,7 +4096,7 @@ export default { endsAt: 'u32' }, /** - * Lookup532: pallet_referendum::CastVote + * Lookup529: pallet_referendum::CastVote **/ PalletReferendumCastVote: { commitment: 'H256', @@ -4031,13 +4105,13 @@ export default { voteFor: 'Option' }, /** - * Lookup533: pallet_referendum::Error + * Lookup530: pallet_referendum::Error **/ PalletReferendumError: { _enum: ['BadOrigin', 'ReferendumNotRunning', 'RevealingNotInProgress', 'ConflictStakesOnAccount', 'InsufficientBalanceToStake', 'InsufficientStake', 'InvalidReveal', 'InvalidVote', 'VoteNotExisting', 'AlreadyVotedThisCycle', 'UnstakingVoteInSameCycle', 'SaltTooLong', 'UnstakingForbidden', 'AccountAlreadyOptedOutOfVoting'] }, /** - * Lookup534: pallet_membership::MembershipObject + * Lookup531: pallet_membership::MembershipObject **/ PalletMembershipMembershipObject: { handleHash: 'H256', @@ -4047,20 +4121,20 @@ export default { invites: 'u32' }, /** - * Lookup535: pallet_membership::StakingAccountMemberBinding + * Lookup532: pallet_membership::StakingAccountMemberBinding **/ PalletMembershipStakingAccountMemberBinding: { memberId: 'u64', confirmed: 'bool' }, /** - * Lookup536: pallet_membership::Error + * Lookup533: pallet_membership::Error **/ PalletMembershipError: { _enum: ['NotEnoughBalanceToBuyMembership', 'ControllerAccountRequired', 'RootAccountRequired', 'UnsignedOrigin', 'MemberProfileNotFound', 'HandleAlreadyRegistered', 'HandleMustBeProvidedDuringRegistration', 'ReferrerIsNotMember', 'CannotTransferInvitesForNotMember', 'NotEnoughInvites', 'WorkingGroupLeaderNotSet', 'StakingAccountIsAlreadyRegistered', 'StakingAccountDoesntExist', 'StakingAccountAlreadyConfirmed', 'WorkingGroupBudgetIsNotSufficientForInviting', 'ConflictingLock', 'CannotExceedReferralCutPercentLimit', 'ConflictStakesOnAccount', 'InsufficientBalanceToCoverStake', 'GifLockExceedsCredit', 'InsufficientBalanceToGift', 'InsufficientBalanceToCoverPayment'] }, /** - * Lookup537: pallet_forum::Category> + * Lookup534: pallet_forum::Category> **/ PalletForumCategory: { titleHash: 'H256', @@ -4073,7 +4147,7 @@ export default { stickyThreadIds: 'BTreeSet' }, /** - * Lookup539: pallet_forum::Thread> + * Lookup536: pallet_forum::Thread> **/ PalletForumThread: { categoryId: 'u64', @@ -4082,7 +4156,7 @@ export default { numberOfEditablePosts: 'u64' }, /** - * Lookup540: pallet_forum::Post> + * Lookup537: pallet_forum::Post> **/ PalletForumPost: { threadId: 'u64', @@ -4092,19 +4166,19 @@ export default { lastEdited: 'u32' }, /** - * Lookup541: pallet_forum::Error + * Lookup538: pallet_forum::Error **/ PalletForumError: { _enum: ['ArithmeticError', 'OriginNotForumLead', 'ForumUserIdNotMatchAccount', 'ModeratorIdNotMatchAccount', 'AccountDoesNotMatchThreadAuthor', 'ThreadDoesNotExist', 'ModeratorModerateOriginCategory', 'ModeratorModerateDestinationCategory', 'ThreadMoveInvalid', 'ThreadNotBeingUpdated', 'InsufficientBalanceForThreadCreation', 'CannotDeleteThreadWithOutstandingPosts', 'PostDoesNotExist', 'AccountDoesNotMatchPostAuthor', 'InsufficientBalanceForPost', 'CategoryNotBeingUpdated', 'AncestorCategoryImmutable', 'MaxValidCategoryDepthExceeded', 'CategoryDoesNotExist', 'CategoryModeratorDoesNotExist', 'CategoryNotEmptyThreads', 'CategoryNotEmptyCategories', 'ModeratorCantDeleteCategory', 'ModeratorCantUpdateCategory', 'MapSizeLimit', 'PathLengthShouldBeGreaterThanZero', 'MaxNumberOfStickiedThreadsExceeded'] }, /** - * Lookup542: pallet_constitution::ConstitutionInfo + * Lookup539: pallet_constitution::ConstitutionInfo **/ PalletConstitutionConstitutionInfo: { textHash: 'H256' }, /** - * Lookup543: pallet_bounty::BountyRecord> + * Lookup540: pallet_bounty::BountyRecord> **/ PalletBountyBountyRecord: { creationParams: 'PalletBountyBountyParametersBoundedBTreeSet', @@ -4114,7 +4188,7 @@ export default { hasUnpaidOracleReward: 'bool' }, /** - * Lookup545: pallet_bounty::BountyParameters> + * Lookup542: pallet_bounty::BountyParameters> **/ PalletBountyBountyParametersBoundedBTreeSet: { oracle: 'PalletBountyBountyActor', @@ -4126,7 +4200,7 @@ export default { fundingType: 'PalletBountyFundingType' }, /** - * Lookup546: pallet_bounty::AssuranceContractType> + * Lookup543: pallet_bounty::AssuranceContractType> **/ PalletBountyAssuranceContractTypeBoundedBTreeSet: { _enum: { @@ -4135,7 +4209,7 @@ export default { } }, /** - * Lookup547: pallet_bounty::BountyMilestone + * Lookup544: pallet_bounty::BountyMilestone **/ PalletBountyBountyMilestone: { _enum: { @@ -4152,14 +4226,14 @@ export default { } }, /** - * Lookup549: pallet_bounty::Contribution + * Lookup546: pallet_bounty::Contribution **/ PalletBountyContribution: { amount: 'u128', funderStateBloatBondAmount: 'u128' }, /** - * Lookup550: pallet_bounty::EntryRecord + * Lookup547: pallet_bounty::EntryRecord **/ PalletBountyEntryRecord: { memberId: 'u64', @@ -4168,13 +4242,19 @@ export default { workSubmitted: 'bool' }, /** - * Lookup551: pallet_bounty::Error + * Lookup548: pallet_bounty::Error **/ PalletBountyError: { _enum: ['ArithmeticError', 'MinFundingAmountCannotBeGreaterThanMaxAmount', 'BountyDoesntExist', 'SwitchOracleOriginIsRoot', 'InvalidStageUnexpectedFunding', 'InvalidStageUnexpectedNoFundingContributed', 'InvalidStageUnexpectedCancelled', 'InvalidStageUnexpectedWorkSubmission', 'InvalidStageUnexpectedJudgment', 'InvalidStageUnexpectedSuccessfulBountyWithdrawal', 'InvalidStageUnexpectedFailedBountyWithdrawal', 'InsufficientBalanceForBounty', 'NoBountyContributionFound', 'InsufficientBalanceForStake', 'ConflictingStakes', 'WorkEntryDoesntExist', 'CherryLessThenMinimumAllowed', 'CannotSubmitWorkToClosedContractBounty', 'ClosedContractMemberListIsEmpty', 'ClosedContractMemberListIsTooLarge', 'ClosedContractMemberNotFound', 'InvalidOracleMemberId', 'InvalidStakingAccountForMember', 'ZeroWinnerReward', 'TotalRewardShouldBeEqualToTotalFunding', 'EntrantStakeIsLessThanMininum', 'FundingAmountCannotBeZero', 'FundingPeriodCannotBeZero', 'WinnerShouldHasWorkSubmission', 'InvalidContributorActorSpecified', 'InvalidOracleActorSpecified', 'InvalidEntrantWorkerSpecified', 'InvalidCreatorActorSpecified', 'WorkEntryDoesntBelongToWorker', 'OracleRewardAlreadyWithdrawn'] }, /** - * Lookup553: pallet_content::types::VideoRecord>, pallet_content::nft::types::OpenAuctionRecord>>, MemberId, AuctionId>, frame_support::storage::bounded_btree_set::BoundedBTreeSet, pallet_common::bloat_bond::RepayableBloatBond> + * Lookup549: pallet_joystream_utility::Error + **/ + PalletJoystreamUtilityError: { + _enum: ['InsufficientFundsForBudgetUpdate', 'ZeroTokensBurn', 'InsufficientFundsForBurn'] + }, + /** + * Lookup550: pallet_content::types::VideoRecord>, pallet_content::nft::types::OpenAuctionRecord>>, MemberId, AuctionId>, bounded_collections::bounded_btree_set::BoundedBTreeSet, pallet_common::bloat_bond::RepayableBloatBond> **/ PalletContentVideoRecord: { inChannel: 'u64', @@ -4183,7 +4263,7 @@ export default { videoStateBloatBond: 'PalletCommonBloatBondRepayableBloatBond' }, /** - * Lookup554: pallet_content::nft::types::OwnedNft>, pallet_content::nft::types::OpenAuctionRecord>>, MemberId, AuctionId> + * Lookup551: pallet_content::nft::types::OwnedNft>, pallet_content::nft::types::OpenAuctionRecord>>, MemberId, AuctionId> **/ PalletContentNftTypesOwnedNft: { owner: 'PalletContentNftTypesNftOwner', @@ -4192,7 +4272,7 @@ export default { openAuctionsNonce: 'u64' }, /** - * Lookup555: pallet_content::nft::types::TransactionalStatusRecord>, pallet_content::nft::types::OpenAuctionRecord>> + * Lookup552: pallet_content::nft::types::TransactionalStatusRecord>, pallet_content::nft::types::OpenAuctionRecord>> **/ PalletContentNftTypesTransactionalStatusRecord: { _enum: { @@ -4204,7 +4284,7 @@ export default { } }, /** - * Lookup556: pallet_content::nft::types::EnglishAuctionRecord> + * Lookup553: pallet_content::nft::types::EnglishAuctionRecord> **/ PalletContentNftTypesEnglishAuctionRecord: { startingPrice: 'u128', @@ -4217,14 +4297,14 @@ export default { topBid: 'Option' }, /** - * Lookup559: pallet_content::nft::types::EnglishAuctionBid + * Lookup556: pallet_content::nft::types::EnglishAuctionBid **/ PalletContentNftTypesEnglishAuctionBid: { amount: 'u128', bidderId: 'u64' }, /** - * Lookup560: pallet_content::nft::types::OpenAuctionRecord> + * Lookup557: pallet_content::nft::types::OpenAuctionRecord> **/ PalletContentNftTypesOpenAuctionRecord: { startingPrice: 'u128', @@ -4235,7 +4315,7 @@ export default { start: 'u32' }, /** - * Lookup561: pallet_content::nft::types::NftOwner + * Lookup558: pallet_content::nft::types::NftOwner **/ PalletContentNftTypesNftOwner: { _enum: { @@ -4244,7 +4324,7 @@ export default { } }, /** - * Lookup564: pallet_content::permissions::curator_group::CuratorGroupRecord, S>, frame_support::storage::bounded_btree_map::BoundedBTreeMap, S>> + * Lookup561: pallet_content::permissions::curator_group::CuratorGroupRecord, S>, bounded_collections::bounded_btree_map::BoundedBTreeMap, S>> **/ PalletContentPermissionsCuratorGroupCuratorGroupRecord: { curators: 'BTreeMap>', @@ -4252,7 +4332,7 @@ export default { permissionsByLevel: 'BTreeMap>' }, /** - * Lookup571: pallet_content::nft::types::OpenAuctionBidRecord + * Lookup568: pallet_content::nft::types::OpenAuctionBidRecord **/ PalletContentNftTypesOpenAuctionBidRecord: { amount: 'u128', @@ -4260,13 +4340,13 @@ export default { auctionId: 'u64' }, /** - * Lookup572: pallet_content::errors::Error + * Lookup569: pallet_content::errors::Error **/ PalletContentErrorsError: { - _enum: ['ChannelStateBloatBondChanged', 'VideoStateBloatBondChanged', 'MinCashoutValueTooLow', 'MaxCashoutValueTooHigh', 'MaxNumberOfChannelCollaboratorsExceeded', 'MaxNumberOfChannelAssetsExceeded', 'MaxNumberOfVideoAssetsExceeded', 'MaxNumberOfChannelAgentPermissionsExceeded', 'MaxNumberOfPausedFeaturesPerChannelExceeded', 'InvalidChannelBagWitnessProvided', 'InvalidStorageBucketsNumWitnessProvided', 'MissingStorageBucketsNumWitness', 'ChannelOwnerMemberDoesNotExist', 'ChannelOwnerCuratorGroupDoesNotExist', 'ChannelStateBloatBondBelowExistentialDeposit', 'NumberOfAssetsToRemoveIsZero', 'CuratorIsNotAMemberOfGivenCuratorGroup', 'CuratorIsAlreadyAMemberOfGivenCuratorGroup', 'CuratorGroupDoesNotExist', 'CuratorsPerGroupLimitReached', 'CuratorGroupIsNotActive', 'CuratorIdInvalid', 'LeadAuthFailed', 'MemberAuthFailed', 'CuratorAuthFailed', 'BadOrigin', 'ActorNotAuthorized', 'CategoryDoesNotExist', 'ChannelDoesNotExist', 'VideoDoesNotExist', 'VideoInSeason', 'ActorCannotBeLead', 'ActorCannotOwnChannel', 'NftAlreadyOwnedByChannel', 'NftAlreadyExists', 'NftDoesNotExist', 'OverflowOrUnderflowHappened', 'DoesNotOwnNft', 'RoyaltyUpperBoundExceeded', 'RoyaltyLowerBoundExceeded', 'AuctionDurationUpperBoundExceeded', 'AuctionDurationLowerBoundExceeded', 'ExtensionPeriodUpperBoundExceeded', 'ExtensionPeriodLowerBoundExceeded', 'BidLockDurationUpperBoundExceeded', 'BidLockDurationLowerBoundExceeded', 'StartingPriceUpperBoundExceeded', 'StartingPriceLowerBoundExceeded', 'AuctionBidStepUpperBoundExceeded', 'AuctionBidStepLowerBoundExceeded', 'InsufficientBalance', 'BidStepConstraintViolated', 'InvalidBidAmountSpecified', 'StartingPriceConstraintViolated', 'ActionHasBidsAlready', 'NftIsNotIdle', 'PendingOfferDoesNotExist', 'RewardAccountIsNotSet', 'ActorIsNotBidder', 'AuctionCannotBeCompleted', 'BidDoesNotExist', 'BidIsForPastAuction', 'StartsAtLowerBoundExceeded', 'StartsAtUpperBoundExceeded', 'AuctionDidNotStart', 'NotInAuctionState', 'MemberIsNotAllowedToParticipate', 'MemberProfileNotFound', 'NftNotInBuyNowState', 'InvalidBuyNowWitnessPriceProvided', 'IsNotOpenAuctionType', 'IsNotEnglishAuctionType', 'BidLockDurationIsNotExpired', 'NftAuctionIsAlreadyExpired', 'BuyNowMustBeGreaterThanStartingPrice', 'TargetMemberDoesNotExist', 'InvalidNftOfferWitnessPriceProvided', 'MaxAuctionWhiteListLengthUpperBoundExceeded', 'WhitelistHasOnlyOneMember', 'WhitelistedMemberDoesNotExist', 'NftNonChannelOwnerDoesNotExist', 'ExtensionPeriodIsGreaterThenAuctionDuration', 'NoAssetsSpecified', 'InvalidAssetsProvided', 'ChannelContainsVideos', 'ChannelContainsAssets', 'InvalidBagSizeSpecified', 'MigrationNotFinished', 'ReplyDoesNotExist', 'UnsufficientBalance', 'InsufficientTreasuryBalance', 'InvalidMemberProvided', 'ActorNotAMember', 'PaymentProofVerificationFailed', 'CashoutAmountExceedsMaximumAmount', 'CashoutAmountBelowMinimumAmount', 'WithdrawalAmountExceedsChannelAccountWithdrawableBalance', 'WithdrawFromChannelAmountIsZero', 'ChannelCashoutsDisabled', 'MinCashoutAllowedExceedsMaxCashoutAllowed', 'CuratorModerationActionNotAllowed', 'MaxCuratorPermissionsPerLevelExceeded', 'CuratorGroupMaxPermissionsByLevelMapSizeExceeded', 'ChannelFeaturePaused', 'ChannelBagMissing', 'AssetsToRemoveBeyondEntityAssetsSet', 'InvalidVideoDataObjectsCountProvided', 'InvalidChannelTransferStatus', 'InvalidChannelTransferAcceptor', 'InvalidChannelTransferCommitmentParams', 'ChannelAgentInsufficientPermissions', 'InvalidChannelOwner', 'ZeroReward', 'InsufficientBalanceForTransfer', 'InsufficientBalanceForChannelCreation', 'InsufficientBalanceForVideoCreation', 'InsufficientCouncilBudget', 'GlobalNftDailyLimitExceeded', 'GlobalNftWeeklyLimitExceeded', 'ChannelNftDailyLimitExceeded', 'ChannelNftWeeklyLimitExceeded', 'CreatorTokenAlreadyIssued', 'CreatorTokenNotIssued', 'MemberIdCouldNotBeDerivedFromActor', 'CannotWithdrawFromChannelWithCreatorTokenIssued', 'PatronageCanOnlyBeClaimedForMemberOwnedChannels', 'ChannelTransfersBlockedDuringRevenueSplits', 'ChannelTransfersBlockedDuringTokenSales'] + _enum: ['ChannelStateBloatBondChanged', 'VideoStateBloatBondChanged', 'MinCashoutValueTooLow', 'MaxCashoutValueTooHigh', 'MaxNumberOfChannelCollaboratorsExceeded', 'MaxNumberOfChannelAssetsExceeded', 'MaxNumberOfVideoAssetsExceeded', 'MaxNumberOfChannelAgentPermissionsExceeded', 'MaxNumberOfPausedFeaturesPerChannelExceeded', 'InvalidChannelBagWitnessProvided', 'InvalidStorageBucketsNumWitnessProvided', 'MissingStorageBucketsNumWitness', 'ChannelOwnerMemberDoesNotExist', 'ChannelOwnerCuratorGroupDoesNotExist', 'ChannelStateBloatBondBelowExistentialDeposit', 'NumberOfAssetsToRemoveIsZero', 'CuratorIsNotAMemberOfGivenCuratorGroup', 'CuratorIsAlreadyAMemberOfGivenCuratorGroup', 'CuratorGroupDoesNotExist', 'CuratorsPerGroupLimitReached', 'CuratorGroupIsNotActive', 'CuratorIdInvalid', 'LeadAuthFailed', 'MemberAuthFailed', 'CuratorAuthFailed', 'BadOrigin', 'ActorNotAuthorized', 'CategoryDoesNotExist', 'ChannelDoesNotExist', 'VideoDoesNotExist', 'VideoInSeason', 'ActorCannotBeLead', 'ActorCannotOwnChannel', 'NftAlreadyOwnedByChannel', 'NftAlreadyExists', 'NftDoesNotExist', 'OverflowOrUnderflowHappened', 'DoesNotOwnNft', 'RoyaltyUpperBoundExceeded', 'RoyaltyLowerBoundExceeded', 'AuctionDurationUpperBoundExceeded', 'AuctionDurationLowerBoundExceeded', 'ExtensionPeriodUpperBoundExceeded', 'ExtensionPeriodLowerBoundExceeded', 'BidLockDurationUpperBoundExceeded', 'BidLockDurationLowerBoundExceeded', 'StartingPriceUpperBoundExceeded', 'StartingPriceLowerBoundExceeded', 'AuctionBidStepUpperBoundExceeded', 'AuctionBidStepLowerBoundExceeded', 'InsufficientBalance', 'BidStepConstraintViolated', 'InvalidBidAmountSpecified', 'StartingPriceConstraintViolated', 'ActionHasBidsAlready', 'NftIsNotIdle', 'PendingOfferDoesNotExist', 'RewardAccountIsNotSet', 'ActorIsNotBidder', 'AuctionCannotBeCompleted', 'BidDoesNotExist', 'BidIsForPastAuction', 'StartsAtLowerBoundExceeded', 'StartsAtUpperBoundExceeded', 'AuctionDidNotStart', 'NotInAuctionState', 'MemberIsNotAllowedToParticipate', 'MemberProfileNotFound', 'NftNotInBuyNowState', 'InvalidBuyNowWitnessPriceProvided', 'IsNotOpenAuctionType', 'IsNotEnglishAuctionType', 'BidLockDurationIsNotExpired', 'NftAuctionIsAlreadyExpired', 'BuyNowMustBeGreaterThanStartingPrice', 'TargetMemberDoesNotExist', 'InvalidNftOfferWitnessPriceProvided', 'MaxAuctionWhiteListLengthUpperBoundExceeded', 'WhitelistHasOnlyOneMember', 'WhitelistedMemberDoesNotExist', 'NftNonChannelOwnerDoesNotExist', 'ExtensionPeriodIsGreaterThenAuctionDuration', 'NoAssetsSpecified', 'InvalidAssetsProvided', 'ChannelContainsVideos', 'ChannelContainsAssets', 'InvalidBagSizeSpecified', 'MigrationNotFinished', 'ReplyDoesNotExist', 'UnsufficientBalance', 'InsufficientTreasuryBalance', 'InvalidMemberProvided', 'ActorNotAMember', 'PaymentProofVerificationFailed', 'CashoutAmountExceedsMaximumAmount', 'CashoutAmountBelowMinimumAmount', 'WithdrawalAmountExceedsChannelAccountWithdrawableBalance', 'WithdrawFromChannelAmountIsZero', 'ChannelCashoutsDisabled', 'MinCashoutAllowedExceedsMaxCashoutAllowed', 'CuratorModerationActionNotAllowed', 'MaxCuratorPermissionsPerLevelExceeded', 'CuratorGroupMaxPermissionsByLevelMapSizeExceeded', 'ChannelFeaturePaused', 'ChannelBagMissing', 'AssetsToRemoveBeyondEntityAssetsSet', 'InvalidVideoDataObjectsCountProvided', 'InvalidChannelTransferStatus', 'InvalidChannelTransferAcceptor', 'InvalidChannelTransferCommitmentParams', 'ChannelAgentInsufficientPermissions', 'InvalidChannelOwner', 'ZeroReward', 'InsufficientBalanceForTransfer', 'InsufficientBalanceForChannelCreation', 'InsufficientBalanceForVideoCreation', 'InsufficientCouncilBudget', 'GlobalNftDailyLimitExceeded', 'GlobalNftWeeklyLimitExceeded', 'ChannelNftDailyLimitExceeded', 'ChannelNftWeeklyLimitExceeded', 'CreatorTokenAlreadyIssued', 'CreatorTokenNotIssued', 'MemberIdCouldNotBeDerivedFromActor', 'CannotWithdrawFromChannelWithCreatorTokenIssued', 'PatronageCanOnlyBeClaimedForMemberOwnedChannels', 'ChannelTransfersBlockedDuringRevenueSplits', 'ChannelTransfersBlockedDuringTokenSales', 'ChannelTransfersBlockedDuringActiveAmm'] }, /** - * Lookup573: pallet_storage::BagRecord, frame_support::storage::bounded_btree_set::BoundedBTreeSet, S>> + * Lookup570: pallet_storage::BagRecord, bounded_collections::bounded_btree_set::BoundedBTreeSet, S>> **/ PalletStorageBagRecord: { storedBy: 'BTreeSet', @@ -4275,7 +4355,7 @@ export default { objectsNumber: 'u64' }, /** - * Lookup576: pallet_storage::StorageBucketRecord + * Lookup573: pallet_storage::StorageBucketRecord **/ PalletStorageStorageBucketRecord: { operatorStatus: 'PalletStorageStorageBucketOperatorStatus', @@ -4284,7 +4364,7 @@ export default { assignedBags: 'u64' }, /** - * Lookup577: pallet_storage::StorageBucketOperatorStatus + * Lookup574: pallet_storage::StorageBucketOperatorStatus **/ PalletStorageStorageBucketOperatorStatus: { _enum: { @@ -4294,14 +4374,14 @@ export default { } }, /** - * Lookup579: pallet_storage::DynamicBagCreationPolicy> + * Lookup576: pallet_storage::DynamicBagCreationPolicy> **/ PalletStorageDynamicBagCreationPolicy: { numberOfStorageBuckets: 'u32', families: 'BTreeMap' }, /** - * Lookup582: pallet_storage::DataObject> + * Lookup579: pallet_storage::DataObject> **/ PalletStorageDataObject: { _alias: { @@ -4313,13 +4393,13 @@ export default { ipfsContentId: 'Bytes' }, /** - * Lookup583: pallet_storage::DistributionBucketFamilyRecord + * Lookup580: pallet_storage::DistributionBucketFamilyRecord **/ PalletStorageDistributionBucketFamilyRecord: { nextDistributionBucketIndex: 'u64' }, /** - * Lookup584: pallet_storage::DistributionBucketRecord, frame_support::storage::bounded_btree_set::BoundedBTreeSet> + * Lookup581: pallet_storage::DistributionBucketRecord, bounded_collections::bounded_btree_set::BoundedBTreeSet> **/ PalletStorageDistributionBucketRecord: { acceptingNewBags: 'bool', @@ -4329,13 +4409,13 @@ export default { assignedBags: 'u64' }, /** - * Lookup587: pallet_storage::Error + * Lookup584: pallet_storage::Error **/ PalletStorageError: { _enum: ['ArithmeticError', 'InvalidCidLength', 'NoObjectsOnUpload', 'StorageBucketDoesntExist', 'StorageBucketIsNotBoundToBag', 'StorageBucketIsBoundToBag', 'NoStorageBucketInvitation', 'StorageProviderAlreadySet', 'StorageProviderMustBeSet', 'DifferentStorageProviderInvited', 'InvitedStorageProvider', 'StorageBucketIdCollectionsAreEmpty', 'StorageBucketsNumberViolatesDynamicBagCreationPolicy', 'DistributionBucketsViolatesDynamicBagCreationPolicy', 'EmptyContentId', 'ZeroObjectSize', 'InvalidStateBloatBondSourceAccount', 'InvalidStorageProvider', 'InsufficientBalance', 'DataObjectDoesntExist', 'UploadingBlocked', 'DataObjectIdCollectionIsEmpty', 'SourceAndDestinationBagsAreEqual', 'DataObjectBlacklisted', 'BlacklistSizeLimitExceeded', 'VoucherMaxObjectSizeLimitExceeded', 'VoucherMaxObjectNumberLimitExceeded', 'StorageBucketObjectNumberLimitReached', 'StorageBucketObjectSizeLimitReached', 'InsufficientTreasuryBalance', 'CannotDeleteNonEmptyStorageBucket', 'DataObjectIdParamsAreEmpty', 'StorageBucketsPerBagLimitTooLow', 'StorageBucketsPerBagLimitTooHigh', 'StorageBucketPerBagLimitExceeded', 'StorageBucketDoesntAcceptNewBags', 'DynamicBagExists', 'DynamicBagDoesntExist', 'StorageProviderOperatorDoesntExist', 'DataSizeFeeChanged', 'DataObjectStateBloatBondChanged', 'CannotDeleteNonEmptyDynamicBag', 'MaxDistributionBucketFamilyNumberLimitExceeded', 'DistributionBucketFamilyDoesntExist', 'DistributionBucketDoesntExist', 'DistributionBucketIdCollectionsAreEmpty', 'DistributionBucketDoesntAcceptNewBags', 'MaxDistributionBucketNumberPerBagLimitExceeded', 'DistributionBucketIsNotBoundToBag', 'DistributionBucketIsBoundToBag', 'DistributionBucketsPerBagLimitTooLow', 'DistributionBucketsPerBagLimitTooHigh', 'DistributionProviderOperatorDoesntExist', 'DistributionProviderOperatorAlreadyInvited', 'DistributionProviderOperatorSet', 'NoDistributionBucketInvitation', 'MustBeDistributionProviderOperatorForBucket', 'MaxNumberOfPendingInvitationsLimitForDistributionBucketReached', 'MaxNumberOfOperatorsPerDistributionBucketReached', 'DistributionFamilyBoundToBagCreationPolicy', 'MaxDataObjectSizeExceeded', 'InvalidTransactorAccount', 'NumberOfStorageBucketsOutsideOfAllowedContraints', 'NumberOfDistributionBucketsOutsideOfAllowedContraints', 'CallDisabled'] }, /** - * Lookup588: pallet_project_token::types::AccountData, pallet_common::bloat_bond::RepayableBloatBond, frame_support::storage::bounded_btree_map::BoundedBTreeMap, S>> + * Lookup585: pallet_project_token::types::AccountData, pallet_common::bloat_bond::RepayableBloatBond, bounded_collections::bounded_btree_map::BoundedBTreeMap, S>> **/ PalletProjectTokenAccountData: { vestingSchedules: 'BTreeMap', @@ -4346,14 +4426,14 @@ export default { lastSaleTotalPurchasedAmount: 'Option<(u32,u128)>' }, /** - * Lookup589: pallet_project_token::types::StakingStatus + * Lookup586: pallet_project_token::types::StakingStatus **/ PalletProjectTokenStakingStatus: { splitId: 'u32', amount: 'u128' }, /** - * Lookup591: pallet_project_token::types::VestingSchedule + * Lookup588: pallet_project_token::types::VestingSchedule **/ PalletProjectTokenVestingSchedule: { linearVestingStartBlock: 'u32', @@ -4363,7 +4443,7 @@ export default { burnedAmount: 'u128' }, /** - * Lookup598: pallet_project_token::types::TokenData, MemberId, sp_core::crypto::AccountId32>, pallet_project_token::types::RevenueSplitState> + * Lookup595: pallet_project_token::types::TokenData, MemberId, sp_core::crypto::AccountId32>, pallet_project_token::types::RevenueSplitState> **/ PalletProjectTokenTokenData: { totalSupply: 'u128', @@ -4371,15 +4451,15 @@ export default { nextSaleId: 'u32', sale: 'Option', transferPolicy: 'PalletProjectTokenTransferPolicy', - symbol: 'H256', patronageInfo: 'PalletProjectTokenPatronageData', accountsNumber: 'u64', revenueSplitRate: 'Permill', revenueSplit: 'PalletProjectTokenRevenueSplitState', - nextRevenueSplitId: 'u32' + nextRevenueSplitId: 'u32', + ammCurve: 'Option' }, /** - * Lookup599: pallet_project_token::types::RevenueSplitState + * Lookup596: pallet_project_token::types::RevenueSplitState **/ PalletProjectTokenRevenueSplitState: { _enum: { @@ -4388,7 +4468,7 @@ export default { } }, /** - * Lookup600: pallet_project_token::types::RevenueSplitInfo + * Lookup597: pallet_project_token::types::RevenueSplitInfo **/ PalletProjectTokenRevenueSplitInfo: { allocation: 'u128', @@ -4396,28 +4476,28 @@ export default { dividendsClaimed: 'u128' }, /** - * Lookup601: pallet_project_token::types::Timeline + * Lookup598: pallet_project_token::types::Timeline **/ PalletProjectTokenTimeline: { start: 'u32', duration: 'u32' }, /** - * Lookup603: pallet_project_token::types::PatronageData + * Lookup600: pallet_project_token::types::PatronageData **/ PalletProjectTokenPatronageData: { - rate: 'Perquintill', + rate: 'Permill', unclaimedPatronageTallyAmount: 'u128', lastUnclaimedPatronageTallyBlock: 'u32' }, /** - * Lookup605: pallet_project_token::errors::Error + * Lookup602: pallet_project_token::errors::Error **/ PalletProjectTokenErrorsError: { - _enum: ['ArithmeticError', 'InsufficientTransferrableBalance', 'TokenDoesNotExist', 'AccountInformationDoesNotExist', 'TransferDestinationMemberDoesNotExist', 'MerkleProofVerificationFailure', 'TargetPatronageRateIsHigherThanCurrentRate', 'TokenSymbolAlreadyInUse', 'InitialAllocationToNonExistingMember', 'AccountAlreadyExists', 'TokenIssuanceNotInIdleState', 'InsufficientJoyBalance', 'JoyTransferSubjectToDusting', 'AttemptToRemoveNonOwnedAccountUnderPermissionedMode', 'AttemptToRemoveNonEmptyAccount', 'CannotJoinWhitelistInPermissionlessMode', 'CannotDeissueTokenWithOutstandingAccounts', 'NoUpcomingSale', 'NoActiveSale', 'InsufficientBalanceForTokenPurchase', 'NotEnoughTokensOnSale', 'SaleStartingBlockInThePast', 'SaleAccessProofRequired', 'SaleAccessProofParticipantIsNotSender', 'SalePurchaseCapExceeded', 'MaxVestingSchedulesPerAccountPerTokenReached', 'PreviousSaleNotFinalized', 'NoTokensToRecover', 'SaleDurationTooShort', 'SaleDurationIsZero', 'SaleUpperBoundQuantityIsZero', 'SaleCapPerMemberIsZero', 'SaleUnitPriceIsZero', 'SalePurchaseAmountIsZero', 'RevenueSplitTimeToStartTooShort', 'RevenueSplitDurationTooShort', 'RevenueSplitAlreadyActiveForToken', 'RevenueSplitNotActiveForToken', 'RevenueSplitDidNotEnd', 'RevenueSplitNotOngoing', 'UserAlreadyParticipating', 'InsufficientBalanceForSplitParticipation', 'UserNotParticipantingInAnySplit', 'CannotParticipateInSplitWithZeroAmount', 'CannotIssueSplitWithZeroAllocationAmount', 'CannotModifySupplyWhenRevenueSplitsAreActive', 'RevenueSplitRateIsZero', 'BurnAmountIsZero', 'BurnAmountGreaterThanAccountTokensAmount'] + _enum: ['ArithmeticError', 'InsufficientTransferrableBalance', 'TokenDoesNotExist', 'AccountInformationDoesNotExist', 'TransferDestinationMemberDoesNotExist', 'MerkleProofVerificationFailure', 'TokenSymbolAlreadyInUse', 'InitialAllocationToNonExistingMember', 'AccountAlreadyExists', 'TooManyTransferOutputs', 'TokenIssuanceNotInIdleState', 'InsufficientJoyBalance', 'JoyTransferSubjectToDusting', 'AttemptToRemoveNonOwnedAccountUnderPermissionedMode', 'AttemptToRemoveNonEmptyAccount', 'CannotJoinWhitelistInPermissionlessMode', 'CannotDeissueTokenWithOutstandingAccounts', 'NoUpcomingSale', 'NoActiveSale', 'InsufficientBalanceForTokenPurchase', 'NotEnoughTokensOnSale', 'SaleStartingBlockInThePast', 'SaleAccessProofRequired', 'SaleAccessProofParticipantIsNotSender', 'SalePurchaseCapExceeded', 'MaxVestingSchedulesPerAccountPerTokenReached', 'PreviousSaleNotFinalized', 'NoTokensToRecover', 'SaleDurationTooShort', 'SaleDurationIsZero', 'SaleUpperBoundQuantityIsZero', 'SaleCapPerMemberIsZero', 'SaleUnitPriceIsZero', 'SalePurchaseAmountIsZero', 'CannotInitSaleIfAmmIsActive', 'RevenueSplitTimeToStartTooShort', 'RevenueSplitDurationTooShort', 'RevenueSplitAlreadyActiveForToken', 'RevenueSplitNotActiveForToken', 'RevenueSplitDidNotEnd', 'RevenueSplitNotOngoing', 'UserAlreadyParticipating', 'InsufficientBalanceForSplitParticipation', 'UserNotParticipantingInAnySplit', 'CannotParticipateInSplitWithZeroAmount', 'CannotIssueSplitWithZeroAllocationAmount', 'CannotModifySupplyWhenRevenueSplitsAreActive', 'RevenueSplitRateIsZero', 'BurnAmountIsZero', 'BurnAmountGreaterThanAccountTokensAmount', 'NotInAmmState', 'InvalidCurveParameters', 'DeadlineExpired', 'SlippageToleranceExceeded', 'InsufficientTokenBalance', 'OutstandingAmmProvidedSupplyTooLarge', 'CurveSlopeParametersTooLow', 'NotEnoughTokenMintedByAmmForThisSale', 'TargetPatronageRateIsHigherThanCurrentRate', 'YearlyPatronageRateLimitExceeded', 'PalletFrozen'] }, /** - * Lookup606: pallet_proposals_engine::types::Proposal + * Lookup603: pallet_proposals_engine::types::Proposal **/ PalletProposalsEngineProposal: { parameters: 'PalletProposalsEngineProposalParameters', @@ -4430,7 +4510,7 @@ export default { stakingAccountId: 'Option' }, /** - * Lookup607: pallet_proposals_engine::types::ProposalParameters + * Lookup604: pallet_proposals_engine::types::ProposalParameters **/ PalletProposalsEngineProposalParameters: { votingPeriod: 'u32', @@ -4443,7 +4523,7 @@ export default { constitutionality: 'u32' }, /** - * Lookup608: pallet_proposals_engine::types::VotingResults + * Lookup605: pallet_proposals_engine::types::VotingResults **/ PalletProposalsEngineVotingResults: { abstentions: 'u32', @@ -4452,13 +4532,13 @@ export default { slashes: 'u32' }, /** - * Lookup611: pallet_proposals_engine::Error + * Lookup608: pallet_proposals_engine::Error **/ PalletProposalsEngineError: { _enum: ['ArithmeticError', 'EmptyTitleProvided', 'EmptyDescriptionProvided', 'TitleIsTooLong', 'DescriptionIsTooLong', 'ProposalNotFound', 'ProposalFinalized', 'AlreadyVoted', 'NotAuthor', 'MaxActiveProposalNumberExceeded', 'EmptyStake', 'StakeShouldBeEmpty', 'StakeDiffersFromRequired', 'InvalidParameterApprovalThreshold', 'InvalidParameterSlashingThreshold', 'RequireRootOrigin', 'ProposalHasVotes', 'ZeroExactExecutionBlock', 'InvalidExactExecutionBlock', 'InsufficientBalanceForStake', 'ConflictingStakes', 'InvalidStakingAccountForMember', 'MaxDispatchableCallCodeSizeExceeded'] }, /** - * Lookup612: pallet_proposals_discussion::types::DiscussionThread> + * Lookup609: pallet_proposals_discussion::types::DiscussionThread> **/ PalletProposalsDiscussionDiscussionThread: { activatedAt: 'u32', @@ -4466,7 +4546,7 @@ export default { mode: 'PalletProposalsDiscussionThreadModeBoundedBTreeSet' }, /** - * Lookup614: pallet_proposals_discussion::types::ThreadMode> + * Lookup611: pallet_proposals_discussion::types::ThreadMode> **/ PalletProposalsDiscussionThreadModeBoundedBTreeSet: { _enum: { @@ -4475,7 +4555,7 @@ export default { } }, /** - * Lookup615: pallet_proposals_discussion::types::DiscussionPost> + * Lookup612: pallet_proposals_discussion::types::DiscussionPost> **/ PalletProposalsDiscussionDiscussionPost: { authorId: 'u64', @@ -4483,19 +4563,19 @@ export default { lastEdited: 'u32' }, /** - * Lookup616: pallet_proposals_discussion::Error + * Lookup613: pallet_proposals_discussion::Error **/ PalletProposalsDiscussionError: { _enum: ['ArithmeticError', 'ThreadDoesntExist', 'PostDoesntExist', 'RequireRootOrigin', 'CannotPostOnClosedThread', 'NotAuthorOrCouncilor', 'MaxWhiteListSizeExceeded', 'WhitelistedMemberDoesNotExist', 'InsufficientBalanceForPost', 'CannotDeletePost'] }, /** - * Lookup617: pallet_proposals_codex::Error + * Lookup614: pallet_proposals_codex::Error **/ PalletProposalsCodexError: { _enum: ['SignalProposalIsEmpty', 'RuntimeProposalIsEmpty', 'InvalidFundingRequestProposalBalance', 'InvalidValidatorCount', 'RequireRootOrigin', 'InvalidCouncilElectionParameterCouncilSize', 'InvalidCouncilElectionParameterCandidacyLimit', 'InvalidCouncilElectionParameterMinVotingStake', 'InvalidCouncilElectionParameterNewTermDuration', 'InvalidCouncilElectionParameterMinCouncilStake', 'InvalidCouncilElectionParameterRevealingPeriod', 'InvalidCouncilElectionParameterVotingPeriod', 'InvalidCouncilElectionParameterAnnouncingPeriod', 'InvalidWorkingGroupBudgetCapacity', 'InvalidSetLeadParameterCannotBeCouncilor', 'SlashingStakeIsZero', 'DecreasingStakeIsZero', 'InsufficientFundsForBudgetUpdate', 'InvalidFundingRequestProposalNumberOfAccount', 'InvalidFundingRequestProposalRepeatedAccount', 'InvalidChannelPayoutsProposalMinCashoutExceedsMaxCashout', 'InvalidLeadWorkerId', 'InvalidLeadOpeningId', 'InvalidLeadApplicationId', 'InvalidProposalId', 'ArithmeticError'] }, /** - * Lookup618: pallet_working_group::types::Opening + * Lookup615: pallet_working_group::types::Opening **/ PalletWorkingGroupOpening: { openingType: 'PalletWorkingGroupOpeningType', @@ -4506,7 +4586,7 @@ export default { creationStake: 'u128' }, /** - * Lookup619: pallet_working_group::types::JobApplication + * Lookup616: pallet_working_group::types::JobApplication **/ PalletWorkingGroupJobApplication: { roleAccountId: 'AccountId32', @@ -4517,7 +4597,7 @@ export default { openingId: 'u64' }, /** - * Lookup620: pallet_working_group::types::GroupWorker + * Lookup617: pallet_working_group::types::GroupWorker **/ PalletWorkingGroupGroupWorker: { memberId: 'u64', @@ -4531,13 +4611,13 @@ export default { createdAt: 'u32' }, /** - * Lookup621: pallet_working_group::errors::Error + * Lookup618: pallet_working_group::errors::Error **/ PalletWorkingGroupErrorsError: { _enum: ['ArithmeticError', 'StakeBalanceCannotBeZero', 'OpeningDoesNotExist', 'CannotHireMultipleLeaders', 'WorkerApplicationDoesNotExist', 'MaxActiveWorkerNumberExceeded', 'SuccessfulWorkerApplicationDoesNotExist', 'CannotHireLeaderWhenLeaderExists', 'IsNotLeadAccount', 'CurrentLeadNotSet', 'WorkerDoesNotExist', 'InvalidMemberOrigin', 'SignerIsNotWorkerRoleAccount', 'BelowMinimumStakes', 'InsufficientBalanceToCoverStake', 'ApplicationStakeDoesntMatchOpening', 'OriginIsNotApplicant', 'WorkerIsLeaving', 'CannotRewardWithZero', 'InvalidStakingAccountForMember', 'ConflictStakesOnAccount', 'WorkerHasNoReward', 'UnstakingPeriodLessThanMinimum', 'CannotSpendZero', 'InsufficientBudgetForSpending', 'NoApplicationsProvided', 'CannotDecreaseStakeDeltaGreaterThanStake', 'ApplicationsNotForOpening', 'WorkerStorageValueTooLong', 'InsufficientTokensForFunding', 'ZeroTokensFunding', 'InsufficientBalanceForTransfer'] }, /** - * Lookup631: sp_runtime::MultiSignature + * Lookup628: sp_runtime::MultiSignature **/ SpRuntimeMultiSignature: { _enum: { @@ -4547,39 +4627,39 @@ export default { } }, /** - * Lookup632: sp_core::ecdsa::Signature + * Lookup629: sp_core::ecdsa::Signature **/ SpCoreEcdsaSignature: '[u8;65]', /** - * Lookup635: frame_system::extensions::check_non_zero_sender::CheckNonZeroSender + * Lookup632: frame_system::extensions::check_non_zero_sender::CheckNonZeroSender **/ FrameSystemExtensionsCheckNonZeroSender: 'Null', /** - * Lookup636: frame_system::extensions::check_spec_version::CheckSpecVersion + * Lookup633: frame_system::extensions::check_spec_version::CheckSpecVersion **/ FrameSystemExtensionsCheckSpecVersion: 'Null', /** - * Lookup637: frame_system::extensions::check_tx_version::CheckTxVersion + * Lookup634: frame_system::extensions::check_tx_version::CheckTxVersion **/ FrameSystemExtensionsCheckTxVersion: 'Null', /** - * Lookup638: frame_system::extensions::check_genesis::CheckGenesis + * Lookup635: frame_system::extensions::check_genesis::CheckGenesis **/ FrameSystemExtensionsCheckGenesis: 'Null', /** - * Lookup641: frame_system::extensions::check_nonce::CheckNonce + * Lookup638: frame_system::extensions::check_nonce::CheckNonce **/ FrameSystemExtensionsCheckNonce: 'Compact', /** - * Lookup642: frame_system::extensions::check_weight::CheckWeight + * Lookup639: frame_system::extensions::check_weight::CheckWeight **/ FrameSystemExtensionsCheckWeight: 'Null', /** - * Lookup643: pallet_transaction_payment::ChargeTransactionPayment + * Lookup640: pallet_transaction_payment::ChargeTransactionPayment **/ PalletTransactionPaymentChargeTransactionPayment: 'Compact', /** - * Lookup644: joystream_node_runtime::Runtime + * Lookup641: joystream_node_runtime::Runtime **/ JoystreamNodeRuntimeRuntime: 'Null' }; diff --git a/types/src/augment/registry.ts b/types/src/augment/registry.ts index 2d0e9dfdde..3326ba6ab0 100644 --- a/types/src/augment/registry.ts +++ b/types/src/augment/registry.ts @@ -1,23 +1,26 @@ // Auto-generated via `yarn polkadot-types-from-defs`, do not edit /* eslint-disable */ -import type { FinalityGrandpaEquivocationPrecommit, FinalityGrandpaEquivocationPrevote, FinalityGrandpaPrecommit, FinalityGrandpaPrevote, FrameSupportDispatchRawOrigin, FrameSupportTokensMiscBalanceStatus, FrameSupportWeightsDispatchClass, FrameSupportWeightsDispatchInfo, FrameSupportWeightsPays, FrameSupportWeightsPerDispatchClassU32, FrameSupportWeightsPerDispatchClassU64, FrameSupportWeightsPerDispatchClassWeightsPerClass, FrameSupportWeightsRuntimeDbWeight, FrameSystemAccountInfo, FrameSystemCall, FrameSystemError, FrameSystemEvent, FrameSystemEventRecord, FrameSystemExtensionsCheckGenesis, FrameSystemExtensionsCheckNonZeroSender, FrameSystemExtensionsCheckNonce, FrameSystemExtensionsCheckSpecVersion, FrameSystemExtensionsCheckTxVersion, FrameSystemExtensionsCheckWeight, FrameSystemLastRuntimeUpgradeInfo, FrameSystemLimitsBlockLength, FrameSystemLimitsBlockWeights, FrameSystemLimitsWeightsPerClass, FrameSystemPhase, JoystreamNodeRuntimeNposSolution16, JoystreamNodeRuntimeOriginCaller, JoystreamNodeRuntimeRuntime, JoystreamNodeRuntimeSessionKeys, PalletAuthorshipCall, PalletAuthorshipError, PalletAuthorshipUncleEntryItem, PalletBabeCall, PalletBabeError, PalletBagsListCall, PalletBagsListError, PalletBagsListEvent, PalletBagsListListBag, PalletBagsListListListError, PalletBagsListListNode, PalletBalancesAccountData, PalletBalancesBalanceLock, PalletBalancesCall, PalletBalancesError, PalletBalancesEvent, PalletBalancesReasons, PalletBalancesReleases, PalletBalancesReserveData, PalletBountyAssuranceContractTypeBTreeSet, PalletBountyAssuranceContractTypeBoundedBTreeSet, PalletBountyBountyActor, PalletBountyBountyMilestone, PalletBountyBountyParametersBTreeSet, PalletBountyBountyParametersBoundedBTreeSet, PalletBountyBountyRecord, PalletBountyCall, PalletBountyContribution, PalletBountyEntryRecord, PalletBountyError, PalletBountyFundingType, PalletBountyOracleWorkEntryJudgment, PalletBountyRawEvent, PalletCommonBalanceKind, PalletCommonBloatBondRepayableBloatBond, PalletCommonFundingRequestParameters, PalletCommonMerkleTreeProofElementRecord, PalletCommonMerkleTreeSide, PalletCommonWorkingGroupIterableEnumsWorkingGroup, PalletConstitutionCall, PalletConstitutionConstitutionInfo, PalletConstitutionRawEvent, PalletContentCall, PalletContentChannelBagWitness, PalletContentChannelCreationParametersRecord, PalletContentChannelFundsDestination, PalletContentChannelOwner, PalletContentChannelPayoutsPayloadParametersRecord, PalletContentChannelRecord, PalletContentChannelTransferStatus, PalletContentChannelUpdateParametersRecord, PalletContentErrorsError, PalletContentInitTransferParameters, PalletContentIterableEnumsChannelActionPermission, PalletContentLimitPerPeriod, PalletContentNftCounter, PalletContentNftLimitPeriod, PalletContentNftTypesEnglishAuctionBid, PalletContentNftTypesEnglishAuctionParamsRecord, PalletContentNftTypesEnglishAuctionRecord, PalletContentNftTypesInitTransactionalStatusRecord, PalletContentNftTypesNftIssuanceParametersRecord, PalletContentNftTypesNftOwner, PalletContentNftTypesOpenAuctionBidRecord, PalletContentNftTypesOpenAuctionParamsRecord, PalletContentNftTypesOpenAuctionRecord, PalletContentNftTypesOwnedNft, PalletContentNftTypesTransactionalStatusRecord, PalletContentPendingTransfer, PalletContentPermissionsContentActor, PalletContentPermissionsCuratorGroupCuratorGroupRecord, PalletContentPermissionsCuratorGroupIterableEnumsContentModerationAction, PalletContentPermissionsCuratorGroupIterableEnumsPausableChannelFeature, PalletContentPullPaymentElement, PalletContentRawEvent, PalletContentStorageAssetsRecord, PalletContentTransferCommitmentParametersBTreeMap, PalletContentTransferCommitmentParametersBoundedBTreeMap, PalletContentUpdateChannelPayoutsParametersRecord, PalletContentVideoCreationParametersRecord, PalletContentVideoRecord, PalletContentVideoUpdateParametersRecord, PalletCouncilCall, PalletCouncilCandidate, PalletCouncilCouncilMember, PalletCouncilCouncilStage, PalletCouncilCouncilStageAnnouncing, PalletCouncilCouncilStageElection, PalletCouncilCouncilStageIdle, PalletCouncilCouncilStageUpdate, PalletCouncilError, PalletCouncilRawEvent, PalletElectionProviderMultiPhaseCall, PalletElectionProviderMultiPhaseElectionCompute, PalletElectionProviderMultiPhaseError, PalletElectionProviderMultiPhaseEvent, PalletElectionProviderMultiPhasePhase, PalletElectionProviderMultiPhaseRawSolution, PalletElectionProviderMultiPhaseReadySolution, PalletElectionProviderMultiPhaseRoundSnapshot, PalletElectionProviderMultiPhaseSignedSignedSubmission, PalletElectionProviderMultiPhaseSolutionOrSnapshotSize, PalletForumCall, PalletForumCategory, PalletForumError, PalletForumExtendedPostIdObject, PalletForumPost, PalletForumPrivilegedActor, PalletForumRawEvent, PalletForumThread, PalletGrandpaCall, PalletGrandpaError, PalletGrandpaEvent, PalletGrandpaStoredPendingChange, PalletGrandpaStoredState, PalletImOnlineBoundedOpaqueNetworkState, PalletImOnlineCall, PalletImOnlineError, PalletImOnlineEvent, PalletImOnlineHeartbeat, PalletImOnlineSr25519AppSr25519Public, PalletImOnlineSr25519AppSr25519Signature, PalletMembershipBuyMembershipParameters, PalletMembershipCall, PalletMembershipCreateMemberParameters, PalletMembershipError, PalletMembershipGiftMembershipParameters, PalletMembershipInviteMembershipParameters, PalletMembershipMembershipObject, PalletMembershipRawEvent, PalletMembershipStakingAccountMemberBinding, PalletMultisigCall, PalletMultisigError, PalletMultisigEvent, PalletMultisigMultisig, PalletMultisigTimepoint, PalletOffencesEvent, PalletProjectTokenAccountData, PalletProjectTokenCall, PalletProjectTokenErrorsError, PalletProjectTokenEventsRawEvent, PalletProjectTokenMerkleProof, PalletProjectTokenMerkleSide, PalletProjectTokenPatronageData, PalletProjectTokenPayment, PalletProjectTokenPaymentWithVesting, PalletProjectTokenRevenueSplitInfo, PalletProjectTokenRevenueSplitState, PalletProjectTokenSingleDataObjectUploadParams, PalletProjectTokenStakingStatus, PalletProjectTokenTimeline, PalletProjectTokenTokenAllocation, PalletProjectTokenTokenData, PalletProjectTokenTokenIssuanceParameters, PalletProjectTokenTokenSale, PalletProjectTokenTokenSaleParams, PalletProjectTokenTransferPolicy, PalletProjectTokenTransferPolicyParams, PalletProjectTokenTransfersPayment, PalletProjectTokenTransfersPaymentWithVesting, PalletProjectTokenValidated, PalletProjectTokenValidatedPayment, PalletProjectTokenVestingSchedule, PalletProjectTokenVestingScheduleParams, PalletProjectTokenVestingSource, PalletProjectTokenWhitelistParams, PalletProposalsCodexCall, PalletProposalsCodexCreateOpeningParameters, PalletProposalsCodexError, PalletProposalsCodexFillOpeningParameters, PalletProposalsCodexGeneralProposalParams, PalletProposalsCodexProposalDetails, PalletProposalsCodexRawEvent, PalletProposalsCodexTerminateRoleParameters, PalletProposalsDiscussionCall, PalletProposalsDiscussionDiscussionPost, PalletProposalsDiscussionDiscussionThread, PalletProposalsDiscussionError, PalletProposalsDiscussionRawEvent, PalletProposalsDiscussionThreadModeBTreeSet, PalletProposalsDiscussionThreadModeBoundedBTreeSet, PalletProposalsEngineCall, PalletProposalsEngineError, PalletProposalsEngineProposal, PalletProposalsEngineProposalParameters, PalletProposalsEngineProposalStatusesApprovedProposalDecision, PalletProposalsEngineProposalStatusesExecutionStatus, PalletProposalsEngineProposalStatusesProposalDecision, PalletProposalsEngineProposalStatusesProposalStatus, PalletProposalsEngineRawEvent, PalletProposalsEngineVoteKind, PalletProposalsEngineVotingResults, PalletReferendumCall, PalletReferendumCastVote, PalletReferendumError, PalletReferendumInstance1, PalletReferendumOptionResult, PalletReferendumRawEvent, PalletReferendumReferendumStage, PalletReferendumReferendumStageRevealing, PalletReferendumReferendumStageVoting, PalletSessionCall, PalletSessionError, PalletSessionEvent, PalletStakingActiveEraInfo, PalletStakingEraRewardPoints, PalletStakingExposure, PalletStakingForcing, PalletStakingIndividualExposure, PalletStakingNominations, PalletStakingPalletCall, PalletStakingPalletConfigOpPerbill, PalletStakingPalletConfigOpPercent, PalletStakingPalletConfigOpU128, PalletStakingPalletConfigOpU32, PalletStakingPalletError, PalletStakingPalletEvent, PalletStakingReleases, PalletStakingRewardDestination, PalletStakingSlashingSlashingSpans, PalletStakingSlashingSpanRecord, PalletStakingStakingLedger, PalletStakingUnappliedSlash, PalletStakingUnlockChunk, PalletStakingValidatorPrefs, PalletStorageBagIdType, PalletStorageBagRecord, PalletStorageCall, PalletStorageDataObject, PalletStorageDataObjectCreationParameters, PalletStorageDistributionBucketFamilyRecord, PalletStorageDistributionBucketIdRecord, PalletStorageDistributionBucketRecord, PalletStorageDynBagCreationParametersRecord, PalletStorageDynamicBagCreationPolicy, PalletStorageDynamicBagIdType, PalletStorageDynamicBagType, PalletStorageError, PalletStorageRawEvent, PalletStorageStaticBagId, PalletStorageStorageBucketOperatorStatus, PalletStorageStorageBucketRecord, PalletStorageUploadParametersRecord, PalletStorageVoucher, PalletTimestampCall, PalletTransactionPaymentChargeTransactionPayment, PalletTransactionPaymentReleases, PalletUtilityCall, PalletUtilityError, PalletUtilityEvent, PalletUtilityRawEvent, PalletVestingCall, PalletVestingError, PalletVestingEvent, PalletVestingReleases, PalletVestingVestingInfo, PalletWorkingGroupApplyOnOpeningParams, PalletWorkingGroupCall, PalletWorkingGroupErrorsError, PalletWorkingGroupGroupWorker, PalletWorkingGroupInstance1, PalletWorkingGroupInstance2, PalletWorkingGroupInstance3, PalletWorkingGroupInstance4, PalletWorkingGroupInstance5, PalletWorkingGroupInstance6, PalletWorkingGroupInstance7, PalletWorkingGroupInstance8, PalletWorkingGroupInstance9, PalletWorkingGroupJobApplication, PalletWorkingGroupOpening, PalletWorkingGroupOpeningType, PalletWorkingGroupRawEventInstance1, PalletWorkingGroupRawEventInstance2, PalletWorkingGroupRawEventInstance3, PalletWorkingGroupRawEventInstance4, PalletWorkingGroupRawEventInstance5, PalletWorkingGroupRawEventInstance6, PalletWorkingGroupRawEventInstance7, PalletWorkingGroupRawEventInstance8, PalletWorkingGroupRawEventInstance9, PalletWorkingGroupRewardPaymentType, PalletWorkingGroupStakeParameters, PalletWorkingGroupStakePolicy, SpAuthorityDiscoveryAppPublic, SpConsensusBabeAllowedSlots, SpConsensusBabeAppPublic, SpConsensusBabeBabeEpochConfiguration, SpConsensusBabeDigestsNextConfigDescriptor, SpConsensusBabeDigestsPreDigest, SpConsensusBabeDigestsPrimaryPreDigest, SpConsensusBabeDigestsSecondaryPlainPreDigest, SpConsensusBabeDigestsSecondaryVRFPreDigest, SpConsensusSlotsEquivocationProof, SpCoreCryptoKeyTypeId, SpCoreEcdsaSignature, SpCoreEd25519Public, SpCoreEd25519Signature, SpCoreOffchainOpaqueNetworkState, SpCoreSr25519Public, SpCoreSr25519Signature, SpCoreVoid, SpFinalityGrandpaAppPublic, SpFinalityGrandpaAppSignature, SpFinalityGrandpaEquivocation, SpFinalityGrandpaEquivocationProof, SpNposElectionsElectionScore, SpNposElectionsSupport, SpRuntimeArithmeticError, SpRuntimeBlakeTwo256, SpRuntimeDigest, SpRuntimeDigestDigestItem, SpRuntimeDispatchError, SpRuntimeHeader, SpRuntimeModuleError, SpRuntimeMultiSignature, SpRuntimeTokenError, SpRuntimeTransactionalError, SpSessionMembershipProof, SpStakingOffenceOffenceDetails, SpVersionRuntimeVersion } from '@polkadot/types/lookup'; +// import type lookup before we augment - in some environments +// this is required to allow for ambient/previous definitions +import '@polkadot/types/types/registry'; + +import type { FinalityGrandpaEquivocationPrecommit, FinalityGrandpaEquivocationPrevote, FinalityGrandpaPrecommit, FinalityGrandpaPrevote, FrameSupportDispatchDispatchClass, FrameSupportDispatchDispatchInfo, FrameSupportDispatchPays, FrameSupportDispatchPerDispatchClassU32, FrameSupportDispatchPerDispatchClassWeight, FrameSupportDispatchPerDispatchClassWeightsPerClass, FrameSupportDispatchRawOrigin, FrameSupportTokensMiscBalanceStatus, FrameSystemAccountInfo, FrameSystemCall, FrameSystemError, FrameSystemEvent, FrameSystemEventRecord, FrameSystemExtensionsCheckGenesis, FrameSystemExtensionsCheckNonZeroSender, FrameSystemExtensionsCheckNonce, FrameSystemExtensionsCheckSpecVersion, FrameSystemExtensionsCheckTxVersion, FrameSystemExtensionsCheckWeight, FrameSystemLastRuntimeUpgradeInfo, FrameSystemLimitsBlockLength, FrameSystemLimitsBlockWeights, FrameSystemLimitsWeightsPerClass, FrameSystemPhase, JoystreamNodeRuntimeNposSolution16, JoystreamNodeRuntimeOriginCaller, JoystreamNodeRuntimeRuntime, JoystreamNodeRuntimeSessionKeys, PalletBabeCall, PalletBabeError, PalletBagsListCall, PalletBagsListError, PalletBagsListEvent, PalletBagsListListBag, PalletBagsListListListError, PalletBagsListListNode, PalletBalancesAccountData, PalletBalancesBalanceLock, PalletBalancesCall, PalletBalancesError, PalletBalancesEvent, PalletBalancesReasons, PalletBalancesReserveData, PalletBountyAssuranceContractTypeBTreeSet, PalletBountyAssuranceContractTypeBoundedBTreeSet, PalletBountyBountyActor, PalletBountyBountyMilestone, PalletBountyBountyParametersBTreeSet, PalletBountyBountyParametersBoundedBTreeSet, PalletBountyBountyRecord, PalletBountyCall, PalletBountyContribution, PalletBountyEntryRecord, PalletBountyError, PalletBountyFundingType, PalletBountyOracleWorkEntryJudgment, PalletBountyRawEvent, PalletCommonBalanceKind, PalletCommonBloatBondRepayableBloatBond, PalletCommonFreezablePallet, PalletCommonFundingRequestParameters, PalletCommonMerkleTreeProofElementRecord, PalletCommonMerkleTreeSide, PalletCommonWorkingGroupIterableEnumsWorkingGroup, PalletConstitutionCall, PalletConstitutionConstitutionInfo, PalletConstitutionRawEvent, PalletContentCall, PalletContentChannelBagWitness, PalletContentChannelCreationParametersRecord, PalletContentChannelFundsDestination, PalletContentChannelOwner, PalletContentChannelPayoutsPayloadParametersRecord, PalletContentChannelRecord, PalletContentChannelTransferStatus, PalletContentChannelUpdateParametersRecord, PalletContentErrorsError, PalletContentInitTransferParameters, PalletContentIterableEnumsChannelActionPermission, PalletContentLimitPerPeriod, PalletContentNftCounter, PalletContentNftLimitPeriod, PalletContentNftTypesEnglishAuctionBid, PalletContentNftTypesEnglishAuctionParamsRecord, PalletContentNftTypesEnglishAuctionRecord, PalletContentNftTypesInitTransactionalStatusRecord, PalletContentNftTypesNftIssuanceParametersRecord, PalletContentNftTypesNftOwner, PalletContentNftTypesOpenAuctionBidRecord, PalletContentNftTypesOpenAuctionParamsRecord, PalletContentNftTypesOpenAuctionRecord, PalletContentNftTypesOwnedNft, PalletContentNftTypesTransactionalStatusRecord, PalletContentPendingTransfer, PalletContentPermissionsContentActor, PalletContentPermissionsCuratorGroupCuratorGroupRecord, PalletContentPermissionsCuratorGroupIterableEnumsContentModerationAction, PalletContentPermissionsCuratorGroupIterableEnumsPausableChannelFeature, PalletContentPullPaymentElement, PalletContentRawEvent, PalletContentStorageAssetsRecord, PalletContentTransferCommitmentParametersBTreeMap, PalletContentTransferCommitmentParametersBoundedBTreeMap, PalletContentUpdateChannelPayoutsParametersRecord, PalletContentVideoCreationParametersRecord, PalletContentVideoRecord, PalletContentVideoUpdateParametersRecord, PalletCouncilCall, PalletCouncilCandidate, PalletCouncilCouncilMember, PalletCouncilCouncilStage, PalletCouncilCouncilStageAnnouncing, PalletCouncilCouncilStageElection, PalletCouncilCouncilStageIdle, PalletCouncilCouncilStageUpdate, PalletCouncilError, PalletCouncilRawEvent, PalletElectionProviderMultiPhaseCall, PalletElectionProviderMultiPhaseElectionCompute, PalletElectionProviderMultiPhaseError, PalletElectionProviderMultiPhaseEvent, PalletElectionProviderMultiPhasePhase, PalletElectionProviderMultiPhaseRawSolution, PalletElectionProviderMultiPhaseReadySolution, PalletElectionProviderMultiPhaseRoundSnapshot, PalletElectionProviderMultiPhaseSignedSignedSubmission, PalletElectionProviderMultiPhaseSolutionOrSnapshotSize, PalletForumCall, PalletForumCategory, PalletForumError, PalletForumExtendedPostIdObject, PalletForumPost, PalletForumPrivilegedActor, PalletForumRawEvent, PalletForumThread, PalletGrandpaCall, PalletGrandpaError, PalletGrandpaEvent, PalletGrandpaStoredPendingChange, PalletGrandpaStoredState, PalletImOnlineBoundedOpaqueNetworkState, PalletImOnlineCall, PalletImOnlineError, PalletImOnlineEvent, PalletImOnlineHeartbeat, PalletImOnlineSr25519AppSr25519Public, PalletImOnlineSr25519AppSr25519Signature, PalletJoystreamUtilityCall, PalletJoystreamUtilityError, PalletJoystreamUtilityRawEvent, PalletMembershipBuyMembershipParameters, PalletMembershipCall, PalletMembershipCreateMemberParameters, PalletMembershipError, PalletMembershipGiftMembershipParameters, PalletMembershipInviteMembershipParameters, PalletMembershipMembershipObject, PalletMembershipRawEvent, PalletMembershipStakingAccountMemberBinding, PalletMultisigCall, PalletMultisigError, PalletMultisigEvent, PalletMultisigMultisig, PalletMultisigTimepoint, PalletOffencesEvent, PalletProjectTokenAccountData, PalletProjectTokenAmmCurve, PalletProjectTokenAmmParams, PalletProjectTokenCall, PalletProjectTokenErrorsError, PalletProjectTokenEventsRawEvent, PalletProjectTokenMerkleProof, PalletProjectTokenMerkleSide, PalletProjectTokenPatronageData, PalletProjectTokenPaymentWithVesting, PalletProjectTokenRevenueSplitInfo, PalletProjectTokenRevenueSplitState, PalletProjectTokenSingleDataObjectUploadParams, PalletProjectTokenStakingStatus, PalletProjectTokenTimeline, PalletProjectTokenTokenAllocation, PalletProjectTokenTokenData, PalletProjectTokenTokenIssuanceParameters, PalletProjectTokenTokenSale, PalletProjectTokenTokenSaleParams, PalletProjectTokenTransferPolicy, PalletProjectTokenTransferPolicyParams, PalletProjectTokenTransfers, PalletProjectTokenValidated, PalletProjectTokenValidatedPayment, PalletProjectTokenVestingSchedule, PalletProjectTokenVestingScheduleParams, PalletProjectTokenVestingSource, PalletProjectTokenWhitelistParams, PalletProposalsCodexCall, PalletProposalsCodexCreateOpeningParameters, PalletProposalsCodexError, PalletProposalsCodexFillOpeningParameters, PalletProposalsCodexGeneralProposalParams, PalletProposalsCodexProposalDetails, PalletProposalsCodexRawEvent, PalletProposalsCodexTerminateRoleParameters, PalletProposalsDiscussionCall, PalletProposalsDiscussionDiscussionPost, PalletProposalsDiscussionDiscussionThread, PalletProposalsDiscussionError, PalletProposalsDiscussionRawEvent, PalletProposalsDiscussionThreadModeBTreeSet, PalletProposalsDiscussionThreadModeBoundedBTreeSet, PalletProposalsEngineCall, PalletProposalsEngineError, PalletProposalsEngineProposal, PalletProposalsEngineProposalParameters, PalletProposalsEngineProposalStatusesApprovedProposalDecision, PalletProposalsEngineProposalStatusesExecutionStatus, PalletProposalsEngineProposalStatusesProposalDecision, PalletProposalsEngineProposalStatusesProposalStatus, PalletProposalsEngineRawEvent, PalletProposalsEngineVoteKind, PalletProposalsEngineVotingResults, PalletReferendumCall, PalletReferendumCastVote, PalletReferendumError, PalletReferendumInstance1, PalletReferendumOptionResult, PalletReferendumRawEvent, PalletReferendumReferendumStage, PalletReferendumReferendumStageRevealing, PalletReferendumReferendumStageVoting, PalletSessionCall, PalletSessionError, PalletSessionEvent, PalletStakingActiveEraInfo, PalletStakingEraRewardPoints, PalletStakingExposure, PalletStakingForcing, PalletStakingIndividualExposure, PalletStakingNominations, PalletStakingPalletCall, PalletStakingPalletConfigOpPerbill, PalletStakingPalletConfigOpPercent, PalletStakingPalletConfigOpU128, PalletStakingPalletConfigOpU32, PalletStakingPalletError, PalletStakingPalletEvent, PalletStakingRewardDestination, PalletStakingSlashingSlashingSpans, PalletStakingSlashingSpanRecord, PalletStakingStakingLedger, PalletStakingUnappliedSlash, PalletStakingUnlockChunk, PalletStakingValidatorPrefs, PalletStorageBagIdType, PalletStorageBagRecord, PalletStorageCall, PalletStorageDataObject, PalletStorageDataObjectCreationParameters, PalletStorageDistributionBucketFamilyRecord, PalletStorageDistributionBucketIdRecord, PalletStorageDistributionBucketRecord, PalletStorageDynBagCreationParametersRecord, PalletStorageDynamicBagCreationPolicy, PalletStorageDynamicBagIdType, PalletStorageDynamicBagType, PalletStorageError, PalletStorageRawEvent, PalletStorageStaticBagId, PalletStorageStorageBucketOperatorStatus, PalletStorageStorageBucketRecord, PalletStorageUploadParametersRecord, PalletStorageVoucher, PalletTimestampCall, PalletTransactionPaymentChargeTransactionPayment, PalletTransactionPaymentEvent, PalletTransactionPaymentReleases, PalletUtilityCall, PalletUtilityError, PalletUtilityEvent, PalletVestingCall, PalletVestingError, PalletVestingEvent, PalletVestingReleases, PalletVestingVestingInfo, PalletWorkingGroupApplyOnOpeningParams, PalletWorkingGroupCall, PalletWorkingGroupErrorsError, PalletWorkingGroupGroupWorker, PalletWorkingGroupInstance1, PalletWorkingGroupInstance2, PalletWorkingGroupInstance3, PalletWorkingGroupInstance4, PalletWorkingGroupInstance5, PalletWorkingGroupInstance6, PalletWorkingGroupInstance7, PalletWorkingGroupInstance8, PalletWorkingGroupInstance9, PalletWorkingGroupJobApplication, PalletWorkingGroupOpening, PalletWorkingGroupOpeningType, PalletWorkingGroupRawEventInstance1, PalletWorkingGroupRawEventInstance2, PalletWorkingGroupRawEventInstance3, PalletWorkingGroupRawEventInstance4, PalletWorkingGroupRawEventInstance5, PalletWorkingGroupRawEventInstance6, PalletWorkingGroupRawEventInstance7, PalletWorkingGroupRawEventInstance8, PalletWorkingGroupRawEventInstance9, PalletWorkingGroupRewardPaymentType, PalletWorkingGroupStakeParameters, PalletWorkingGroupStakePolicy, SpArithmeticArithmeticError, SpAuthorityDiscoveryAppPublic, SpConsensusBabeAllowedSlots, SpConsensusBabeAppPublic, SpConsensusBabeBabeEpochConfiguration, SpConsensusBabeDigestsNextConfigDescriptor, SpConsensusBabeDigestsPreDigest, SpConsensusBabeDigestsPrimaryPreDigest, SpConsensusBabeDigestsSecondaryPlainPreDigest, SpConsensusBabeDigestsSecondaryVRFPreDigest, SpConsensusGrandpaAppPublic, SpConsensusGrandpaAppSignature, SpConsensusGrandpaEquivocation, SpConsensusGrandpaEquivocationProof, SpConsensusSlotsEquivocationProof, SpCoreCryptoKeyTypeId, SpCoreEcdsaSignature, SpCoreEd25519Public, SpCoreEd25519Signature, SpCoreOffchainOpaqueNetworkState, SpCoreSr25519Public, SpCoreSr25519Signature, SpCoreVoid, SpNposElectionsElectionScore, SpNposElectionsSupport, SpRuntimeBlakeTwo256, SpRuntimeDigest, SpRuntimeDigestDigestItem, SpRuntimeDispatchError, SpRuntimeHeader, SpRuntimeModuleError, SpRuntimeMultiSignature, SpRuntimeTokenError, SpRuntimeTransactionalError, SpSessionMembershipProof, SpStakingOffenceOffenceDetails, SpVersionRuntimeVersion, SpWeightsRuntimeDbWeight, SpWeightsWeightV2Weight } from '@polkadot/types/lookup'; declare module '@polkadot/types/types/registry' { - export interface InterfaceTypes { + interface InterfaceTypes { FinalityGrandpaEquivocationPrecommit: FinalityGrandpaEquivocationPrecommit; FinalityGrandpaEquivocationPrevote: FinalityGrandpaEquivocationPrevote; FinalityGrandpaPrecommit: FinalityGrandpaPrecommit; FinalityGrandpaPrevote: FinalityGrandpaPrevote; + FrameSupportDispatchDispatchClass: FrameSupportDispatchDispatchClass; + FrameSupportDispatchDispatchInfo: FrameSupportDispatchDispatchInfo; + FrameSupportDispatchPays: FrameSupportDispatchPays; + FrameSupportDispatchPerDispatchClassU32: FrameSupportDispatchPerDispatchClassU32; + FrameSupportDispatchPerDispatchClassWeight: FrameSupportDispatchPerDispatchClassWeight; + FrameSupportDispatchPerDispatchClassWeightsPerClass: FrameSupportDispatchPerDispatchClassWeightsPerClass; FrameSupportDispatchRawOrigin: FrameSupportDispatchRawOrigin; FrameSupportTokensMiscBalanceStatus: FrameSupportTokensMiscBalanceStatus; - FrameSupportWeightsDispatchClass: FrameSupportWeightsDispatchClass; - FrameSupportWeightsDispatchInfo: FrameSupportWeightsDispatchInfo; - FrameSupportWeightsPays: FrameSupportWeightsPays; - FrameSupportWeightsPerDispatchClassU32: FrameSupportWeightsPerDispatchClassU32; - FrameSupportWeightsPerDispatchClassU64: FrameSupportWeightsPerDispatchClassU64; - FrameSupportWeightsPerDispatchClassWeightsPerClass: FrameSupportWeightsPerDispatchClassWeightsPerClass; - FrameSupportWeightsRuntimeDbWeight: FrameSupportWeightsRuntimeDbWeight; FrameSystemAccountInfo: FrameSystemAccountInfo; FrameSystemCall: FrameSystemCall; FrameSystemError: FrameSystemError; @@ -38,9 +41,6 @@ declare module '@polkadot/types/types/registry' { JoystreamNodeRuntimeOriginCaller: JoystreamNodeRuntimeOriginCaller; JoystreamNodeRuntimeRuntime: JoystreamNodeRuntimeRuntime; JoystreamNodeRuntimeSessionKeys: JoystreamNodeRuntimeSessionKeys; - PalletAuthorshipCall: PalletAuthorshipCall; - PalletAuthorshipError: PalletAuthorshipError; - PalletAuthorshipUncleEntryItem: PalletAuthorshipUncleEntryItem; PalletBabeCall: PalletBabeCall; PalletBabeError: PalletBabeError; PalletBagsListCall: PalletBagsListCall; @@ -55,7 +55,6 @@ declare module '@polkadot/types/types/registry' { PalletBalancesError: PalletBalancesError; PalletBalancesEvent: PalletBalancesEvent; PalletBalancesReasons: PalletBalancesReasons; - PalletBalancesReleases: PalletBalancesReleases; PalletBalancesReserveData: PalletBalancesReserveData; PalletBountyAssuranceContractTypeBTreeSet: PalletBountyAssuranceContractTypeBTreeSet; PalletBountyAssuranceContractTypeBoundedBTreeSet: PalletBountyAssuranceContractTypeBoundedBTreeSet; @@ -73,6 +72,7 @@ declare module '@polkadot/types/types/registry' { PalletBountyRawEvent: PalletBountyRawEvent; PalletCommonBalanceKind: PalletCommonBalanceKind; PalletCommonBloatBondRepayableBloatBond: PalletCommonBloatBondRepayableBloatBond; + PalletCommonFreezablePallet: PalletCommonFreezablePallet; PalletCommonFundingRequestParameters: PalletCommonFundingRequestParameters; PalletCommonMerkleTreeProofElementRecord: PalletCommonMerkleTreeProofElementRecord; PalletCommonMerkleTreeSide: PalletCommonMerkleTreeSide; @@ -160,6 +160,9 @@ declare module '@polkadot/types/types/registry' { PalletImOnlineHeartbeat: PalletImOnlineHeartbeat; PalletImOnlineSr25519AppSr25519Public: PalletImOnlineSr25519AppSr25519Public; PalletImOnlineSr25519AppSr25519Signature: PalletImOnlineSr25519AppSr25519Signature; + PalletJoystreamUtilityCall: PalletJoystreamUtilityCall; + PalletJoystreamUtilityError: PalletJoystreamUtilityError; + PalletJoystreamUtilityRawEvent: PalletJoystreamUtilityRawEvent; PalletMembershipBuyMembershipParameters: PalletMembershipBuyMembershipParameters; PalletMembershipCall: PalletMembershipCall; PalletMembershipCreateMemberParameters: PalletMembershipCreateMemberParameters; @@ -176,13 +179,14 @@ declare module '@polkadot/types/types/registry' { PalletMultisigTimepoint: PalletMultisigTimepoint; PalletOffencesEvent: PalletOffencesEvent; PalletProjectTokenAccountData: PalletProjectTokenAccountData; + PalletProjectTokenAmmCurve: PalletProjectTokenAmmCurve; + PalletProjectTokenAmmParams: PalletProjectTokenAmmParams; PalletProjectTokenCall: PalletProjectTokenCall; PalletProjectTokenErrorsError: PalletProjectTokenErrorsError; PalletProjectTokenEventsRawEvent: PalletProjectTokenEventsRawEvent; PalletProjectTokenMerkleProof: PalletProjectTokenMerkleProof; PalletProjectTokenMerkleSide: PalletProjectTokenMerkleSide; PalletProjectTokenPatronageData: PalletProjectTokenPatronageData; - PalletProjectTokenPayment: PalletProjectTokenPayment; PalletProjectTokenPaymentWithVesting: PalletProjectTokenPaymentWithVesting; PalletProjectTokenRevenueSplitInfo: PalletProjectTokenRevenueSplitInfo; PalletProjectTokenRevenueSplitState: PalletProjectTokenRevenueSplitState; @@ -196,8 +200,7 @@ declare module '@polkadot/types/types/registry' { PalletProjectTokenTokenSaleParams: PalletProjectTokenTokenSaleParams; PalletProjectTokenTransferPolicy: PalletProjectTokenTransferPolicy; PalletProjectTokenTransferPolicyParams: PalletProjectTokenTransferPolicyParams; - PalletProjectTokenTransfersPayment: PalletProjectTokenTransfersPayment; - PalletProjectTokenTransfersPaymentWithVesting: PalletProjectTokenTransfersPaymentWithVesting; + PalletProjectTokenTransfers: PalletProjectTokenTransfers; PalletProjectTokenValidated: PalletProjectTokenValidated; PalletProjectTokenValidatedPayment: PalletProjectTokenValidatedPayment; PalletProjectTokenVestingSchedule: PalletProjectTokenVestingSchedule; @@ -255,7 +258,6 @@ declare module '@polkadot/types/types/registry' { PalletStakingPalletConfigOpU32: PalletStakingPalletConfigOpU32; PalletStakingPalletError: PalletStakingPalletError; PalletStakingPalletEvent: PalletStakingPalletEvent; - PalletStakingReleases: PalletStakingReleases; PalletStakingRewardDestination: PalletStakingRewardDestination; PalletStakingSlashingSlashingSpans: PalletStakingSlashingSlashingSpans; PalletStakingSlashingSpanRecord: PalletStakingSlashingSpanRecord; @@ -284,11 +286,11 @@ declare module '@polkadot/types/types/registry' { PalletStorageVoucher: PalletStorageVoucher; PalletTimestampCall: PalletTimestampCall; PalletTransactionPaymentChargeTransactionPayment: PalletTransactionPaymentChargeTransactionPayment; + PalletTransactionPaymentEvent: PalletTransactionPaymentEvent; PalletTransactionPaymentReleases: PalletTransactionPaymentReleases; PalletUtilityCall: PalletUtilityCall; PalletUtilityError: PalletUtilityError; PalletUtilityEvent: PalletUtilityEvent; - PalletUtilityRawEvent: PalletUtilityRawEvent; PalletVestingCall: PalletVestingCall; PalletVestingError: PalletVestingError; PalletVestingEvent: PalletVestingEvent; @@ -322,6 +324,7 @@ declare module '@polkadot/types/types/registry' { PalletWorkingGroupRewardPaymentType: PalletWorkingGroupRewardPaymentType; PalletWorkingGroupStakeParameters: PalletWorkingGroupStakeParameters; PalletWorkingGroupStakePolicy: PalletWorkingGroupStakePolicy; + SpArithmeticArithmeticError: SpArithmeticArithmeticError; SpAuthorityDiscoveryAppPublic: SpAuthorityDiscoveryAppPublic; SpConsensusBabeAllowedSlots: SpConsensusBabeAllowedSlots; SpConsensusBabeAppPublic: SpConsensusBabeAppPublic; @@ -331,6 +334,10 @@ declare module '@polkadot/types/types/registry' { SpConsensusBabeDigestsPrimaryPreDigest: SpConsensusBabeDigestsPrimaryPreDigest; SpConsensusBabeDigestsSecondaryPlainPreDigest: SpConsensusBabeDigestsSecondaryPlainPreDigest; SpConsensusBabeDigestsSecondaryVRFPreDigest: SpConsensusBabeDigestsSecondaryVRFPreDigest; + SpConsensusGrandpaAppPublic: SpConsensusGrandpaAppPublic; + SpConsensusGrandpaAppSignature: SpConsensusGrandpaAppSignature; + SpConsensusGrandpaEquivocation: SpConsensusGrandpaEquivocation; + SpConsensusGrandpaEquivocationProof: SpConsensusGrandpaEquivocationProof; SpConsensusSlotsEquivocationProof: SpConsensusSlotsEquivocationProof; SpCoreCryptoKeyTypeId: SpCoreCryptoKeyTypeId; SpCoreEcdsaSignature: SpCoreEcdsaSignature; @@ -340,13 +347,8 @@ declare module '@polkadot/types/types/registry' { SpCoreSr25519Public: SpCoreSr25519Public; SpCoreSr25519Signature: SpCoreSr25519Signature; SpCoreVoid: SpCoreVoid; - SpFinalityGrandpaAppPublic: SpFinalityGrandpaAppPublic; - SpFinalityGrandpaAppSignature: SpFinalityGrandpaAppSignature; - SpFinalityGrandpaEquivocation: SpFinalityGrandpaEquivocation; - SpFinalityGrandpaEquivocationProof: SpFinalityGrandpaEquivocationProof; SpNposElectionsElectionScore: SpNposElectionsElectionScore; SpNposElectionsSupport: SpNposElectionsSupport; - SpRuntimeArithmeticError: SpRuntimeArithmeticError; SpRuntimeBlakeTwo256: SpRuntimeBlakeTwo256; SpRuntimeDigest: SpRuntimeDigest; SpRuntimeDigestDigestItem: SpRuntimeDigestDigestItem; @@ -359,5 +361,7 @@ declare module '@polkadot/types/types/registry' { SpSessionMembershipProof: SpSessionMembershipProof; SpStakingOffenceOffenceDetails: SpStakingOffenceOffenceDetails; SpVersionRuntimeVersion: SpVersionRuntimeVersion; + SpWeightsRuntimeDbWeight: SpWeightsRuntimeDbWeight; + SpWeightsWeightV2Weight: SpWeightsWeightV2Weight; } // InterfaceTypes } // declare module diff --git a/types/src/augment/types-lookup.ts b/types/src/augment/types-lookup.ts index 79138beb61..a531a38dfe 100644 --- a/types/src/augment/types-lookup.ts +++ b/types/src/augment/types-lookup.ts @@ -1,14 +1,19 @@ // Auto-generated via `yarn polkadot-types-from-defs`, do not edit /* eslint-disable */ -declare module '@polkadot/types/lookup' { - import type { BTreeMap, BTreeSet, Bytes, Compact, Enum, Null, Option, Result, Struct, Text, U8aFixed, Vec, WrapperKeepOpaque, bool, u128, u16, u32, u64, u8 } from '@polkadot/types-codec'; - import type { ITuple } from '@polkadot/types-codec/types'; - import type { AccountId32, Call, H256, PerU16, Perbill, Percent, Permill, Perquintill } from '@polkadot/types/interfaces/runtime'; - import type { Event } from '@polkadot/types/interfaces/system'; +// import type lookup before we augment - in some environments +// this is required to allow for ambient/previous definitions +import '@polkadot/types/lookup'; + +import type { BTreeMap, BTreeSet, Bytes, Compact, Enum, Null, Option, Result, Struct, Text, U8aFixed, Vec, bool, u128, u16, u32, u64, u8 } from '@polkadot/types-codec'; +import type { ITuple } from '@polkadot/types-codec/types'; +import type { OpaqueMultiaddr, OpaquePeerId } from '@polkadot/types/interfaces/imOnline'; +import type { AccountId32, Call, H256, PerU16, Perbill, Percent, Permill } from '@polkadot/types/interfaces/runtime'; +import type { Event } from '@polkadot/types/interfaces/system'; +declare module '@polkadot/types/lookup' { /** @name FrameSystemAccountInfo (3) */ - export interface FrameSystemAccountInfo extends Struct { + interface FrameSystemAccountInfo extends Struct { readonly nonce: u32; readonly consumers: u32; readonly providers: u32; @@ -17,27 +22,33 @@ declare module '@polkadot/types/lookup' { } /** @name PalletBalancesAccountData (5) */ - export interface PalletBalancesAccountData extends Struct { + interface PalletBalancesAccountData extends Struct { readonly free: u128; readonly reserved: u128; readonly miscFrozen: u128; readonly feeFrozen: u128; } - /** @name FrameSupportWeightsPerDispatchClassU64 (7) */ - export interface FrameSupportWeightsPerDispatchClassU64 extends Struct { - readonly normal: u64; - readonly operational: u64; - readonly mandatory: u64; + /** @name FrameSupportDispatchPerDispatchClassWeight (7) */ + interface FrameSupportDispatchPerDispatchClassWeight extends Struct { + readonly normal: SpWeightsWeightV2Weight; + readonly operational: SpWeightsWeightV2Weight; + readonly mandatory: SpWeightsWeightV2Weight; } - /** @name SpRuntimeDigest (11) */ - export interface SpRuntimeDigest extends Struct { + /** @name SpWeightsWeightV2Weight (8) */ + interface SpWeightsWeightV2Weight extends Struct { + readonly refTime: Compact; + readonly proofSize: Compact; + } + + /** @name SpRuntimeDigest (13) */ + interface SpRuntimeDigest extends Struct { readonly logs: Vec; } - /** @name SpRuntimeDigestDigestItem (13) */ - export interface SpRuntimeDigestDigestItem extends Enum { + /** @name SpRuntimeDigestDigestItem (15) */ + interface SpRuntimeDigestDigestItem extends Enum { readonly isOther: boolean; readonly asOther: Bytes; readonly isConsensus: boolean; @@ -50,23 +61,23 @@ declare module '@polkadot/types/lookup' { readonly type: 'Other' | 'Consensus' | 'Seal' | 'PreRuntime' | 'RuntimeEnvironmentUpdated'; } - /** @name FrameSystemEventRecord (16) */ - export interface FrameSystemEventRecord extends Struct { + /** @name FrameSystemEventRecord (18) */ + interface FrameSystemEventRecord extends Struct { readonly phase: FrameSystemPhase; readonly event: Event; readonly topics: Vec; } - /** @name FrameSystemEvent (18) */ - export interface FrameSystemEvent extends Enum { + /** @name FrameSystemEvent (20) */ + interface FrameSystemEvent extends Enum { readonly isExtrinsicSuccess: boolean; readonly asExtrinsicSuccess: { - readonly dispatchInfo: FrameSupportWeightsDispatchInfo; + readonly dispatchInfo: FrameSupportDispatchDispatchInfo; } & Struct; readonly isExtrinsicFailed: boolean; readonly asExtrinsicFailed: { readonly dispatchError: SpRuntimeDispatchError; - readonly dispatchInfo: FrameSupportWeightsDispatchInfo; + readonly dispatchInfo: FrameSupportDispatchDispatchInfo; } & Struct; readonly isCodeUpdated: boolean; readonly isNewAccount: boolean; @@ -85,30 +96,30 @@ declare module '@polkadot/types/lookup' { readonly type: 'ExtrinsicSuccess' | 'ExtrinsicFailed' | 'CodeUpdated' | 'NewAccount' | 'KilledAccount' | 'Remarked'; } - /** @name FrameSupportWeightsDispatchInfo (19) */ - export interface FrameSupportWeightsDispatchInfo extends Struct { - readonly weight: u64; - readonly class: FrameSupportWeightsDispatchClass; - readonly paysFee: FrameSupportWeightsPays; + /** @name FrameSupportDispatchDispatchInfo (21) */ + interface FrameSupportDispatchDispatchInfo extends Struct { + readonly weight: SpWeightsWeightV2Weight; + readonly class: FrameSupportDispatchDispatchClass; + readonly paysFee: FrameSupportDispatchPays; } - /** @name FrameSupportWeightsDispatchClass (20) */ - export interface FrameSupportWeightsDispatchClass extends Enum { + /** @name FrameSupportDispatchDispatchClass (22) */ + interface FrameSupportDispatchDispatchClass extends Enum { readonly isNormal: boolean; readonly isOperational: boolean; readonly isMandatory: boolean; readonly type: 'Normal' | 'Operational' | 'Mandatory'; } - /** @name FrameSupportWeightsPays (21) */ - export interface FrameSupportWeightsPays extends Enum { + /** @name FrameSupportDispatchPays (23) */ + interface FrameSupportDispatchPays extends Enum { readonly isYes: boolean; readonly isNo: boolean; readonly type: 'Yes' | 'No'; } - /** @name SpRuntimeDispatchError (22) */ - export interface SpRuntimeDispatchError extends Enum { + /** @name SpRuntimeDispatchError (24) */ + interface SpRuntimeDispatchError extends Enum { readonly isOther: boolean; readonly isCannotLookup: boolean; readonly isBadOrigin: boolean; @@ -120,20 +131,23 @@ declare module '@polkadot/types/lookup' { readonly isToken: boolean; readonly asToken: SpRuntimeTokenError; readonly isArithmetic: boolean; - readonly asArithmetic: SpRuntimeArithmeticError; + readonly asArithmetic: SpArithmeticArithmeticError; readonly isTransactional: boolean; readonly asTransactional: SpRuntimeTransactionalError; - readonly type: 'Other' | 'CannotLookup' | 'BadOrigin' | 'Module' | 'ConsumerRemaining' | 'NoProviders' | 'TooManyConsumers' | 'Token' | 'Arithmetic' | 'Transactional'; + readonly isExhausted: boolean; + readonly isCorruption: boolean; + readonly isUnavailable: boolean; + readonly type: 'Other' | 'CannotLookup' | 'BadOrigin' | 'Module' | 'ConsumerRemaining' | 'NoProviders' | 'TooManyConsumers' | 'Token' | 'Arithmetic' | 'Transactional' | 'Exhausted' | 'Corruption' | 'Unavailable'; } - /** @name SpRuntimeModuleError (23) */ - export interface SpRuntimeModuleError extends Struct { + /** @name SpRuntimeModuleError (25) */ + interface SpRuntimeModuleError extends Struct { readonly index: u8; readonly error: U8aFixed; } - /** @name SpRuntimeTokenError (24) */ - export interface SpRuntimeTokenError extends Enum { + /** @name SpRuntimeTokenError (26) */ + interface SpRuntimeTokenError extends Enum { readonly isNoFunds: boolean; readonly isWouldDie: boolean; readonly isBelowMinimum: boolean; @@ -144,23 +158,23 @@ declare module '@polkadot/types/lookup' { readonly type: 'NoFunds' | 'WouldDie' | 'BelowMinimum' | 'CannotCreate' | 'UnknownAsset' | 'Frozen' | 'Unsupported'; } - /** @name SpRuntimeArithmeticError (25) */ - export interface SpRuntimeArithmeticError extends Enum { + /** @name SpArithmeticArithmeticError (27) */ + interface SpArithmeticArithmeticError extends Enum { readonly isUnderflow: boolean; readonly isOverflow: boolean; readonly isDivisionByZero: boolean; readonly type: 'Underflow' | 'Overflow' | 'DivisionByZero'; } - /** @name SpRuntimeTransactionalError (26) */ - export interface SpRuntimeTransactionalError extends Enum { + /** @name SpRuntimeTransactionalError (28) */ + interface SpRuntimeTransactionalError extends Enum { readonly isLimitReached: boolean; readonly isNoLayer: boolean; readonly type: 'LimitReached' | 'NoLayer'; } - /** @name PalletUtilityEvent (27) */ - export interface PalletUtilityEvent extends Enum { + /** @name PalletUtilityEvent (29) */ + interface PalletUtilityEvent extends Enum { readonly isBatchInterrupted: boolean; readonly asBatchInterrupted: { readonly index: u32; @@ -180,8 +194,8 @@ declare module '@polkadot/types/lookup' { readonly type: 'BatchInterrupted' | 'BatchCompleted' | 'BatchCompletedWithErrors' | 'ItemCompleted' | 'ItemFailed' | 'DispatchedAs'; } - /** @name PalletBalancesEvent (30) */ - export interface PalletBalancesEvent extends Enum { + /** @name PalletBalancesEvent (32) */ + interface PalletBalancesEvent extends Enum { readonly isEndowed: boolean; readonly asEndowed: { readonly account: AccountId32; @@ -239,24 +253,38 @@ declare module '@polkadot/types/lookup' { readonly type: 'Endowed' | 'DustLost' | 'Transfer' | 'BalanceSet' | 'Reserved' | 'Unreserved' | 'ReserveRepatriated' | 'Deposit' | 'Withdraw' | 'Slashed'; } - /** @name FrameSupportTokensMiscBalanceStatus (31) */ - export interface FrameSupportTokensMiscBalanceStatus extends Enum { + /** @name FrameSupportTokensMiscBalanceStatus (33) */ + interface FrameSupportTokensMiscBalanceStatus extends Enum { readonly isFree: boolean; readonly isReserved: boolean; readonly type: 'Free' | 'Reserved'; } - /** @name PalletElectionProviderMultiPhaseEvent (32) */ - export interface PalletElectionProviderMultiPhaseEvent extends Enum { + /** @name PalletTransactionPaymentEvent (34) */ + interface PalletTransactionPaymentEvent extends Enum { + readonly isTransactionFeePaid: boolean; + readonly asTransactionFeePaid: { + readonly who: AccountId32; + readonly actualFee: u128; + readonly tip: u128; + } & Struct; + readonly type: 'TransactionFeePaid'; + } + + /** @name PalletElectionProviderMultiPhaseEvent (35) */ + interface PalletElectionProviderMultiPhaseEvent extends Enum { readonly isSolutionStored: boolean; readonly asSolutionStored: { - readonly electionCompute: PalletElectionProviderMultiPhaseElectionCompute; + readonly compute: PalletElectionProviderMultiPhaseElectionCompute; + readonly origin: Option; readonly prevEjected: bool; } & Struct; readonly isElectionFinalized: boolean; readonly asElectionFinalized: { - readonly electionCompute: Option; + readonly compute: PalletElectionProviderMultiPhaseElectionCompute; + readonly score: SpNposElectionsElectionScore; } & Struct; + readonly isElectionFailed: boolean; readonly isRewarded: boolean; readonly asRewarded: { readonly account: AccountId32; @@ -267,19 +295,17 @@ declare module '@polkadot/types/lookup' { readonly account: AccountId32; readonly value: u128; } & Struct; - readonly isSignedPhaseStarted: boolean; - readonly asSignedPhaseStarted: { - readonly round: u32; - } & Struct; - readonly isUnsignedPhaseStarted: boolean; - readonly asUnsignedPhaseStarted: { + readonly isPhaseTransitioned: boolean; + readonly asPhaseTransitioned: { + readonly from: PalletElectionProviderMultiPhasePhase; + readonly to: PalletElectionProviderMultiPhasePhase; readonly round: u32; } & Struct; - readonly type: 'SolutionStored' | 'ElectionFinalized' | 'Rewarded' | 'Slashed' | 'SignedPhaseStarted' | 'UnsignedPhaseStarted'; + readonly type: 'SolutionStored' | 'ElectionFinalized' | 'ElectionFailed' | 'Rewarded' | 'Slashed' | 'PhaseTransitioned'; } - /** @name PalletElectionProviderMultiPhaseElectionCompute (33) */ - export interface PalletElectionProviderMultiPhaseElectionCompute extends Enum { + /** @name PalletElectionProviderMultiPhaseElectionCompute (36) */ + interface PalletElectionProviderMultiPhaseElectionCompute extends Enum { readonly isOnChain: boolean; readonly isSigned: boolean; readonly isUnsigned: boolean; @@ -288,43 +314,111 @@ declare module '@polkadot/types/lookup' { readonly type: 'OnChain' | 'Signed' | 'Unsigned' | 'Fallback' | 'Emergency'; } - /** @name PalletStakingPalletEvent (36) */ - export interface PalletStakingPalletEvent extends Enum { + /** @name SpNposElectionsElectionScore (39) */ + interface SpNposElectionsElectionScore extends Struct { + readonly minimalStake: u128; + readonly sumStake: u128; + readonly sumStakeSquared: u128; + } + + /** @name PalletElectionProviderMultiPhasePhase (40) */ + interface PalletElectionProviderMultiPhasePhase extends Enum { + readonly isOff: boolean; + readonly isSigned: boolean; + readonly isUnsigned: boolean; + readonly asUnsigned: ITuple<[bool, u32]>; + readonly isEmergency: boolean; + readonly type: 'Off' | 'Signed' | 'Unsigned' | 'Emergency'; + } + + /** @name PalletStakingPalletEvent (42) */ + interface PalletStakingPalletEvent extends Enum { readonly isEraPaid: boolean; - readonly asEraPaid: ITuple<[u32, u128, u128]>; + readonly asEraPaid: { + readonly eraIndex: u32; + readonly validatorPayout: u128; + readonly remainder: u128; + } & Struct; readonly isRewarded: boolean; - readonly asRewarded: ITuple<[AccountId32, u128]>; + readonly asRewarded: { + readonly stash: AccountId32; + readonly amount: u128; + } & Struct; readonly isSlashed: boolean; - readonly asSlashed: ITuple<[AccountId32, u128]>; + readonly asSlashed: { + readonly staker: AccountId32; + readonly amount: u128; + } & Struct; + readonly isSlashReported: boolean; + readonly asSlashReported: { + readonly validator: AccountId32; + readonly fraction: Perbill; + readonly slashEra: u32; + } & Struct; readonly isOldSlashingReportDiscarded: boolean; - readonly asOldSlashingReportDiscarded: u32; + readonly asOldSlashingReportDiscarded: { + readonly sessionIndex: u32; + } & Struct; readonly isStakersElected: boolean; readonly isBonded: boolean; - readonly asBonded: ITuple<[AccountId32, u128]>; + readonly asBonded: { + readonly stash: AccountId32; + readonly amount: u128; + } & Struct; readonly isUnbonded: boolean; - readonly asUnbonded: ITuple<[AccountId32, u128]>; + readonly asUnbonded: { + readonly stash: AccountId32; + readonly amount: u128; + } & Struct; readonly isWithdrawn: boolean; - readonly asWithdrawn: ITuple<[AccountId32, u128]>; + readonly asWithdrawn: { + readonly stash: AccountId32; + readonly amount: u128; + } & Struct; readonly isKicked: boolean; - readonly asKicked: ITuple<[AccountId32, AccountId32]>; + readonly asKicked: { + readonly nominator: AccountId32; + readonly stash: AccountId32; + } & Struct; readonly isStakingElectionFailed: boolean; readonly isChilled: boolean; - readonly asChilled: AccountId32; + readonly asChilled: { + readonly stash: AccountId32; + } & Struct; readonly isPayoutStarted: boolean; - readonly asPayoutStarted: ITuple<[u32, AccountId32]>; + readonly asPayoutStarted: { + readonly eraIndex: u32; + readonly validatorStash: AccountId32; + } & Struct; readonly isValidatorPrefsSet: boolean; - readonly asValidatorPrefsSet: ITuple<[AccountId32, PalletStakingValidatorPrefs]>; - readonly type: 'EraPaid' | 'Rewarded' | 'Slashed' | 'OldSlashingReportDiscarded' | 'StakersElected' | 'Bonded' | 'Unbonded' | 'Withdrawn' | 'Kicked' | 'StakingElectionFailed' | 'Chilled' | 'PayoutStarted' | 'ValidatorPrefsSet'; + readonly asValidatorPrefsSet: { + readonly stash: AccountId32; + readonly prefs: PalletStakingValidatorPrefs; + } & Struct; + readonly isForceEra: boolean; + readonly asForceEra: { + readonly mode: PalletStakingForcing; + } & Struct; + readonly type: 'EraPaid' | 'Rewarded' | 'Slashed' | 'SlashReported' | 'OldSlashingReportDiscarded' | 'StakersElected' | 'Bonded' | 'Unbonded' | 'Withdrawn' | 'Kicked' | 'StakingElectionFailed' | 'Chilled' | 'PayoutStarted' | 'ValidatorPrefsSet' | 'ForceEra'; } - /** @name PalletStakingValidatorPrefs (37) */ - export interface PalletStakingValidatorPrefs extends Struct { + /** @name PalletStakingValidatorPrefs (44) */ + interface PalletStakingValidatorPrefs extends Struct { readonly commission: Compact; readonly blocked: bool; } - /** @name PalletSessionEvent (40) */ - export interface PalletSessionEvent extends Enum { + /** @name PalletStakingForcing (46) */ + interface PalletStakingForcing extends Enum { + readonly isNotForcing: boolean; + readonly isForceNew: boolean; + readonly isForceNone: boolean; + readonly isForceAlways: boolean; + readonly type: 'NotForcing' | 'ForceNew' | 'ForceNone' | 'ForceAlways'; + } + + /** @name PalletSessionEvent (47) */ + interface PalletSessionEvent extends Enum { readonly isNewSession: boolean; readonly asNewSession: { readonly sessionIndex: u32; @@ -332,25 +426,25 @@ declare module '@polkadot/types/lookup' { readonly type: 'NewSession'; } - /** @name PalletGrandpaEvent (41) */ - export interface PalletGrandpaEvent extends Enum { + /** @name PalletGrandpaEvent (48) */ + interface PalletGrandpaEvent extends Enum { readonly isNewAuthorities: boolean; readonly asNewAuthorities: { - readonly authoritySet: Vec>; + readonly authoritySet: Vec>; } & Struct; readonly isPaused: boolean; readonly isResumed: boolean; readonly type: 'NewAuthorities' | 'Paused' | 'Resumed'; } - /** @name SpFinalityGrandpaAppPublic (44) */ - export interface SpFinalityGrandpaAppPublic extends SpCoreEd25519Public {} + /** @name SpConsensusGrandpaAppPublic (51) */ + interface SpConsensusGrandpaAppPublic extends SpCoreEd25519Public {} - /** @name SpCoreEd25519Public (45) */ - export interface SpCoreEd25519Public extends U8aFixed {} + /** @name SpCoreEd25519Public (52) */ + interface SpCoreEd25519Public extends U8aFixed {} - /** @name PalletImOnlineEvent (46) */ - export interface PalletImOnlineEvent extends Enum { + /** @name PalletImOnlineEvent (53) */ + interface PalletImOnlineEvent extends Enum { readonly isHeartbeatReceived: boolean; readonly asHeartbeatReceived: { readonly authorityId: PalletImOnlineSr25519AppSr25519Public; @@ -363,27 +457,27 @@ declare module '@polkadot/types/lookup' { readonly type: 'HeartbeatReceived' | 'AllGood' | 'SomeOffline'; } - /** @name PalletImOnlineSr25519AppSr25519Public (47) */ - export interface PalletImOnlineSr25519AppSr25519Public extends SpCoreSr25519Public {} + /** @name PalletImOnlineSr25519AppSr25519Public (54) */ + interface PalletImOnlineSr25519AppSr25519Public extends SpCoreSr25519Public {} - /** @name SpCoreSr25519Public (48) */ - export interface SpCoreSr25519Public extends U8aFixed {} + /** @name SpCoreSr25519Public (55) */ + interface SpCoreSr25519Public extends U8aFixed {} - /** @name PalletStakingExposure (51) */ - export interface PalletStakingExposure extends Struct { + /** @name PalletStakingExposure (58) */ + interface PalletStakingExposure extends Struct { readonly total: Compact; readonly own: Compact; readonly others: Vec; } - /** @name PalletStakingIndividualExposure (54) */ - export interface PalletStakingIndividualExposure extends Struct { + /** @name PalletStakingIndividualExposure (61) */ + interface PalletStakingIndividualExposure extends Struct { readonly who: AccountId32; readonly value: Compact; } - /** @name PalletOffencesEvent (55) */ - export interface PalletOffencesEvent extends Enum { + /** @name PalletOffencesEvent (62) */ + interface PalletOffencesEvent extends Enum { readonly isOffence: boolean; readonly asOffence: { readonly kind: U8aFixed; @@ -392,8 +486,8 @@ declare module '@polkadot/types/lookup' { readonly type: 'Offence'; } - /** @name PalletBagsListEvent (57) */ - export interface PalletBagsListEvent extends Enum { + /** @name PalletBagsListEvent (64) */ + interface PalletBagsListEvent extends Enum { readonly isRebagged: boolean; readonly asRebagged: { readonly who: AccountId32; @@ -408,8 +502,8 @@ declare module '@polkadot/types/lookup' { readonly type: 'Rebagged' | 'ScoreUpdated'; } - /** @name PalletVestingEvent (58) */ - export interface PalletVestingEvent extends Enum { + /** @name PalletVestingEvent (65) */ + interface PalletVestingEvent extends Enum { readonly isVestingUpdated: boolean; readonly asVestingUpdated: { readonly account: AccountId32; @@ -422,8 +516,8 @@ declare module '@polkadot/types/lookup' { readonly type: 'VestingUpdated' | 'VestingCompleted'; } - /** @name PalletMultisigEvent (59) */ - export interface PalletMultisigEvent extends Enum { + /** @name PalletMultisigEvent (66) */ + interface PalletMultisigEvent extends Enum { readonly isNewMultisig: boolean; readonly asNewMultisig: { readonly approving: AccountId32; @@ -455,14 +549,14 @@ declare module '@polkadot/types/lookup' { readonly type: 'NewMultisig' | 'MultisigApproval' | 'MultisigExecuted' | 'MultisigCancelled'; } - /** @name PalletMultisigTimepoint (60) */ - export interface PalletMultisigTimepoint extends Struct { + /** @name PalletMultisigTimepoint (67) */ + interface PalletMultisigTimepoint extends Struct { readonly height: u32; readonly index: u32; } - /** @name PalletCouncilRawEvent (61) */ - export interface PalletCouncilRawEvent extends Enum { + /** @name PalletCouncilRawEvent (68) */ + interface PalletCouncilRawEvent extends Enum { readonly isAnnouncingPeriodStarted: boolean; readonly asAnnouncingPeriodStarted: u32; readonly isNotEnoughCandidates: boolean; @@ -504,8 +598,8 @@ declare module '@polkadot/types/lookup' { readonly type: 'AnnouncingPeriodStarted' | 'NotEnoughCandidates' | 'VotingPeriodStarted' | 'NewCandidate' | 'NewCouncilElected' | 'NewCouncilNotElected' | 'CandidacyStakeRelease' | 'CandidacyWithdraw' | 'CandidacyNoteSet' | 'RewardPayment' | 'BudgetBalanceSet' | 'BudgetRefill' | 'BudgetRefillPlanned' | 'BudgetIncrementUpdated' | 'CouncilorRewardUpdated' | 'RequestFunded' | 'CouncilBudgetFunded' | 'CouncilorRemarked' | 'CandidateRemarked'; } - /** @name PalletReferendumRawEvent (63) */ - export interface PalletReferendumRawEvent extends Enum { + /** @name PalletReferendumRawEvent (70) */ + interface PalletReferendumRawEvent extends Enum { readonly isReferendumStarted: boolean; readonly asReferendumStarted: ITuple<[u32, u32]>; readonly isReferendumStartedForcefully: boolean; @@ -525,17 +619,17 @@ declare module '@polkadot/types/lookup' { readonly type: 'ReferendumStarted' | 'ReferendumStartedForcefully' | 'RevealingStageStarted' | 'ReferendumFinished' | 'VoteCast' | 'VoteRevealed' | 'StakeReleased' | 'AccountOptedOutOfVoting'; } - /** @name PalletReferendumInstance1 (64) */ - export type PalletReferendumInstance1 = Null; + /** @name PalletReferendumInstance1 (71) */ + type PalletReferendumInstance1 = Null; - /** @name PalletReferendumOptionResult (66) */ - export interface PalletReferendumOptionResult extends Struct { + /** @name PalletReferendumOptionResult (73) */ + interface PalletReferendumOptionResult extends Struct { readonly optionId: u64; readonly votePower: u128; } - /** @name PalletMembershipRawEvent (67) */ - export interface PalletMembershipRawEvent extends Enum { + /** @name PalletMembershipRawEvent (74) */ + interface PalletMembershipRawEvent extends Enum { readonly isMemberInvited: boolean; readonly asMemberInvited: ITuple<[u64, PalletMembershipInviteMembershipParameters, u128]>; readonly isMembershipGifted: boolean; @@ -573,8 +667,8 @@ declare module '@polkadot/types/lookup' { readonly type: 'MemberInvited' | 'MembershipGifted' | 'MembershipBought' | 'MemberProfileUpdated' | 'MemberAccountsUpdated' | 'MemberVerificationStatusUpdated' | 'ReferralCutUpdated' | 'InvitesTransferred' | 'MembershipPriceUpdated' | 'InitialInvitationBalanceUpdated' | 'LeaderInvitationQuotaUpdated' | 'InitialInvitationCountUpdated' | 'StakingAccountAdded' | 'StakingAccountRemoved' | 'StakingAccountConfirmed' | 'MemberRemarked' | 'MemberCreated'; } - /** @name PalletMembershipBuyMembershipParameters (68) */ - export interface PalletMembershipBuyMembershipParameters extends Struct { + /** @name PalletMembershipBuyMembershipParameters (75) */ + interface PalletMembershipBuyMembershipParameters extends Struct { readonly rootAccount: AccountId32; readonly controllerAccount: AccountId32; readonly handle: Option; @@ -582,8 +676,8 @@ declare module '@polkadot/types/lookup' { readonly referrerId: Option; } - /** @name PalletMembershipInviteMembershipParameters (71) */ - export interface PalletMembershipInviteMembershipParameters extends Struct { + /** @name PalletMembershipInviteMembershipParameters (78) */ + interface PalletMembershipInviteMembershipParameters extends Struct { readonly invitingMemberId: u64; readonly rootAccount: AccountId32; readonly controllerAccount: AccountId32; @@ -591,8 +685,8 @@ declare module '@polkadot/types/lookup' { readonly metadata: Bytes; } - /** @name PalletMembershipCreateMemberParameters (72) */ - export interface PalletMembershipCreateMemberParameters extends Struct { + /** @name PalletMembershipCreateMemberParameters (79) */ + interface PalletMembershipCreateMemberParameters extends Struct { readonly rootAccount: AccountId32; readonly controllerAccount: AccountId32; readonly handle: Bytes; @@ -600,8 +694,8 @@ declare module '@polkadot/types/lookup' { readonly isFoundingMember: bool; } - /** @name PalletMembershipGiftMembershipParameters (73) */ - export interface PalletMembershipGiftMembershipParameters extends Struct { + /** @name PalletMembershipGiftMembershipParameters (80) */ + interface PalletMembershipGiftMembershipParameters extends Struct { readonly rootAccount: AccountId32; readonly controllerAccount: AccountId32; readonly handle: Option; @@ -612,8 +706,8 @@ declare module '@polkadot/types/lookup' { readonly applyRootAccountInvitationLock: Option; } - /** @name PalletForumRawEvent (78) */ - export interface PalletForumRawEvent extends Enum { + /** @name PalletForumRawEvent (84) */ + interface PalletForumRawEvent extends Enum { readonly isCategoryCreated: boolean; readonly asCategoryCreated: ITuple<[u64, Option, Bytes, Bytes]>; readonly isCategoryArchivalStatusUpdated: boolean; @@ -651,30 +745,30 @@ declare module '@polkadot/types/lookup' { readonly type: 'CategoryCreated' | 'CategoryArchivalStatusUpdated' | 'CategoryTitleUpdated' | 'CategoryDescriptionUpdated' | 'CategoryDeleted' | 'ThreadCreated' | 'ThreadModerated' | 'ThreadUpdated' | 'ThreadMetadataUpdated' | 'ThreadDeleted' | 'ThreadMoved' | 'PostAdded' | 'PostModerated' | 'PostDeleted' | 'PostTextUpdated' | 'CategoryStickyThreadUpdate' | 'CategoryMembershipOfModeratorUpdated'; } - /** @name PalletForumPrivilegedActor (79) */ - export interface PalletForumPrivilegedActor extends Enum { + /** @name PalletForumPrivilegedActor (85) */ + interface PalletForumPrivilegedActor extends Enum { readonly isLead: boolean; readonly isModerator: boolean; readonly asModerator: u64; readonly type: 'Lead' | 'Moderator'; } - /** @name PalletForumExtendedPostIdObject (80) */ - export interface PalletForumExtendedPostIdObject extends Struct { + /** @name PalletForumExtendedPostIdObject (86) */ + interface PalletForumExtendedPostIdObject extends Struct { readonly categoryId: u64; readonly threadId: u64; readonly postId: u64; } - /** @name PalletConstitutionRawEvent (85) */ - export interface PalletConstitutionRawEvent extends Enum { + /** @name PalletConstitutionRawEvent (91) */ + interface PalletConstitutionRawEvent extends Enum { readonly isConstutionAmended: boolean; readonly asConstutionAmended: ITuple<[H256, Bytes]>; readonly type: 'ConstutionAmended'; } - /** @name PalletBountyRawEvent (86) */ - export interface PalletBountyRawEvent extends Enum { + /** @name PalletBountyRawEvent (92) */ + interface PalletBountyRawEvent extends Enum { readonly isBountyCreated: boolean; readonly asBountyCreated: ITuple<[u64, PalletBountyBountyParametersBTreeSet, Bytes]>; readonly isBountyOracleSwitched: boolean; @@ -724,8 +818,8 @@ declare module '@polkadot/types/lookup' { readonly type: 'BountyCreated' | 'BountyOracleSwitched' | 'BountyTerminated' | 'BountyFunded' | 'BountyMaxFundingReached' | 'BountyFundingWithdrawal' | 'BountyCreatorCherryWithdrawal' | 'BountyCreatorOracleRewardWithdrawal' | 'BountyOracleRewardWithdrawal' | 'BountyRemoved' | 'WorkEntryAnnounced' | 'WorkSubmitted' | 'OracleJudgmentSubmitted' | 'WorkEntrantFundsWithdrawn' | 'BountyContributorRemarked' | 'BountyOracleRemarked' | 'BountyEntrantRemarked' | 'BountyCreatorRemarked' | 'WorkSubmissionPeriodEnded' | 'WorkEntrantStakeUnlocked' | 'WorkEntrantStakeSlashed' | 'FunderStateBloatBondWithdrawn' | 'CreatorStateBloatBondWithdrawn'; } - /** @name PalletBountyBountyParametersBTreeSet (87) */ - export interface PalletBountyBountyParametersBTreeSet extends Struct { + /** @name PalletBountyBountyParametersBTreeSet (93) */ + interface PalletBountyBountyParametersBTreeSet extends Struct { readonly oracle: PalletBountyBountyActor; readonly contractType: PalletBountyAssuranceContractTypeBTreeSet; readonly creator: PalletBountyBountyActor; @@ -735,24 +829,24 @@ declare module '@polkadot/types/lookup' { readonly fundingType: PalletBountyFundingType; } - /** @name PalletBountyBountyActor (88) */ - export interface PalletBountyBountyActor extends Enum { + /** @name PalletBountyBountyActor (94) */ + interface PalletBountyBountyActor extends Enum { readonly isCouncil: boolean; readonly isMember: boolean; readonly asMember: u64; readonly type: 'Council' | 'Member'; } - /** @name PalletBountyAssuranceContractTypeBTreeSet (89) */ - export interface PalletBountyAssuranceContractTypeBTreeSet extends Enum { + /** @name PalletBountyAssuranceContractTypeBTreeSet (95) */ + interface PalletBountyAssuranceContractTypeBTreeSet extends Enum { readonly isOpen: boolean; readonly isClosed: boolean; readonly asClosed: BTreeSet; readonly type: 'Open' | 'Closed'; } - /** @name PalletBountyFundingType (90) */ - export interface PalletBountyFundingType extends Enum { + /** @name PalletBountyFundingType (96) */ + interface PalletBountyFundingType extends Enum { readonly isPerpetual: boolean; readonly asPerpetual: { readonly target: u128; @@ -765,8 +859,8 @@ declare module '@polkadot/types/lookup' { readonly type: 'Perpetual' | 'Limited'; } - /** @name PalletBountyOracleWorkEntryJudgment (92) */ - export interface PalletBountyOracleWorkEntryJudgment extends Enum { + /** @name PalletBountyOracleWorkEntryJudgment (98) */ + interface PalletBountyOracleWorkEntryJudgment extends Enum { readonly isWinner: boolean; readonly asWinner: { readonly reward: u128; @@ -779,8 +873,8 @@ declare module '@polkadot/types/lookup' { readonly type: 'Winner' | 'Rejected'; } - /** @name PalletUtilityRawEvent (95) */ - export interface PalletUtilityRawEvent extends Enum { + /** @name PalletJoystreamUtilityRawEvent (101) */ + interface PalletJoystreamUtilityRawEvent extends Enum { readonly isSignaled: boolean; readonly asSignaled: Bytes; readonly isRuntimeUpgraded: boolean; @@ -792,8 +886,8 @@ declare module '@polkadot/types/lookup' { readonly type: 'Signaled' | 'RuntimeUpgraded' | 'UpdatedWorkingGroupBudget' | 'TokensBurned'; } - /** @name PalletCommonWorkingGroupIterableEnumsWorkingGroup (96) */ - export interface PalletCommonWorkingGroupIterableEnumsWorkingGroup extends Enum { + /** @name PalletCommonWorkingGroupIterableEnumsWorkingGroup (102) */ + interface PalletCommonWorkingGroupIterableEnumsWorkingGroup extends Enum { readonly isForum: boolean; readonly isStorage: boolean; readonly isContent: boolean; @@ -806,15 +900,15 @@ declare module '@polkadot/types/lookup' { readonly type: 'Forum' | 'Storage' | 'Content' | 'OperationsAlpha' | 'App' | 'Distribution' | 'OperationsBeta' | 'OperationsGamma' | 'Membership'; } - /** @name PalletCommonBalanceKind (97) */ - export interface PalletCommonBalanceKind extends Enum { + /** @name PalletCommonBalanceKind (103) */ + interface PalletCommonBalanceKind extends Enum { readonly isPositive: boolean; readonly isNegative: boolean; readonly type: 'Positive' | 'Negative'; } - /** @name PalletContentRawEvent (98) */ - export interface PalletContentRawEvent extends Enum { + /** @name PalletContentRawEvent (104) */ + interface PalletContentRawEvent extends Enum { readonly isCuratorGroupCreated: boolean; readonly asCuratorGroupCreated: u64; readonly isCuratorGroupPermissionsUpdated: boolean; @@ -839,8 +933,6 @@ declare module '@polkadot/types/lookup' { readonly asChannelAssetsRemoved: ITuple<[PalletContentPermissionsContentActor, u64, BTreeSet, PalletContentChannelRecord]>; readonly isChannelDeleted: boolean; readonly asChannelDeleted: ITuple<[PalletContentPermissionsContentActor, u64]>; - readonly isChannelDeletedByModerator: boolean; - readonly asChannelDeletedByModerator: ITuple<[PalletContentPermissionsContentActor, u64, Bytes]>; readonly isChannelVisibilitySetByModerator: boolean; readonly asChannelVisibilitySetByModerator: ITuple<[PalletContentPermissionsContentActor, u64, bool, Bytes]>; readonly isChannelPausedFeaturesUpdatedByModerator: boolean; @@ -857,8 +949,6 @@ declare module '@polkadot/types/lookup' { readonly asVideoUpdated: ITuple<[PalletContentPermissionsContentActor, u64, PalletContentVideoUpdateParametersRecord, BTreeSet]>; readonly isVideoDeleted: boolean; readonly asVideoDeleted: ITuple<[PalletContentPermissionsContentActor, u64]>; - readonly isVideoDeletedByModerator: boolean; - readonly asVideoDeletedByModerator: ITuple<[PalletContentPermissionsContentActor, u64, Bytes]>; readonly isVideoVisibilitySetByModerator: boolean; readonly asVideoVisibilitySetByModerator: ITuple<[PalletContentPermissionsContentActor, u64, bool, Bytes]>; readonly isVideoAssetsDeletedByModerator: boolean; @@ -923,11 +1013,13 @@ declare module '@polkadot/types/lookup' { readonly asToggledNftLimits: bool; readonly isCreatorTokenIssued: boolean; readonly asCreatorTokenIssued: ITuple<[PalletContentPermissionsContentActor, u64, u64]>; - readonly type: 'CuratorGroupCreated' | 'CuratorGroupPermissionsUpdated' | 'CuratorGroupStatusSet' | 'CuratorAdded' | 'CuratorRemoved' | 'ChannelCreated' | 'ChannelUpdated' | 'ChannelPrivilegeLevelUpdated' | 'ChannelStateBloatBondValueUpdated' | 'VideoStateBloatBondValueUpdated' | 'ChannelAssetsRemoved' | 'ChannelDeleted' | 'ChannelDeletedByModerator' | 'ChannelVisibilitySetByModerator' | 'ChannelPausedFeaturesUpdatedByModerator' | 'ChannelAssetsDeletedByModerator' | 'ChannelFundsWithdrawn' | 'ChannelRewardClaimedAndWithdrawn' | 'VideoCreated' | 'VideoUpdated' | 'VideoDeleted' | 'VideoDeletedByModerator' | 'VideoVisibilitySetByModerator' | 'VideoAssetsDeletedByModerator' | 'ChannelPayoutsUpdated' | 'ChannelRewardUpdated' | 'EnglishAuctionStarted' | 'OpenAuctionStarted' | 'NftIssued' | 'NftDestroyed' | 'AuctionBidMade' | 'AuctionBidCanceled' | 'AuctionCanceled' | 'EnglishAuctionSettled' | 'BidMadeCompletingAuction' | 'OpenAuctionBidAccepted' | 'OfferStarted' | 'OfferAccepted' | 'OfferCanceled' | 'NftSellOrderMade' | 'NftBought' | 'BuyNowCanceled' | 'BuyNowPriceUpdated' | 'NftSlingedBackToTheOriginalArtist' | 'ChannelOwnerRemarked' | 'ChannelAgentRemarked' | 'NftOwnerRemarked' | 'InitializedChannelTransfer' | 'CancelChannelTransfer' | 'ChannelTransferAccepted' | 'GlobalNftLimitUpdated' | 'ChannelNftLimitUpdated' | 'ToggledNftLimits' | 'CreatorTokenIssued'; + readonly isCreatorTokenIssuerRemarked: boolean; + readonly asCreatorTokenIssuerRemarked: ITuple<[u64, u64, Bytes]>; + readonly type: 'CuratorGroupCreated' | 'CuratorGroupPermissionsUpdated' | 'CuratorGroupStatusSet' | 'CuratorAdded' | 'CuratorRemoved' | 'ChannelCreated' | 'ChannelUpdated' | 'ChannelPrivilegeLevelUpdated' | 'ChannelStateBloatBondValueUpdated' | 'VideoStateBloatBondValueUpdated' | 'ChannelAssetsRemoved' | 'ChannelDeleted' | 'ChannelVisibilitySetByModerator' | 'ChannelPausedFeaturesUpdatedByModerator' | 'ChannelAssetsDeletedByModerator' | 'ChannelFundsWithdrawn' | 'ChannelRewardClaimedAndWithdrawn' | 'VideoCreated' | 'VideoUpdated' | 'VideoDeleted' | 'VideoVisibilitySetByModerator' | 'VideoAssetsDeletedByModerator' | 'ChannelPayoutsUpdated' | 'ChannelRewardUpdated' | 'EnglishAuctionStarted' | 'OpenAuctionStarted' | 'NftIssued' | 'NftDestroyed' | 'AuctionBidMade' | 'AuctionBidCanceled' | 'AuctionCanceled' | 'EnglishAuctionSettled' | 'BidMadeCompletingAuction' | 'OpenAuctionBidAccepted' | 'OfferStarted' | 'OfferAccepted' | 'OfferCanceled' | 'NftSellOrderMade' | 'NftBought' | 'BuyNowCanceled' | 'BuyNowPriceUpdated' | 'NftSlingedBackToTheOriginalArtist' | 'ChannelOwnerRemarked' | 'ChannelAgentRemarked' | 'NftOwnerRemarked' | 'InitializedChannelTransfer' | 'CancelChannelTransfer' | 'ChannelTransferAccepted' | 'GlobalNftLimitUpdated' | 'ChannelNftLimitUpdated' | 'ToggledNftLimits' | 'CreatorTokenIssued' | 'CreatorTokenIssuerRemarked'; } - /** @name PalletContentPermissionsContentActor (99) */ - export interface PalletContentPermissionsContentActor extends Enum { + /** @name PalletContentPermissionsContentActor (105) */ + interface PalletContentPermissionsContentActor extends Enum { readonly isCurator: boolean; readonly asCurator: ITuple<[u64, u64]>; readonly isMember: boolean; @@ -936,8 +1028,8 @@ declare module '@polkadot/types/lookup' { readonly type: 'Curator' | 'Member' | 'Lead'; } - /** @name PalletContentChannelRecord (100) */ - export interface PalletContentChannelRecord extends Struct { + /** @name PalletContentChannelRecord (106) */ + interface PalletContentChannelRecord extends Struct { readonly owner: PalletContentChannelOwner; readonly numVideos: u64; readonly collaborators: BTreeMap>; @@ -954,8 +1046,8 @@ declare module '@polkadot/types/lookup' { readonly channelStateBloatBond: PalletCommonBloatBondRepayableBloatBond; } - /** @name PalletContentIterableEnumsChannelActionPermission (104) */ - export interface PalletContentIterableEnumsChannelActionPermission extends Enum { + /** @name PalletContentIterableEnumsChannelActionPermission (110) */ + interface PalletContentIterableEnumsChannelActionPermission extends Enum { readonly isUpdateChannelMetadata: boolean; readonly isManageNonVideoChannelAssets: boolean; readonly isManageChannelCollaborators: boolean; @@ -977,11 +1069,12 @@ declare module '@polkadot/types/lookup' { readonly isReduceCreatorTokenPatronageRate: boolean; readonly isManageRevenueSplits: boolean; readonly isDeissueCreatorToken: boolean; - readonly type: 'UpdateChannelMetadata' | 'ManageNonVideoChannelAssets' | 'ManageChannelCollaborators' | 'UpdateVideoMetadata' | 'AddVideo' | 'ManageVideoAssets' | 'DeleteChannel' | 'DeleteVideo' | 'ManageVideoNfts' | 'AgentRemark' | 'TransferChannel' | 'ClaimChannelReward' | 'WithdrawFromChannelBalance' | 'IssueCreatorToken' | 'ClaimCreatorTokenPatronage' | 'InitAndManageCreatorTokenSale' | 'CreatorTokenIssuerTransfer' | 'MakeCreatorTokenPermissionless' | 'ReduceCreatorTokenPatronageRate' | 'ManageRevenueSplits' | 'DeissueCreatorToken'; + readonly isAmmControl: boolean; + readonly type: 'UpdateChannelMetadata' | 'ManageNonVideoChannelAssets' | 'ManageChannelCollaborators' | 'UpdateVideoMetadata' | 'AddVideo' | 'ManageVideoAssets' | 'DeleteChannel' | 'DeleteVideo' | 'ManageVideoNfts' | 'AgentRemark' | 'TransferChannel' | 'ClaimChannelReward' | 'WithdrawFromChannelBalance' | 'IssueCreatorToken' | 'ClaimCreatorTokenPatronage' | 'InitAndManageCreatorTokenSale' | 'CreatorTokenIssuerTransfer' | 'MakeCreatorTokenPermissionless' | 'ReduceCreatorTokenPatronageRate' | 'ManageRevenueSplits' | 'DeissueCreatorToken' | 'AmmControl'; } - /** @name PalletContentPermissionsCuratorGroupIterableEnumsPausableChannelFeature (111) */ - export interface PalletContentPermissionsCuratorGroupIterableEnumsPausableChannelFeature extends Enum { + /** @name PalletContentPermissionsCuratorGroupIterableEnumsPausableChannelFeature (117) */ + interface PalletContentPermissionsCuratorGroupIterableEnumsPausableChannelFeature extends Enum { readonly isChannelFundsTransfer: boolean; readonly isCreatorCashout: boolean; readonly isVideoNftIssuance: boolean; @@ -992,14 +1085,14 @@ declare module '@polkadot/types/lookup' { readonly type: 'ChannelFundsTransfer' | 'CreatorCashout' | 'VideoNftIssuance' | 'VideoCreation' | 'VideoUpdate' | 'ChannelUpdate' | 'CreatorTokenIssuance'; } - /** @name PalletCommonBloatBondRepayableBloatBond (114) */ - export interface PalletCommonBloatBondRepayableBloatBond extends Struct { + /** @name PalletCommonBloatBondRepayableBloatBond (120) */ + interface PalletCommonBloatBondRepayableBloatBond extends Struct { readonly repaymentRestrictedTo: Option; readonly amount: u128; } - /** @name PalletContentChannelOwner (115) */ - export interface PalletContentChannelOwner extends Enum { + /** @name PalletContentChannelOwner (121) */ + interface PalletContentChannelOwner extends Enum { readonly isMember: boolean; readonly asMember: u64; readonly isCuratorGroup: boolean; @@ -1007,41 +1100,41 @@ declare module '@polkadot/types/lookup' { readonly type: 'Member' | 'CuratorGroup'; } - /** @name PalletContentChannelTransferStatus (116) */ - export interface PalletContentChannelTransferStatus extends Enum { + /** @name PalletContentChannelTransferStatus (122) */ + interface PalletContentChannelTransferStatus extends Enum { readonly isNoActiveTransfer: boolean; readonly isPendingTransfer: boolean; readonly asPendingTransfer: PalletContentPendingTransfer; readonly type: 'NoActiveTransfer' | 'PendingTransfer'; } - /** @name PalletContentPendingTransfer (117) */ - export interface PalletContentPendingTransfer extends Struct { + /** @name PalletContentPendingTransfer (123) */ + interface PalletContentPendingTransfer extends Struct { readonly newOwner: PalletContentChannelOwner; readonly transferParams: PalletContentTransferCommitmentParametersBoundedBTreeMap; } - /** @name PalletContentTransferCommitmentParametersBoundedBTreeMap (118) */ - export interface PalletContentTransferCommitmentParametersBoundedBTreeMap extends Struct { + /** @name PalletContentTransferCommitmentParametersBoundedBTreeMap (124) */ + interface PalletContentTransferCommitmentParametersBoundedBTreeMap extends Struct { readonly newCollaborators: BTreeMap>; readonly price: u128; readonly transferId: u64; } - /** @name PalletContentLimitPerPeriod (119) */ - export interface PalletContentLimitPerPeriod extends Struct { + /** @name PalletContentLimitPerPeriod (125) */ + interface PalletContentLimitPerPeriod extends Struct { readonly limit: u64; readonly blockNumberPeriod: u32; } - /** @name PalletContentNftCounter (120) */ - export interface PalletContentNftCounter extends Struct { + /** @name PalletContentNftCounter (126) */ + interface PalletContentNftCounter extends Struct { readonly counter: u64; readonly lastUpdated: u32; } - /** @name PalletContentNftTypesEnglishAuctionParamsRecord (121) */ - export interface PalletContentNftTypesEnglishAuctionParamsRecord extends Struct { + /** @name PalletContentNftTypesEnglishAuctionParamsRecord (127) */ + interface PalletContentNftTypesEnglishAuctionParamsRecord extends Struct { readonly startingPrice: u128; readonly buyNowPrice: Option; readonly whitelist: BTreeSet; @@ -1051,8 +1144,8 @@ declare module '@polkadot/types/lookup' { readonly minBidStep: u128; } - /** @name PalletContentNftTypesOpenAuctionParamsRecord (123) */ - export interface PalletContentNftTypesOpenAuctionParamsRecord extends Struct { + /** @name PalletContentNftTypesOpenAuctionParamsRecord (129) */ + interface PalletContentNftTypesOpenAuctionParamsRecord extends Struct { readonly startingPrice: u128; readonly buyNowPrice: Option; readonly startsAt: Option; @@ -1060,16 +1153,16 @@ declare module '@polkadot/types/lookup' { readonly bidLockDuration: u32; } - /** @name PalletContentNftTypesNftIssuanceParametersRecord (124) */ - export interface PalletContentNftTypesNftIssuanceParametersRecord extends Struct { + /** @name PalletContentNftTypesNftIssuanceParametersRecord (130) */ + interface PalletContentNftTypesNftIssuanceParametersRecord extends Struct { readonly royalty: Option; readonly nftMetadata: Bytes; readonly nonChannelOwner: Option; readonly initTransactionalStatus: PalletContentNftTypesInitTransactionalStatusRecord; } - /** @name PalletContentNftTypesInitTransactionalStatusRecord (125) */ - export interface PalletContentNftTypesInitTransactionalStatusRecord extends Enum { + /** @name PalletContentNftTypesInitTransactionalStatusRecord (131) */ + interface PalletContentNftTypesInitTransactionalStatusRecord extends Enum { readonly isIdle: boolean; readonly isBuyNow: boolean; readonly asBuyNow: u128; @@ -1082,8 +1175,8 @@ declare module '@polkadot/types/lookup' { readonly type: 'Idle' | 'BuyNow' | 'InitiatedOfferToMember' | 'EnglishAuction' | 'OpenAuction'; } - /** @name PalletContentChannelCreationParametersRecord (127) */ - export interface PalletContentChannelCreationParametersRecord extends Struct { + /** @name PalletContentChannelCreationParametersRecord (133) */ + interface PalletContentChannelCreationParametersRecord extends Struct { readonly assets: Option; readonly meta: Option; readonly collaborators: BTreeMap>; @@ -1093,26 +1186,26 @@ declare module '@polkadot/types/lookup' { readonly expectedDataObjectStateBloatBond: u128; } - /** @name PalletContentStorageAssetsRecord (128) */ - export interface PalletContentStorageAssetsRecord extends Struct { + /** @name PalletContentStorageAssetsRecord (134) */ + interface PalletContentStorageAssetsRecord extends Struct { readonly objectCreationList: Vec; readonly expectedDataSizeFee: u128; } - /** @name PalletStorageDataObjectCreationParameters (130) */ - export interface PalletStorageDataObjectCreationParameters extends Struct { + /** @name PalletStorageDataObjectCreationParameters (136) */ + interface PalletStorageDataObjectCreationParameters extends Struct { readonly size_: u64; readonly ipfsContentId: Bytes; } - /** @name PalletStorageDistributionBucketIdRecord (131) */ - export interface PalletStorageDistributionBucketIdRecord extends Struct { + /** @name PalletStorageDistributionBucketIdRecord (137) */ + interface PalletStorageDistributionBucketIdRecord extends Struct { readonly distributionBucketFamilyId: u64; readonly distributionBucketIndex: u64; } - /** @name PalletContentChannelUpdateParametersRecord (138) */ - export interface PalletContentChannelUpdateParametersRecord extends Struct { + /** @name PalletContentChannelUpdateParametersRecord (144) */ + interface PalletContentChannelUpdateParametersRecord extends Struct { readonly assetsToUpload: Option; readonly newMeta: Option; readonly assetsToRemove: BTreeSet; @@ -1121,8 +1214,8 @@ declare module '@polkadot/types/lookup' { readonly storageBucketsNumWitness: Option; } - /** @name PalletContentVideoCreationParametersRecord (140) */ - export interface PalletContentVideoCreationParametersRecord extends Struct { + /** @name PalletContentVideoCreationParametersRecord (146) */ + interface PalletContentVideoCreationParametersRecord extends Struct { readonly assets: Option; readonly meta: Option; readonly autoIssueNft: Option; @@ -1131,8 +1224,8 @@ declare module '@polkadot/types/lookup' { readonly storageBucketsNumWitness: u32; } - /** @name PalletContentVideoUpdateParametersRecord (142) */ - export interface PalletContentVideoUpdateParametersRecord extends Struct { + /** @name PalletContentVideoUpdateParametersRecord (148) */ + interface PalletContentVideoUpdateParametersRecord extends Struct { readonly assetsToUpload: Option; readonly newMeta: Option; readonly assetsToRemove: BTreeSet; @@ -1141,30 +1234,28 @@ declare module '@polkadot/types/lookup' { readonly storageBucketsNumWitness: Option; } - /** @name PalletContentPermissionsCuratorGroupIterableEnumsContentModerationAction (145) */ - export interface PalletContentPermissionsCuratorGroupIterableEnumsContentModerationAction extends Enum { + /** @name PalletContentPermissionsCuratorGroupIterableEnumsContentModerationAction (151) */ + interface PalletContentPermissionsCuratorGroupIterableEnumsContentModerationAction extends Enum { readonly isHideVideo: boolean; readonly isHideChannel: boolean; readonly isChangeChannelFeatureStatus: boolean; readonly asChangeChannelFeatureStatus: PalletContentPermissionsCuratorGroupIterableEnumsPausableChannelFeature; - readonly isDeleteVideo: boolean; - readonly isDeleteChannel: boolean; readonly isDeleteVideoAssets: boolean; readonly asDeleteVideoAssets: bool; readonly isDeleteNonVideoChannelAssets: boolean; readonly isUpdateChannelNftLimits: boolean; - readonly type: 'HideVideo' | 'HideChannel' | 'ChangeChannelFeatureStatus' | 'DeleteVideo' | 'DeleteChannel' | 'DeleteVideoAssets' | 'DeleteNonVideoChannelAssets' | 'UpdateChannelNftLimits'; + readonly type: 'HideVideo' | 'HideChannel' | 'ChangeChannelFeatureStatus' | 'DeleteVideoAssets' | 'DeleteNonVideoChannelAssets' | 'UpdateChannelNftLimits'; } - /** @name PalletContentTransferCommitmentParametersBTreeMap (149) */ - export interface PalletContentTransferCommitmentParametersBTreeMap extends Struct { + /** @name PalletContentTransferCommitmentParametersBTreeMap (155) */ + interface PalletContentTransferCommitmentParametersBTreeMap extends Struct { readonly newCollaborators: BTreeMap>; readonly price: u128; readonly transferId: u64; } - /** @name PalletContentUpdateChannelPayoutsParametersRecord (150) */ - export interface PalletContentUpdateChannelPayoutsParametersRecord extends Struct { + /** @name PalletContentUpdateChannelPayoutsParametersRecord (156) */ + interface PalletContentUpdateChannelPayoutsParametersRecord extends Struct { readonly commitment: Option; readonly payload: Option; readonly minCashoutAllowed: Option; @@ -1172,30 +1263,30 @@ declare module '@polkadot/types/lookup' { readonly channelCashoutsEnabled: Option; } - /** @name PalletContentChannelPayoutsPayloadParametersRecord (151) */ - export interface PalletContentChannelPayoutsPayloadParametersRecord extends Struct { + /** @name PalletContentChannelPayoutsPayloadParametersRecord (157) */ + interface PalletContentChannelPayoutsPayloadParametersRecord extends Struct { readonly objectCreationParams: PalletStorageDataObjectCreationParameters; readonly expectedDataSizeFee: u128; readonly expectedDataObjectStateBloatBond: u128; } - /** @name PalletContentChannelFundsDestination (155) */ - export interface PalletContentChannelFundsDestination extends Enum { + /** @name PalletContentChannelFundsDestination (161) */ + interface PalletContentChannelFundsDestination extends Enum { readonly isAccountId: boolean; readonly asAccountId: AccountId32; readonly isCouncilBudget: boolean; readonly type: 'AccountId' | 'CouncilBudget'; } - /** @name PalletContentNftLimitPeriod (156) */ - export interface PalletContentNftLimitPeriod extends Enum { + /** @name PalletContentNftLimitPeriod (162) */ + interface PalletContentNftLimitPeriod extends Enum { readonly isDaily: boolean; readonly isWeekly: boolean; readonly type: 'Daily' | 'Weekly'; } - /** @name PalletStorageRawEvent (157) */ - export interface PalletStorageRawEvent extends Enum { + /** @name PalletStorageRawEvent (163) */ + interface PalletStorageRawEvent extends Enum { readonly isStorageBucketCreated: boolean; readonly asStorageBucketCreated: ITuple<[u64, Option, bool, u64, u64]>; readonly isStorageBucketInvitationAccepted: boolean; @@ -1283,8 +1374,8 @@ declare module '@polkadot/types/lookup' { readonly type: 'StorageBucketCreated' | 'StorageBucketInvitationAccepted' | 'StorageBucketsUpdatedForBag' | 'DataObjectsUploaded' | 'StorageOperatorMetadataSet' | 'StorageBucketVoucherLimitsSet' | 'PendingDataObjectsAccepted' | 'StorageBucketInvitationCancelled' | 'StorageBucketOperatorInvited' | 'StorageBucketOperatorRemoved' | 'UploadingBlockStatusUpdated' | 'DataObjectPerMegabyteFeeUpdated' | 'StorageBucketsPerBagLimitUpdated' | 'StorageBucketsVoucherMaxLimitsUpdated' | 'DataObjectsMoved' | 'DataObjectsDeleted' | 'StorageBucketStatusUpdated' | 'UpdateBlacklist' | 'DynamicBagDeleted' | 'DynamicBagCreated' | 'VoucherChanged' | 'StorageBucketDeleted' | 'NumberOfStorageBucketsInDynamicBagCreationPolicyUpdated' | 'DistributionBucketFamilyCreated' | 'DistributionBucketFamilyDeleted' | 'DistributionBucketCreated' | 'DistributionBucketStatusUpdated' | 'DistributionBucketDeleted' | 'DistributionBucketsUpdatedForBag' | 'DistributionBucketsPerBagLimitUpdated' | 'DistributionBucketModeUpdated' | 'FamiliesInDynamicBagCreationPolicyUpdated' | 'DistributionBucketOperatorInvited' | 'DistributionBucketInvitationCancelled' | 'DistributionBucketInvitationAccepted' | 'DistributionBucketMetadataSet' | 'DistributionBucketOperatorRemoved' | 'DistributionBucketFamilyMetadataSet' | 'DataObjectStateBloatBondValueUpdated' | 'DataObjectsUpdated' | 'StorageOperatorRemarked' | 'DistributionOperatorRemarked'; } - /** @name PalletStorageUploadParametersRecord (158) */ - export interface PalletStorageUploadParametersRecord extends Struct { + /** @name PalletStorageUploadParametersRecord (164) */ + interface PalletStorageUploadParametersRecord extends Struct { readonly bagId: PalletStorageBagIdType; readonly objectCreationList: Vec; readonly stateBloatBondSourceAccountId: AccountId32; @@ -1292,8 +1383,8 @@ declare module '@polkadot/types/lookup' { readonly expectedDataObjectStateBloatBond: u128; } - /** @name PalletStorageBagIdType (159) */ - export interface PalletStorageBagIdType extends Enum { + /** @name PalletStorageBagIdType (165) */ + interface PalletStorageBagIdType extends Enum { readonly isStatic: boolean; readonly asStatic: PalletStorageStaticBagId; readonly isDynamic: boolean; @@ -1301,16 +1392,16 @@ declare module '@polkadot/types/lookup' { readonly type: 'Static' | 'Dynamic'; } - /** @name PalletStorageStaticBagId (160) */ - export interface PalletStorageStaticBagId extends Enum { + /** @name PalletStorageStaticBagId (166) */ + interface PalletStorageStaticBagId extends Enum { readonly isCouncil: boolean; readonly isWorkingGroup: boolean; readonly asWorkingGroup: PalletCommonWorkingGroupIterableEnumsWorkingGroup; readonly type: 'Council' | 'WorkingGroup'; } - /** @name PalletStorageDynamicBagIdType (161) */ - export interface PalletStorageDynamicBagIdType extends Enum { + /** @name PalletStorageDynamicBagIdType (167) */ + interface PalletStorageDynamicBagIdType extends Enum { readonly isMember: boolean; readonly asMember: u64; readonly isChannel: boolean; @@ -1318,8 +1409,8 @@ declare module '@polkadot/types/lookup' { readonly type: 'Member' | 'Channel'; } - /** @name PalletStorageDynBagCreationParametersRecord (162) */ - export interface PalletStorageDynBagCreationParametersRecord extends Struct { + /** @name PalletStorageDynBagCreationParametersRecord (168) */ + interface PalletStorageDynBagCreationParametersRecord extends Struct { readonly bagId: PalletStorageDynamicBagIdType; readonly objectCreationList: Vec; readonly stateBloatBondSourceAccountId: AccountId32; @@ -1329,29 +1420,29 @@ declare module '@polkadot/types/lookup' { readonly distributionBuckets: BTreeSet; } - /** @name PalletStorageVoucher (165) */ - export interface PalletStorageVoucher extends Struct { + /** @name PalletStorageVoucher (171) */ + interface PalletStorageVoucher extends Struct { readonly sizeLimit: u64; readonly objectsLimit: u64; readonly sizeUsed: u64; readonly objectsUsed: u64; } - /** @name PalletStorageDynamicBagType (166) */ - export interface PalletStorageDynamicBagType extends Enum { + /** @name PalletStorageDynamicBagType (172) */ + interface PalletStorageDynamicBagType extends Enum { readonly isMember: boolean; readonly isChannel: boolean; readonly type: 'Member' | 'Channel'; } - /** @name PalletProjectTokenEventsRawEvent (170) */ - export interface PalletProjectTokenEventsRawEvent extends Enum { + /** @name PalletProjectTokenEventsRawEvent (176) */ + interface PalletProjectTokenEventsRawEvent extends Enum { readonly isTokenAmountTransferred: boolean; - readonly asTokenAmountTransferred: ITuple<[u64, u64, BTreeMap, Bytes]>; + readonly asTokenAmountTransferred: ITuple<[u64, u64, PalletProjectTokenTransfers, Bytes]>; readonly isTokenAmountTransferredByIssuer: boolean; - readonly asTokenAmountTransferredByIssuer: ITuple<[u64, u64, BTreeMap, Bytes]>; + readonly asTokenAmountTransferredByIssuer: ITuple<[u64, u64, PalletProjectTokenTransfers, Bytes]>; readonly isPatronageRateDecreasedTo: boolean; - readonly asPatronageRateDecreasedTo: ITuple<[u64, Perquintill]>; + readonly asPatronageRateDecreasedTo: ITuple<[u64, Permill]>; readonly isPatronageCreditClaimed: boolean; readonly asPatronageCreditClaimed: ITuple<[u64, u128, u64]>; readonly isRevenueSplitIssued: boolean; @@ -1382,62 +1473,75 @@ declare module '@polkadot/types/lookup' { readonly asTransferPolicyChangedToPermissionless: u64; readonly isTokensBurned: boolean; readonly asTokensBurned: ITuple<[u64, u64, u128]>; - readonly type: 'TokenAmountTransferred' | 'TokenAmountTransferredByIssuer' | 'PatronageRateDecreasedTo' | 'PatronageCreditClaimed' | 'RevenueSplitIssued' | 'RevenueSplitFinalized' | 'UserParticipatedInSplit' | 'RevenueSplitLeft' | 'MemberJoinedWhitelist' | 'AccountDustedBy' | 'TokenDeissued' | 'TokenIssued' | 'TokenSaleInitialized' | 'UpcomingTokenSaleUpdated' | 'TokensPurchasedOnSale' | 'TokenSaleFinalized' | 'TransferPolicyChangedToPermissionless' | 'TokensBurned'; - } - - /** @name PalletProjectTokenTransferPolicy (171) */ - export interface PalletProjectTokenTransferPolicy extends Enum { + readonly isAmmActivated: boolean; + readonly asAmmActivated: ITuple<[u64, u64, PalletProjectTokenAmmCurve]>; + readonly isTokensBoughtOnAmm: boolean; + readonly asTokensBoughtOnAmm: ITuple<[u64, u64, u128, u128]>; + readonly isTokensSoldOnAmm: boolean; + readonly asTokensSoldOnAmm: ITuple<[u64, u64, u128, u128]>; + readonly isAmmDeactivated: boolean; + readonly asAmmDeactivated: ITuple<[u64, u64, u128]>; + readonly isFrozenStatusUpdated: boolean; + readonly asFrozenStatusUpdated: bool; + readonly type: 'TokenAmountTransferred' | 'TokenAmountTransferredByIssuer' | 'PatronageRateDecreasedTo' | 'PatronageCreditClaimed' | 'RevenueSplitIssued' | 'RevenueSplitFinalized' | 'UserParticipatedInSplit' | 'RevenueSplitLeft' | 'MemberJoinedWhitelist' | 'AccountDustedBy' | 'TokenDeissued' | 'TokenIssued' | 'TokenSaleInitialized' | 'UpcomingTokenSaleUpdated' | 'TokensPurchasedOnSale' | 'TokenSaleFinalized' | 'TransferPolicyChangedToPermissionless' | 'TokensBurned' | 'AmmActivated' | 'TokensBoughtOnAmm' | 'TokensSoldOnAmm' | 'AmmDeactivated' | 'FrozenStatusUpdated'; + } + + /** @name PalletProjectTokenTransferPolicy (177) */ + interface PalletProjectTokenTransferPolicy extends Enum { readonly isPermissionless: boolean; readonly isPermissioned: boolean; readonly asPermissioned: H256; readonly type: 'Permissionless' | 'Permissioned'; } - /** @name PalletProjectTokenTokenIssuanceParameters (172) */ - export interface PalletProjectTokenTokenIssuanceParameters extends Struct { + /** @name PalletProjectTokenTokenIssuanceParameters (178) */ + interface PalletProjectTokenTokenIssuanceParameters extends Struct { readonly initialAllocation: BTreeMap; - readonly symbol: H256; readonly transferPolicy: PalletProjectTokenTransferPolicyParams; readonly patronageRate: Permill; readonly revenueSplitRate: Permill; + readonly metadata: Bytes; } - /** @name PalletProjectTokenTokenAllocation (173) */ - export interface PalletProjectTokenTokenAllocation extends Struct { + /** @name PalletProjectTokenTokenAllocation (179) */ + interface PalletProjectTokenTokenAllocation extends Struct { readonly amount: u128; readonly vestingScheduleParams: Option; } - /** @name PalletProjectTokenVestingScheduleParams (174) */ - export interface PalletProjectTokenVestingScheduleParams extends Struct { + /** @name PalletProjectTokenVestingScheduleParams (180) */ + interface PalletProjectTokenVestingScheduleParams extends Struct { readonly linearVestingDuration: u32; readonly blocksBeforeCliff: u32; readonly cliffAmountPercentage: Permill; } - /** @name PalletProjectTokenTransferPolicyParams (177) */ - export interface PalletProjectTokenTransferPolicyParams extends Enum { + /** @name PalletProjectTokenTransferPolicyParams (183) */ + interface PalletProjectTokenTransferPolicyParams extends Enum { readonly isPermissionless: boolean; readonly isPermissioned: boolean; readonly asPermissioned: PalletProjectTokenWhitelistParams; readonly type: 'Permissionless' | 'Permissioned'; } - /** @name PalletProjectTokenWhitelistParams (178) */ - export interface PalletProjectTokenWhitelistParams extends Struct { + /** @name PalletProjectTokenWhitelistParams (184) */ + interface PalletProjectTokenWhitelistParams extends Struct { readonly commitment: H256; readonly payload: Option; } - /** @name PalletProjectTokenSingleDataObjectUploadParams (179) */ - export interface PalletProjectTokenSingleDataObjectUploadParams extends Struct { + /** @name PalletProjectTokenSingleDataObjectUploadParams (185) */ + interface PalletProjectTokenSingleDataObjectUploadParams extends Struct { readonly objectCreationParams: PalletStorageDataObjectCreationParameters; readonly expectedDataSizeFee: u128; readonly expectedDataObjectStateBloatBond: u128; } - /** @name PalletProjectTokenValidated (186) */ - export interface PalletProjectTokenValidated extends Enum { + /** @name PalletProjectTokenTransfers (191) */ + interface PalletProjectTokenTransfers extends BTreeMap {} + + /** @name PalletProjectTokenValidated (192) */ + interface PalletProjectTokenValidated extends Enum { readonly isExisting: boolean; readonly asExisting: u64; readonly isNonExisting: boolean; @@ -1445,20 +1549,20 @@ declare module '@polkadot/types/lookup' { readonly type: 'Existing' | 'NonExisting'; } - /** @name PalletProjectTokenValidatedPayment (187) */ - export interface PalletProjectTokenValidatedPayment extends Struct { + /** @name PalletProjectTokenValidatedPayment (193) */ + interface PalletProjectTokenValidatedPayment extends Struct { readonly payment: PalletProjectTokenPaymentWithVesting; readonly vestingCleanupCandidate: Option; } - /** @name PalletProjectTokenPaymentWithVesting (188) */ - export interface PalletProjectTokenPaymentWithVesting extends Struct { + /** @name PalletProjectTokenPaymentWithVesting (194) */ + interface PalletProjectTokenPaymentWithVesting extends Struct { readonly amount: u128; readonly vestingSchedule: Option; } - /** @name PalletProjectTokenVestingSource (190) */ - export interface PalletProjectTokenVestingSource extends Enum { + /** @name PalletProjectTokenVestingSource (196) */ + interface PalletProjectTokenVestingSource extends Enum { readonly isInitialIssuance: boolean; readonly isSale: boolean; readonly asSale: u32; @@ -1467,8 +1571,8 @@ declare module '@polkadot/types/lookup' { readonly type: 'InitialIssuance' | 'Sale' | 'IssuerTransfer'; } - /** @name PalletProjectTokenTokenSale (194) */ - export interface PalletProjectTokenTokenSale extends Struct { + /** @name PalletProjectTokenTokenSale (200) */ + interface PalletProjectTokenTokenSale extends Struct { readonly unitPrice: u128; readonly quantityLeft: u128; readonly fundsCollected: u128; @@ -1481,8 +1585,15 @@ declare module '@polkadot/types/lookup' { readonly autoFinalize: bool; } - /** @name PalletProposalsEngineRawEvent (196) */ - export interface PalletProposalsEngineRawEvent extends Enum { + /** @name PalletProjectTokenAmmCurve (201) */ + interface PalletProjectTokenAmmCurve extends Struct { + readonly slope: u128; + readonly intercept: u128; + readonly providedSupply: u128; + } + + /** @name PalletProposalsEngineRawEvent (202) */ + interface PalletProposalsEngineRawEvent extends Enum { readonly isProposalStatusUpdated: boolean; readonly asProposalStatusUpdated: ITuple<[u32, PalletProposalsEngineProposalStatusesProposalStatus]>; readonly isProposalDecisionMade: boolean; @@ -1498,8 +1609,8 @@ declare module '@polkadot/types/lookup' { readonly type: 'ProposalStatusUpdated' | 'ProposalDecisionMade' | 'ProposalExecuted' | 'Voted' | 'ProposalCancelled' | 'ProposerRemarked'; } - /** @name PalletProposalsEngineProposalStatusesProposalStatus (197) */ - export interface PalletProposalsEngineProposalStatusesProposalStatus extends Enum { + /** @name PalletProposalsEngineProposalStatusesProposalStatus (203) */ + interface PalletProposalsEngineProposalStatusesProposalStatus extends Enum { readonly isActive: boolean; readonly isPendingExecution: boolean; readonly asPendingExecution: u32; @@ -1507,8 +1618,8 @@ declare module '@polkadot/types/lookup' { readonly type: 'Active' | 'PendingExecution' | 'PendingConstitutionality'; } - /** @name PalletProposalsEngineProposalStatusesProposalDecision (198) */ - export interface PalletProposalsEngineProposalStatusesProposalDecision extends Enum { + /** @name PalletProposalsEngineProposalStatusesProposalDecision (204) */ + interface PalletProposalsEngineProposalStatusesProposalDecision extends Enum { readonly isCanceled: boolean; readonly isCanceledByRuntime: boolean; readonly isVetoed: boolean; @@ -1520,15 +1631,15 @@ declare module '@polkadot/types/lookup' { readonly type: 'Canceled' | 'CanceledByRuntime' | 'Vetoed' | 'Rejected' | 'Slashed' | 'Expired' | 'Approved'; } - /** @name PalletProposalsEngineProposalStatusesApprovedProposalDecision (199) */ - export interface PalletProposalsEngineProposalStatusesApprovedProposalDecision extends Enum { + /** @name PalletProposalsEngineProposalStatusesApprovedProposalDecision (205) */ + interface PalletProposalsEngineProposalStatusesApprovedProposalDecision extends Enum { readonly isPendingExecution: boolean; readonly isPendingConstitutionality: boolean; readonly type: 'PendingExecution' | 'PendingConstitutionality'; } - /** @name PalletProposalsEngineProposalStatusesExecutionStatus (200) */ - export interface PalletProposalsEngineProposalStatusesExecutionStatus extends Enum { + /** @name PalletProposalsEngineProposalStatusesExecutionStatus (206) */ + interface PalletProposalsEngineProposalStatusesExecutionStatus extends Enum { readonly isExecuted: boolean; readonly isExecutionFailed: boolean; readonly asExecutionFailed: { @@ -1537,8 +1648,8 @@ declare module '@polkadot/types/lookup' { readonly type: 'Executed' | 'ExecutionFailed'; } - /** @name PalletProposalsEngineVoteKind (201) */ - export interface PalletProposalsEngineVoteKind extends Enum { + /** @name PalletProposalsEngineVoteKind (207) */ + interface PalletProposalsEngineVoteKind extends Enum { readonly isApprove: boolean; readonly isReject: boolean; readonly isSlash: boolean; @@ -1546,8 +1657,8 @@ declare module '@polkadot/types/lookup' { readonly type: 'Approve' | 'Reject' | 'Slash' | 'Abstain'; } - /** @name PalletProposalsDiscussionRawEvent (202) */ - export interface PalletProposalsDiscussionRawEvent extends Enum { + /** @name PalletProposalsDiscussionRawEvent (208) */ + interface PalletProposalsDiscussionRawEvent extends Enum { readonly isThreadCreated: boolean; readonly asThreadCreated: ITuple<[u64, u64]>; readonly isPostCreated: boolean; @@ -1561,23 +1672,23 @@ declare module '@polkadot/types/lookup' { readonly type: 'ThreadCreated' | 'PostCreated' | 'PostUpdated' | 'ThreadModeChanged' | 'PostDeleted'; } - /** @name PalletProposalsDiscussionThreadModeBTreeSet (203) */ - export interface PalletProposalsDiscussionThreadModeBTreeSet extends Enum { + /** @name PalletProposalsDiscussionThreadModeBTreeSet (209) */ + interface PalletProposalsDiscussionThreadModeBTreeSet extends Enum { readonly isOpen: boolean; readonly isClosed: boolean; readonly asClosed: BTreeSet; readonly type: 'Open' | 'Closed'; } - /** @name PalletProposalsCodexRawEvent (204) */ - export interface PalletProposalsCodexRawEvent extends Enum { + /** @name PalletProposalsCodexRawEvent (210) */ + interface PalletProposalsCodexRawEvent extends Enum { readonly isProposalCreated: boolean; readonly asProposalCreated: ITuple<[u32, PalletProposalsCodexGeneralProposalParams, PalletProposalsCodexProposalDetails, u64]>; readonly type: 'ProposalCreated'; } - /** @name PalletProposalsCodexGeneralProposalParams (205) */ - export interface PalletProposalsCodexGeneralProposalParams extends Struct { + /** @name PalletProposalsCodexGeneralProposalParams (211) */ + interface PalletProposalsCodexGeneralProposalParams extends Struct { readonly memberId: u64; readonly title: Bytes; readonly description: Bytes; @@ -1585,8 +1696,8 @@ declare module '@polkadot/types/lookup' { readonly exactExecutionBlock: Option; } - /** @name PalletProposalsCodexProposalDetails (206) */ - export interface PalletProposalsCodexProposalDetails extends Enum { + /** @name PalletProposalsCodexProposalDetails (212) */ + interface PalletProposalsCodexProposalDetails extends Enum { readonly isSignal: boolean; readonly asSignal: Bytes; readonly isRuntimeUpgrade: boolean; @@ -1633,45 +1744,53 @@ declare module '@polkadot/types/lookup' { readonly asUpdateGlobalNftLimit: ITuple<[PalletContentNftLimitPeriod, u64]>; readonly isUpdateChannelPayouts: boolean; readonly asUpdateChannelPayouts: PalletContentUpdateChannelPayoutsParametersRecord; - readonly type: 'Signal' | 'RuntimeUpgrade' | 'FundingRequest' | 'SetMaxValidatorCount' | 'CreateWorkingGroupLeadOpening' | 'FillWorkingGroupLeadOpening' | 'UpdateWorkingGroupBudget' | 'DecreaseWorkingGroupLeadStake' | 'SlashWorkingGroupLead' | 'SetWorkingGroupLeadReward' | 'TerminateWorkingGroupLead' | 'AmendConstitution' | 'CancelWorkingGroupLeadOpening' | 'SetMembershipPrice' | 'SetCouncilBudgetIncrement' | 'SetCouncilorReward' | 'SetInitialInvitationBalance' | 'SetInitialInvitationCount' | 'SetMembershipLeadInvitationQuota' | 'SetReferralCut' | 'VetoProposal' | 'UpdateGlobalNftLimit' | 'UpdateChannelPayouts'; + readonly isSetPalletFozenStatus: boolean; + readonly asSetPalletFozenStatus: ITuple<[bool, PalletCommonFreezablePallet]>; + readonly type: 'Signal' | 'RuntimeUpgrade' | 'FundingRequest' | 'SetMaxValidatorCount' | 'CreateWorkingGroupLeadOpening' | 'FillWorkingGroupLeadOpening' | 'UpdateWorkingGroupBudget' | 'DecreaseWorkingGroupLeadStake' | 'SlashWorkingGroupLead' | 'SetWorkingGroupLeadReward' | 'TerminateWorkingGroupLead' | 'AmendConstitution' | 'CancelWorkingGroupLeadOpening' | 'SetMembershipPrice' | 'SetCouncilBudgetIncrement' | 'SetCouncilorReward' | 'SetInitialInvitationBalance' | 'SetInitialInvitationCount' | 'SetMembershipLeadInvitationQuota' | 'SetReferralCut' | 'VetoProposal' | 'UpdateGlobalNftLimit' | 'UpdateChannelPayouts' | 'SetPalletFozenStatus'; } - /** @name PalletCommonFundingRequestParameters (208) */ - export interface PalletCommonFundingRequestParameters extends Struct { + /** @name PalletCommonFundingRequestParameters (214) */ + interface PalletCommonFundingRequestParameters extends Struct { readonly account: AccountId32; readonly amount: u128; } - /** @name PalletProposalsCodexCreateOpeningParameters (209) */ - export interface PalletProposalsCodexCreateOpeningParameters extends Struct { + /** @name PalletProposalsCodexCreateOpeningParameters (215) */ + interface PalletProposalsCodexCreateOpeningParameters extends Struct { readonly description: Bytes; readonly stakePolicy: PalletWorkingGroupStakePolicy; readonly rewardPerBlock: Option; readonly group: PalletCommonWorkingGroupIterableEnumsWorkingGroup; } - /** @name PalletWorkingGroupStakePolicy (210) */ - export interface PalletWorkingGroupStakePolicy extends Struct { + /** @name PalletWorkingGroupStakePolicy (216) */ + interface PalletWorkingGroupStakePolicy extends Struct { readonly stakeAmount: u128; readonly leavingUnstakingPeriod: u32; } - /** @name PalletProposalsCodexFillOpeningParameters (211) */ - export interface PalletProposalsCodexFillOpeningParameters extends Struct { + /** @name PalletProposalsCodexFillOpeningParameters (217) */ + interface PalletProposalsCodexFillOpeningParameters extends Struct { readonly openingId: u64; readonly applicationId: u64; readonly workingGroup: PalletCommonWorkingGroupIterableEnumsWorkingGroup; } - /** @name PalletProposalsCodexTerminateRoleParameters (212) */ - export interface PalletProposalsCodexTerminateRoleParameters extends Struct { + /** @name PalletProposalsCodexTerminateRoleParameters (218) */ + interface PalletProposalsCodexTerminateRoleParameters extends Struct { readonly workerId: u64; readonly slashingAmount: Option; readonly group: PalletCommonWorkingGroupIterableEnumsWorkingGroup; } - /** @name PalletWorkingGroupRawEventInstance1 (213) */ - export interface PalletWorkingGroupRawEventInstance1 extends Enum { + /** @name PalletCommonFreezablePallet (219) */ + interface PalletCommonFreezablePallet extends Enum { + readonly isProjectToken: boolean; + readonly type: 'ProjectToken'; + } + + /** @name PalletWorkingGroupRawEventInstance1 (220) */ + interface PalletWorkingGroupRawEventInstance1 extends Enum { readonly isOpeningAdded: boolean; readonly asOpeningAdded: ITuple<[u64, Bytes, PalletWorkingGroupOpeningType, PalletWorkingGroupStakePolicy, Option]>; readonly isAppliedOnOpening: boolean; @@ -1724,15 +1843,15 @@ declare module '@polkadot/types/lookup' { readonly type: 'OpeningAdded' | 'AppliedOnOpening' | 'OpeningFilled' | 'LeaderSet' | 'WorkerRoleAccountUpdated' | 'LeaderUnset' | 'WorkerExited' | 'WorkerStartedLeaving' | 'TerminatedWorker' | 'TerminatedLeader' | 'StakeSlashed' | 'StakeDecreased' | 'StakeIncreased' | 'ApplicationWithdrawn' | 'OpeningCanceled' | 'BudgetSet' | 'WorkerRewardAccountUpdated' | 'WorkerRewardAmountUpdated' | 'StatusTextChanged' | 'BudgetSpending' | 'RewardPaid' | 'NewMissedRewardLevelReached' | 'WorkingGroupBudgetFunded' | 'LeadRemarked' | 'WorkerRemarked'; } - /** @name PalletWorkingGroupOpeningType (217) */ - export interface PalletWorkingGroupOpeningType extends Enum { + /** @name PalletWorkingGroupOpeningType (224) */ + interface PalletWorkingGroupOpeningType extends Enum { readonly isLeader: boolean; readonly isRegular: boolean; readonly type: 'Leader' | 'Regular'; } - /** @name PalletWorkingGroupApplyOnOpeningParams (218) */ - export interface PalletWorkingGroupApplyOnOpeningParams extends Struct { + /** @name PalletWorkingGroupApplyOnOpeningParams (225) */ + interface PalletWorkingGroupApplyOnOpeningParams extends Struct { readonly memberId: u64; readonly openingId: u64; readonly roleAccountId: AccountId32; @@ -1741,24 +1860,24 @@ declare module '@polkadot/types/lookup' { readonly stakeParameters: PalletWorkingGroupStakeParameters; } - /** @name PalletWorkingGroupStakeParameters (219) */ - export interface PalletWorkingGroupStakeParameters extends Struct { + /** @name PalletWorkingGroupStakeParameters (226) */ + interface PalletWorkingGroupStakeParameters extends Struct { readonly stake: u128; readonly stakingAccountId: AccountId32; } - /** @name PalletWorkingGroupInstance1 (220) */ - export type PalletWorkingGroupInstance1 = Null; + /** @name PalletWorkingGroupInstance1 (227) */ + type PalletWorkingGroupInstance1 = Null; - /** @name PalletWorkingGroupRewardPaymentType (221) */ - export interface PalletWorkingGroupRewardPaymentType extends Enum { + /** @name PalletWorkingGroupRewardPaymentType (228) */ + interface PalletWorkingGroupRewardPaymentType extends Enum { readonly isMissedReward: boolean; readonly isRegularReward: boolean; readonly type: 'MissedReward' | 'RegularReward'; } - /** @name PalletWorkingGroupRawEventInstance2 (222) */ - export interface PalletWorkingGroupRawEventInstance2 extends Enum { + /** @name PalletWorkingGroupRawEventInstance2 (229) */ + interface PalletWorkingGroupRawEventInstance2 extends Enum { readonly isOpeningAdded: boolean; readonly asOpeningAdded: ITuple<[u64, Bytes, PalletWorkingGroupOpeningType, PalletWorkingGroupStakePolicy, Option]>; readonly isAppliedOnOpening: boolean; @@ -1811,11 +1930,11 @@ declare module '@polkadot/types/lookup' { readonly type: 'OpeningAdded' | 'AppliedOnOpening' | 'OpeningFilled' | 'LeaderSet' | 'WorkerRoleAccountUpdated' | 'LeaderUnset' | 'WorkerExited' | 'WorkerStartedLeaving' | 'TerminatedWorker' | 'TerminatedLeader' | 'StakeSlashed' | 'StakeDecreased' | 'StakeIncreased' | 'ApplicationWithdrawn' | 'OpeningCanceled' | 'BudgetSet' | 'WorkerRewardAccountUpdated' | 'WorkerRewardAmountUpdated' | 'StatusTextChanged' | 'BudgetSpending' | 'RewardPaid' | 'NewMissedRewardLevelReached' | 'WorkingGroupBudgetFunded' | 'LeadRemarked' | 'WorkerRemarked'; } - /** @name PalletWorkingGroupInstance2 (223) */ - export type PalletWorkingGroupInstance2 = Null; + /** @name PalletWorkingGroupInstance2 (230) */ + type PalletWorkingGroupInstance2 = Null; - /** @name PalletWorkingGroupRawEventInstance3 (224) */ - export interface PalletWorkingGroupRawEventInstance3 extends Enum { + /** @name PalletWorkingGroupRawEventInstance3 (231) */ + interface PalletWorkingGroupRawEventInstance3 extends Enum { readonly isOpeningAdded: boolean; readonly asOpeningAdded: ITuple<[u64, Bytes, PalletWorkingGroupOpeningType, PalletWorkingGroupStakePolicy, Option]>; readonly isAppliedOnOpening: boolean; @@ -1868,11 +1987,11 @@ declare module '@polkadot/types/lookup' { readonly type: 'OpeningAdded' | 'AppliedOnOpening' | 'OpeningFilled' | 'LeaderSet' | 'WorkerRoleAccountUpdated' | 'LeaderUnset' | 'WorkerExited' | 'WorkerStartedLeaving' | 'TerminatedWorker' | 'TerminatedLeader' | 'StakeSlashed' | 'StakeDecreased' | 'StakeIncreased' | 'ApplicationWithdrawn' | 'OpeningCanceled' | 'BudgetSet' | 'WorkerRewardAccountUpdated' | 'WorkerRewardAmountUpdated' | 'StatusTextChanged' | 'BudgetSpending' | 'RewardPaid' | 'NewMissedRewardLevelReached' | 'WorkingGroupBudgetFunded' | 'LeadRemarked' | 'WorkerRemarked'; } - /** @name PalletWorkingGroupInstance3 (225) */ - export type PalletWorkingGroupInstance3 = Null; + /** @name PalletWorkingGroupInstance3 (232) */ + type PalletWorkingGroupInstance3 = Null; - /** @name PalletWorkingGroupRawEventInstance4 (226) */ - export interface PalletWorkingGroupRawEventInstance4 extends Enum { + /** @name PalletWorkingGroupRawEventInstance4 (233) */ + interface PalletWorkingGroupRawEventInstance4 extends Enum { readonly isOpeningAdded: boolean; readonly asOpeningAdded: ITuple<[u64, Bytes, PalletWorkingGroupOpeningType, PalletWorkingGroupStakePolicy, Option]>; readonly isAppliedOnOpening: boolean; @@ -1925,11 +2044,11 @@ declare module '@polkadot/types/lookup' { readonly type: 'OpeningAdded' | 'AppliedOnOpening' | 'OpeningFilled' | 'LeaderSet' | 'WorkerRoleAccountUpdated' | 'LeaderUnset' | 'WorkerExited' | 'WorkerStartedLeaving' | 'TerminatedWorker' | 'TerminatedLeader' | 'StakeSlashed' | 'StakeDecreased' | 'StakeIncreased' | 'ApplicationWithdrawn' | 'OpeningCanceled' | 'BudgetSet' | 'WorkerRewardAccountUpdated' | 'WorkerRewardAmountUpdated' | 'StatusTextChanged' | 'BudgetSpending' | 'RewardPaid' | 'NewMissedRewardLevelReached' | 'WorkingGroupBudgetFunded' | 'LeadRemarked' | 'WorkerRemarked'; } - /** @name PalletWorkingGroupInstance4 (227) */ - export type PalletWorkingGroupInstance4 = Null; + /** @name PalletWorkingGroupInstance4 (234) */ + type PalletWorkingGroupInstance4 = Null; - /** @name PalletWorkingGroupRawEventInstance5 (228) */ - export interface PalletWorkingGroupRawEventInstance5 extends Enum { + /** @name PalletWorkingGroupRawEventInstance5 (235) */ + interface PalletWorkingGroupRawEventInstance5 extends Enum { readonly isOpeningAdded: boolean; readonly asOpeningAdded: ITuple<[u64, Bytes, PalletWorkingGroupOpeningType, PalletWorkingGroupStakePolicy, Option]>; readonly isAppliedOnOpening: boolean; @@ -1982,11 +2101,11 @@ declare module '@polkadot/types/lookup' { readonly type: 'OpeningAdded' | 'AppliedOnOpening' | 'OpeningFilled' | 'LeaderSet' | 'WorkerRoleAccountUpdated' | 'LeaderUnset' | 'WorkerExited' | 'WorkerStartedLeaving' | 'TerminatedWorker' | 'TerminatedLeader' | 'StakeSlashed' | 'StakeDecreased' | 'StakeIncreased' | 'ApplicationWithdrawn' | 'OpeningCanceled' | 'BudgetSet' | 'WorkerRewardAccountUpdated' | 'WorkerRewardAmountUpdated' | 'StatusTextChanged' | 'BudgetSpending' | 'RewardPaid' | 'NewMissedRewardLevelReached' | 'WorkingGroupBudgetFunded' | 'LeadRemarked' | 'WorkerRemarked'; } - /** @name PalletWorkingGroupInstance5 (229) */ - export type PalletWorkingGroupInstance5 = Null; + /** @name PalletWorkingGroupInstance5 (236) */ + type PalletWorkingGroupInstance5 = Null; - /** @name PalletWorkingGroupRawEventInstance6 (230) */ - export interface PalletWorkingGroupRawEventInstance6 extends Enum { + /** @name PalletWorkingGroupRawEventInstance6 (237) */ + interface PalletWorkingGroupRawEventInstance6 extends Enum { readonly isOpeningAdded: boolean; readonly asOpeningAdded: ITuple<[u64, Bytes, PalletWorkingGroupOpeningType, PalletWorkingGroupStakePolicy, Option]>; readonly isAppliedOnOpening: boolean; @@ -2039,11 +2158,11 @@ declare module '@polkadot/types/lookup' { readonly type: 'OpeningAdded' | 'AppliedOnOpening' | 'OpeningFilled' | 'LeaderSet' | 'WorkerRoleAccountUpdated' | 'LeaderUnset' | 'WorkerExited' | 'WorkerStartedLeaving' | 'TerminatedWorker' | 'TerminatedLeader' | 'StakeSlashed' | 'StakeDecreased' | 'StakeIncreased' | 'ApplicationWithdrawn' | 'OpeningCanceled' | 'BudgetSet' | 'WorkerRewardAccountUpdated' | 'WorkerRewardAmountUpdated' | 'StatusTextChanged' | 'BudgetSpending' | 'RewardPaid' | 'NewMissedRewardLevelReached' | 'WorkingGroupBudgetFunded' | 'LeadRemarked' | 'WorkerRemarked'; } - /** @name PalletWorkingGroupInstance6 (231) */ - export type PalletWorkingGroupInstance6 = Null; + /** @name PalletWorkingGroupInstance6 (238) */ + type PalletWorkingGroupInstance6 = Null; - /** @name PalletWorkingGroupRawEventInstance7 (232) */ - export interface PalletWorkingGroupRawEventInstance7 extends Enum { + /** @name PalletWorkingGroupRawEventInstance7 (239) */ + interface PalletWorkingGroupRawEventInstance7 extends Enum { readonly isOpeningAdded: boolean; readonly asOpeningAdded: ITuple<[u64, Bytes, PalletWorkingGroupOpeningType, PalletWorkingGroupStakePolicy, Option]>; readonly isAppliedOnOpening: boolean; @@ -2096,11 +2215,11 @@ declare module '@polkadot/types/lookup' { readonly type: 'OpeningAdded' | 'AppliedOnOpening' | 'OpeningFilled' | 'LeaderSet' | 'WorkerRoleAccountUpdated' | 'LeaderUnset' | 'WorkerExited' | 'WorkerStartedLeaving' | 'TerminatedWorker' | 'TerminatedLeader' | 'StakeSlashed' | 'StakeDecreased' | 'StakeIncreased' | 'ApplicationWithdrawn' | 'OpeningCanceled' | 'BudgetSet' | 'WorkerRewardAccountUpdated' | 'WorkerRewardAmountUpdated' | 'StatusTextChanged' | 'BudgetSpending' | 'RewardPaid' | 'NewMissedRewardLevelReached' | 'WorkingGroupBudgetFunded' | 'LeadRemarked' | 'WorkerRemarked'; } - /** @name PalletWorkingGroupInstance7 (233) */ - export type PalletWorkingGroupInstance7 = Null; + /** @name PalletWorkingGroupInstance7 (240) */ + type PalletWorkingGroupInstance7 = Null; - /** @name PalletWorkingGroupRawEventInstance8 (234) */ - export interface PalletWorkingGroupRawEventInstance8 extends Enum { + /** @name PalletWorkingGroupRawEventInstance8 (241) */ + interface PalletWorkingGroupRawEventInstance8 extends Enum { readonly isOpeningAdded: boolean; readonly asOpeningAdded: ITuple<[u64, Bytes, PalletWorkingGroupOpeningType, PalletWorkingGroupStakePolicy, Option]>; readonly isAppliedOnOpening: boolean; @@ -2153,11 +2272,11 @@ declare module '@polkadot/types/lookup' { readonly type: 'OpeningAdded' | 'AppliedOnOpening' | 'OpeningFilled' | 'LeaderSet' | 'WorkerRoleAccountUpdated' | 'LeaderUnset' | 'WorkerExited' | 'WorkerStartedLeaving' | 'TerminatedWorker' | 'TerminatedLeader' | 'StakeSlashed' | 'StakeDecreased' | 'StakeIncreased' | 'ApplicationWithdrawn' | 'OpeningCanceled' | 'BudgetSet' | 'WorkerRewardAccountUpdated' | 'WorkerRewardAmountUpdated' | 'StatusTextChanged' | 'BudgetSpending' | 'RewardPaid' | 'NewMissedRewardLevelReached' | 'WorkingGroupBudgetFunded' | 'LeadRemarked' | 'WorkerRemarked'; } - /** @name PalletWorkingGroupInstance8 (235) */ - export type PalletWorkingGroupInstance8 = Null; + /** @name PalletWorkingGroupInstance8 (242) */ + type PalletWorkingGroupInstance8 = Null; - /** @name PalletWorkingGroupRawEventInstance9 (236) */ - export interface PalletWorkingGroupRawEventInstance9 extends Enum { + /** @name PalletWorkingGroupRawEventInstance9 (243) */ + interface PalletWorkingGroupRawEventInstance9 extends Enum { readonly isOpeningAdded: boolean; readonly asOpeningAdded: ITuple<[u64, Bytes, PalletWorkingGroupOpeningType, PalletWorkingGroupStakePolicy, Option]>; readonly isAppliedOnOpening: boolean; @@ -2210,11 +2329,11 @@ declare module '@polkadot/types/lookup' { readonly type: 'OpeningAdded' | 'AppliedOnOpening' | 'OpeningFilled' | 'LeaderSet' | 'WorkerRoleAccountUpdated' | 'LeaderUnset' | 'WorkerExited' | 'WorkerStartedLeaving' | 'TerminatedWorker' | 'TerminatedLeader' | 'StakeSlashed' | 'StakeDecreased' | 'StakeIncreased' | 'ApplicationWithdrawn' | 'OpeningCanceled' | 'BudgetSet' | 'WorkerRewardAccountUpdated' | 'WorkerRewardAmountUpdated' | 'StatusTextChanged' | 'BudgetSpending' | 'RewardPaid' | 'NewMissedRewardLevelReached' | 'WorkingGroupBudgetFunded' | 'LeadRemarked' | 'WorkerRemarked'; } - /** @name PalletWorkingGroupInstance9 (237) */ - export type PalletWorkingGroupInstance9 = Null; + /** @name PalletWorkingGroupInstance9 (244) */ + type PalletWorkingGroupInstance9 = Null; - /** @name FrameSystemPhase (238) */ - export interface FrameSystemPhase extends Enum { + /** @name FrameSystemPhase (245) */ + interface FrameSystemPhase extends Enum { readonly isApplyExtrinsic: boolean; readonly asApplyExtrinsic: u32; readonly isFinalization: boolean; @@ -2222,18 +2341,14 @@ declare module '@polkadot/types/lookup' { readonly type: 'ApplyExtrinsic' | 'Finalization' | 'Initialization'; } - /** @name FrameSystemLastRuntimeUpgradeInfo (242) */ - export interface FrameSystemLastRuntimeUpgradeInfo extends Struct { + /** @name FrameSystemLastRuntimeUpgradeInfo (249) */ + interface FrameSystemLastRuntimeUpgradeInfo extends Struct { readonly specVersion: Compact; readonly specName: Text; } - /** @name FrameSystemCall (245) */ - export interface FrameSystemCall extends Enum { - readonly isFillBlock: boolean; - readonly asFillBlock: { - readonly ratio: Perbill; - } & Struct; + /** @name FrameSystemCall (252) */ + interface FrameSystemCall extends Enum { readonly isRemark: boolean; readonly asRemark: { readonly remark: Bytes; @@ -2267,51 +2382,51 @@ declare module '@polkadot/types/lookup' { readonly asRemarkWithEvent: { readonly remark: Bytes; } & Struct; - readonly type: 'FillBlock' | 'Remark' | 'SetHeapPages' | 'SetCode' | 'SetCodeWithoutChecks' | 'SetStorage' | 'KillStorage' | 'KillPrefix' | 'RemarkWithEvent'; + readonly type: 'Remark' | 'SetHeapPages' | 'SetCode' | 'SetCodeWithoutChecks' | 'SetStorage' | 'KillStorage' | 'KillPrefix' | 'RemarkWithEvent'; } - /** @name FrameSystemLimitsBlockWeights (248) */ - export interface FrameSystemLimitsBlockWeights extends Struct { - readonly baseBlock: u64; - readonly maxBlock: u64; - readonly perClass: FrameSupportWeightsPerDispatchClassWeightsPerClass; + /** @name FrameSystemLimitsBlockWeights (255) */ + interface FrameSystemLimitsBlockWeights extends Struct { + readonly baseBlock: SpWeightsWeightV2Weight; + readonly maxBlock: SpWeightsWeightV2Weight; + readonly perClass: FrameSupportDispatchPerDispatchClassWeightsPerClass; } - /** @name FrameSupportWeightsPerDispatchClassWeightsPerClass (249) */ - export interface FrameSupportWeightsPerDispatchClassWeightsPerClass extends Struct { + /** @name FrameSupportDispatchPerDispatchClassWeightsPerClass (256) */ + interface FrameSupportDispatchPerDispatchClassWeightsPerClass extends Struct { readonly normal: FrameSystemLimitsWeightsPerClass; readonly operational: FrameSystemLimitsWeightsPerClass; readonly mandatory: FrameSystemLimitsWeightsPerClass; } - /** @name FrameSystemLimitsWeightsPerClass (250) */ - export interface FrameSystemLimitsWeightsPerClass extends Struct { - readonly baseExtrinsic: u64; - readonly maxExtrinsic: Option; - readonly maxTotal: Option; - readonly reserved: Option; + /** @name FrameSystemLimitsWeightsPerClass (257) */ + interface FrameSystemLimitsWeightsPerClass extends Struct { + readonly baseExtrinsic: SpWeightsWeightV2Weight; + readonly maxExtrinsic: Option; + readonly maxTotal: Option; + readonly reserved: Option; } - /** @name FrameSystemLimitsBlockLength (251) */ - export interface FrameSystemLimitsBlockLength extends Struct { - readonly max: FrameSupportWeightsPerDispatchClassU32; + /** @name FrameSystemLimitsBlockLength (259) */ + interface FrameSystemLimitsBlockLength extends Struct { + readonly max: FrameSupportDispatchPerDispatchClassU32; } - /** @name FrameSupportWeightsPerDispatchClassU32 (252) */ - export interface FrameSupportWeightsPerDispatchClassU32 extends Struct { + /** @name FrameSupportDispatchPerDispatchClassU32 (260) */ + interface FrameSupportDispatchPerDispatchClassU32 extends Struct { readonly normal: u32; readonly operational: u32; readonly mandatory: u32; } - /** @name FrameSupportWeightsRuntimeDbWeight (253) */ - export interface FrameSupportWeightsRuntimeDbWeight extends Struct { + /** @name SpWeightsRuntimeDbWeight (261) */ + interface SpWeightsRuntimeDbWeight extends Struct { readonly read: u64; readonly write: u64; } - /** @name SpVersionRuntimeVersion (254) */ - export interface SpVersionRuntimeVersion extends Struct { + /** @name SpVersionRuntimeVersion (262) */ + interface SpVersionRuntimeVersion extends Struct { readonly specName: Text; readonly implName: Text; readonly authoringVersion: u32; @@ -2322,8 +2437,8 @@ declare module '@polkadot/types/lookup' { readonly stateVersion: u8; } - /** @name FrameSystemError (260) */ - export interface FrameSystemError extends Enum { + /** @name FrameSystemError (268) */ + interface FrameSystemError extends Enum { readonly isInvalidSpecName: boolean; readonly isSpecVersionNeedsToIncrease: boolean; readonly isFailedToExtractRuntimeVersion: boolean; @@ -2333,8 +2448,8 @@ declare module '@polkadot/types/lookup' { readonly type: 'InvalidSpecName' | 'SpecVersionNeedsToIncrease' | 'FailedToExtractRuntimeVersion' | 'NonDefaultComposite' | 'NonZeroRefCount' | 'CallFiltered'; } - /** @name PalletUtilityCall (261) */ - export interface PalletUtilityCall extends Enum { + /** @name PalletUtilityCall (269) */ + interface PalletUtilityCall extends Enum { readonly isBatch: boolean; readonly asBatch: { readonly calls: Vec; @@ -2357,11 +2472,16 @@ declare module '@polkadot/types/lookup' { readonly asForceBatch: { readonly calls: Vec; } & Struct; - readonly type: 'Batch' | 'AsDerivative' | 'BatchAll' | 'DispatchAs' | 'ForceBatch'; + readonly isWithWeight: boolean; + readonly asWithWeight: { + readonly call: Call; + readonly weight: SpWeightsWeightV2Weight; + } & Struct; + readonly type: 'Batch' | 'AsDerivative' | 'BatchAll' | 'DispatchAs' | 'ForceBatch' | 'WithWeight'; } - /** @name PalletBabeCall (264) */ - export interface PalletBabeCall extends Enum { + /** @name PalletBabeCall (272) */ + interface PalletBabeCall extends Enum { readonly isReportEquivocation: boolean; readonly asReportEquivocation: { readonly equivocationProof: SpConsensusSlotsEquivocationProof; @@ -2379,16 +2499,16 @@ declare module '@polkadot/types/lookup' { readonly type: 'ReportEquivocation' | 'ReportEquivocationUnsigned' | 'PlanConfigChange'; } - /** @name SpConsensusSlotsEquivocationProof (265) */ - export interface SpConsensusSlotsEquivocationProof extends Struct { + /** @name SpConsensusSlotsEquivocationProof (273) */ + interface SpConsensusSlotsEquivocationProof extends Struct { readonly offender: SpConsensusBabeAppPublic; readonly slot: u64; readonly firstHeader: SpRuntimeHeader; readonly secondHeader: SpRuntimeHeader; } - /** @name SpRuntimeHeader (266) */ - export interface SpRuntimeHeader extends Struct { + /** @name SpRuntimeHeader (274) */ + interface SpRuntimeHeader extends Struct { readonly parentHash: H256; readonly number: Compact; readonly stateRoot: H256; @@ -2396,21 +2516,21 @@ declare module '@polkadot/types/lookup' { readonly digest: SpRuntimeDigest; } - /** @name SpRuntimeBlakeTwo256 (267) */ - export type SpRuntimeBlakeTwo256 = Null; + /** @name SpRuntimeBlakeTwo256 (275) */ + type SpRuntimeBlakeTwo256 = Null; - /** @name SpConsensusBabeAppPublic (268) */ - export interface SpConsensusBabeAppPublic extends SpCoreSr25519Public {} + /** @name SpConsensusBabeAppPublic (276) */ + interface SpConsensusBabeAppPublic extends SpCoreSr25519Public {} - /** @name SpSessionMembershipProof (270) */ - export interface SpSessionMembershipProof extends Struct { + /** @name SpSessionMembershipProof (278) */ + interface SpSessionMembershipProof extends Struct { readonly session: u32; readonly trieNodes: Vec; readonly validatorCount: u32; } - /** @name SpConsensusBabeDigestsNextConfigDescriptor (271) */ - export interface SpConsensusBabeDigestsNextConfigDescriptor extends Enum { + /** @name SpConsensusBabeDigestsNextConfigDescriptor (279) */ + interface SpConsensusBabeDigestsNextConfigDescriptor extends Enum { readonly isV1: boolean; readonly asV1: { readonly c: ITuple<[u64, u64]>; @@ -2419,16 +2539,16 @@ declare module '@polkadot/types/lookup' { readonly type: 'V1'; } - /** @name SpConsensusBabeAllowedSlots (272) */ - export interface SpConsensusBabeAllowedSlots extends Enum { + /** @name SpConsensusBabeAllowedSlots (280) */ + interface SpConsensusBabeAllowedSlots extends Enum { readonly isPrimarySlots: boolean; readonly isPrimaryAndSecondaryPlainSlots: boolean; readonly isPrimaryAndSecondaryVRFSlots: boolean; readonly type: 'PrimarySlots' | 'PrimaryAndSecondaryPlainSlots' | 'PrimaryAndSecondaryVRFSlots'; } - /** @name PalletTimestampCall (273) */ - export interface PalletTimestampCall extends Enum { + /** @name PalletTimestampCall (281) */ + interface PalletTimestampCall extends Enum { readonly isSet: boolean; readonly asSet: { readonly now: Compact; @@ -2436,17 +2556,8 @@ declare module '@polkadot/types/lookup' { readonly type: 'Set'; } - /** @name PalletAuthorshipCall (275) */ - export interface PalletAuthorshipCall extends Enum { - readonly isSetUncles: boolean; - readonly asSetUncles: { - readonly newUncles: Vec; - } & Struct; - readonly type: 'SetUncles'; - } - - /** @name PalletBalancesCall (277) */ - export interface PalletBalancesCall extends Enum { + /** @name PalletBalancesCall (282) */ + interface PalletBalancesCall extends Enum { readonly isTransfer: boolean; readonly asTransfer: { readonly dest: AccountId32; @@ -2482,8 +2593,8 @@ declare module '@polkadot/types/lookup' { readonly type: 'Transfer' | 'SetBalance' | 'ForceTransfer' | 'TransferKeepAlive' | 'TransferAll' | 'ForceUnreserve'; } - /** @name PalletElectionProviderMultiPhaseCall (278) */ - export interface PalletElectionProviderMultiPhaseCall extends Enum { + /** @name PalletElectionProviderMultiPhaseCall (283) */ + interface PalletElectionProviderMultiPhaseCall extends Enum { readonly isSubmitUnsigned: boolean; readonly asSubmitUnsigned: { readonly rawSolution: PalletElectionProviderMultiPhaseRawSolution; @@ -2509,15 +2620,15 @@ declare module '@polkadot/types/lookup' { readonly type: 'SubmitUnsigned' | 'SetMinimumUntrustedScore' | 'SetEmergencyElectionResult' | 'Submit' | 'GovernanceFallback'; } - /** @name PalletElectionProviderMultiPhaseRawSolution (279) */ - export interface PalletElectionProviderMultiPhaseRawSolution extends Struct { + /** @name PalletElectionProviderMultiPhaseRawSolution (284) */ + interface PalletElectionProviderMultiPhaseRawSolution extends Struct { readonly solution: JoystreamNodeRuntimeNposSolution16; readonly score: SpNposElectionsElectionScore; readonly round: u32; } - /** @name JoystreamNodeRuntimeNposSolution16 (280) */ - export interface JoystreamNodeRuntimeNposSolution16 extends Struct { + /** @name JoystreamNodeRuntimeNposSolution16 (285) */ + interface JoystreamNodeRuntimeNposSolution16 extends Struct { readonly votes1: Vec, Compact]>>; readonly votes2: Vec, ITuple<[Compact, Compact]>, Compact]>>; readonly votes3: Vec, Vec, Compact]>>, Compact]>>; @@ -2536,27 +2647,20 @@ declare module '@polkadot/types/lookup' { readonly votes16: Vec, Vec, Compact]>>, Compact]>>; } - /** @name SpNposElectionsElectionScore (331) */ - export interface SpNposElectionsElectionScore extends Struct { - readonly minimalStake: u128; - readonly sumStake: u128; - readonly sumStakeSquared: u128; - } - - /** @name PalletElectionProviderMultiPhaseSolutionOrSnapshotSize (332) */ - export interface PalletElectionProviderMultiPhaseSolutionOrSnapshotSize extends Struct { + /** @name PalletElectionProviderMultiPhaseSolutionOrSnapshotSize (336) */ + interface PalletElectionProviderMultiPhaseSolutionOrSnapshotSize extends Struct { readonly voters: Compact; readonly targets: Compact; } - /** @name SpNposElectionsSupport (336) */ - export interface SpNposElectionsSupport extends Struct { + /** @name SpNposElectionsSupport (340) */ + interface SpNposElectionsSupport extends Struct { readonly total: u128; readonly voters: Vec>; } - /** @name PalletStakingPalletCall (338) */ - export interface PalletStakingPalletCall extends Enum { + /** @name PalletStakingPalletCall (342) */ + interface PalletStakingPalletCall extends Enum { readonly isBond: boolean; readonly asBond: { readonly controller: AccountId32; @@ -2630,11 +2734,6 @@ declare module '@polkadot/types/lookup' { readonly asRebond: { readonly value: Compact; } & Struct; - readonly isSetHistoryDepth: boolean; - readonly asSetHistoryDepth: { - readonly newHistoryDepth: Compact; - readonly eraItemsDeleted: Compact; - } & Struct; readonly isReapStash: boolean; readonly asReapStash: { readonly stash: AccountId32; @@ -2661,11 +2760,15 @@ declare module '@polkadot/types/lookup' { readonly asForceApplyMinCommission: { readonly validatorStash: AccountId32; } & Struct; - readonly type: 'Bond' | 'BondExtra' | 'Unbond' | 'WithdrawUnbonded' | 'Validate' | 'Nominate' | 'Chill' | 'SetPayee' | 'SetController' | 'SetValidatorCount' | 'IncreaseValidatorCount' | 'ScaleValidatorCount' | 'ForceNoEras' | 'ForceNewEra' | 'SetInvulnerables' | 'ForceUnstake' | 'ForceNewEraAlways' | 'CancelDeferredSlash' | 'PayoutStakers' | 'Rebond' | 'SetHistoryDepth' | 'ReapStash' | 'Kick' | 'SetStakingConfigs' | 'ChillOther' | 'ForceApplyMinCommission'; + readonly isSetMinCommission: boolean; + readonly asSetMinCommission: { + readonly new_: Perbill; + } & Struct; + readonly type: 'Bond' | 'BondExtra' | 'Unbond' | 'WithdrawUnbonded' | 'Validate' | 'Nominate' | 'Chill' | 'SetPayee' | 'SetController' | 'SetValidatorCount' | 'IncreaseValidatorCount' | 'ScaleValidatorCount' | 'ForceNoEras' | 'ForceNewEra' | 'SetInvulnerables' | 'ForceUnstake' | 'ForceNewEraAlways' | 'CancelDeferredSlash' | 'PayoutStakers' | 'Rebond' | 'ReapStash' | 'Kick' | 'SetStakingConfigs' | 'ChillOther' | 'ForceApplyMinCommission' | 'SetMinCommission'; } - /** @name PalletStakingRewardDestination (339) */ - export interface PalletStakingRewardDestination extends Enum { + /** @name PalletStakingRewardDestination (343) */ + interface PalletStakingRewardDestination extends Enum { readonly isStaked: boolean; readonly isStash: boolean; readonly isController: boolean; @@ -2675,8 +2778,8 @@ declare module '@polkadot/types/lookup' { readonly type: 'Staked' | 'Stash' | 'Controller' | 'Account' | 'None'; } - /** @name PalletStakingPalletConfigOpU128 (343) */ - export interface PalletStakingPalletConfigOpU128 extends Enum { + /** @name PalletStakingPalletConfigOpU128 (347) */ + interface PalletStakingPalletConfigOpU128 extends Enum { readonly isNoop: boolean; readonly isSet: boolean; readonly asSet: u128; @@ -2684,8 +2787,8 @@ declare module '@polkadot/types/lookup' { readonly type: 'Noop' | 'Set' | 'Remove'; } - /** @name PalletStakingPalletConfigOpU32 (344) */ - export interface PalletStakingPalletConfigOpU32 extends Enum { + /** @name PalletStakingPalletConfigOpU32 (348) */ + interface PalletStakingPalletConfigOpU32 extends Enum { readonly isNoop: boolean; readonly isSet: boolean; readonly asSet: u32; @@ -2693,8 +2796,8 @@ declare module '@polkadot/types/lookup' { readonly type: 'Noop' | 'Set' | 'Remove'; } - /** @name PalletStakingPalletConfigOpPercent (345) */ - export interface PalletStakingPalletConfigOpPercent extends Enum { + /** @name PalletStakingPalletConfigOpPercent (349) */ + interface PalletStakingPalletConfigOpPercent extends Enum { readonly isNoop: boolean; readonly isSet: boolean; readonly asSet: Percent; @@ -2702,8 +2805,8 @@ declare module '@polkadot/types/lookup' { readonly type: 'Noop' | 'Set' | 'Remove'; } - /** @name PalletStakingPalletConfigOpPerbill (346) */ - export interface PalletStakingPalletConfigOpPerbill extends Enum { + /** @name PalletStakingPalletConfigOpPerbill (350) */ + interface PalletStakingPalletConfigOpPerbill extends Enum { readonly isNoop: boolean; readonly isSet: boolean; readonly asSet: Perbill; @@ -2711,8 +2814,8 @@ declare module '@polkadot/types/lookup' { readonly type: 'Noop' | 'Set' | 'Remove'; } - /** @name PalletSessionCall (347) */ - export interface PalletSessionCall extends Enum { + /** @name PalletSessionCall (351) */ + interface PalletSessionCall extends Enum { readonly isSetKeys: boolean; readonly asSetKeys: { readonly keys_: JoystreamNodeRuntimeSessionKeys; @@ -2722,27 +2825,27 @@ declare module '@polkadot/types/lookup' { readonly type: 'SetKeys' | 'PurgeKeys'; } - /** @name JoystreamNodeRuntimeSessionKeys (348) */ - export interface JoystreamNodeRuntimeSessionKeys extends Struct { - readonly grandpa: SpFinalityGrandpaAppPublic; + /** @name JoystreamNodeRuntimeSessionKeys (352) */ + interface JoystreamNodeRuntimeSessionKeys extends Struct { + readonly grandpa: SpConsensusGrandpaAppPublic; readonly babe: SpConsensusBabeAppPublic; readonly imOnline: PalletImOnlineSr25519AppSr25519Public; readonly authorityDiscovery: SpAuthorityDiscoveryAppPublic; } - /** @name SpAuthorityDiscoveryAppPublic (349) */ - export interface SpAuthorityDiscoveryAppPublic extends SpCoreSr25519Public {} + /** @name SpAuthorityDiscoveryAppPublic (353) */ + interface SpAuthorityDiscoveryAppPublic extends SpCoreSr25519Public {} - /** @name PalletGrandpaCall (350) */ - export interface PalletGrandpaCall extends Enum { + /** @name PalletGrandpaCall (354) */ + interface PalletGrandpaCall extends Enum { readonly isReportEquivocation: boolean; readonly asReportEquivocation: { - readonly equivocationProof: SpFinalityGrandpaEquivocationProof; + readonly equivocationProof: SpConsensusGrandpaEquivocationProof; readonly keyOwnerProof: SpSessionMembershipProof; } & Struct; readonly isReportEquivocationUnsigned: boolean; readonly asReportEquivocationUnsigned: { - readonly equivocationProof: SpFinalityGrandpaEquivocationProof; + readonly equivocationProof: SpConsensusGrandpaEquivocationProof; readonly keyOwnerProof: SpSessionMembershipProof; } & Struct; readonly isNoteStalled: boolean; @@ -2753,14 +2856,14 @@ declare module '@polkadot/types/lookup' { readonly type: 'ReportEquivocation' | 'ReportEquivocationUnsigned' | 'NoteStalled'; } - /** @name SpFinalityGrandpaEquivocationProof (351) */ - export interface SpFinalityGrandpaEquivocationProof extends Struct { + /** @name SpConsensusGrandpaEquivocationProof (355) */ + interface SpConsensusGrandpaEquivocationProof extends Struct { readonly setId: u64; - readonly equivocation: SpFinalityGrandpaEquivocation; + readonly equivocation: SpConsensusGrandpaEquivocation; } - /** @name SpFinalityGrandpaEquivocation (352) */ - export interface SpFinalityGrandpaEquivocation extends Enum { + /** @name SpConsensusGrandpaEquivocation (356) */ + interface SpConsensusGrandpaEquivocation extends Enum { readonly isPrevote: boolean; readonly asPrevote: FinalityGrandpaEquivocationPrevote; readonly isPrecommit: boolean; @@ -2768,42 +2871,42 @@ declare module '@polkadot/types/lookup' { readonly type: 'Prevote' | 'Precommit'; } - /** @name FinalityGrandpaEquivocationPrevote (353) */ - export interface FinalityGrandpaEquivocationPrevote extends Struct { + /** @name FinalityGrandpaEquivocationPrevote (357) */ + interface FinalityGrandpaEquivocationPrevote extends Struct { readonly roundNumber: u64; - readonly identity: SpFinalityGrandpaAppPublic; - readonly first: ITuple<[FinalityGrandpaPrevote, SpFinalityGrandpaAppSignature]>; - readonly second: ITuple<[FinalityGrandpaPrevote, SpFinalityGrandpaAppSignature]>; + readonly identity: SpConsensusGrandpaAppPublic; + readonly first: ITuple<[FinalityGrandpaPrevote, SpConsensusGrandpaAppSignature]>; + readonly second: ITuple<[FinalityGrandpaPrevote, SpConsensusGrandpaAppSignature]>; } - /** @name FinalityGrandpaPrevote (354) */ - export interface FinalityGrandpaPrevote extends Struct { + /** @name FinalityGrandpaPrevote (358) */ + interface FinalityGrandpaPrevote extends Struct { readonly targetHash: H256; readonly targetNumber: u32; } - /** @name SpFinalityGrandpaAppSignature (355) */ - export interface SpFinalityGrandpaAppSignature extends SpCoreEd25519Signature {} + /** @name SpConsensusGrandpaAppSignature (359) */ + interface SpConsensusGrandpaAppSignature extends SpCoreEd25519Signature {} - /** @name SpCoreEd25519Signature (356) */ - export interface SpCoreEd25519Signature extends U8aFixed {} + /** @name SpCoreEd25519Signature (360) */ + interface SpCoreEd25519Signature extends U8aFixed {} - /** @name FinalityGrandpaEquivocationPrecommit (359) */ - export interface FinalityGrandpaEquivocationPrecommit extends Struct { + /** @name FinalityGrandpaEquivocationPrecommit (363) */ + interface FinalityGrandpaEquivocationPrecommit extends Struct { readonly roundNumber: u64; - readonly identity: SpFinalityGrandpaAppPublic; - readonly first: ITuple<[FinalityGrandpaPrecommit, SpFinalityGrandpaAppSignature]>; - readonly second: ITuple<[FinalityGrandpaPrecommit, SpFinalityGrandpaAppSignature]>; + readonly identity: SpConsensusGrandpaAppPublic; + readonly first: ITuple<[FinalityGrandpaPrecommit, SpConsensusGrandpaAppSignature]>; + readonly second: ITuple<[FinalityGrandpaPrecommit, SpConsensusGrandpaAppSignature]>; } - /** @name FinalityGrandpaPrecommit (360) */ - export interface FinalityGrandpaPrecommit extends Struct { + /** @name FinalityGrandpaPrecommit (364) */ + interface FinalityGrandpaPrecommit extends Struct { readonly targetHash: H256; readonly targetNumber: u32; } - /** @name PalletImOnlineCall (362) */ - export interface PalletImOnlineCall extends Enum { + /** @name PalletImOnlineCall (366) */ + interface PalletImOnlineCall extends Enum { readonly isHeartbeat: boolean; readonly asHeartbeat: { readonly heartbeat: PalletImOnlineHeartbeat; @@ -2812,8 +2915,8 @@ declare module '@polkadot/types/lookup' { readonly type: 'Heartbeat'; } - /** @name PalletImOnlineHeartbeat (363) */ - export interface PalletImOnlineHeartbeat extends Struct { + /** @name PalletImOnlineHeartbeat (367) */ + interface PalletImOnlineHeartbeat extends Struct { readonly blockNumber: u32; readonly networkState: SpCoreOffchainOpaqueNetworkState; readonly sessionIndex: u32; @@ -2821,20 +2924,20 @@ declare module '@polkadot/types/lookup' { readonly validatorsLen: u32; } - /** @name SpCoreOffchainOpaqueNetworkState (364) */ - export interface SpCoreOffchainOpaqueNetworkState extends Struct { - readonly peerId: Bytes; - readonly externalAddresses: Vec; + /** @name SpCoreOffchainOpaqueNetworkState (368) */ + interface SpCoreOffchainOpaqueNetworkState extends Struct { + readonly peerId: OpaquePeerId; + readonly externalAddresses: Vec; } - /** @name PalletImOnlineSr25519AppSr25519Signature (368) */ - export interface PalletImOnlineSr25519AppSr25519Signature extends SpCoreSr25519Signature {} + /** @name PalletImOnlineSr25519AppSr25519Signature (372) */ + interface PalletImOnlineSr25519AppSr25519Signature extends SpCoreSr25519Signature {} - /** @name SpCoreSr25519Signature (369) */ - export interface SpCoreSr25519Signature extends U8aFixed {} + /** @name SpCoreSr25519Signature (373) */ + interface SpCoreSr25519Signature extends U8aFixed {} - /** @name PalletBagsListCall (370) */ - export interface PalletBagsListCall extends Enum { + /** @name PalletBagsListCall (374) */ + interface PalletBagsListCall extends Enum { readonly isRebag: boolean; readonly asRebag: { readonly dislocated: AccountId32; @@ -2846,8 +2949,8 @@ declare module '@polkadot/types/lookup' { readonly type: 'Rebag' | 'PutInFrontOf'; } - /** @name PalletVestingCall (371) */ - export interface PalletVestingCall extends Enum { + /** @name PalletVestingCall (375) */ + interface PalletVestingCall extends Enum { readonly isVest: boolean; readonly isVestOther: boolean; readonly asVestOther: { @@ -2872,15 +2975,15 @@ declare module '@polkadot/types/lookup' { readonly type: 'Vest' | 'VestOther' | 'VestedTransfer' | 'ForceVestedTransfer' | 'MergeSchedules'; } - /** @name PalletVestingVestingInfo (372) */ - export interface PalletVestingVestingInfo extends Struct { + /** @name PalletVestingVestingInfo (376) */ + interface PalletVestingVestingInfo extends Struct { readonly locked: u128; readonly perBlock: u128; readonly startingBlock: u32; } - /** @name PalletMultisigCall (373) */ - export interface PalletMultisigCall extends Enum { + /** @name PalletMultisigCall (377) */ + interface PalletMultisigCall extends Enum { readonly isAsMultiThreshold1: boolean; readonly asAsMultiThreshold1: { readonly otherSignatories: Vec; @@ -2891,9 +2994,8 @@ declare module '@polkadot/types/lookup' { readonly threshold: u16; readonly otherSignatories: Vec; readonly maybeTimepoint: Option; - readonly call: WrapperKeepOpaque; - readonly storeCall: bool; - readonly maxWeight: u64; + readonly call: Call; + readonly maxWeight: SpWeightsWeightV2Weight; } & Struct; readonly isApproveAsMulti: boolean; readonly asApproveAsMulti: { @@ -2901,7 +3003,7 @@ declare module '@polkadot/types/lookup' { readonly otherSignatories: Vec; readonly maybeTimepoint: Option; readonly callHash: U8aFixed; - readonly maxWeight: u64; + readonly maxWeight: SpWeightsWeightV2Weight; } & Struct; readonly isCancelAsMulti: boolean; readonly asCancelAsMulti: { @@ -2913,8 +3015,8 @@ declare module '@polkadot/types/lookup' { readonly type: 'AsMultiThreshold1' | 'AsMulti' | 'ApproveAsMulti' | 'CancelAsMulti'; } - /** @name PalletCouncilCall (376) */ - export interface PalletCouncilCall extends Enum { + /** @name PalletCouncilCall (379) */ + interface PalletCouncilCall extends Enum { readonly isAnnounceCandidacy: boolean; readonly asAnnounceCandidacy: { readonly membershipId: u64; @@ -2974,8 +3076,8 @@ declare module '@polkadot/types/lookup' { readonly type: 'AnnounceCandidacy' | 'ReleaseCandidacyStake' | 'WithdrawCandidacy' | 'SetCandidacyNote' | 'SetBudget' | 'PlanBudgetRefill' | 'SetBudgetIncrement' | 'SetCouncilorReward' | 'FundingRequest' | 'FundCouncilBudget' | 'CouncilorRemark' | 'CandidateRemark'; } - /** @name PalletReferendumCall (377) */ - export interface PalletReferendumCall extends Enum { + /** @name PalletReferendumCall (380) */ + interface PalletReferendumCall extends Enum { readonly isVote: boolean; readonly asVote: { readonly commitment: H256; @@ -2991,8 +3093,8 @@ declare module '@polkadot/types/lookup' { readonly type: 'Vote' | 'RevealVote' | 'ReleaseVoteStake' | 'OptOutOfVoting'; } - /** @name PalletMembershipCall (378) */ - export interface PalletMembershipCall extends Enum { + /** @name PalletMembershipCall (381) */ + interface PalletMembershipCall extends Enum { readonly isBuyMembership: boolean; readonly asBuyMembership: { readonly params: PalletMembershipBuyMembershipParameters; @@ -3075,8 +3177,8 @@ declare module '@polkadot/types/lookup' { readonly type: 'BuyMembership' | 'UpdateProfile' | 'UpdateAccounts' | 'UpdateProfileVerification' | 'SetReferralCut' | 'TransferInvites' | 'InviteMember' | 'GiftMembership' | 'SetMembershipPrice' | 'SetLeaderInvitationQuota' | 'SetInitialInvitationBalance' | 'SetInitialInvitationCount' | 'AddStakingAccountCandidate' | 'RemoveStakingAccount' | 'ConfirmStakingAccount' | 'MemberRemark' | 'CreateMember'; } - /** @name PalletForumCall (379) */ - export interface PalletForumCall extends Enum { + /** @name PalletForumCall (382) */ + interface PalletForumCall extends Enum { readonly isUpdateCategoryMembershipOfModerator: boolean; readonly asUpdateCategoryMembershipOfModerator: { readonly moderatorId: u64; @@ -3186,8 +3288,8 @@ declare module '@polkadot/types/lookup' { readonly type: 'UpdateCategoryMembershipOfModerator' | 'CreateCategory' | 'UpdateCategoryArchivalStatus' | 'UpdateCategoryTitle' | 'UpdateCategoryDescription' | 'DeleteCategory' | 'CreateThread' | 'EditThreadMetadata' | 'DeleteThread' | 'MoveThreadToCategory' | 'ModerateThread' | 'AddPost' | 'EditPostText' | 'ModeratePost' | 'DeletePosts' | 'SetStickiedThreads'; } - /** @name PalletConstitutionCall (380) */ - export interface PalletConstitutionCall extends Enum { + /** @name PalletConstitutionCall (383) */ + interface PalletConstitutionCall extends Enum { readonly isAmendConstitution: boolean; readonly asAmendConstitution: { readonly constitutionText: Bytes; @@ -3195,8 +3297,8 @@ declare module '@polkadot/types/lookup' { readonly type: 'AmendConstitution'; } - /** @name PalletBountyCall (381) */ - export interface PalletBountyCall extends Enum { + /** @name PalletBountyCall (384) */ + interface PalletBountyCall extends Enum { readonly isCreateBounty: boolean; readonly asCreateBounty: { readonly params: PalletBountyBountyParametersBTreeSet; @@ -3284,8 +3386,31 @@ declare module '@polkadot/types/lookup' { readonly type: 'CreateBounty' | 'FundBounty' | 'TerminateBounty' | 'SwitchOracle' | 'WithdrawFunding' | 'AnnounceWorkEntry' | 'SubmitWork' | 'EndWorkingPeriod' | 'SubmitOracleJudgment' | 'WithdrawEntrantStake' | 'WithdrawOracleReward' | 'ContributorRemark' | 'OracleRemark' | 'EntrantRemark' | 'CreatorRemark'; } - /** @name PalletContentCall (383) */ - export interface PalletContentCall extends Enum { + /** @name PalletJoystreamUtilityCall (385) */ + interface PalletJoystreamUtilityCall extends Enum { + readonly isExecuteSignalProposal: boolean; + readonly asExecuteSignalProposal: { + readonly signal: Bytes; + } & Struct; + readonly isExecuteRuntimeUpgradeProposal: boolean; + readonly asExecuteRuntimeUpgradeProposal: { + readonly wasm: Bytes; + } & Struct; + readonly isUpdateWorkingGroupBudget: boolean; + readonly asUpdateWorkingGroupBudget: { + readonly workingGroup: PalletCommonWorkingGroupIterableEnumsWorkingGroup; + readonly amount: u128; + readonly balanceKind: PalletCommonBalanceKind; + } & Struct; + readonly isBurnAccountTokens: boolean; + readonly asBurnAccountTokens: { + readonly amount: u128; + } & Struct; + readonly type: 'ExecuteSignalProposal' | 'ExecuteRuntimeUpgradeProposal' | 'UpdateWorkingGroupBudget' | 'BurnAccountTokens'; + } + + /** @name PalletContentCall (386) */ + interface PalletContentCall extends Enum { readonly isCreateCuratorGroup: boolean; readonly asCreateCuratorGroup: { readonly isActive: bool; @@ -3350,14 +3475,6 @@ declare module '@polkadot/types/lookup' { readonly storageBucketsNumWitness: u32; readonly rationale: Bytes; } & Struct; - readonly isDeleteChannelAsModerator: boolean; - readonly asDeleteChannelAsModerator: { - readonly actor: PalletContentPermissionsContentActor; - readonly channelId: u64; - readonly channelBagWitness: PalletContentChannelBagWitness; - readonly numObjectsToDelete: u64; - readonly rationale: Bytes; - } & Struct; readonly isSetChannelVisibilityAsModerator: boolean; readonly asSetChannelVisibilityAsModerator: { readonly actor: PalletContentPermissionsContentActor; @@ -3392,14 +3509,6 @@ declare module '@polkadot/types/lookup' { readonly assetsToRemove: BTreeSet; readonly rationale: Bytes; } & Struct; - readonly isDeleteVideoAsModerator: boolean; - readonly asDeleteVideoAsModerator: { - readonly actor: PalletContentPermissionsContentActor; - readonly videoId: u64; - readonly storageBucketsNumWitness: Option; - readonly numObjectsToDelete: u64; - readonly rationale: Bytes; - } & Struct; readonly isSetVideoVisibilityAsModerator: boolean; readonly asSetVideoVisibilityAsModerator: { readonly actor: PalletContentPermissionsContentActor; @@ -3432,12 +3541,6 @@ declare module '@polkadot/types/lookup' { readonly asUpdateVideoStateBloatBond: { readonly newVideoStateBloatBond: u128; } & Struct; - readonly isClaimAndWithdrawChannelReward: boolean; - readonly asClaimAndWithdrawChannelReward: { - readonly actor: PalletContentPermissionsContentActor; - readonly proof: Vec; - readonly item: PalletContentPullPaymentElement; - } & Struct; readonly isIssueNft: boolean; readonly asIssueNft: { readonly actor: PalletContentPermissionsContentActor; @@ -3616,7 +3719,7 @@ declare module '@polkadot/types/lookup' { readonly asCreatorTokenIssuerTransfer: { readonly actor: PalletContentPermissionsContentActor; readonly channelId: u64; - readonly outputs: PalletProjectTokenTransfersPaymentWithVesting; + readonly outputs: Vec>; readonly metadata: Bytes; } & Struct; readonly isMakeCreatorTokenPermissionless: boolean; @@ -3657,44 +3760,61 @@ declare module '@polkadot/types/lookup' { readonly actor: PalletContentPermissionsContentActor; readonly channelId: u64; } & Struct; - readonly type: 'CreateCuratorGroup' | 'UpdateCuratorGroupPermissions' | 'SetCuratorGroupStatus' | 'AddCuratorToGroup' | 'RemoveCuratorFromGroup' | 'CreateChannel' | 'UpdateChannel' | 'UpdateChannelPrivilegeLevel' | 'SetChannelPausedFeaturesAsModerator' | 'DeleteChannel' | 'DeleteChannelAssetsAsModerator' | 'DeleteChannelAsModerator' | 'SetChannelVisibilityAsModerator' | 'CreateVideo' | 'UpdateVideo' | 'DeleteVideo' | 'DeleteVideoAssetsAsModerator' | 'DeleteVideoAsModerator' | 'SetVideoVisibilityAsModerator' | 'UpdateChannelPayouts' | 'ClaimChannelReward' | 'WithdrawFromChannelBalance' | 'UpdateChannelStateBloatBond' | 'UpdateVideoStateBloatBond' | 'ClaimAndWithdrawChannelReward' | 'IssueNft' | 'DestroyNft' | 'StartOpenAuction' | 'StartEnglishAuction' | 'CancelEnglishAuction' | 'CancelOpenAuction' | 'CancelOffer' | 'CancelBuyNow' | 'UpdateBuyNowPrice' | 'MakeOpenAuctionBid' | 'MakeEnglishAuctionBid' | 'CancelOpenAuctionBid' | 'SettleEnglishAuction' | 'PickOpenAuctionWinner' | 'OfferNft' | 'SlingNftBack' | 'AcceptIncomingOffer' | 'SellNft' | 'BuyNft' | 'ToggleNftLimits' | 'ChannelOwnerRemark' | 'ChannelAgentRemark' | 'NftOwnerRemark' | 'InitializeChannelTransfer' | 'CancelChannelTransfer' | 'AcceptChannelTransfer' | 'UpdateGlobalNftLimit' | 'UpdateChannelNftLimit' | 'IssueCreatorToken' | 'InitCreatorTokenSale' | 'UpdateUpcomingCreatorTokenSale' | 'CreatorTokenIssuerTransfer' | 'MakeCreatorTokenPermissionless' | 'ReduceCreatorTokenPatronageRateTo' | 'ClaimCreatorTokenPatronageCredit' | 'IssueRevenueSplit' | 'FinalizeRevenueSplit' | 'FinalizeCreatorTokenSale' | 'DeissueCreatorToken'; + readonly isActivateAmm: boolean; + readonly asActivateAmm: { + readonly actor: PalletContentPermissionsContentActor; + readonly channelId: u64; + readonly params: PalletProjectTokenAmmParams; + } & Struct; + readonly isDeactivateAmm: boolean; + readonly asDeactivateAmm: { + readonly actor: PalletContentPermissionsContentActor; + readonly channelId: u64; + } & Struct; + readonly isCreatorTokenIssuerRemark: boolean; + readonly asCreatorTokenIssuerRemark: { + readonly actor: PalletContentPermissionsContentActor; + readonly channelId: u64; + readonly remark: Bytes; + } & Struct; + readonly type: 'CreateCuratorGroup' | 'UpdateCuratorGroupPermissions' | 'SetCuratorGroupStatus' | 'AddCuratorToGroup' | 'RemoveCuratorFromGroup' | 'CreateChannel' | 'UpdateChannel' | 'UpdateChannelPrivilegeLevel' | 'SetChannelPausedFeaturesAsModerator' | 'DeleteChannel' | 'DeleteChannelAssetsAsModerator' | 'SetChannelVisibilityAsModerator' | 'CreateVideo' | 'UpdateVideo' | 'DeleteVideo' | 'DeleteVideoAssetsAsModerator' | 'SetVideoVisibilityAsModerator' | 'UpdateChannelPayouts' | 'ClaimChannelReward' | 'WithdrawFromChannelBalance' | 'UpdateChannelStateBloatBond' | 'UpdateVideoStateBloatBond' | 'IssueNft' | 'DestroyNft' | 'StartOpenAuction' | 'StartEnglishAuction' | 'CancelEnglishAuction' | 'CancelOpenAuction' | 'CancelOffer' | 'CancelBuyNow' | 'UpdateBuyNowPrice' | 'MakeOpenAuctionBid' | 'MakeEnglishAuctionBid' | 'CancelOpenAuctionBid' | 'SettleEnglishAuction' | 'PickOpenAuctionWinner' | 'OfferNft' | 'SlingNftBack' | 'AcceptIncomingOffer' | 'SellNft' | 'BuyNft' | 'ToggleNftLimits' | 'ChannelOwnerRemark' | 'ChannelAgentRemark' | 'NftOwnerRemark' | 'InitializeChannelTransfer' | 'CancelChannelTransfer' | 'AcceptChannelTransfer' | 'UpdateGlobalNftLimit' | 'UpdateChannelNftLimit' | 'IssueCreatorToken' | 'InitCreatorTokenSale' | 'UpdateUpcomingCreatorTokenSale' | 'CreatorTokenIssuerTransfer' | 'MakeCreatorTokenPermissionless' | 'ReduceCreatorTokenPatronageRateTo' | 'ClaimCreatorTokenPatronageCredit' | 'IssueRevenueSplit' | 'FinalizeRevenueSplit' | 'FinalizeCreatorTokenSale' | 'DeissueCreatorToken' | 'ActivateAmm' | 'DeactivateAmm' | 'CreatorTokenIssuerRemark'; } - /** @name PalletContentChannelBagWitness (384) */ - export interface PalletContentChannelBagWitness extends Struct { + /** @name PalletContentChannelBagWitness (387) */ + interface PalletContentChannelBagWitness extends Struct { readonly storageBucketsNum: u32; readonly distributionBucketsNum: u32; } - /** @name PalletCommonMerkleTreeProofElementRecord (386) */ - export interface PalletCommonMerkleTreeProofElementRecord extends Struct { + /** @name PalletCommonMerkleTreeProofElementRecord (389) */ + interface PalletCommonMerkleTreeProofElementRecord extends Struct { readonly hash_: H256; readonly side: PalletCommonMerkleTreeSide; } - /** @name PalletCommonMerkleTreeSide (387) */ - export interface PalletCommonMerkleTreeSide extends Enum { + /** @name PalletCommonMerkleTreeSide (390) */ + interface PalletCommonMerkleTreeSide extends Enum { readonly isLeft: boolean; readonly isRight: boolean; readonly type: 'Left' | 'Right'; } - /** @name PalletContentPullPaymentElement (388) */ - export interface PalletContentPullPaymentElement extends Struct { + /** @name PalletContentPullPaymentElement (391) */ + interface PalletContentPullPaymentElement extends Struct { readonly channelId: u64; readonly cumulativeRewardEarned: u128; readonly reason: H256; } - /** @name PalletContentInitTransferParameters (389) */ - export interface PalletContentInitTransferParameters extends Struct { + /** @name PalletContentInitTransferParameters (392) */ + interface PalletContentInitTransferParameters extends Struct { readonly newCollaborators: BTreeMap>; readonly price: u128; readonly newOwner: PalletContentChannelOwner; } - /** @name PalletProjectTokenTokenSaleParams (390) */ - export interface PalletProjectTokenTokenSaleParams extends Struct { + /** @name PalletProjectTokenTokenSaleParams (393) */ + interface PalletProjectTokenTokenSaleParams extends Struct { readonly unitPrice: u128; readonly upperBoundQuantity: u128; readonly startsAt: Option; @@ -3704,11 +3824,14 @@ declare module '@polkadot/types/lookup' { readonly metadata: Option; } - /** @name PalletProjectTokenTransfersPaymentWithVesting (391) */ - export interface PalletProjectTokenTransfersPaymentWithVesting extends BTreeMap {} + /** @name PalletProjectTokenAmmParams (397) */ + interface PalletProjectTokenAmmParams extends Struct { + readonly slope: u128; + readonly intercept: u128; + } - /** @name PalletStorageCall (395) */ - export interface PalletStorageCall extends Enum { + /** @name PalletStorageCall (398) */ + interface PalletStorageCall extends Enum { readonly isDeleteStorageBucket: boolean; readonly asDeleteStorageBucket: { readonly storageBucketId: u64; @@ -3886,13 +4009,13 @@ declare module '@polkadot/types/lookup' { readonly type: 'DeleteStorageBucket' | 'UpdateUploadingBlockedStatus' | 'UpdateDataSizeFee' | 'UpdateStorageBucketsPerBagLimit' | 'UpdateStorageBucketsVoucherMaxLimits' | 'UpdateDataObjectStateBloatBond' | 'UpdateNumberOfStorageBucketsInDynamicBagCreationPolicy' | 'UpdateBlacklist' | 'CreateStorageBucket' | 'UpdateStorageBucketsForBag' | 'CancelStorageBucketOperatorInvite' | 'InviteStorageBucketOperator' | 'RemoveStorageBucketOperator' | 'UpdateStorageBucketStatus' | 'SetStorageBucketVoucherLimits' | 'AcceptStorageBucketInvitation' | 'SetStorageOperatorMetadata' | 'AcceptPendingDataObjects' | 'CreateDistributionBucketFamily' | 'DeleteDistributionBucketFamily' | 'CreateDistributionBucket' | 'UpdateDistributionBucketStatus' | 'DeleteDistributionBucket' | 'UpdateDistributionBucketsForBag' | 'UpdateDistributionBucketsPerBagLimit' | 'UpdateDistributionBucketMode' | 'UpdateFamiliesInDynamicBagCreationPolicy' | 'InviteDistributionBucketOperator' | 'CancelDistributionBucketOperatorInvite' | 'RemoveDistributionBucketOperator' | 'SetDistributionBucketFamilyMetadata' | 'AcceptDistributionBucketInvitation' | 'SetDistributionOperatorMetadata' | 'StorageOperatorRemark' | 'DistributionOperatorRemark'; } - /** @name PalletProjectTokenCall (396) */ - export interface PalletProjectTokenCall extends Enum { + /** @name PalletProjectTokenCall (399) */ + interface PalletProjectTokenCall extends Enum { readonly isTransfer: boolean; readonly asTransfer: { readonly srcMemberId: u64; readonly tokenId: u64; - readonly outputs: PalletProjectTokenTransfersPayment; + readonly outputs: Vec>; readonly metadata: Bytes; } & Struct; readonly isBurn: boolean; @@ -3929,29 +4052,39 @@ declare module '@polkadot/types/lookup' { readonly tokenId: u64; readonly memberId: u64; } & Struct; - readonly type: 'Transfer' | 'Burn' | 'DustAccount' | 'JoinWhitelist' | 'PurchaseTokensOnSale' | 'ParticipateInSplit' | 'ExitRevenueSplit'; - } - - /** @name PalletProjectTokenTransfersPayment (397) */ - export interface PalletProjectTokenTransfersPayment extends BTreeMap {} - - /** @name PalletProjectTokenPayment (398) */ - export interface PalletProjectTokenPayment extends Struct { - readonly amount: u128; + readonly isBuyOnAmm: boolean; + readonly asBuyOnAmm: { + readonly tokenId: u64; + readonly memberId: u64; + readonly amount: u128; + readonly slippageTolerance: Option>; + } & Struct; + readonly isSellOnAmm: boolean; + readonly asSellOnAmm: { + readonly tokenId: u64; + readonly memberId: u64; + readonly amount: u128; + readonly slippageTolerance: Option>; + } & Struct; + readonly isSetFrozenStatus: boolean; + readonly asSetFrozenStatus: { + readonly freeze: bool; + } & Struct; + readonly type: 'Transfer' | 'Burn' | 'DustAccount' | 'JoinWhitelist' | 'PurchaseTokensOnSale' | 'ParticipateInSplit' | 'ExitRevenueSplit' | 'BuyOnAmm' | 'SellOnAmm' | 'SetFrozenStatus'; } - /** @name PalletProjectTokenMerkleProof (402) */ - export interface PalletProjectTokenMerkleProof extends Vec> {} + /** @name PalletProjectTokenMerkleProof (403) */ + interface PalletProjectTokenMerkleProof extends Vec> {} - /** @name PalletProjectTokenMerkleSide (405) */ - export interface PalletProjectTokenMerkleSide extends Enum { + /** @name PalletProjectTokenMerkleSide (406) */ + interface PalletProjectTokenMerkleSide extends Enum { readonly isRight: boolean; readonly isLeft: boolean; readonly type: 'Right' | 'Left'; } - /** @name PalletProposalsEngineCall (406) */ - export interface PalletProposalsEngineCall extends Enum { + /** @name PalletProposalsEngineCall (409) */ + interface PalletProposalsEngineCall extends Enum { readonly isVote: boolean; readonly asVote: { readonly voterId: u64; @@ -3977,8 +4110,8 @@ declare module '@polkadot/types/lookup' { readonly type: 'Vote' | 'CancelProposal' | 'VetoProposal' | 'ProposerRemark'; } - /** @name PalletProposalsDiscussionCall (407) */ - export interface PalletProposalsDiscussionCall extends Enum { + /** @name PalletProposalsDiscussionCall (410) */ + interface PalletProposalsDiscussionCall extends Enum { readonly isAddPost: boolean; readonly asAddPost: { readonly postAuthorId: u64; @@ -4008,8 +4141,8 @@ declare module '@polkadot/types/lookup' { readonly type: 'AddPost' | 'DeletePost' | 'UpdatePost' | 'ChangeThreadMode'; } - /** @name PalletProposalsCodexCall (408) */ - export interface PalletProposalsCodexCall extends Enum { + /** @name PalletProposalsCodexCall (411) */ + interface PalletProposalsCodexCall extends Enum { readonly isCreateProposal: boolean; readonly asCreateProposal: { readonly generalProposalParameters: PalletProposalsCodexGeneralProposalParams; @@ -4018,8 +4151,8 @@ declare module '@polkadot/types/lookup' { readonly type: 'CreateProposal'; } - /** @name PalletWorkingGroupCall (409) */ - export interface PalletWorkingGroupCall extends Enum { + /** @name PalletWorkingGroupCall (412) */ + interface PalletWorkingGroupCall extends Enum { readonly isAddOpening: boolean; readonly asAddOpening: { readonly description: Bytes; @@ -4118,16 +4251,16 @@ declare module '@polkadot/types/lookup' { readonly type: 'AddOpening' | 'ApplyOnOpening' | 'FillOpening' | 'UpdateRoleAccount' | 'LeaveRole' | 'TerminateRole' | 'SlashStake' | 'DecreaseStake' | 'IncreaseStake' | 'WithdrawApplication' | 'CancelOpening' | 'SetBudget' | 'UpdateRewardAccount' | 'UpdateRewardAmount' | 'SetStatusText' | 'SpendFromBudget' | 'FundWorkingGroupBudget' | 'LeadRemark' | 'WorkerRemark'; } - /** @name JoystreamNodeRuntimeOriginCaller (418) */ - export interface JoystreamNodeRuntimeOriginCaller extends Enum { + /** @name JoystreamNodeRuntimeOriginCaller (421) */ + interface JoystreamNodeRuntimeOriginCaller extends Enum { readonly isSystem: boolean; readonly asSystem: FrameSupportDispatchRawOrigin; readonly isVoid: boolean; readonly type: 'System' | 'Void'; } - /** @name FrameSupportDispatchRawOrigin (419) */ - export interface FrameSupportDispatchRawOrigin extends Enum { + /** @name FrameSupportDispatchRawOrigin (422) */ + interface FrameSupportDispatchRawOrigin extends Enum { readonly isRoot: boolean; readonly isSigned: boolean; readonly asSigned: AccountId32; @@ -4135,17 +4268,17 @@ declare module '@polkadot/types/lookup' { readonly type: 'Root' | 'Signed' | 'None'; } - /** @name SpCoreVoid (420) */ - export type SpCoreVoid = Null; + /** @name SpCoreVoid (423) */ + type SpCoreVoid = Null; - /** @name PalletUtilityError (421) */ - export interface PalletUtilityError extends Enum { + /** @name PalletUtilityError (424) */ + interface PalletUtilityError extends Enum { readonly isTooManyCalls: boolean; readonly type: 'TooManyCalls'; } - /** @name SpConsensusBabeDigestsPreDigest (428) */ - export interface SpConsensusBabeDigestsPreDigest extends Enum { + /** @name SpConsensusBabeDigestsPreDigest (431) */ + interface SpConsensusBabeDigestsPreDigest extends Enum { readonly isPrimary: boolean; readonly asPrimary: SpConsensusBabeDigestsPrimaryPreDigest; readonly isSecondaryPlain: boolean; @@ -4155,36 +4288,36 @@ declare module '@polkadot/types/lookup' { readonly type: 'Primary' | 'SecondaryPlain' | 'SecondaryVRF'; } - /** @name SpConsensusBabeDigestsPrimaryPreDigest (429) */ - export interface SpConsensusBabeDigestsPrimaryPreDigest extends Struct { + /** @name SpConsensusBabeDigestsPrimaryPreDigest (432) */ + interface SpConsensusBabeDigestsPrimaryPreDigest extends Struct { readonly authorityIndex: u32; readonly slot: u64; readonly vrfOutput: U8aFixed; readonly vrfProof: U8aFixed; } - /** @name SpConsensusBabeDigestsSecondaryPlainPreDigest (430) */ - export interface SpConsensusBabeDigestsSecondaryPlainPreDigest extends Struct { + /** @name SpConsensusBabeDigestsSecondaryPlainPreDigest (433) */ + interface SpConsensusBabeDigestsSecondaryPlainPreDigest extends Struct { readonly authorityIndex: u32; readonly slot: u64; } - /** @name SpConsensusBabeDigestsSecondaryVRFPreDigest (431) */ - export interface SpConsensusBabeDigestsSecondaryVRFPreDigest extends Struct { + /** @name SpConsensusBabeDigestsSecondaryVRFPreDigest (434) */ + interface SpConsensusBabeDigestsSecondaryVRFPreDigest extends Struct { readonly authorityIndex: u32; readonly slot: u64; readonly vrfOutput: U8aFixed; readonly vrfProof: U8aFixed; } - /** @name SpConsensusBabeBabeEpochConfiguration (433) */ - export interface SpConsensusBabeBabeEpochConfiguration extends Struct { + /** @name SpConsensusBabeBabeEpochConfiguration (436) */ + interface SpConsensusBabeBabeEpochConfiguration extends Struct { readonly c: ITuple<[u64, u64]>; readonly allowedSlots: SpConsensusBabeAllowedSlots; } - /** @name PalletBabeError (434) */ - export interface PalletBabeError extends Enum { + /** @name PalletBabeError (438) */ + interface PalletBabeError extends Enum { readonly isInvalidEquivocationProof: boolean; readonly isInvalidKeyOwnershipProof: boolean; readonly isDuplicateOffenceReport: boolean; @@ -4192,57 +4325,29 @@ declare module '@polkadot/types/lookup' { readonly type: 'InvalidEquivocationProof' | 'InvalidKeyOwnershipProof' | 'DuplicateOffenceReport' | 'InvalidConfiguration'; } - /** @name PalletAuthorshipUncleEntryItem (436) */ - export interface PalletAuthorshipUncleEntryItem extends Enum { - readonly isInclusionHeight: boolean; - readonly asInclusionHeight: u32; - readonly isUncle: boolean; - readonly asUncle: ITuple<[H256, Option]>; - readonly type: 'InclusionHeight' | 'Uncle'; - } - - /** @name PalletAuthorshipError (437) */ - export interface PalletAuthorshipError extends Enum { - readonly isInvalidUncleParent: boolean; - readonly isUnclesAlreadySet: boolean; - readonly isTooManyUncles: boolean; - readonly isGenesisUncle: boolean; - readonly isTooHighUncle: boolean; - readonly isUncleAlreadyIncluded: boolean; - readonly isOldUncle: boolean; - readonly type: 'InvalidUncleParent' | 'UnclesAlreadySet' | 'TooManyUncles' | 'GenesisUncle' | 'TooHighUncle' | 'UncleAlreadyIncluded' | 'OldUncle'; - } - - /** @name PalletBalancesBalanceLock (439) */ - export interface PalletBalancesBalanceLock extends Struct { + /** @name PalletBalancesBalanceLock (440) */ + interface PalletBalancesBalanceLock extends Struct { readonly id: U8aFixed; readonly amount: u128; readonly reasons: PalletBalancesReasons; } - /** @name PalletBalancesReasons (440) */ - export interface PalletBalancesReasons extends Enum { + /** @name PalletBalancesReasons (441) */ + interface PalletBalancesReasons extends Enum { readonly isFee: boolean; readonly isMisc: boolean; readonly isAll: boolean; readonly type: 'Fee' | 'Misc' | 'All'; } - /** @name PalletBalancesReserveData (443) */ - export interface PalletBalancesReserveData extends Struct { + /** @name PalletBalancesReserveData (444) */ + interface PalletBalancesReserveData extends Struct { readonly id: U8aFixed; readonly amount: u128; } - /** @name PalletBalancesReleases (445) */ - export interface PalletBalancesReleases extends Enum { - readonly isV100: boolean; - readonly isV200: boolean; - readonly type: 'V100' | 'V200'; - } - /** @name PalletBalancesError (446) */ - export interface PalletBalancesError extends Enum { + interface PalletBalancesError extends Enum { readonly isVestingBalance: boolean; readonly isLiquidityRestrictions: boolean; readonly isInsufficientBalance: boolean; @@ -4255,45 +4360,35 @@ declare module '@polkadot/types/lookup' { } /** @name PalletTransactionPaymentReleases (448) */ - export interface PalletTransactionPaymentReleases extends Enum { + interface PalletTransactionPaymentReleases extends Enum { readonly isV1Ancient: boolean; readonly isV2: boolean; readonly type: 'V1Ancient' | 'V2'; } - /** @name PalletElectionProviderMultiPhasePhase (449) */ - export interface PalletElectionProviderMultiPhasePhase extends Enum { - readonly isOff: boolean; - readonly isSigned: boolean; - readonly isUnsigned: boolean; - readonly asUnsigned: ITuple<[bool, u32]>; - readonly isEmergency: boolean; - readonly type: 'Off' | 'Signed' | 'Unsigned' | 'Emergency'; - } - - /** @name PalletElectionProviderMultiPhaseReadySolution (451) */ - export interface PalletElectionProviderMultiPhaseReadySolution extends Struct { + /** @name PalletElectionProviderMultiPhaseReadySolution (449) */ + interface PalletElectionProviderMultiPhaseReadySolution extends Struct { readonly supports: Vec>; readonly score: SpNposElectionsElectionScore; readonly compute: PalletElectionProviderMultiPhaseElectionCompute; } - /** @name PalletElectionProviderMultiPhaseRoundSnapshot (452) */ - export interface PalletElectionProviderMultiPhaseRoundSnapshot extends Struct { + /** @name PalletElectionProviderMultiPhaseRoundSnapshot (451) */ + interface PalletElectionProviderMultiPhaseRoundSnapshot extends Struct { readonly voters: Vec]>>; readonly targets: Vec; } - /** @name PalletElectionProviderMultiPhaseSignedSignedSubmission (460) */ - export interface PalletElectionProviderMultiPhaseSignedSignedSubmission extends Struct { + /** @name PalletElectionProviderMultiPhaseSignedSignedSubmission (458) */ + interface PalletElectionProviderMultiPhaseSignedSignedSubmission extends Struct { readonly who: AccountId32; readonly deposit: u128; readonly rawSolution: PalletElectionProviderMultiPhaseRawSolution; readonly callFee: u128; } - /** @name PalletElectionProviderMultiPhaseError (461) */ - export interface PalletElectionProviderMultiPhaseError extends Enum { + /** @name PalletElectionProviderMultiPhaseError (459) */ + interface PalletElectionProviderMultiPhaseError extends Enum { readonly isPreDispatchEarlySubmission: boolean; readonly isPreDispatchWrongWinnerCount: boolean; readonly isPreDispatchWeakSubmission: boolean; @@ -4306,11 +4401,13 @@ declare module '@polkadot/types/lookup' { readonly isInvalidSubmissionIndex: boolean; readonly isCallNotAllowed: boolean; readonly isFallbackFailed: boolean; - readonly type: 'PreDispatchEarlySubmission' | 'PreDispatchWrongWinnerCount' | 'PreDispatchWeakSubmission' | 'SignedQueueFull' | 'SignedCannotPayDeposit' | 'SignedInvalidWitness' | 'SignedTooMuchWeight' | 'OcwCallWrongEra' | 'MissingSnapshotMetadata' | 'InvalidSubmissionIndex' | 'CallNotAllowed' | 'FallbackFailed'; + readonly isBoundNotMet: boolean; + readonly isTooManyWinners: boolean; + readonly type: 'PreDispatchEarlySubmission' | 'PreDispatchWrongWinnerCount' | 'PreDispatchWeakSubmission' | 'SignedQueueFull' | 'SignedCannotPayDeposit' | 'SignedInvalidWitness' | 'SignedTooMuchWeight' | 'OcwCallWrongEra' | 'MissingSnapshotMetadata' | 'InvalidSubmissionIndex' | 'CallNotAllowed' | 'FallbackFailed' | 'BoundNotMet' | 'TooManyWinners'; } - /** @name PalletStakingStakingLedger (462) */ - export interface PalletStakingStakingLedger extends Struct { + /** @name PalletStakingStakingLedger (460) */ + interface PalletStakingStakingLedger extends Struct { readonly stash: AccountId32; readonly total: Compact; readonly active: Compact; @@ -4318,42 +4415,33 @@ declare module '@polkadot/types/lookup' { readonly claimedRewards: Vec; } - /** @name PalletStakingUnlockChunk (464) */ - export interface PalletStakingUnlockChunk extends Struct { + /** @name PalletStakingUnlockChunk (462) */ + interface PalletStakingUnlockChunk extends Struct { readonly value: Compact; readonly era: Compact; } - /** @name PalletStakingNominations (466) */ - export interface PalletStakingNominations extends Struct { + /** @name PalletStakingNominations (465) */ + interface PalletStakingNominations extends Struct { readonly targets: Vec; readonly submittedIn: u32; readonly suppressed: bool; } - /** @name PalletStakingActiveEraInfo (467) */ - export interface PalletStakingActiveEraInfo extends Struct { + /** @name PalletStakingActiveEraInfo (466) */ + interface PalletStakingActiveEraInfo extends Struct { readonly index: u32; readonly start: Option; } - /** @name PalletStakingEraRewardPoints (469) */ - export interface PalletStakingEraRewardPoints extends Struct { + /** @name PalletStakingEraRewardPoints (468) */ + interface PalletStakingEraRewardPoints extends Struct { readonly total: u32; readonly individual: BTreeMap; } - /** @name PalletStakingForcing (473) */ - export interface PalletStakingForcing extends Enum { - readonly isNotForcing: boolean; - readonly isForceNew: boolean; - readonly isForceNone: boolean; - readonly isForceAlways: boolean; - readonly type: 'NotForcing' | 'ForceNew' | 'ForceNone' | 'ForceAlways'; - } - - /** @name PalletStakingUnappliedSlash (475) */ - export interface PalletStakingUnappliedSlash extends Struct { + /** @name PalletStakingUnappliedSlash (473) */ + interface PalletStakingUnappliedSlash extends Struct { readonly validator: AccountId32; readonly own: u128; readonly others: Vec>; @@ -4361,36 +4449,22 @@ declare module '@polkadot/types/lookup' { readonly payout: u128; } - /** @name PalletStakingSlashingSlashingSpans (477) */ - export interface PalletStakingSlashingSlashingSpans extends Struct { + /** @name PalletStakingSlashingSlashingSpans (475) */ + interface PalletStakingSlashingSlashingSpans extends Struct { readonly spanIndex: u32; readonly lastStart: u32; readonly lastNonzeroSlash: u32; readonly prior: Vec; } - /** @name PalletStakingSlashingSpanRecord (478) */ - export interface PalletStakingSlashingSpanRecord extends Struct { + /** @name PalletStakingSlashingSpanRecord (476) */ + interface PalletStakingSlashingSpanRecord extends Struct { readonly slashed: u128; readonly paidOut: u128; } - /** @name PalletStakingReleases (481) */ - export interface PalletStakingReleases extends Enum { - readonly isV100Ancient: boolean; - readonly isV200: boolean; - readonly isV300: boolean; - readonly isV400: boolean; - readonly isV500: boolean; - readonly isV600: boolean; - readonly isV700: boolean; - readonly isV800: boolean; - readonly isV900: boolean; - readonly type: 'V100Ancient' | 'V200' | 'V300' | 'V400' | 'V500' | 'V600' | 'V700' | 'V800' | 'V900'; - } - - /** @name PalletStakingPalletError (482) */ - export interface PalletStakingPalletError extends Enum { + /** @name PalletStakingPalletError (479) */ + interface PalletStakingPalletError extends Enum { readonly isNotController: boolean; readonly isNotStash: boolean; readonly isAlreadyBonded: boolean; @@ -4415,15 +4489,16 @@ declare module '@polkadot/types/lookup' { readonly isTooManyNominators: boolean; readonly isTooManyValidators: boolean; readonly isCommissionTooLow: boolean; + readonly isBoundNotMet: boolean; readonly isBondingRestricted: boolean; - readonly type: 'NotController' | 'NotStash' | 'AlreadyBonded' | 'AlreadyPaired' | 'EmptyTargets' | 'DuplicateIndex' | 'InvalidSlashIndex' | 'InsufficientBond' | 'NoMoreChunks' | 'NoUnlockChunk' | 'FundedTarget' | 'InvalidEraToReward' | 'InvalidNumberOfNominations' | 'NotSortedAndUnique' | 'AlreadyClaimed' | 'IncorrectHistoryDepth' | 'IncorrectSlashingSpans' | 'BadState' | 'TooManyTargets' | 'BadTarget' | 'CannotChillOther' | 'TooManyNominators' | 'TooManyValidators' | 'CommissionTooLow' | 'BondingRestricted'; + readonly type: 'NotController' | 'NotStash' | 'AlreadyBonded' | 'AlreadyPaired' | 'EmptyTargets' | 'DuplicateIndex' | 'InvalidSlashIndex' | 'InsufficientBond' | 'NoMoreChunks' | 'NoUnlockChunk' | 'FundedTarget' | 'InvalidEraToReward' | 'InvalidNumberOfNominations' | 'NotSortedAndUnique' | 'AlreadyClaimed' | 'IncorrectHistoryDepth' | 'IncorrectSlashingSpans' | 'BadState' | 'TooManyTargets' | 'BadTarget' | 'CannotChillOther' | 'TooManyNominators' | 'TooManyValidators' | 'CommissionTooLow' | 'BoundNotMet' | 'BondingRestricted'; } - /** @name SpCoreCryptoKeyTypeId (486) */ - export interface SpCoreCryptoKeyTypeId extends U8aFixed {} + /** @name SpCoreCryptoKeyTypeId (483) */ + interface SpCoreCryptoKeyTypeId extends U8aFixed {} - /** @name PalletSessionError (487) */ - export interface PalletSessionError extends Enum { + /** @name PalletSessionError (484) */ + interface PalletSessionError extends Enum { readonly isInvalidProof: boolean; readonly isNoAssociatedValidatorId: boolean; readonly isDuplicatedKey: boolean; @@ -4432,8 +4507,8 @@ declare module '@polkadot/types/lookup' { readonly type: 'InvalidProof' | 'NoAssociatedValidatorId' | 'DuplicatedKey' | 'NoKeys' | 'NoAccount'; } - /** @name PalletGrandpaStoredState (489) */ - export interface PalletGrandpaStoredState extends Enum { + /** @name PalletGrandpaStoredState (486) */ + interface PalletGrandpaStoredState extends Enum { readonly isLive: boolean; readonly isPendingPause: boolean; readonly asPendingPause: { @@ -4449,16 +4524,16 @@ declare module '@polkadot/types/lookup' { readonly type: 'Live' | 'PendingPause' | 'Paused' | 'PendingResume'; } - /** @name PalletGrandpaStoredPendingChange (490) */ - export interface PalletGrandpaStoredPendingChange extends Struct { + /** @name PalletGrandpaStoredPendingChange (487) */ + interface PalletGrandpaStoredPendingChange extends Struct { readonly scheduledAt: u32; readonly delay: u32; - readonly nextAuthorities: Vec>; + readonly nextAuthorities: Vec>; readonly forced: Option; } - /** @name PalletGrandpaError (492) */ - export interface PalletGrandpaError extends Enum { + /** @name PalletGrandpaError (489) */ + interface PalletGrandpaError extends Enum { readonly isPauseFailed: boolean; readonly isResumeFailed: boolean; readonly isChangePending: boolean; @@ -4469,27 +4544,27 @@ declare module '@polkadot/types/lookup' { readonly type: 'PauseFailed' | 'ResumeFailed' | 'ChangePending' | 'TooSoon' | 'InvalidKeyOwnershipProof' | 'InvalidEquivocationProof' | 'DuplicateOffenceReport'; } - /** @name PalletImOnlineBoundedOpaqueNetworkState (498) */ - export interface PalletImOnlineBoundedOpaqueNetworkState extends Struct { + /** @name PalletImOnlineBoundedOpaqueNetworkState (495) */ + interface PalletImOnlineBoundedOpaqueNetworkState extends Struct { readonly peerId: Bytes; readonly externalAddresses: Vec; } - /** @name PalletImOnlineError (502) */ - export interface PalletImOnlineError extends Enum { + /** @name PalletImOnlineError (499) */ + interface PalletImOnlineError extends Enum { readonly isInvalidKey: boolean; readonly isDuplicatedHeartbeat: boolean; readonly type: 'InvalidKey' | 'DuplicatedHeartbeat'; } - /** @name SpStakingOffenceOffenceDetails (503) */ - export interface SpStakingOffenceOffenceDetails extends Struct { + /** @name SpStakingOffenceOffenceDetails (500) */ + interface SpStakingOffenceOffenceDetails extends Struct { readonly offender: ITuple<[AccountId32, PalletStakingExposure]>; readonly reporters: Vec; } - /** @name PalletBagsListListNode (506) */ - export interface PalletBagsListListNode extends Struct { + /** @name PalletBagsListListNode (503) */ + interface PalletBagsListListNode extends Struct { readonly id: AccountId32; readonly prev: Option; readonly next: Option; @@ -4497,21 +4572,21 @@ declare module '@polkadot/types/lookup' { readonly score: u64; } - /** @name PalletBagsListListBag (507) */ - export interface PalletBagsListListBag extends Struct { + /** @name PalletBagsListListBag (504) */ + interface PalletBagsListListBag extends Struct { readonly head: Option; readonly tail: Option; } - /** @name PalletBagsListError (508) */ - export interface PalletBagsListError extends Enum { + /** @name PalletBagsListError (505) */ + interface PalletBagsListError extends Enum { readonly isList: boolean; readonly asList: PalletBagsListListListError; readonly type: 'List'; } - /** @name PalletBagsListListListError (509) */ - export interface PalletBagsListListListError extends Enum { + /** @name PalletBagsListListListError (506) */ + interface PalletBagsListListListError extends Enum { readonly isDuplicate: boolean; readonly isNotHeavier: boolean; readonly isNotInSameBag: boolean; @@ -4519,15 +4594,15 @@ declare module '@polkadot/types/lookup' { readonly type: 'Duplicate' | 'NotHeavier' | 'NotInSameBag' | 'NodeNotFound'; } - /** @name PalletVestingReleases (512) */ - export interface PalletVestingReleases extends Enum { + /** @name PalletVestingReleases (509) */ + interface PalletVestingReleases extends Enum { readonly isV0: boolean; readonly isV1: boolean; readonly type: 'V0' | 'V1'; } - /** @name PalletVestingError (513) */ - export interface PalletVestingError extends Enum { + /** @name PalletVestingError (510) */ + interface PalletVestingError extends Enum { readonly isNotVesting: boolean; readonly isAtMaxVestingSchedules: boolean; readonly isAmountLow: boolean; @@ -4536,16 +4611,16 @@ declare module '@polkadot/types/lookup' { readonly type: 'NotVesting' | 'AtMaxVestingSchedules' | 'AmountLow' | 'ScheduleIndexOutOfBounds' | 'InvalidScheduleParams'; } - /** @name PalletMultisigMultisig (515) */ - export interface PalletMultisigMultisig extends Struct { + /** @name PalletMultisigMultisig (512) */ + interface PalletMultisigMultisig extends Struct { readonly when: PalletMultisigTimepoint; readonly deposit: u128; readonly depositor: AccountId32; readonly approvals: Vec; } - /** @name PalletMultisigError (517) */ - export interface PalletMultisigError extends Enum { + /** @name PalletMultisigError (514) */ + interface PalletMultisigError extends Enum { readonly isMinimumThreshold: boolean; readonly isAlreadyApproved: boolean; readonly isNoApprovalsNeeded: boolean; @@ -4563,14 +4638,14 @@ declare module '@polkadot/types/lookup' { readonly type: 'MinimumThreshold' | 'AlreadyApproved' | 'NoApprovalsNeeded' | 'TooFewSignatories' | 'TooManySignatories' | 'SignatoriesOutOfOrder' | 'SenderInSignatories' | 'NotFound' | 'NotOwner' | 'NoTimepoint' | 'WrongTimepoint' | 'UnexpectedTimepoint' | 'MaxWeightTooLow' | 'AlreadyStored'; } - /** @name PalletCouncilCouncilStageUpdate (518) */ - export interface PalletCouncilCouncilStageUpdate extends Struct { + /** @name PalletCouncilCouncilStageUpdate (515) */ + interface PalletCouncilCouncilStageUpdate extends Struct { readonly stage: PalletCouncilCouncilStage; readonly changedAt: u32; } - /** @name PalletCouncilCouncilStage (519) */ - export interface PalletCouncilCouncilStage extends Enum { + /** @name PalletCouncilCouncilStage (516) */ + interface PalletCouncilCouncilStage extends Enum { readonly isAnnouncing: boolean; readonly asAnnouncing: PalletCouncilCouncilStageAnnouncing; readonly isElection: boolean; @@ -4580,24 +4655,24 @@ declare module '@polkadot/types/lookup' { readonly type: 'Announcing' | 'Election' | 'Idle'; } - /** @name PalletCouncilCouncilStageAnnouncing (520) */ - export interface PalletCouncilCouncilStageAnnouncing extends Struct { + /** @name PalletCouncilCouncilStageAnnouncing (517) */ + interface PalletCouncilCouncilStageAnnouncing extends Struct { readonly candidatesCount: u32; readonly endsAt: u32; } - /** @name PalletCouncilCouncilStageElection (521) */ - export interface PalletCouncilCouncilStageElection extends Struct { + /** @name PalletCouncilCouncilStageElection (518) */ + interface PalletCouncilCouncilStageElection extends Struct { readonly candidatesCount: u32; } - /** @name PalletCouncilCouncilStageIdle (522) */ - export interface PalletCouncilCouncilStageIdle extends Struct { + /** @name PalletCouncilCouncilStageIdle (519) */ + interface PalletCouncilCouncilStageIdle extends Struct { readonly endsAt: u32; } - /** @name PalletCouncilCouncilMember (524) */ - export interface PalletCouncilCouncilMember extends Struct { + /** @name PalletCouncilCouncilMember (521) */ + interface PalletCouncilCouncilMember extends Struct { readonly stakingAccountId: AccountId32; readonly rewardAccountId: AccountId32; readonly membershipId: u64; @@ -4606,8 +4681,8 @@ declare module '@polkadot/types/lookup' { readonly unpaidReward: u128; } - /** @name PalletCouncilCandidate (526) */ - export interface PalletCouncilCandidate extends Struct { + /** @name PalletCouncilCandidate (523) */ + interface PalletCouncilCandidate extends Struct { readonly stakingAccountId: AccountId32; readonly rewardAccountId: AccountId32; readonly cycleId: u64; @@ -4616,8 +4691,8 @@ declare module '@polkadot/types/lookup' { readonly noteHash: Option; } - /** @name PalletCouncilError (527) */ - export interface PalletCouncilError extends Enum { + /** @name PalletCouncilError (524) */ + interface PalletCouncilError extends Enum { readonly isArithmeticError: boolean; readonly isBadOrigin: boolean; readonly isCantCandidateNow: boolean; @@ -4645,8 +4720,8 @@ declare module '@polkadot/types/lookup' { readonly type: 'ArithmeticError' | 'BadOrigin' | 'CantCandidateNow' | 'CantReleaseStakeNow' | 'CandidacyStakeTooLow' | 'CantCandidateTwice' | 'ConflictingStake' | 'StakeStillNeeded' | 'NoStake' | 'InsufficientBalanceForStaking' | 'CantVoteForYourself' | 'MemberIdNotMatchAccount' | 'InvalidAccountToStakeReuse' | 'NotCandidatingNow' | 'CantWithdrawCandidacyNow' | 'NotCouncilor' | 'InsufficientFundsForFundingRequest' | 'ZeroBalanceFundRequest' | 'RepeatedFundRequestAccount' | 'EmptyFundingRequests' | 'InsufficientTokensForFunding' | 'ZeroTokensFunding' | 'CandidateDoesNotExist' | 'InsufficientBalanceForTransfer'; } - /** @name PalletReferendumReferendumStage (528) */ - export interface PalletReferendumReferendumStage extends Enum { + /** @name PalletReferendumReferendumStage (525) */ + interface PalletReferendumReferendumStage extends Enum { readonly isInactive: boolean; readonly isVoting: boolean; readonly asVoting: PalletReferendumReferendumStageVoting; @@ -4655,16 +4730,16 @@ declare module '@polkadot/types/lookup' { readonly type: 'Inactive' | 'Voting' | 'Revealing'; } - /** @name PalletReferendumReferendumStageVoting (530) */ - export interface PalletReferendumReferendumStageVoting extends Struct { + /** @name PalletReferendumReferendumStageVoting (527) */ + interface PalletReferendumReferendumStageVoting extends Struct { readonly started: u32; readonly winningTargetCount: u32; readonly currentCycleId: u64; readonly endsAt: u32; } - /** @name PalletReferendumReferendumStageRevealing (531) */ - export interface PalletReferendumReferendumStageRevealing extends Struct { + /** @name PalletReferendumReferendumStageRevealing (528) */ + interface PalletReferendumReferendumStageRevealing extends Struct { readonly started: u32; readonly winningTargetCount: u32; readonly intermediateWinners: Vec; @@ -4672,16 +4747,16 @@ declare module '@polkadot/types/lookup' { readonly endsAt: u32; } - /** @name PalletReferendumCastVote (532) */ - export interface PalletReferendumCastVote extends Struct { + /** @name PalletReferendumCastVote (529) */ + interface PalletReferendumCastVote extends Struct { readonly commitment: H256; readonly cycleId: u64; readonly stake: u128; readonly voteFor: Option; } - /** @name PalletReferendumError (533) */ - export interface PalletReferendumError extends Enum { + /** @name PalletReferendumError (530) */ + interface PalletReferendumError extends Enum { readonly isBadOrigin: boolean; readonly isReferendumNotRunning: boolean; readonly isRevealingNotInProgress: boolean; @@ -4699,8 +4774,8 @@ declare module '@polkadot/types/lookup' { readonly type: 'BadOrigin' | 'ReferendumNotRunning' | 'RevealingNotInProgress' | 'ConflictStakesOnAccount' | 'InsufficientBalanceToStake' | 'InsufficientStake' | 'InvalidReveal' | 'InvalidVote' | 'VoteNotExisting' | 'AlreadyVotedThisCycle' | 'UnstakingVoteInSameCycle' | 'SaltTooLong' | 'UnstakingForbidden' | 'AccountAlreadyOptedOutOfVoting'; } - /** @name PalletMembershipMembershipObject (534) */ - export interface PalletMembershipMembershipObject extends Struct { + /** @name PalletMembershipMembershipObject (531) */ + interface PalletMembershipMembershipObject extends Struct { readonly handleHash: H256; readonly rootAccount: AccountId32; readonly controllerAccount: AccountId32; @@ -4708,14 +4783,14 @@ declare module '@polkadot/types/lookup' { readonly invites: u32; } - /** @name PalletMembershipStakingAccountMemberBinding (535) */ - export interface PalletMembershipStakingAccountMemberBinding extends Struct { + /** @name PalletMembershipStakingAccountMemberBinding (532) */ + interface PalletMembershipStakingAccountMemberBinding extends Struct { readonly memberId: u64; readonly confirmed: bool; } - /** @name PalletMembershipError (536) */ - export interface PalletMembershipError extends Enum { + /** @name PalletMembershipError (533) */ + interface PalletMembershipError extends Enum { readonly isNotEnoughBalanceToBuyMembership: boolean; readonly isControllerAccountRequired: boolean; readonly isRootAccountRequired: boolean; @@ -4741,8 +4816,8 @@ declare module '@polkadot/types/lookup' { readonly type: 'NotEnoughBalanceToBuyMembership' | 'ControllerAccountRequired' | 'RootAccountRequired' | 'UnsignedOrigin' | 'MemberProfileNotFound' | 'HandleAlreadyRegistered' | 'HandleMustBeProvidedDuringRegistration' | 'ReferrerIsNotMember' | 'CannotTransferInvitesForNotMember' | 'NotEnoughInvites' | 'WorkingGroupLeaderNotSet' | 'StakingAccountIsAlreadyRegistered' | 'StakingAccountDoesntExist' | 'StakingAccountAlreadyConfirmed' | 'WorkingGroupBudgetIsNotSufficientForInviting' | 'ConflictingLock' | 'CannotExceedReferralCutPercentLimit' | 'ConflictStakesOnAccount' | 'InsufficientBalanceToCoverStake' | 'GifLockExceedsCredit' | 'InsufficientBalanceToGift' | 'InsufficientBalanceToCoverPayment'; } - /** @name PalletForumCategory (537) */ - export interface PalletForumCategory extends Struct { + /** @name PalletForumCategory (534) */ + interface PalletForumCategory extends Struct { readonly titleHash: H256; readonly descriptionHash: H256; readonly archived: bool; @@ -4753,16 +4828,16 @@ declare module '@polkadot/types/lookup' { readonly stickyThreadIds: BTreeSet; } - /** @name PalletForumThread (539) */ - export interface PalletForumThread extends Struct { + /** @name PalletForumThread (536) */ + interface PalletForumThread extends Struct { readonly categoryId: u64; readonly authorId: u64; readonly cleanupPayOff: PalletCommonBloatBondRepayableBloatBond; readonly numberOfEditablePosts: u64; } - /** @name PalletForumPost (540) */ - export interface PalletForumPost extends Struct { + /** @name PalletForumPost (537) */ + interface PalletForumPost extends Struct { readonly threadId: u64; readonly textHash: H256; readonly authorId: u64; @@ -4770,8 +4845,8 @@ declare module '@polkadot/types/lookup' { readonly lastEdited: u32; } - /** @name PalletForumError (541) */ - export interface PalletForumError extends Enum { + /** @name PalletForumError (538) */ + interface PalletForumError extends Enum { readonly isArithmeticError: boolean; readonly isOriginNotForumLead: boolean; readonly isForumUserIdNotMatchAccount: boolean; @@ -4802,13 +4877,13 @@ declare module '@polkadot/types/lookup' { readonly type: 'ArithmeticError' | 'OriginNotForumLead' | 'ForumUserIdNotMatchAccount' | 'ModeratorIdNotMatchAccount' | 'AccountDoesNotMatchThreadAuthor' | 'ThreadDoesNotExist' | 'ModeratorModerateOriginCategory' | 'ModeratorModerateDestinationCategory' | 'ThreadMoveInvalid' | 'ThreadNotBeingUpdated' | 'InsufficientBalanceForThreadCreation' | 'CannotDeleteThreadWithOutstandingPosts' | 'PostDoesNotExist' | 'AccountDoesNotMatchPostAuthor' | 'InsufficientBalanceForPost' | 'CategoryNotBeingUpdated' | 'AncestorCategoryImmutable' | 'MaxValidCategoryDepthExceeded' | 'CategoryDoesNotExist' | 'CategoryModeratorDoesNotExist' | 'CategoryNotEmptyThreads' | 'CategoryNotEmptyCategories' | 'ModeratorCantDeleteCategory' | 'ModeratorCantUpdateCategory' | 'MapSizeLimit' | 'PathLengthShouldBeGreaterThanZero' | 'MaxNumberOfStickiedThreadsExceeded'; } - /** @name PalletConstitutionConstitutionInfo (542) */ - export interface PalletConstitutionConstitutionInfo extends Struct { + /** @name PalletConstitutionConstitutionInfo (539) */ + interface PalletConstitutionConstitutionInfo extends Struct { readonly textHash: H256; } - /** @name PalletBountyBountyRecord (543) */ - export interface PalletBountyBountyRecord extends Struct { + /** @name PalletBountyBountyRecord (540) */ + interface PalletBountyBountyRecord extends Struct { readonly creationParams: PalletBountyBountyParametersBoundedBTreeSet; readonly totalFunding: u128; readonly milestone: PalletBountyBountyMilestone; @@ -4816,8 +4891,8 @@ declare module '@polkadot/types/lookup' { readonly hasUnpaidOracleReward: bool; } - /** @name PalletBountyBountyParametersBoundedBTreeSet (545) */ - export interface PalletBountyBountyParametersBoundedBTreeSet extends Struct { + /** @name PalletBountyBountyParametersBoundedBTreeSet (542) */ + interface PalletBountyBountyParametersBoundedBTreeSet extends Struct { readonly oracle: PalletBountyBountyActor; readonly contractType: PalletBountyAssuranceContractTypeBoundedBTreeSet; readonly creator: PalletBountyBountyActor; @@ -4827,16 +4902,16 @@ declare module '@polkadot/types/lookup' { readonly fundingType: PalletBountyFundingType; } - /** @name PalletBountyAssuranceContractTypeBoundedBTreeSet (546) */ - export interface PalletBountyAssuranceContractTypeBoundedBTreeSet extends Enum { + /** @name PalletBountyAssuranceContractTypeBoundedBTreeSet (543) */ + interface PalletBountyAssuranceContractTypeBoundedBTreeSet extends Enum { readonly isOpen: boolean; readonly isClosed: boolean; readonly asClosed: BTreeSet; readonly type: 'Open' | 'Closed'; } - /** @name PalletBountyBountyMilestone (547) */ - export interface PalletBountyBountyMilestone extends Enum { + /** @name PalletBountyBountyMilestone (544) */ + interface PalletBountyBountyMilestone extends Enum { readonly isCreated: boolean; readonly asCreated: { readonly createdAt: u32; @@ -4852,22 +4927,22 @@ declare module '@polkadot/types/lookup' { readonly type: 'Created' | 'BountyMaxFundingReached' | 'WorkSubmitted' | 'Terminated' | 'JudgmentSubmitted'; } - /** @name PalletBountyContribution (549) */ - export interface PalletBountyContribution extends Struct { + /** @name PalletBountyContribution (546) */ + interface PalletBountyContribution extends Struct { readonly amount: u128; readonly funderStateBloatBondAmount: u128; } - /** @name PalletBountyEntryRecord (550) */ - export interface PalletBountyEntryRecord extends Struct { + /** @name PalletBountyEntryRecord (547) */ + interface PalletBountyEntryRecord extends Struct { readonly memberId: u64; readonly stakingAccountId: AccountId32; readonly submittedAt: u32; readonly workSubmitted: bool; } - /** @name PalletBountyError (551) */ - export interface PalletBountyError extends Enum { + /** @name PalletBountyError (548) */ + interface PalletBountyError extends Enum { readonly isArithmeticError: boolean; readonly isMinFundingAmountCannotBeGreaterThanMaxAmount: boolean; readonly isBountyDoesntExist: boolean; @@ -4906,24 +4981,32 @@ declare module '@polkadot/types/lookup' { readonly type: 'ArithmeticError' | 'MinFundingAmountCannotBeGreaterThanMaxAmount' | 'BountyDoesntExist' | 'SwitchOracleOriginIsRoot' | 'InvalidStageUnexpectedFunding' | 'InvalidStageUnexpectedNoFundingContributed' | 'InvalidStageUnexpectedCancelled' | 'InvalidStageUnexpectedWorkSubmission' | 'InvalidStageUnexpectedJudgment' | 'InvalidStageUnexpectedSuccessfulBountyWithdrawal' | 'InvalidStageUnexpectedFailedBountyWithdrawal' | 'InsufficientBalanceForBounty' | 'NoBountyContributionFound' | 'InsufficientBalanceForStake' | 'ConflictingStakes' | 'WorkEntryDoesntExist' | 'CherryLessThenMinimumAllowed' | 'CannotSubmitWorkToClosedContractBounty' | 'ClosedContractMemberListIsEmpty' | 'ClosedContractMemberListIsTooLarge' | 'ClosedContractMemberNotFound' | 'InvalidOracleMemberId' | 'InvalidStakingAccountForMember' | 'ZeroWinnerReward' | 'TotalRewardShouldBeEqualToTotalFunding' | 'EntrantStakeIsLessThanMininum' | 'FundingAmountCannotBeZero' | 'FundingPeriodCannotBeZero' | 'WinnerShouldHasWorkSubmission' | 'InvalidContributorActorSpecified' | 'InvalidOracleActorSpecified' | 'InvalidEntrantWorkerSpecified' | 'InvalidCreatorActorSpecified' | 'WorkEntryDoesntBelongToWorker' | 'OracleRewardAlreadyWithdrawn'; } - /** @name PalletContentVideoRecord (553) */ - export interface PalletContentVideoRecord extends Struct { + /** @name PalletJoystreamUtilityError (549) */ + interface PalletJoystreamUtilityError extends Enum { + readonly isInsufficientFundsForBudgetUpdate: boolean; + readonly isZeroTokensBurn: boolean; + readonly isInsufficientFundsForBurn: boolean; + readonly type: 'InsufficientFundsForBudgetUpdate' | 'ZeroTokensBurn' | 'InsufficientFundsForBurn'; + } + + /** @name PalletContentVideoRecord (550) */ + interface PalletContentVideoRecord extends Struct { readonly inChannel: u64; readonly nftStatus: Option; readonly dataObjects: BTreeSet; readonly videoStateBloatBond: PalletCommonBloatBondRepayableBloatBond; } - /** @name PalletContentNftTypesOwnedNft (554) */ - export interface PalletContentNftTypesOwnedNft extends Struct { + /** @name PalletContentNftTypesOwnedNft (551) */ + interface PalletContentNftTypesOwnedNft extends Struct { readonly owner: PalletContentNftTypesNftOwner; readonly transactionalStatus: PalletContentNftTypesTransactionalStatusRecord; readonly creatorRoyalty: Option; readonly openAuctionsNonce: u64; } - /** @name PalletContentNftTypesTransactionalStatusRecord (555) */ - export interface PalletContentNftTypesTransactionalStatusRecord extends Enum { + /** @name PalletContentNftTypesTransactionalStatusRecord (552) */ + interface PalletContentNftTypesTransactionalStatusRecord extends Enum { readonly isIdle: boolean; readonly isInitiatedOfferToMember: boolean; readonly asInitiatedOfferToMember: ITuple<[u64, Option]>; @@ -4936,8 +5019,8 @@ declare module '@polkadot/types/lookup' { readonly type: 'Idle' | 'InitiatedOfferToMember' | 'EnglishAuction' | 'OpenAuction' | 'BuyNow'; } - /** @name PalletContentNftTypesEnglishAuctionRecord (556) */ - export interface PalletContentNftTypesEnglishAuctionRecord extends Struct { + /** @name PalletContentNftTypesEnglishAuctionRecord (553) */ + interface PalletContentNftTypesEnglishAuctionRecord extends Struct { readonly startingPrice: u128; readonly buyNowPrice: Option; readonly whitelist: BTreeSet; @@ -4948,14 +5031,14 @@ declare module '@polkadot/types/lookup' { readonly topBid: Option; } - /** @name PalletContentNftTypesEnglishAuctionBid (559) */ - export interface PalletContentNftTypesEnglishAuctionBid extends Struct { + /** @name PalletContentNftTypesEnglishAuctionBid (556) */ + interface PalletContentNftTypesEnglishAuctionBid extends Struct { readonly amount: u128; readonly bidderId: u64; } - /** @name PalletContentNftTypesOpenAuctionRecord (560) */ - export interface PalletContentNftTypesOpenAuctionRecord extends Struct { + /** @name PalletContentNftTypesOpenAuctionRecord (557) */ + interface PalletContentNftTypesOpenAuctionRecord extends Struct { readonly startingPrice: u128; readonly buyNowPrice: Option; readonly whitelist: BTreeSet; @@ -4964,30 +5047,30 @@ declare module '@polkadot/types/lookup' { readonly start: u32; } - /** @name PalletContentNftTypesNftOwner (561) */ - export interface PalletContentNftTypesNftOwner extends Enum { + /** @name PalletContentNftTypesNftOwner (558) */ + interface PalletContentNftTypesNftOwner extends Enum { readonly isChannelOwner: boolean; readonly isMember: boolean; readonly asMember: u64; readonly type: 'ChannelOwner' | 'Member'; } - /** @name PalletContentPermissionsCuratorGroupCuratorGroupRecord (564) */ - export interface PalletContentPermissionsCuratorGroupCuratorGroupRecord extends Struct { + /** @name PalletContentPermissionsCuratorGroupCuratorGroupRecord (561) */ + interface PalletContentPermissionsCuratorGroupCuratorGroupRecord extends Struct { readonly curators: BTreeMap>; readonly active: bool; readonly permissionsByLevel: BTreeMap>; } - /** @name PalletContentNftTypesOpenAuctionBidRecord (571) */ - export interface PalletContentNftTypesOpenAuctionBidRecord extends Struct { + /** @name PalletContentNftTypesOpenAuctionBidRecord (568) */ + interface PalletContentNftTypesOpenAuctionBidRecord extends Struct { readonly amount: u128; readonly madeAtBlock: u32; readonly auctionId: u64; } - /** @name PalletContentErrorsError (572) */ - export interface PalletContentErrorsError extends Enum { + /** @name PalletContentErrorsError (569) */ + interface PalletContentErrorsError extends Enum { readonly isChannelStateBloatBondChanged: boolean; readonly isVideoStateBloatBondChanged: boolean; readonly isMinCashoutValueTooLow: boolean; @@ -5116,27 +5199,28 @@ declare module '@polkadot/types/lookup' { readonly isPatronageCanOnlyBeClaimedForMemberOwnedChannels: boolean; readonly isChannelTransfersBlockedDuringRevenueSplits: boolean; readonly isChannelTransfersBlockedDuringTokenSales: boolean; - readonly type: 'ChannelStateBloatBondChanged' | 'VideoStateBloatBondChanged' | 'MinCashoutValueTooLow' | 'MaxCashoutValueTooHigh' | 'MaxNumberOfChannelCollaboratorsExceeded' | 'MaxNumberOfChannelAssetsExceeded' | 'MaxNumberOfVideoAssetsExceeded' | 'MaxNumberOfChannelAgentPermissionsExceeded' | 'MaxNumberOfPausedFeaturesPerChannelExceeded' | 'InvalidChannelBagWitnessProvided' | 'InvalidStorageBucketsNumWitnessProvided' | 'MissingStorageBucketsNumWitness' | 'ChannelOwnerMemberDoesNotExist' | 'ChannelOwnerCuratorGroupDoesNotExist' | 'ChannelStateBloatBondBelowExistentialDeposit' | 'NumberOfAssetsToRemoveIsZero' | 'CuratorIsNotAMemberOfGivenCuratorGroup' | 'CuratorIsAlreadyAMemberOfGivenCuratorGroup' | 'CuratorGroupDoesNotExist' | 'CuratorsPerGroupLimitReached' | 'CuratorGroupIsNotActive' | 'CuratorIdInvalid' | 'LeadAuthFailed' | 'MemberAuthFailed' | 'CuratorAuthFailed' | 'BadOrigin' | 'ActorNotAuthorized' | 'CategoryDoesNotExist' | 'ChannelDoesNotExist' | 'VideoDoesNotExist' | 'VideoInSeason' | 'ActorCannotBeLead' | 'ActorCannotOwnChannel' | 'NftAlreadyOwnedByChannel' | 'NftAlreadyExists' | 'NftDoesNotExist' | 'OverflowOrUnderflowHappened' | 'DoesNotOwnNft' | 'RoyaltyUpperBoundExceeded' | 'RoyaltyLowerBoundExceeded' | 'AuctionDurationUpperBoundExceeded' | 'AuctionDurationLowerBoundExceeded' | 'ExtensionPeriodUpperBoundExceeded' | 'ExtensionPeriodLowerBoundExceeded' | 'BidLockDurationUpperBoundExceeded' | 'BidLockDurationLowerBoundExceeded' | 'StartingPriceUpperBoundExceeded' | 'StartingPriceLowerBoundExceeded' | 'AuctionBidStepUpperBoundExceeded' | 'AuctionBidStepLowerBoundExceeded' | 'InsufficientBalance' | 'BidStepConstraintViolated' | 'InvalidBidAmountSpecified' | 'StartingPriceConstraintViolated' | 'ActionHasBidsAlready' | 'NftIsNotIdle' | 'PendingOfferDoesNotExist' | 'RewardAccountIsNotSet' | 'ActorIsNotBidder' | 'AuctionCannotBeCompleted' | 'BidDoesNotExist' | 'BidIsForPastAuction' | 'StartsAtLowerBoundExceeded' | 'StartsAtUpperBoundExceeded' | 'AuctionDidNotStart' | 'NotInAuctionState' | 'MemberIsNotAllowedToParticipate' | 'MemberProfileNotFound' | 'NftNotInBuyNowState' | 'InvalidBuyNowWitnessPriceProvided' | 'IsNotOpenAuctionType' | 'IsNotEnglishAuctionType' | 'BidLockDurationIsNotExpired' | 'NftAuctionIsAlreadyExpired' | 'BuyNowMustBeGreaterThanStartingPrice' | 'TargetMemberDoesNotExist' | 'InvalidNftOfferWitnessPriceProvided' | 'MaxAuctionWhiteListLengthUpperBoundExceeded' | 'WhitelistHasOnlyOneMember' | 'WhitelistedMemberDoesNotExist' | 'NftNonChannelOwnerDoesNotExist' | 'ExtensionPeriodIsGreaterThenAuctionDuration' | 'NoAssetsSpecified' | 'InvalidAssetsProvided' | 'ChannelContainsVideos' | 'ChannelContainsAssets' | 'InvalidBagSizeSpecified' | 'MigrationNotFinished' | 'ReplyDoesNotExist' | 'UnsufficientBalance' | 'InsufficientTreasuryBalance' | 'InvalidMemberProvided' | 'ActorNotAMember' | 'PaymentProofVerificationFailed' | 'CashoutAmountExceedsMaximumAmount' | 'CashoutAmountBelowMinimumAmount' | 'WithdrawalAmountExceedsChannelAccountWithdrawableBalance' | 'WithdrawFromChannelAmountIsZero' | 'ChannelCashoutsDisabled' | 'MinCashoutAllowedExceedsMaxCashoutAllowed' | 'CuratorModerationActionNotAllowed' | 'MaxCuratorPermissionsPerLevelExceeded' | 'CuratorGroupMaxPermissionsByLevelMapSizeExceeded' | 'ChannelFeaturePaused' | 'ChannelBagMissing' | 'AssetsToRemoveBeyondEntityAssetsSet' | 'InvalidVideoDataObjectsCountProvided' | 'InvalidChannelTransferStatus' | 'InvalidChannelTransferAcceptor' | 'InvalidChannelTransferCommitmentParams' | 'ChannelAgentInsufficientPermissions' | 'InvalidChannelOwner' | 'ZeroReward' | 'InsufficientBalanceForTransfer' | 'InsufficientBalanceForChannelCreation' | 'InsufficientBalanceForVideoCreation' | 'InsufficientCouncilBudget' | 'GlobalNftDailyLimitExceeded' | 'GlobalNftWeeklyLimitExceeded' | 'ChannelNftDailyLimitExceeded' | 'ChannelNftWeeklyLimitExceeded' | 'CreatorTokenAlreadyIssued' | 'CreatorTokenNotIssued' | 'MemberIdCouldNotBeDerivedFromActor' | 'CannotWithdrawFromChannelWithCreatorTokenIssued' | 'PatronageCanOnlyBeClaimedForMemberOwnedChannels' | 'ChannelTransfersBlockedDuringRevenueSplits' | 'ChannelTransfersBlockedDuringTokenSales'; + readonly isChannelTransfersBlockedDuringActiveAmm: boolean; + readonly type: 'ChannelStateBloatBondChanged' | 'VideoStateBloatBondChanged' | 'MinCashoutValueTooLow' | 'MaxCashoutValueTooHigh' | 'MaxNumberOfChannelCollaboratorsExceeded' | 'MaxNumberOfChannelAssetsExceeded' | 'MaxNumberOfVideoAssetsExceeded' | 'MaxNumberOfChannelAgentPermissionsExceeded' | 'MaxNumberOfPausedFeaturesPerChannelExceeded' | 'InvalidChannelBagWitnessProvided' | 'InvalidStorageBucketsNumWitnessProvided' | 'MissingStorageBucketsNumWitness' | 'ChannelOwnerMemberDoesNotExist' | 'ChannelOwnerCuratorGroupDoesNotExist' | 'ChannelStateBloatBondBelowExistentialDeposit' | 'NumberOfAssetsToRemoveIsZero' | 'CuratorIsNotAMemberOfGivenCuratorGroup' | 'CuratorIsAlreadyAMemberOfGivenCuratorGroup' | 'CuratorGroupDoesNotExist' | 'CuratorsPerGroupLimitReached' | 'CuratorGroupIsNotActive' | 'CuratorIdInvalid' | 'LeadAuthFailed' | 'MemberAuthFailed' | 'CuratorAuthFailed' | 'BadOrigin' | 'ActorNotAuthorized' | 'CategoryDoesNotExist' | 'ChannelDoesNotExist' | 'VideoDoesNotExist' | 'VideoInSeason' | 'ActorCannotBeLead' | 'ActorCannotOwnChannel' | 'NftAlreadyOwnedByChannel' | 'NftAlreadyExists' | 'NftDoesNotExist' | 'OverflowOrUnderflowHappened' | 'DoesNotOwnNft' | 'RoyaltyUpperBoundExceeded' | 'RoyaltyLowerBoundExceeded' | 'AuctionDurationUpperBoundExceeded' | 'AuctionDurationLowerBoundExceeded' | 'ExtensionPeriodUpperBoundExceeded' | 'ExtensionPeriodLowerBoundExceeded' | 'BidLockDurationUpperBoundExceeded' | 'BidLockDurationLowerBoundExceeded' | 'StartingPriceUpperBoundExceeded' | 'StartingPriceLowerBoundExceeded' | 'AuctionBidStepUpperBoundExceeded' | 'AuctionBidStepLowerBoundExceeded' | 'InsufficientBalance' | 'BidStepConstraintViolated' | 'InvalidBidAmountSpecified' | 'StartingPriceConstraintViolated' | 'ActionHasBidsAlready' | 'NftIsNotIdle' | 'PendingOfferDoesNotExist' | 'RewardAccountIsNotSet' | 'ActorIsNotBidder' | 'AuctionCannotBeCompleted' | 'BidDoesNotExist' | 'BidIsForPastAuction' | 'StartsAtLowerBoundExceeded' | 'StartsAtUpperBoundExceeded' | 'AuctionDidNotStart' | 'NotInAuctionState' | 'MemberIsNotAllowedToParticipate' | 'MemberProfileNotFound' | 'NftNotInBuyNowState' | 'InvalidBuyNowWitnessPriceProvided' | 'IsNotOpenAuctionType' | 'IsNotEnglishAuctionType' | 'BidLockDurationIsNotExpired' | 'NftAuctionIsAlreadyExpired' | 'BuyNowMustBeGreaterThanStartingPrice' | 'TargetMemberDoesNotExist' | 'InvalidNftOfferWitnessPriceProvided' | 'MaxAuctionWhiteListLengthUpperBoundExceeded' | 'WhitelistHasOnlyOneMember' | 'WhitelistedMemberDoesNotExist' | 'NftNonChannelOwnerDoesNotExist' | 'ExtensionPeriodIsGreaterThenAuctionDuration' | 'NoAssetsSpecified' | 'InvalidAssetsProvided' | 'ChannelContainsVideos' | 'ChannelContainsAssets' | 'InvalidBagSizeSpecified' | 'MigrationNotFinished' | 'ReplyDoesNotExist' | 'UnsufficientBalance' | 'InsufficientTreasuryBalance' | 'InvalidMemberProvided' | 'ActorNotAMember' | 'PaymentProofVerificationFailed' | 'CashoutAmountExceedsMaximumAmount' | 'CashoutAmountBelowMinimumAmount' | 'WithdrawalAmountExceedsChannelAccountWithdrawableBalance' | 'WithdrawFromChannelAmountIsZero' | 'ChannelCashoutsDisabled' | 'MinCashoutAllowedExceedsMaxCashoutAllowed' | 'CuratorModerationActionNotAllowed' | 'MaxCuratorPermissionsPerLevelExceeded' | 'CuratorGroupMaxPermissionsByLevelMapSizeExceeded' | 'ChannelFeaturePaused' | 'ChannelBagMissing' | 'AssetsToRemoveBeyondEntityAssetsSet' | 'InvalidVideoDataObjectsCountProvided' | 'InvalidChannelTransferStatus' | 'InvalidChannelTransferAcceptor' | 'InvalidChannelTransferCommitmentParams' | 'ChannelAgentInsufficientPermissions' | 'InvalidChannelOwner' | 'ZeroReward' | 'InsufficientBalanceForTransfer' | 'InsufficientBalanceForChannelCreation' | 'InsufficientBalanceForVideoCreation' | 'InsufficientCouncilBudget' | 'GlobalNftDailyLimitExceeded' | 'GlobalNftWeeklyLimitExceeded' | 'ChannelNftDailyLimitExceeded' | 'ChannelNftWeeklyLimitExceeded' | 'CreatorTokenAlreadyIssued' | 'CreatorTokenNotIssued' | 'MemberIdCouldNotBeDerivedFromActor' | 'CannotWithdrawFromChannelWithCreatorTokenIssued' | 'PatronageCanOnlyBeClaimedForMemberOwnedChannels' | 'ChannelTransfersBlockedDuringRevenueSplits' | 'ChannelTransfersBlockedDuringTokenSales' | 'ChannelTransfersBlockedDuringActiveAmm'; } - /** @name PalletStorageBagRecord (573) */ - export interface PalletStorageBagRecord extends Struct { + /** @name PalletStorageBagRecord (570) */ + interface PalletStorageBagRecord extends Struct { readonly storedBy: BTreeSet; readonly distributedBy: BTreeSet; readonly objectsTotalSize: u64; readonly objectsNumber: u64; } - /** @name PalletStorageStorageBucketRecord (576) */ - export interface PalletStorageStorageBucketRecord extends Struct { + /** @name PalletStorageStorageBucketRecord (573) */ + interface PalletStorageStorageBucketRecord extends Struct { readonly operatorStatus: PalletStorageStorageBucketOperatorStatus; readonly acceptingNewBags: bool; readonly voucher: PalletStorageVoucher; readonly assignedBags: u64; } - /** @name PalletStorageStorageBucketOperatorStatus (577) */ - export interface PalletStorageStorageBucketOperatorStatus extends Enum { + /** @name PalletStorageStorageBucketOperatorStatus (574) */ + interface PalletStorageStorageBucketOperatorStatus extends Enum { readonly isMissing: boolean; readonly isInvitedStorageWorker: boolean; readonly asInvitedStorageWorker: u64; @@ -5145,27 +5229,27 @@ declare module '@polkadot/types/lookup' { readonly type: 'Missing' | 'InvitedStorageWorker' | 'StorageWorker'; } - /** @name PalletStorageDynamicBagCreationPolicy (579) */ - export interface PalletStorageDynamicBagCreationPolicy extends Struct { + /** @name PalletStorageDynamicBagCreationPolicy (576) */ + interface PalletStorageDynamicBagCreationPolicy extends Struct { readonly numberOfStorageBuckets: u32; readonly families: BTreeMap; } - /** @name PalletStorageDataObject (582) */ - export interface PalletStorageDataObject extends Struct { + /** @name PalletStorageDataObject (579) */ + interface PalletStorageDataObject extends Struct { readonly accepted: bool; readonly stateBloatBond: PalletCommonBloatBondRepayableBloatBond; readonly size_: u64; readonly ipfsContentId: Bytes; } - /** @name PalletStorageDistributionBucketFamilyRecord (583) */ - export interface PalletStorageDistributionBucketFamilyRecord extends Struct { + /** @name PalletStorageDistributionBucketFamilyRecord (580) */ + interface PalletStorageDistributionBucketFamilyRecord extends Struct { readonly nextDistributionBucketIndex: u64; } - /** @name PalletStorageDistributionBucketRecord (584) */ - export interface PalletStorageDistributionBucketRecord extends Struct { + /** @name PalletStorageDistributionBucketRecord (581) */ + interface PalletStorageDistributionBucketRecord extends Struct { readonly acceptingNewBags: bool; readonly distributing: bool; readonly pendingInvitations: BTreeSet; @@ -5173,8 +5257,8 @@ declare module '@polkadot/types/lookup' { readonly assignedBags: u64; } - /** @name PalletStorageError (587) */ - export interface PalletStorageError extends Enum { + /** @name PalletStorageError (584) */ + interface PalletStorageError extends Enum { readonly isArithmeticError: boolean; readonly isInvalidCidLength: boolean; readonly isNoObjectsOnUpload: boolean; @@ -5243,8 +5327,8 @@ declare module '@polkadot/types/lookup' { readonly type: 'ArithmeticError' | 'InvalidCidLength' | 'NoObjectsOnUpload' | 'StorageBucketDoesntExist' | 'StorageBucketIsNotBoundToBag' | 'StorageBucketIsBoundToBag' | 'NoStorageBucketInvitation' | 'StorageProviderAlreadySet' | 'StorageProviderMustBeSet' | 'DifferentStorageProviderInvited' | 'InvitedStorageProvider' | 'StorageBucketIdCollectionsAreEmpty' | 'StorageBucketsNumberViolatesDynamicBagCreationPolicy' | 'DistributionBucketsViolatesDynamicBagCreationPolicy' | 'EmptyContentId' | 'ZeroObjectSize' | 'InvalidStateBloatBondSourceAccount' | 'InvalidStorageProvider' | 'InsufficientBalance' | 'DataObjectDoesntExist' | 'UploadingBlocked' | 'DataObjectIdCollectionIsEmpty' | 'SourceAndDestinationBagsAreEqual' | 'DataObjectBlacklisted' | 'BlacklistSizeLimitExceeded' | 'VoucherMaxObjectSizeLimitExceeded' | 'VoucherMaxObjectNumberLimitExceeded' | 'StorageBucketObjectNumberLimitReached' | 'StorageBucketObjectSizeLimitReached' | 'InsufficientTreasuryBalance' | 'CannotDeleteNonEmptyStorageBucket' | 'DataObjectIdParamsAreEmpty' | 'StorageBucketsPerBagLimitTooLow' | 'StorageBucketsPerBagLimitTooHigh' | 'StorageBucketPerBagLimitExceeded' | 'StorageBucketDoesntAcceptNewBags' | 'DynamicBagExists' | 'DynamicBagDoesntExist' | 'StorageProviderOperatorDoesntExist' | 'DataSizeFeeChanged' | 'DataObjectStateBloatBondChanged' | 'CannotDeleteNonEmptyDynamicBag' | 'MaxDistributionBucketFamilyNumberLimitExceeded' | 'DistributionBucketFamilyDoesntExist' | 'DistributionBucketDoesntExist' | 'DistributionBucketIdCollectionsAreEmpty' | 'DistributionBucketDoesntAcceptNewBags' | 'MaxDistributionBucketNumberPerBagLimitExceeded' | 'DistributionBucketIsNotBoundToBag' | 'DistributionBucketIsBoundToBag' | 'DistributionBucketsPerBagLimitTooLow' | 'DistributionBucketsPerBagLimitTooHigh' | 'DistributionProviderOperatorDoesntExist' | 'DistributionProviderOperatorAlreadyInvited' | 'DistributionProviderOperatorSet' | 'NoDistributionBucketInvitation' | 'MustBeDistributionProviderOperatorForBucket' | 'MaxNumberOfPendingInvitationsLimitForDistributionBucketReached' | 'MaxNumberOfOperatorsPerDistributionBucketReached' | 'DistributionFamilyBoundToBagCreationPolicy' | 'MaxDataObjectSizeExceeded' | 'InvalidTransactorAccount' | 'NumberOfStorageBucketsOutsideOfAllowedContraints' | 'NumberOfDistributionBucketsOutsideOfAllowedContraints' | 'CallDisabled'; } - /** @name PalletProjectTokenAccountData (588) */ - export interface PalletProjectTokenAccountData extends Struct { + /** @name PalletProjectTokenAccountData (585) */ + interface PalletProjectTokenAccountData extends Struct { readonly vestingSchedules: BTreeMap; readonly amount: u128; readonly splitStakingStatus: Option; @@ -5253,14 +5337,14 @@ declare module '@polkadot/types/lookup' { readonly lastSaleTotalPurchasedAmount: Option>; } - /** @name PalletProjectTokenStakingStatus (589) */ - export interface PalletProjectTokenStakingStatus extends Struct { + /** @name PalletProjectTokenStakingStatus (586) */ + interface PalletProjectTokenStakingStatus extends Struct { readonly splitId: u32; readonly amount: u128; } - /** @name PalletProjectTokenVestingSchedule (591) */ - export interface PalletProjectTokenVestingSchedule extends Struct { + /** @name PalletProjectTokenVestingSchedule (588) */ + interface PalletProjectTokenVestingSchedule extends Struct { readonly linearVestingStartBlock: u32; readonly linearVestingDuration: u32; readonly cliffAmount: u128; @@ -5268,61 +5352,61 @@ declare module '@polkadot/types/lookup' { readonly burnedAmount: u128; } - /** @name PalletProjectTokenTokenData (598) */ - export interface PalletProjectTokenTokenData extends Struct { + /** @name PalletProjectTokenTokenData (595) */ + interface PalletProjectTokenTokenData extends Struct { readonly totalSupply: u128; readonly tokensIssued: u128; readonly nextSaleId: u32; readonly sale: Option; readonly transferPolicy: PalletProjectTokenTransferPolicy; - readonly symbol: H256; readonly patronageInfo: PalletProjectTokenPatronageData; readonly accountsNumber: u64; readonly revenueSplitRate: Permill; readonly revenueSplit: PalletProjectTokenRevenueSplitState; readonly nextRevenueSplitId: u32; + readonly ammCurve: Option; } - /** @name PalletProjectTokenRevenueSplitState (599) */ - export interface PalletProjectTokenRevenueSplitState extends Enum { + /** @name PalletProjectTokenRevenueSplitState (596) */ + interface PalletProjectTokenRevenueSplitState extends Enum { readonly isInactive: boolean; readonly isActive: boolean; readonly asActive: PalletProjectTokenRevenueSplitInfo; readonly type: 'Inactive' | 'Active'; } - /** @name PalletProjectTokenRevenueSplitInfo (600) */ - export interface PalletProjectTokenRevenueSplitInfo extends Struct { + /** @name PalletProjectTokenRevenueSplitInfo (597) */ + interface PalletProjectTokenRevenueSplitInfo extends Struct { readonly allocation: u128; readonly timeline: PalletProjectTokenTimeline; readonly dividendsClaimed: u128; } - /** @name PalletProjectTokenTimeline (601) */ - export interface PalletProjectTokenTimeline extends Struct { + /** @name PalletProjectTokenTimeline (598) */ + interface PalletProjectTokenTimeline extends Struct { readonly start: u32; readonly duration: u32; } - /** @name PalletProjectTokenPatronageData (603) */ - export interface PalletProjectTokenPatronageData extends Struct { - readonly rate: Perquintill; + /** @name PalletProjectTokenPatronageData (600) */ + interface PalletProjectTokenPatronageData extends Struct { + readonly rate: Permill; readonly unclaimedPatronageTallyAmount: u128; readonly lastUnclaimedPatronageTallyBlock: u32; } - /** @name PalletProjectTokenErrorsError (605) */ - export interface PalletProjectTokenErrorsError extends Enum { + /** @name PalletProjectTokenErrorsError (602) */ + interface PalletProjectTokenErrorsError extends Enum { readonly isArithmeticError: boolean; readonly isInsufficientTransferrableBalance: boolean; readonly isTokenDoesNotExist: boolean; readonly isAccountInformationDoesNotExist: boolean; readonly isTransferDestinationMemberDoesNotExist: boolean; readonly isMerkleProofVerificationFailure: boolean; - readonly isTargetPatronageRateIsHigherThanCurrentRate: boolean; readonly isTokenSymbolAlreadyInUse: boolean; readonly isInitialAllocationToNonExistingMember: boolean; readonly isAccountAlreadyExists: boolean; + readonly isTooManyTransferOutputs: boolean; readonly isTokenIssuanceNotInIdleState: boolean; readonly isInsufficientJoyBalance: boolean; readonly isJoyTransferSubjectToDusting: boolean; @@ -5347,6 +5431,7 @@ declare module '@polkadot/types/lookup' { readonly isSaleCapPerMemberIsZero: boolean; readonly isSaleUnitPriceIsZero: boolean; readonly isSalePurchaseAmountIsZero: boolean; + readonly isCannotInitSaleIfAmmIsActive: boolean; readonly isRevenueSplitTimeToStartTooShort: boolean; readonly isRevenueSplitDurationTooShort: boolean; readonly isRevenueSplitAlreadyActiveForToken: boolean; @@ -5362,11 +5447,22 @@ declare module '@polkadot/types/lookup' { readonly isRevenueSplitRateIsZero: boolean; readonly isBurnAmountIsZero: boolean; readonly isBurnAmountGreaterThanAccountTokensAmount: boolean; - readonly type: 'ArithmeticError' | 'InsufficientTransferrableBalance' | 'TokenDoesNotExist' | 'AccountInformationDoesNotExist' | 'TransferDestinationMemberDoesNotExist' | 'MerkleProofVerificationFailure' | 'TargetPatronageRateIsHigherThanCurrentRate' | 'TokenSymbolAlreadyInUse' | 'InitialAllocationToNonExistingMember' | 'AccountAlreadyExists' | 'TokenIssuanceNotInIdleState' | 'InsufficientJoyBalance' | 'JoyTransferSubjectToDusting' | 'AttemptToRemoveNonOwnedAccountUnderPermissionedMode' | 'AttemptToRemoveNonEmptyAccount' | 'CannotJoinWhitelistInPermissionlessMode' | 'CannotDeissueTokenWithOutstandingAccounts' | 'NoUpcomingSale' | 'NoActiveSale' | 'InsufficientBalanceForTokenPurchase' | 'NotEnoughTokensOnSale' | 'SaleStartingBlockInThePast' | 'SaleAccessProofRequired' | 'SaleAccessProofParticipantIsNotSender' | 'SalePurchaseCapExceeded' | 'MaxVestingSchedulesPerAccountPerTokenReached' | 'PreviousSaleNotFinalized' | 'NoTokensToRecover' | 'SaleDurationTooShort' | 'SaleDurationIsZero' | 'SaleUpperBoundQuantityIsZero' | 'SaleCapPerMemberIsZero' | 'SaleUnitPriceIsZero' | 'SalePurchaseAmountIsZero' | 'RevenueSplitTimeToStartTooShort' | 'RevenueSplitDurationTooShort' | 'RevenueSplitAlreadyActiveForToken' | 'RevenueSplitNotActiveForToken' | 'RevenueSplitDidNotEnd' | 'RevenueSplitNotOngoing' | 'UserAlreadyParticipating' | 'InsufficientBalanceForSplitParticipation' | 'UserNotParticipantingInAnySplit' | 'CannotParticipateInSplitWithZeroAmount' | 'CannotIssueSplitWithZeroAllocationAmount' | 'CannotModifySupplyWhenRevenueSplitsAreActive' | 'RevenueSplitRateIsZero' | 'BurnAmountIsZero' | 'BurnAmountGreaterThanAccountTokensAmount'; + readonly isNotInAmmState: boolean; + readonly isInvalidCurveParameters: boolean; + readonly isDeadlineExpired: boolean; + readonly isSlippageToleranceExceeded: boolean; + readonly isInsufficientTokenBalance: boolean; + readonly isOutstandingAmmProvidedSupplyTooLarge: boolean; + readonly isCurveSlopeParametersTooLow: boolean; + readonly isNotEnoughTokenMintedByAmmForThisSale: boolean; + readonly isTargetPatronageRateIsHigherThanCurrentRate: boolean; + readonly isYearlyPatronageRateLimitExceeded: boolean; + readonly isPalletFrozen: boolean; + readonly type: 'ArithmeticError' | 'InsufficientTransferrableBalance' | 'TokenDoesNotExist' | 'AccountInformationDoesNotExist' | 'TransferDestinationMemberDoesNotExist' | 'MerkleProofVerificationFailure' | 'TokenSymbolAlreadyInUse' | 'InitialAllocationToNonExistingMember' | 'AccountAlreadyExists' | 'TooManyTransferOutputs' | 'TokenIssuanceNotInIdleState' | 'InsufficientJoyBalance' | 'JoyTransferSubjectToDusting' | 'AttemptToRemoveNonOwnedAccountUnderPermissionedMode' | 'AttemptToRemoveNonEmptyAccount' | 'CannotJoinWhitelistInPermissionlessMode' | 'CannotDeissueTokenWithOutstandingAccounts' | 'NoUpcomingSale' | 'NoActiveSale' | 'InsufficientBalanceForTokenPurchase' | 'NotEnoughTokensOnSale' | 'SaleStartingBlockInThePast' | 'SaleAccessProofRequired' | 'SaleAccessProofParticipantIsNotSender' | 'SalePurchaseCapExceeded' | 'MaxVestingSchedulesPerAccountPerTokenReached' | 'PreviousSaleNotFinalized' | 'NoTokensToRecover' | 'SaleDurationTooShort' | 'SaleDurationIsZero' | 'SaleUpperBoundQuantityIsZero' | 'SaleCapPerMemberIsZero' | 'SaleUnitPriceIsZero' | 'SalePurchaseAmountIsZero' | 'CannotInitSaleIfAmmIsActive' | 'RevenueSplitTimeToStartTooShort' | 'RevenueSplitDurationTooShort' | 'RevenueSplitAlreadyActiveForToken' | 'RevenueSplitNotActiveForToken' | 'RevenueSplitDidNotEnd' | 'RevenueSplitNotOngoing' | 'UserAlreadyParticipating' | 'InsufficientBalanceForSplitParticipation' | 'UserNotParticipantingInAnySplit' | 'CannotParticipateInSplitWithZeroAmount' | 'CannotIssueSplitWithZeroAllocationAmount' | 'CannotModifySupplyWhenRevenueSplitsAreActive' | 'RevenueSplitRateIsZero' | 'BurnAmountIsZero' | 'BurnAmountGreaterThanAccountTokensAmount' | 'NotInAmmState' | 'InvalidCurveParameters' | 'DeadlineExpired' | 'SlippageToleranceExceeded' | 'InsufficientTokenBalance' | 'OutstandingAmmProvidedSupplyTooLarge' | 'CurveSlopeParametersTooLow' | 'NotEnoughTokenMintedByAmmForThisSale' | 'TargetPatronageRateIsHigherThanCurrentRate' | 'YearlyPatronageRateLimitExceeded' | 'PalletFrozen'; } - /** @name PalletProposalsEngineProposal (606) */ - export interface PalletProposalsEngineProposal extends Struct { + /** @name PalletProposalsEngineProposal (603) */ + interface PalletProposalsEngineProposal extends Struct { readonly parameters: PalletProposalsEngineProposalParameters; readonly proposerId: u64; readonly activatedAt: u32; @@ -5377,8 +5473,8 @@ declare module '@polkadot/types/lookup' { readonly stakingAccountId: Option; } - /** @name PalletProposalsEngineProposalParameters (607) */ - export interface PalletProposalsEngineProposalParameters extends Struct { + /** @name PalletProposalsEngineProposalParameters (604) */ + interface PalletProposalsEngineProposalParameters extends Struct { readonly votingPeriod: u32; readonly gracePeriod: u32; readonly approvalQuorumPercentage: u32; @@ -5389,16 +5485,16 @@ declare module '@polkadot/types/lookup' { readonly constitutionality: u32; } - /** @name PalletProposalsEngineVotingResults (608) */ - export interface PalletProposalsEngineVotingResults extends Struct { + /** @name PalletProposalsEngineVotingResults (605) */ + interface PalletProposalsEngineVotingResults extends Struct { readonly abstentions: u32; readonly approvals: u32; readonly rejections: u32; readonly slashes: u32; } - /** @name PalletProposalsEngineError (611) */ - export interface PalletProposalsEngineError extends Enum { + /** @name PalletProposalsEngineError (608) */ + interface PalletProposalsEngineError extends Enum { readonly isArithmeticError: boolean; readonly isEmptyTitleProvided: boolean; readonly isEmptyDescriptionProvided: boolean; @@ -5425,30 +5521,30 @@ declare module '@polkadot/types/lookup' { readonly type: 'ArithmeticError' | 'EmptyTitleProvided' | 'EmptyDescriptionProvided' | 'TitleIsTooLong' | 'DescriptionIsTooLong' | 'ProposalNotFound' | 'ProposalFinalized' | 'AlreadyVoted' | 'NotAuthor' | 'MaxActiveProposalNumberExceeded' | 'EmptyStake' | 'StakeShouldBeEmpty' | 'StakeDiffersFromRequired' | 'InvalidParameterApprovalThreshold' | 'InvalidParameterSlashingThreshold' | 'RequireRootOrigin' | 'ProposalHasVotes' | 'ZeroExactExecutionBlock' | 'InvalidExactExecutionBlock' | 'InsufficientBalanceForStake' | 'ConflictingStakes' | 'InvalidStakingAccountForMember' | 'MaxDispatchableCallCodeSizeExceeded'; } - /** @name PalletProposalsDiscussionDiscussionThread (612) */ - export interface PalletProposalsDiscussionDiscussionThread extends Struct { + /** @name PalletProposalsDiscussionDiscussionThread (609) */ + interface PalletProposalsDiscussionDiscussionThread extends Struct { readonly activatedAt: u32; readonly authorId: u64; readonly mode: PalletProposalsDiscussionThreadModeBoundedBTreeSet; } - /** @name PalletProposalsDiscussionThreadModeBoundedBTreeSet (614) */ - export interface PalletProposalsDiscussionThreadModeBoundedBTreeSet extends Enum { + /** @name PalletProposalsDiscussionThreadModeBoundedBTreeSet (611) */ + interface PalletProposalsDiscussionThreadModeBoundedBTreeSet extends Enum { readonly isOpen: boolean; readonly isClosed: boolean; readonly asClosed: BTreeSet; readonly type: 'Open' | 'Closed'; } - /** @name PalletProposalsDiscussionDiscussionPost (615) */ - export interface PalletProposalsDiscussionDiscussionPost extends Struct { + /** @name PalletProposalsDiscussionDiscussionPost (612) */ + interface PalletProposalsDiscussionDiscussionPost extends Struct { readonly authorId: u64; readonly cleanupPayOff: PalletCommonBloatBondRepayableBloatBond; readonly lastEdited: u32; } - /** @name PalletProposalsDiscussionError (616) */ - export interface PalletProposalsDiscussionError extends Enum { + /** @name PalletProposalsDiscussionError (613) */ + interface PalletProposalsDiscussionError extends Enum { readonly isArithmeticError: boolean; readonly isThreadDoesntExist: boolean; readonly isPostDoesntExist: boolean; @@ -5462,8 +5558,8 @@ declare module '@polkadot/types/lookup' { readonly type: 'ArithmeticError' | 'ThreadDoesntExist' | 'PostDoesntExist' | 'RequireRootOrigin' | 'CannotPostOnClosedThread' | 'NotAuthorOrCouncilor' | 'MaxWhiteListSizeExceeded' | 'WhitelistedMemberDoesNotExist' | 'InsufficientBalanceForPost' | 'CannotDeletePost'; } - /** @name PalletProposalsCodexError (617) */ - export interface PalletProposalsCodexError extends Enum { + /** @name PalletProposalsCodexError (614) */ + interface PalletProposalsCodexError extends Enum { readonly isSignalProposalIsEmpty: boolean; readonly isRuntimeProposalIsEmpty: boolean; readonly isInvalidFundingRequestProposalBalance: boolean; @@ -5493,8 +5589,8 @@ declare module '@polkadot/types/lookup' { readonly type: 'SignalProposalIsEmpty' | 'RuntimeProposalIsEmpty' | 'InvalidFundingRequestProposalBalance' | 'InvalidValidatorCount' | 'RequireRootOrigin' | 'InvalidCouncilElectionParameterCouncilSize' | 'InvalidCouncilElectionParameterCandidacyLimit' | 'InvalidCouncilElectionParameterMinVotingStake' | 'InvalidCouncilElectionParameterNewTermDuration' | 'InvalidCouncilElectionParameterMinCouncilStake' | 'InvalidCouncilElectionParameterRevealingPeriod' | 'InvalidCouncilElectionParameterVotingPeriod' | 'InvalidCouncilElectionParameterAnnouncingPeriod' | 'InvalidWorkingGroupBudgetCapacity' | 'InvalidSetLeadParameterCannotBeCouncilor' | 'SlashingStakeIsZero' | 'DecreasingStakeIsZero' | 'InsufficientFundsForBudgetUpdate' | 'InvalidFundingRequestProposalNumberOfAccount' | 'InvalidFundingRequestProposalRepeatedAccount' | 'InvalidChannelPayoutsProposalMinCashoutExceedsMaxCashout' | 'InvalidLeadWorkerId' | 'InvalidLeadOpeningId' | 'InvalidLeadApplicationId' | 'InvalidProposalId' | 'ArithmeticError'; } - /** @name PalletWorkingGroupOpening (618) */ - export interface PalletWorkingGroupOpening extends Struct { + /** @name PalletWorkingGroupOpening (615) */ + interface PalletWorkingGroupOpening extends Struct { readonly openingType: PalletWorkingGroupOpeningType; readonly created: u32; readonly descriptionHash: H256; @@ -5503,8 +5599,8 @@ declare module '@polkadot/types/lookup' { readonly creationStake: u128; } - /** @name PalletWorkingGroupJobApplication (619) */ - export interface PalletWorkingGroupJobApplication extends Struct { + /** @name PalletWorkingGroupJobApplication (616) */ + interface PalletWorkingGroupJobApplication extends Struct { readonly roleAccountId: AccountId32; readonly rewardAccountId: AccountId32; readonly stakingAccountId: AccountId32; @@ -5513,8 +5609,8 @@ declare module '@polkadot/types/lookup' { readonly openingId: u64; } - /** @name PalletWorkingGroupGroupWorker (620) */ - export interface PalletWorkingGroupGroupWorker extends Struct { + /** @name PalletWorkingGroupGroupWorker (617) */ + interface PalletWorkingGroupGroupWorker extends Struct { readonly memberId: u64; readonly roleAccountId: AccountId32; readonly stakingAccountId: AccountId32; @@ -5526,8 +5622,8 @@ declare module '@polkadot/types/lookup' { readonly createdAt: u32; } - /** @name PalletWorkingGroupErrorsError (621) */ - export interface PalletWorkingGroupErrorsError extends Enum { + /** @name PalletWorkingGroupErrorsError (618) */ + interface PalletWorkingGroupErrorsError extends Enum { readonly isArithmeticError: boolean; readonly isStakeBalanceCannotBeZero: boolean; readonly isOpeningDoesNotExist: boolean; @@ -5563,8 +5659,8 @@ declare module '@polkadot/types/lookup' { readonly type: 'ArithmeticError' | 'StakeBalanceCannotBeZero' | 'OpeningDoesNotExist' | 'CannotHireMultipleLeaders' | 'WorkerApplicationDoesNotExist' | 'MaxActiveWorkerNumberExceeded' | 'SuccessfulWorkerApplicationDoesNotExist' | 'CannotHireLeaderWhenLeaderExists' | 'IsNotLeadAccount' | 'CurrentLeadNotSet' | 'WorkerDoesNotExist' | 'InvalidMemberOrigin' | 'SignerIsNotWorkerRoleAccount' | 'BelowMinimumStakes' | 'InsufficientBalanceToCoverStake' | 'ApplicationStakeDoesntMatchOpening' | 'OriginIsNotApplicant' | 'WorkerIsLeaving' | 'CannotRewardWithZero' | 'InvalidStakingAccountForMember' | 'ConflictStakesOnAccount' | 'WorkerHasNoReward' | 'UnstakingPeriodLessThanMinimum' | 'CannotSpendZero' | 'InsufficientBudgetForSpending' | 'NoApplicationsProvided' | 'CannotDecreaseStakeDeltaGreaterThanStake' | 'ApplicationsNotForOpening' | 'WorkerStorageValueTooLong' | 'InsufficientTokensForFunding' | 'ZeroTokensFunding' | 'InsufficientBalanceForTransfer'; } - /** @name SpRuntimeMultiSignature (631) */ - export interface SpRuntimeMultiSignature extends Enum { + /** @name SpRuntimeMultiSignature (628) */ + interface SpRuntimeMultiSignature extends Enum { readonly isEd25519: boolean; readonly asEd25519: SpCoreEd25519Signature; readonly isSr25519: boolean; @@ -5574,31 +5670,31 @@ declare module '@polkadot/types/lookup' { readonly type: 'Ed25519' | 'Sr25519' | 'Ecdsa'; } - /** @name SpCoreEcdsaSignature (632) */ - export interface SpCoreEcdsaSignature extends U8aFixed {} + /** @name SpCoreEcdsaSignature (629) */ + interface SpCoreEcdsaSignature extends U8aFixed {} - /** @name FrameSystemExtensionsCheckNonZeroSender (635) */ - export type FrameSystemExtensionsCheckNonZeroSender = Null; + /** @name FrameSystemExtensionsCheckNonZeroSender (632) */ + type FrameSystemExtensionsCheckNonZeroSender = Null; - /** @name FrameSystemExtensionsCheckSpecVersion (636) */ - export type FrameSystemExtensionsCheckSpecVersion = Null; + /** @name FrameSystemExtensionsCheckSpecVersion (633) */ + type FrameSystemExtensionsCheckSpecVersion = Null; - /** @name FrameSystemExtensionsCheckTxVersion (637) */ - export type FrameSystemExtensionsCheckTxVersion = Null; + /** @name FrameSystemExtensionsCheckTxVersion (634) */ + type FrameSystemExtensionsCheckTxVersion = Null; - /** @name FrameSystemExtensionsCheckGenesis (638) */ - export type FrameSystemExtensionsCheckGenesis = Null; + /** @name FrameSystemExtensionsCheckGenesis (635) */ + type FrameSystemExtensionsCheckGenesis = Null; - /** @name FrameSystemExtensionsCheckNonce (641) */ - export interface FrameSystemExtensionsCheckNonce extends Compact {} + /** @name FrameSystemExtensionsCheckNonce (638) */ + interface FrameSystemExtensionsCheckNonce extends Compact {} - /** @name FrameSystemExtensionsCheckWeight (642) */ - export type FrameSystemExtensionsCheckWeight = Null; + /** @name FrameSystemExtensionsCheckWeight (639) */ + type FrameSystemExtensionsCheckWeight = Null; - /** @name PalletTransactionPaymentChargeTransactionPayment (643) */ - export interface PalletTransactionPaymentChargeTransactionPayment extends Compact {} + /** @name PalletTransactionPaymentChargeTransactionPayment (640) */ + interface PalletTransactionPaymentChargeTransactionPayment extends Compact {} - /** @name JoystreamNodeRuntimeRuntime (644) */ - export type JoystreamNodeRuntimeRuntime = Null; + /** @name JoystreamNodeRuntimeRuntime (641) */ + type JoystreamNodeRuntimeRuntime = Null; } // declare module diff --git a/types/src/index.ts b/types/src/index.ts index fcd62abb55..da1ae1dc65 100644 --- a/types/src/index.ts +++ b/types/src/index.ts @@ -1,6 +1,7 @@ import './augment/types-lookup' import './augment/registry' import './augment/augment-api' +import './augment/augment-types' import { AnyU8a, Codec, DetectCodec, ITuple, Observable } from '@polkadot/types/types' import { diff --git a/types/tsconfig.json b/types/tsconfig.json index d683ee591e..403ced3dce 100644 --- a/types/tsconfig.json +++ b/types/tsconfig.json @@ -14,7 +14,8 @@ "skipLibCheck": true, "types": ["node"], "forceConsistentCasingInFileNames": true, - "baseUrl": "." + "baseUrl": ".", + "ignoreDeprecations": "5.0" }, "include": ["src/**/*.ts"], "exclude": ["node_modules", "**/*.spec.ts", "**/*.d.ts"] diff --git a/utils/api-scripts/README.md b/utils/api-scripts/README.md index 4b190873d6..27e4a7cbcb 100644 --- a/utils/api-scripts/README.md +++ b/utils/api-scripts/README.md @@ -1,6 +1,6 @@ # Joystream API Examples -Repo with examples on how to use the @joystream/types package along with @polkadot/api to communicate with a joystream full node. +Examples on how to use the @joystream/types package along with @polkadot/api to communicate with a joystream full node. Some useful utilily commands are also included under `src/` @@ -9,7 +9,7 @@ Some useful utilily commands are also included under `src/` You can run typescript commands under the `src/` folder simply with: ```sh -yarn ts-node src/sudo-init-content-lead.ts +yarn ts-node src/buy-membership.ts ``` ## Adding code to src/ diff --git a/utils/api-scripts/dev-init-storage.sh b/utils/api-scripts/dev-init-storage.sh index 883266c839..b5b169b589 100755 --- a/utils/api-scripts/dev-init-storage.sh +++ b/utils/api-scripts/dev-init-storage.sh @@ -8,5 +8,4 @@ export GROUP="storageWorkingGroup" export WORKER_ROLE_URI="//Colossus" export INITIAL_WORKER_BALANCE_TOP_UP="10000" -yarn initialize-lead yarn initialize-worker diff --git a/utils/api-scripts/meta.json b/utils/api-scripts/meta.json deleted file mode 100644 index e50c18416c..0000000000 --- a/utils/api-scripts/meta.json +++ /dev/null @@ -1,60469 +0,0 @@ -yarn run v1.22.15 -$ /home/leszek/projects/joystream/joystream-ws-3/node_modules/.bin/ts-node ./src/get-chain-metadata.ts -Initializing the api (ws://127.0.0.1:9944)... -{ - "magicNumber": 1635018093, - "metadata": { - "v14": { - "lookup": { - "types": [ - { - "id": 0, - "type": { - "path": [ - "sp_core", - "crypto", - "AccountId32" - ], - "params": [], - "def": { - "composite": { - "fields": [ - { - "name": null, - "type": 1, - "typeName": "[u8; 32]", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 1, - "type": { - "path": [], - "params": [], - "def": { - "array": { - "len": 32, - "type": 2 - } - }, - "docs": [] - } - }, - { - "id": 2, - "type": { - "path": [], - "params": [], - "def": { - "primitive": "U8" - }, - "docs": [] - } - }, - { - "id": 3, - "type": { - "path": [ - "frame_system", - "AccountInfo" - ], - "params": [ - { - "name": "Index", - "type": 4 - }, - { - "name": "AccountData", - "type": 5 - } - ], - "def": { - "composite": { - "fields": [ - { - "name": "nonce", - "type": 4, - "typeName": "Index", - "docs": [] - }, - { - "name": "consumers", - "type": 4, - "typeName": "RefCount", - "docs": [] - }, - { - "name": "providers", - "type": 4, - "typeName": "RefCount", - "docs": [] - }, - { - "name": "sufficients", - "type": 4, - "typeName": "RefCount", - "docs": [] - }, - { - "name": "data", - "type": 5, - "typeName": "AccountData", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 4, - "type": { - "path": [], - "params": [], - "def": { - "primitive": "U32" - }, - "docs": [] - } - }, - { - "id": 5, - "type": { - "path": [ - "pallet_balances", - "AccountData" - ], - "params": [ - { - "name": "Balance", - "type": 6 - } - ], - "def": { - "composite": { - "fields": [ - { - "name": "free", - "type": 6, - "typeName": "Balance", - "docs": [] - }, - { - "name": "reserved", - "type": 6, - "typeName": "Balance", - "docs": [] - }, - { - "name": "misc_frozen", - "type": 6, - "typeName": "Balance", - "docs": [] - }, - { - "name": "fee_frozen", - "type": 6, - "typeName": "Balance", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 6, - "type": { - "path": [], - "params": [], - "def": { - "primitive": "U128" - }, - "docs": [] - } - }, - { - "id": 7, - "type": { - "path": [ - "frame_support", - "weights", - "PerDispatchClass" - ], - "params": [ - { - "name": "T", - "type": 8 - } - ], - "def": { - "composite": { - "fields": [ - { - "name": "normal", - "type": 8, - "typeName": "T", - "docs": [] - }, - { - "name": "operational", - "type": 8, - "typeName": "T", - "docs": [] - }, - { - "name": "mandatory", - "type": 8, - "typeName": "T", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 8, - "type": { - "path": [], - "params": [], - "def": { - "primitive": "U64" - }, - "docs": [] - } - }, - { - "id": 9, - "type": { - "path": [ - "primitive_types", - "H256" - ], - "params": [], - "def": { - "composite": { - "fields": [ - { - "name": null, - "type": 1, - "typeName": "[u8; /*«*/ 32 /*»*/]", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 10, - "type": { - "path": [], - "params": [], - "def": { - "sequence": { - "type": 2 - } - }, - "docs": [] - } - }, - { - "id": 11, - "type": { - "path": [ - "sp_runtime", - "generic", - "digest", - "Digest" - ], - "params": [], - "def": { - "composite": { - "fields": [ - { - "name": "logs", - "type": 12, - "typeName": "Vec", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 12, - "type": { - "path": [], - "params": [], - "def": { - "sequence": { - "type": 13 - } - }, - "docs": [] - } - }, - { - "id": 13, - "type": { - "path": [ - "sp_runtime", - "generic", - "digest", - "DigestItem" - ], - "params": [], - "def": { - "variant": { - "variants": [ - { - "name": "PreRuntime", - "fields": [ - { - "name": null, - "type": 14, - "typeName": "ConsensusEngineId", - "docs": [] - }, - { - "name": null, - "type": 10, - "typeName": "Vec", - "docs": [] - } - ], - "index": 6, - "docs": [] - }, - { - "name": "Consensus", - "fields": [ - { - "name": null, - "type": 14, - "typeName": "ConsensusEngineId", - "docs": [] - }, - { - "name": null, - "type": 10, - "typeName": "Vec", - "docs": [] - } - ], - "index": 4, - "docs": [] - }, - { - "name": "Seal", - "fields": [ - { - "name": null, - "type": 14, - "typeName": "ConsensusEngineId", - "docs": [] - }, - { - "name": null, - "type": 10, - "typeName": "Vec", - "docs": [] - } - ], - "index": 5, - "docs": [] - }, - { - "name": "Other", - "fields": [ - { - "name": null, - "type": 10, - "typeName": "Vec", - "docs": [] - } - ], - "index": 0, - "docs": [] - }, - { - "name": "RuntimeEnvironmentUpdated", - "fields": [], - "index": 8, - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 14, - "type": { - "path": [], - "params": [], - "def": { - "array": { - "len": 4, - "type": 2 - } - }, - "docs": [] - } - }, - { - "id": 15, - "type": { - "path": [], - "params": [], - "def": { - "sequence": { - "type": 16 - } - }, - "docs": [] - } - }, - { - "id": 16, - "type": { - "path": [ - "frame_system", - "EventRecord" - ], - "params": [ - { - "name": "E", - "type": 17 - }, - { - "name": "T", - "type": 9 - } - ], - "def": { - "composite": { - "fields": [ - { - "name": "phase", - "type": 216, - "typeName": "Phase", - "docs": [] - }, - { - "name": "event", - "type": 17, - "typeName": "E", - "docs": [] - }, - { - "name": "topics", - "type": 217, - "typeName": "Vec", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 17, - "type": { - "path": [ - "joystream_node_runtime", - "Event" - ], - "params": [], - "def": { - "variant": { - "variants": [ - { - "name": "System", - "fields": [ - { - "name": null, - "type": 18, - "typeName": "frame_system::Event", - "docs": [] - } - ], - "index": 0, - "docs": [] - }, - { - "name": "Utility", - "fields": [ - { - "name": null, - "type": 27, - "typeName": "substrate_utility::Event", - "docs": [] - } - ], - "index": 1, - "docs": [] - }, - { - "name": "Balances", - "fields": [ - { - "name": null, - "type": 30, - "typeName": "pallet_balances::Event", - "docs": [] - } - ], - "index": 5, - "docs": [] - }, - { - "name": "ElectionProviderMultiPhase", - "fields": [ - { - "name": null, - "type": 32, - "typeName": "pallet_election_provider_multi_phase::Event", - "docs": [] - } - ], - "index": 7, - "docs": [] - }, - { - "name": "Staking", - "fields": [ - { - "name": null, - "type": 36, - "typeName": "pallet_staking::Event", - "docs": [] - } - ], - "index": 8, - "docs": [] - }, - { - "name": "Session", - "fields": [ - { - "name": null, - "type": 40, - "typeName": "pallet_session::Event", - "docs": [] - } - ], - "index": 9, - "docs": [] - }, - { - "name": "Grandpa", - "fields": [ - { - "name": null, - "type": 41, - "typeName": "pallet_grandpa::Event", - "docs": [] - } - ], - "index": 11, - "docs": [] - }, - { - "name": "ImOnline", - "fields": [ - { - "name": null, - "type": 46, - "typeName": "pallet_im_online::Event", - "docs": [] - } - ], - "index": 13, - "docs": [] - }, - { - "name": "Offences", - "fields": [ - { - "name": null, - "type": 55, - "typeName": "pallet_offences::Event", - "docs": [] - } - ], - "index": 14, - "docs": [] - }, - { - "name": "Sudo", - "fields": [ - { - "name": null, - "type": 57, - "typeName": "pallet_sudo::Event", - "docs": [] - } - ], - "index": 16, - "docs": [] - }, - { - "name": "BagsList", - "fields": [ - { - "name": null, - "type": 59, - "typeName": "pallet_bags_list::Event", - "docs": [] - } - ], - "index": 17, - "docs": [] - }, - { - "name": "Vesting", - "fields": [ - { - "name": null, - "type": 60, - "typeName": "pallet_vesting::Event", - "docs": [] - } - ], - "index": 18, - "docs": [] - }, - { - "name": "Council", - "fields": [ - { - "name": null, - "type": 61, - "typeName": "council::Event", - "docs": [] - } - ], - "index": 19, - "docs": [] - }, - { - "name": "Referendum", - "fields": [ - { - "name": null, - "type": 63, - "typeName": "referendum::Event", - "docs": [] - } - ], - "index": 20, - "docs": [] - }, - { - "name": "Members", - "fields": [ - { - "name": null, - "type": 67, - "typeName": "membership::Event", - "docs": [] - } - ], - "index": 21, - "docs": [] - }, - { - "name": "Forum", - "fields": [ - { - "name": null, - "type": 72, - "typeName": "forum::Event", - "docs": [] - } - ], - "index": 22, - "docs": [] - }, - { - "name": "Constitution", - "fields": [ - { - "name": null, - "type": 81, - "typeName": "pallet_constitution::Event", - "docs": [] - } - ], - "index": 23, - "docs": [] - }, - { - "name": "JoystreamUtility", - "fields": [ - { - "name": null, - "type": 82, - "typeName": "joystream_utility::Event", - "docs": [] - } - ], - "index": 24, - "docs": [] - }, - { - "name": "Content", - "fields": [ - { - "name": null, - "type": 85, - "typeName": "content::Event", - "docs": [] - } - ], - "index": 25, - "docs": [] - }, - { - "name": "Storage", - "fields": [ - { - "name": null, - "type": 137, - "typeName": "storage::Event", - "docs": [] - } - ], - "index": 26, - "docs": [] - }, - { - "name": "ProjectToken", - "fields": [ - { - "name": null, - "type": 148, - "typeName": "project_token::Event", - "docs": [] - } - ], - "index": 27, - "docs": [] - }, - { - "name": "ProposalsEngine", - "fields": [ - { - "name": null, - "type": 174, - "typeName": "proposals_engine::Event", - "docs": [] - } - ], - "index": 28, - "docs": [] - }, - { - "name": "ProposalsDiscussion", - "fields": [ - { - "name": null, - "type": 180, - "typeName": "proposals_discussion::Event", - "docs": [] - } - ], - "index": 29, - "docs": [] - }, - { - "name": "ProposalsCodex", - "fields": [ - { - "name": null, - "type": 182, - "typeName": "proposals_codex::Event", - "docs": [] - } - ], - "index": 30, - "docs": [] - }, - { - "name": "ForumWorkingGroup", - "fields": [ - { - "name": null, - "type": 191, - "typeName": "working_group::Event", - "docs": [] - } - ], - "index": 31, - "docs": [] - }, - { - "name": "StorageWorkingGroup", - "fields": [ - { - "name": null, - "type": 200, - "typeName": "working_group::Event", - "docs": [] - } - ], - "index": 32, - "docs": [] - }, - { - "name": "ContentWorkingGroup", - "fields": [ - { - "name": null, - "type": 202, - "typeName": "working_group::Event", - "docs": [] - } - ], - "index": 33, - "docs": [] - }, - { - "name": "OperationsWorkingGroupAlpha", - "fields": [ - { - "name": null, - "type": 204, - "typeName": "working_group::Event", - "docs": [] - } - ], - "index": 34, - "docs": [] - }, - { - "name": "AppWorkingGroup", - "fields": [ - { - "name": null, - "type": 206, - "typeName": "working_group::Event", - "docs": [] - } - ], - "index": 35, - "docs": [] - }, - { - "name": "MembershipWorkingGroup", - "fields": [ - { - "name": null, - "type": 208, - "typeName": "working_group::Event", - "docs": [] - } - ], - "index": 36, - "docs": [] - }, - { - "name": "OperationsWorkingGroupBeta", - "fields": [ - { - "name": null, - "type": 210, - "typeName": "working_group::Event", - "docs": [] - } - ], - "index": 37, - "docs": [] - }, - { - "name": "OperationsWorkingGroupGamma", - "fields": [ - { - "name": null, - "type": 212, - "typeName": "working_group::Event", - "docs": [] - } - ], - "index": 38, - "docs": [] - }, - { - "name": "DistributionWorkingGroup", - "fields": [ - { - "name": null, - "type": 214, - "typeName": "working_group::Event", - "docs": [] - } - ], - "index": 39, - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 18, - "type": { - "path": [ - "frame_system", - "pallet", - "Event" - ], - "params": [ - { - "name": "T", - "type": null - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "ExtrinsicSuccess", - "fields": [ - { - "name": "dispatch_info", - "type": 19, - "typeName": "DispatchInfo", - "docs": [] - } - ], - "index": 0, - "docs": [ - "An extrinsic completed successfully." - ] - }, - { - "name": "ExtrinsicFailed", - "fields": [ - { - "name": "dispatch_error", - "type": 22, - "typeName": "DispatchError", - "docs": [] - }, - { - "name": "dispatch_info", - "type": 19, - "typeName": "DispatchInfo", - "docs": [] - } - ], - "index": 1, - "docs": [ - "An extrinsic failed." - ] - }, - { - "name": "CodeUpdated", - "fields": [], - "index": 2, - "docs": [ - "`:code` was updated." - ] - }, - { - "name": "NewAccount", - "fields": [ - { - "name": "account", - "type": 0, - "typeName": "T::AccountId", - "docs": [] - } - ], - "index": 3, - "docs": [ - "A new account was created." - ] - }, - { - "name": "KilledAccount", - "fields": [ - { - "name": "account", - "type": 0, - "typeName": "T::AccountId", - "docs": [] - } - ], - "index": 4, - "docs": [ - "An account was reaped." - ] - }, - { - "name": "Remarked", - "fields": [ - { - "name": "sender", - "type": 0, - "typeName": "T::AccountId", - "docs": [] - }, - { - "name": "hash", - "type": 9, - "typeName": "T::Hash", - "docs": [] - } - ], - "index": 5, - "docs": [ - "On on-chain remark happened." - ] - } - ] - } - }, - "docs": [ - "Event for the System pallet." - ] - } - }, - { - "id": 19, - "type": { - "path": [ - "frame_support", - "weights", - "DispatchInfo" - ], - "params": [], - "def": { - "composite": { - "fields": [ - { - "name": "weight", - "type": 8, - "typeName": "Weight", - "docs": [] - }, - { - "name": "class", - "type": 20, - "typeName": "DispatchClass", - "docs": [] - }, - { - "name": "pays_fee", - "type": 21, - "typeName": "Pays", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 20, - "type": { - "path": [ - "frame_support", - "weights", - "DispatchClass" - ], - "params": [], - "def": { - "variant": { - "variants": [ - { - "name": "Normal", - "fields": [], - "index": 0, - "docs": [] - }, - { - "name": "Operational", - "fields": [], - "index": 1, - "docs": [] - }, - { - "name": "Mandatory", - "fields": [], - "index": 2, - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 21, - "type": { - "path": [ - "frame_support", - "weights", - "Pays" - ], - "params": [], - "def": { - "variant": { - "variants": [ - { - "name": "Yes", - "fields": [], - "index": 0, - "docs": [] - }, - { - "name": "No", - "fields": [], - "index": 1, - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 22, - "type": { - "path": [ - "sp_runtime", - "DispatchError" - ], - "params": [], - "def": { - "variant": { - "variants": [ - { - "name": "Other", - "fields": [], - "index": 0, - "docs": [] - }, - { - "name": "CannotLookup", - "fields": [], - "index": 1, - "docs": [] - }, - { - "name": "BadOrigin", - "fields": [], - "index": 2, - "docs": [] - }, - { - "name": "Module", - "fields": [ - { - "name": null, - "type": 23, - "typeName": "ModuleError", - "docs": [] - } - ], - "index": 3, - "docs": [] - }, - { - "name": "ConsumerRemaining", - "fields": [], - "index": 4, - "docs": [] - }, - { - "name": "NoProviders", - "fields": [], - "index": 5, - "docs": [] - }, - { - "name": "TooManyConsumers", - "fields": [], - "index": 6, - "docs": [] - }, - { - "name": "Token", - "fields": [ - { - "name": null, - "type": 24, - "typeName": "TokenError", - "docs": [] - } - ], - "index": 7, - "docs": [] - }, - { - "name": "Arithmetic", - "fields": [ - { - "name": null, - "type": 25, - "typeName": "ArithmeticError", - "docs": [] - } - ], - "index": 8, - "docs": [] - }, - { - "name": "Transactional", - "fields": [ - { - "name": null, - "type": 26, - "typeName": "TransactionalError", - "docs": [] - } - ], - "index": 9, - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 23, - "type": { - "path": [ - "sp_runtime", - "ModuleError" - ], - "params": [], - "def": { - "composite": { - "fields": [ - { - "name": "index", - "type": 2, - "typeName": "u8", - "docs": [] - }, - { - "name": "error", - "type": 14, - "typeName": "[u8; MAX_MODULE_ERROR_ENCODED_SIZE]", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 24, - "type": { - "path": [ - "sp_runtime", - "TokenError" - ], - "params": [], - "def": { - "variant": { - "variants": [ - { - "name": "NoFunds", - "fields": [], - "index": 0, - "docs": [] - }, - { - "name": "WouldDie", - "fields": [], - "index": 1, - "docs": [] - }, - { - "name": "BelowMinimum", - "fields": [], - "index": 2, - "docs": [] - }, - { - "name": "CannotCreate", - "fields": [], - "index": 3, - "docs": [] - }, - { - "name": "UnknownAsset", - "fields": [], - "index": 4, - "docs": [] - }, - { - "name": "Frozen", - "fields": [], - "index": 5, - "docs": [] - }, - { - "name": "Unsupported", - "fields": [], - "index": 6, - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 25, - "type": { - "path": [ - "sp_runtime", - "ArithmeticError" - ], - "params": [], - "def": { - "variant": { - "variants": [ - { - "name": "Underflow", - "fields": [], - "index": 0, - "docs": [] - }, - { - "name": "Overflow", - "fields": [], - "index": 1, - "docs": [] - }, - { - "name": "DivisionByZero", - "fields": [], - "index": 2, - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 26, - "type": { - "path": [ - "sp_runtime", - "TransactionalError" - ], - "params": [], - "def": { - "variant": { - "variants": [ - { - "name": "LimitReached", - "fields": [], - "index": 0, - "docs": [] - }, - { - "name": "NoLayer", - "fields": [], - "index": 1, - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 27, - "type": { - "path": [ - "pallet_utility", - "pallet", - "Event" - ], - "params": [], - "def": { - "variant": { - "variants": [ - { - "name": "BatchInterrupted", - "fields": [ - { - "name": "index", - "type": 4, - "typeName": "u32", - "docs": [] - }, - { - "name": "error", - "type": 22, - "typeName": "DispatchError", - "docs": [] - } - ], - "index": 0, - "docs": [ - "Batch of dispatches did not complete fully. Index of first failing dispatch given, as", - "well as the error." - ] - }, - { - "name": "BatchCompleted", - "fields": [], - "index": 1, - "docs": [ - "Batch of dispatches completed fully with no error." - ] - }, - { - "name": "BatchCompletedWithErrors", - "fields": [], - "index": 2, - "docs": [ - "Batch of dispatches completed but has errors." - ] - }, - { - "name": "ItemCompleted", - "fields": [], - "index": 3, - "docs": [ - "A single item within a Batch of dispatches has completed with no error." - ] - }, - { - "name": "ItemFailed", - "fields": [ - { - "name": "error", - "type": 22, - "typeName": "DispatchError", - "docs": [] - } - ], - "index": 4, - "docs": [ - "A single item within a Batch of dispatches has completed with error." - ] - }, - { - "name": "DispatchedAs", - "fields": [ - { - "name": "result", - "type": 28, - "typeName": "DispatchResult", - "docs": [] - } - ], - "index": 5, - "docs": [ - "A call was dispatched." - ] - } - ] - } - }, - "docs": [ - "\n\t\t\tThe [event](https://docs.substrate.io/v3/runtime/events-and-errors) emitted\n\t\t\tby this pallet.\n\t\t\t" - ] - } - }, - { - "id": 28, - "type": { - "path": [ - "Result" - ], - "params": [ - { - "name": "T", - "type": 29 - }, - { - "name": "E", - "type": 22 - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "Ok", - "fields": [ - { - "name": null, - "type": 29, - "typeName": null, - "docs": [] - } - ], - "index": 0, - "docs": [] - }, - { - "name": "Err", - "fields": [ - { - "name": null, - "type": 22, - "typeName": null, - "docs": [] - } - ], - "index": 1, - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 29, - "type": { - "path": [], - "params": [], - "def": { - "tuple": [] - }, - "docs": [] - } - }, - { - "id": 30, - "type": { - "path": [ - "pallet_balances", - "pallet", - "Event" - ], - "params": [ - { - "name": "T", - "type": null - }, - { - "name": "I", - "type": null - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "Endowed", - "fields": [ - { - "name": "account", - "type": 0, - "typeName": "T::AccountId", - "docs": [] - }, - { - "name": "free_balance", - "type": 6, - "typeName": "T::Balance", - "docs": [] - } - ], - "index": 0, - "docs": [ - "An account was created with some free balance." - ] - }, - { - "name": "DustLost", - "fields": [ - { - "name": "account", - "type": 0, - "typeName": "T::AccountId", - "docs": [] - }, - { - "name": "amount", - "type": 6, - "typeName": "T::Balance", - "docs": [] - } - ], - "index": 1, - "docs": [ - "An account was removed whose balance was non-zero but below ExistentialDeposit,", - "resulting in an outright loss." - ] - }, - { - "name": "Transfer", - "fields": [ - { - "name": "from", - "type": 0, - "typeName": "T::AccountId", - "docs": [] - }, - { - "name": "to", - "type": 0, - "typeName": "T::AccountId", - "docs": [] - }, - { - "name": "amount", - "type": 6, - "typeName": "T::Balance", - "docs": [] - } - ], - "index": 2, - "docs": [ - "Transfer succeeded." - ] - }, - { - "name": "BalanceSet", - "fields": [ - { - "name": "who", - "type": 0, - "typeName": "T::AccountId", - "docs": [] - }, - { - "name": "free", - "type": 6, - "typeName": "T::Balance", - "docs": [] - }, - { - "name": "reserved", - "type": 6, - "typeName": "T::Balance", - "docs": [] - } - ], - "index": 3, - "docs": [ - "A balance was set by root." - ] - }, - { - "name": "Reserved", - "fields": [ - { - "name": "who", - "type": 0, - "typeName": "T::AccountId", - "docs": [] - }, - { - "name": "amount", - "type": 6, - "typeName": "T::Balance", - "docs": [] - } - ], - "index": 4, - "docs": [ - "Some balance was reserved (moved from free to reserved)." - ] - }, - { - "name": "Unreserved", - "fields": [ - { - "name": "who", - "type": 0, - "typeName": "T::AccountId", - "docs": [] - }, - { - "name": "amount", - "type": 6, - "typeName": "T::Balance", - "docs": [] - } - ], - "index": 5, - "docs": [ - "Some balance was unreserved (moved from reserved to free)." - ] - }, - { - "name": "ReserveRepatriated", - "fields": [ - { - "name": "from", - "type": 0, - "typeName": "T::AccountId", - "docs": [] - }, - { - "name": "to", - "type": 0, - "typeName": "T::AccountId", - "docs": [] - }, - { - "name": "amount", - "type": 6, - "typeName": "T::Balance", - "docs": [] - }, - { - "name": "destination_status", - "type": 31, - "typeName": "Status", - "docs": [] - } - ], - "index": 6, - "docs": [ - "Some balance was moved from the reserve of the first account to the second account.", - "Final argument indicates the destination balance type." - ] - }, - { - "name": "Deposit", - "fields": [ - { - "name": "who", - "type": 0, - "typeName": "T::AccountId", - "docs": [] - }, - { - "name": "amount", - "type": 6, - "typeName": "T::Balance", - "docs": [] - } - ], - "index": 7, - "docs": [ - "Some amount was deposited (e.g. for transaction fees)." - ] - }, - { - "name": "Withdraw", - "fields": [ - { - "name": "who", - "type": 0, - "typeName": "T::AccountId", - "docs": [] - }, - { - "name": "amount", - "type": 6, - "typeName": "T::Balance", - "docs": [] - } - ], - "index": 8, - "docs": [ - "Some amount was withdrawn from the account (e.g. for transaction fees)." - ] - }, - { - "name": "Slashed", - "fields": [ - { - "name": "who", - "type": 0, - "typeName": "T::AccountId", - "docs": [] - }, - { - "name": "amount", - "type": 6, - "typeName": "T::Balance", - "docs": [] - } - ], - "index": 9, - "docs": [ - "Some amount was removed from the account (e.g. for misbehavior)." - ] - } - ] - } - }, - "docs": [ - "\n\t\t\tThe [event](https://docs.substrate.io/v3/runtime/events-and-errors) emitted\n\t\t\tby this pallet.\n\t\t\t" - ] - } - }, - { - "id": 31, - "type": { - "path": [ - "frame_support", - "traits", - "tokens", - "misc", - "BalanceStatus" - ], - "params": [], - "def": { - "variant": { - "variants": [ - { - "name": "Free", - "fields": [], - "index": 0, - "docs": [] - }, - { - "name": "Reserved", - "fields": [], - "index": 1, - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 32, - "type": { - "path": [ - "pallet_election_provider_multi_phase", - "pallet", - "Event" - ], - "params": [ - { - "name": "T", - "type": null - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "SolutionStored", - "fields": [ - { - "name": "election_compute", - "type": 33, - "typeName": "ElectionCompute", - "docs": [] - }, - { - "name": "prev_ejected", - "type": 34, - "typeName": "bool", - "docs": [] - } - ], - "index": 0, - "docs": [ - "A solution was stored with the given compute.", - "", - "If the solution is signed, this means that it hasn't yet been processed. If the", - "solution is unsigned, this means that it has also been processed.", - "", - "The `bool` is `true` when a previous solution was ejected to make room for this one." - ] - }, - { - "name": "ElectionFinalized", - "fields": [ - { - "name": "election_compute", - "type": 35, - "typeName": "Option", - "docs": [] - } - ], - "index": 1, - "docs": [ - "The election has been finalized, with `Some` of the given computation, or else if the", - "election failed, `None`." - ] - }, - { - "name": "Rewarded", - "fields": [ - { - "name": "account", - "type": 0, - "typeName": "::AccountId", - "docs": [] - }, - { - "name": "value", - "type": 6, - "typeName": "BalanceOf", - "docs": [] - } - ], - "index": 2, - "docs": [ - "An account has been rewarded for their signed submission being finalized." - ] - }, - { - "name": "Slashed", - "fields": [ - { - "name": "account", - "type": 0, - "typeName": "::AccountId", - "docs": [] - }, - { - "name": "value", - "type": 6, - "typeName": "BalanceOf", - "docs": [] - } - ], - "index": 3, - "docs": [ - "An account has been slashed for submitting an invalid signed submission." - ] - }, - { - "name": "SignedPhaseStarted", - "fields": [ - { - "name": "round", - "type": 4, - "typeName": "u32", - "docs": [] - } - ], - "index": 4, - "docs": [ - "The signed phase of the given round has started." - ] - }, - { - "name": "UnsignedPhaseStarted", - "fields": [ - { - "name": "round", - "type": 4, - "typeName": "u32", - "docs": [] - } - ], - "index": 5, - "docs": [ - "The unsigned phase of the given round has started." - ] - } - ] - } - }, - "docs": [ - "\n\t\t\tThe [event](https://docs.substrate.io/v3/runtime/events-and-errors) emitted\n\t\t\tby this pallet.\n\t\t\t" - ] - } - }, - { - "id": 33, - "type": { - "path": [ - "pallet_election_provider_multi_phase", - "ElectionCompute" - ], - "params": [], - "def": { - "variant": { - "variants": [ - { - "name": "OnChain", - "fields": [], - "index": 0, - "docs": [] - }, - { - "name": "Signed", - "fields": [], - "index": 1, - "docs": [] - }, - { - "name": "Unsigned", - "fields": [], - "index": 2, - "docs": [] - }, - { - "name": "Fallback", - "fields": [], - "index": 3, - "docs": [] - }, - { - "name": "Emergency", - "fields": [], - "index": 4, - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 34, - "type": { - "path": [], - "params": [], - "def": { - "primitive": "Bool" - }, - "docs": [] - } - }, - { - "id": 35, - "type": { - "path": [ - "Option" - ], - "params": [ - { - "name": "T", - "type": 33 - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "None", - "fields": [], - "index": 0, - "docs": [] - }, - { - "name": "Some", - "fields": [ - { - "name": null, - "type": 33, - "typeName": null, - "docs": [] - } - ], - "index": 1, - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 36, - "type": { - "path": [ - "pallet_staking", - "pallet", - "pallet", - "Event" - ], - "params": [ - { - "name": "T", - "type": null - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "EraPaid", - "fields": [ - { - "name": null, - "type": 4, - "typeName": "EraIndex", - "docs": [] - }, - { - "name": null, - "type": 6, - "typeName": "BalanceOf", - "docs": [] - }, - { - "name": null, - "type": 6, - "typeName": "BalanceOf", - "docs": [] - } - ], - "index": 0, - "docs": [ - "The era payout has been set; the first balance is the validator-payout; the second is", - "the remainder from the maximum amount of reward.", - "\\[era_index, validator_payout, remainder\\]" - ] - }, - { - "name": "Rewarded", - "fields": [ - { - "name": null, - "type": 0, - "typeName": "T::AccountId", - "docs": [] - }, - { - "name": null, - "type": 6, - "typeName": "BalanceOf", - "docs": [] - } - ], - "index": 1, - "docs": [ - "The nominator has been rewarded by this amount. \\[stash, amount\\]" - ] - }, - { - "name": "Slashed", - "fields": [ - { - "name": null, - "type": 0, - "typeName": "T::AccountId", - "docs": [] - }, - { - "name": null, - "type": 6, - "typeName": "BalanceOf", - "docs": [] - } - ], - "index": 2, - "docs": [ - "One validator (and its nominators) has been slashed by the given amount.", - "\\[validator, amount\\]" - ] - }, - { - "name": "OldSlashingReportDiscarded", - "fields": [ - { - "name": null, - "type": 4, - "typeName": "SessionIndex", - "docs": [] - } - ], - "index": 3, - "docs": [ - "An old slashing report from a prior era was discarded because it could", - "not be processed. \\[session_index\\]" - ] - }, - { - "name": "StakersElected", - "fields": [], - "index": 4, - "docs": [ - "A new set of stakers was elected." - ] - }, - { - "name": "Bonded", - "fields": [ - { - "name": null, - "type": 0, - "typeName": "T::AccountId", - "docs": [] - }, - { - "name": null, - "type": 6, - "typeName": "BalanceOf", - "docs": [] - } - ], - "index": 5, - "docs": [ - "An account has bonded this amount. \\[stash, amount\\]", - "", - "NOTE: This event is only emitted when funds are bonded via a dispatchable. Notably,", - "it will not be emitted for staking rewards when they are added to stake." - ] - }, - { - "name": "Unbonded", - "fields": [ - { - "name": null, - "type": 0, - "typeName": "T::AccountId", - "docs": [] - }, - { - "name": null, - "type": 6, - "typeName": "BalanceOf", - "docs": [] - } - ], - "index": 6, - "docs": [ - "An account has unbonded this amount. \\[stash, amount\\]" - ] - }, - { - "name": "Withdrawn", - "fields": [ - { - "name": null, - "type": 0, - "typeName": "T::AccountId", - "docs": [] - }, - { - "name": null, - "type": 6, - "typeName": "BalanceOf", - "docs": [] - } - ], - "index": 7, - "docs": [ - "An account has called `withdraw_unbonded` and removed unbonding chunks worth `Balance`", - "from the unlocking queue. \\[stash, amount\\]" - ] - }, - { - "name": "Kicked", - "fields": [ - { - "name": null, - "type": 0, - "typeName": "T::AccountId", - "docs": [] - }, - { - "name": null, - "type": 0, - "typeName": "T::AccountId", - "docs": [] - } - ], - "index": 8, - "docs": [ - "A nominator has been kicked from a validator. \\[nominator, stash\\]" - ] - }, - { - "name": "StakingElectionFailed", - "fields": [], - "index": 9, - "docs": [ - "The election failed. No new era is planned." - ] - }, - { - "name": "Chilled", - "fields": [ - { - "name": null, - "type": 0, - "typeName": "T::AccountId", - "docs": [] - } - ], - "index": 10, - "docs": [ - "An account has stopped participating as either a validator or nominator.", - "\\[stash\\]" - ] - }, - { - "name": "PayoutStarted", - "fields": [ - { - "name": null, - "type": 4, - "typeName": "EraIndex", - "docs": [] - }, - { - "name": null, - "type": 0, - "typeName": "T::AccountId", - "docs": [] - } - ], - "index": 11, - "docs": [ - "The stakers' rewards are getting paid. \\[era_index, validator_stash\\]" - ] - }, - { - "name": "ValidatorPrefsSet", - "fields": [ - { - "name": null, - "type": 0, - "typeName": "T::AccountId", - "docs": [] - }, - { - "name": null, - "type": 37, - "typeName": "ValidatorPrefs", - "docs": [] - } - ], - "index": 12, - "docs": [ - "A validator has set their preferences." - ] - } - ] - } - }, - "docs": [ - "\n\t\t\tThe [event](https://docs.substrate.io/v3/runtime/events-and-errors) emitted\n\t\t\tby this pallet.\n\t\t\t" - ] - } - }, - { - "id": 37, - "type": { - "path": [ - "pallet_staking", - "ValidatorPrefs" - ], - "params": [], - "def": { - "composite": { - "fields": [ - { - "name": "commission", - "type": 38, - "typeName": "Perbill", - "docs": [] - }, - { - "name": "blocked", - "type": 34, - "typeName": "bool", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 38, - "type": { - "path": [], - "params": [], - "def": { - "compact": { - "type": 39 - } - }, - "docs": [] - } - }, - { - "id": 39, - "type": { - "path": [ - "sp_arithmetic", - "per_things", - "Perbill" - ], - "params": [], - "def": { - "composite": { - "fields": [ - { - "name": null, - "type": 4, - "typeName": "u32", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 40, - "type": { - "path": [ - "pallet_session", - "pallet", - "Event" - ], - "params": [], - "def": { - "variant": { - "variants": [ - { - "name": "NewSession", - "fields": [ - { - "name": "session_index", - "type": 4, - "typeName": "SessionIndex", - "docs": [] - } - ], - "index": 0, - "docs": [ - "New session has happened. Note that the argument is the session index, not the", - "block number as the type might suggest." - ] - } - ] - } - }, - "docs": [ - "\n\t\t\tThe [event](https://docs.substrate.io/v3/runtime/events-and-errors) emitted\n\t\t\tby this pallet.\n\t\t\t" - ] - } - }, - { - "id": 41, - "type": { - "path": [ - "pallet_grandpa", - "pallet", - "Event" - ], - "params": [], - "def": { - "variant": { - "variants": [ - { - "name": "NewAuthorities", - "fields": [ - { - "name": "authority_set", - "type": 42, - "typeName": "AuthorityList", - "docs": [] - } - ], - "index": 0, - "docs": [ - "New authority set has been applied." - ] - }, - { - "name": "Paused", - "fields": [], - "index": 1, - "docs": [ - "Current authority set has been paused." - ] - }, - { - "name": "Resumed", - "fields": [], - "index": 2, - "docs": [ - "Current authority set has been resumed." - ] - } - ] - } - }, - "docs": [ - "\n\t\t\tThe [event](https://docs.substrate.io/v3/runtime/events-and-errors) emitted\n\t\t\tby this pallet.\n\t\t\t" - ] - } - }, - { - "id": 42, - "type": { - "path": [], - "params": [], - "def": { - "sequence": { - "type": 43 - } - }, - "docs": [] - } - }, - { - "id": 43, - "type": { - "path": [], - "params": [], - "def": { - "tuple": [ - 44, - 8 - ] - }, - "docs": [] - } - }, - { - "id": 44, - "type": { - "path": [ - "sp_finality_grandpa", - "app", - "Public" - ], - "params": [], - "def": { - "composite": { - "fields": [ - { - "name": null, - "type": 45, - "typeName": "ed25519::Public", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 45, - "type": { - "path": [ - "sp_core", - "ed25519", - "Public" - ], - "params": [], - "def": { - "composite": { - "fields": [ - { - "name": null, - "type": 1, - "typeName": "[u8; 32]", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 46, - "type": { - "path": [ - "pallet_im_online", - "pallet", - "Event" - ], - "params": [ - { - "name": "T", - "type": null - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "HeartbeatReceived", - "fields": [ - { - "name": "authority_id", - "type": 47, - "typeName": "T::AuthorityId", - "docs": [] - } - ], - "index": 0, - "docs": [ - "A new heartbeat was received from `AuthorityId`." - ] - }, - { - "name": "AllGood", - "fields": [], - "index": 1, - "docs": [ - "At the end of the session, no offence was committed." - ] - }, - { - "name": "SomeOffline", - "fields": [ - { - "name": "offline", - "type": 49, - "typeName": "Vec>", - "docs": [] - } - ], - "index": 2, - "docs": [ - "At the end of the session, at least one validator was found to be offline." - ] - } - ] - } - }, - "docs": [ - "\n\t\t\tThe [event](https://docs.substrate.io/v3/runtime/events-and-errors) emitted\n\t\t\tby this pallet.\n\t\t\t" - ] - } - }, - { - "id": 47, - "type": { - "path": [ - "pallet_im_online", - "sr25519", - "app_sr25519", - "Public" - ], - "params": [], - "def": { - "composite": { - "fields": [ - { - "name": null, - "type": 48, - "typeName": "sr25519::Public", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 48, - "type": { - "path": [ - "sp_core", - "sr25519", - "Public" - ], - "params": [], - "def": { - "composite": { - "fields": [ - { - "name": null, - "type": 1, - "typeName": "[u8; 32]", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 49, - "type": { - "path": [], - "params": [], - "def": { - "sequence": { - "type": 50 - } - }, - "docs": [] - } - }, - { - "id": 50, - "type": { - "path": [], - "params": [], - "def": { - "tuple": [ - 0, - 51 - ] - }, - "docs": [] - } - }, - { - "id": 51, - "type": { - "path": [ - "pallet_staking", - "Exposure" - ], - "params": [ - { - "name": "AccountId", - "type": 0 - }, - { - "name": "Balance", - "type": 6 - } - ], - "def": { - "composite": { - "fields": [ - { - "name": "total", - "type": 52, - "typeName": "Balance", - "docs": [] - }, - { - "name": "own", - "type": 52, - "typeName": "Balance", - "docs": [] - }, - { - "name": "others", - "type": 53, - "typeName": "Vec>", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 52, - "type": { - "path": [], - "params": [], - "def": { - "compact": { - "type": 6 - } - }, - "docs": [] - } - }, - { - "id": 53, - "type": { - "path": [], - "params": [], - "def": { - "sequence": { - "type": 54 - } - }, - "docs": [] - } - }, - { - "id": 54, - "type": { - "path": [ - "pallet_staking", - "IndividualExposure" - ], - "params": [ - { - "name": "AccountId", - "type": 0 - }, - { - "name": "Balance", - "type": 6 - } - ], - "def": { - "composite": { - "fields": [ - { - "name": "who", - "type": 0, - "typeName": "AccountId", - "docs": [] - }, - { - "name": "value", - "type": 52, - "typeName": "Balance", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 55, - "type": { - "path": [ - "pallet_offences", - "pallet", - "Event" - ], - "params": [], - "def": { - "variant": { - "variants": [ - { - "name": "Offence", - "fields": [ - { - "name": "kind", - "type": 56, - "typeName": "Kind", - "docs": [] - }, - { - "name": "timeslot", - "type": 10, - "typeName": "OpaqueTimeSlot", - "docs": [] - } - ], - "index": 0, - "docs": [ - "There is an offence reported of the given `kind` happened at the `session_index` and", - "(kind-specific) time slot. This event is not deposited for duplicate slashes.", - "\\[kind, timeslot\\]." - ] - } - ] - } - }, - "docs": [ - "Events type." - ] - } - }, - { - "id": 56, - "type": { - "path": [], - "params": [], - "def": { - "array": { - "len": 16, - "type": 2 - } - }, - "docs": [] - } - }, - { - "id": 57, - "type": { - "path": [ - "pallet_sudo", - "pallet", - "Event" - ], - "params": [ - { - "name": "T", - "type": null - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "Sudid", - "fields": [ - { - "name": "sudo_result", - "type": 28, - "typeName": "DispatchResult", - "docs": [] - } - ], - "index": 0, - "docs": [ - "A sudo just took place. \\[result\\]" - ] - }, - { - "name": "KeyChanged", - "fields": [ - { - "name": "old_sudoer", - "type": 58, - "typeName": "Option", - "docs": [] - } - ], - "index": 1, - "docs": [ - "The \\[sudoer\\] just switched identity; the old key is supplied if one existed." - ] - }, - { - "name": "SudoAsDone", - "fields": [ - { - "name": "sudo_result", - "type": 28, - "typeName": "DispatchResult", - "docs": [] - } - ], - "index": 2, - "docs": [ - "A sudo just took place. \\[result\\]" - ] - } - ] - } - }, - "docs": [ - "\n\t\t\tThe [event](https://docs.substrate.io/v3/runtime/events-and-errors) emitted\n\t\t\tby this pallet.\n\t\t\t" - ] - } - }, - { - "id": 58, - "type": { - "path": [ - "Option" - ], - "params": [ - { - "name": "T", - "type": 0 - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "None", - "fields": [], - "index": 0, - "docs": [] - }, - { - "name": "Some", - "fields": [ - { - "name": null, - "type": 0, - "typeName": null, - "docs": [] - } - ], - "index": 1, - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 59, - "type": { - "path": [ - "pallet_bags_list", - "pallet", - "Event" - ], - "params": [ - { - "name": "T", - "type": null - }, - { - "name": "I", - "type": null - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "Rebagged", - "fields": [ - { - "name": "who", - "type": 0, - "typeName": "T::AccountId", - "docs": [] - }, - { - "name": "from", - "type": 8, - "typeName": "T::Score", - "docs": [] - }, - { - "name": "to", - "type": 8, - "typeName": "T::Score", - "docs": [] - } - ], - "index": 0, - "docs": [ - "Moved an account from one bag to another." - ] - }, - { - "name": "ScoreUpdated", - "fields": [ - { - "name": "who", - "type": 0, - "typeName": "T::AccountId", - "docs": [] - }, - { - "name": "new_score", - "type": 8, - "typeName": "T::Score", - "docs": [] - } - ], - "index": 1, - "docs": [ - "Updated the score of some account to the given amount." - ] - } - ] - } - }, - "docs": [ - "\n\t\t\tThe [event](https://docs.substrate.io/v3/runtime/events-and-errors) emitted\n\t\t\tby this pallet.\n\t\t\t" - ] - } - }, - { - "id": 60, - "type": { - "path": [ - "pallet_vesting", - "pallet", - "Event" - ], - "params": [ - { - "name": "T", - "type": null - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "VestingUpdated", - "fields": [ - { - "name": "account", - "type": 0, - "typeName": "T::AccountId", - "docs": [] - }, - { - "name": "unvested", - "type": 6, - "typeName": "BalanceOf", - "docs": [] - } - ], - "index": 0, - "docs": [ - "The amount vested has been updated. This could indicate a change in funds available.", - "The balance given is the amount which is left unvested (and thus locked)." - ] - }, - { - "name": "VestingCompleted", - "fields": [ - { - "name": "account", - "type": 0, - "typeName": "T::AccountId", - "docs": [] - } - ], - "index": 1, - "docs": [ - "An \\[account\\] has become fully vested." - ] - } - ] - } - }, - "docs": [ - "\n\t\t\tThe [event](https://docs.substrate.io/v3/runtime/events-and-errors) emitted\n\t\t\tby this pallet.\n\t\t\t" - ] - } - }, - { - "id": 61, - "type": { - "path": [ - "pallet_council", - "RawEvent" - ], - "params": [ - { - "name": "Balance", - "type": 6 - }, - { - "name": "BlockNumber", - "type": 4 - }, - { - "name": "MemberId", - "type": 8 - }, - { - "name": "AccountId", - "type": 0 - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "AnnouncingPeriodStarted", - "fields": [], - "index": 0, - "docs": [ - "New council was elected" - ] - }, - { - "name": "NotEnoughCandidates", - "fields": [], - "index": 1, - "docs": [ - "Announcing period can't finish because of insufficient candidtate count" - ] - }, - { - "name": "VotingPeriodStarted", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "u64", - "docs": [] - } - ], - "index": 2, - "docs": [ - "Candidates are announced and voting starts" - ] - }, - { - "name": "NewCandidate", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "MemberId", - "docs": [] - }, - { - "name": null, - "type": 0, - "typeName": "AccountId", - "docs": [] - }, - { - "name": null, - "type": 0, - "typeName": "AccountId", - "docs": [] - }, - { - "name": null, - "type": 6, - "typeName": "Balance", - "docs": [] - } - ], - "index": 3, - "docs": [ - "New candidate announced" - ] - }, - { - "name": "NewCouncilElected", - "fields": [ - { - "name": null, - "type": 62, - "typeName": "Vec", - "docs": [] - } - ], - "index": 4, - "docs": [ - "New council was elected and appointed" - ] - }, - { - "name": "NewCouncilNotElected", - "fields": [], - "index": 5, - "docs": [ - "New council was not elected" - ] - }, - { - "name": "CandidacyStakeRelease", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "MemberId", - "docs": [] - } - ], - "index": 6, - "docs": [ - "Candidacy stake that was no longer needed was released" - ] - }, - { - "name": "CandidacyWithdraw", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "MemberId", - "docs": [] - } - ], - "index": 7, - "docs": [ - "Candidate has withdrawn his candidacy" - ] - }, - { - "name": "CandidacyNoteSet", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "MemberId", - "docs": [] - }, - { - "name": null, - "type": 10, - "typeName": "Vec", - "docs": [] - } - ], - "index": 8, - "docs": [ - "The candidate has set a new note for their candidacy" - ] - }, - { - "name": "RewardPayment", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "MemberId", - "docs": [] - }, - { - "name": null, - "type": 0, - "typeName": "AccountId", - "docs": [] - }, - { - "name": null, - "type": 6, - "typeName": "Balance", - "docs": [] - }, - { - "name": null, - "type": 6, - "typeName": "Balance", - "docs": [] - } - ], - "index": 9, - "docs": [ - "The whole reward was paid to the council member." - ] - }, - { - "name": "BudgetBalanceSet", - "fields": [ - { - "name": null, - "type": 6, - "typeName": "Balance", - "docs": [] - } - ], - "index": 10, - "docs": [ - "Budget balance was changed by the root." - ] - }, - { - "name": "BudgetRefill", - "fields": [ - { - "name": null, - "type": 6, - "typeName": "Balance", - "docs": [] - } - ], - "index": 11, - "docs": [ - "Budget balance was increased by automatic refill." - ] - }, - { - "name": "BudgetRefillPlanned", - "fields": [ - { - "name": null, - "type": 4, - "typeName": "BlockNumber", - "docs": [] - } - ], - "index": 12, - "docs": [ - "The next budget refill was planned." - ] - }, - { - "name": "BudgetIncrementUpdated", - "fields": [ - { - "name": null, - "type": 6, - "typeName": "Balance", - "docs": [] - } - ], - "index": 13, - "docs": [ - "Budget increment has been updated." - ] - }, - { - "name": "CouncilorRewardUpdated", - "fields": [ - { - "name": null, - "type": 6, - "typeName": "Balance", - "docs": [] - } - ], - "index": 14, - "docs": [ - "Councilor reward has been updated." - ] - }, - { - "name": "RequestFunded", - "fields": [ - { - "name": null, - "type": 0, - "typeName": "AccountId", - "docs": [] - }, - { - "name": null, - "type": 6, - "typeName": "Balance", - "docs": [] - } - ], - "index": 15, - "docs": [ - "Request has been funded" - ] - }, - { - "name": "CouncilBudgetFunded", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "MemberId", - "docs": [] - }, - { - "name": null, - "type": 6, - "typeName": "Balance", - "docs": [] - }, - { - "name": null, - "type": 10, - "typeName": "Vec", - "docs": [] - } - ], - "index": 16, - "docs": [ - "Fund the council budget.", - "Params:", - "- Member ID", - "- Amount of balance", - "- Rationale" - ] - }, - { - "name": "CouncilorRemarked", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "MemberId", - "docs": [] - }, - { - "name": null, - "type": 10, - "typeName": "Vec", - "docs": [] - } - ], - "index": 17, - "docs": [ - "Councilor remark message" - ] - }, - { - "name": "CandidateRemarked", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "MemberId", - "docs": [] - }, - { - "name": null, - "type": 10, - "typeName": "Vec", - "docs": [] - } - ], - "index": 18, - "docs": [ - "Candidate remark message" - ] - } - ] - } - }, - "docs": [ - "Events for this module.", - "" - ] - } - }, - { - "id": 62, - "type": { - "path": [], - "params": [], - "def": { - "sequence": { - "type": 8 - } - }, - "docs": [] - } - }, - { - "id": 63, - "type": { - "path": [ - "pallet_referendum", - "RawEvent" - ], - "params": [ - { - "name": "Balance", - "type": 6 - }, - { - "name": "Hash", - "type": 9 - }, - { - "name": "AccountId", - "type": 0 - }, - { - "name": "VotePower", - "type": 6 - }, - { - "name": "MemberId", - "type": 8 - }, - { - "name": "I", - "type": 64 - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "ReferendumStarted", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "u64", - "docs": [] - } - ], - "index": 0, - "docs": [ - "Referendum started" - ] - }, - { - "name": "ReferendumStartedForcefully", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "u64", - "docs": [] - } - ], - "index": 1, - "docs": [ - "Referendum started" - ] - }, - { - "name": "RevealingStageStarted", - "fields": [], - "index": 2, - "docs": [ - "Revealing phase has begun" - ] - }, - { - "name": "ReferendumFinished", - "fields": [ - { - "name": null, - "type": 65, - "typeName": "Vec>", - "docs": [] - } - ], - "index": 3, - "docs": [ - "Referendum ended and winning option was selected" - ] - }, - { - "name": "VoteCast", - "fields": [ - { - "name": null, - "type": 0, - "typeName": "AccountId", - "docs": [] - }, - { - "name": null, - "type": 9, - "typeName": "Hash", - "docs": [] - }, - { - "name": null, - "type": 6, - "typeName": "Balance", - "docs": [] - } - ], - "index": 4, - "docs": [ - "User cast a vote in referendum" - ] - }, - { - "name": "VoteRevealed", - "fields": [ - { - "name": null, - "type": 0, - "typeName": "AccountId", - "docs": [] - }, - { - "name": null, - "type": 8, - "typeName": "MemberId", - "docs": [] - }, - { - "name": null, - "type": 10, - "typeName": "Vec", - "docs": [] - } - ], - "index": 5, - "docs": [ - "User revealed his vote" - ] - }, - { - "name": "StakeReleased", - "fields": [ - { - "name": null, - "type": 0, - "typeName": "AccountId", - "docs": [] - } - ], - "index": 6, - "docs": [ - "User released his stake" - ] - } - ] - } - }, - "docs": [ - "Events for this module.", - "" - ] - } - }, - { - "id": 64, - "type": { - "path": [ - "pallet_referendum", - "Instance1" - ], - "params": [], - "def": { - "composite": { - "fields": [] - } - }, - "docs": [] - } - }, - { - "id": 65, - "type": { - "path": [], - "params": [], - "def": { - "sequence": { - "type": 66 - } - }, - "docs": [] - } - }, - { - "id": 66, - "type": { - "path": [ - "pallet_referendum", - "OptionResult" - ], - "params": [ - { - "name": "MemberId", - "type": 8 - }, - { - "name": "VotePower", - "type": 6 - } - ], - "def": { - "composite": { - "fields": [ - { - "name": "option_id", - "type": 8, - "typeName": "MemberId", - "docs": [] - }, - { - "name": "vote_power", - "type": 6, - "typeName": "VotePower", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 67, - "type": { - "path": [ - "pallet_membership", - "RawEvent" - ], - "params": [ - { - "name": "MemberId", - "type": 8 - }, - { - "name": "Balance", - "type": 6 - }, - { - "name": "AccountId", - "type": 0 - }, - { - "name": "BuyMembershipParameters", - "type": 68 - }, - { - "name": "ActorId", - "type": 8 - }, - { - "name": "InviteMembershipParameters", - "type": 71 - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "MemberInvited", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "MemberId", - "docs": [] - }, - { - "name": null, - "type": 71, - "typeName": "InviteMembershipParameters", - "docs": [] - } - ], - "index": 0, - "docs": [] - }, - { - "name": "MembershipBought", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "MemberId", - "docs": [] - }, - { - "name": null, - "type": 68, - "typeName": "BuyMembershipParameters", - "docs": [] - } - ], - "index": 1, - "docs": [] - }, - { - "name": "MemberProfileUpdated", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "MemberId", - "docs": [] - }, - { - "name": null, - "type": 69, - "typeName": "Option>", - "docs": [] - }, - { - "name": null, - "type": 69, - "typeName": "Option>", - "docs": [] - } - ], - "index": 2, - "docs": [] - }, - { - "name": "MemberAccountsUpdated", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "MemberId", - "docs": [] - }, - { - "name": null, - "type": 58, - "typeName": "Option", - "docs": [] - }, - { - "name": null, - "type": 58, - "typeName": "Option", - "docs": [] - } - ], - "index": 3, - "docs": [] - }, - { - "name": "MemberVerificationStatusUpdated", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "MemberId", - "docs": [] - }, - { - "name": null, - "type": 34, - "typeName": "bool", - "docs": [] - }, - { - "name": null, - "type": 8, - "typeName": "ActorId", - "docs": [] - } - ], - "index": 4, - "docs": [] - }, - { - "name": "ReferralCutUpdated", - "fields": [ - { - "name": null, - "type": 2, - "typeName": "u8", - "docs": [] - } - ], - "index": 5, - "docs": [] - }, - { - "name": "InvitesTransferred", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "MemberId", - "docs": [] - }, - { - "name": null, - "type": 8, - "typeName": "MemberId", - "docs": [] - }, - { - "name": null, - "type": 4, - "typeName": "u32", - "docs": [] - } - ], - "index": 6, - "docs": [] - }, - { - "name": "MembershipPriceUpdated", - "fields": [ - { - "name": null, - "type": 6, - "typeName": "Balance", - "docs": [] - } - ], - "index": 7, - "docs": [] - }, - { - "name": "InitialInvitationBalanceUpdated", - "fields": [ - { - "name": null, - "type": 6, - "typeName": "Balance", - "docs": [] - } - ], - "index": 8, - "docs": [] - }, - { - "name": "LeaderInvitationQuotaUpdated", - "fields": [ - { - "name": null, - "type": 4, - "typeName": "u32", - "docs": [] - } - ], - "index": 9, - "docs": [] - }, - { - "name": "InitialInvitationCountUpdated", - "fields": [ - { - "name": null, - "type": 4, - "typeName": "u32", - "docs": [] - } - ], - "index": 10, - "docs": [] - }, - { - "name": "StakingAccountAdded", - "fields": [ - { - "name": null, - "type": 0, - "typeName": "AccountId", - "docs": [] - }, - { - "name": null, - "type": 8, - "typeName": "MemberId", - "docs": [] - } - ], - "index": 11, - "docs": [] - }, - { - "name": "StakingAccountRemoved", - "fields": [ - { - "name": null, - "type": 0, - "typeName": "AccountId", - "docs": [] - }, - { - "name": null, - "type": 8, - "typeName": "MemberId", - "docs": [] - } - ], - "index": 12, - "docs": [] - }, - { - "name": "StakingAccountConfirmed", - "fields": [ - { - "name": null, - "type": 0, - "typeName": "AccountId", - "docs": [] - }, - { - "name": null, - "type": 8, - "typeName": "MemberId", - "docs": [] - } - ], - "index": 13, - "docs": [] - }, - { - "name": "MemberRemarked", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "MemberId", - "docs": [] - }, - { - "name": null, - "type": 10, - "typeName": "Vec", - "docs": [] - } - ], - "index": 14, - "docs": [] - } - ] - } - }, - "docs": [ - "Events for this module.", - "" - ] - } - }, - { - "id": 68, - "type": { - "path": [ - "pallet_membership", - "BuyMembershipParameters" - ], - "params": [ - { - "name": "AccountId", - "type": 0 - }, - { - "name": "MemberId", - "type": 8 - } - ], - "def": { - "composite": { - "fields": [ - { - "name": "root_account", - "type": 0, - "typeName": "AccountId", - "docs": [] - }, - { - "name": "controller_account", - "type": 0, - "typeName": "AccountId", - "docs": [] - }, - { - "name": "handle", - "type": 69, - "typeName": "Option>", - "docs": [] - }, - { - "name": "metadata", - "type": 10, - "typeName": "Vec", - "docs": [] - }, - { - "name": "referrer_id", - "type": 70, - "typeName": "Option", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 69, - "type": { - "path": [ - "Option" - ], - "params": [ - { - "name": "T", - "type": 10 - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "None", - "fields": [], - "index": 0, - "docs": [] - }, - { - "name": "Some", - "fields": [ - { - "name": null, - "type": 10, - "typeName": null, - "docs": [] - } - ], - "index": 1, - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 70, - "type": { - "path": [ - "Option" - ], - "params": [ - { - "name": "T", - "type": 8 - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "None", - "fields": [], - "index": 0, - "docs": [] - }, - { - "name": "Some", - "fields": [ - { - "name": null, - "type": 8, - "typeName": null, - "docs": [] - } - ], - "index": 1, - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 71, - "type": { - "path": [ - "pallet_membership", - "InviteMembershipParameters" - ], - "params": [ - { - "name": "AccountId", - "type": 0 - }, - { - "name": "MemberId", - "type": 8 - } - ], - "def": { - "composite": { - "fields": [ - { - "name": "inviting_member_id", - "type": 8, - "typeName": "MemberId", - "docs": [] - }, - { - "name": "root_account", - "type": 0, - "typeName": "AccountId", - "docs": [] - }, - { - "name": "controller_account", - "type": 0, - "typeName": "AccountId", - "docs": [] - }, - { - "name": "handle", - "type": 69, - "typeName": "Option>", - "docs": [] - }, - { - "name": "metadata", - "type": 10, - "typeName": "Vec", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 72, - "type": { - "path": [ - "pallet_forum", - "RawEvent" - ], - "params": [ - { - "name": "CategoryId", - "type": 8 - }, - { - "name": "ModeratorId", - "type": 8 - }, - { - "name": "ThreadId", - "type": 8 - }, - { - "name": "PostId", - "type": 8 - }, - { - "name": "Hash", - "type": 9 - }, - { - "name": "ForumUserId", - "type": 8 - }, - { - "name": "PostReactionId", - "type": 8 - }, - { - "name": "PrivilegedActor", - "type": 73 - }, - { - "name": "ExtendedPostId", - "type": 74 - }, - { - "name": "PollInput", - "type": 75 - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "CategoryCreated", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "CategoryId", - "docs": [] - }, - { - "name": null, - "type": 70, - "typeName": "Option", - "docs": [] - }, - { - "name": null, - "type": 10, - "typeName": "Vec", - "docs": [] - }, - { - "name": null, - "type": 10, - "typeName": "Vec", - "docs": [] - } - ], - "index": 0, - "docs": [ - "A category was introduced" - ] - }, - { - "name": "CategoryArchivalStatusUpdated", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "CategoryId", - "docs": [] - }, - { - "name": null, - "type": 34, - "typeName": "bool", - "docs": [] - }, - { - "name": null, - "type": 73, - "typeName": "PrivilegedActor", - "docs": [] - } - ], - "index": 1, - "docs": [ - "An arhical status of category with given id was updated.", - "The second argument reflects the new archival status of the category." - ] - }, - { - "name": "CategoryTitleUpdated", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "CategoryId", - "docs": [] - }, - { - "name": null, - "type": 9, - "typeName": "Hash", - "docs": [] - }, - { - "name": null, - "type": 73, - "typeName": "PrivilegedActor", - "docs": [] - } - ], - "index": 2, - "docs": [ - "A title of category with given id was updated.", - "The second argument reflects the new title hash of the category." - ] - }, - { - "name": "CategoryDescriptionUpdated", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "CategoryId", - "docs": [] - }, - { - "name": null, - "type": 9, - "typeName": "Hash", - "docs": [] - }, - { - "name": null, - "type": 73, - "typeName": "PrivilegedActor", - "docs": [] - } - ], - "index": 3, - "docs": [ - "A discription of category with given id was updated.", - "The second argument reflects the new description hash of the category." - ] - }, - { - "name": "CategoryDeleted", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "CategoryId", - "docs": [] - }, - { - "name": null, - "type": 73, - "typeName": "PrivilegedActor", - "docs": [] - } - ], - "index": 4, - "docs": [ - "A category was deleted" - ] - }, - { - "name": "ThreadCreated", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "CategoryId", - "docs": [] - }, - { - "name": null, - "type": 8, - "typeName": "ThreadId", - "docs": [] - }, - { - "name": null, - "type": 8, - "typeName": "PostId", - "docs": [] - }, - { - "name": null, - "type": 8, - "typeName": "ForumUserId", - "docs": [] - }, - { - "name": null, - "type": 10, - "typeName": "Vec", - "docs": [] - }, - { - "name": null, - "type": 10, - "typeName": "Vec", - "docs": [] - }, - { - "name": null, - "type": 77, - "typeName": "Option", - "docs": [] - } - ], - "index": 5, - "docs": [ - "A thread with given id was created.", - "A third argument reflects the initial post id of the thread." - ] - }, - { - "name": "ThreadModerated", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "ThreadId", - "docs": [] - }, - { - "name": null, - "type": 10, - "typeName": "Vec", - "docs": [] - }, - { - "name": null, - "type": 73, - "typeName": "PrivilegedActor", - "docs": [] - }, - { - "name": null, - "type": 8, - "typeName": "CategoryId", - "docs": [] - } - ], - "index": 6, - "docs": [ - "A thread with given id was moderated." - ] - }, - { - "name": "ThreadUpdated", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "ThreadId", - "docs": [] - }, - { - "name": null, - "type": 34, - "typeName": "bool", - "docs": [] - }, - { - "name": null, - "type": 73, - "typeName": "PrivilegedActor", - "docs": [] - }, - { - "name": null, - "type": 8, - "typeName": "CategoryId", - "docs": [] - } - ], - "index": 7, - "docs": [ - "A thread with given id was updated.", - "The second argument reflects the new archival status of the thread." - ] - }, - { - "name": "ThreadMetadataUpdated", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "ThreadId", - "docs": [] - }, - { - "name": null, - "type": 8, - "typeName": "ForumUserId", - "docs": [] - }, - { - "name": null, - "type": 8, - "typeName": "CategoryId", - "docs": [] - }, - { - "name": null, - "type": 10, - "typeName": "Vec", - "docs": [] - } - ], - "index": 8, - "docs": [ - "A thread metadata given id was updated." - ] - }, - { - "name": "ThreadDeleted", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "ThreadId", - "docs": [] - }, - { - "name": null, - "type": 8, - "typeName": "ForumUserId", - "docs": [] - }, - { - "name": null, - "type": 8, - "typeName": "CategoryId", - "docs": [] - }, - { - "name": null, - "type": 34, - "typeName": "bool", - "docs": [] - } - ], - "index": 9, - "docs": [ - "A thread was deleted." - ] - }, - { - "name": "ThreadMoved", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "ThreadId", - "docs": [] - }, - { - "name": null, - "type": 8, - "typeName": "CategoryId", - "docs": [] - }, - { - "name": null, - "type": 73, - "typeName": "PrivilegedActor", - "docs": [] - }, - { - "name": null, - "type": 8, - "typeName": "CategoryId", - "docs": [] - } - ], - "index": 10, - "docs": [ - "A thread was moved to new category" - ] - }, - { - "name": "PostAdded", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "PostId", - "docs": [] - }, - { - "name": null, - "type": 8, - "typeName": "ForumUserId", - "docs": [] - }, - { - "name": null, - "type": 8, - "typeName": "CategoryId", - "docs": [] - }, - { - "name": null, - "type": 8, - "typeName": "ThreadId", - "docs": [] - }, - { - "name": null, - "type": 10, - "typeName": "Vec", - "docs": [] - }, - { - "name": null, - "type": 34, - "typeName": "bool", - "docs": [] - } - ], - "index": 11, - "docs": [ - "Post with given id was created." - ] - }, - { - "name": "PostModerated", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "PostId", - "docs": [] - }, - { - "name": null, - "type": 10, - "typeName": "Vec", - "docs": [] - }, - { - "name": null, - "type": 73, - "typeName": "PrivilegedActor", - "docs": [] - }, - { - "name": null, - "type": 8, - "typeName": "CategoryId", - "docs": [] - }, - { - "name": null, - "type": 8, - "typeName": "ThreadId", - "docs": [] - } - ], - "index": 12, - "docs": [ - "Post with givne id was moderated." - ] - }, - { - "name": "PostDeleted", - "fields": [ - { - "name": null, - "type": 10, - "typeName": "Vec", - "docs": [] - }, - { - "name": null, - "type": 8, - "typeName": "ForumUserId", - "docs": [] - }, - { - "name": null, - "type": 78, - "typeName": "BTreeMap", - "docs": [] - } - ], - "index": 13, - "docs": [ - "Post with givne id was deleted." - ] - }, - { - "name": "PostTextUpdated", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "PostId", - "docs": [] - }, - { - "name": null, - "type": 8, - "typeName": "ForumUserId", - "docs": [] - }, - { - "name": null, - "type": 8, - "typeName": "CategoryId", - "docs": [] - }, - { - "name": null, - "type": 8, - "typeName": "ThreadId", - "docs": [] - }, - { - "name": null, - "type": 10, - "typeName": "Vec", - "docs": [] - } - ], - "index": 14, - "docs": [ - "Post with given id had its text updated.", - "The second argument reflects the number of total edits when the text update occurs." - ] - }, - { - "name": "PostReacted", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "ForumUserId", - "docs": [] - }, - { - "name": null, - "type": 8, - "typeName": "PostId", - "docs": [] - }, - { - "name": null, - "type": 8, - "typeName": "PostReactionId", - "docs": [] - }, - { - "name": null, - "type": 8, - "typeName": "CategoryId", - "docs": [] - }, - { - "name": null, - "type": 8, - "typeName": "ThreadId", - "docs": [] - } - ], - "index": 15, - "docs": [ - "Thumb up post" - ] - }, - { - "name": "VoteOnPoll", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "ThreadId", - "docs": [] - }, - { - "name": null, - "type": 4, - "typeName": "u32", - "docs": [] - }, - { - "name": null, - "type": 8, - "typeName": "ForumUserId", - "docs": [] - }, - { - "name": null, - "type": 8, - "typeName": "CategoryId", - "docs": [] - } - ], - "index": 16, - "docs": [ - "Vote on poll" - ] - }, - { - "name": "CategoryStickyThreadUpdate", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "CategoryId", - "docs": [] - }, - { - "name": null, - "type": 62, - "typeName": "Vec", - "docs": [] - }, - { - "name": null, - "type": 73, - "typeName": "PrivilegedActor", - "docs": [] - } - ], - "index": 17, - "docs": [ - "Sticky thread updated for category" - ] - }, - { - "name": "CategoryMembershipOfModeratorUpdated", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "ModeratorId", - "docs": [] - }, - { - "name": null, - "type": 8, - "typeName": "CategoryId", - "docs": [] - }, - { - "name": null, - "type": 34, - "typeName": "bool", - "docs": [] - } - ], - "index": 18, - "docs": [ - "An moderator ability to moderate a category and its subcategories updated" - ] - } - ] - } - }, - "docs": [ - "Events for this module.", - "" - ] - } - }, - { - "id": 73, - "type": { - "path": [ - "pallet_forum", - "PrivilegedActor" - ], - "params": [ - { - "name": "T", - "type": null - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "Lead", - "fields": [], - "index": 0, - "docs": [] - }, - { - "name": "Moderator", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "ModeratorId", - "docs": [] - } - ], - "index": 1, - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 74, - "type": { - "path": [ - "pallet_forum", - "ExtendedPostIdObject" - ], - "params": [ - { - "name": "CategoryId", - "type": 8 - }, - { - "name": "ThreadId", - "type": 8 - }, - { - "name": "PostId", - "type": 8 - } - ], - "def": { - "composite": { - "fields": [ - { - "name": "category_id", - "type": 8, - "typeName": "CategoryId", - "docs": [] - }, - { - "name": "thread_id", - "type": 8, - "typeName": "ThreadId", - "docs": [] - }, - { - "name": "post_id", - "type": 8, - "typeName": "PostId", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 75, - "type": { - "path": [ - "pallet_forum", - "PollInput" - ], - "params": [ - { - "name": "Timestamp", - "type": 8 - } - ], - "def": { - "composite": { - "fields": [ - { - "name": "description", - "type": 10, - "typeName": "Vec", - "docs": [] - }, - { - "name": "end_time", - "type": 8, - "typeName": "Timestamp", - "docs": [] - }, - { - "name": "poll_alternatives", - "type": 76, - "typeName": "Vec>", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 76, - "type": { - "path": [], - "params": [], - "def": { - "sequence": { - "type": 10 - } - }, - "docs": [] - } - }, - { - "id": 77, - "type": { - "path": [ - "Option" - ], - "params": [ - { - "name": "T", - "type": 75 - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "None", - "fields": [], - "index": 0, - "docs": [] - }, - { - "name": "Some", - "fields": [ - { - "name": null, - "type": 75, - "typeName": null, - "docs": [] - } - ], - "index": 1, - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 78, - "type": { - "path": [ - "BTreeMap" - ], - "params": [ - { - "name": "K", - "type": 74 - }, - { - "name": "V", - "type": 34 - } - ], - "def": { - "composite": { - "fields": [ - { - "name": null, - "type": 79, - "typeName": null, - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 79, - "type": { - "path": [], - "params": [], - "def": { - "sequence": { - "type": 80 - } - }, - "docs": [] - } - }, - { - "id": 80, - "type": { - "path": [], - "params": [], - "def": { - "tuple": [ - 74, - 34 - ] - }, - "docs": [] - } - }, - { - "id": 81, - "type": { - "path": [ - "pallet_constitution", - "Event" - ], - "params": [], - "def": { - "variant": { - "variants": [ - { - "name": "ConstutionAmended", - "fields": [ - { - "name": null, - "type": 10, - "typeName": "Vec", - "docs": [] - }, - { - "name": null, - "type": 10, - "typeName": "Vec", - "docs": [] - } - ], - "index": 0, - "docs": [ - "Emits on constitution amendment.", - "Parameters:", - "- constitution text hash", - "- constitution text" - ] - } - ] - } - }, - "docs": [ - "Events for this module.", - "" - ] - } - }, - { - "id": 82, - "type": { - "path": [ - "pallet_utility", - "RawEvent" - ], - "params": [ - { - "name": "Balance", - "type": 6 - }, - { - "name": "AccountId", - "type": 0 - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "Signaled", - "fields": [ - { - "name": null, - "type": 10, - "typeName": "Vec", - "docs": [] - } - ], - "index": 0, - "docs": [ - "A signal proposal was executed", - "Params:", - "- Signal given when creating the corresponding proposal" - ] - }, - { - "name": "RuntimeUpgraded", - "fields": [ - { - "name": null, - "type": 10, - "typeName": "Vec", - "docs": [] - } - ], - "index": 1, - "docs": [ - "A runtime upgrade was executed", - "Params:", - "- New code encoded in bytes" - ] - }, - { - "name": "UpdatedWorkingGroupBudget", - "fields": [ - { - "name": null, - "type": 83, - "typeName": "WorkingGroup", - "docs": [] - }, - { - "name": null, - "type": 6, - "typeName": "Balance", - "docs": [] - }, - { - "name": null, - "type": 84, - "typeName": "BalanceKind", - "docs": [] - } - ], - "index": 2, - "docs": [ - "An `Update Working Group Budget` proposal was executed", - "Params:", - "- Working group which budget is being updated", - "- Amount of balance being moved", - "- Enum variant with positive indicating funds moved torwards working group and negative", - "and negative funds moving from the working group" - ] - }, - { - "name": "TokensBurned", - "fields": [ - { - "name": null, - "type": 0, - "typeName": "AccountId", - "docs": [] - }, - { - "name": null, - "type": 6, - "typeName": "Balance", - "docs": [] - } - ], - "index": 3, - "docs": [ - "An account burned tokens", - "Params:", - "- Account Id of the burning tokens", - "- Balance burned from that account" - ] - } - ] - } - }, - "docs": [ - "Events for this module.", - "" - ] - } - }, - { - "id": 83, - "type": { - "path": [ - "pallet_common", - "working_group", - "WorkingGroup" - ], - "params": [], - "def": { - "variant": { - "variants": [ - { - "name": "Forum", - "fields": [], - "index": 0, - "docs": [] - }, - { - "name": "Storage", - "fields": [], - "index": 1, - "docs": [] - }, - { - "name": "Content", - "fields": [], - "index": 2, - "docs": [] - }, - { - "name": "OperationsAlpha", - "fields": [], - "index": 3, - "docs": [] - }, - { - "name": "App", - "fields": [], - "index": 4, - "docs": [] - }, - { - "name": "Distribution", - "fields": [], - "index": 5, - "docs": [] - }, - { - "name": "OperationsBeta", - "fields": [], - "index": 6, - "docs": [] - }, - { - "name": "OperationsGamma", - "fields": [], - "index": 7, - "docs": [] - }, - { - "name": "Membership", - "fields": [], - "index": 8, - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 84, - "type": { - "path": [ - "pallet_common", - "BalanceKind" - ], - "params": [], - "def": { - "variant": { - "variants": [ - { - "name": "Positive", - "fields": [], - "index": 0, - "docs": [] - }, - { - "name": "Negative", - "fields": [], - "index": 1, - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 85, - "type": { - "path": [ - "pallet_content", - "RawEvent" - ], - "params": [ - { - "name": "ContentActor", - "type": 86 - }, - { - "name": "MemberId", - "type": 8 - }, - { - "name": "CuratorGroupId", - "type": 8 - }, - { - "name": "CuratorId", - "type": 8 - }, - { - "name": "VideoId", - "type": 8 - }, - { - "name": "ChannelId", - "type": 8 - }, - { - "name": "Channel", - "type": 87 - }, - { - "name": "DataObjectId", - "type": 8 - }, - { - "name": "EnglishAuctionParams", - "type": 104 - }, - { - "name": "OpenAuctionParams", - "type": 107 - }, - { - "name": "OpenAuctionId", - "type": 8 - }, - { - "name": "NftIssuanceParameters", - "type": 108 - }, - { - "name": "Balance", - "type": 6 - }, - { - "name": "ChannelCreationParameters", - "type": 111 - }, - { - "name": "ChannelUpdateParameters", - "type": 119 - }, - { - "name": "VideoCreationParameters", - "type": 121 - }, - { - "name": "VideoUpdateParameters", - "type": 123 - }, - { - "name": "ChannelPrivilegeLevel", - "type": 2 - }, - { - "name": "ModerationPermissionsByLevel", - "type": 124 - }, - { - "name": "TransferCommitment", - "type": 100 - }, - { - "name": "PendingTransfer", - "type": 99 - }, - { - "name": "AccountId", - "type": 0 - }, - { - "name": "UpdateChannelPayoutsParameters", - "type": 130 - }, - { - "name": "TokenId", - "type": 8 - }, - { - "name": "ChannelFundsDestination", - "type": 135 - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "CuratorGroupCreated", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "CuratorGroupId", - "docs": [] - } - ], - "index": 0, - "docs": [] - }, - { - "name": "CuratorGroupPermissionsUpdated", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "CuratorGroupId", - "docs": [] - }, - { - "name": null, - "type": 124, - "typeName": "ModerationPermissionsByLevel", - "docs": [] - } - ], - "index": 1, - "docs": [] - }, - { - "name": "CuratorGroupStatusSet", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "CuratorGroupId", - "docs": [] - }, - { - "name": null, - "type": 34, - "typeName": "bool", - "docs": [] - } - ], - "index": 2, - "docs": [] - }, - { - "name": "CuratorAdded", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "CuratorGroupId", - "docs": [] - }, - { - "name": null, - "type": 8, - "typeName": "CuratorId", - "docs": [] - }, - { - "name": null, - "type": 90, - "typeName": "ChannelAgentPermissions", - "docs": [] - } - ], - "index": 3, - "docs": [] - }, - { - "name": "CuratorRemoved", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "CuratorGroupId", - "docs": [] - }, - { - "name": null, - "type": 8, - "typeName": "CuratorId", - "docs": [] - } - ], - "index": 4, - "docs": [] - }, - { - "name": "ChannelCreated", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "ChannelId", - "docs": [] - }, - { - "name": null, - "type": 87, - "typeName": "Channel", - "docs": [] - }, - { - "name": null, - "type": 111, - "typeName": "ChannelCreationParameters", - "docs": [] - } - ], - "index": 5, - "docs": [] - }, - { - "name": "ChannelUpdated", - "fields": [ - { - "name": null, - "type": 86, - "typeName": "ContentActor", - "docs": [] - }, - { - "name": null, - "type": 8, - "typeName": "ChannelId", - "docs": [] - }, - { - "name": null, - "type": 119, - "typeName": "ChannelUpdateParameters", - "docs": [] - }, - { - "name": null, - "type": 101, - "typeName": "BTreeSet", - "docs": [] - } - ], - "index": 6, - "docs": [] - }, - { - "name": "ChannelPrivilegeLevelUpdated", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "ChannelId", - "docs": [] - }, - { - "name": null, - "type": 2, - "typeName": "ChannelPrivilegeLevel", - "docs": [] - } - ], - "index": 7, - "docs": [] - }, - { - "name": "ChannelStateBloatBondValueUpdated", - "fields": [ - { - "name": null, - "type": 6, - "typeName": "Balance", - "docs": [] - } - ], - "index": 8, - "docs": [] - }, - { - "name": "VideoStateBloatBondValueUpdated", - "fields": [ - { - "name": null, - "type": 6, - "typeName": "Balance", - "docs": [] - } - ], - "index": 9, - "docs": [] - }, - { - "name": "ChannelAssetsRemoved", - "fields": [ - { - "name": null, - "type": 86, - "typeName": "ContentActor", - "docs": [] - }, - { - "name": null, - "type": 8, - "typeName": "ChannelId", - "docs": [] - }, - { - "name": null, - "type": 101, - "typeName": "BTreeSet", - "docs": [] - }, - { - "name": null, - "type": 87, - "typeName": "Channel", - "docs": [] - } - ], - "index": 10, - "docs": [] - }, - { - "name": "ChannelDeleted", - "fields": [ - { - "name": null, - "type": 86, - "typeName": "ContentActor", - "docs": [] - }, - { - "name": null, - "type": 8, - "typeName": "ChannelId", - "docs": [] - } - ], - "index": 11, - "docs": [] - }, - { - "name": "ChannelDeletedByModerator", - "fields": [ - { - "name": null, - "type": 86, - "typeName": "ContentActor", - "docs": [] - }, - { - "name": null, - "type": 8, - "typeName": "ChannelId", - "docs": [] - }, - { - "name": null, - "type": 10, - "typeName": "Vec", - "docs": [] - } - ], - "index": 12, - "docs": [] - }, - { - "name": "ChannelVisibilitySetByModerator", - "fields": [ - { - "name": null, - "type": 86, - "typeName": "ContentActor", - "docs": [] - }, - { - "name": null, - "type": 8, - "typeName": "ChannelId", - "docs": [] - }, - { - "name": null, - "type": 34, - "typeName": "bool", - "docs": [] - }, - { - "name": null, - "type": 10, - "typeName": "Vec", - "docs": [] - } - ], - "index": 13, - "docs": [] - }, - { - "name": "ChannelPausedFeaturesUpdatedByModerator", - "fields": [ - { - "name": null, - "type": 86, - "typeName": "ContentActor", - "docs": [] - }, - { - "name": null, - "type": 8, - "typeName": "ChannelId", - "docs": [] - }, - { - "name": null, - "type": 95, - "typeName": "BTreeSet", - "docs": [] - }, - { - "name": null, - "type": 10, - "typeName": "Vec", - "docs": [] - } - ], - "index": 14, - "docs": [] - }, - { - "name": "ChannelAssetsDeletedByModerator", - "fields": [ - { - "name": null, - "type": 86, - "typeName": "ContentActor", - "docs": [] - }, - { - "name": null, - "type": 8, - "typeName": "ChannelId", - "docs": [] - }, - { - "name": null, - "type": 101, - "typeName": "BTreeSet", - "docs": [] - }, - { - "name": null, - "type": 10, - "typeName": "Vec", - "docs": [] - } - ], - "index": 15, - "docs": [] - }, - { - "name": "ChannelFundsWithdrawn", - "fields": [ - { - "name": null, - "type": 86, - "typeName": "ContentActor", - "docs": [] - }, - { - "name": null, - "type": 8, - "typeName": "ChannelId", - "docs": [] - }, - { - "name": null, - "type": 6, - "typeName": "Balance", - "docs": [] - }, - { - "name": null, - "type": 135, - "typeName": "ChannelFundsDestination", - "docs": [] - } - ], - "index": 16, - "docs": [] - }, - { - "name": "ChannelRewardClaimedAndWithdrawn", - "fields": [ - { - "name": null, - "type": 86, - "typeName": "ContentActor", - "docs": [] - }, - { - "name": null, - "type": 8, - "typeName": "ChannelId", - "docs": [] - }, - { - "name": null, - "type": 6, - "typeName": "Balance", - "docs": [] - }, - { - "name": null, - "type": 135, - "typeName": "ChannelFundsDestination", - "docs": [] - } - ], - "index": 17, - "docs": [] - }, - { - "name": "VideoCreated", - "fields": [ - { - "name": null, - "type": 86, - "typeName": "ContentActor", - "docs": [] - }, - { - "name": null, - "type": 8, - "typeName": "ChannelId", - "docs": [] - }, - { - "name": null, - "type": 8, - "typeName": "VideoId", - "docs": [] - }, - { - "name": null, - "type": 121, - "typeName": "VideoCreationParameters", - "docs": [] - }, - { - "name": null, - "type": 101, - "typeName": "BTreeSet", - "docs": [] - } - ], - "index": 18, - "docs": [] - }, - { - "name": "VideoUpdated", - "fields": [ - { - "name": null, - "type": 86, - "typeName": "ContentActor", - "docs": [] - }, - { - "name": null, - "type": 8, - "typeName": "VideoId", - "docs": [] - }, - { - "name": null, - "type": 123, - "typeName": "VideoUpdateParameters", - "docs": [] - }, - { - "name": null, - "type": 101, - "typeName": "BTreeSet", - "docs": [] - } - ], - "index": 19, - "docs": [] - }, - { - "name": "VideoDeleted", - "fields": [ - { - "name": null, - "type": 86, - "typeName": "ContentActor", - "docs": [] - }, - { - "name": null, - "type": 8, - "typeName": "VideoId", - "docs": [] - } - ], - "index": 20, - "docs": [] - }, - { - "name": "VideoDeletedByModerator", - "fields": [ - { - "name": null, - "type": 86, - "typeName": "ContentActor", - "docs": [] - }, - { - "name": null, - "type": 8, - "typeName": "VideoId", - "docs": [] - }, - { - "name": null, - "type": 10, - "typeName": "Vec", - "docs": [] - } - ], - "index": 21, - "docs": [] - }, - { - "name": "VideoVisibilitySetByModerator", - "fields": [ - { - "name": null, - "type": 86, - "typeName": "ContentActor", - "docs": [] - }, - { - "name": null, - "type": 8, - "typeName": "VideoId", - "docs": [] - }, - { - "name": null, - "type": 34, - "typeName": "bool", - "docs": [] - }, - { - "name": null, - "type": 10, - "typeName": "Vec", - "docs": [] - } - ], - "index": 22, - "docs": [] - }, - { - "name": "VideoAssetsDeletedByModerator", - "fields": [ - { - "name": null, - "type": 86, - "typeName": "ContentActor", - "docs": [] - }, - { - "name": null, - "type": 8, - "typeName": "VideoId", - "docs": [] - }, - { - "name": null, - "type": 101, - "typeName": "BTreeSet", - "docs": [] - }, - { - "name": null, - "type": 34, - "typeName": "bool", - "docs": [] - }, - { - "name": null, - "type": 10, - "typeName": "Vec", - "docs": [] - } - ], - "index": 23, - "docs": [] - }, - { - "name": "ChannelPayoutsUpdated", - "fields": [ - { - "name": null, - "type": 130, - "typeName": "UpdateChannelPayoutsParameters", - "docs": [] - }, - { - "name": null, - "type": 70, - "typeName": "Option", - "docs": [] - } - ], - "index": 24, - "docs": [] - }, - { - "name": "ChannelRewardUpdated", - "fields": [ - { - "name": null, - "type": 6, - "typeName": "Balance", - "docs": [] - }, - { - "name": null, - "type": 8, - "typeName": "ChannelId", - "docs": [] - } - ], - "index": 25, - "docs": [] - }, - { - "name": "CouncilRewardClaimed", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "ChannelId", - "docs": [] - }, - { - "name": null, - "type": 6, - "typeName": "Balance", - "docs": [] - } - ], - "index": 26, - "docs": [] - }, - { - "name": "EnglishAuctionStarted", - "fields": [ - { - "name": null, - "type": 86, - "typeName": "ContentActor", - "docs": [] - }, - { - "name": null, - "type": 8, - "typeName": "VideoId", - "docs": [] - }, - { - "name": null, - "type": 104, - "typeName": "EnglishAuctionParams", - "docs": [] - } - ], - "index": 27, - "docs": [] - }, - { - "name": "OpenAuctionStarted", - "fields": [ - { - "name": null, - "type": 86, - "typeName": "ContentActor", - "docs": [] - }, - { - "name": null, - "type": 8, - "typeName": "VideoId", - "docs": [] - }, - { - "name": null, - "type": 107, - "typeName": "OpenAuctionParams", - "docs": [] - }, - { - "name": null, - "type": 8, - "typeName": "OpenAuctionId", - "docs": [] - } - ], - "index": 28, - "docs": [] - }, - { - "name": "NftIssued", - "fields": [ - { - "name": null, - "type": 86, - "typeName": "ContentActor", - "docs": [] - }, - { - "name": null, - "type": 8, - "typeName": "VideoId", - "docs": [] - }, - { - "name": null, - "type": 108, - "typeName": "NftIssuanceParameters", - "docs": [] - } - ], - "index": 29, - "docs": [] - }, - { - "name": "NftDestroyed", - "fields": [ - { - "name": null, - "type": 86, - "typeName": "ContentActor", - "docs": [] - }, - { - "name": null, - "type": 8, - "typeName": "VideoId", - "docs": [] - } - ], - "index": 30, - "docs": [] - }, - { - "name": "AuctionBidMade", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "MemberId", - "docs": [] - }, - { - "name": null, - "type": 8, - "typeName": "VideoId", - "docs": [] - }, - { - "name": null, - "type": 6, - "typeName": "Balance", - "docs": [] - }, - { - "name": null, - "type": 70, - "typeName": "Option", - "docs": [] - } - ], - "index": 31, - "docs": [] - }, - { - "name": "AuctionBidCanceled", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "MemberId", - "docs": [] - }, - { - "name": null, - "type": 8, - "typeName": "VideoId", - "docs": [] - } - ], - "index": 32, - "docs": [] - }, - { - "name": "AuctionCanceled", - "fields": [ - { - "name": null, - "type": 86, - "typeName": "ContentActor", - "docs": [] - }, - { - "name": null, - "type": 8, - "typeName": "VideoId", - "docs": [] - } - ], - "index": 33, - "docs": [] - }, - { - "name": "EnglishAuctionSettled", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "MemberId", - "docs": [] - }, - { - "name": null, - "type": 0, - "typeName": "AccountId", - "docs": [] - }, - { - "name": null, - "type": 8, - "typeName": "VideoId", - "docs": [] - } - ], - "index": 34, - "docs": [] - }, - { - "name": "BidMadeCompletingAuction", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "MemberId", - "docs": [] - }, - { - "name": null, - "type": 8, - "typeName": "VideoId", - "docs": [] - }, - { - "name": null, - "type": 70, - "typeName": "Option", - "docs": [] - } - ], - "index": 35, - "docs": [] - }, - { - "name": "OpenAuctionBidAccepted", - "fields": [ - { - "name": null, - "type": 86, - "typeName": "ContentActor", - "docs": [] - }, - { - "name": null, - "type": 8, - "typeName": "VideoId", - "docs": [] - }, - { - "name": null, - "type": 8, - "typeName": "MemberId", - "docs": [] - }, - { - "name": null, - "type": 6, - "typeName": "Balance", - "docs": [] - } - ], - "index": 36, - "docs": [] - }, - { - "name": "OfferStarted", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "VideoId", - "docs": [] - }, - { - "name": null, - "type": 86, - "typeName": "ContentActor", - "docs": [] - }, - { - "name": null, - "type": 8, - "typeName": "MemberId", - "docs": [] - }, - { - "name": null, - "type": 105, - "typeName": "Option", - "docs": [] - } - ], - "index": 37, - "docs": [] - }, - { - "name": "OfferAccepted", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "VideoId", - "docs": [] - } - ], - "index": 38, - "docs": [] - }, - { - "name": "OfferCanceled", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "VideoId", - "docs": [] - }, - { - "name": null, - "type": 86, - "typeName": "ContentActor", - "docs": [] - } - ], - "index": 39, - "docs": [] - }, - { - "name": "NftSellOrderMade", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "VideoId", - "docs": [] - }, - { - "name": null, - "type": 86, - "typeName": "ContentActor", - "docs": [] - }, - { - "name": null, - "type": 6, - "typeName": "Balance", - "docs": [] - } - ], - "index": 40, - "docs": [] - }, - { - "name": "NftBought", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "VideoId", - "docs": [] - }, - { - "name": null, - "type": 8, - "typeName": "MemberId", - "docs": [] - } - ], - "index": 41, - "docs": [] - }, - { - "name": "BuyNowCanceled", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "VideoId", - "docs": [] - }, - { - "name": null, - "type": 86, - "typeName": "ContentActor", - "docs": [] - } - ], - "index": 42, - "docs": [] - }, - { - "name": "BuyNowPriceUpdated", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "VideoId", - "docs": [] - }, - { - "name": null, - "type": 86, - "typeName": "ContentActor", - "docs": [] - }, - { - "name": null, - "type": 6, - "typeName": "Balance", - "docs": [] - } - ], - "index": 43, - "docs": [] - }, - { - "name": "NftSlingedBackToTheOriginalArtist", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "VideoId", - "docs": [] - }, - { - "name": null, - "type": 86, - "typeName": "ContentActor", - "docs": [] - } - ], - "index": 44, - "docs": [] - }, - { - "name": "ChannelOwnerRemarked", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "ChannelId", - "docs": [] - }, - { - "name": null, - "type": 10, - "typeName": "Vec", - "docs": [] - } - ], - "index": 45, - "docs": [ - "Metaprotocols related event" - ] - }, - { - "name": "ChannelAgentRemarked", - "fields": [ - { - "name": null, - "type": 86, - "typeName": "ContentActor", - "docs": [] - }, - { - "name": null, - "type": 8, - "typeName": "ChannelId", - "docs": [] - }, - { - "name": null, - "type": 10, - "typeName": "Vec", - "docs": [] - } - ], - "index": 46, - "docs": [] - }, - { - "name": "NftOwnerRemarked", - "fields": [ - { - "name": null, - "type": 86, - "typeName": "ContentActor", - "docs": [] - }, - { - "name": null, - "type": 8, - "typeName": "VideoId", - "docs": [] - }, - { - "name": null, - "type": 10, - "typeName": "Vec", - "docs": [] - } - ], - "index": 47, - "docs": [] - }, - { - "name": "InitializedChannelTransfer", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "ChannelId", - "docs": [] - }, - { - "name": null, - "type": 86, - "typeName": "ContentActor", - "docs": [] - }, - { - "name": null, - "type": 99, - "typeName": "PendingTransfer", - "docs": [] - } - ], - "index": 48, - "docs": [] - }, - { - "name": "CancelChannelTransfer", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "ChannelId", - "docs": [] - }, - { - "name": null, - "type": 86, - "typeName": "ContentActor", - "docs": [] - } - ], - "index": 49, - "docs": [] - }, - { - "name": "ChannelTransferAccepted", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "ChannelId", - "docs": [] - }, - { - "name": null, - "type": 100, - "typeName": "TransferCommitment", - "docs": [] - } - ], - "index": 50, - "docs": [] - }, - { - "name": "GlobalNftLimitUpdated", - "fields": [ - { - "name": null, - "type": 136, - "typeName": "NftLimitPeriod", - "docs": [] - }, - { - "name": null, - "type": 8, - "typeName": "u64", - "docs": [] - } - ], - "index": 51, - "docs": [] - }, - { - "name": "ChannelNftLimitUpdated", - "fields": [ - { - "name": null, - "type": 86, - "typeName": "ContentActor", - "docs": [] - }, - { - "name": null, - "type": 136, - "typeName": "NftLimitPeriod", - "docs": [] - }, - { - "name": null, - "type": 8, - "typeName": "ChannelId", - "docs": [] - }, - { - "name": null, - "type": 8, - "typeName": "u64", - "docs": [] - } - ], - "index": 52, - "docs": [] - }, - { - "name": "ToggledNftLimits", - "fields": [ - { - "name": null, - "type": 34, - "typeName": "bool", - "docs": [] - } - ], - "index": 53, - "docs": [] - }, - { - "name": "CreatorTokenIssued", - "fields": [ - { - "name": null, - "type": 86, - "typeName": "ContentActor", - "docs": [] - }, - { - "name": null, - "type": 8, - "typeName": "ChannelId", - "docs": [] - }, - { - "name": null, - "type": 8, - "typeName": "TokenId", - "docs": [] - } - ], - "index": 54, - "docs": [] - } - ] - } - }, - "docs": [ - "Events for this module.", - "" - ] - } - }, - { - "id": 86, - "type": { - "path": [ - "pallet_content", - "permissions", - "ContentActor" - ], - "params": [ - { - "name": "CuratorGroupId", - "type": 8 - }, - { - "name": "CuratorId", - "type": 8 - }, - { - "name": "MemberId", - "type": 8 - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "Curator", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "CuratorGroupId", - "docs": [] - }, - { - "name": null, - "type": 8, - "typeName": "CuratorId", - "docs": [] - } - ], - "index": 0, - "docs": [] - }, - { - "name": "Member", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "MemberId", - "docs": [] - } - ], - "index": 1, - "docs": [] - }, - { - "name": "Lead", - "fields": [], - "index": 2, - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 87, - "type": { - "path": [ - "pallet_content", - "types", - "ChannelRecord" - ], - "params": [ - { - "name": "MemberId", - "type": 8 - }, - { - "name": "CuratorGroupId", - "type": 8 - }, - { - "name": "Balance", - "type": 6 - }, - { - "name": "ChannelPrivilegeLevel", - "type": 2 - }, - { - "name": "DataObjectId", - "type": 8 - }, - { - "name": "BlockNumber", - "type": 4 - }, - { - "name": "TokenId", - "type": 8 - }, - { - "name": "TransferId", - "type": 8 - } - ], - "def": { - "composite": { - "fields": [ - { - "name": "owner", - "type": 88, - "typeName": "ChannelOwner", - "docs": [] - }, - { - "name": "num_videos", - "type": 8, - "typeName": "u64", - "docs": [] - }, - { - "name": "collaborators", - "type": 89, - "typeName": "BTreeMap", - "docs": [] - }, - { - "name": "cumulative_reward_claimed", - "type": 6, - "typeName": "Balance", - "docs": [] - }, - { - "name": "privilege_level", - "type": 2, - "typeName": "ChannelPrivilegeLevel", - "docs": [] - }, - { - "name": "paused_features", - "type": 95, - "typeName": "BTreeSet", - "docs": [] - }, - { - "name": "transfer_status", - "type": 98, - "typeName": "ChannelTransferStatus", - "docs": [] - }, - { - "name": "data_objects", - "type": 101, - "typeName": "BTreeSet", - "docs": [] - }, - { - "name": "daily_nft_limit", - "type": 102, - "typeName": "LimitPerPeriod", - "docs": [] - }, - { - "name": "weekly_nft_limit", - "type": 102, - "typeName": "LimitPerPeriod", - "docs": [] - }, - { - "name": "daily_nft_counter", - "type": 103, - "typeName": "NftCounter", - "docs": [] - }, - { - "name": "weekly_nft_counter", - "type": 103, - "typeName": "NftCounter", - "docs": [] - }, - { - "name": "creator_token_id", - "type": 70, - "typeName": "Option", - "docs": [] - }, - { - "name": "channel_state_bloat_bond", - "type": 6, - "typeName": "Balance", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 88, - "type": { - "path": [ - "pallet_content", - "types", - "ChannelOwner" - ], - "params": [ - { - "name": "MemberId", - "type": 8 - }, - { - "name": "CuratorGroupId", - "type": 8 - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "Member", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "MemberId", - "docs": [] - } - ], - "index": 0, - "docs": [] - }, - { - "name": "CuratorGroup", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "CuratorGroupId", - "docs": [] - } - ], - "index": 1, - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 89, - "type": { - "path": [ - "BTreeMap" - ], - "params": [ - { - "name": "K", - "type": 8 - }, - { - "name": "V", - "type": 90 - } - ], - "def": { - "composite": { - "fields": [ - { - "name": null, - "type": 93, - "typeName": null, - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 90, - "type": { - "path": [ - "BTreeSet" - ], - "params": [ - { - "name": "T", - "type": 91 - } - ], - "def": { - "composite": { - "fields": [ - { - "name": null, - "type": 92, - "typeName": null, - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 91, - "type": { - "path": [ - "pallet_content", - "types", - "ChannelActionPermission" - ], - "params": [], - "def": { - "variant": { - "variants": [ - { - "name": "UpdateChannelMetadata", - "fields": [], - "index": 0, - "docs": [] - }, - { - "name": "ManageNonVideoChannelAssets", - "fields": [], - "index": 1, - "docs": [] - }, - { - "name": "ManageChannelCollaborators", - "fields": [], - "index": 2, - "docs": [] - }, - { - "name": "UpdateVideoMetadata", - "fields": [], - "index": 3, - "docs": [] - }, - { - "name": "AddVideo", - "fields": [], - "index": 4, - "docs": [] - }, - { - "name": "ManageVideoAssets", - "fields": [], - "index": 5, - "docs": [] - }, - { - "name": "DeleteChannel", - "fields": [], - "index": 6, - "docs": [] - }, - { - "name": "DeleteVideo", - "fields": [], - "index": 7, - "docs": [] - }, - { - "name": "ManageVideoNfts", - "fields": [], - "index": 8, - "docs": [] - }, - { - "name": "AgentRemark", - "fields": [], - "index": 9, - "docs": [] - }, - { - "name": "TransferChannel", - "fields": [], - "index": 10, - "docs": [] - }, - { - "name": "ClaimChannelReward", - "fields": [], - "index": 11, - "docs": [] - }, - { - "name": "WithdrawFromChannelBalance", - "fields": [], - "index": 12, - "docs": [] - }, - { - "name": "IssueCreatorToken", - "fields": [], - "index": 13, - "docs": [] - }, - { - "name": "ClaimCreatorTokenPatronage", - "fields": [], - "index": 14, - "docs": [] - }, - { - "name": "InitAndManageCreatorTokenSale", - "fields": [], - "index": 15, - "docs": [] - }, - { - "name": "CreatorTokenIssuerTransfer", - "fields": [], - "index": 16, - "docs": [] - }, - { - "name": "MakeCreatorTokenPermissionless", - "fields": [], - "index": 17, - "docs": [] - }, - { - "name": "ReduceCreatorTokenPatronageRate", - "fields": [], - "index": 18, - "docs": [] - }, - { - "name": "ManageRevenueSplits", - "fields": [], - "index": 19, - "docs": [] - }, - { - "name": "DeissueCreatorToken", - "fields": [], - "index": 20, - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 92, - "type": { - "path": [], - "params": [], - "def": { - "sequence": { - "type": 91 - } - }, - "docs": [] - } - }, - { - "id": 93, - "type": { - "path": [], - "params": [], - "def": { - "sequence": { - "type": 94 - } - }, - "docs": [] - } - }, - { - "id": 94, - "type": { - "path": [], - "params": [], - "def": { - "tuple": [ - 8, - 90 - ] - }, - "docs": [] - } - }, - { - "id": 95, - "type": { - "path": [ - "BTreeSet" - ], - "params": [ - { - "name": "T", - "type": 96 - } - ], - "def": { - "composite": { - "fields": [ - { - "name": null, - "type": 97, - "typeName": null, - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 96, - "type": { - "path": [ - "pallet_content", - "permissions", - "curator_group", - "PausableChannelFeature" - ], - "params": [], - "def": { - "variant": { - "variants": [ - { - "name": "ChannelFundsTransfer", - "fields": [], - "index": 0, - "docs": [] - }, - { - "name": "CreatorCashout", - "fields": [], - "index": 1, - "docs": [] - }, - { - "name": "VideoNftIssuance", - "fields": [], - "index": 2, - "docs": [] - }, - { - "name": "VideoCreation", - "fields": [], - "index": 3, - "docs": [] - }, - { - "name": "VideoUpdate", - "fields": [], - "index": 4, - "docs": [] - }, - { - "name": "ChannelUpdate", - "fields": [], - "index": 5, - "docs": [] - }, - { - "name": "CreatorTokenIssuance", - "fields": [], - "index": 6, - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 97, - "type": { - "path": [], - "params": [], - "def": { - "sequence": { - "type": 96 - } - }, - "docs": [] - } - }, - { - "id": 98, - "type": { - "path": [ - "pallet_content", - "types", - "ChannelTransferStatus" - ], - "params": [ - { - "name": "MemberId", - "type": 8 - }, - { - "name": "CuratorGroupId", - "type": 8 - }, - { - "name": "Balance", - "type": 6 - }, - { - "name": "TransferId", - "type": 8 - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "NoActiveTransfer", - "fields": [], - "index": 0, - "docs": [] - }, - { - "name": "PendingTransfer", - "fields": [ - { - "name": null, - "type": 99, - "typeName": "PendingTransfer", - "docs": [] - } - ], - "index": 1, - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 99, - "type": { - "path": [ - "pallet_content", - "types", - "PendingTransfer" - ], - "params": [ - { - "name": "MemberId", - "type": 8 - }, - { - "name": "CuratorGroupId", - "type": 8 - }, - { - "name": "Balance", - "type": 6 - }, - { - "name": "TransferId", - "type": 8 - } - ], - "def": { - "composite": { - "fields": [ - { - "name": "new_owner", - "type": 88, - "typeName": "ChannelOwner", - "docs": [] - }, - { - "name": "transfer_params", - "type": 100, - "typeName": "TransferCommitmentParameters", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 100, - "type": { - "path": [ - "pallet_content", - "types", - "TransferCommitmentParameters" - ], - "params": [ - { - "name": "MemberId", - "type": 8 - }, - { - "name": "Balance", - "type": 6 - }, - { - "name": "TransferId", - "type": 8 - } - ], - "def": { - "composite": { - "fields": [ - { - "name": "new_collaborators", - "type": 89, - "typeName": "BTreeMap", - "docs": [] - }, - { - "name": "price", - "type": 6, - "typeName": "Balance", - "docs": [] - }, - { - "name": "transfer_id", - "type": 8, - "typeName": "TransferId", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 101, - "type": { - "path": [ - "BTreeSet" - ], - "params": [ - { - "name": "T", - "type": 8 - } - ], - "def": { - "composite": { - "fields": [ - { - "name": null, - "type": 62, - "typeName": null, - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 102, - "type": { - "path": [ - "pallet_content", - "types", - "LimitPerPeriod" - ], - "params": [ - { - "name": "BlockNumber", - "type": 4 - } - ], - "def": { - "composite": { - "fields": [ - { - "name": "limit", - "type": 8, - "typeName": "u64", - "docs": [] - }, - { - "name": "block_number_period", - "type": 4, - "typeName": "BlockNumber", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 103, - "type": { - "path": [ - "pallet_content", - "types", - "NftCounter" - ], - "params": [ - { - "name": "BlockNumber", - "type": 4 - } - ], - "def": { - "composite": { - "fields": [ - { - "name": "counter", - "type": 8, - "typeName": "u64", - "docs": [] - }, - { - "name": "last_updated", - "type": 4, - "typeName": "BlockNumber", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 104, - "type": { - "path": [ - "pallet_content", - "nft", - "types", - "EnglishAuctionParamsRecord" - ], - "params": [ - { - "name": "BlockNumber", - "type": 4 - }, - { - "name": "Balance", - "type": 6 - }, - { - "name": "MemberId", - "type": 8 - } - ], - "def": { - "composite": { - "fields": [ - { - "name": "starting_price", - "type": 6, - "typeName": "Balance", - "docs": [] - }, - { - "name": "buy_now_price", - "type": 105, - "typeName": "Option", - "docs": [] - }, - { - "name": "whitelist", - "type": 101, - "typeName": "BTreeSet", - "docs": [] - }, - { - "name": "starts_at", - "type": 106, - "typeName": "Option", - "docs": [] - }, - { - "name": "duration", - "type": 4, - "typeName": "BlockNumber", - "docs": [] - }, - { - "name": "extension_period", - "type": 4, - "typeName": "BlockNumber", - "docs": [] - }, - { - "name": "min_bid_step", - "type": 6, - "typeName": "Balance", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 105, - "type": { - "path": [ - "Option" - ], - "params": [ - { - "name": "T", - "type": 6 - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "None", - "fields": [], - "index": 0, - "docs": [] - }, - { - "name": "Some", - "fields": [ - { - "name": null, - "type": 6, - "typeName": null, - "docs": [] - } - ], - "index": 1, - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 106, - "type": { - "path": [ - "Option" - ], - "params": [ - { - "name": "T", - "type": 4 - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "None", - "fields": [], - "index": 0, - "docs": [] - }, - { - "name": "Some", - "fields": [ - { - "name": null, - "type": 4, - "typeName": null, - "docs": [] - } - ], - "index": 1, - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 107, - "type": { - "path": [ - "pallet_content", - "nft", - "types", - "OpenAuctionParamsRecord" - ], - "params": [ - { - "name": "BlockNumber", - "type": 4 - }, - { - "name": "Balance", - "type": 6 - }, - { - "name": "MemberId", - "type": 8 - } - ], - "def": { - "composite": { - "fields": [ - { - "name": "starting_price", - "type": 6, - "typeName": "Balance", - "docs": [] - }, - { - "name": "buy_now_price", - "type": 105, - "typeName": "Option", - "docs": [] - }, - { - "name": "starts_at", - "type": 106, - "typeName": "Option", - "docs": [] - }, - { - "name": "whitelist", - "type": 101, - "typeName": "BTreeSet", - "docs": [] - }, - { - "name": "bid_lock_duration", - "type": 4, - "typeName": "BlockNumber", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 108, - "type": { - "path": [ - "pallet_content", - "nft", - "types", - "NftIssuanceParametersRecord" - ], - "params": [ - { - "name": "MemberId", - "type": 8 - }, - { - "name": "InitTransactionalStatus", - "type": 109 - } - ], - "def": { - "composite": { - "fields": [ - { - "name": "royalty", - "type": 110, - "typeName": "Option", - "docs": [] - }, - { - "name": "nft_metadata", - "type": 10, - "typeName": "NftMetadata", - "docs": [] - }, - { - "name": "non_channel_owner", - "type": 70, - "typeName": "Option", - "docs": [] - }, - { - "name": "init_transactional_status", - "type": 109, - "typeName": "InitTransactionalStatus", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 109, - "type": { - "path": [ - "pallet_content", - "nft", - "types", - "InitTransactionalStatusRecord" - ], - "params": [ - { - "name": "EnglishAuctionParams", - "type": 104 - }, - { - "name": "OpenAuctionParams", - "type": 107 - }, - { - "name": "MemberId", - "type": 8 - }, - { - "name": "Balance", - "type": 6 - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "Idle", - "fields": [], - "index": 0, - "docs": [] - }, - { - "name": "BuyNow", - "fields": [ - { - "name": null, - "type": 6, - "typeName": "Balance", - "docs": [] - } - ], - "index": 1, - "docs": [] - }, - { - "name": "InitiatedOfferToMember", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "MemberId", - "docs": [] - }, - { - "name": null, - "type": 105, - "typeName": "Option", - "docs": [] - } - ], - "index": 2, - "docs": [] - }, - { - "name": "EnglishAuction", - "fields": [ - { - "name": null, - "type": 104, - "typeName": "EnglishAuctionParams", - "docs": [] - } - ], - "index": 3, - "docs": [] - }, - { - "name": "OpenAuction", - "fields": [ - { - "name": null, - "type": 107, - "typeName": "OpenAuctionParams", - "docs": [] - } - ], - "index": 4, - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 110, - "type": { - "path": [ - "Option" - ], - "params": [ - { - "name": "T", - "type": 39 - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "None", - "fields": [], - "index": 0, - "docs": [] - }, - { - "name": "Some", - "fields": [ - { - "name": null, - "type": 39, - "typeName": null, - "docs": [] - } - ], - "index": 1, - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 111, - "type": { - "path": [ - "pallet_content", - "types", - "ChannelCreationParametersRecord" - ], - "params": [ - { - "name": "StorageAssets", - "type": 112 - }, - { - "name": "MemberId", - "type": 8 - }, - { - "name": "StorageBucketId", - "type": 8 - }, - { - "name": "DistributionBucketId", - "type": 115 - }, - { - "name": "Balance", - "type": 6 - } - ], - "def": { - "composite": { - "fields": [ - { - "name": "assets", - "type": 116, - "typeName": "Option", - "docs": [] - }, - { - "name": "meta", - "type": 69, - "typeName": "Option>", - "docs": [] - }, - { - "name": "collaborators", - "type": 89, - "typeName": "BTreeMap", - "docs": [] - }, - { - "name": "storage_buckets", - "type": 101, - "typeName": "BTreeSet", - "docs": [] - }, - { - "name": "distribution_buckets", - "type": 117, - "typeName": "BTreeSet", - "docs": [] - }, - { - "name": "expected_channel_state_bloat_bond", - "type": 6, - "typeName": "Balance", - "docs": [] - }, - { - "name": "expected_data_object_state_bloat_bond", - "type": 6, - "typeName": "Balance", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 112, - "type": { - "path": [ - "pallet_content", - "types", - "StorageAssetsRecord" - ], - "params": [ - { - "name": "Balance", - "type": 6 - } - ], - "def": { - "composite": { - "fields": [ - { - "name": "object_creation_list", - "type": 113, - "typeName": "Vec", - "docs": [] - }, - { - "name": "expected_data_size_fee", - "type": 6, - "typeName": "Balance", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 113, - "type": { - "path": [], - "params": [], - "def": { - "sequence": { - "type": 114 - } - }, - "docs": [] - } - }, - { - "id": 114, - "type": { - "path": [ - "pallet_storage", - "DataObjectCreationParameters" - ], - "params": [], - "def": { - "composite": { - "fields": [ - { - "name": "size", - "type": 8, - "typeName": "u64", - "docs": [] - }, - { - "name": "ipfs_content_id", - "type": 10, - "typeName": "Vec", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 115, - "type": { - "path": [ - "pallet_storage", - "DistributionBucketIdRecord" - ], - "params": [ - { - "name": "DistributionBucketFamilyId", - "type": 8 - }, - { - "name": "DistributionBucketIndex", - "type": 8 - } - ], - "def": { - "composite": { - "fields": [ - { - "name": "distribution_bucket_family_id", - "type": 8, - "typeName": "DistributionBucketFamilyId", - "docs": [] - }, - { - "name": "distribution_bucket_index", - "type": 8, - "typeName": "DistributionBucketIndex", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 116, - "type": { - "path": [ - "Option" - ], - "params": [ - { - "name": "T", - "type": 112 - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "None", - "fields": [], - "index": 0, - "docs": [] - }, - { - "name": "Some", - "fields": [ - { - "name": null, - "type": 112, - "typeName": null, - "docs": [] - } - ], - "index": 1, - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 117, - "type": { - "path": [ - "BTreeSet" - ], - "params": [ - { - "name": "T", - "type": 115 - } - ], - "def": { - "composite": { - "fields": [ - { - "name": null, - "type": 118, - "typeName": null, - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 118, - "type": { - "path": [], - "params": [], - "def": { - "sequence": { - "type": 115 - } - }, - "docs": [] - } - }, - { - "id": 119, - "type": { - "path": [ - "pallet_content", - "types", - "ChannelUpdateParametersRecord" - ], - "params": [ - { - "name": "StorageAssets", - "type": 112 - }, - { - "name": "DataObjectId", - "type": 8 - }, - { - "name": "MemberId", - "type": 8 - }, - { - "name": "Balance", - "type": 6 - } - ], - "def": { - "composite": { - "fields": [ - { - "name": "assets_to_upload", - "type": 116, - "typeName": "Option", - "docs": [] - }, - { - "name": "new_meta", - "type": 69, - "typeName": "Option>", - "docs": [] - }, - { - "name": "assets_to_remove", - "type": 101, - "typeName": "BTreeSet", - "docs": [] - }, - { - "name": "collaborators", - "type": 120, - "typeName": "Option>", - "docs": [] - }, - { - "name": "expected_data_object_state_bloat_bond", - "type": 6, - "typeName": "Balance", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 120, - "type": { - "path": [ - "Option" - ], - "params": [ - { - "name": "T", - "type": 89 - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "None", - "fields": [], - "index": 0, - "docs": [] - }, - { - "name": "Some", - "fields": [ - { - "name": null, - "type": 89, - "typeName": null, - "docs": [] - } - ], - "index": 1, - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 121, - "type": { - "path": [ - "pallet_content", - "types", - "VideoCreationParametersRecord" - ], - "params": [ - { - "name": "StorageAssets", - "type": 112 - }, - { - "name": "NftIssuanceParameters", - "type": 108 - }, - { - "name": "Balance", - "type": 6 - } - ], - "def": { - "composite": { - "fields": [ - { - "name": "assets", - "type": 116, - "typeName": "Option", - "docs": [] - }, - { - "name": "meta", - "type": 69, - "typeName": "Option>", - "docs": [] - }, - { - "name": "auto_issue_nft", - "type": 122, - "typeName": "Option", - "docs": [] - }, - { - "name": "expected_video_state_bloat_bond", - "type": 6, - "typeName": "Balance", - "docs": [] - }, - { - "name": "expected_data_object_state_bloat_bond", - "type": 6, - "typeName": "Balance", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 122, - "type": { - "path": [ - "Option" - ], - "params": [ - { - "name": "T", - "type": 108 - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "None", - "fields": [], - "index": 0, - "docs": [] - }, - { - "name": "Some", - "fields": [ - { - "name": null, - "type": 108, - "typeName": null, - "docs": [] - } - ], - "index": 1, - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 123, - "type": { - "path": [ - "pallet_content", - "types", - "VideoUpdateParametersRecord" - ], - "params": [ - { - "name": "StorageAssets", - "type": 112 - }, - { - "name": "DataObjectId", - "type": 8 - }, - { - "name": "NftIssuanceParameters", - "type": 108 - }, - { - "name": "Balance", - "type": 6 - } - ], - "def": { - "composite": { - "fields": [ - { - "name": "assets_to_upload", - "type": 116, - "typeName": "Option", - "docs": [] - }, - { - "name": "new_meta", - "type": 69, - "typeName": "Option>", - "docs": [] - }, - { - "name": "assets_to_remove", - "type": 101, - "typeName": "BTreeSet", - "docs": [] - }, - { - "name": "auto_issue_nft", - "type": 122, - "typeName": "Option", - "docs": [] - }, - { - "name": "expected_data_object_state_bloat_bond", - "type": 6, - "typeName": "Balance", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 124, - "type": { - "path": [ - "BTreeMap" - ], - "params": [ - { - "name": "K", - "type": 2 - }, - { - "name": "V", - "type": 125 - } - ], - "def": { - "composite": { - "fields": [ - { - "name": null, - "type": 128, - "typeName": null, - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 125, - "type": { - "path": [ - "BTreeSet" - ], - "params": [ - { - "name": "T", - "type": 126 - } - ], - "def": { - "composite": { - "fields": [ - { - "name": null, - "type": 127, - "typeName": null, - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 126, - "type": { - "path": [ - "pallet_content", - "permissions", - "curator_group", - "ContentModerationAction" - ], - "params": [], - "def": { - "variant": { - "variants": [ - { - "name": "HideVideo", - "fields": [], - "index": 0, - "docs": [] - }, - { - "name": "HideChannel", - "fields": [], - "index": 1, - "docs": [] - }, - { - "name": "ChangeChannelFeatureStatus", - "fields": [ - { - "name": null, - "type": 96, - "typeName": "PausableChannelFeature", - "docs": [] - } - ], - "index": 2, - "docs": [] - }, - { - "name": "DeleteVideo", - "fields": [], - "index": 3, - "docs": [] - }, - { - "name": "DeleteChannel", - "fields": [], - "index": 4, - "docs": [] - }, - { - "name": "DeleteVideoAssets", - "fields": [ - { - "name": null, - "type": 34, - "typeName": "bool", - "docs": [] - } - ], - "index": 5, - "docs": [] - }, - { - "name": "DeleteNonVideoChannelAssets", - "fields": [], - "index": 6, - "docs": [] - }, - { - "name": "UpdateChannelNftLimits", - "fields": [], - "index": 7, - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 127, - "type": { - "path": [], - "params": [], - "def": { - "sequence": { - "type": 126 - } - }, - "docs": [] - } - }, - { - "id": 128, - "type": { - "path": [], - "params": [], - "def": { - "sequence": { - "type": 129 - } - }, - "docs": [] - } - }, - { - "id": 129, - "type": { - "path": [], - "params": [], - "def": { - "tuple": [ - 2, - 125 - ] - }, - "docs": [] - } - }, - { - "id": 130, - "type": { - "path": [ - "pallet_content", - "types", - "UpdateChannelPayoutsParametersRecord" - ], - "params": [ - { - "name": "ChannelPayoutsPayloadParameters", - "type": 131 - }, - { - "name": "Balance", - "type": 6 - }, - { - "name": "Hash", - "type": 9 - } - ], - "def": { - "composite": { - "fields": [ - { - "name": "commitment", - "type": 132, - "typeName": "Option", - "docs": [] - }, - { - "name": "payload", - "type": 133, - "typeName": "Option", - "docs": [] - }, - { - "name": "min_cashout_allowed", - "type": 105, - "typeName": "Option", - "docs": [] - }, - { - "name": "max_cashout_allowed", - "type": 105, - "typeName": "Option", - "docs": [] - }, - { - "name": "channel_cashouts_enabled", - "type": 134, - "typeName": "Option", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 131, - "type": { - "path": [ - "pallet_content", - "types", - "ChannelPayoutsPayloadParametersRecord" - ], - "params": [ - { - "name": "AccountId", - "type": 0 - }, - { - "name": "Balance", - "type": 6 - } - ], - "def": { - "composite": { - "fields": [ - { - "name": "uploader_account", - "type": 0, - "typeName": "AccountId", - "docs": [] - }, - { - "name": "object_creation_params", - "type": 114, - "typeName": "DataObjectCreationParameters", - "docs": [] - }, - { - "name": "expected_data_size_fee", - "type": 6, - "typeName": "Balance", - "docs": [] - }, - { - "name": "expected_data_object_state_bloat_bond", - "type": 6, - "typeName": "Balance", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 132, - "type": { - "path": [ - "Option" - ], - "params": [ - { - "name": "T", - "type": 9 - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "None", - "fields": [], - "index": 0, - "docs": [] - }, - { - "name": "Some", - "fields": [ - { - "name": null, - "type": 9, - "typeName": null, - "docs": [] - } - ], - "index": 1, - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 133, - "type": { - "path": [ - "Option" - ], - "params": [ - { - "name": "T", - "type": 131 - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "None", - "fields": [], - "index": 0, - "docs": [] - }, - { - "name": "Some", - "fields": [ - { - "name": null, - "type": 131, - "typeName": null, - "docs": [] - } - ], - "index": 1, - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 134, - "type": { - "path": [ - "Option" - ], - "params": [ - { - "name": "T", - "type": 34 - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "None", - "fields": [], - "index": 0, - "docs": [] - }, - { - "name": "Some", - "fields": [ - { - "name": null, - "type": 34, - "typeName": null, - "docs": [] - } - ], - "index": 1, - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 135, - "type": { - "path": [ - "pallet_content", - "types", - "ChannelFundsDestination" - ], - "params": [ - { - "name": "AccountId", - "type": 0 - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "AccountId", - "fields": [ - { - "name": null, - "type": 0, - "typeName": "AccountId", - "docs": [] - } - ], - "index": 0, - "docs": [] - }, - { - "name": "CouncilBudget", - "fields": [], - "index": 1, - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 136, - "type": { - "path": [ - "pallet_content", - "types", - "NftLimitPeriod" - ], - "params": [], - "def": { - "variant": { - "variants": [ - { - "name": "Daily", - "fields": [], - "index": 0, - "docs": [] - }, - { - "name": "Weekly", - "fields": [], - "index": 1, - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 137, - "type": { - "path": [ - "pallet_storage", - "RawEvent" - ], - "params": [ - { - "name": "StorageBucketId", - "type": 8 - }, - { - "name": "WorkerId", - "type": 8 - }, - { - "name": "DataObjectId", - "type": 8 - }, - { - "name": "UploadParameters", - "type": 138 - }, - { - "name": "BagId", - "type": 139 - }, - { - "name": "DynamicBagId", - "type": 141 - }, - { - "name": "AccountId", - "type": 0 - }, - { - "name": "Balance", - "type": 6 - }, - { - "name": "DistributionBucketFamilyId", - "type": 8 - }, - { - "name": "DistributionBucketId", - "type": 115 - }, - { - "name": "DistributionBucketIndex", - "type": 8 - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "StorageBucketCreated", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "StorageBucketId", - "docs": [] - }, - { - "name": null, - "type": 70, - "typeName": "Option", - "docs": [] - }, - { - "name": null, - "type": 34, - "typeName": "bool", - "docs": [] - }, - { - "name": null, - "type": 8, - "typeName": "u64", - "docs": [] - }, - { - "name": null, - "type": 8, - "typeName": "u64", - "docs": [] - } - ], - "index": 0, - "docs": [ - "Emits on creating the storage bucket.", - "Params", - "- storage bucket ID", - "- invited worker", - "- flag \"accepting_new_bags\"", - "- size limit for voucher,", - "- objects limit for voucher," - ] - }, - { - "name": "StorageBucketInvitationAccepted", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "StorageBucketId", - "docs": [] - }, - { - "name": null, - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": null, - "type": 0, - "typeName": "AccountId", - "docs": [] - } - ], - "index": 1, - "docs": [ - "Emits on accepting the storage bucket invitation.", - "Params", - "- storage bucket ID", - "- invited worker ID", - "- transactor account ID" - ] - }, - { - "name": "StorageBucketsUpdatedForBag", - "fields": [ - { - "name": null, - "type": 139, - "typeName": "BagId", - "docs": [] - }, - { - "name": null, - "type": 101, - "typeName": "BTreeSet", - "docs": [] - }, - { - "name": null, - "type": 101, - "typeName": "BTreeSet", - "docs": [] - } - ], - "index": 2, - "docs": [ - "Emits on updating storage buckets for bag.", - "Params", - "- bag ID", - "- storage buckets to add ID collection", - "- storage buckets to remove ID collection" - ] - }, - { - "name": "DataObjectsUploaded", - "fields": [ - { - "name": null, - "type": 62, - "typeName": "Vec", - "docs": [] - }, - { - "name": null, - "type": 138, - "typeName": "UploadParameters", - "docs": [] - }, - { - "name": null, - "type": 6, - "typeName": "Balance", - "docs": [] - } - ], - "index": 3, - "docs": [ - "Emits on uploading data objects.", - "Params", - "- data objects IDs", - "- initial uploading parameters", - "- state bloat bond for objects" - ] - }, - { - "name": "StorageOperatorMetadataSet", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "StorageBucketId", - "docs": [] - }, - { - "name": null, - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": null, - "type": 10, - "typeName": "Vec", - "docs": [] - } - ], - "index": 4, - "docs": [ - "Emits on setting the storage operator metadata.", - "Params", - "- storage bucket ID", - "- invited worker ID", - "- metadata" - ] - }, - { - "name": "StorageBucketVoucherLimitsSet", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "StorageBucketId", - "docs": [] - }, - { - "name": null, - "type": 8, - "typeName": "u64", - "docs": [] - }, - { - "name": null, - "type": 8, - "typeName": "u64", - "docs": [] - } - ], - "index": 5, - "docs": [ - "Emits on setting the storage bucket voucher limits.", - "Params", - "- storage bucket ID", - "- new total objects size limit", - "- new total objects number limit" - ] - }, - { - "name": "PendingDataObjectsAccepted", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "StorageBucketId", - "docs": [] - }, - { - "name": null, - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": null, - "type": 139, - "typeName": "BagId", - "docs": [] - }, - { - "name": null, - "type": 101, - "typeName": "BTreeSet", - "docs": [] - } - ], - "index": 6, - "docs": [ - "Emits on accepting pending data objects.", - "Params", - "- storage bucket ID", - "- worker ID (storage provider ID)", - "- bag ID", - "- pending data objects" - ] - }, - { - "name": "StorageBucketInvitationCancelled", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "StorageBucketId", - "docs": [] - } - ], - "index": 7, - "docs": [ - "Emits on cancelling the storage bucket invitation.", - "Params", - "- storage bucket ID" - ] - }, - { - "name": "StorageBucketOperatorInvited", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "StorageBucketId", - "docs": [] - }, - { - "name": null, - "type": 8, - "typeName": "WorkerId", - "docs": [] - } - ], - "index": 8, - "docs": [ - "Emits on the storage bucket operator invitation.", - "Params", - "- storage bucket ID", - "- operator worker ID (storage provider ID)" - ] - }, - { - "name": "StorageBucketOperatorRemoved", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "StorageBucketId", - "docs": [] - } - ], - "index": 9, - "docs": [ - "Emits on the storage bucket operator removal.", - "Params", - "- storage bucket ID" - ] - }, - { - "name": "UploadingBlockStatusUpdated", - "fields": [ - { - "name": null, - "type": 34, - "typeName": "bool", - "docs": [] - } - ], - "index": 10, - "docs": [ - "Emits on changing the size-based pricing of new objects uploaded.", - "Params", - "- new status" - ] - }, - { - "name": "DataObjectPerMegabyteFeeUpdated", - "fields": [ - { - "name": null, - "type": 6, - "typeName": "Balance", - "docs": [] - } - ], - "index": 11, - "docs": [ - "Emits on changing the size-based pricing of new objects uploaded.", - "Params", - "- new data size fee" - ] - }, - { - "name": "StorageBucketsPerBagLimitUpdated", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "u64", - "docs": [] - } - ], - "index": 12, - "docs": [ - "Emits on changing the \"Storage buckets per bag\" number limit.", - "Params", - "- new limit" - ] - }, - { - "name": "StorageBucketsVoucherMaxLimitsUpdated", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "u64", - "docs": [] - }, - { - "name": null, - "type": 8, - "typeName": "u64", - "docs": [] - } - ], - "index": 13, - "docs": [ - "Emits on changing the \"Storage buckets voucher max limits\".", - "Params", - "- new objects size limit", - "- new objects number limit" - ] - }, - { - "name": "DataObjectsMoved", - "fields": [ - { - "name": null, - "type": 139, - "typeName": "BagId", - "docs": [] - }, - { - "name": null, - "type": 139, - "typeName": "BagId", - "docs": [] - }, - { - "name": null, - "type": 101, - "typeName": "BTreeSet", - "docs": [] - } - ], - "index": 14, - "docs": [ - "Emits on moving data objects between bags.", - "Params", - "- source bag ID", - "- destination bag ID", - "- data object IDs" - ] - }, - { - "name": "DataObjectsDeleted", - "fields": [ - { - "name": null, - "type": 0, - "typeName": "AccountId", - "docs": [] - }, - { - "name": null, - "type": 139, - "typeName": "BagId", - "docs": [] - }, - { - "name": null, - "type": 101, - "typeName": "BTreeSet", - "docs": [] - } - ], - "index": 15, - "docs": [ - "Emits on data objects deletion from bags.", - "Params", - "- account ID for the state bloat bond", - "- bag ID", - "- data object IDs" - ] - }, - { - "name": "StorageBucketStatusUpdated", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "StorageBucketId", - "docs": [] - }, - { - "name": null, - "type": 34, - "typeName": "bool", - "docs": [] - } - ], - "index": 16, - "docs": [ - "Emits on storage bucket status update.", - "Params", - "- storage bucket ID", - "- new status" - ] - }, - { - "name": "UpdateBlacklist", - "fields": [ - { - "name": null, - "type": 142, - "typeName": "BTreeSet", - "docs": [] - }, - { - "name": null, - "type": 142, - "typeName": "BTreeSet", - "docs": [] - } - ], - "index": 17, - "docs": [ - "Emits on updating the blacklist with data hashes.", - "Params", - "- hashes to remove from the blacklist", - "- hashes to add to the blacklist" - ] - }, - { - "name": "DynamicBagDeleted", - "fields": [ - { - "name": null, - "type": 0, - "typeName": "AccountId", - "docs": [] - }, - { - "name": null, - "type": 141, - "typeName": "DynamicBagId", - "docs": [] - } - ], - "index": 18, - "docs": [ - "Emits on deleting a dynamic bag.", - "Params", - "- account ID for the state bloat bond", - "- dynamic bag ID" - ] - }, - { - "name": "DynamicBagCreated", - "fields": [ - { - "name": null, - "type": 141, - "typeName": "DynamicBagId", - "docs": [] - }, - { - "name": null, - "type": 101, - "typeName": "BTreeSet", - "docs": [] - }, - { - "name": null, - "type": 117, - "typeName": "BTreeSet", - "docs": [] - } - ], - "index": 19, - "docs": [ - "Emits on creating a dynamic bag.", - "Params", - "- dynamic bag ID", - "- assigned storage buckets' IDs", - "- assigned distribution buckets' IDs" - ] - }, - { - "name": "VoucherChanged", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "StorageBucketId", - "docs": [] - }, - { - "name": null, - "type": 143, - "typeName": "Voucher", - "docs": [] - } - ], - "index": 20, - "docs": [ - "Emits on changing the voucher for a storage bucket.", - "Params", - "- storage bucket ID", - "- new voucher" - ] - }, - { - "name": "StorageBucketDeleted", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "StorageBucketId", - "docs": [] - } - ], - "index": 21, - "docs": [ - "Emits on storage bucket deleting.", - "Params", - "- storage bucket ID" - ] - }, - { - "name": "NumberOfStorageBucketsInDynamicBagCreationPolicyUpdated", - "fields": [ - { - "name": null, - "type": 144, - "typeName": "DynamicBagType", - "docs": [] - }, - { - "name": null, - "type": 8, - "typeName": "u64", - "docs": [] - } - ], - "index": 22, - "docs": [ - "Emits on updating the number of storage buckets in dynamic bag creation policy.", - "Params", - "- dynamic bag type", - "- new number of storage buckets" - ] - }, - { - "name": "BagObjectsChanged", - "fields": [ - { - "name": null, - "type": 139, - "typeName": "BagId", - "docs": [] - }, - { - "name": null, - "type": 8, - "typeName": "u64", - "docs": [] - }, - { - "name": null, - "type": 8, - "typeName": "u64", - "docs": [] - } - ], - "index": 23, - "docs": [ - "Bag objects changed.", - "Params", - "- bag id", - "- new total objects size", - "- new total objects number" - ] - }, - { - "name": "DistributionBucketFamilyCreated", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "DistributionBucketFamilyId", - "docs": [] - } - ], - "index": 24, - "docs": [ - "Emits on creating distribution bucket family.", - "Params", - "- distribution family bucket ID" - ] - }, - { - "name": "DistributionBucketFamilyDeleted", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "DistributionBucketFamilyId", - "docs": [] - } - ], - "index": 25, - "docs": [ - "Emits on deleting distribution bucket family.", - "Params", - "- distribution family bucket ID" - ] - }, - { - "name": "DistributionBucketCreated", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "DistributionBucketFamilyId", - "docs": [] - }, - { - "name": null, - "type": 34, - "typeName": "bool", - "docs": [] - }, - { - "name": null, - "type": 115, - "typeName": "DistributionBucketId", - "docs": [] - } - ], - "index": 26, - "docs": [ - "Emits on creating distribution bucket.", - "Params", - "- distribution bucket family ID", - "- accepting new bags", - "- distribution bucket ID" - ] - }, - { - "name": "DistributionBucketStatusUpdated", - "fields": [ - { - "name": null, - "type": 115, - "typeName": "DistributionBucketId", - "docs": [] - }, - { - "name": null, - "type": 34, - "typeName": "bool", - "docs": [] - } - ], - "index": 27, - "docs": [ - "Emits on storage bucket status update (accepting new bags).", - "Params", - "- distribution bucket ID", - "- new status (accepting new bags)" - ] - }, - { - "name": "DistributionBucketDeleted", - "fields": [ - { - "name": null, - "type": 115, - "typeName": "DistributionBucketId", - "docs": [] - } - ], - "index": 28, - "docs": [ - "Emits on deleting distribution bucket.", - "Params", - "- distribution bucket ID" - ] - }, - { - "name": "DistributionBucketsUpdatedForBag", - "fields": [ - { - "name": null, - "type": 139, - "typeName": "BagId", - "docs": [] - }, - { - "name": null, - "type": 8, - "typeName": "DistributionBucketFamilyId", - "docs": [] - }, - { - "name": null, - "type": 101, - "typeName": "BTreeSet", - "docs": [] - }, - { - "name": null, - "type": 101, - "typeName": "BTreeSet", - "docs": [] - } - ], - "index": 29, - "docs": [ - "Emits on updating distribution buckets for bag.", - "Params", - "- bag ID", - "- storage buckets to add ID collection", - "- storage buckets to remove ID collection" - ] - }, - { - "name": "DistributionBucketsPerBagLimitUpdated", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "u64", - "docs": [] - } - ], - "index": 30, - "docs": [ - "Emits on changing the \"Distribution buckets per bag\" number limit.", - "Params", - "- new limit" - ] - }, - { - "name": "DistributionBucketModeUpdated", - "fields": [ - { - "name": null, - "type": 115, - "typeName": "DistributionBucketId", - "docs": [] - }, - { - "name": null, - "type": 34, - "typeName": "bool", - "docs": [] - } - ], - "index": 31, - "docs": [ - "Emits on storage bucket mode update (distributing flag).", - "Params", - "- distribution bucket ID", - "- distributing" - ] - }, - { - "name": "FamiliesInDynamicBagCreationPolicyUpdated", - "fields": [ - { - "name": null, - "type": 144, - "typeName": "DynamicBagType", - "docs": [] - }, - { - "name": null, - "type": 145, - "typeName": "BTreeMap", - "docs": [] - } - ], - "index": 32, - "docs": [ - "Emits on dynamic bag creation policy update (distribution bucket families).", - "Params", - "- dynamic bag type", - "- families and bucket numbers" - ] - }, - { - "name": "DistributionBucketOperatorInvited", - "fields": [ - { - "name": null, - "type": 115, - "typeName": "DistributionBucketId", - "docs": [] - }, - { - "name": null, - "type": 8, - "typeName": "WorkerId", - "docs": [] - } - ], - "index": 33, - "docs": [ - "Emits on creating a distribution bucket invitation for the operator.", - "Params", - "- distribution bucket ID", - "- worker ID" - ] - }, - { - "name": "DistributionBucketInvitationCancelled", - "fields": [ - { - "name": null, - "type": 115, - "typeName": "DistributionBucketId", - "docs": [] - }, - { - "name": null, - "type": 8, - "typeName": "WorkerId", - "docs": [] - } - ], - "index": 34, - "docs": [ - "Emits on canceling a distribution bucket invitation for the operator.", - "Params", - "- distribution bucket ID", - "- operator worker ID" - ] - }, - { - "name": "DistributionBucketInvitationAccepted", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": null, - "type": 115, - "typeName": "DistributionBucketId", - "docs": [] - } - ], - "index": 35, - "docs": [ - "Emits on accepting a distribution bucket invitation for the operator.", - "Params", - "- worker ID", - "- distribution bucket ID" - ] - }, - { - "name": "DistributionBucketMetadataSet", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": null, - "type": 115, - "typeName": "DistributionBucketId", - "docs": [] - }, - { - "name": null, - "type": 10, - "typeName": "Vec", - "docs": [] - } - ], - "index": 36, - "docs": [ - "Emits on setting the metadata by a distribution bucket operator.", - "Params", - "- worker ID", - "- distribution bucket ID", - "- metadata" - ] - }, - { - "name": "DistributionBucketOperatorRemoved", - "fields": [ - { - "name": null, - "type": 115, - "typeName": "DistributionBucketId", - "docs": [] - }, - { - "name": null, - "type": 8, - "typeName": "WorkerId", - "docs": [] - } - ], - "index": 37, - "docs": [ - "Emits on the distribution bucket operator removal.", - "Params", - "- distribution bucket ID", - "- distribution bucket operator ID" - ] - }, - { - "name": "DistributionBucketFamilyMetadataSet", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "DistributionBucketFamilyId", - "docs": [] - }, - { - "name": null, - "type": 10, - "typeName": "Vec", - "docs": [] - } - ], - "index": 38, - "docs": [ - "Emits on setting the metadata by a distribution bucket family.", - "Params", - "- distribution bucket family ID", - "- metadata" - ] - }, - { - "name": "DataObjectStateBloatBondValueUpdated", - "fields": [ - { - "name": null, - "type": 6, - "typeName": "Balance", - "docs": [] - } - ], - "index": 39, - "docs": [ - "Emits on updating the data object state bloat bond.", - "Params", - "- state bloat bond value" - ] - }, - { - "name": "DataObjectsUpdated", - "fields": [ - { - "name": null, - "type": 138, - "typeName": "UploadParameters", - "docs": [] - }, - { - "name": null, - "type": 101, - "typeName": "BTreeSet", - "docs": [] - } - ], - "index": 40, - "docs": [ - "Emits on storage assets being uploaded and deleted at the same time", - "Params", - "- UploadParameters", - "- Objects Id of assets to be removed" - ] - }, - { - "name": "StorageOperatorRemarked", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": null, - "type": 8, - "typeName": "StorageBucketId", - "docs": [] - }, - { - "name": null, - "type": 10, - "typeName": "Vec", - "docs": [] - } - ], - "index": 41, - "docs": [ - "Emits on Storage Operator making a remark", - "Params", - "- operator's worker id", - "- storage bucket id", - "- remark message" - ] - }, - { - "name": "DistributionOperatorRemarked", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": null, - "type": 115, - "typeName": "DistributionBucketId", - "docs": [] - }, - { - "name": null, - "type": 10, - "typeName": "Vec", - "docs": [] - } - ], - "index": 42, - "docs": [ - "Emits on Distribution Operator making a remark", - "Params", - "- operator's worker id", - "- distribution bucket id", - "- remark message" - ] - } - ] - } - }, - "docs": [ - "Events for this module.", - "", - "Storage events" - ] - } - }, - { - "id": 138, - "type": { - "path": [ - "pallet_storage", - "UploadParametersRecord" - ], - "params": [ - { - "name": "BagId", - "type": 139 - }, - { - "name": "AccountId", - "type": 0 - }, - { - "name": "Balance", - "type": 6 - } - ], - "def": { - "composite": { - "fields": [ - { - "name": "bag_id", - "type": 139, - "typeName": "BagId", - "docs": [] - }, - { - "name": "object_creation_list", - "type": 113, - "typeName": "Vec", - "docs": [] - }, - { - "name": "state_bloat_bond_source_account_id", - "type": 0, - "typeName": "AccountId", - "docs": [] - }, - { - "name": "expected_data_size_fee", - "type": 6, - "typeName": "Balance", - "docs": [] - }, - { - "name": "expected_data_object_state_bloat_bond", - "type": 6, - "typeName": "Balance", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 139, - "type": { - "path": [ - "pallet_storage", - "BagIdType" - ], - "params": [ - { - "name": "MemberId", - "type": 8 - }, - { - "name": "ChannelId", - "type": 8 - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "Static", - "fields": [ - { - "name": null, - "type": 140, - "typeName": "StaticBagId", - "docs": [] - } - ], - "index": 0, - "docs": [] - }, - { - "name": "Dynamic", - "fields": [ - { - "name": null, - "type": 141, - "typeName": "DynamicBagIdType", - "docs": [] - } - ], - "index": 1, - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 140, - "type": { - "path": [ - "pallet_storage", - "StaticBagId" - ], - "params": [], - "def": { - "variant": { - "variants": [ - { - "name": "Council", - "fields": [], - "index": 0, - "docs": [] - }, - { - "name": "WorkingGroup", - "fields": [ - { - "name": null, - "type": 83, - "typeName": "WorkingGroup", - "docs": [] - } - ], - "index": 1, - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 141, - "type": { - "path": [ - "pallet_storage", - "DynamicBagIdType" - ], - "params": [ - { - "name": "MemberId", - "type": 8 - }, - { - "name": "ChannelId", - "type": 8 - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "Member", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "MemberId", - "docs": [] - } - ], - "index": 0, - "docs": [] - }, - { - "name": "Channel", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "ChannelId", - "docs": [] - } - ], - "index": 1, - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 142, - "type": { - "path": [ - "BTreeSet" - ], - "params": [ - { - "name": "T", - "type": 10 - } - ], - "def": { - "composite": { - "fields": [ - { - "name": null, - "type": 76, - "typeName": null, - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 143, - "type": { - "path": [ - "pallet_storage", - "Voucher" - ], - "params": [], - "def": { - "composite": { - "fields": [ - { - "name": "size_limit", - "type": 8, - "typeName": "u64", - "docs": [] - }, - { - "name": "objects_limit", - "type": 8, - "typeName": "u64", - "docs": [] - }, - { - "name": "size_used", - "type": 8, - "typeName": "u64", - "docs": [] - }, - { - "name": "objects_used", - "type": 8, - "typeName": "u64", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 144, - "type": { - "path": [ - "pallet_storage", - "DynamicBagType" - ], - "params": [], - "def": { - "variant": { - "variants": [ - { - "name": "Member", - "fields": [], - "index": 0, - "docs": [] - }, - { - "name": "Channel", - "fields": [], - "index": 1, - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 145, - "type": { - "path": [ - "BTreeMap" - ], - "params": [ - { - "name": "K", - "type": 8 - }, - { - "name": "V", - "type": 4 - } - ], - "def": { - "composite": { - "fields": [ - { - "name": null, - "type": 146, - "typeName": null, - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 146, - "type": { - "path": [], - "params": [], - "def": { - "sequence": { - "type": 147 - } - }, - "docs": [] - } - }, - { - "id": 147, - "type": { - "path": [], - "params": [], - "def": { - "tuple": [ - 8, - 4 - ] - }, - "docs": [] - } - }, - { - "id": 148, - "type": { - "path": [ - "pallet_project_token", - "events", - "RawEvent" - ], - "params": [ - { - "name": "Balance", - "type": 6 - }, - { - "name": "JoyBalance", - "type": 6 - }, - { - "name": "TokenId", - "type": 8 - }, - { - "name": "AccountId", - "type": 0 - }, - { - "name": "MemberId", - "type": 8 - }, - { - "name": "BlockNumber", - "type": 4 - }, - { - "name": "TransferPolicy", - "type": 149 - }, - { - "name": "TokenIssuanceParameters", - "type": 150 - }, - { - "name": "ValidatedTransfers", - "type": 163 - }, - { - "name": "TokenSale", - "type": 172 - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "TokenAmountTransferred", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "TokenId", - "docs": [] - }, - { - "name": null, - "type": 8, - "typeName": "MemberId", - "docs": [] - }, - { - "name": null, - "type": 163, - "typeName": "ValidatedTransfers", - "docs": [] - } - ], - "index": 0, - "docs": [ - "Token amount is transferred from src to dst", - "Params:", - "- token identifier", - "- source member id", - "- map containing validated outputs (amount, remark) data indexed by", - " (member_id + account existance)" - ] - }, - { - "name": "TokenAmountTransferredByIssuer", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "TokenId", - "docs": [] - }, - { - "name": null, - "type": 8, - "typeName": "MemberId", - "docs": [] - }, - { - "name": null, - "type": 163, - "typeName": "ValidatedTransfers", - "docs": [] - } - ], - "index": 1, - "docs": [ - "Token amount transferred by issuer", - "Params:", - "- token identifier", - "- source (issuer) member id", - "- map containing validated outputs", - " (amount, opt. vesting schedule, opt. vesting cleanup key, remark) data indexed by", - " (account_id + account existance)" - ] - }, - { - "name": "PatronageRateDecreasedTo", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "TokenId", - "docs": [] - }, - { - "name": null, - "type": 173, - "typeName": "Perquintill", - "docs": [] - } - ], - "index": 2, - "docs": [ - "Patronage rate decreased", - "Params:", - "- token identifier", - "- new patronage rate" - ] - }, - { - "name": "PatronageCreditClaimed", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "TokenId", - "docs": [] - }, - { - "name": null, - "type": 6, - "typeName": "Balance", - "docs": [] - }, - { - "name": null, - "type": 8, - "typeName": "MemberId", - "docs": [] - } - ], - "index": 3, - "docs": [ - "Patronage credit claimed by creator", - "Params:", - "- token identifier", - "- credit amount", - "- member id" - ] - }, - { - "name": "RevenueSplitIssued", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "TokenId", - "docs": [] - }, - { - "name": null, - "type": 4, - "typeName": "BlockNumber", - "docs": [] - }, - { - "name": null, - "type": 4, - "typeName": "BlockNumber", - "docs": [] - }, - { - "name": null, - "type": 6, - "typeName": "JoyBalance", - "docs": [] - } - ], - "index": 4, - "docs": [ - "Revenue Split issued", - "Params:", - "- token identifier", - "- starting block for the split", - "- duration of the split", - "- JOY allocated for the split" - ] - }, - { - "name": "RevenueSplitFinalized", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "TokenId", - "docs": [] - }, - { - "name": null, - "type": 0, - "typeName": "AccountId", - "docs": [] - }, - { - "name": null, - "type": 6, - "typeName": "JoyBalance", - "docs": [] - } - ], - "index": 5, - "docs": [ - "Revenue Split finalized", - "Params:", - "- token identifier", - "- recovery account for the leftover funds", - "- leftover funds" - ] - }, - { - "name": "UserParticipatedInSplit", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "TokenId", - "docs": [] - }, - { - "name": null, - "type": 8, - "typeName": "MemberId", - "docs": [] - }, - { - "name": null, - "type": 6, - "typeName": "Balance", - "docs": [] - }, - { - "name": null, - "type": 6, - "typeName": "JoyBalance", - "docs": [] - }, - { - "name": null, - "type": 4, - "typeName": "RevenueSplitId", - "docs": [] - } - ], - "index": 6, - "docs": [ - "User partipated in a revenue split", - "Params:", - "- token identifier", - "- participant's member id", - "- user allocated staked balance", - "- dividend amount (JOY) granted", - "- revenue split identifier" - ] - }, - { - "name": "RevenueSplitLeft", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "TokenId", - "docs": [] - }, - { - "name": null, - "type": 8, - "typeName": "MemberId", - "docs": [] - }, - { - "name": null, - "type": 6, - "typeName": "Balance", - "docs": [] - } - ], - "index": 7, - "docs": [ - "User left revenue split", - "Params:", - "- token identifier", - "- ex-participant's member id", - "- amount unstaked" - ] - }, - { - "name": "MemberJoinedWhitelist", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "TokenId", - "docs": [] - }, - { - "name": null, - "type": 8, - "typeName": "MemberId", - "docs": [] - }, - { - "name": null, - "type": 149, - "typeName": "TransferPolicy", - "docs": [] - } - ], - "index": 8, - "docs": [ - "Member joined whitelist", - "Params:", - "- token identifier", - "- member id", - "- ongoing transfer policy" - ] - }, - { - "name": "AccountDustedBy", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "TokenId", - "docs": [] - }, - { - "name": null, - "type": 8, - "typeName": "MemberId", - "docs": [] - }, - { - "name": null, - "type": 0, - "typeName": "AccountId", - "docs": [] - }, - { - "name": null, - "type": 149, - "typeName": "TransferPolicy", - "docs": [] - } - ], - "index": 9, - "docs": [ - "Account Dusted", - "Params:", - "- token identifier", - "- id of the dusted account owner member", - "- account that called the extrinsic", - "- ongoing policy" - ] - }, - { - "name": "TokenDeissued", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "TokenId", - "docs": [] - } - ], - "index": 10, - "docs": [ - "Token Deissued", - "Params:", - "- token id" - ] - }, - { - "name": "TokenIssued", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "TokenId", - "docs": [] - }, - { - "name": null, - "type": 150, - "typeName": "TokenIssuanceParameters", - "docs": [] - } - ], - "index": 11, - "docs": [ - "Token Issued", - "Params:", - "- token id", - "- token issuance parameters" - ] - }, - { - "name": "TokenSaleInitialized", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "TokenId", - "docs": [] - }, - { - "name": null, - "type": 4, - "typeName": "TokenSaleId", - "docs": [] - }, - { - "name": null, - "type": 172, - "typeName": "TokenSale", - "docs": [] - }, - { - "name": null, - "type": 69, - "typeName": "Option>", - "docs": [] - } - ], - "index": 12, - "docs": [ - "Toke Sale was Initialized", - "Params:", - "- token id", - "- token sale id", - "- token sale data", - "- token sale metadata" - ] - }, - { - "name": "UpcomingTokenSaleUpdated", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "TokenId", - "docs": [] - }, - { - "name": null, - "type": 4, - "typeName": "TokenSaleId", - "docs": [] - }, - { - "name": null, - "type": 106, - "typeName": "Option", - "docs": [] - }, - { - "name": null, - "type": 106, - "typeName": "Option", - "docs": [] - } - ], - "index": 13, - "docs": [ - "Upcoming Token Sale was Updated", - "Params:", - "- token id", - "- token sale id", - "- new sale start block", - "- new sale duration" - ] - }, - { - "name": "TokensPurchasedOnSale", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "TokenId", - "docs": [] - }, - { - "name": null, - "type": 4, - "typeName": "TokenSaleId", - "docs": [] - }, - { - "name": null, - "type": 6, - "typeName": "Balance", - "docs": [] - }, - { - "name": null, - "type": 8, - "typeName": "MemberId", - "docs": [] - } - ], - "index": 14, - "docs": [ - "Tokens Purchased On Sale", - "Params:", - "- token id", - "- token sale id", - "- amount of tokens purchased", - "- buyer's member id" - ] - }, - { - "name": "TokenSaleFinalized", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "TokenId", - "docs": [] - }, - { - "name": null, - "type": 4, - "typeName": "TokenSaleId", - "docs": [] - }, - { - "name": null, - "type": 6, - "typeName": "Balance", - "docs": [] - }, - { - "name": null, - "type": 6, - "typeName": "JoyBalance", - "docs": [] - } - ], - "index": 15, - "docs": [ - "Token Sale Finalized", - "Params:", - "- token id", - "- token sale id", - "- amount of unsold tokens recovered", - "- amount of JOY collected" - ] - }, - { - "name": "TransferPolicyChangedToPermissionless", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "TokenId", - "docs": [] - } - ], - "index": 16, - "docs": [ - "Transfer Policy Changed To Permissionless", - "Params:", - "- token id" - ] - } - ] - } - }, - "docs": [ - "Events for this module.", - "" - ] - } - }, - { - "id": 149, - "type": { - "path": [ - "pallet_project_token", - "types", - "TransferPolicy" - ], - "params": [ - { - "name": "Hash", - "type": 9 - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "Permissionless", - "fields": [], - "index": 0, - "docs": [] - }, - { - "name": "Permissioned", - "fields": [ - { - "name": null, - "type": 9, - "typeName": "Hash", - "docs": [] - } - ], - "index": 1, - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 150, - "type": { - "path": [ - "pallet_project_token", - "types", - "TokenIssuanceParameters" - ], - "params": [ - { - "name": "Hash", - "type": 9 - }, - { - "name": "TokenAllocation", - "type": 151 - }, - { - "name": "TransferPolicyParams", - "type": 155 - }, - { - "name": "MemberId", - "type": 8 - } - ], - "def": { - "composite": { - "fields": [ - { - "name": "initial_allocation", - "type": 159, - "typeName": "BTreeMap", - "docs": [] - }, - { - "name": "symbol", - "type": 9, - "typeName": "Hash", - "docs": [] - }, - { - "name": "transfer_policy", - "type": 155, - "typeName": "TransferPolicyParams", - "docs": [] - }, - { - "name": "patronage_rate", - "type": 162, - "typeName": "YearlyRate", - "docs": [] - }, - { - "name": "revenue_split_rate", - "type": 153, - "typeName": "Permill", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 151, - "type": { - "path": [ - "pallet_project_token", - "types", - "TokenAllocation" - ], - "params": [ - { - "name": "Balance", - "type": 6 - }, - { - "name": "VestingScheduleParams", - "type": 152 - } - ], - "def": { - "composite": { - "fields": [ - { - "name": "amount", - "type": 6, - "typeName": "Balance", - "docs": [] - }, - { - "name": "vesting_schedule_params", - "type": 154, - "typeName": "Option", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 152, - "type": { - "path": [ - "pallet_project_token", - "types", - "VestingScheduleParams" - ], - "params": [ - { - "name": "BlockNumber", - "type": 4 - } - ], - "def": { - "composite": { - "fields": [ - { - "name": "linear_vesting_duration", - "type": 4, - "typeName": "BlockNumber", - "docs": [] - }, - { - "name": "blocks_before_cliff", - "type": 4, - "typeName": "BlockNumber", - "docs": [] - }, - { - "name": "cliff_amount_percentage", - "type": 153, - "typeName": "Permill", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 153, - "type": { - "path": [ - "sp_arithmetic", - "per_things", - "Permill" - ], - "params": [], - "def": { - "composite": { - "fields": [ - { - "name": null, - "type": 4, - "typeName": "u32", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 154, - "type": { - "path": [ - "Option" - ], - "params": [ - { - "name": "T", - "type": 152 - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "None", - "fields": [], - "index": 0, - "docs": [] - }, - { - "name": "Some", - "fields": [ - { - "name": null, - "type": 152, - "typeName": null, - "docs": [] - } - ], - "index": 1, - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 155, - "type": { - "path": [ - "pallet_project_token", - "types", - "TransferPolicyParams" - ], - "params": [ - { - "name": "WhitelistParams", - "type": 156 - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "Permissionless", - "fields": [], - "index": 0, - "docs": [] - }, - { - "name": "Permissioned", - "fields": [ - { - "name": null, - "type": 156, - "typeName": "WhitelistParams", - "docs": [] - } - ], - "index": 1, - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 156, - "type": { - "path": [ - "pallet_project_token", - "types", - "WhitelistParams" - ], - "params": [ - { - "name": "Hash", - "type": 9 - }, - { - "name": "SingleDataObjectUploadParams", - "type": 157 - } - ], - "def": { - "composite": { - "fields": [ - { - "name": "commitment", - "type": 9, - "typeName": "Hash", - "docs": [] - }, - { - "name": "payload", - "type": 158, - "typeName": "Option", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 157, - "type": { - "path": [ - "pallet_project_token", - "types", - "SingleDataObjectUploadParams" - ], - "params": [ - { - "name": "JoyBalance", - "type": 6 - } - ], - "def": { - "composite": { - "fields": [ - { - "name": "object_creation_params", - "type": 114, - "typeName": "DataObjectCreationParameters", - "docs": [] - }, - { - "name": "expected_data_size_fee", - "type": 6, - "typeName": "JoyBalance", - "docs": [] - }, - { - "name": "expected_data_object_state_bloat_bond", - "type": 6, - "typeName": "JoyBalance", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 158, - "type": { - "path": [ - "Option" - ], - "params": [ - { - "name": "T", - "type": 157 - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "None", - "fields": [], - "index": 0, - "docs": [] - }, - { - "name": "Some", - "fields": [ - { - "name": null, - "type": 157, - "typeName": null, - "docs": [] - } - ], - "index": 1, - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 159, - "type": { - "path": [ - "BTreeMap" - ], - "params": [ - { - "name": "K", - "type": 8 - }, - { - "name": "V", - "type": 151 - } - ], - "def": { - "composite": { - "fields": [ - { - "name": null, - "type": 160, - "typeName": null, - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 160, - "type": { - "path": [], - "params": [], - "def": { - "sequence": { - "type": 161 - } - }, - "docs": [] - } - }, - { - "id": 161, - "type": { - "path": [], - "params": [], - "def": { - "tuple": [ - 8, - 151 - ] - }, - "docs": [] - } - }, - { - "id": 162, - "type": { - "path": [ - "pallet_project_token", - "types", - "YearlyRate" - ], - "params": [], - "def": { - "composite": { - "fields": [ - { - "name": null, - "type": 153, - "typeName": "Permill", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 163, - "type": { - "path": [ - "pallet_project_token", - "types", - "Transfers" - ], - "params": [ - { - "name": "MemberId", - "type": 164 - }, - { - "name": "Payment", - "type": 165 - } - ], - "def": { - "composite": { - "fields": [ - { - "name": null, - "type": 169, - "typeName": "BTreeMap", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 164, - "type": { - "path": [ - "pallet_project_token", - "types", - "Validated" - ], - "params": [ - { - "name": "MemberId", - "type": 8 - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "Existing", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "MemberId", - "docs": [] - } - ], - "index": 0, - "docs": [] - }, - { - "name": "NonExisting", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "MemberId", - "docs": [] - } - ], - "index": 1, - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 165, - "type": { - "path": [ - "pallet_project_token", - "types", - "ValidatedPayment" - ], - "params": [ - { - "name": "PaymentWithVesting", - "type": 166 - } - ], - "def": { - "composite": { - "fields": [ - { - "name": "payment", - "type": 166, - "typeName": "PaymentWithVesting", - "docs": [] - }, - { - "name": "vesting_cleanup_candidate", - "type": 167, - "typeName": "Option", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 166, - "type": { - "path": [ - "pallet_project_token", - "types", - "PaymentWithVesting" - ], - "params": [ - { - "name": "Balance", - "type": 6 - }, - { - "name": "VestingScheduleParams", - "type": 152 - } - ], - "def": { - "composite": { - "fields": [ - { - "name": "remark", - "type": 10, - "typeName": "Vec", - "docs": [] - }, - { - "name": "amount", - "type": 6, - "typeName": "Balance", - "docs": [] - }, - { - "name": "vesting_schedule", - "type": 154, - "typeName": "Option", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 167, - "type": { - "path": [ - "Option" - ], - "params": [ - { - "name": "T", - "type": 168 - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "None", - "fields": [], - "index": 0, - "docs": [] - }, - { - "name": "Some", - "fields": [ - { - "name": null, - "type": 168, - "typeName": null, - "docs": [] - } - ], - "index": 1, - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 168, - "type": { - "path": [ - "pallet_project_token", - "types", - "VestingSource" - ], - "params": [], - "def": { - "variant": { - "variants": [ - { - "name": "InitialIssuance", - "fields": [], - "index": 0, - "docs": [] - }, - { - "name": "Sale", - "fields": [ - { - "name": null, - "type": 4, - "typeName": "TokenSaleId", - "docs": [] - } - ], - "index": 1, - "docs": [] - }, - { - "name": "IssuerTransfer", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "u64", - "docs": [] - } - ], - "index": 2, - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 169, - "type": { - "path": [ - "BTreeMap" - ], - "params": [ - { - "name": "K", - "type": 164 - }, - { - "name": "V", - "type": 165 - } - ], - "def": { - "composite": { - "fields": [ - { - "name": null, - "type": 170, - "typeName": null, - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 170, - "type": { - "path": [], - "params": [], - "def": { - "sequence": { - "type": 171 - } - }, - "docs": [] - } - }, - { - "id": 171, - "type": { - "path": [], - "params": [], - "def": { - "tuple": [ - 164, - 165 - ] - }, - "docs": [] - } - }, - { - "id": 172, - "type": { - "path": [ - "pallet_project_token", - "types", - "TokenSale" - ], - "params": [ - { - "name": "JoyBalance", - "type": 6 - }, - { - "name": "Balance", - "type": 6 - }, - { - "name": "BlockNumber", - "type": 4 - }, - { - "name": "VestingScheduleParams", - "type": 152 - }, - { - "name": "MemberId", - "type": 8 - }, - { - "name": "AccountId", - "type": 0 - } - ], - "def": { - "composite": { - "fields": [ - { - "name": "unit_price", - "type": 6, - "typeName": "JoyBalance", - "docs": [] - }, - { - "name": "quantity_left", - "type": 6, - "typeName": "Balance", - "docs": [] - }, - { - "name": "funds_collected", - "type": 6, - "typeName": "JoyBalance", - "docs": [] - }, - { - "name": "tokens_source", - "type": 8, - "typeName": "MemberId", - "docs": [] - }, - { - "name": "earnings_destination", - "type": 58, - "typeName": "Option", - "docs": [] - }, - { - "name": "start_block", - "type": 4, - "typeName": "BlockNumber", - "docs": [] - }, - { - "name": "duration", - "type": 4, - "typeName": "BlockNumber", - "docs": [] - }, - { - "name": "vesting_schedule_params", - "type": 154, - "typeName": "Option", - "docs": [] - }, - { - "name": "cap_per_member", - "type": 105, - "typeName": "Option", - "docs": [] - }, - { - "name": "auto_finalize", - "type": 34, - "typeName": "bool", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 173, - "type": { - "path": [ - "sp_arithmetic", - "per_things", - "Perquintill" - ], - "params": [], - "def": { - "composite": { - "fields": [ - { - "name": null, - "type": 8, - "typeName": "u64", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 174, - "type": { - "path": [ - "pallet_proposals_engine", - "RawEvent" - ], - "params": [ - { - "name": "ProposalId", - "type": 4 - }, - { - "name": "MemberId", - "type": 8 - }, - { - "name": "BlockNumber", - "type": 4 - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "ProposalStatusUpdated", - "fields": [ - { - "name": null, - "type": 4, - "typeName": "ProposalId", - "docs": [] - }, - { - "name": null, - "type": 175, - "typeName": "ProposalStatus", - "docs": [] - } - ], - "index": 0, - "docs": [ - "Emits on proposal creation.", - "Params:", - "- Id of a proposal.", - "- New proposal status." - ] - }, - { - "name": "ProposalDecisionMade", - "fields": [ - { - "name": null, - "type": 4, - "typeName": "ProposalId", - "docs": [] - }, - { - "name": null, - "type": 176, - "typeName": "ProposalDecision", - "docs": [] - } - ], - "index": 1, - "docs": [ - "Emits on getting a proposal status decision.", - "Params:", - "- Id of a proposal.", - "- Proposal decision" - ] - }, - { - "name": "ProposalExecuted", - "fields": [ - { - "name": null, - "type": 4, - "typeName": "ProposalId", - "docs": [] - }, - { - "name": null, - "type": 178, - "typeName": "ExecutionStatus", - "docs": [] - } - ], - "index": 2, - "docs": [ - "Emits on proposal execution.", - "Params:", - "- Id of a updated proposal.", - "- Proposal execution status." - ] - }, - { - "name": "Voted", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "MemberId", - "docs": [] - }, - { - "name": null, - "type": 4, - "typeName": "ProposalId", - "docs": [] - }, - { - "name": null, - "type": 179, - "typeName": "VoteKind", - "docs": [] - }, - { - "name": null, - "type": 10, - "typeName": "Vec", - "docs": [] - } - ], - "index": 3, - "docs": [ - "Emits on voting for the proposal", - "Params:", - "- Voter - member id of a voter.", - "- Id of a proposal.", - "- Kind of vote.", - "- Rationale." - ] - }, - { - "name": "ProposalCancelled", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "MemberId", - "docs": [] - }, - { - "name": null, - "type": 4, - "typeName": "ProposalId", - "docs": [] - } - ], - "index": 4, - "docs": [ - "Emits on a proposal being cancelled", - "Params:", - "- Member Id of the proposer", - "- Id of the proposal" - ] - }, - { - "name": "ProposerRemarked", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "MemberId", - "docs": [] - }, - { - "name": null, - "type": 4, - "typeName": "ProposalId", - "docs": [] - }, - { - "name": null, - "type": 10, - "typeName": "Vec", - "docs": [] - } - ], - "index": 5, - "docs": [ - "Emits on proposer making a remark", - "- proposer id", - "- proposal id", - "- message" - ] - } - ] - } - }, - "docs": [ - "Events for this module.", - "", - "Proposals engine events" - ] - } - }, - { - "id": 175, - "type": { - "path": [ - "pallet_proposals_engine", - "types", - "proposal_statuses", - "ProposalStatus" - ], - "params": [ - { - "name": "BlockNumber", - "type": 4 - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "Active", - "fields": [], - "index": 0, - "docs": [] - }, - { - "name": "PendingExecution", - "fields": [ - { - "name": null, - "type": 4, - "typeName": "BlockNumber", - "docs": [] - } - ], - "index": 1, - "docs": [] - }, - { - "name": "PendingConstitutionality", - "fields": [], - "index": 2, - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 176, - "type": { - "path": [ - "pallet_proposals_engine", - "types", - "proposal_statuses", - "ProposalDecision" - ], - "params": [], - "def": { - "variant": { - "variants": [ - { - "name": "Canceled", - "fields": [], - "index": 0, - "docs": [] - }, - { - "name": "CanceledByRuntime", - "fields": [], - "index": 1, - "docs": [] - }, - { - "name": "Vetoed", - "fields": [], - "index": 2, - "docs": [] - }, - { - "name": "Rejected", - "fields": [], - "index": 3, - "docs": [] - }, - { - "name": "Slashed", - "fields": [], - "index": 4, - "docs": [] - }, - { - "name": "Expired", - "fields": [], - "index": 5, - "docs": [] - }, - { - "name": "Approved", - "fields": [ - { - "name": null, - "type": 177, - "typeName": "ApprovedProposalDecision", - "docs": [] - } - ], - "index": 6, - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 177, - "type": { - "path": [ - "pallet_proposals_engine", - "types", - "proposal_statuses", - "ApprovedProposalDecision" - ], - "params": [], - "def": { - "variant": { - "variants": [ - { - "name": "PendingExecution", - "fields": [], - "index": 0, - "docs": [] - }, - { - "name": "PendingConstitutionality", - "fields": [], - "index": 1, - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 178, - "type": { - "path": [ - "pallet_proposals_engine", - "types", - "proposal_statuses", - "ExecutionStatus" - ], - "params": [], - "def": { - "variant": { - "variants": [ - { - "name": "Executed", - "fields": [], - "index": 0, - "docs": [] - }, - { - "name": "ExecutionFailed", - "fields": [ - { - "name": "error", - "type": 10, - "typeName": "Vec", - "docs": [] - } - ], - "index": 1, - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 179, - "type": { - "path": [ - "pallet_proposals_engine", - "types", - "VoteKind" - ], - "params": [], - "def": { - "variant": { - "variants": [ - { - "name": "Approve", - "fields": [], - "index": 0, - "docs": [] - }, - { - "name": "Reject", - "fields": [], - "index": 1, - "docs": [] - }, - { - "name": "Slash", - "fields": [], - "index": 2, - "docs": [] - }, - { - "name": "Abstain", - "fields": [], - "index": 3, - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 180, - "type": { - "path": [ - "pallet_proposals_discussion", - "RawEvent" - ], - "params": [ - { - "name": "ThreadId", - "type": 8 - }, - { - "name": "MemberId", - "type": 8 - }, - { - "name": "PostId", - "type": 8 - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "ThreadCreated", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "ThreadId", - "docs": [] - }, - { - "name": null, - "type": 8, - "typeName": "MemberId", - "docs": [] - } - ], - "index": 0, - "docs": [ - "Emits on thread creation." - ] - }, - { - "name": "PostCreated", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "PostId", - "docs": [] - }, - { - "name": null, - "type": 8, - "typeName": "MemberId", - "docs": [] - }, - { - "name": null, - "type": 8, - "typeName": "ThreadId", - "docs": [] - }, - { - "name": null, - "type": 10, - "typeName": "Vec", - "docs": [] - }, - { - "name": null, - "type": 34, - "typeName": "bool", - "docs": [] - } - ], - "index": 1, - "docs": [ - "Emits on post creation." - ] - }, - { - "name": "PostUpdated", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "PostId", - "docs": [] - }, - { - "name": null, - "type": 8, - "typeName": "MemberId", - "docs": [] - }, - { - "name": null, - "type": 8, - "typeName": "ThreadId", - "docs": [] - }, - { - "name": null, - "type": 10, - "typeName": "Vec", - "docs": [] - } - ], - "index": 2, - "docs": [ - "Emits on post update." - ] - }, - { - "name": "ThreadModeChanged", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "ThreadId", - "docs": [] - }, - { - "name": null, - "type": 181, - "typeName": "ThreadMode", - "docs": [] - }, - { - "name": null, - "type": 8, - "typeName": "MemberId", - "docs": [] - } - ], - "index": 3, - "docs": [ - "Emits on thread mode change." - ] - }, - { - "name": "PostDeleted", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "MemberId", - "docs": [] - }, - { - "name": null, - "type": 8, - "typeName": "ThreadId", - "docs": [] - }, - { - "name": null, - "type": 8, - "typeName": "PostId", - "docs": [] - }, - { - "name": null, - "type": 34, - "typeName": "bool", - "docs": [] - } - ], - "index": 4, - "docs": [ - "Emits on post deleted" - ] - } - ] - } - }, - "docs": [ - "Events for this module.", - "", - "Proposals engine events" - ] - } - }, - { - "id": 181, - "type": { - "path": [ - "pallet_proposals_discussion", - "types", - "ThreadMode" - ], - "params": [ - { - "name": "MemberId", - "type": 8 - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "Open", - "fields": [], - "index": 0, - "docs": [] - }, - { - "name": "Closed", - "fields": [ - { - "name": null, - "type": 62, - "typeName": "Vec", - "docs": [] - } - ], - "index": 1, - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 182, - "type": { - "path": [ - "pallet_proposals_codex", - "RawEvent" - ], - "params": [ - { - "name": "GeneralProposalParameters", - "type": 183 - }, - { - "name": "ProposalDetailsOf", - "type": 184 - }, - { - "name": "ProposalId", - "type": 4 - }, - { - "name": "ThreadId", - "type": 8 - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "ProposalCreated", - "fields": [ - { - "name": null, - "type": 4, - "typeName": "ProposalId", - "docs": [] - }, - { - "name": null, - "type": 183, - "typeName": "GeneralProposalParameters", - "docs": [] - }, - { - "name": null, - "type": 184, - "typeName": "ProposalDetailsOf", - "docs": [] - }, - { - "name": null, - "type": 8, - "typeName": "ThreadId", - "docs": [] - } - ], - "index": 0, - "docs": [ - "A proposal was created", - "Params:", - "- Id of a newly created proposal after it was saved in storage.", - "- General proposal parameter. Parameters shared by all proposals", - "- Proposal Details. Parameter of proposal with a variant for each kind of proposal", - "- Id of a newly created proposal thread" - ] - } - ] - } - }, - "docs": [ - "Events for this module.", - "" - ] - } - }, - { - "id": 183, - "type": { - "path": [ - "pallet_proposals_codex", - "types", - "GeneralProposalParams" - ], - "params": [ - { - "name": "MemberId", - "type": 8 - }, - { - "name": "AccountId", - "type": 0 - }, - { - "name": "BlockNumber", - "type": 4 - } - ], - "def": { - "composite": { - "fields": [ - { - "name": "member_id", - "type": 8, - "typeName": "MemberId", - "docs": [] - }, - { - "name": "title", - "type": 10, - "typeName": "Vec", - "docs": [] - }, - { - "name": "description", - "type": 10, - "typeName": "Vec", - "docs": [] - }, - { - "name": "staking_account_id", - "type": 58, - "typeName": "Option", - "docs": [] - }, - { - "name": "exact_execution_block", - "type": 106, - "typeName": "Option", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 184, - "type": { - "path": [ - "pallet_proposals_codex", - "types", - "ProposalDetails" - ], - "params": [ - { - "name": "Balance", - "type": 6 - }, - { - "name": "BlockNumber", - "type": 4 - }, - { - "name": "AccountId", - "type": 0 - }, - { - "name": "WorkerId", - "type": 8 - }, - { - "name": "OpeningId", - "type": 8 - }, - { - "name": "ProposalId", - "type": 4 - }, - { - "name": "UpdateChannelPayoutsParameters", - "type": 130 - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "Signal", - "fields": [ - { - "name": null, - "type": 10, - "typeName": "Vec", - "docs": [] - } - ], - "index": 0, - "docs": [] - }, - { - "name": "RuntimeUpgrade", - "fields": [ - { - "name": null, - "type": 10, - "typeName": "Vec", - "docs": [] - } - ], - "index": 1, - "docs": [] - }, - { - "name": "FundingRequest", - "fields": [ - { - "name": null, - "type": 185, - "typeName": "Vec>", - "docs": [] - } - ], - "index": 2, - "docs": [] - }, - { - "name": "SetMaxValidatorCount", - "fields": [ - { - "name": null, - "type": 4, - "typeName": "u32", - "docs": [] - } - ], - "index": 3, - "docs": [] - }, - { - "name": "CreateWorkingGroupLeadOpening", - "fields": [ - { - "name": null, - "type": 187, - "typeName": "CreateOpeningParameters", - "docs": [] - } - ], - "index": 4, - "docs": [] - }, - { - "name": "FillWorkingGroupLeadOpening", - "fields": [ - { - "name": null, - "type": 189, - "typeName": "FillOpeningParameters", - "docs": [] - } - ], - "index": 5, - "docs": [] - }, - { - "name": "UpdateWorkingGroupBudget", - "fields": [ - { - "name": null, - "type": 6, - "typeName": "Balance", - "docs": [] - }, - { - "name": null, - "type": 83, - "typeName": "WorkingGroup", - "docs": [] - }, - { - "name": null, - "type": 84, - "typeName": "BalanceKind", - "docs": [] - } - ], - "index": 6, - "docs": [] - }, - { - "name": "DecreaseWorkingGroupLeadStake", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": null, - "type": 6, - "typeName": "Balance", - "docs": [] - }, - { - "name": null, - "type": 83, - "typeName": "WorkingGroup", - "docs": [] - } - ], - "index": 7, - "docs": [] - }, - { - "name": "SlashWorkingGroupLead", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": null, - "type": 6, - "typeName": "Balance", - "docs": [] - }, - { - "name": null, - "type": 83, - "typeName": "WorkingGroup", - "docs": [] - } - ], - "index": 8, - "docs": [] - }, - { - "name": "SetWorkingGroupLeadReward", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": null, - "type": 105, - "typeName": "Option", - "docs": [] - }, - { - "name": null, - "type": 83, - "typeName": "WorkingGroup", - "docs": [] - } - ], - "index": 9, - "docs": [] - }, - { - "name": "TerminateWorkingGroupLead", - "fields": [ - { - "name": null, - "type": 190, - "typeName": "TerminateRoleParameters", - "docs": [] - } - ], - "index": 10, - "docs": [] - }, - { - "name": "AmendConstitution", - "fields": [ - { - "name": null, - "type": 10, - "typeName": "Vec", - "docs": [] - } - ], - "index": 11, - "docs": [] - }, - { - "name": "CancelWorkingGroupLeadOpening", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "OpeningId", - "docs": [] - }, - { - "name": null, - "type": 83, - "typeName": "WorkingGroup", - "docs": [] - } - ], - "index": 12, - "docs": [] - }, - { - "name": "SetMembershipPrice", - "fields": [ - { - "name": null, - "type": 6, - "typeName": "Balance", - "docs": [] - } - ], - "index": 13, - "docs": [] - }, - { - "name": "SetCouncilBudgetIncrement", - "fields": [ - { - "name": null, - "type": 6, - "typeName": "Balance", - "docs": [] - } - ], - "index": 14, - "docs": [] - }, - { - "name": "SetCouncilorReward", - "fields": [ - { - "name": null, - "type": 6, - "typeName": "Balance", - "docs": [] - } - ], - "index": 15, - "docs": [] - }, - { - "name": "SetInitialInvitationBalance", - "fields": [ - { - "name": null, - "type": 6, - "typeName": "Balance", - "docs": [] - } - ], - "index": 16, - "docs": [] - }, - { - "name": "SetInitialInvitationCount", - "fields": [ - { - "name": null, - "type": 4, - "typeName": "u32", - "docs": [] - } - ], - "index": 17, - "docs": [] - }, - { - "name": "SetMembershipLeadInvitationQuota", - "fields": [ - { - "name": null, - "type": 4, - "typeName": "u32", - "docs": [] - } - ], - "index": 18, - "docs": [] - }, - { - "name": "SetReferralCut", - "fields": [ - { - "name": null, - "type": 2, - "typeName": "u8", - "docs": [] - } - ], - "index": 19, - "docs": [] - }, - { - "name": "VetoProposal", - "fields": [ - { - "name": null, - "type": 4, - "typeName": "ProposalId", - "docs": [] - } - ], - "index": 20, - "docs": [] - }, - { - "name": "UpdateGlobalNftLimit", - "fields": [ - { - "name": null, - "type": 136, - "typeName": "NftLimitPeriod", - "docs": [] - }, - { - "name": null, - "type": 8, - "typeName": "u64", - "docs": [] - } - ], - "index": 21, - "docs": [] - }, - { - "name": "UpdateChannelPayouts", - "fields": [ - { - "name": null, - "type": 130, - "typeName": "UpdateChannelPayoutsParameters", - "docs": [] - } - ], - "index": 22, - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 185, - "type": { - "path": [], - "params": [], - "def": { - "sequence": { - "type": 186 - } - }, - "docs": [] - } - }, - { - "id": 186, - "type": { - "path": [ - "pallet_common", - "FundingRequestParameters" - ], - "params": [ - { - "name": "Balance", - "type": 6 - }, - { - "name": "AccountId", - "type": 0 - } - ], - "def": { - "composite": { - "fields": [ - { - "name": "account", - "type": 0, - "typeName": "AccountId", - "docs": [] - }, - { - "name": "amount", - "type": 6, - "typeName": "Balance", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 187, - "type": { - "path": [ - "pallet_proposals_codex", - "types", - "CreateOpeningParameters" - ], - "params": [ - { - "name": "BlockNumber", - "type": 4 - }, - { - "name": "Balance", - "type": 6 - } - ], - "def": { - "composite": { - "fields": [ - { - "name": "description", - "type": 10, - "typeName": "Vec", - "docs": [] - }, - { - "name": "stake_policy", - "type": 188, - "typeName": "StakePolicy", - "docs": [] - }, - { - "name": "reward_per_block", - "type": 105, - "typeName": "Option", - "docs": [] - }, - { - "name": "group", - "type": 83, - "typeName": "WorkingGroup", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 188, - "type": { - "path": [ - "pallet_working_group", - "types", - "StakePolicy" - ], - "params": [ - { - "name": "BlockNumber", - "type": 4 - }, - { - "name": "Balance", - "type": 6 - } - ], - "def": { - "composite": { - "fields": [ - { - "name": "stake_amount", - "type": 6, - "typeName": "Balance", - "docs": [] - }, - { - "name": "leaving_unstaking_period", - "type": 4, - "typeName": "BlockNumber", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 189, - "type": { - "path": [ - "pallet_proposals_codex", - "types", - "FillOpeningParameters" - ], - "params": [], - "def": { - "composite": { - "fields": [ - { - "name": "opening_id", - "type": 8, - "typeName": "working_group::OpeningId", - "docs": [] - }, - { - "name": "application_id", - "type": 8, - "typeName": "working_group::ApplicationId", - "docs": [] - }, - { - "name": "working_group", - "type": 83, - "typeName": "WorkingGroup", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 190, - "type": { - "path": [ - "pallet_proposals_codex", - "types", - "TerminateRoleParameters" - ], - "params": [ - { - "name": "WorkerId", - "type": 8 - }, - { - "name": "Balance", - "type": 6 - } - ], - "def": { - "composite": { - "fields": [ - { - "name": "worker_id", - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": "slashing_amount", - "type": 105, - "typeName": "Option", - "docs": [] - }, - { - "name": "group", - "type": 83, - "typeName": "WorkingGroup", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 191, - "type": { - "path": [ - "pallet_working_group", - "RawEvent" - ], - "params": [ - { - "name": "OpeningId", - "type": 8 - }, - { - "name": "ApplicationId", - "type": 8 - }, - { - "name": "ApplicationIdToWorkerIdMap", - "type": 192 - }, - { - "name": "WorkerId", - "type": 8 - }, - { - "name": "AccountId", - "type": 0 - }, - { - "name": "Balance", - "type": 6 - }, - { - "name": "OpeningType", - "type": 195 - }, - { - "name": "StakePolicy", - "type": 188 - }, - { - "name": "ApplyOnOpeningParameters", - "type": 196 - }, - { - "name": "MemberId", - "type": 8 - }, - { - "name": "I", - "type": 198 - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "OpeningAdded", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "OpeningId", - "docs": [] - }, - { - "name": null, - "type": 10, - "typeName": "Vec", - "docs": [] - }, - { - "name": null, - "type": 195, - "typeName": "OpeningType", - "docs": [] - }, - { - "name": null, - "type": 188, - "typeName": "StakePolicy", - "docs": [] - }, - { - "name": null, - "type": 105, - "typeName": "Option", - "docs": [] - } - ], - "index": 0, - "docs": [ - "Emits on adding new job opening.", - "Params:", - "- Opening id", - "- Description", - "- Opening Type(Lead or Worker)", - "- Stake Policy for the opening", - "- Reward per block" - ] - }, - { - "name": "AppliedOnOpening", - "fields": [ - { - "name": null, - "type": 196, - "typeName": "ApplyOnOpeningParameters", - "docs": [] - }, - { - "name": null, - "type": 8, - "typeName": "ApplicationId", - "docs": [] - } - ], - "index": 1, - "docs": [ - "Emits on adding the application for the worker opening.", - "Params:", - "- Opening parameteres", - "- Application id" - ] - }, - { - "name": "OpeningFilled", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "OpeningId", - "docs": [] - }, - { - "name": null, - "type": 192, - "typeName": "ApplicationIdToWorkerIdMap", - "docs": [] - }, - { - "name": null, - "type": 101, - "typeName": "BTreeSet", - "docs": [] - } - ], - "index": 2, - "docs": [ - "Emits on filling the job opening.", - "Params:", - "- Worker opening id", - "- Worker application id to the worker id dictionary", - "- Applicationd ids used to fill the opening" - ] - }, - { - "name": "LeaderSet", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "WorkerId", - "docs": [] - } - ], - "index": 3, - "docs": [ - "Emits on setting the group leader.", - "Params:", - "- Group worker id." - ] - }, - { - "name": "WorkerRoleAccountUpdated", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": null, - "type": 0, - "typeName": "AccountId", - "docs": [] - } - ], - "index": 4, - "docs": [ - "Emits on updating the role account of the worker.", - "Params:", - "- Id of the worker.", - "- Role account id of the worker." - ] - }, - { - "name": "LeaderUnset", - "fields": [], - "index": 5, - "docs": [ - "Emits on un-setting the leader." - ] - }, - { - "name": "WorkerExited", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "WorkerId", - "docs": [] - } - ], - "index": 6, - "docs": [ - "Emits on exiting the worker.", - "Params:", - "- worker id.", - "- Rationale." - ] - }, - { - "name": "WorkerStartedLeaving", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": null, - "type": 69, - "typeName": "Option>", - "docs": [] - } - ], - "index": 7, - "docs": [ - "Emits when worker started leaving their role.", - "Params:", - "- Worker id.", - "- Rationale." - ] - }, - { - "name": "TerminatedWorker", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": null, - "type": 105, - "typeName": "Option", - "docs": [] - }, - { - "name": null, - "type": 69, - "typeName": "Option>", - "docs": [] - } - ], - "index": 8, - "docs": [ - "Emits on terminating the worker.", - "Params:", - "- worker id.", - "- Penalty.", - "- Rationale." - ] - }, - { - "name": "TerminatedLeader", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": null, - "type": 105, - "typeName": "Option", - "docs": [] - }, - { - "name": null, - "type": 69, - "typeName": "Option>", - "docs": [] - } - ], - "index": 9, - "docs": [ - "Emits on terminating the leader.", - "Params:", - "- leader worker id.", - "- Penalty.", - "- Rationale." - ] - }, - { - "name": "StakeSlashed", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": null, - "type": 6, - "typeName": "Balance", - "docs": [] - }, - { - "name": null, - "type": 6, - "typeName": "Balance", - "docs": [] - }, - { - "name": null, - "type": 69, - "typeName": "Option>", - "docs": [] - } - ], - "index": 10, - "docs": [ - "Emits on slashing the regular worker/lead stake.", - "Params:", - "- regular worker/lead id.", - "- actual slashed balance.", - "- Requested slashed balance.", - "- Rationale." - ] - }, - { - "name": "StakeDecreased", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": null, - "type": 6, - "typeName": "Balance", - "docs": [] - } - ], - "index": 11, - "docs": [ - "Emits on decreasing the regular worker/lead stake.", - "Params:", - "- regular worker/lead id.", - "- stake delta amount" - ] - }, - { - "name": "StakeIncreased", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": null, - "type": 6, - "typeName": "Balance", - "docs": [] - } - ], - "index": 12, - "docs": [ - "Emits on increasing the regular worker/lead stake.", - "Params:", - "- regular worker/lead id.", - "- stake delta amount" - ] - }, - { - "name": "ApplicationWithdrawn", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "ApplicationId", - "docs": [] - } - ], - "index": 13, - "docs": [ - "Emits on withdrawing the application for the regular worker/lead opening.", - "Params:", - "- Job application id" - ] - }, - { - "name": "OpeningCanceled", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "OpeningId", - "docs": [] - } - ], - "index": 14, - "docs": [ - "Emits on canceling the job opening.", - "Params:", - "- Opening id" - ] - }, - { - "name": "BudgetSet", - "fields": [ - { - "name": null, - "type": 6, - "typeName": "Balance", - "docs": [] - } - ], - "index": 15, - "docs": [ - "Emits on setting the budget for the working group.", - "Params:", - "- new budget" - ] - }, - { - "name": "WorkerRewardAccountUpdated", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": null, - "type": 0, - "typeName": "AccountId", - "docs": [] - } - ], - "index": 16, - "docs": [ - "Emits on updating the reward account of the worker.", - "Params:", - "- Id of the worker.", - "- Reward account id of the worker." - ] - }, - { - "name": "WorkerRewardAmountUpdated", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": null, - "type": 105, - "typeName": "Option", - "docs": [] - } - ], - "index": 17, - "docs": [ - "Emits on updating the reward amount of the worker.", - "Params:", - "- Id of the worker.", - "- Reward per block" - ] - }, - { - "name": "StatusTextChanged", - "fields": [ - { - "name": null, - "type": 10, - "typeName": "Vec", - "docs": [] - }, - { - "name": null, - "type": 69, - "typeName": "Option>", - "docs": [] - } - ], - "index": 18, - "docs": [ - "Emits on updating the status text of the working group.", - "Params:", - "- status text hash", - "- status text" - ] - }, - { - "name": "BudgetSpending", - "fields": [ - { - "name": null, - "type": 0, - "typeName": "AccountId", - "docs": [] - }, - { - "name": null, - "type": 6, - "typeName": "Balance", - "docs": [] - }, - { - "name": null, - "type": 69, - "typeName": "Option>", - "docs": [] - } - ], - "index": 19, - "docs": [ - "Emits on budget from the working group being spent", - "Params:", - "- Receiver Account Id.", - "- Balance spent.", - "- Rationale." - ] - }, - { - "name": "RewardPaid", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": null, - "type": 0, - "typeName": "AccountId", - "docs": [] - }, - { - "name": null, - "type": 6, - "typeName": "Balance", - "docs": [] - }, - { - "name": null, - "type": 199, - "typeName": "RewardPaymentType", - "docs": [] - } - ], - "index": 20, - "docs": [ - "Emits on paying the reward.", - "Params:", - "- Id of the worker.", - "- Receiver Account Id.", - "- Reward", - "- Payment type (missed reward or regular one)" - ] - }, - { - "name": "NewMissedRewardLevelReached", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": null, - "type": 105, - "typeName": "Option", - "docs": [] - } - ], - "index": 21, - "docs": [ - "Emits on reaching new missed reward.", - "Params:", - "- Worker ID.", - "- Missed reward (optional). None means 'no missed reward'." - ] - }, - { - "name": "WorkerStorageUpdated", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": null, - "type": 10, - "typeName": "Vec", - "docs": [] - } - ], - "index": 22, - "docs": [ - "Emits on updating the worker storage role.", - "Params:", - "- Id of the worker.", - "- Raw storage field." - ] - }, - { - "name": "WorkingGroupBudgetFunded", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "MemberId", - "docs": [] - }, - { - "name": null, - "type": 6, - "typeName": "Balance", - "docs": [] - }, - { - "name": null, - "type": 10, - "typeName": "Vec", - "docs": [] - } - ], - "index": 23, - "docs": [ - "Fund the working group budget.", - "Params:", - "- Member ID", - "- Amount of balance", - "- Rationale" - ] - }, - { - "name": "LeadRemarked", - "fields": [ - { - "name": null, - "type": 10, - "typeName": "Vec", - "docs": [] - } - ], - "index": 24, - "docs": [ - "Emits on Lead making a remark message", - "Params:", - "- message" - ] - }, - { - "name": "WorkerRemarked", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": null, - "type": 10, - "typeName": "Vec", - "docs": [] - } - ], - "index": 25, - "docs": [ - "Emits on Lead making a remark message", - "Params:", - "- worker", - "- message" - ] - } - ] - } - }, - "docs": [ - "Events for this module.", - "", - "_Group_ events" - ] - } - }, - { - "id": 192, - "type": { - "path": [ - "BTreeMap" - ], - "params": [ - { - "name": "K", - "type": 8 - }, - { - "name": "V", - "type": 8 - } - ], - "def": { - "composite": { - "fields": [ - { - "name": null, - "type": 193, - "typeName": null, - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 193, - "type": { - "path": [], - "params": [], - "def": { - "sequence": { - "type": 194 - } - }, - "docs": [] - } - }, - { - "id": 194, - "type": { - "path": [], - "params": [], - "def": { - "tuple": [ - 8, - 8 - ] - }, - "docs": [] - } - }, - { - "id": 195, - "type": { - "path": [ - "pallet_working_group", - "types", - "OpeningType" - ], - "params": [], - "def": { - "variant": { - "variants": [ - { - "name": "Leader", - "fields": [], - "index": 0, - "docs": [] - }, - { - "name": "Regular", - "fields": [], - "index": 1, - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 196, - "type": { - "path": [ - "pallet_working_group", - "types", - "ApplyOnOpeningParams" - ], - "params": [ - { - "name": "MemberId", - "type": 8 - }, - { - "name": "OpeningId", - "type": 8 - }, - { - "name": "AccountId", - "type": 0 - }, - { - "name": "Balance", - "type": 6 - } - ], - "def": { - "composite": { - "fields": [ - { - "name": "member_id", - "type": 8, - "typeName": "MemberId", - "docs": [] - }, - { - "name": "opening_id", - "type": 8, - "typeName": "OpeningId", - "docs": [] - }, - { - "name": "role_account_id", - "type": 0, - "typeName": "AccountId", - "docs": [] - }, - { - "name": "reward_account_id", - "type": 0, - "typeName": "AccountId", - "docs": [] - }, - { - "name": "description", - "type": 10, - "typeName": "Vec", - "docs": [] - }, - { - "name": "stake_parameters", - "type": 197, - "typeName": "StakeParameters", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 197, - "type": { - "path": [ - "pallet_working_group", - "types", - "StakeParameters" - ], - "params": [ - { - "name": "AccountId", - "type": 0 - }, - { - "name": "Balance", - "type": 6 - } - ], - "def": { - "composite": { - "fields": [ - { - "name": "stake", - "type": 6, - "typeName": "Balance", - "docs": [] - }, - { - "name": "staking_account_id", - "type": 0, - "typeName": "AccountId", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 198, - "type": { - "path": [ - "pallet_working_group", - "Instance1" - ], - "params": [], - "def": { - "composite": { - "fields": [] - } - }, - "docs": [] - } - }, - { - "id": 199, - "type": { - "path": [ - "pallet_working_group", - "types", - "RewardPaymentType" - ], - "params": [], - "def": { - "variant": { - "variants": [ - { - "name": "MissedReward", - "fields": [], - "index": 0, - "docs": [] - }, - { - "name": "RegularReward", - "fields": [], - "index": 1, - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 200, - "type": { - "path": [ - "pallet_working_group", - "RawEvent" - ], - "params": [ - { - "name": "OpeningId", - "type": 8 - }, - { - "name": "ApplicationId", - "type": 8 - }, - { - "name": "ApplicationIdToWorkerIdMap", - "type": 192 - }, - { - "name": "WorkerId", - "type": 8 - }, - { - "name": "AccountId", - "type": 0 - }, - { - "name": "Balance", - "type": 6 - }, - { - "name": "OpeningType", - "type": 195 - }, - { - "name": "StakePolicy", - "type": 188 - }, - { - "name": "ApplyOnOpeningParameters", - "type": 196 - }, - { - "name": "MemberId", - "type": 8 - }, - { - "name": "I", - "type": 201 - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "OpeningAdded", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "OpeningId", - "docs": [] - }, - { - "name": null, - "type": 10, - "typeName": "Vec", - "docs": [] - }, - { - "name": null, - "type": 195, - "typeName": "OpeningType", - "docs": [] - }, - { - "name": null, - "type": 188, - "typeName": "StakePolicy", - "docs": [] - }, - { - "name": null, - "type": 105, - "typeName": "Option", - "docs": [] - } - ], - "index": 0, - "docs": [ - "Emits on adding new job opening.", - "Params:", - "- Opening id", - "- Description", - "- Opening Type(Lead or Worker)", - "- Stake Policy for the opening", - "- Reward per block" - ] - }, - { - "name": "AppliedOnOpening", - "fields": [ - { - "name": null, - "type": 196, - "typeName": "ApplyOnOpeningParameters", - "docs": [] - }, - { - "name": null, - "type": 8, - "typeName": "ApplicationId", - "docs": [] - } - ], - "index": 1, - "docs": [ - "Emits on adding the application for the worker opening.", - "Params:", - "- Opening parameteres", - "- Application id" - ] - }, - { - "name": "OpeningFilled", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "OpeningId", - "docs": [] - }, - { - "name": null, - "type": 192, - "typeName": "ApplicationIdToWorkerIdMap", - "docs": [] - }, - { - "name": null, - "type": 101, - "typeName": "BTreeSet", - "docs": [] - } - ], - "index": 2, - "docs": [ - "Emits on filling the job opening.", - "Params:", - "- Worker opening id", - "- Worker application id to the worker id dictionary", - "- Applicationd ids used to fill the opening" - ] - }, - { - "name": "LeaderSet", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "WorkerId", - "docs": [] - } - ], - "index": 3, - "docs": [ - "Emits on setting the group leader.", - "Params:", - "- Group worker id." - ] - }, - { - "name": "WorkerRoleAccountUpdated", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": null, - "type": 0, - "typeName": "AccountId", - "docs": [] - } - ], - "index": 4, - "docs": [ - "Emits on updating the role account of the worker.", - "Params:", - "- Id of the worker.", - "- Role account id of the worker." - ] - }, - { - "name": "LeaderUnset", - "fields": [], - "index": 5, - "docs": [ - "Emits on un-setting the leader." - ] - }, - { - "name": "WorkerExited", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "WorkerId", - "docs": [] - } - ], - "index": 6, - "docs": [ - "Emits on exiting the worker.", - "Params:", - "- worker id.", - "- Rationale." - ] - }, - { - "name": "WorkerStartedLeaving", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": null, - "type": 69, - "typeName": "Option>", - "docs": [] - } - ], - "index": 7, - "docs": [ - "Emits when worker started leaving their role.", - "Params:", - "- Worker id.", - "- Rationale." - ] - }, - { - "name": "TerminatedWorker", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": null, - "type": 105, - "typeName": "Option", - "docs": [] - }, - { - "name": null, - "type": 69, - "typeName": "Option>", - "docs": [] - } - ], - "index": 8, - "docs": [ - "Emits on terminating the worker.", - "Params:", - "- worker id.", - "- Penalty.", - "- Rationale." - ] - }, - { - "name": "TerminatedLeader", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": null, - "type": 105, - "typeName": "Option", - "docs": [] - }, - { - "name": null, - "type": 69, - "typeName": "Option>", - "docs": [] - } - ], - "index": 9, - "docs": [ - "Emits on terminating the leader.", - "Params:", - "- leader worker id.", - "- Penalty.", - "- Rationale." - ] - }, - { - "name": "StakeSlashed", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": null, - "type": 6, - "typeName": "Balance", - "docs": [] - }, - { - "name": null, - "type": 6, - "typeName": "Balance", - "docs": [] - }, - { - "name": null, - "type": 69, - "typeName": "Option>", - "docs": [] - } - ], - "index": 10, - "docs": [ - "Emits on slashing the regular worker/lead stake.", - "Params:", - "- regular worker/lead id.", - "- actual slashed balance.", - "- Requested slashed balance.", - "- Rationale." - ] - }, - { - "name": "StakeDecreased", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": null, - "type": 6, - "typeName": "Balance", - "docs": [] - } - ], - "index": 11, - "docs": [ - "Emits on decreasing the regular worker/lead stake.", - "Params:", - "- regular worker/lead id.", - "- stake delta amount" - ] - }, - { - "name": "StakeIncreased", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": null, - "type": 6, - "typeName": "Balance", - "docs": [] - } - ], - "index": 12, - "docs": [ - "Emits on increasing the regular worker/lead stake.", - "Params:", - "- regular worker/lead id.", - "- stake delta amount" - ] - }, - { - "name": "ApplicationWithdrawn", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "ApplicationId", - "docs": [] - } - ], - "index": 13, - "docs": [ - "Emits on withdrawing the application for the regular worker/lead opening.", - "Params:", - "- Job application id" - ] - }, - { - "name": "OpeningCanceled", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "OpeningId", - "docs": [] - } - ], - "index": 14, - "docs": [ - "Emits on canceling the job opening.", - "Params:", - "- Opening id" - ] - }, - { - "name": "BudgetSet", - "fields": [ - { - "name": null, - "type": 6, - "typeName": "Balance", - "docs": [] - } - ], - "index": 15, - "docs": [ - "Emits on setting the budget for the working group.", - "Params:", - "- new budget" - ] - }, - { - "name": "WorkerRewardAccountUpdated", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": null, - "type": 0, - "typeName": "AccountId", - "docs": [] - } - ], - "index": 16, - "docs": [ - "Emits on updating the reward account of the worker.", - "Params:", - "- Id of the worker.", - "- Reward account id of the worker." - ] - }, - { - "name": "WorkerRewardAmountUpdated", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": null, - "type": 105, - "typeName": "Option", - "docs": [] - } - ], - "index": 17, - "docs": [ - "Emits on updating the reward amount of the worker.", - "Params:", - "- Id of the worker.", - "- Reward per block" - ] - }, - { - "name": "StatusTextChanged", - "fields": [ - { - "name": null, - "type": 10, - "typeName": "Vec", - "docs": [] - }, - { - "name": null, - "type": 69, - "typeName": "Option>", - "docs": [] - } - ], - "index": 18, - "docs": [ - "Emits on updating the status text of the working group.", - "Params:", - "- status text hash", - "- status text" - ] - }, - { - "name": "BudgetSpending", - "fields": [ - { - "name": null, - "type": 0, - "typeName": "AccountId", - "docs": [] - }, - { - "name": null, - "type": 6, - "typeName": "Balance", - "docs": [] - }, - { - "name": null, - "type": 69, - "typeName": "Option>", - "docs": [] - } - ], - "index": 19, - "docs": [ - "Emits on budget from the working group being spent", - "Params:", - "- Receiver Account Id.", - "- Balance spent.", - "- Rationale." - ] - }, - { - "name": "RewardPaid", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": null, - "type": 0, - "typeName": "AccountId", - "docs": [] - }, - { - "name": null, - "type": 6, - "typeName": "Balance", - "docs": [] - }, - { - "name": null, - "type": 199, - "typeName": "RewardPaymentType", - "docs": [] - } - ], - "index": 20, - "docs": [ - "Emits on paying the reward.", - "Params:", - "- Id of the worker.", - "- Receiver Account Id.", - "- Reward", - "- Payment type (missed reward or regular one)" - ] - }, - { - "name": "NewMissedRewardLevelReached", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": null, - "type": 105, - "typeName": "Option", - "docs": [] - } - ], - "index": 21, - "docs": [ - "Emits on reaching new missed reward.", - "Params:", - "- Worker ID.", - "- Missed reward (optional). None means 'no missed reward'." - ] - }, - { - "name": "WorkerStorageUpdated", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": null, - "type": 10, - "typeName": "Vec", - "docs": [] - } - ], - "index": 22, - "docs": [ - "Emits on updating the worker storage role.", - "Params:", - "- Id of the worker.", - "- Raw storage field." - ] - }, - { - "name": "WorkingGroupBudgetFunded", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "MemberId", - "docs": [] - }, - { - "name": null, - "type": 6, - "typeName": "Balance", - "docs": [] - }, - { - "name": null, - "type": 10, - "typeName": "Vec", - "docs": [] - } - ], - "index": 23, - "docs": [ - "Fund the working group budget.", - "Params:", - "- Member ID", - "- Amount of balance", - "- Rationale" - ] - }, - { - "name": "LeadRemarked", - "fields": [ - { - "name": null, - "type": 10, - "typeName": "Vec", - "docs": [] - } - ], - "index": 24, - "docs": [ - "Emits on Lead making a remark message", - "Params:", - "- message" - ] - }, - { - "name": "WorkerRemarked", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": null, - "type": 10, - "typeName": "Vec", - "docs": [] - } - ], - "index": 25, - "docs": [ - "Emits on Lead making a remark message", - "Params:", - "- worker", - "- message" - ] - } - ] - } - }, - "docs": [ - "Events for this module.", - "", - "_Group_ events" - ] - } - }, - { - "id": 201, - "type": { - "path": [ - "pallet_working_group", - "Instance2" - ], - "params": [], - "def": { - "composite": { - "fields": [] - } - }, - "docs": [] - } - }, - { - "id": 202, - "type": { - "path": [ - "pallet_working_group", - "RawEvent" - ], - "params": [ - { - "name": "OpeningId", - "type": 8 - }, - { - "name": "ApplicationId", - "type": 8 - }, - { - "name": "ApplicationIdToWorkerIdMap", - "type": 192 - }, - { - "name": "WorkerId", - "type": 8 - }, - { - "name": "AccountId", - "type": 0 - }, - { - "name": "Balance", - "type": 6 - }, - { - "name": "OpeningType", - "type": 195 - }, - { - "name": "StakePolicy", - "type": 188 - }, - { - "name": "ApplyOnOpeningParameters", - "type": 196 - }, - { - "name": "MemberId", - "type": 8 - }, - { - "name": "I", - "type": 203 - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "OpeningAdded", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "OpeningId", - "docs": [] - }, - { - "name": null, - "type": 10, - "typeName": "Vec", - "docs": [] - }, - { - "name": null, - "type": 195, - "typeName": "OpeningType", - "docs": [] - }, - { - "name": null, - "type": 188, - "typeName": "StakePolicy", - "docs": [] - }, - { - "name": null, - "type": 105, - "typeName": "Option", - "docs": [] - } - ], - "index": 0, - "docs": [ - "Emits on adding new job opening.", - "Params:", - "- Opening id", - "- Description", - "- Opening Type(Lead or Worker)", - "- Stake Policy for the opening", - "- Reward per block" - ] - }, - { - "name": "AppliedOnOpening", - "fields": [ - { - "name": null, - "type": 196, - "typeName": "ApplyOnOpeningParameters", - "docs": [] - }, - { - "name": null, - "type": 8, - "typeName": "ApplicationId", - "docs": [] - } - ], - "index": 1, - "docs": [ - "Emits on adding the application for the worker opening.", - "Params:", - "- Opening parameteres", - "- Application id" - ] - }, - { - "name": "OpeningFilled", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "OpeningId", - "docs": [] - }, - { - "name": null, - "type": 192, - "typeName": "ApplicationIdToWorkerIdMap", - "docs": [] - }, - { - "name": null, - "type": 101, - "typeName": "BTreeSet", - "docs": [] - } - ], - "index": 2, - "docs": [ - "Emits on filling the job opening.", - "Params:", - "- Worker opening id", - "- Worker application id to the worker id dictionary", - "- Applicationd ids used to fill the opening" - ] - }, - { - "name": "LeaderSet", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "WorkerId", - "docs": [] - } - ], - "index": 3, - "docs": [ - "Emits on setting the group leader.", - "Params:", - "- Group worker id." - ] - }, - { - "name": "WorkerRoleAccountUpdated", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": null, - "type": 0, - "typeName": "AccountId", - "docs": [] - } - ], - "index": 4, - "docs": [ - "Emits on updating the role account of the worker.", - "Params:", - "- Id of the worker.", - "- Role account id of the worker." - ] - }, - { - "name": "LeaderUnset", - "fields": [], - "index": 5, - "docs": [ - "Emits on un-setting the leader." - ] - }, - { - "name": "WorkerExited", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "WorkerId", - "docs": [] - } - ], - "index": 6, - "docs": [ - "Emits on exiting the worker.", - "Params:", - "- worker id.", - "- Rationale." - ] - }, - { - "name": "WorkerStartedLeaving", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": null, - "type": 69, - "typeName": "Option>", - "docs": [] - } - ], - "index": 7, - "docs": [ - "Emits when worker started leaving their role.", - "Params:", - "- Worker id.", - "- Rationale." - ] - }, - { - "name": "TerminatedWorker", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": null, - "type": 105, - "typeName": "Option", - "docs": [] - }, - { - "name": null, - "type": 69, - "typeName": "Option>", - "docs": [] - } - ], - "index": 8, - "docs": [ - "Emits on terminating the worker.", - "Params:", - "- worker id.", - "- Penalty.", - "- Rationale." - ] - }, - { - "name": "TerminatedLeader", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": null, - "type": 105, - "typeName": "Option", - "docs": [] - }, - { - "name": null, - "type": 69, - "typeName": "Option>", - "docs": [] - } - ], - "index": 9, - "docs": [ - "Emits on terminating the leader.", - "Params:", - "- leader worker id.", - "- Penalty.", - "- Rationale." - ] - }, - { - "name": "StakeSlashed", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": null, - "type": 6, - "typeName": "Balance", - "docs": [] - }, - { - "name": null, - "type": 6, - "typeName": "Balance", - "docs": [] - }, - { - "name": null, - "type": 69, - "typeName": "Option>", - "docs": [] - } - ], - "index": 10, - "docs": [ - "Emits on slashing the regular worker/lead stake.", - "Params:", - "- regular worker/lead id.", - "- actual slashed balance.", - "- Requested slashed balance.", - "- Rationale." - ] - }, - { - "name": "StakeDecreased", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": null, - "type": 6, - "typeName": "Balance", - "docs": [] - } - ], - "index": 11, - "docs": [ - "Emits on decreasing the regular worker/lead stake.", - "Params:", - "- regular worker/lead id.", - "- stake delta amount" - ] - }, - { - "name": "StakeIncreased", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": null, - "type": 6, - "typeName": "Balance", - "docs": [] - } - ], - "index": 12, - "docs": [ - "Emits on increasing the regular worker/lead stake.", - "Params:", - "- regular worker/lead id.", - "- stake delta amount" - ] - }, - { - "name": "ApplicationWithdrawn", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "ApplicationId", - "docs": [] - } - ], - "index": 13, - "docs": [ - "Emits on withdrawing the application for the regular worker/lead opening.", - "Params:", - "- Job application id" - ] - }, - { - "name": "OpeningCanceled", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "OpeningId", - "docs": [] - } - ], - "index": 14, - "docs": [ - "Emits on canceling the job opening.", - "Params:", - "- Opening id" - ] - }, - { - "name": "BudgetSet", - "fields": [ - { - "name": null, - "type": 6, - "typeName": "Balance", - "docs": [] - } - ], - "index": 15, - "docs": [ - "Emits on setting the budget for the working group.", - "Params:", - "- new budget" - ] - }, - { - "name": "WorkerRewardAccountUpdated", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": null, - "type": 0, - "typeName": "AccountId", - "docs": [] - } - ], - "index": 16, - "docs": [ - "Emits on updating the reward account of the worker.", - "Params:", - "- Id of the worker.", - "- Reward account id of the worker." - ] - }, - { - "name": "WorkerRewardAmountUpdated", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": null, - "type": 105, - "typeName": "Option", - "docs": [] - } - ], - "index": 17, - "docs": [ - "Emits on updating the reward amount of the worker.", - "Params:", - "- Id of the worker.", - "- Reward per block" - ] - }, - { - "name": "StatusTextChanged", - "fields": [ - { - "name": null, - "type": 10, - "typeName": "Vec", - "docs": [] - }, - { - "name": null, - "type": 69, - "typeName": "Option>", - "docs": [] - } - ], - "index": 18, - "docs": [ - "Emits on updating the status text of the working group.", - "Params:", - "- status text hash", - "- status text" - ] - }, - { - "name": "BudgetSpending", - "fields": [ - { - "name": null, - "type": 0, - "typeName": "AccountId", - "docs": [] - }, - { - "name": null, - "type": 6, - "typeName": "Balance", - "docs": [] - }, - { - "name": null, - "type": 69, - "typeName": "Option>", - "docs": [] - } - ], - "index": 19, - "docs": [ - "Emits on budget from the working group being spent", - "Params:", - "- Receiver Account Id.", - "- Balance spent.", - "- Rationale." - ] - }, - { - "name": "RewardPaid", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": null, - "type": 0, - "typeName": "AccountId", - "docs": [] - }, - { - "name": null, - "type": 6, - "typeName": "Balance", - "docs": [] - }, - { - "name": null, - "type": 199, - "typeName": "RewardPaymentType", - "docs": [] - } - ], - "index": 20, - "docs": [ - "Emits on paying the reward.", - "Params:", - "- Id of the worker.", - "- Receiver Account Id.", - "- Reward", - "- Payment type (missed reward or regular one)" - ] - }, - { - "name": "NewMissedRewardLevelReached", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": null, - "type": 105, - "typeName": "Option", - "docs": [] - } - ], - "index": 21, - "docs": [ - "Emits on reaching new missed reward.", - "Params:", - "- Worker ID.", - "- Missed reward (optional). None means 'no missed reward'." - ] - }, - { - "name": "WorkerStorageUpdated", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": null, - "type": 10, - "typeName": "Vec", - "docs": [] - } - ], - "index": 22, - "docs": [ - "Emits on updating the worker storage role.", - "Params:", - "- Id of the worker.", - "- Raw storage field." - ] - }, - { - "name": "WorkingGroupBudgetFunded", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "MemberId", - "docs": [] - }, - { - "name": null, - "type": 6, - "typeName": "Balance", - "docs": [] - }, - { - "name": null, - "type": 10, - "typeName": "Vec", - "docs": [] - } - ], - "index": 23, - "docs": [ - "Fund the working group budget.", - "Params:", - "- Member ID", - "- Amount of balance", - "- Rationale" - ] - }, - { - "name": "LeadRemarked", - "fields": [ - { - "name": null, - "type": 10, - "typeName": "Vec", - "docs": [] - } - ], - "index": 24, - "docs": [ - "Emits on Lead making a remark message", - "Params:", - "- message" - ] - }, - { - "name": "WorkerRemarked", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": null, - "type": 10, - "typeName": "Vec", - "docs": [] - } - ], - "index": 25, - "docs": [ - "Emits on Lead making a remark message", - "Params:", - "- worker", - "- message" - ] - } - ] - } - }, - "docs": [ - "Events for this module.", - "", - "_Group_ events" - ] - } - }, - { - "id": 203, - "type": { - "path": [ - "pallet_working_group", - "Instance3" - ], - "params": [], - "def": { - "composite": { - "fields": [] - } - }, - "docs": [] - } - }, - { - "id": 204, - "type": { - "path": [ - "pallet_working_group", - "RawEvent" - ], - "params": [ - { - "name": "OpeningId", - "type": 8 - }, - { - "name": "ApplicationId", - "type": 8 - }, - { - "name": "ApplicationIdToWorkerIdMap", - "type": 192 - }, - { - "name": "WorkerId", - "type": 8 - }, - { - "name": "AccountId", - "type": 0 - }, - { - "name": "Balance", - "type": 6 - }, - { - "name": "OpeningType", - "type": 195 - }, - { - "name": "StakePolicy", - "type": 188 - }, - { - "name": "ApplyOnOpeningParameters", - "type": 196 - }, - { - "name": "MemberId", - "type": 8 - }, - { - "name": "I", - "type": 205 - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "OpeningAdded", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "OpeningId", - "docs": [] - }, - { - "name": null, - "type": 10, - "typeName": "Vec", - "docs": [] - }, - { - "name": null, - "type": 195, - "typeName": "OpeningType", - "docs": [] - }, - { - "name": null, - "type": 188, - "typeName": "StakePolicy", - "docs": [] - }, - { - "name": null, - "type": 105, - "typeName": "Option", - "docs": [] - } - ], - "index": 0, - "docs": [ - "Emits on adding new job opening.", - "Params:", - "- Opening id", - "- Description", - "- Opening Type(Lead or Worker)", - "- Stake Policy for the opening", - "- Reward per block" - ] - }, - { - "name": "AppliedOnOpening", - "fields": [ - { - "name": null, - "type": 196, - "typeName": "ApplyOnOpeningParameters", - "docs": [] - }, - { - "name": null, - "type": 8, - "typeName": "ApplicationId", - "docs": [] - } - ], - "index": 1, - "docs": [ - "Emits on adding the application for the worker opening.", - "Params:", - "- Opening parameteres", - "- Application id" - ] - }, - { - "name": "OpeningFilled", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "OpeningId", - "docs": [] - }, - { - "name": null, - "type": 192, - "typeName": "ApplicationIdToWorkerIdMap", - "docs": [] - }, - { - "name": null, - "type": 101, - "typeName": "BTreeSet", - "docs": [] - } - ], - "index": 2, - "docs": [ - "Emits on filling the job opening.", - "Params:", - "- Worker opening id", - "- Worker application id to the worker id dictionary", - "- Applicationd ids used to fill the opening" - ] - }, - { - "name": "LeaderSet", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "WorkerId", - "docs": [] - } - ], - "index": 3, - "docs": [ - "Emits on setting the group leader.", - "Params:", - "- Group worker id." - ] - }, - { - "name": "WorkerRoleAccountUpdated", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": null, - "type": 0, - "typeName": "AccountId", - "docs": [] - } - ], - "index": 4, - "docs": [ - "Emits on updating the role account of the worker.", - "Params:", - "- Id of the worker.", - "- Role account id of the worker." - ] - }, - { - "name": "LeaderUnset", - "fields": [], - "index": 5, - "docs": [ - "Emits on un-setting the leader." - ] - }, - { - "name": "WorkerExited", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "WorkerId", - "docs": [] - } - ], - "index": 6, - "docs": [ - "Emits on exiting the worker.", - "Params:", - "- worker id.", - "- Rationale." - ] - }, - { - "name": "WorkerStartedLeaving", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": null, - "type": 69, - "typeName": "Option>", - "docs": [] - } - ], - "index": 7, - "docs": [ - "Emits when worker started leaving their role.", - "Params:", - "- Worker id.", - "- Rationale." - ] - }, - { - "name": "TerminatedWorker", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": null, - "type": 105, - "typeName": "Option", - "docs": [] - }, - { - "name": null, - "type": 69, - "typeName": "Option>", - "docs": [] - } - ], - "index": 8, - "docs": [ - "Emits on terminating the worker.", - "Params:", - "- worker id.", - "- Penalty.", - "- Rationale." - ] - }, - { - "name": "TerminatedLeader", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": null, - "type": 105, - "typeName": "Option", - "docs": [] - }, - { - "name": null, - "type": 69, - "typeName": "Option>", - "docs": [] - } - ], - "index": 9, - "docs": [ - "Emits on terminating the leader.", - "Params:", - "- leader worker id.", - "- Penalty.", - "- Rationale." - ] - }, - { - "name": "StakeSlashed", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": null, - "type": 6, - "typeName": "Balance", - "docs": [] - }, - { - "name": null, - "type": 6, - "typeName": "Balance", - "docs": [] - }, - { - "name": null, - "type": 69, - "typeName": "Option>", - "docs": [] - } - ], - "index": 10, - "docs": [ - "Emits on slashing the regular worker/lead stake.", - "Params:", - "- regular worker/lead id.", - "- actual slashed balance.", - "- Requested slashed balance.", - "- Rationale." - ] - }, - { - "name": "StakeDecreased", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": null, - "type": 6, - "typeName": "Balance", - "docs": [] - } - ], - "index": 11, - "docs": [ - "Emits on decreasing the regular worker/lead stake.", - "Params:", - "- regular worker/lead id.", - "- stake delta amount" - ] - }, - { - "name": "StakeIncreased", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": null, - "type": 6, - "typeName": "Balance", - "docs": [] - } - ], - "index": 12, - "docs": [ - "Emits on increasing the regular worker/lead stake.", - "Params:", - "- regular worker/lead id.", - "- stake delta amount" - ] - }, - { - "name": "ApplicationWithdrawn", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "ApplicationId", - "docs": [] - } - ], - "index": 13, - "docs": [ - "Emits on withdrawing the application for the regular worker/lead opening.", - "Params:", - "- Job application id" - ] - }, - { - "name": "OpeningCanceled", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "OpeningId", - "docs": [] - } - ], - "index": 14, - "docs": [ - "Emits on canceling the job opening.", - "Params:", - "- Opening id" - ] - }, - { - "name": "BudgetSet", - "fields": [ - { - "name": null, - "type": 6, - "typeName": "Balance", - "docs": [] - } - ], - "index": 15, - "docs": [ - "Emits on setting the budget for the working group.", - "Params:", - "- new budget" - ] - }, - { - "name": "WorkerRewardAccountUpdated", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": null, - "type": 0, - "typeName": "AccountId", - "docs": [] - } - ], - "index": 16, - "docs": [ - "Emits on updating the reward account of the worker.", - "Params:", - "- Id of the worker.", - "- Reward account id of the worker." - ] - }, - { - "name": "WorkerRewardAmountUpdated", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": null, - "type": 105, - "typeName": "Option", - "docs": [] - } - ], - "index": 17, - "docs": [ - "Emits on updating the reward amount of the worker.", - "Params:", - "- Id of the worker.", - "- Reward per block" - ] - }, - { - "name": "StatusTextChanged", - "fields": [ - { - "name": null, - "type": 10, - "typeName": "Vec", - "docs": [] - }, - { - "name": null, - "type": 69, - "typeName": "Option>", - "docs": [] - } - ], - "index": 18, - "docs": [ - "Emits on updating the status text of the working group.", - "Params:", - "- status text hash", - "- status text" - ] - }, - { - "name": "BudgetSpending", - "fields": [ - { - "name": null, - "type": 0, - "typeName": "AccountId", - "docs": [] - }, - { - "name": null, - "type": 6, - "typeName": "Balance", - "docs": [] - }, - { - "name": null, - "type": 69, - "typeName": "Option>", - "docs": [] - } - ], - "index": 19, - "docs": [ - "Emits on budget from the working group being spent", - "Params:", - "- Receiver Account Id.", - "- Balance spent.", - "- Rationale." - ] - }, - { - "name": "RewardPaid", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": null, - "type": 0, - "typeName": "AccountId", - "docs": [] - }, - { - "name": null, - "type": 6, - "typeName": "Balance", - "docs": [] - }, - { - "name": null, - "type": 199, - "typeName": "RewardPaymentType", - "docs": [] - } - ], - "index": 20, - "docs": [ - "Emits on paying the reward.", - "Params:", - "- Id of the worker.", - "- Receiver Account Id.", - "- Reward", - "- Payment type (missed reward or regular one)" - ] - }, - { - "name": "NewMissedRewardLevelReached", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": null, - "type": 105, - "typeName": "Option", - "docs": [] - } - ], - "index": 21, - "docs": [ - "Emits on reaching new missed reward.", - "Params:", - "- Worker ID.", - "- Missed reward (optional). None means 'no missed reward'." - ] - }, - { - "name": "WorkerStorageUpdated", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": null, - "type": 10, - "typeName": "Vec", - "docs": [] - } - ], - "index": 22, - "docs": [ - "Emits on updating the worker storage role.", - "Params:", - "- Id of the worker.", - "- Raw storage field." - ] - }, - { - "name": "WorkingGroupBudgetFunded", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "MemberId", - "docs": [] - }, - { - "name": null, - "type": 6, - "typeName": "Balance", - "docs": [] - }, - { - "name": null, - "type": 10, - "typeName": "Vec", - "docs": [] - } - ], - "index": 23, - "docs": [ - "Fund the working group budget.", - "Params:", - "- Member ID", - "- Amount of balance", - "- Rationale" - ] - }, - { - "name": "LeadRemarked", - "fields": [ - { - "name": null, - "type": 10, - "typeName": "Vec", - "docs": [] - } - ], - "index": 24, - "docs": [ - "Emits on Lead making a remark message", - "Params:", - "- message" - ] - }, - { - "name": "WorkerRemarked", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": null, - "type": 10, - "typeName": "Vec", - "docs": [] - } - ], - "index": 25, - "docs": [ - "Emits on Lead making a remark message", - "Params:", - "- worker", - "- message" - ] - } - ] - } - }, - "docs": [ - "Events for this module.", - "", - "_Group_ events" - ] - } - }, - { - "id": 205, - "type": { - "path": [ - "pallet_working_group", - "Instance4" - ], - "params": [], - "def": { - "composite": { - "fields": [] - } - }, - "docs": [] - } - }, - { - "id": 206, - "type": { - "path": [ - "pallet_working_group", - "RawEvent" - ], - "params": [ - { - "name": "OpeningId", - "type": 8 - }, - { - "name": "ApplicationId", - "type": 8 - }, - { - "name": "ApplicationIdToWorkerIdMap", - "type": 192 - }, - { - "name": "WorkerId", - "type": 8 - }, - { - "name": "AccountId", - "type": 0 - }, - { - "name": "Balance", - "type": 6 - }, - { - "name": "OpeningType", - "type": 195 - }, - { - "name": "StakePolicy", - "type": 188 - }, - { - "name": "ApplyOnOpeningParameters", - "type": 196 - }, - { - "name": "MemberId", - "type": 8 - }, - { - "name": "I", - "type": 207 - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "OpeningAdded", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "OpeningId", - "docs": [] - }, - { - "name": null, - "type": 10, - "typeName": "Vec", - "docs": [] - }, - { - "name": null, - "type": 195, - "typeName": "OpeningType", - "docs": [] - }, - { - "name": null, - "type": 188, - "typeName": "StakePolicy", - "docs": [] - }, - { - "name": null, - "type": 105, - "typeName": "Option", - "docs": [] - } - ], - "index": 0, - "docs": [ - "Emits on adding new job opening.", - "Params:", - "- Opening id", - "- Description", - "- Opening Type(Lead or Worker)", - "- Stake Policy for the opening", - "- Reward per block" - ] - }, - { - "name": "AppliedOnOpening", - "fields": [ - { - "name": null, - "type": 196, - "typeName": "ApplyOnOpeningParameters", - "docs": [] - }, - { - "name": null, - "type": 8, - "typeName": "ApplicationId", - "docs": [] - } - ], - "index": 1, - "docs": [ - "Emits on adding the application for the worker opening.", - "Params:", - "- Opening parameteres", - "- Application id" - ] - }, - { - "name": "OpeningFilled", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "OpeningId", - "docs": [] - }, - { - "name": null, - "type": 192, - "typeName": "ApplicationIdToWorkerIdMap", - "docs": [] - }, - { - "name": null, - "type": 101, - "typeName": "BTreeSet", - "docs": [] - } - ], - "index": 2, - "docs": [ - "Emits on filling the job opening.", - "Params:", - "- Worker opening id", - "- Worker application id to the worker id dictionary", - "- Applicationd ids used to fill the opening" - ] - }, - { - "name": "LeaderSet", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "WorkerId", - "docs": [] - } - ], - "index": 3, - "docs": [ - "Emits on setting the group leader.", - "Params:", - "- Group worker id." - ] - }, - { - "name": "WorkerRoleAccountUpdated", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": null, - "type": 0, - "typeName": "AccountId", - "docs": [] - } - ], - "index": 4, - "docs": [ - "Emits on updating the role account of the worker.", - "Params:", - "- Id of the worker.", - "- Role account id of the worker." - ] - }, - { - "name": "LeaderUnset", - "fields": [], - "index": 5, - "docs": [ - "Emits on un-setting the leader." - ] - }, - { - "name": "WorkerExited", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "WorkerId", - "docs": [] - } - ], - "index": 6, - "docs": [ - "Emits on exiting the worker.", - "Params:", - "- worker id.", - "- Rationale." - ] - }, - { - "name": "WorkerStartedLeaving", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": null, - "type": 69, - "typeName": "Option>", - "docs": [] - } - ], - "index": 7, - "docs": [ - "Emits when worker started leaving their role.", - "Params:", - "- Worker id.", - "- Rationale." - ] - }, - { - "name": "TerminatedWorker", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": null, - "type": 105, - "typeName": "Option", - "docs": [] - }, - { - "name": null, - "type": 69, - "typeName": "Option>", - "docs": [] - } - ], - "index": 8, - "docs": [ - "Emits on terminating the worker.", - "Params:", - "- worker id.", - "- Penalty.", - "- Rationale." - ] - }, - { - "name": "TerminatedLeader", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": null, - "type": 105, - "typeName": "Option", - "docs": [] - }, - { - "name": null, - "type": 69, - "typeName": "Option>", - "docs": [] - } - ], - "index": 9, - "docs": [ - "Emits on terminating the leader.", - "Params:", - "- leader worker id.", - "- Penalty.", - "- Rationale." - ] - }, - { - "name": "StakeSlashed", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": null, - "type": 6, - "typeName": "Balance", - "docs": [] - }, - { - "name": null, - "type": 6, - "typeName": "Balance", - "docs": [] - }, - { - "name": null, - "type": 69, - "typeName": "Option>", - "docs": [] - } - ], - "index": 10, - "docs": [ - "Emits on slashing the regular worker/lead stake.", - "Params:", - "- regular worker/lead id.", - "- actual slashed balance.", - "- Requested slashed balance.", - "- Rationale." - ] - }, - { - "name": "StakeDecreased", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": null, - "type": 6, - "typeName": "Balance", - "docs": [] - } - ], - "index": 11, - "docs": [ - "Emits on decreasing the regular worker/lead stake.", - "Params:", - "- regular worker/lead id.", - "- stake delta amount" - ] - }, - { - "name": "StakeIncreased", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": null, - "type": 6, - "typeName": "Balance", - "docs": [] - } - ], - "index": 12, - "docs": [ - "Emits on increasing the regular worker/lead stake.", - "Params:", - "- regular worker/lead id.", - "- stake delta amount" - ] - }, - { - "name": "ApplicationWithdrawn", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "ApplicationId", - "docs": [] - } - ], - "index": 13, - "docs": [ - "Emits on withdrawing the application for the regular worker/lead opening.", - "Params:", - "- Job application id" - ] - }, - { - "name": "OpeningCanceled", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "OpeningId", - "docs": [] - } - ], - "index": 14, - "docs": [ - "Emits on canceling the job opening.", - "Params:", - "- Opening id" - ] - }, - { - "name": "BudgetSet", - "fields": [ - { - "name": null, - "type": 6, - "typeName": "Balance", - "docs": [] - } - ], - "index": 15, - "docs": [ - "Emits on setting the budget for the working group.", - "Params:", - "- new budget" - ] - }, - { - "name": "WorkerRewardAccountUpdated", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": null, - "type": 0, - "typeName": "AccountId", - "docs": [] - } - ], - "index": 16, - "docs": [ - "Emits on updating the reward account of the worker.", - "Params:", - "- Id of the worker.", - "- Reward account id of the worker." - ] - }, - { - "name": "WorkerRewardAmountUpdated", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": null, - "type": 105, - "typeName": "Option", - "docs": [] - } - ], - "index": 17, - "docs": [ - "Emits on updating the reward amount of the worker.", - "Params:", - "- Id of the worker.", - "- Reward per block" - ] - }, - { - "name": "StatusTextChanged", - "fields": [ - { - "name": null, - "type": 10, - "typeName": "Vec", - "docs": [] - }, - { - "name": null, - "type": 69, - "typeName": "Option>", - "docs": [] - } - ], - "index": 18, - "docs": [ - "Emits on updating the status text of the working group.", - "Params:", - "- status text hash", - "- status text" - ] - }, - { - "name": "BudgetSpending", - "fields": [ - { - "name": null, - "type": 0, - "typeName": "AccountId", - "docs": [] - }, - { - "name": null, - "type": 6, - "typeName": "Balance", - "docs": [] - }, - { - "name": null, - "type": 69, - "typeName": "Option>", - "docs": [] - } - ], - "index": 19, - "docs": [ - "Emits on budget from the working group being spent", - "Params:", - "- Receiver Account Id.", - "- Balance spent.", - "- Rationale." - ] - }, - { - "name": "RewardPaid", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": null, - "type": 0, - "typeName": "AccountId", - "docs": [] - }, - { - "name": null, - "type": 6, - "typeName": "Balance", - "docs": [] - }, - { - "name": null, - "type": 199, - "typeName": "RewardPaymentType", - "docs": [] - } - ], - "index": 20, - "docs": [ - "Emits on paying the reward.", - "Params:", - "- Id of the worker.", - "- Receiver Account Id.", - "- Reward", - "- Payment type (missed reward or regular one)" - ] - }, - { - "name": "NewMissedRewardLevelReached", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": null, - "type": 105, - "typeName": "Option", - "docs": [] - } - ], - "index": 21, - "docs": [ - "Emits on reaching new missed reward.", - "Params:", - "- Worker ID.", - "- Missed reward (optional). None means 'no missed reward'." - ] - }, - { - "name": "WorkerStorageUpdated", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": null, - "type": 10, - "typeName": "Vec", - "docs": [] - } - ], - "index": 22, - "docs": [ - "Emits on updating the worker storage role.", - "Params:", - "- Id of the worker.", - "- Raw storage field." - ] - }, - { - "name": "WorkingGroupBudgetFunded", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "MemberId", - "docs": [] - }, - { - "name": null, - "type": 6, - "typeName": "Balance", - "docs": [] - }, - { - "name": null, - "type": 10, - "typeName": "Vec", - "docs": [] - } - ], - "index": 23, - "docs": [ - "Fund the working group budget.", - "Params:", - "- Member ID", - "- Amount of balance", - "- Rationale" - ] - }, - { - "name": "LeadRemarked", - "fields": [ - { - "name": null, - "type": 10, - "typeName": "Vec", - "docs": [] - } - ], - "index": 24, - "docs": [ - "Emits on Lead making a remark message", - "Params:", - "- message" - ] - }, - { - "name": "WorkerRemarked", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": null, - "type": 10, - "typeName": "Vec", - "docs": [] - } - ], - "index": 25, - "docs": [ - "Emits on Lead making a remark message", - "Params:", - "- worker", - "- message" - ] - } - ] - } - }, - "docs": [ - "Events for this module.", - "", - "_Group_ events" - ] - } - }, - { - "id": 207, - "type": { - "path": [ - "pallet_working_group", - "Instance5" - ], - "params": [], - "def": { - "composite": { - "fields": [] - } - }, - "docs": [] - } - }, - { - "id": 208, - "type": { - "path": [ - "pallet_working_group", - "RawEvent" - ], - "params": [ - { - "name": "OpeningId", - "type": 8 - }, - { - "name": "ApplicationId", - "type": 8 - }, - { - "name": "ApplicationIdToWorkerIdMap", - "type": 192 - }, - { - "name": "WorkerId", - "type": 8 - }, - { - "name": "AccountId", - "type": 0 - }, - { - "name": "Balance", - "type": 6 - }, - { - "name": "OpeningType", - "type": 195 - }, - { - "name": "StakePolicy", - "type": 188 - }, - { - "name": "ApplyOnOpeningParameters", - "type": 196 - }, - { - "name": "MemberId", - "type": 8 - }, - { - "name": "I", - "type": 209 - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "OpeningAdded", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "OpeningId", - "docs": [] - }, - { - "name": null, - "type": 10, - "typeName": "Vec", - "docs": [] - }, - { - "name": null, - "type": 195, - "typeName": "OpeningType", - "docs": [] - }, - { - "name": null, - "type": 188, - "typeName": "StakePolicy", - "docs": [] - }, - { - "name": null, - "type": 105, - "typeName": "Option", - "docs": [] - } - ], - "index": 0, - "docs": [ - "Emits on adding new job opening.", - "Params:", - "- Opening id", - "- Description", - "- Opening Type(Lead or Worker)", - "- Stake Policy for the opening", - "- Reward per block" - ] - }, - { - "name": "AppliedOnOpening", - "fields": [ - { - "name": null, - "type": 196, - "typeName": "ApplyOnOpeningParameters", - "docs": [] - }, - { - "name": null, - "type": 8, - "typeName": "ApplicationId", - "docs": [] - } - ], - "index": 1, - "docs": [ - "Emits on adding the application for the worker opening.", - "Params:", - "- Opening parameteres", - "- Application id" - ] - }, - { - "name": "OpeningFilled", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "OpeningId", - "docs": [] - }, - { - "name": null, - "type": 192, - "typeName": "ApplicationIdToWorkerIdMap", - "docs": [] - }, - { - "name": null, - "type": 101, - "typeName": "BTreeSet", - "docs": [] - } - ], - "index": 2, - "docs": [ - "Emits on filling the job opening.", - "Params:", - "- Worker opening id", - "- Worker application id to the worker id dictionary", - "- Applicationd ids used to fill the opening" - ] - }, - { - "name": "LeaderSet", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "WorkerId", - "docs": [] - } - ], - "index": 3, - "docs": [ - "Emits on setting the group leader.", - "Params:", - "- Group worker id." - ] - }, - { - "name": "WorkerRoleAccountUpdated", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": null, - "type": 0, - "typeName": "AccountId", - "docs": [] - } - ], - "index": 4, - "docs": [ - "Emits on updating the role account of the worker.", - "Params:", - "- Id of the worker.", - "- Role account id of the worker." - ] - }, - { - "name": "LeaderUnset", - "fields": [], - "index": 5, - "docs": [ - "Emits on un-setting the leader." - ] - }, - { - "name": "WorkerExited", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "WorkerId", - "docs": [] - } - ], - "index": 6, - "docs": [ - "Emits on exiting the worker.", - "Params:", - "- worker id.", - "- Rationale." - ] - }, - { - "name": "WorkerStartedLeaving", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": null, - "type": 69, - "typeName": "Option>", - "docs": [] - } - ], - "index": 7, - "docs": [ - "Emits when worker started leaving their role.", - "Params:", - "- Worker id.", - "- Rationale." - ] - }, - { - "name": "TerminatedWorker", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": null, - "type": 105, - "typeName": "Option", - "docs": [] - }, - { - "name": null, - "type": 69, - "typeName": "Option>", - "docs": [] - } - ], - "index": 8, - "docs": [ - "Emits on terminating the worker.", - "Params:", - "- worker id.", - "- Penalty.", - "- Rationale." - ] - }, - { - "name": "TerminatedLeader", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": null, - "type": 105, - "typeName": "Option", - "docs": [] - }, - { - "name": null, - "type": 69, - "typeName": "Option>", - "docs": [] - } - ], - "index": 9, - "docs": [ - "Emits on terminating the leader.", - "Params:", - "- leader worker id.", - "- Penalty.", - "- Rationale." - ] - }, - { - "name": "StakeSlashed", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": null, - "type": 6, - "typeName": "Balance", - "docs": [] - }, - { - "name": null, - "type": 6, - "typeName": "Balance", - "docs": [] - }, - { - "name": null, - "type": 69, - "typeName": "Option>", - "docs": [] - } - ], - "index": 10, - "docs": [ - "Emits on slashing the regular worker/lead stake.", - "Params:", - "- regular worker/lead id.", - "- actual slashed balance.", - "- Requested slashed balance.", - "- Rationale." - ] - }, - { - "name": "StakeDecreased", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": null, - "type": 6, - "typeName": "Balance", - "docs": [] - } - ], - "index": 11, - "docs": [ - "Emits on decreasing the regular worker/lead stake.", - "Params:", - "- regular worker/lead id.", - "- stake delta amount" - ] - }, - { - "name": "StakeIncreased", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": null, - "type": 6, - "typeName": "Balance", - "docs": [] - } - ], - "index": 12, - "docs": [ - "Emits on increasing the regular worker/lead stake.", - "Params:", - "- regular worker/lead id.", - "- stake delta amount" - ] - }, - { - "name": "ApplicationWithdrawn", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "ApplicationId", - "docs": [] - } - ], - "index": 13, - "docs": [ - "Emits on withdrawing the application for the regular worker/lead opening.", - "Params:", - "- Job application id" - ] - }, - { - "name": "OpeningCanceled", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "OpeningId", - "docs": [] - } - ], - "index": 14, - "docs": [ - "Emits on canceling the job opening.", - "Params:", - "- Opening id" - ] - }, - { - "name": "BudgetSet", - "fields": [ - { - "name": null, - "type": 6, - "typeName": "Balance", - "docs": [] - } - ], - "index": 15, - "docs": [ - "Emits on setting the budget for the working group.", - "Params:", - "- new budget" - ] - }, - { - "name": "WorkerRewardAccountUpdated", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": null, - "type": 0, - "typeName": "AccountId", - "docs": [] - } - ], - "index": 16, - "docs": [ - "Emits on updating the reward account of the worker.", - "Params:", - "- Id of the worker.", - "- Reward account id of the worker." - ] - }, - { - "name": "WorkerRewardAmountUpdated", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": null, - "type": 105, - "typeName": "Option", - "docs": [] - } - ], - "index": 17, - "docs": [ - "Emits on updating the reward amount of the worker.", - "Params:", - "- Id of the worker.", - "- Reward per block" - ] - }, - { - "name": "StatusTextChanged", - "fields": [ - { - "name": null, - "type": 10, - "typeName": "Vec", - "docs": [] - }, - { - "name": null, - "type": 69, - "typeName": "Option>", - "docs": [] - } - ], - "index": 18, - "docs": [ - "Emits on updating the status text of the working group.", - "Params:", - "- status text hash", - "- status text" - ] - }, - { - "name": "BudgetSpending", - "fields": [ - { - "name": null, - "type": 0, - "typeName": "AccountId", - "docs": [] - }, - { - "name": null, - "type": 6, - "typeName": "Balance", - "docs": [] - }, - { - "name": null, - "type": 69, - "typeName": "Option>", - "docs": [] - } - ], - "index": 19, - "docs": [ - "Emits on budget from the working group being spent", - "Params:", - "- Receiver Account Id.", - "- Balance spent.", - "- Rationale." - ] - }, - { - "name": "RewardPaid", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": null, - "type": 0, - "typeName": "AccountId", - "docs": [] - }, - { - "name": null, - "type": 6, - "typeName": "Balance", - "docs": [] - }, - { - "name": null, - "type": 199, - "typeName": "RewardPaymentType", - "docs": [] - } - ], - "index": 20, - "docs": [ - "Emits on paying the reward.", - "Params:", - "- Id of the worker.", - "- Receiver Account Id.", - "- Reward", - "- Payment type (missed reward or regular one)" - ] - }, - { - "name": "NewMissedRewardLevelReached", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": null, - "type": 105, - "typeName": "Option", - "docs": [] - } - ], - "index": 21, - "docs": [ - "Emits on reaching new missed reward.", - "Params:", - "- Worker ID.", - "- Missed reward (optional). None means 'no missed reward'." - ] - }, - { - "name": "WorkerStorageUpdated", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": null, - "type": 10, - "typeName": "Vec", - "docs": [] - } - ], - "index": 22, - "docs": [ - "Emits on updating the worker storage role.", - "Params:", - "- Id of the worker.", - "- Raw storage field." - ] - }, - { - "name": "WorkingGroupBudgetFunded", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "MemberId", - "docs": [] - }, - { - "name": null, - "type": 6, - "typeName": "Balance", - "docs": [] - }, - { - "name": null, - "type": 10, - "typeName": "Vec", - "docs": [] - } - ], - "index": 23, - "docs": [ - "Fund the working group budget.", - "Params:", - "- Member ID", - "- Amount of balance", - "- Rationale" - ] - }, - { - "name": "LeadRemarked", - "fields": [ - { - "name": null, - "type": 10, - "typeName": "Vec", - "docs": [] - } - ], - "index": 24, - "docs": [ - "Emits on Lead making a remark message", - "Params:", - "- message" - ] - }, - { - "name": "WorkerRemarked", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": null, - "type": 10, - "typeName": "Vec", - "docs": [] - } - ], - "index": 25, - "docs": [ - "Emits on Lead making a remark message", - "Params:", - "- worker", - "- message" - ] - } - ] - } - }, - "docs": [ - "Events for this module.", - "", - "_Group_ events" - ] - } - }, - { - "id": 209, - "type": { - "path": [ - "pallet_working_group", - "Instance6" - ], - "params": [], - "def": { - "composite": { - "fields": [] - } - }, - "docs": [] - } - }, - { - "id": 210, - "type": { - "path": [ - "pallet_working_group", - "RawEvent" - ], - "params": [ - { - "name": "OpeningId", - "type": 8 - }, - { - "name": "ApplicationId", - "type": 8 - }, - { - "name": "ApplicationIdToWorkerIdMap", - "type": 192 - }, - { - "name": "WorkerId", - "type": 8 - }, - { - "name": "AccountId", - "type": 0 - }, - { - "name": "Balance", - "type": 6 - }, - { - "name": "OpeningType", - "type": 195 - }, - { - "name": "StakePolicy", - "type": 188 - }, - { - "name": "ApplyOnOpeningParameters", - "type": 196 - }, - { - "name": "MemberId", - "type": 8 - }, - { - "name": "I", - "type": 211 - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "OpeningAdded", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "OpeningId", - "docs": [] - }, - { - "name": null, - "type": 10, - "typeName": "Vec", - "docs": [] - }, - { - "name": null, - "type": 195, - "typeName": "OpeningType", - "docs": [] - }, - { - "name": null, - "type": 188, - "typeName": "StakePolicy", - "docs": [] - }, - { - "name": null, - "type": 105, - "typeName": "Option", - "docs": [] - } - ], - "index": 0, - "docs": [ - "Emits on adding new job opening.", - "Params:", - "- Opening id", - "- Description", - "- Opening Type(Lead or Worker)", - "- Stake Policy for the opening", - "- Reward per block" - ] - }, - { - "name": "AppliedOnOpening", - "fields": [ - { - "name": null, - "type": 196, - "typeName": "ApplyOnOpeningParameters", - "docs": [] - }, - { - "name": null, - "type": 8, - "typeName": "ApplicationId", - "docs": [] - } - ], - "index": 1, - "docs": [ - "Emits on adding the application for the worker opening.", - "Params:", - "- Opening parameteres", - "- Application id" - ] - }, - { - "name": "OpeningFilled", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "OpeningId", - "docs": [] - }, - { - "name": null, - "type": 192, - "typeName": "ApplicationIdToWorkerIdMap", - "docs": [] - }, - { - "name": null, - "type": 101, - "typeName": "BTreeSet", - "docs": [] - } - ], - "index": 2, - "docs": [ - "Emits on filling the job opening.", - "Params:", - "- Worker opening id", - "- Worker application id to the worker id dictionary", - "- Applicationd ids used to fill the opening" - ] - }, - { - "name": "LeaderSet", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "WorkerId", - "docs": [] - } - ], - "index": 3, - "docs": [ - "Emits on setting the group leader.", - "Params:", - "- Group worker id." - ] - }, - { - "name": "WorkerRoleAccountUpdated", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": null, - "type": 0, - "typeName": "AccountId", - "docs": [] - } - ], - "index": 4, - "docs": [ - "Emits on updating the role account of the worker.", - "Params:", - "- Id of the worker.", - "- Role account id of the worker." - ] - }, - { - "name": "LeaderUnset", - "fields": [], - "index": 5, - "docs": [ - "Emits on un-setting the leader." - ] - }, - { - "name": "WorkerExited", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "WorkerId", - "docs": [] - } - ], - "index": 6, - "docs": [ - "Emits on exiting the worker.", - "Params:", - "- worker id.", - "- Rationale." - ] - }, - { - "name": "WorkerStartedLeaving", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": null, - "type": 69, - "typeName": "Option>", - "docs": [] - } - ], - "index": 7, - "docs": [ - "Emits when worker started leaving their role.", - "Params:", - "- Worker id.", - "- Rationale." - ] - }, - { - "name": "TerminatedWorker", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": null, - "type": 105, - "typeName": "Option", - "docs": [] - }, - { - "name": null, - "type": 69, - "typeName": "Option>", - "docs": [] - } - ], - "index": 8, - "docs": [ - "Emits on terminating the worker.", - "Params:", - "- worker id.", - "- Penalty.", - "- Rationale." - ] - }, - { - "name": "TerminatedLeader", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": null, - "type": 105, - "typeName": "Option", - "docs": [] - }, - { - "name": null, - "type": 69, - "typeName": "Option>", - "docs": [] - } - ], - "index": 9, - "docs": [ - "Emits on terminating the leader.", - "Params:", - "- leader worker id.", - "- Penalty.", - "- Rationale." - ] - }, - { - "name": "StakeSlashed", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": null, - "type": 6, - "typeName": "Balance", - "docs": [] - }, - { - "name": null, - "type": 6, - "typeName": "Balance", - "docs": [] - }, - { - "name": null, - "type": 69, - "typeName": "Option>", - "docs": [] - } - ], - "index": 10, - "docs": [ - "Emits on slashing the regular worker/lead stake.", - "Params:", - "- regular worker/lead id.", - "- actual slashed balance.", - "- Requested slashed balance.", - "- Rationale." - ] - }, - { - "name": "StakeDecreased", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": null, - "type": 6, - "typeName": "Balance", - "docs": [] - } - ], - "index": 11, - "docs": [ - "Emits on decreasing the regular worker/lead stake.", - "Params:", - "- regular worker/lead id.", - "- stake delta amount" - ] - }, - { - "name": "StakeIncreased", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": null, - "type": 6, - "typeName": "Balance", - "docs": [] - } - ], - "index": 12, - "docs": [ - "Emits on increasing the regular worker/lead stake.", - "Params:", - "- regular worker/lead id.", - "- stake delta amount" - ] - }, - { - "name": "ApplicationWithdrawn", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "ApplicationId", - "docs": [] - } - ], - "index": 13, - "docs": [ - "Emits on withdrawing the application for the regular worker/lead opening.", - "Params:", - "- Job application id" - ] - }, - { - "name": "OpeningCanceled", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "OpeningId", - "docs": [] - } - ], - "index": 14, - "docs": [ - "Emits on canceling the job opening.", - "Params:", - "- Opening id" - ] - }, - { - "name": "BudgetSet", - "fields": [ - { - "name": null, - "type": 6, - "typeName": "Balance", - "docs": [] - } - ], - "index": 15, - "docs": [ - "Emits on setting the budget for the working group.", - "Params:", - "- new budget" - ] - }, - { - "name": "WorkerRewardAccountUpdated", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": null, - "type": 0, - "typeName": "AccountId", - "docs": [] - } - ], - "index": 16, - "docs": [ - "Emits on updating the reward account of the worker.", - "Params:", - "- Id of the worker.", - "- Reward account id of the worker." - ] - }, - { - "name": "WorkerRewardAmountUpdated", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": null, - "type": 105, - "typeName": "Option", - "docs": [] - } - ], - "index": 17, - "docs": [ - "Emits on updating the reward amount of the worker.", - "Params:", - "- Id of the worker.", - "- Reward per block" - ] - }, - { - "name": "StatusTextChanged", - "fields": [ - { - "name": null, - "type": 10, - "typeName": "Vec", - "docs": [] - }, - { - "name": null, - "type": 69, - "typeName": "Option>", - "docs": [] - } - ], - "index": 18, - "docs": [ - "Emits on updating the status text of the working group.", - "Params:", - "- status text hash", - "- status text" - ] - }, - { - "name": "BudgetSpending", - "fields": [ - { - "name": null, - "type": 0, - "typeName": "AccountId", - "docs": [] - }, - { - "name": null, - "type": 6, - "typeName": "Balance", - "docs": [] - }, - { - "name": null, - "type": 69, - "typeName": "Option>", - "docs": [] - } - ], - "index": 19, - "docs": [ - "Emits on budget from the working group being spent", - "Params:", - "- Receiver Account Id.", - "- Balance spent.", - "- Rationale." - ] - }, - { - "name": "RewardPaid", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": null, - "type": 0, - "typeName": "AccountId", - "docs": [] - }, - { - "name": null, - "type": 6, - "typeName": "Balance", - "docs": [] - }, - { - "name": null, - "type": 199, - "typeName": "RewardPaymentType", - "docs": [] - } - ], - "index": 20, - "docs": [ - "Emits on paying the reward.", - "Params:", - "- Id of the worker.", - "- Receiver Account Id.", - "- Reward", - "- Payment type (missed reward or regular one)" - ] - }, - { - "name": "NewMissedRewardLevelReached", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": null, - "type": 105, - "typeName": "Option", - "docs": [] - } - ], - "index": 21, - "docs": [ - "Emits on reaching new missed reward.", - "Params:", - "- Worker ID.", - "- Missed reward (optional). None means 'no missed reward'." - ] - }, - { - "name": "WorkerStorageUpdated", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": null, - "type": 10, - "typeName": "Vec", - "docs": [] - } - ], - "index": 22, - "docs": [ - "Emits on updating the worker storage role.", - "Params:", - "- Id of the worker.", - "- Raw storage field." - ] - }, - { - "name": "WorkingGroupBudgetFunded", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "MemberId", - "docs": [] - }, - { - "name": null, - "type": 6, - "typeName": "Balance", - "docs": [] - }, - { - "name": null, - "type": 10, - "typeName": "Vec", - "docs": [] - } - ], - "index": 23, - "docs": [ - "Fund the working group budget.", - "Params:", - "- Member ID", - "- Amount of balance", - "- Rationale" - ] - }, - { - "name": "LeadRemarked", - "fields": [ - { - "name": null, - "type": 10, - "typeName": "Vec", - "docs": [] - } - ], - "index": 24, - "docs": [ - "Emits on Lead making a remark message", - "Params:", - "- message" - ] - }, - { - "name": "WorkerRemarked", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": null, - "type": 10, - "typeName": "Vec", - "docs": [] - } - ], - "index": 25, - "docs": [ - "Emits on Lead making a remark message", - "Params:", - "- worker", - "- message" - ] - } - ] - } - }, - "docs": [ - "Events for this module.", - "", - "_Group_ events" - ] - } - }, - { - "id": 211, - "type": { - "path": [ - "pallet_working_group", - "Instance7" - ], - "params": [], - "def": { - "composite": { - "fields": [] - } - }, - "docs": [] - } - }, - { - "id": 212, - "type": { - "path": [ - "pallet_working_group", - "RawEvent" - ], - "params": [ - { - "name": "OpeningId", - "type": 8 - }, - { - "name": "ApplicationId", - "type": 8 - }, - { - "name": "ApplicationIdToWorkerIdMap", - "type": 192 - }, - { - "name": "WorkerId", - "type": 8 - }, - { - "name": "AccountId", - "type": 0 - }, - { - "name": "Balance", - "type": 6 - }, - { - "name": "OpeningType", - "type": 195 - }, - { - "name": "StakePolicy", - "type": 188 - }, - { - "name": "ApplyOnOpeningParameters", - "type": 196 - }, - { - "name": "MemberId", - "type": 8 - }, - { - "name": "I", - "type": 213 - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "OpeningAdded", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "OpeningId", - "docs": [] - }, - { - "name": null, - "type": 10, - "typeName": "Vec", - "docs": [] - }, - { - "name": null, - "type": 195, - "typeName": "OpeningType", - "docs": [] - }, - { - "name": null, - "type": 188, - "typeName": "StakePolicy", - "docs": [] - }, - { - "name": null, - "type": 105, - "typeName": "Option", - "docs": [] - } - ], - "index": 0, - "docs": [ - "Emits on adding new job opening.", - "Params:", - "- Opening id", - "- Description", - "- Opening Type(Lead or Worker)", - "- Stake Policy for the opening", - "- Reward per block" - ] - }, - { - "name": "AppliedOnOpening", - "fields": [ - { - "name": null, - "type": 196, - "typeName": "ApplyOnOpeningParameters", - "docs": [] - }, - { - "name": null, - "type": 8, - "typeName": "ApplicationId", - "docs": [] - } - ], - "index": 1, - "docs": [ - "Emits on adding the application for the worker opening.", - "Params:", - "- Opening parameteres", - "- Application id" - ] - }, - { - "name": "OpeningFilled", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "OpeningId", - "docs": [] - }, - { - "name": null, - "type": 192, - "typeName": "ApplicationIdToWorkerIdMap", - "docs": [] - }, - { - "name": null, - "type": 101, - "typeName": "BTreeSet", - "docs": [] - } - ], - "index": 2, - "docs": [ - "Emits on filling the job opening.", - "Params:", - "- Worker opening id", - "- Worker application id to the worker id dictionary", - "- Applicationd ids used to fill the opening" - ] - }, - { - "name": "LeaderSet", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "WorkerId", - "docs": [] - } - ], - "index": 3, - "docs": [ - "Emits on setting the group leader.", - "Params:", - "- Group worker id." - ] - }, - { - "name": "WorkerRoleAccountUpdated", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": null, - "type": 0, - "typeName": "AccountId", - "docs": [] - } - ], - "index": 4, - "docs": [ - "Emits on updating the role account of the worker.", - "Params:", - "- Id of the worker.", - "- Role account id of the worker." - ] - }, - { - "name": "LeaderUnset", - "fields": [], - "index": 5, - "docs": [ - "Emits on un-setting the leader." - ] - }, - { - "name": "WorkerExited", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "WorkerId", - "docs": [] - } - ], - "index": 6, - "docs": [ - "Emits on exiting the worker.", - "Params:", - "- worker id.", - "- Rationale." - ] - }, - { - "name": "WorkerStartedLeaving", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": null, - "type": 69, - "typeName": "Option>", - "docs": [] - } - ], - "index": 7, - "docs": [ - "Emits when worker started leaving their role.", - "Params:", - "- Worker id.", - "- Rationale." - ] - }, - { - "name": "TerminatedWorker", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": null, - "type": 105, - "typeName": "Option", - "docs": [] - }, - { - "name": null, - "type": 69, - "typeName": "Option>", - "docs": [] - } - ], - "index": 8, - "docs": [ - "Emits on terminating the worker.", - "Params:", - "- worker id.", - "- Penalty.", - "- Rationale." - ] - }, - { - "name": "TerminatedLeader", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": null, - "type": 105, - "typeName": "Option", - "docs": [] - }, - { - "name": null, - "type": 69, - "typeName": "Option>", - "docs": [] - } - ], - "index": 9, - "docs": [ - "Emits on terminating the leader.", - "Params:", - "- leader worker id.", - "- Penalty.", - "- Rationale." - ] - }, - { - "name": "StakeSlashed", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": null, - "type": 6, - "typeName": "Balance", - "docs": [] - }, - { - "name": null, - "type": 6, - "typeName": "Balance", - "docs": [] - }, - { - "name": null, - "type": 69, - "typeName": "Option>", - "docs": [] - } - ], - "index": 10, - "docs": [ - "Emits on slashing the regular worker/lead stake.", - "Params:", - "- regular worker/lead id.", - "- actual slashed balance.", - "- Requested slashed balance.", - "- Rationale." - ] - }, - { - "name": "StakeDecreased", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": null, - "type": 6, - "typeName": "Balance", - "docs": [] - } - ], - "index": 11, - "docs": [ - "Emits on decreasing the regular worker/lead stake.", - "Params:", - "- regular worker/lead id.", - "- stake delta amount" - ] - }, - { - "name": "StakeIncreased", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": null, - "type": 6, - "typeName": "Balance", - "docs": [] - } - ], - "index": 12, - "docs": [ - "Emits on increasing the regular worker/lead stake.", - "Params:", - "- regular worker/lead id.", - "- stake delta amount" - ] - }, - { - "name": "ApplicationWithdrawn", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "ApplicationId", - "docs": [] - } - ], - "index": 13, - "docs": [ - "Emits on withdrawing the application for the regular worker/lead opening.", - "Params:", - "- Job application id" - ] - }, - { - "name": "OpeningCanceled", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "OpeningId", - "docs": [] - } - ], - "index": 14, - "docs": [ - "Emits on canceling the job opening.", - "Params:", - "- Opening id" - ] - }, - { - "name": "BudgetSet", - "fields": [ - { - "name": null, - "type": 6, - "typeName": "Balance", - "docs": [] - } - ], - "index": 15, - "docs": [ - "Emits on setting the budget for the working group.", - "Params:", - "- new budget" - ] - }, - { - "name": "WorkerRewardAccountUpdated", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": null, - "type": 0, - "typeName": "AccountId", - "docs": [] - } - ], - "index": 16, - "docs": [ - "Emits on updating the reward account of the worker.", - "Params:", - "- Id of the worker.", - "- Reward account id of the worker." - ] - }, - { - "name": "WorkerRewardAmountUpdated", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": null, - "type": 105, - "typeName": "Option", - "docs": [] - } - ], - "index": 17, - "docs": [ - "Emits on updating the reward amount of the worker.", - "Params:", - "- Id of the worker.", - "- Reward per block" - ] - }, - { - "name": "StatusTextChanged", - "fields": [ - { - "name": null, - "type": 10, - "typeName": "Vec", - "docs": [] - }, - { - "name": null, - "type": 69, - "typeName": "Option>", - "docs": [] - } - ], - "index": 18, - "docs": [ - "Emits on updating the status text of the working group.", - "Params:", - "- status text hash", - "- status text" - ] - }, - { - "name": "BudgetSpending", - "fields": [ - { - "name": null, - "type": 0, - "typeName": "AccountId", - "docs": [] - }, - { - "name": null, - "type": 6, - "typeName": "Balance", - "docs": [] - }, - { - "name": null, - "type": 69, - "typeName": "Option>", - "docs": [] - } - ], - "index": 19, - "docs": [ - "Emits on budget from the working group being spent", - "Params:", - "- Receiver Account Id.", - "- Balance spent.", - "- Rationale." - ] - }, - { - "name": "RewardPaid", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": null, - "type": 0, - "typeName": "AccountId", - "docs": [] - }, - { - "name": null, - "type": 6, - "typeName": "Balance", - "docs": [] - }, - { - "name": null, - "type": 199, - "typeName": "RewardPaymentType", - "docs": [] - } - ], - "index": 20, - "docs": [ - "Emits on paying the reward.", - "Params:", - "- Id of the worker.", - "- Receiver Account Id.", - "- Reward", - "- Payment type (missed reward or regular one)" - ] - }, - { - "name": "NewMissedRewardLevelReached", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": null, - "type": 105, - "typeName": "Option", - "docs": [] - } - ], - "index": 21, - "docs": [ - "Emits on reaching new missed reward.", - "Params:", - "- Worker ID.", - "- Missed reward (optional). None means 'no missed reward'." - ] - }, - { - "name": "WorkerStorageUpdated", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": null, - "type": 10, - "typeName": "Vec", - "docs": [] - } - ], - "index": 22, - "docs": [ - "Emits on updating the worker storage role.", - "Params:", - "- Id of the worker.", - "- Raw storage field." - ] - }, - { - "name": "WorkingGroupBudgetFunded", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "MemberId", - "docs": [] - }, - { - "name": null, - "type": 6, - "typeName": "Balance", - "docs": [] - }, - { - "name": null, - "type": 10, - "typeName": "Vec", - "docs": [] - } - ], - "index": 23, - "docs": [ - "Fund the working group budget.", - "Params:", - "- Member ID", - "- Amount of balance", - "- Rationale" - ] - }, - { - "name": "LeadRemarked", - "fields": [ - { - "name": null, - "type": 10, - "typeName": "Vec", - "docs": [] - } - ], - "index": 24, - "docs": [ - "Emits on Lead making a remark message", - "Params:", - "- message" - ] - }, - { - "name": "WorkerRemarked", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": null, - "type": 10, - "typeName": "Vec", - "docs": [] - } - ], - "index": 25, - "docs": [ - "Emits on Lead making a remark message", - "Params:", - "- worker", - "- message" - ] - } - ] - } - }, - "docs": [ - "Events for this module.", - "", - "_Group_ events" - ] - } - }, - { - "id": 213, - "type": { - "path": [ - "pallet_working_group", - "Instance8" - ], - "params": [], - "def": { - "composite": { - "fields": [] - } - }, - "docs": [] - } - }, - { - "id": 214, - "type": { - "path": [ - "pallet_working_group", - "RawEvent" - ], - "params": [ - { - "name": "OpeningId", - "type": 8 - }, - { - "name": "ApplicationId", - "type": 8 - }, - { - "name": "ApplicationIdToWorkerIdMap", - "type": 192 - }, - { - "name": "WorkerId", - "type": 8 - }, - { - "name": "AccountId", - "type": 0 - }, - { - "name": "Balance", - "type": 6 - }, - { - "name": "OpeningType", - "type": 195 - }, - { - "name": "StakePolicy", - "type": 188 - }, - { - "name": "ApplyOnOpeningParameters", - "type": 196 - }, - { - "name": "MemberId", - "type": 8 - }, - { - "name": "I", - "type": 215 - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "OpeningAdded", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "OpeningId", - "docs": [] - }, - { - "name": null, - "type": 10, - "typeName": "Vec", - "docs": [] - }, - { - "name": null, - "type": 195, - "typeName": "OpeningType", - "docs": [] - }, - { - "name": null, - "type": 188, - "typeName": "StakePolicy", - "docs": [] - }, - { - "name": null, - "type": 105, - "typeName": "Option", - "docs": [] - } - ], - "index": 0, - "docs": [ - "Emits on adding new job opening.", - "Params:", - "- Opening id", - "- Description", - "- Opening Type(Lead or Worker)", - "- Stake Policy for the opening", - "- Reward per block" - ] - }, - { - "name": "AppliedOnOpening", - "fields": [ - { - "name": null, - "type": 196, - "typeName": "ApplyOnOpeningParameters", - "docs": [] - }, - { - "name": null, - "type": 8, - "typeName": "ApplicationId", - "docs": [] - } - ], - "index": 1, - "docs": [ - "Emits on adding the application for the worker opening.", - "Params:", - "- Opening parameteres", - "- Application id" - ] - }, - { - "name": "OpeningFilled", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "OpeningId", - "docs": [] - }, - { - "name": null, - "type": 192, - "typeName": "ApplicationIdToWorkerIdMap", - "docs": [] - }, - { - "name": null, - "type": 101, - "typeName": "BTreeSet", - "docs": [] - } - ], - "index": 2, - "docs": [ - "Emits on filling the job opening.", - "Params:", - "- Worker opening id", - "- Worker application id to the worker id dictionary", - "- Applicationd ids used to fill the opening" - ] - }, - { - "name": "LeaderSet", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "WorkerId", - "docs": [] - } - ], - "index": 3, - "docs": [ - "Emits on setting the group leader.", - "Params:", - "- Group worker id." - ] - }, - { - "name": "WorkerRoleAccountUpdated", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": null, - "type": 0, - "typeName": "AccountId", - "docs": [] - } - ], - "index": 4, - "docs": [ - "Emits on updating the role account of the worker.", - "Params:", - "- Id of the worker.", - "- Role account id of the worker." - ] - }, - { - "name": "LeaderUnset", - "fields": [], - "index": 5, - "docs": [ - "Emits on un-setting the leader." - ] - }, - { - "name": "WorkerExited", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "WorkerId", - "docs": [] - } - ], - "index": 6, - "docs": [ - "Emits on exiting the worker.", - "Params:", - "- worker id.", - "- Rationale." - ] - }, - { - "name": "WorkerStartedLeaving", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": null, - "type": 69, - "typeName": "Option>", - "docs": [] - } - ], - "index": 7, - "docs": [ - "Emits when worker started leaving their role.", - "Params:", - "- Worker id.", - "- Rationale." - ] - }, - { - "name": "TerminatedWorker", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": null, - "type": 105, - "typeName": "Option", - "docs": [] - }, - { - "name": null, - "type": 69, - "typeName": "Option>", - "docs": [] - } - ], - "index": 8, - "docs": [ - "Emits on terminating the worker.", - "Params:", - "- worker id.", - "- Penalty.", - "- Rationale." - ] - }, - { - "name": "TerminatedLeader", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": null, - "type": 105, - "typeName": "Option", - "docs": [] - }, - { - "name": null, - "type": 69, - "typeName": "Option>", - "docs": [] - } - ], - "index": 9, - "docs": [ - "Emits on terminating the leader.", - "Params:", - "- leader worker id.", - "- Penalty.", - "- Rationale." - ] - }, - { - "name": "StakeSlashed", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": null, - "type": 6, - "typeName": "Balance", - "docs": [] - }, - { - "name": null, - "type": 6, - "typeName": "Balance", - "docs": [] - }, - { - "name": null, - "type": 69, - "typeName": "Option>", - "docs": [] - } - ], - "index": 10, - "docs": [ - "Emits on slashing the regular worker/lead stake.", - "Params:", - "- regular worker/lead id.", - "- actual slashed balance.", - "- Requested slashed balance.", - "- Rationale." - ] - }, - { - "name": "StakeDecreased", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": null, - "type": 6, - "typeName": "Balance", - "docs": [] - } - ], - "index": 11, - "docs": [ - "Emits on decreasing the regular worker/lead stake.", - "Params:", - "- regular worker/lead id.", - "- stake delta amount" - ] - }, - { - "name": "StakeIncreased", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": null, - "type": 6, - "typeName": "Balance", - "docs": [] - } - ], - "index": 12, - "docs": [ - "Emits on increasing the regular worker/lead stake.", - "Params:", - "- regular worker/lead id.", - "- stake delta amount" - ] - }, - { - "name": "ApplicationWithdrawn", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "ApplicationId", - "docs": [] - } - ], - "index": 13, - "docs": [ - "Emits on withdrawing the application for the regular worker/lead opening.", - "Params:", - "- Job application id" - ] - }, - { - "name": "OpeningCanceled", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "OpeningId", - "docs": [] - } - ], - "index": 14, - "docs": [ - "Emits on canceling the job opening.", - "Params:", - "- Opening id" - ] - }, - { - "name": "BudgetSet", - "fields": [ - { - "name": null, - "type": 6, - "typeName": "Balance", - "docs": [] - } - ], - "index": 15, - "docs": [ - "Emits on setting the budget for the working group.", - "Params:", - "- new budget" - ] - }, - { - "name": "WorkerRewardAccountUpdated", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": null, - "type": 0, - "typeName": "AccountId", - "docs": [] - } - ], - "index": 16, - "docs": [ - "Emits on updating the reward account of the worker.", - "Params:", - "- Id of the worker.", - "- Reward account id of the worker." - ] - }, - { - "name": "WorkerRewardAmountUpdated", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": null, - "type": 105, - "typeName": "Option", - "docs": [] - } - ], - "index": 17, - "docs": [ - "Emits on updating the reward amount of the worker.", - "Params:", - "- Id of the worker.", - "- Reward per block" - ] - }, - { - "name": "StatusTextChanged", - "fields": [ - { - "name": null, - "type": 10, - "typeName": "Vec", - "docs": [] - }, - { - "name": null, - "type": 69, - "typeName": "Option>", - "docs": [] - } - ], - "index": 18, - "docs": [ - "Emits on updating the status text of the working group.", - "Params:", - "- status text hash", - "- status text" - ] - }, - { - "name": "BudgetSpending", - "fields": [ - { - "name": null, - "type": 0, - "typeName": "AccountId", - "docs": [] - }, - { - "name": null, - "type": 6, - "typeName": "Balance", - "docs": [] - }, - { - "name": null, - "type": 69, - "typeName": "Option>", - "docs": [] - } - ], - "index": 19, - "docs": [ - "Emits on budget from the working group being spent", - "Params:", - "- Receiver Account Id.", - "- Balance spent.", - "- Rationale." - ] - }, - { - "name": "RewardPaid", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": null, - "type": 0, - "typeName": "AccountId", - "docs": [] - }, - { - "name": null, - "type": 6, - "typeName": "Balance", - "docs": [] - }, - { - "name": null, - "type": 199, - "typeName": "RewardPaymentType", - "docs": [] - } - ], - "index": 20, - "docs": [ - "Emits on paying the reward.", - "Params:", - "- Id of the worker.", - "- Receiver Account Id.", - "- Reward", - "- Payment type (missed reward or regular one)" - ] - }, - { - "name": "NewMissedRewardLevelReached", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": null, - "type": 105, - "typeName": "Option", - "docs": [] - } - ], - "index": 21, - "docs": [ - "Emits on reaching new missed reward.", - "Params:", - "- Worker ID.", - "- Missed reward (optional). None means 'no missed reward'." - ] - }, - { - "name": "WorkerStorageUpdated", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": null, - "type": 10, - "typeName": "Vec", - "docs": [] - } - ], - "index": 22, - "docs": [ - "Emits on updating the worker storage role.", - "Params:", - "- Id of the worker.", - "- Raw storage field." - ] - }, - { - "name": "WorkingGroupBudgetFunded", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "MemberId", - "docs": [] - }, - { - "name": null, - "type": 6, - "typeName": "Balance", - "docs": [] - }, - { - "name": null, - "type": 10, - "typeName": "Vec", - "docs": [] - } - ], - "index": 23, - "docs": [ - "Fund the working group budget.", - "Params:", - "- Member ID", - "- Amount of balance", - "- Rationale" - ] - }, - { - "name": "LeadRemarked", - "fields": [ - { - "name": null, - "type": 10, - "typeName": "Vec", - "docs": [] - } - ], - "index": 24, - "docs": [ - "Emits on Lead making a remark message", - "Params:", - "- message" - ] - }, - { - "name": "WorkerRemarked", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": null, - "type": 10, - "typeName": "Vec", - "docs": [] - } - ], - "index": 25, - "docs": [ - "Emits on Lead making a remark message", - "Params:", - "- worker", - "- message" - ] - } - ] - } - }, - "docs": [ - "Events for this module.", - "", - "_Group_ events" - ] - } - }, - { - "id": 215, - "type": { - "path": [ - "pallet_working_group", - "Instance9" - ], - "params": [], - "def": { - "composite": { - "fields": [] - } - }, - "docs": [] - } - }, - { - "id": 216, - "type": { - "path": [ - "frame_system", - "Phase" - ], - "params": [], - "def": { - "variant": { - "variants": [ - { - "name": "ApplyExtrinsic", - "fields": [ - { - "name": null, - "type": 4, - "typeName": "u32", - "docs": [] - } - ], - "index": 0, - "docs": [] - }, - { - "name": "Finalization", - "fields": [], - "index": 1, - "docs": [] - }, - { - "name": "Initialization", - "fields": [], - "index": 2, - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 217, - "type": { - "path": [], - "params": [], - "def": { - "sequence": { - "type": 9 - } - }, - "docs": [] - } - }, - { - "id": 218, - "type": { - "path": [], - "params": [], - "def": { - "sequence": { - "type": 219 - } - }, - "docs": [] - } - }, - { - "id": 219, - "type": { - "path": [], - "params": [], - "def": { - "tuple": [ - 4, - 4 - ] - }, - "docs": [] - } - }, - { - "id": 220, - "type": { - "path": [ - "frame_system", - "LastRuntimeUpgradeInfo" - ], - "params": [], - "def": { - "composite": { - "fields": [ - { - "name": "spec_version", - "type": 221, - "typeName": "codec::Compact", - "docs": [] - }, - { - "name": "spec_name", - "type": 222, - "typeName": "sp_runtime::RuntimeString", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 221, - "type": { - "path": [], - "params": [], - "def": { - "compact": { - "type": 4 - } - }, - "docs": [] - } - }, - { - "id": 222, - "type": { - "path": [], - "params": [], - "def": { - "primitive": "Str" - }, - "docs": [] - } - }, - { - "id": 223, - "type": { - "path": [ - "frame_system", - "pallet", - "Call" - ], - "params": [ - { - "name": "T", - "type": null - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "fill_block", - "fields": [ - { - "name": "ratio", - "type": 39, - "typeName": "Perbill", - "docs": [] - } - ], - "index": 0, - "docs": [ - "A dispatch that will fill the block weight up to the given ratio." - ] - }, - { - "name": "remark", - "fields": [ - { - "name": "remark", - "type": 10, - "typeName": "Vec", - "docs": [] - } - ], - "index": 1, - "docs": [ - "Make some on-chain remark.", - "", - "# ", - "- `O(1)`", - "# " - ] - }, - { - "name": "set_heap_pages", - "fields": [ - { - "name": "pages", - "type": 8, - "typeName": "u64", - "docs": [] - } - ], - "index": 2, - "docs": [ - "Set the number of pages in the WebAssembly environment's heap." - ] - }, - { - "name": "set_code", - "fields": [ - { - "name": "code", - "type": 10, - "typeName": "Vec", - "docs": [] - } - ], - "index": 3, - "docs": [ - "Set the new runtime code.", - "", - "# ", - "- `O(C + S)` where `C` length of `code` and `S` complexity of `can_set_code`", - "- 1 call to `can_set_code`: `O(S)` (calls `sp_io::misc::runtime_version` which is", - " expensive).", - "- 1 storage write (codec `O(C)`).", - "- 1 digest item.", - "- 1 event.", - "The weight of this function is dependent on the runtime, but generally this is very", - "expensive. We will treat this as a full block.", - "# " - ] - }, - { - "name": "set_code_without_checks", - "fields": [ - { - "name": "code", - "type": 10, - "typeName": "Vec", - "docs": [] - } - ], - "index": 4, - "docs": [ - "Set the new runtime code without doing any checks of the given `code`.", - "", - "# ", - "- `O(C)` where `C` length of `code`", - "- 1 storage write (codec `O(C)`).", - "- 1 digest item.", - "- 1 event.", - "The weight of this function is dependent on the runtime. We will treat this as a full", - "block. # " - ] - }, - { - "name": "set_storage", - "fields": [ - { - "name": "items", - "type": 224, - "typeName": "Vec", - "docs": [] - } - ], - "index": 5, - "docs": [ - "Set some items of storage." - ] - }, - { - "name": "kill_storage", - "fields": [ - { - "name": "keys", - "type": 76, - "typeName": "Vec", - "docs": [] - } - ], - "index": 6, - "docs": [ - "Kill some items from storage." - ] - }, - { - "name": "kill_prefix", - "fields": [ - { - "name": "prefix", - "type": 10, - "typeName": "Key", - "docs": [] - }, - { - "name": "subkeys", - "type": 4, - "typeName": "u32", - "docs": [] - } - ], - "index": 7, - "docs": [ - "Kill all storage items with a key that starts with the given prefix.", - "", - "**NOTE:** We rely on the Root origin to provide us the number of subkeys under", - "the prefix we are removing to accurately calculate the weight of this function." - ] - }, - { - "name": "remark_with_event", - "fields": [ - { - "name": "remark", - "type": 10, - "typeName": "Vec", - "docs": [] - } - ], - "index": 8, - "docs": [ - "Make some on-chain remark and emit event." - ] - } - ] - } - }, - "docs": [ - "Contains one variant per dispatchable that can be called by an extrinsic." - ] - } - }, - { - "id": 224, - "type": { - "path": [], - "params": [], - "def": { - "sequence": { - "type": 225 - } - }, - "docs": [] - } - }, - { - "id": 225, - "type": { - "path": [], - "params": [], - "def": { - "tuple": [ - 10, - 10 - ] - }, - "docs": [] - } - }, - { - "id": 226, - "type": { - "path": [ - "frame_system", - "limits", - "BlockWeights" - ], - "params": [], - "def": { - "composite": { - "fields": [ - { - "name": "base_block", - "type": 8, - "typeName": "Weight", - "docs": [] - }, - { - "name": "max_block", - "type": 8, - "typeName": "Weight", - "docs": [] - }, - { - "name": "per_class", - "type": 227, - "typeName": "PerDispatchClass", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 227, - "type": { - "path": [ - "frame_support", - "weights", - "PerDispatchClass" - ], - "params": [ - { - "name": "T", - "type": 228 - } - ], - "def": { - "composite": { - "fields": [ - { - "name": "normal", - "type": 228, - "typeName": "T", - "docs": [] - }, - { - "name": "operational", - "type": 228, - "typeName": "T", - "docs": [] - }, - { - "name": "mandatory", - "type": 228, - "typeName": "T", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 228, - "type": { - "path": [ - "frame_system", - "limits", - "WeightsPerClass" - ], - "params": [], - "def": { - "composite": { - "fields": [ - { - "name": "base_extrinsic", - "type": 8, - "typeName": "Weight", - "docs": [] - }, - { - "name": "max_extrinsic", - "type": 70, - "typeName": "Option", - "docs": [] - }, - { - "name": "max_total", - "type": 70, - "typeName": "Option", - "docs": [] - }, - { - "name": "reserved", - "type": 70, - "typeName": "Option", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 229, - "type": { - "path": [ - "frame_system", - "limits", - "BlockLength" - ], - "params": [], - "def": { - "composite": { - "fields": [ - { - "name": "max", - "type": 230, - "typeName": "PerDispatchClass", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 230, - "type": { - "path": [ - "frame_support", - "weights", - "PerDispatchClass" - ], - "params": [ - { - "name": "T", - "type": 4 - } - ], - "def": { - "composite": { - "fields": [ - { - "name": "normal", - "type": 4, - "typeName": "T", - "docs": [] - }, - { - "name": "operational", - "type": 4, - "typeName": "T", - "docs": [] - }, - { - "name": "mandatory", - "type": 4, - "typeName": "T", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 231, - "type": { - "path": [ - "frame_support", - "weights", - "RuntimeDbWeight" - ], - "params": [], - "def": { - "composite": { - "fields": [ - { - "name": "read", - "type": 8, - "typeName": "Weight", - "docs": [] - }, - { - "name": "write", - "type": 8, - "typeName": "Weight", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 232, - "type": { - "path": [ - "sp_version", - "RuntimeVersion" - ], - "params": [], - "def": { - "composite": { - "fields": [ - { - "name": "spec_name", - "type": 222, - "typeName": "RuntimeString", - "docs": [] - }, - { - "name": "impl_name", - "type": 222, - "typeName": "RuntimeString", - "docs": [] - }, - { - "name": "authoring_version", - "type": 4, - "typeName": "u32", - "docs": [] - }, - { - "name": "spec_version", - "type": 4, - "typeName": "u32", - "docs": [] - }, - { - "name": "impl_version", - "type": 4, - "typeName": "u32", - "docs": [] - }, - { - "name": "apis", - "type": 233, - "typeName": "ApisVec", - "docs": [] - }, - { - "name": "transaction_version", - "type": 4, - "typeName": "u32", - "docs": [] - }, - { - "name": "state_version", - "type": 2, - "typeName": "u8", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 233, - "type": { - "path": [ - "Cow" - ], - "params": [ - { - "name": "T", - "type": 234 - } - ], - "def": { - "composite": { - "fields": [ - { - "name": null, - "type": 234, - "typeName": null, - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 234, - "type": { - "path": [], - "params": [], - "def": { - "sequence": { - "type": 235 - } - }, - "docs": [] - } - }, - { - "id": 235, - "type": { - "path": [], - "params": [], - "def": { - "tuple": [ - 236, - 4 - ] - }, - "docs": [] - } - }, - { - "id": 236, - "type": { - "path": [], - "params": [], - "def": { - "array": { - "len": 8, - "type": 2 - } - }, - "docs": [] - } - }, - { - "id": 237, - "type": { - "path": [], - "params": [], - "def": { - "primitive": "U16" - }, - "docs": [] - } - }, - { - "id": 238, - "type": { - "path": [ - "frame_system", - "pallet", - "Error" - ], - "params": [ - { - "name": "T", - "type": null - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "InvalidSpecName", - "fields": [], - "index": 0, - "docs": [ - "The name of specification does not match between the current runtime", - "and the new runtime." - ] - }, - { - "name": "SpecVersionNeedsToIncrease", - "fields": [], - "index": 1, - "docs": [ - "The specification version is not allowed to decrease between the current runtime", - "and the new runtime." - ] - }, - { - "name": "FailedToExtractRuntimeVersion", - "fields": [], - "index": 2, - "docs": [ - "Failed to extract the runtime version from the new runtime.", - "", - "Either calling `Core_version` or decoding `RuntimeVersion` failed." - ] - }, - { - "name": "NonDefaultComposite", - "fields": [], - "index": 3, - "docs": [ - "Suicide called when the account has non-default composite data." - ] - }, - { - "name": "NonZeroRefCount", - "fields": [], - "index": 4, - "docs": [ - "There is a non-zero reference count preventing the account from being purged." - ] - }, - { - "name": "CallFiltered", - "fields": [], - "index": 5, - "docs": [ - "The origin filter prevent the call to be dispatched." - ] - } - ] - } - }, - "docs": [ - "Error for the System pallet" - ] - } - }, - { - "id": 239, - "type": { - "path": [ - "pallet_utility", - "pallet", - "Call" - ], - "params": [ - { - "name": "T", - "type": null - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "batch", - "fields": [ - { - "name": "calls", - "type": 240, - "typeName": "Vec<::Call>", - "docs": [] - } - ], - "index": 0, - "docs": [ - "Send a batch of dispatch calls.", - "", - "May be called from any origin.", - "", - "- `calls`: The calls to be dispatched from the same origin. The number of call must not", - " exceed the constant: `batched_calls_limit` (available in constant metadata).", - "", - "If origin is root then call are dispatch without checking origin filter. (This includes", - "bypassing `frame_system::Config::BaseCallFilter`).", - "", - "# ", - "- Complexity: O(C) where C is the number of calls to be batched.", - "# ", - "", - "This will return `Ok` in all circumstances. To determine the success of the batch, an", - "event is deposited. If a call failed and the batch was interrupted, then the", - "`BatchInterrupted` event is deposited, along with the number of successful calls made", - "and the error of the failed call. If all were successful, then the `BatchCompleted`", - "event is deposited." - ] - }, - { - "name": "as_derivative", - "fields": [ - { - "name": "index", - "type": 237, - "typeName": "u16", - "docs": [] - }, - { - "name": "call", - "type": 241, - "typeName": "Box<::Call>", - "docs": [] - } - ], - "index": 1, - "docs": [ - "Send a call through an indexed pseudonym of the sender.", - "", - "Filter from origin are passed along. The call will be dispatched with an origin which", - "use the same filter as the origin of this call.", - "", - "NOTE: If you need to ensure that any account-based filtering is not honored (i.e.", - "because you expect `proxy` to have been used prior in the call stack and you do not want", - "the call restrictions to apply to any sub-accounts), then use `as_multi_threshold_1`", - "in the Multisig pallet instead.", - "", - "NOTE: Prior to version *12, this was called `as_limited_sub`.", - "", - "The dispatch origin for this call must be _Signed_." - ] - }, - { - "name": "batch_all", - "fields": [ - { - "name": "calls", - "type": 240, - "typeName": "Vec<::Call>", - "docs": [] - } - ], - "index": 2, - "docs": [ - "Send a batch of dispatch calls and atomically execute them.", - "The whole transaction will rollback and fail if any of the calls failed.", - "", - "May be called from any origin.", - "", - "- `calls`: The calls to be dispatched from the same origin. The number of call must not", - " exceed the constant: `batched_calls_limit` (available in constant metadata).", - "", - "If origin is root then call are dispatch without checking origin filter. (This includes", - "bypassing `frame_system::Config::BaseCallFilter`).", - "", - "# ", - "- Complexity: O(C) where C is the number of calls to be batched.", - "# " - ] - }, - { - "name": "dispatch_as", - "fields": [ - { - "name": "as_origin", - "type": 394, - "typeName": "Box", - "docs": [] - }, - { - "name": "call", - "type": 241, - "typeName": "Box<::Call>", - "docs": [] - } - ], - "index": 3, - "docs": [ - "Dispatches a function call with a provided origin.", - "", - "The dispatch origin for this call must be _Root_.", - "", - "# ", - "- O(1).", - "- Limited storage reads.", - "- One DB write (event).", - "- Weight of derivative `call` execution + T::WeightInfo::dispatch_as().", - "# " - ] - }, - { - "name": "force_batch", - "fields": [ - { - "name": "calls", - "type": 240, - "typeName": "Vec<::Call>", - "docs": [] - } - ], - "index": 4, - "docs": [ - "Send a batch of dispatch calls.", - "Unlike `batch`, it allows errors and won't interrupt.", - "", - "May be called from any origin.", - "", - "- `calls`: The calls to be dispatched from the same origin. The number of call must not", - " exceed the constant: `batched_calls_limit` (available in constant metadata).", - "", - "If origin is root then call are dispatch without checking origin filter. (This includes", - "bypassing `frame_system::Config::BaseCallFilter`).", - "", - "# ", - "- Complexity: O(C) where C is the number of calls to be batched.", - "# " - ] - } - ] - } - }, - "docs": [ - "Contains one variant per dispatchable that can be called by an extrinsic." - ] - } - }, - { - "id": 240, - "type": { - "path": [], - "params": [], - "def": { - "sequence": { - "type": 241 - } - }, - "docs": [] - } - }, - { - "id": 241, - "type": { - "path": [ - "joystream_node_runtime", - "Call" - ], - "params": [], - "def": { - "variant": { - "variants": [ - { - "name": "System", - "fields": [ - { - "name": null, - "type": 223, - "typeName": "self::sp_api_hidden_includes_construct_runtime::hidden_include::dispatch\n::CallableCallFor", - "docs": [] - } - ], - "index": 0, - "docs": [] - }, - { - "name": "Utility", - "fields": [ - { - "name": null, - "type": 239, - "typeName": "self::sp_api_hidden_includes_construct_runtime::hidden_include::dispatch\n::CallableCallFor", - "docs": [] - } - ], - "index": 1, - "docs": [] - }, - { - "name": "Babe", - "fields": [ - { - "name": null, - "type": 242, - "typeName": "self::sp_api_hidden_includes_construct_runtime::hidden_include::dispatch\n::CallableCallFor", - "docs": [] - } - ], - "index": 2, - "docs": [] - }, - { - "name": "Timestamp", - "fields": [ - { - "name": null, - "type": 251, - "typeName": "self::sp_api_hidden_includes_construct_runtime::hidden_include::dispatch\n::CallableCallFor", - "docs": [] - } - ], - "index": 3, - "docs": [] - }, - { - "name": "Authorship", - "fields": [ - { - "name": null, - "type": 253, - "typeName": "self::sp_api_hidden_includes_construct_runtime::hidden_include::dispatch\n::CallableCallFor", - "docs": [] - } - ], - "index": 4, - "docs": [] - }, - { - "name": "Balances", - "fields": [ - { - "name": null, - "type": 255, - "typeName": "self::sp_api_hidden_includes_construct_runtime::hidden_include::dispatch\n::CallableCallFor", - "docs": [] - } - ], - "index": 5, - "docs": [] - }, - { - "name": "ElectionProviderMultiPhase", - "fields": [ - { - "name": null, - "type": 256, - "typeName": "self::sp_api_hidden_includes_construct_runtime::hidden_include::dispatch\n::CallableCallFor", - "docs": [] - } - ], - "index": 7, - "docs": [] - }, - { - "name": "Staking", - "fields": [ - { - "name": null, - "type": 317, - "typeName": "self::sp_api_hidden_includes_construct_runtime::hidden_include::dispatch\n::CallableCallFor", - "docs": [] - } - ], - "index": 8, - "docs": [] - }, - { - "name": "Session", - "fields": [ - { - "name": null, - "type": 326, - "typeName": "self::sp_api_hidden_includes_construct_runtime::hidden_include::dispatch\n::CallableCallFor", - "docs": [] - } - ], - "index": 9, - "docs": [] - }, - { - "name": "Grandpa", - "fields": [ - { - "name": null, - "type": 329, - "typeName": "self::sp_api_hidden_includes_construct_runtime::hidden_include::dispatch\n::CallableCallFor", - "docs": [] - } - ], - "index": 11, - "docs": [] - }, - { - "name": "ImOnline", - "fields": [ - { - "name": null, - "type": 341, - "typeName": "self::sp_api_hidden_includes_construct_runtime::hidden_include::dispatch\n::CallableCallFor", - "docs": [] - } - ], - "index": 13, - "docs": [] - }, - { - "name": "Sudo", - "fields": [ - { - "name": null, - "type": 349, - "typeName": "self::sp_api_hidden_includes_construct_runtime::hidden_include::dispatch\n::CallableCallFor", - "docs": [] - } - ], - "index": 16, - "docs": [] - }, - { - "name": "BagsList", - "fields": [ - { - "name": null, - "type": 350, - "typeName": "self::sp_api_hidden_includes_construct_runtime::hidden_include::dispatch\n::CallableCallFor", - "docs": [] - } - ], - "index": 17, - "docs": [] - }, - { - "name": "Vesting", - "fields": [ - { - "name": null, - "type": 351, - "typeName": "self::sp_api_hidden_includes_construct_runtime::hidden_include::dispatch\n::CallableCallFor", - "docs": [] - } - ], - "index": 18, - "docs": [] - }, - { - "name": "Council", - "fields": [ - { - "name": null, - "type": 353, - "typeName": "self::sp_api_hidden_includes_construct_runtime::hidden_include::dispatch\n::CallableCallFor", - "docs": [] - } - ], - "index": 19, - "docs": [] - }, - { - "name": "Referendum", - "fields": [ - { - "name": null, - "type": 354, - "typeName": "self::sp_api_hidden_includes_construct_runtime::hidden_include::dispatch\n::CallableCallFor", - "docs": [] - } - ], - "index": 20, - "docs": [] - }, - { - "name": "Members", - "fields": [ - { - "name": null, - "type": 355, - "typeName": "self::sp_api_hidden_includes_construct_runtime::hidden_include::dispatch\n::CallableCallFor", - "docs": [] - } - ], - "index": 21, - "docs": [] - }, - { - "name": "Forum", - "fields": [ - { - "name": null, - "type": 356, - "typeName": "self::sp_api_hidden_includes_construct_runtime::hidden_include::dispatch\n::CallableCallFor", - "docs": [] - } - ], - "index": 22, - "docs": [] - }, - { - "name": "Constitution", - "fields": [ - { - "name": null, - "type": 357, - "typeName": "self::sp_api_hidden_includes_construct_runtime::hidden_include::dispatch\n::CallableCallFor", - "docs": [] - } - ], - "index": 23, - "docs": [] - }, - { - "name": "JoystreamUtility", - "fields": [ - { - "name": null, - "type": 358, - "typeName": "self::sp_api_hidden_includes_construct_runtime::hidden_include::dispatch\n::CallableCallFor", - "docs": [] - } - ], - "index": 24, - "docs": [] - }, - { - "name": "Content", - "fields": [ - { - "name": null, - "type": 359, - "typeName": "self::sp_api_hidden_includes_construct_runtime::hidden_include::dispatch\n::CallableCallFor", - "docs": [] - } - ], - "index": 25, - "docs": [] - }, - { - "name": "Storage", - "fields": [ - { - "name": null, - "type": 370, - "typeName": "self::sp_api_hidden_includes_construct_runtime::hidden_include::dispatch\n::CallableCallFor", - "docs": [] - } - ], - "index": 26, - "docs": [] - }, - { - "name": "ProjectToken", - "fields": [ - { - "name": null, - "type": 372, - "typeName": "self::sp_api_hidden_includes_construct_runtime::hidden_include::dispatch\n::CallableCallFor", - "docs": [] - } - ], - "index": 27, - "docs": [] - }, - { - "name": "ProposalsEngine", - "fields": [ - { - "name": null, - "type": 382, - "typeName": "self::sp_api_hidden_includes_construct_runtime::hidden_include::dispatch\n::CallableCallFor", - "docs": [] - } - ], - "index": 28, - "docs": [] - }, - { - "name": "ProposalsDiscussion", - "fields": [ - { - "name": null, - "type": 383, - "typeName": "self::sp_api_hidden_includes_construct_runtime::hidden_include::dispatch\n::CallableCallFor", - "docs": [] - } - ], - "index": 29, - "docs": [] - }, - { - "name": "ProposalsCodex", - "fields": [ - { - "name": null, - "type": 384, - "typeName": "self::sp_api_hidden_includes_construct_runtime::hidden_include::dispatch\n::CallableCallFor", - "docs": [] - } - ], - "index": 30, - "docs": [] - }, - { - "name": "ForumWorkingGroup", - "fields": [ - { - "name": null, - "type": 385, - "typeName": "self::sp_api_hidden_includes_construct_runtime::hidden_include::dispatch\n::CallableCallFor", - "docs": [] - } - ], - "index": 31, - "docs": [] - }, - { - "name": "StorageWorkingGroup", - "fields": [ - { - "name": null, - "type": 386, - "typeName": "self::sp_api_hidden_includes_construct_runtime::hidden_include::dispatch\n::CallableCallFor", - "docs": [] - } - ], - "index": 32, - "docs": [] - }, - { - "name": "ContentWorkingGroup", - "fields": [ - { - "name": null, - "type": 387, - "typeName": "self::sp_api_hidden_includes_construct_runtime::hidden_include::dispatch\n::CallableCallFor", - "docs": [] - } - ], - "index": 33, - "docs": [] - }, - { - "name": "OperationsWorkingGroupAlpha", - "fields": [ - { - "name": null, - "type": 388, - "typeName": "self::sp_api_hidden_includes_construct_runtime::hidden_include::dispatch\n::CallableCallFor", - "docs": [] - } - ], - "index": 34, - "docs": [] - }, - { - "name": "AppWorkingGroup", - "fields": [ - { - "name": null, - "type": 389, - "typeName": "self::sp_api_hidden_includes_construct_runtime::hidden_include::dispatch\n::CallableCallFor", - "docs": [] - } - ], - "index": 35, - "docs": [] - }, - { - "name": "MembershipWorkingGroup", - "fields": [ - { - "name": null, - "type": 390, - "typeName": "self::sp_api_hidden_includes_construct_runtime::hidden_include::dispatch\n::CallableCallFor", - "docs": [] - } - ], - "index": 36, - "docs": [] - }, - { - "name": "OperationsWorkingGroupBeta", - "fields": [ - { - "name": null, - "type": 391, - "typeName": "self::sp_api_hidden_includes_construct_runtime::hidden_include::dispatch\n::CallableCallFor", - "docs": [] - } - ], - "index": 37, - "docs": [] - }, - { - "name": "OperationsWorkingGroupGamma", - "fields": [ - { - "name": null, - "type": 392, - "typeName": "self::sp_api_hidden_includes_construct_runtime::hidden_include::dispatch\n::CallableCallFor", - "docs": [] - } - ], - "index": 38, - "docs": [] - }, - { - "name": "DistributionWorkingGroup", - "fields": [ - { - "name": null, - "type": 393, - "typeName": "self::sp_api_hidden_includes_construct_runtime::hidden_include::dispatch\n::CallableCallFor", - "docs": [] - } - ], - "index": 39, - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 242, - "type": { - "path": [ - "pallet_babe", - "pallet", - "Call" - ], - "params": [ - { - "name": "T", - "type": null - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "report_equivocation", - "fields": [ - { - "name": "equivocation_proof", - "type": 243, - "typeName": "Box>", - "docs": [] - }, - { - "name": "key_owner_proof", - "type": 248, - "typeName": "T::KeyOwnerProof", - "docs": [] - } - ], - "index": 0, - "docs": [ - "Report authority equivocation/misbehavior. This method will verify", - "the equivocation proof and validate the given key ownership proof", - "against the extracted offender. If both are valid, the offence will", - "be reported." - ] - }, - { - "name": "report_equivocation_unsigned", - "fields": [ - { - "name": "equivocation_proof", - "type": 243, - "typeName": "Box>", - "docs": [] - }, - { - "name": "key_owner_proof", - "type": 248, - "typeName": "T::KeyOwnerProof", - "docs": [] - } - ], - "index": 1, - "docs": [ - "Report authority equivocation/misbehavior. This method will verify", - "the equivocation proof and validate the given key ownership proof", - "against the extracted offender. If both are valid, the offence will", - "be reported.", - "This extrinsic must be called unsigned and it is expected that only", - "block authors will call it (validated in `ValidateUnsigned`), as such", - "if the block author is defined it will be defined as the equivocation", - "reporter." - ] - }, - { - "name": "plan_config_change", - "fields": [ - { - "name": "config", - "type": 249, - "typeName": "NextConfigDescriptor", - "docs": [] - } - ], - "index": 2, - "docs": [ - "Plan an epoch config change. The epoch config change is recorded and will be enacted on", - "the next call to `enact_epoch_change`. The config will be activated one epoch after.", - "Multiple calls to this method will replace any existing planned config change that had", - "not been enacted yet." - ] - } - ] - } - }, - "docs": [ - "Contains one variant per dispatchable that can be called by an extrinsic." - ] - } - }, - { - "id": 243, - "type": { - "path": [ - "sp_consensus_slots", - "EquivocationProof" - ], - "params": [ - { - "name": "Header", - "type": 244 - }, - { - "name": "Id", - "type": 246 - } - ], - "def": { - "composite": { - "fields": [ - { - "name": "offender", - "type": 246, - "typeName": "Id", - "docs": [] - }, - { - "name": "slot", - "type": 247, - "typeName": "Slot", - "docs": [] - }, - { - "name": "first_header", - "type": 244, - "typeName": "Header", - "docs": [] - }, - { - "name": "second_header", - "type": 244, - "typeName": "Header", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 244, - "type": { - "path": [ - "sp_runtime", - "generic", - "header", - "Header" - ], - "params": [ - { - "name": "Number", - "type": 4 - }, - { - "name": "Hash", - "type": 245 - } - ], - "def": { - "composite": { - "fields": [ - { - "name": "parent_hash", - "type": 9, - "typeName": "Hash::Output", - "docs": [] - }, - { - "name": "number", - "type": 221, - "typeName": "Number", - "docs": [] - }, - { - "name": "state_root", - "type": 9, - "typeName": "Hash::Output", - "docs": [] - }, - { - "name": "extrinsics_root", - "type": 9, - "typeName": "Hash::Output", - "docs": [] - }, - { - "name": "digest", - "type": 11, - "typeName": "Digest", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 245, - "type": { - "path": [ - "sp_runtime", - "traits", - "BlakeTwo256" - ], - "params": [], - "def": { - "composite": { - "fields": [] - } - }, - "docs": [] - } - }, - { - "id": 246, - "type": { - "path": [ - "sp_consensus_babe", - "app", - "Public" - ], - "params": [], - "def": { - "composite": { - "fields": [ - { - "name": null, - "type": 48, - "typeName": "sr25519::Public", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 247, - "type": { - "path": [ - "sp_consensus_slots", - "Slot" - ], - "params": [], - "def": { - "composite": { - "fields": [ - { - "name": null, - "type": 8, - "typeName": "u64", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 248, - "type": { - "path": [ - "sp_session", - "MembershipProof" - ], - "params": [], - "def": { - "composite": { - "fields": [ - { - "name": "session", - "type": 4, - "typeName": "SessionIndex", - "docs": [] - }, - { - "name": "trie_nodes", - "type": 76, - "typeName": "Vec>", - "docs": [] - }, - { - "name": "validator_count", - "type": 4, - "typeName": "ValidatorCount", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 249, - "type": { - "path": [ - "sp_consensus_babe", - "digests", - "NextConfigDescriptor" - ], - "params": [], - "def": { - "variant": { - "variants": [ - { - "name": "V1", - "fields": [ - { - "name": "c", - "type": 194, - "typeName": "(u64, u64)", - "docs": [] - }, - { - "name": "allowed_slots", - "type": 250, - "typeName": "AllowedSlots", - "docs": [] - } - ], - "index": 1, - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 250, - "type": { - "path": [ - "sp_consensus_babe", - "AllowedSlots" - ], - "params": [], - "def": { - "variant": { - "variants": [ - { - "name": "PrimarySlots", - "fields": [], - "index": 0, - "docs": [] - }, - { - "name": "PrimaryAndSecondaryPlainSlots", - "fields": [], - "index": 1, - "docs": [] - }, - { - "name": "PrimaryAndSecondaryVRFSlots", - "fields": [], - "index": 2, - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 251, - "type": { - "path": [ - "pallet_timestamp", - "pallet", - "Call" - ], - "params": [ - { - "name": "T", - "type": null - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "set", - "fields": [ - { - "name": "now", - "type": 252, - "typeName": "T::Moment", - "docs": [] - } - ], - "index": 0, - "docs": [ - "Set the current time.", - "", - "This call should be invoked exactly once per block. It will panic at the finalization", - "phase, if this call hasn't been invoked by that time.", - "", - "The timestamp should be greater than the previous one by the amount specified by", - "`MinimumPeriod`.", - "", - "The dispatch origin for this call must be `Inherent`.", - "", - "# ", - "- `O(1)` (Note that implementations of `OnTimestampSet` must also be `O(1)`)", - "- 1 storage read and 1 storage mutation (codec `O(1)`). (because of `DidUpdate::take` in", - " `on_finalize`)", - "- 1 event handler `on_timestamp_set`. Must be `O(1)`.", - "# " - ] - } - ] - } - }, - "docs": [ - "Contains one variant per dispatchable that can be called by an extrinsic." - ] - } - }, - { - "id": 252, - "type": { - "path": [], - "params": [], - "def": { - "compact": { - "type": 8 - } - }, - "docs": [] - } - }, - { - "id": 253, - "type": { - "path": [ - "pallet_authorship", - "pallet", - "Call" - ], - "params": [ - { - "name": "T", - "type": null - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "set_uncles", - "fields": [ - { - "name": "new_uncles", - "type": 254, - "typeName": "Vec", - "docs": [] - } - ], - "index": 0, - "docs": [ - "Provide a set of uncles." - ] - } - ] - } - }, - "docs": [ - "Contains one variant per dispatchable that can be called by an extrinsic." - ] - } - }, - { - "id": 254, - "type": { - "path": [], - "params": [], - "def": { - "sequence": { - "type": 244 - } - }, - "docs": [] - } - }, - { - "id": 255, - "type": { - "path": [ - "pallet_balances", - "pallet", - "Call" - ], - "params": [ - { - "name": "T", - "type": null - }, - { - "name": "I", - "type": null - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "transfer", - "fields": [ - { - "name": "dest", - "type": 0, - "typeName": "::Source", - "docs": [] - }, - { - "name": "value", - "type": 52, - "typeName": "T::Balance", - "docs": [] - } - ], - "index": 0, - "docs": [ - "Transfer some liquid free balance to another account.", - "", - "`transfer` will set the `FreeBalance` of the sender and receiver.", - "If the sender's account is below the existential deposit as a result", - "of the transfer, the account will be reaped.", - "", - "The dispatch origin for this call must be `Signed` by the transactor.", - "", - "# ", - "- Dependent on arguments but not critical, given proper implementations for input config", - " types. See related functions below.", - "- It contains a limited number of reads and writes internally and no complex", - " computation.", - "", - "Related functions:", - "", - " - `ensure_can_withdraw` is always called internally but has a bounded complexity.", - " - Transferring balances to accounts that did not exist before will cause", - " `T::OnNewAccount::on_new_account` to be called.", - " - Removing enough funds from an account will trigger `T::DustRemoval::on_unbalanced`.", - " - `transfer_keep_alive` works the same way as `transfer`, but has an additional check", - " that the transfer will not kill the origin account.", - "---------------------------------", - "- Origin account is already in memory, so no DB operations for them.", - "# " - ] - }, - { - "name": "set_balance", - "fields": [ - { - "name": "who", - "type": 0, - "typeName": "::Source", - "docs": [] - }, - { - "name": "new_free", - "type": 52, - "typeName": "T::Balance", - "docs": [] - }, - { - "name": "new_reserved", - "type": 52, - "typeName": "T::Balance", - "docs": [] - } - ], - "index": 1, - "docs": [ - "Set the balances of a given account.", - "", - "This will alter `FreeBalance` and `ReservedBalance` in storage. it will", - "also alter the total issuance of the system (`TotalIssuance`) appropriately.", - "If the new free or reserved balance is below the existential deposit,", - "it will reset the account nonce (`frame_system::AccountNonce`).", - "", - "The dispatch origin for this call is `root`." - ] - }, - { - "name": "force_transfer", - "fields": [ - { - "name": "source", - "type": 0, - "typeName": "::Source", - "docs": [] - }, - { - "name": "dest", - "type": 0, - "typeName": "::Source", - "docs": [] - }, - { - "name": "value", - "type": 52, - "typeName": "T::Balance", - "docs": [] - } - ], - "index": 2, - "docs": [ - "Exactly as `transfer`, except the origin must be root and the source account may be", - "specified.", - "# ", - "- Same as transfer, but additional read and write because the source account is not", - " assumed to be in the overlay.", - "# " - ] - }, - { - "name": "transfer_keep_alive", - "fields": [ - { - "name": "dest", - "type": 0, - "typeName": "::Source", - "docs": [] - }, - { - "name": "value", - "type": 52, - "typeName": "T::Balance", - "docs": [] - } - ], - "index": 3, - "docs": [ - "Same as the [`transfer`] call, but with a check that the transfer will not kill the", - "origin account.", - "", - "99% of the time you want [`transfer`] instead.", - "", - "[`transfer`]: struct.Pallet.html#method.transfer" - ] - }, - { - "name": "transfer_all", - "fields": [ - { - "name": "dest", - "type": 0, - "typeName": "::Source", - "docs": [] - }, - { - "name": "keep_alive", - "type": 34, - "typeName": "bool", - "docs": [] - } - ], - "index": 4, - "docs": [ - "Transfer the entire transferable balance from the caller account.", - "", - "NOTE: This function only attempts to transfer _transferable_ balances. This means that", - "any locked, reserved, or existential deposits (when `keep_alive` is `true`), will not be", - "transferred by this function. To ensure that this function results in a killed account,", - "you might need to prepare the account by removing any reference counters, storage", - "deposits, etc...", - "", - "The dispatch origin of this call must be Signed.", - "", - "- `dest`: The recipient of the transfer.", - "- `keep_alive`: A boolean to determine if the `transfer_all` operation should send all", - " of the funds the account has, causing the sender account to be killed (false), or", - " transfer everything except at least the existential deposit, which will guarantee to", - " keep the sender account alive (true). # ", - "- O(1). Just like transfer, but reading the user's transferable balance first.", - " #" - ] - }, - { - "name": "force_unreserve", - "fields": [ - { - "name": "who", - "type": 0, - "typeName": "::Source", - "docs": [] - }, - { - "name": "amount", - "type": 6, - "typeName": "T::Balance", - "docs": [] - } - ], - "index": 5, - "docs": [ - "Unreserve some balance from a user by force.", - "", - "Can only be called by ROOT." - ] - } - ] - } - }, - "docs": [ - "Contains one variant per dispatchable that can be called by an extrinsic." - ] - } - }, - { - "id": 256, - "type": { - "path": [ - "pallet_election_provider_multi_phase", - "pallet", - "Call" - ], - "params": [ - { - "name": "T", - "type": null - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "submit_unsigned", - "fields": [ - { - "name": "raw_solution", - "type": 257, - "typeName": "Box>>", - "docs": [] - }, - { - "name": "witness", - "type": 310, - "typeName": "SolutionOrSnapshotSize", - "docs": [] - } - ], - "index": 0, - "docs": [ - "Submit a solution for the unsigned phase.", - "", - "The dispatch origin fo this call must be __none__.", - "", - "This submission is checked on the fly. Moreover, this unsigned solution is only", - "validated when submitted to the pool from the **local** node. Effectively, this means", - "that only active validators can submit this transaction when authoring a block (similar", - "to an inherent).", - "", - "To prevent any incorrect solution (and thus wasted time/weight), this transaction will", - "panic if the solution submitted by the validator is invalid in any way, effectively", - "putting their authoring reward at risk.", - "", - "No deposit or reward is associated with this submission." - ] - }, - { - "name": "set_minimum_untrusted_score", - "fields": [ - { - "name": "maybe_next_score", - "type": 311, - "typeName": "Option", - "docs": [] - } - ], - "index": 1, - "docs": [ - "Set a new value for `MinimumUntrustedScore`.", - "", - "Dispatch origin must be aligned with `T::ForceOrigin`.", - "", - "This check can be turned off by setting the value to `None`." - ] - }, - { - "name": "set_emergency_election_result", - "fields": [ - { - "name": "supports", - "type": 312, - "typeName": "Supports", - "docs": [] - } - ], - "index": 2, - "docs": [ - "Set a solution in the queue, to be handed out to the client of this pallet in the next", - "call to `ElectionProvider::elect`.", - "", - "This can only be set by `T::ForceOrigin`, and only when the phase is `Emergency`.", - "", - "The solution is not checked for any feasibility and is assumed to be trustworthy, as any", - "feasibility check itself can in principle cause the election process to fail (due to", - "memory/weight constrains)." - ] - }, - { - "name": "submit", - "fields": [ - { - "name": "raw_solution", - "type": 257, - "typeName": "Box>>", - "docs": [] - } - ], - "index": 3, - "docs": [ - "Submit a solution for the signed phase.", - "", - "The dispatch origin fo this call must be __signed__.", - "", - "The solution is potentially queued, based on the claimed score and processed at the end", - "of the signed phase.", - "", - "A deposit is reserved and recorded for the solution. Based on the outcome, the solution", - "might be rewarded, slashed, or get all or a part of the deposit back." - ] - }, - { - "name": "governance_fallback", - "fields": [ - { - "name": "maybe_max_voters", - "type": 106, - "typeName": "Option", - "docs": [] - }, - { - "name": "maybe_max_targets", - "type": 106, - "typeName": "Option", - "docs": [] - } - ], - "index": 4, - "docs": [ - "Trigger the governance fallback.", - "", - "This can only be called when [`Phase::Emergency`] is enabled, as an alternative to", - "calling [`Call::set_emergency_election_result`]." - ] - } - ] - } - }, - "docs": [ - "Contains one variant per dispatchable that can be called by an extrinsic." - ] - } - }, - { - "id": 257, - "type": { - "path": [ - "pallet_election_provider_multi_phase", - "RawSolution" - ], - "params": [ - { - "name": "S", - "type": 258 - } - ], - "def": { - "composite": { - "fields": [ - { - "name": "solution", - "type": 258, - "typeName": "S", - "docs": [] - }, - { - "name": "score", - "type": 309, - "typeName": "ElectionScore", - "docs": [] - }, - { - "name": "round", - "type": 4, - "typeName": "u32", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 258, - "type": { - "path": [ - "joystream_node_runtime", - "NposSolution16" - ], - "params": [], - "def": { - "composite": { - "fields": [ - { - "name": "votes1", - "type": 259, - "typeName": null, - "docs": [] - }, - { - "name": "votes2", - "type": 262, - "typeName": null, - "docs": [] - }, - { - "name": "votes3", - "type": 267, - "typeName": null, - "docs": [] - }, - { - "name": "votes4", - "type": 270, - "typeName": null, - "docs": [] - }, - { - "name": "votes5", - "type": 273, - "typeName": null, - "docs": [] - }, - { - "name": "votes6", - "type": 276, - "typeName": null, - "docs": [] - }, - { - "name": "votes7", - "type": 279, - "typeName": null, - "docs": [] - }, - { - "name": "votes8", - "type": 282, - "typeName": null, - "docs": [] - }, - { - "name": "votes9", - "type": 285, - "typeName": null, - "docs": [] - }, - { - "name": "votes10", - "type": 288, - "typeName": null, - "docs": [] - }, - { - "name": "votes11", - "type": 291, - "typeName": null, - "docs": [] - }, - { - "name": "votes12", - "type": 294, - "typeName": null, - "docs": [] - }, - { - "name": "votes13", - "type": 297, - "typeName": null, - "docs": [] - }, - { - "name": "votes14", - "type": 300, - "typeName": null, - "docs": [] - }, - { - "name": "votes15", - "type": 303, - "typeName": null, - "docs": [] - }, - { - "name": "votes16", - "type": 306, - "typeName": null, - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 259, - "type": { - "path": [], - "params": [], - "def": { - "sequence": { - "type": 260 - } - }, - "docs": [] - } - }, - { - "id": 260, - "type": { - "path": [], - "params": [], - "def": { - "tuple": [ - 221, - 261 - ] - }, - "docs": [] - } - }, - { - "id": 261, - "type": { - "path": [], - "params": [], - "def": { - "compact": { - "type": 237 - } - }, - "docs": [] - } - }, - { - "id": 262, - "type": { - "path": [], - "params": [], - "def": { - "sequence": { - "type": 263 - } - }, - "docs": [] - } - }, - { - "id": 263, - "type": { - "path": [], - "params": [], - "def": { - "tuple": [ - 221, - 264, - 261 - ] - }, - "docs": [] - } - }, - { - "id": 264, - "type": { - "path": [], - "params": [], - "def": { - "tuple": [ - 261, - 265 - ] - }, - "docs": [] - } - }, - { - "id": 265, - "type": { - "path": [], - "params": [], - "def": { - "compact": { - "type": 266 - } - }, - "docs": [] - } - }, - { - "id": 266, - "type": { - "path": [ - "sp_arithmetic", - "per_things", - "PerU16" - ], - "params": [], - "def": { - "composite": { - "fields": [ - { - "name": null, - "type": 237, - "typeName": "u16", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 267, - "type": { - "path": [], - "params": [], - "def": { - "sequence": { - "type": 268 - } - }, - "docs": [] - } - }, - { - "id": 268, - "type": { - "path": [], - "params": [], - "def": { - "tuple": [ - 221, - 269, - 261 - ] - }, - "docs": [] - } - }, - { - "id": 269, - "type": { - "path": [], - "params": [], - "def": { - "array": { - "len": 2, - "type": 264 - } - }, - "docs": [] - } - }, - { - "id": 270, - "type": { - "path": [], - "params": [], - "def": { - "sequence": { - "type": 271 - } - }, - "docs": [] - } - }, - { - "id": 271, - "type": { - "path": [], - "params": [], - "def": { - "tuple": [ - 221, - 272, - 261 - ] - }, - "docs": [] - } - }, - { - "id": 272, - "type": { - "path": [], - "params": [], - "def": { - "array": { - "len": 3, - "type": 264 - } - }, - "docs": [] - } - }, - { - "id": 273, - "type": { - "path": [], - "params": [], - "def": { - "sequence": { - "type": 274 - } - }, - "docs": [] - } - }, - { - "id": 274, - "type": { - "path": [], - "params": [], - "def": { - "tuple": [ - 221, - 275, - 261 - ] - }, - "docs": [] - } - }, - { - "id": 275, - "type": { - "path": [], - "params": [], - "def": { - "array": { - "len": 4, - "type": 264 - } - }, - "docs": [] - } - }, - { - "id": 276, - "type": { - "path": [], - "params": [], - "def": { - "sequence": { - "type": 277 - } - }, - "docs": [] - } - }, - { - "id": 277, - "type": { - "path": [], - "params": [], - "def": { - "tuple": [ - 221, - 278, - 261 - ] - }, - "docs": [] - } - }, - { - "id": 278, - "type": { - "path": [], - "params": [], - "def": { - "array": { - "len": 5, - "type": 264 - } - }, - "docs": [] - } - }, - { - "id": 279, - "type": { - "path": [], - "params": [], - "def": { - "sequence": { - "type": 280 - } - }, - "docs": [] - } - }, - { - "id": 280, - "type": { - "path": [], - "params": [], - "def": { - "tuple": [ - 221, - 281, - 261 - ] - }, - "docs": [] - } - }, - { - "id": 281, - "type": { - "path": [], - "params": [], - "def": { - "array": { - "len": 6, - "type": 264 - } - }, - "docs": [] - } - }, - { - "id": 282, - "type": { - "path": [], - "params": [], - "def": { - "sequence": { - "type": 283 - } - }, - "docs": [] - } - }, - { - "id": 283, - "type": { - "path": [], - "params": [], - "def": { - "tuple": [ - 221, - 284, - 261 - ] - }, - "docs": [] - } - }, - { - "id": 284, - "type": { - "path": [], - "params": [], - "def": { - "array": { - "len": 7, - "type": 264 - } - }, - "docs": [] - } - }, - { - "id": 285, - "type": { - "path": [], - "params": [], - "def": { - "sequence": { - "type": 286 - } - }, - "docs": [] - } - }, - { - "id": 286, - "type": { - "path": [], - "params": [], - "def": { - "tuple": [ - 221, - 287, - 261 - ] - }, - "docs": [] - } - }, - { - "id": 287, - "type": { - "path": [], - "params": [], - "def": { - "array": { - "len": 8, - "type": 264 - } - }, - "docs": [] - } - }, - { - "id": 288, - "type": { - "path": [], - "params": [], - "def": { - "sequence": { - "type": 289 - } - }, - "docs": [] - } - }, - { - "id": 289, - "type": { - "path": [], - "params": [], - "def": { - "tuple": [ - 221, - 290, - 261 - ] - }, - "docs": [] - } - }, - { - "id": 290, - "type": { - "path": [], - "params": [], - "def": { - "array": { - "len": 9, - "type": 264 - } - }, - "docs": [] - } - }, - { - "id": 291, - "type": { - "path": [], - "params": [], - "def": { - "sequence": { - "type": 292 - } - }, - "docs": [] - } - }, - { - "id": 292, - "type": { - "path": [], - "params": [], - "def": { - "tuple": [ - 221, - 293, - 261 - ] - }, - "docs": [] - } - }, - { - "id": 293, - "type": { - "path": [], - "params": [], - "def": { - "array": { - "len": 10, - "type": 264 - } - }, - "docs": [] - } - }, - { - "id": 294, - "type": { - "path": [], - "params": [], - "def": { - "sequence": { - "type": 295 - } - }, - "docs": [] - } - }, - { - "id": 295, - "type": { - "path": [], - "params": [], - "def": { - "tuple": [ - 221, - 296, - 261 - ] - }, - "docs": [] - } - }, - { - "id": 296, - "type": { - "path": [], - "params": [], - "def": { - "array": { - "len": 11, - "type": 264 - } - }, - "docs": [] - } - }, - { - "id": 297, - "type": { - "path": [], - "params": [], - "def": { - "sequence": { - "type": 298 - } - }, - "docs": [] - } - }, - { - "id": 298, - "type": { - "path": [], - "params": [], - "def": { - "tuple": [ - 221, - 299, - 261 - ] - }, - "docs": [] - } - }, - { - "id": 299, - "type": { - "path": [], - "params": [], - "def": { - "array": { - "len": 12, - "type": 264 - } - }, - "docs": [] - } - }, - { - "id": 300, - "type": { - "path": [], - "params": [], - "def": { - "sequence": { - "type": 301 - } - }, - "docs": [] - } - }, - { - "id": 301, - "type": { - "path": [], - "params": [], - "def": { - "tuple": [ - 221, - 302, - 261 - ] - }, - "docs": [] - } - }, - { - "id": 302, - "type": { - "path": [], - "params": [], - "def": { - "array": { - "len": 13, - "type": 264 - } - }, - "docs": [] - } - }, - { - "id": 303, - "type": { - "path": [], - "params": [], - "def": { - "sequence": { - "type": 304 - } - }, - "docs": [] - } - }, - { - "id": 304, - "type": { - "path": [], - "params": [], - "def": { - "tuple": [ - 221, - 305, - 261 - ] - }, - "docs": [] - } - }, - { - "id": 305, - "type": { - "path": [], - "params": [], - "def": { - "array": { - "len": 14, - "type": 264 - } - }, - "docs": [] - } - }, - { - "id": 306, - "type": { - "path": [], - "params": [], - "def": { - "sequence": { - "type": 307 - } - }, - "docs": [] - } - }, - { - "id": 307, - "type": { - "path": [], - "params": [], - "def": { - "tuple": [ - 221, - 308, - 261 - ] - }, - "docs": [] - } - }, - { - "id": 308, - "type": { - "path": [], - "params": [], - "def": { - "array": { - "len": 15, - "type": 264 - } - }, - "docs": [] - } - }, - { - "id": 309, - "type": { - "path": [ - "sp_npos_elections", - "ElectionScore" - ], - "params": [], - "def": { - "composite": { - "fields": [ - { - "name": "minimal_stake", - "type": 6, - "typeName": "ExtendedBalance", - "docs": [] - }, - { - "name": "sum_stake", - "type": 6, - "typeName": "ExtendedBalance", - "docs": [] - }, - { - "name": "sum_stake_squared", - "type": 6, - "typeName": "ExtendedBalance", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 310, - "type": { - "path": [ - "pallet_election_provider_multi_phase", - "SolutionOrSnapshotSize" - ], - "params": [], - "def": { - "composite": { - "fields": [ - { - "name": "voters", - "type": 221, - "typeName": "u32", - "docs": [] - }, - { - "name": "targets", - "type": 221, - "typeName": "u32", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 311, - "type": { - "path": [ - "Option" - ], - "params": [ - { - "name": "T", - "type": 309 - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "None", - "fields": [], - "index": 0, - "docs": [] - }, - { - "name": "Some", - "fields": [ - { - "name": null, - "type": 309, - "typeName": null, - "docs": [] - } - ], - "index": 1, - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 312, - "type": { - "path": [], - "params": [], - "def": { - "sequence": { - "type": 313 - } - }, - "docs": [] - } - }, - { - "id": 313, - "type": { - "path": [], - "params": [], - "def": { - "tuple": [ - 0, - 314 - ] - }, - "docs": [] - } - }, - { - "id": 314, - "type": { - "path": [ - "sp_npos_elections", - "Support" - ], - "params": [ - { - "name": "AccountId", - "type": 0 - } - ], - "def": { - "composite": { - "fields": [ - { - "name": "total", - "type": 6, - "typeName": "ExtendedBalance", - "docs": [] - }, - { - "name": "voters", - "type": 315, - "typeName": "Vec<(AccountId, ExtendedBalance)>", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 315, - "type": { - "path": [], - "params": [], - "def": { - "sequence": { - "type": 316 - } - }, - "docs": [] - } - }, - { - "id": 316, - "type": { - "path": [], - "params": [], - "def": { - "tuple": [ - 0, - 6 - ] - }, - "docs": [] - } - }, - { - "id": 317, - "type": { - "path": [ - "pallet_staking", - "pallet", - "pallet", - "Call" - ], - "params": [ - { - "name": "T", - "type": null - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "bond", - "fields": [ - { - "name": "controller", - "type": 0, - "typeName": "::Source", - "docs": [] - }, - { - "name": "value", - "type": 52, - "typeName": "BalanceOf", - "docs": [] - }, - { - "name": "payee", - "type": 318, - "typeName": "RewardDestination", - "docs": [] - } - ], - "index": 0, - "docs": [ - "Take the origin account as a stash and lock up `value` of its balance. `controller` will", - "be the account that controls it.", - "", - "`value` must be more than the `minimum_balance` specified by `T::Currency`.", - "", - "The dispatch origin for this call must be _Signed_ by the stash account.", - "", - "Emits `Bonded`.", - "# ", - "- Independent of the arguments. Moderate complexity.", - "- O(1).", - "- Three extra DB entries.", - "", - "NOTE: Two of the storage writes (`Self::bonded`, `Self::payee`) are _never_ cleaned", - "unless the `origin` falls below _existential deposit_ and gets removed as dust.", - "------------------", - "# " - ] - }, - { - "name": "bond_extra", - "fields": [ - { - "name": "max_additional", - "type": 52, - "typeName": "BalanceOf", - "docs": [] - } - ], - "index": 1, - "docs": [ - "Add some extra amount that have appeared in the stash `free_balance` into the balance up", - "for staking.", - "", - "The dispatch origin for this call must be _Signed_ by the stash, not the controller.", - "", - "Use this if there are additional funds in your stash account that you wish to bond.", - "Unlike [`bond`](Self::bond) or [`unbond`](Self::unbond) this function does not impose", - "any limitation on the amount that can be added.", - "", - "Emits `Bonded`.", - "", - "# ", - "- Independent of the arguments. Insignificant complexity.", - "- O(1).", - "# " - ] - }, - { - "name": "unbond", - "fields": [ - { - "name": "value", - "type": 52, - "typeName": "BalanceOf", - "docs": [] - } - ], - "index": 2, - "docs": [ - "Schedule a portion of the stash to be unlocked ready for transfer out after the bond", - "period ends. If this leaves an amount actively bonded less than", - "T::Currency::minimum_balance(), then it is increased to the full amount.", - "", - "The dispatch origin for this call must be _Signed_ by the controller, not the stash.", - "", - "Once the unlock period is done, you can call `withdraw_unbonded` to actually move", - "the funds out of management ready for transfer.", - "", - "No more than a limited number of unlocking chunks (see `MaxUnlockingChunks`)", - "can co-exists at the same time. In that case, [`Call::withdraw_unbonded`] need", - "to be called first to remove some of the chunks (if possible).", - "", - "If a user encounters the `InsufficientBond` error when calling this extrinsic,", - "they should call `chill` first in order to free up their bonded funds.", - "", - "Emits `Unbonded`.", - "", - "See also [`Call::withdraw_unbonded`]." - ] - }, - { - "name": "withdraw_unbonded", - "fields": [ - { - "name": "num_slashing_spans", - "type": 4, - "typeName": "u32", - "docs": [] - } - ], - "index": 3, - "docs": [ - "Remove any unlocked chunks from the `unlocking` queue from our management.", - "", - "This essentially frees up that balance to be used by the stash account to do", - "whatever it wants.", - "", - "The dispatch origin for this call must be _Signed_ by the controller.", - "", - "Emits `Withdrawn`.", - "", - "See also [`Call::unbond`].", - "", - "# ", - "Complexity O(S) where S is the number of slashing spans to remove", - "NOTE: Weight annotation is the kill scenario, we refund otherwise.", - "# " - ] - }, - { - "name": "validate", - "fields": [ - { - "name": "prefs", - "type": 37, - "typeName": "ValidatorPrefs", - "docs": [] - } - ], - "index": 4, - "docs": [ - "Declare the desire to validate for the origin controller.", - "", - "Effects will be felt at the beginning of the next era.", - "", - "The dispatch origin for this call must be _Signed_ by the controller, not the stash." - ] - }, - { - "name": "nominate", - "fields": [ - { - "name": "targets", - "type": 319, - "typeName": "Vec<::Source>", - "docs": [] - } - ], - "index": 5, - "docs": [ - "Declare the desire to nominate `targets` for the origin controller.", - "", - "Effects will be felt at the beginning of the next era.", - "", - "The dispatch origin for this call must be _Signed_ by the controller, not the stash.", - "", - "# ", - "- The transaction's complexity is proportional to the size of `targets` (N)", - "which is capped at CompactAssignments::LIMIT (T::MaxNominations).", - "- Both the reads and writes follow a similar pattern.", - "# " - ] - }, - { - "name": "chill", - "fields": [], - "index": 6, - "docs": [ - "Declare no desire to either validate or nominate.", - "", - "Effects will be felt at the beginning of the next era.", - "", - "The dispatch origin for this call must be _Signed_ by the controller, not the stash.", - "", - "# ", - "- Independent of the arguments. Insignificant complexity.", - "- Contains one read.", - "- Writes are limited to the `origin` account key.", - "# " - ] - }, - { - "name": "set_payee", - "fields": [ - { - "name": "payee", - "type": 318, - "typeName": "RewardDestination", - "docs": [] - } - ], - "index": 7, - "docs": [ - "(Re-)set the payment target for a controller.", - "", - "Effects will be felt instantly (as soon as this function is completed successfully).", - "", - "The dispatch origin for this call must be _Signed_ by the controller, not the stash.", - "", - "# ", - "- Independent of the arguments. Insignificant complexity.", - "- Contains a limited number of reads.", - "- Writes are limited to the `origin` account key.", - "---------", - "- Weight: O(1)", - "- DB Weight:", - " - Read: Ledger", - " - Write: Payee", - "# " - ] - }, - { - "name": "set_controller", - "fields": [ - { - "name": "controller", - "type": 0, - "typeName": "::Source", - "docs": [] - } - ], - "index": 8, - "docs": [ - "(Re-)set the controller of a stash.", - "", - "Effects will be felt instantly (as soon as this function is completed successfully).", - "", - "The dispatch origin for this call must be _Signed_ by the stash, not the controller.", - "", - "# ", - "- Independent of the arguments. Insignificant complexity.", - "- Contains a limited number of reads.", - "- Writes are limited to the `origin` account key.", - "----------", - "Weight: O(1)", - "DB Weight:", - "- Read: Bonded, Ledger New Controller, Ledger Old Controller", - "- Write: Bonded, Ledger New Controller, Ledger Old Controller", - "# " - ] - }, - { - "name": "set_validator_count", - "fields": [ - { - "name": "new", - "type": 221, - "typeName": "u32", - "docs": [] - } - ], - "index": 9, - "docs": [ - "Sets the ideal number of validators.", - "", - "The dispatch origin must be Root.", - "", - "# ", - "Weight: O(1)", - "Write: Validator Count", - "# " - ] - }, - { - "name": "increase_validator_count", - "fields": [ - { - "name": "additional", - "type": 221, - "typeName": "u32", - "docs": [] - } - ], - "index": 10, - "docs": [ - "Increments the ideal number of validators.", - "", - "The dispatch origin must be Root.", - "", - "# ", - "Same as [`Self::set_validator_count`].", - "# " - ] - }, - { - "name": "scale_validator_count", - "fields": [ - { - "name": "factor", - "type": 320, - "typeName": "Percent", - "docs": [] - } - ], - "index": 11, - "docs": [ - "Scale up the ideal number of validators by a factor.", - "", - "The dispatch origin must be Root.", - "", - "# ", - "Same as [`Self::set_validator_count`].", - "# " - ] - }, - { - "name": "force_no_eras", - "fields": [], - "index": 12, - "docs": [ - "Force there to be no new eras indefinitely.", - "", - "The dispatch origin must be Root.", - "", - "# Warning", - "", - "The election process starts multiple blocks before the end of the era.", - "Thus the election process may be ongoing when this is called. In this case the", - "election will continue until the next era is triggered.", - "", - "# ", - "- No arguments.", - "- Weight: O(1)", - "- Write: ForceEra", - "# " - ] - }, - { - "name": "force_new_era", - "fields": [], - "index": 13, - "docs": [ - "Force there to be a new era at the end of the next session. After this, it will be", - "reset to normal (non-forced) behaviour.", - "", - "The dispatch origin must be Root.", - "", - "# Warning", - "", - "The election process starts multiple blocks before the end of the era.", - "If this is called just before a new era is triggered, the election process may not", - "have enough blocks to get a result.", - "", - "# ", - "- No arguments.", - "- Weight: O(1)", - "- Write ForceEra", - "# " - ] - }, - { - "name": "set_invulnerables", - "fields": [ - { - "name": "invulnerables", - "type": 319, - "typeName": "Vec", - "docs": [] - } - ], - "index": 14, - "docs": [ - "Set the validators who cannot be slashed (if any).", - "", - "The dispatch origin must be Root." - ] - }, - { - "name": "force_unstake", - "fields": [ - { - "name": "stash", - "type": 0, - "typeName": "T::AccountId", - "docs": [] - }, - { - "name": "num_slashing_spans", - "type": 4, - "typeName": "u32", - "docs": [] - } - ], - "index": 15, - "docs": [ - "Force a current staker to become completely unstaked, immediately.", - "", - "The dispatch origin must be Root." - ] - }, - { - "name": "force_new_era_always", - "fields": [], - "index": 16, - "docs": [ - "Force there to be a new era at the end of sessions indefinitely.", - "", - "The dispatch origin must be Root.", - "", - "# Warning", - "", - "The election process starts multiple blocks before the end of the era.", - "If this is called just before a new era is triggered, the election process may not", - "have enough blocks to get a result." - ] - }, - { - "name": "cancel_deferred_slash", - "fields": [ - { - "name": "era", - "type": 4, - "typeName": "EraIndex", - "docs": [] - }, - { - "name": "slash_indices", - "type": 321, - "typeName": "Vec", - "docs": [] - } - ], - "index": 17, - "docs": [ - "Cancel enactment of a deferred slash.", - "", - "Can be called by the `T::SlashCancelOrigin`.", - "", - "Parameters: era and indices of the slashes for that era to kill." - ] - }, - { - "name": "payout_stakers", - "fields": [ - { - "name": "validator_stash", - "type": 0, - "typeName": "T::AccountId", - "docs": [] - }, - { - "name": "era", - "type": 4, - "typeName": "EraIndex", - "docs": [] - } - ], - "index": 18, - "docs": [ - "Pay out all the stakers behind a single validator for a single era.", - "", - "- `validator_stash` is the stash account of the validator. Their nominators, up to", - " `T::MaxNominatorRewardedPerValidator`, will also receive their rewards.", - "- `era` may be any era between `[current_era - history_depth; current_era]`.", - "", - "The origin of this call must be _Signed_. Any account can call this function, even if", - "it is not one of the stakers.", - "", - "# ", - "- Time complexity: at most O(MaxNominatorRewardedPerValidator).", - "- Contains a limited number of reads and writes.", - "-----------", - "N is the Number of payouts for the validator (including the validator)", - "Weight:", - "- Reward Destination Staked: O(N)", - "- Reward Destination Controller (Creating): O(N)", - "", - " NOTE: weights are assuming that payouts are made to alive stash account (Staked).", - " Paying even a dead controller is cheaper weight-wise. We don't do any refunds here.", - "# " - ] - }, - { - "name": "rebond", - "fields": [ - { - "name": "value", - "type": 52, - "typeName": "BalanceOf", - "docs": [] - } - ], - "index": 19, - "docs": [ - "Rebond a portion of the stash scheduled to be unlocked.", - "", - "The dispatch origin must be signed by the controller.", - "", - "# ", - "- Time complexity: O(L), where L is unlocking chunks", - "- Bounded by `MaxUnlockingChunks`.", - "- Storage changes: Can't increase storage, only decrease it.", - "# " - ] - }, - { - "name": "set_history_depth", - "fields": [ - { - "name": "new_history_depth", - "type": 221, - "typeName": "EraIndex", - "docs": [] - }, - { - "name": "era_items_deleted", - "type": 221, - "typeName": "u32", - "docs": [] - } - ], - "index": 20, - "docs": [ - "Set `HistoryDepth` value. This function will delete any history information", - "when `HistoryDepth` is reduced.", - "", - "Parameters:", - "- `new_history_depth`: The new history depth you would like to set.", - "- `era_items_deleted`: The number of items that will be deleted by this dispatch. This", - " should report all the storage items that will be deleted by clearing old era history.", - " Needed to report an accurate weight for the dispatch. Trusted by `Root` to report an", - " accurate number.", - "", - "Origin must be root.", - "", - "# ", - "- E: Number of history depths removed, i.e. 10 -> 7 = 3", - "- Weight: O(E)", - "- DB Weight:", - " - Reads: Current Era, History Depth", - " - Writes: History Depth", - " - Clear Prefix Each: Era Stakers, EraStakersClipped, ErasValidatorPrefs", - " - Writes Each: ErasValidatorReward, ErasRewardPoints, ErasTotalStake,", - " ErasStartSessionIndex", - "# " - ] - }, - { - "name": "reap_stash", - "fields": [ - { - "name": "stash", - "type": 0, - "typeName": "T::AccountId", - "docs": [] - }, - { - "name": "num_slashing_spans", - "type": 4, - "typeName": "u32", - "docs": [] - } - ], - "index": 21, - "docs": [ - "Remove all data structures concerning a staker/stash once it is at a state where it can", - "be considered `dust` in the staking system. The requirements are:", - "", - "1. the `total_balance` of the stash is below existential deposit.", - "2. or, the `ledger.total` of the stash is below existential deposit.", - "", - "The former can happen in cases like a slash; the latter when a fully unbonded account", - "is still receiving staking rewards in `RewardDestination::Staked`.", - "", - "It can be called by anyone, as long as `stash` meets the above requirements.", - "", - "Refunds the transaction fees upon successful execution." - ] - }, - { - "name": "kick", - "fields": [ - { - "name": "who", - "type": 319, - "typeName": "Vec<::Source>", - "docs": [] - } - ], - "index": 22, - "docs": [ - "Remove the given nominations from the calling validator.", - "", - "Effects will be felt at the beginning of the next era.", - "", - "The dispatch origin for this call must be _Signed_ by the controller, not the stash.", - "", - "- `who`: A list of nominator stash accounts who are nominating this validator which", - " should no longer be nominating this validator.", - "", - "Note: Making this call only makes sense if you first set the validator preferences to", - "block any further nominations." - ] - }, - { - "name": "set_staking_configs", - "fields": [ - { - "name": "min_nominator_bond", - "type": 322, - "typeName": "ConfigOp>", - "docs": [] - }, - { - "name": "min_validator_bond", - "type": 322, - "typeName": "ConfigOp>", - "docs": [] - }, - { - "name": "max_nominator_count", - "type": 323, - "typeName": "ConfigOp", - "docs": [] - }, - { - "name": "max_validator_count", - "type": 323, - "typeName": "ConfigOp", - "docs": [] - }, - { - "name": "chill_threshold", - "type": 324, - "typeName": "ConfigOp", - "docs": [] - }, - { - "name": "min_commission", - "type": 325, - "typeName": "ConfigOp", - "docs": [] - } - ], - "index": 23, - "docs": [ - "Update the various staking configurations .", - "", - "* `min_nominator_bond`: The minimum active bond needed to be a nominator.", - "* `min_validator_bond`: The minimum active bond needed to be a validator.", - "* `max_nominator_count`: The max number of users who can be a nominator at once. When", - " set to `None`, no limit is enforced.", - "* `max_validator_count`: The max number of users who can be a validator at once. When", - " set to `None`, no limit is enforced.", - "* `chill_threshold`: The ratio of `max_nominator_count` or `max_validator_count` which", - " should be filled in order for the `chill_other` transaction to work.", - "* `min_commission`: The minimum amount of commission that each validators must maintain.", - " This is checked only upon calling `validate`. Existing validators are not affected.", - "", - "Origin must be Root to call this function.", - "", - "NOTE: Existing nominators and validators will not be affected by this update.", - "to kick people under the new limits, `chill_other` should be called." - ] - }, - { - "name": "chill_other", - "fields": [ - { - "name": "controller", - "type": 0, - "typeName": "T::AccountId", - "docs": [] - } - ], - "index": 24, - "docs": [ - "Declare a `controller` to stop participating as either a validator or nominator.", - "", - "Effects will be felt at the beginning of the next era.", - "", - "The dispatch origin for this call must be _Signed_, but can be called by anyone.", - "", - "If the caller is the same as the controller being targeted, then no further checks are", - "enforced, and this function behaves just like `chill`.", - "", - "If the caller is different than the controller being targeted, the following conditions", - "must be met:", - "", - "* `controller` must belong to a nominator who has become non-decodable,", - "", - "Or:", - "", - "* A `ChillThreshold` must be set and checked which defines how close to the max", - " nominators or validators we must reach before users can start chilling one-another.", - "* A `MaxNominatorCount` and `MaxValidatorCount` must be set which is used to determine", - " how close we are to the threshold.", - "* A `MinNominatorBond` and `MinValidatorBond` must be set and checked, which determines", - " if this is a person that should be chilled because they have not met the threshold", - " bond required.", - "", - "This can be helpful if bond requirements are updated, and we need to remove old users", - "who do not satisfy these requirements." - ] - }, - { - "name": "force_apply_min_commission", - "fields": [ - { - "name": "validator_stash", - "type": 0, - "typeName": "T::AccountId", - "docs": [] - } - ], - "index": 25, - "docs": [ - "Force a validator to have at least the minimum commission. This will not affect a", - "validator who already has a commission greater than or equal to the minimum. Any account", - "can call this." - ] - } - ] - } - }, - "docs": [ - "Contains one variant per dispatchable that can be called by an extrinsic." - ] - } - }, - { - "id": 318, - "type": { - "path": [ - "pallet_staking", - "RewardDestination" - ], - "params": [ - { - "name": "AccountId", - "type": 0 - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "Staked", - "fields": [], - "index": 0, - "docs": [] - }, - { - "name": "Stash", - "fields": [], - "index": 1, - "docs": [] - }, - { - "name": "Controller", - "fields": [], - "index": 2, - "docs": [] - }, - { - "name": "Account", - "fields": [ - { - "name": null, - "type": 0, - "typeName": "AccountId", - "docs": [] - } - ], - "index": 3, - "docs": [] - }, - { - "name": "None", - "fields": [], - "index": 4, - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 319, - "type": { - "path": [], - "params": [], - "def": { - "sequence": { - "type": 0 - } - }, - "docs": [] - } - }, - { - "id": 320, - "type": { - "path": [ - "sp_arithmetic", - "per_things", - "Percent" - ], - "params": [], - "def": { - "composite": { - "fields": [ - { - "name": null, - "type": 2, - "typeName": "u8", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 321, - "type": { - "path": [], - "params": [], - "def": { - "sequence": { - "type": 4 - } - }, - "docs": [] - } - }, - { - "id": 322, - "type": { - "path": [ - "pallet_staking", - "pallet", - "pallet", - "ConfigOp" - ], - "params": [ - { - "name": "T", - "type": 6 - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "Noop", - "fields": [], - "index": 0, - "docs": [] - }, - { - "name": "Set", - "fields": [ - { - "name": null, - "type": 6, - "typeName": "T", - "docs": [] - } - ], - "index": 1, - "docs": [] - }, - { - "name": "Remove", - "fields": [], - "index": 2, - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 323, - "type": { - "path": [ - "pallet_staking", - "pallet", - "pallet", - "ConfigOp" - ], - "params": [ - { - "name": "T", - "type": 4 - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "Noop", - "fields": [], - "index": 0, - "docs": [] - }, - { - "name": "Set", - "fields": [ - { - "name": null, - "type": 4, - "typeName": "T", - "docs": [] - } - ], - "index": 1, - "docs": [] - }, - { - "name": "Remove", - "fields": [], - "index": 2, - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 324, - "type": { - "path": [ - "pallet_staking", - "pallet", - "pallet", - "ConfigOp" - ], - "params": [ - { - "name": "T", - "type": 320 - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "Noop", - "fields": [], - "index": 0, - "docs": [] - }, - { - "name": "Set", - "fields": [ - { - "name": null, - "type": 320, - "typeName": "T", - "docs": [] - } - ], - "index": 1, - "docs": [] - }, - { - "name": "Remove", - "fields": [], - "index": 2, - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 325, - "type": { - "path": [ - "pallet_staking", - "pallet", - "pallet", - "ConfigOp" - ], - "params": [ - { - "name": "T", - "type": 39 - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "Noop", - "fields": [], - "index": 0, - "docs": [] - }, - { - "name": "Set", - "fields": [ - { - "name": null, - "type": 39, - "typeName": "T", - "docs": [] - } - ], - "index": 1, - "docs": [] - }, - { - "name": "Remove", - "fields": [], - "index": 2, - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 326, - "type": { - "path": [ - "pallet_session", - "pallet", - "Call" - ], - "params": [ - { - "name": "T", - "type": null - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "set_keys", - "fields": [ - { - "name": "keys", - "type": 327, - "typeName": "T::Keys", - "docs": [] - }, - { - "name": "proof", - "type": 10, - "typeName": "Vec", - "docs": [] - } - ], - "index": 0, - "docs": [ - "Sets the session key(s) of the function caller to `keys`.", - "Allows an account to set its session key prior to becoming a validator.", - "This doesn't take effect until the next session.", - "", - "The dispatch origin of this function must be signed.", - "", - "# ", - "- Complexity: `O(1)`. Actual cost depends on the number of length of", - " `T::Keys::key_ids()` which is fixed.", - "- DbReads: `origin account`, `T::ValidatorIdOf`, `NextKeys`", - "- DbWrites: `origin account`, `NextKeys`", - "- DbReads per key id: `KeyOwner`", - "- DbWrites per key id: `KeyOwner`", - "# " - ] - }, - { - "name": "purge_keys", - "fields": [], - "index": 1, - "docs": [ - "Removes any session key(s) of the function caller.", - "", - "This doesn't take effect until the next session.", - "", - "The dispatch origin of this function must be Signed and the account must be either be", - "convertible to a validator ID using the chain's typical addressing system (this usually", - "means being a controller account) or directly convertible into a validator ID (which", - "usually means being a stash account).", - "", - "# ", - "- Complexity: `O(1)` in number of key types. Actual cost depends on the number of length", - " of `T::Keys::key_ids()` which is fixed.", - "- DbReads: `T::ValidatorIdOf`, `NextKeys`, `origin account`", - "- DbWrites: `NextKeys`, `origin account`", - "- DbWrites per key id: `KeyOwner`", - "# " - ] - } - ] - } - }, - "docs": [ - "Contains one variant per dispatchable that can be called by an extrinsic." - ] - } - }, - { - "id": 327, - "type": { - "path": [ - "joystream_node_runtime", - "SessionKeys" - ], - "params": [], - "def": { - "composite": { - "fields": [ - { - "name": "grandpa", - "type": 44, - "typeName": "::Public", - "docs": [] - }, - { - "name": "babe", - "type": 246, - "typeName": "::Public", - "docs": [] - }, - { - "name": "im_online", - "type": 47, - "typeName": "::Public", - "docs": [] - }, - { - "name": "authority_discovery", - "type": 328, - "typeName": "::\nPublic", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 328, - "type": { - "path": [ - "sp_authority_discovery", - "app", - "Public" - ], - "params": [], - "def": { - "composite": { - "fields": [ - { - "name": null, - "type": 48, - "typeName": "sr25519::Public", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 329, - "type": { - "path": [ - "pallet_grandpa", - "pallet", - "Call" - ], - "params": [ - { - "name": "T", - "type": null - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "report_equivocation", - "fields": [ - { - "name": "equivocation_proof", - "type": 330, - "typeName": "Box>", - "docs": [] - }, - { - "name": "key_owner_proof", - "type": 248, - "typeName": "T::KeyOwnerProof", - "docs": [] - } - ], - "index": 0, - "docs": [ - "Report voter equivocation/misbehavior. This method will verify the", - "equivocation proof and validate the given key ownership proof", - "against the extracted offender. If both are valid, the offence", - "will be reported." - ] - }, - { - "name": "report_equivocation_unsigned", - "fields": [ - { - "name": "equivocation_proof", - "type": 330, - "typeName": "Box>", - "docs": [] - }, - { - "name": "key_owner_proof", - "type": 248, - "typeName": "T::KeyOwnerProof", - "docs": [] - } - ], - "index": 1, - "docs": [ - "Report voter equivocation/misbehavior. This method will verify the", - "equivocation proof and validate the given key ownership proof", - "against the extracted offender. If both are valid, the offence", - "will be reported.", - "", - "This extrinsic must be called unsigned and it is expected that only", - "block authors will call it (validated in `ValidateUnsigned`), as such", - "if the block author is defined it will be defined as the equivocation", - "reporter." - ] - }, - { - "name": "note_stalled", - "fields": [ - { - "name": "delay", - "type": 4, - "typeName": "T::BlockNumber", - "docs": [] - }, - { - "name": "best_finalized_block_number", - "type": 4, - "typeName": "T::BlockNumber", - "docs": [] - } - ], - "index": 2, - "docs": [ - "Note that the current authority set of the GRANDPA finality gadget has", - "stalled. This will trigger a forced authority set change at the beginning", - "of the next session, to be enacted `delay` blocks after that. The delay", - "should be high enough to safely assume that the block signalling the", - "forced change will not be re-orged (e.g. 1000 blocks). The GRANDPA voters", - "will start the new authority set using the given finalized block as base.", - "Only callable by root." - ] - } - ] - } - }, - "docs": [ - "Contains one variant per dispatchable that can be called by an extrinsic." - ] - } - }, - { - "id": 330, - "type": { - "path": [ - "sp_finality_grandpa", - "EquivocationProof" - ], - "params": [ - { - "name": "H", - "type": 9 - }, - { - "name": "N", - "type": 4 - } - ], - "def": { - "composite": { - "fields": [ - { - "name": "set_id", - "type": 8, - "typeName": "SetId", - "docs": [] - }, - { - "name": "equivocation", - "type": 331, - "typeName": "Equivocation", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 331, - "type": { - "path": [ - "sp_finality_grandpa", - "Equivocation" - ], - "params": [ - { - "name": "H", - "type": 9 - }, - { - "name": "N", - "type": 4 - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "Prevote", - "fields": [ - { - "name": null, - "type": 332, - "typeName": "grandpa::Equivocation,\nAuthoritySignature>", - "docs": [] - } - ], - "index": 0, - "docs": [] - }, - { - "name": "Precommit", - "fields": [ - { - "name": null, - "type": 338, - "typeName": "grandpa::Equivocation,\nAuthoritySignature>", - "docs": [] - } - ], - "index": 1, - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 332, - "type": { - "path": [ - "finality_grandpa", - "Equivocation" - ], - "params": [ - { - "name": "Id", - "type": 44 - }, - { - "name": "V", - "type": 333 - }, - { - "name": "S", - "type": 334 - } - ], - "def": { - "composite": { - "fields": [ - { - "name": "round_number", - "type": 8, - "typeName": "u64", - "docs": [] - }, - { - "name": "identity", - "type": 44, - "typeName": "Id", - "docs": [] - }, - { - "name": "first", - "type": 337, - "typeName": "(V, S)", - "docs": [] - }, - { - "name": "second", - "type": 337, - "typeName": "(V, S)", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 333, - "type": { - "path": [ - "finality_grandpa", - "Prevote" - ], - "params": [ - { - "name": "H", - "type": 9 - }, - { - "name": "N", - "type": 4 - } - ], - "def": { - "composite": { - "fields": [ - { - "name": "target_hash", - "type": 9, - "typeName": "H", - "docs": [] - }, - { - "name": "target_number", - "type": 4, - "typeName": "N", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 334, - "type": { - "path": [ - "sp_finality_grandpa", - "app", - "Signature" - ], - "params": [], - "def": { - "composite": { - "fields": [ - { - "name": null, - "type": 335, - "typeName": "ed25519::Signature", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 335, - "type": { - "path": [ - "sp_core", - "ed25519", - "Signature" - ], - "params": [], - "def": { - "composite": { - "fields": [ - { - "name": null, - "type": 336, - "typeName": "[u8; 64]", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 336, - "type": { - "path": [], - "params": [], - "def": { - "array": { - "len": 64, - "type": 2 - } - }, - "docs": [] - } - }, - { - "id": 337, - "type": { - "path": [], - "params": [], - "def": { - "tuple": [ - 333, - 334 - ] - }, - "docs": [] - } - }, - { - "id": 338, - "type": { - "path": [ - "finality_grandpa", - "Equivocation" - ], - "params": [ - { - "name": "Id", - "type": 44 - }, - { - "name": "V", - "type": 339 - }, - { - "name": "S", - "type": 334 - } - ], - "def": { - "composite": { - "fields": [ - { - "name": "round_number", - "type": 8, - "typeName": "u64", - "docs": [] - }, - { - "name": "identity", - "type": 44, - "typeName": "Id", - "docs": [] - }, - { - "name": "first", - "type": 340, - "typeName": "(V, S)", - "docs": [] - }, - { - "name": "second", - "type": 340, - "typeName": "(V, S)", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 339, - "type": { - "path": [ - "finality_grandpa", - "Precommit" - ], - "params": [ - { - "name": "H", - "type": 9 - }, - { - "name": "N", - "type": 4 - } - ], - "def": { - "composite": { - "fields": [ - { - "name": "target_hash", - "type": 9, - "typeName": "H", - "docs": [] - }, - { - "name": "target_number", - "type": 4, - "typeName": "N", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 340, - "type": { - "path": [], - "params": [], - "def": { - "tuple": [ - 339, - 334 - ] - }, - "docs": [] - } - }, - { - "id": 341, - "type": { - "path": [ - "pallet_im_online", - "pallet", - "Call" - ], - "params": [ - { - "name": "T", - "type": null - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "heartbeat", - "fields": [ - { - "name": "heartbeat", - "type": 342, - "typeName": "Heartbeat", - "docs": [] - }, - { - "name": "signature", - "type": 347, - "typeName": "::Signature", - "docs": [] - } - ], - "index": 0, - "docs": [ - "# ", - "- Complexity: `O(K + E)` where K is length of `Keys` (heartbeat.validators_len) and E is", - " length of `heartbeat.network_state.external_address`", - " - `O(K)`: decoding of length `K`", - " - `O(E)`: decoding/encoding of length `E`", - "- DbReads: pallet_session `Validators`, pallet_session `CurrentIndex`, `Keys`,", - " `ReceivedHeartbeats`", - "- DbWrites: `ReceivedHeartbeats`", - "# " - ] - } - ] - } - }, - "docs": [ - "Contains one variant per dispatchable that can be called by an extrinsic." - ] - } - }, - { - "id": 342, - "type": { - "path": [ - "pallet_im_online", - "Heartbeat" - ], - "params": [ - { - "name": "BlockNumber", - "type": 4 - } - ], - "def": { - "composite": { - "fields": [ - { - "name": "block_number", - "type": 4, - "typeName": "BlockNumber", - "docs": [] - }, - { - "name": "network_state", - "type": 343, - "typeName": "OpaqueNetworkState", - "docs": [] - }, - { - "name": "session_index", - "type": 4, - "typeName": "SessionIndex", - "docs": [] - }, - { - "name": "authority_index", - "type": 4, - "typeName": "AuthIndex", - "docs": [] - }, - { - "name": "validators_len", - "type": 4, - "typeName": "u32", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 343, - "type": { - "path": [ - "sp_core", - "offchain", - "OpaqueNetworkState" - ], - "params": [], - "def": { - "composite": { - "fields": [ - { - "name": "peer_id", - "type": 344, - "typeName": "OpaquePeerId", - "docs": [] - }, - { - "name": "external_addresses", - "type": 345, - "typeName": "Vec", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 344, - "type": { - "path": [ - "sp_core", - "OpaquePeerId" - ], - "params": [], - "def": { - "composite": { - "fields": [ - { - "name": null, - "type": 10, - "typeName": "Vec", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 345, - "type": { - "path": [], - "params": [], - "def": { - "sequence": { - "type": 346 - } - }, - "docs": [] - } - }, - { - "id": 346, - "type": { - "path": [ - "sp_core", - "offchain", - "OpaqueMultiaddr" - ], - "params": [], - "def": { - "composite": { - "fields": [ - { - "name": null, - "type": 10, - "typeName": "Vec", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 347, - "type": { - "path": [ - "pallet_im_online", - "sr25519", - "app_sr25519", - "Signature" - ], - "params": [], - "def": { - "composite": { - "fields": [ - { - "name": null, - "type": 348, - "typeName": "sr25519::Signature", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 348, - "type": { - "path": [ - "sp_core", - "sr25519", - "Signature" - ], - "params": [], - "def": { - "composite": { - "fields": [ - { - "name": null, - "type": 336, - "typeName": "[u8; 64]", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 349, - "type": { - "path": [ - "pallet_sudo", - "pallet", - "Call" - ], - "params": [ - { - "name": "T", - "type": null - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "sudo", - "fields": [ - { - "name": "call", - "type": 241, - "typeName": "Box<::Call>", - "docs": [] - } - ], - "index": 0, - "docs": [ - "Authenticates the sudo key and dispatches a function call with `Root` origin.", - "", - "The dispatch origin for this call must be _Signed_.", - "", - "# ", - "- O(1).", - "- Limited storage reads.", - "- One DB write (event).", - "- Weight of derivative `call` execution + 10,000.", - "# " - ] - }, - { - "name": "sudo_unchecked_weight", - "fields": [ - { - "name": "call", - "type": 241, - "typeName": "Box<::Call>", - "docs": [] - }, - { - "name": "weight", - "type": 8, - "typeName": "Weight", - "docs": [] - } - ], - "index": 1, - "docs": [ - "Authenticates the sudo key and dispatches a function call with `Root` origin.", - "This function does not check the weight of the call, and instead allows the", - "Sudo user to specify the weight of the call.", - "", - "The dispatch origin for this call must be _Signed_.", - "", - "# ", - "- O(1).", - "- The weight of this call is defined by the caller.", - "# " - ] - }, - { - "name": "set_key", - "fields": [ - { - "name": "new", - "type": 0, - "typeName": "::Source", - "docs": [] - } - ], - "index": 2, - "docs": [ - "Authenticates the current sudo key and sets the given AccountId (`new`) as the new sudo", - "key.", - "", - "The dispatch origin for this call must be _Signed_.", - "", - "# ", - "- O(1).", - "- Limited storage reads.", - "- One DB change.", - "# " - ] - }, - { - "name": "sudo_as", - "fields": [ - { - "name": "who", - "type": 0, - "typeName": "::Source", - "docs": [] - }, - { - "name": "call", - "type": 241, - "typeName": "Box<::Call>", - "docs": [] - } - ], - "index": 3, - "docs": [ - "Authenticates the sudo key and dispatches a function call with `Signed` origin from", - "a given account.", - "", - "The dispatch origin for this call must be _Signed_.", - "", - "# ", - "- O(1).", - "- Limited storage reads.", - "- One DB write (event).", - "- Weight of derivative `call` execution + 10,000.", - "# " - ] - } - ] - } - }, - "docs": [ - "Contains one variant per dispatchable that can be called by an extrinsic." - ] - } - }, - { - "id": 350, - "type": { - "path": [ - "pallet_bags_list", - "pallet", - "Call" - ], - "params": [ - { - "name": "T", - "type": null - }, - { - "name": "I", - "type": null - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "rebag", - "fields": [ - { - "name": "dislocated", - "type": 0, - "typeName": "T::AccountId", - "docs": [] - } - ], - "index": 0, - "docs": [ - "Declare that some `dislocated` account has, through rewards or penalties, sufficiently", - "changed its score that it should properly fall into a different bag than its current", - "one.", - "", - "Anyone can call this function about any potentially dislocated account.", - "", - "Will always update the stored score of `dislocated` to the correct score, based on", - "`ScoreProvider`.", - "", - "If `dislocated` does not exists, it returns an error." - ] - }, - { - "name": "put_in_front_of", - "fields": [ - { - "name": "lighter", - "type": 0, - "typeName": "T::AccountId", - "docs": [] - } - ], - "index": 1, - "docs": [ - "Move the caller's Id directly in front of `lighter`.", - "", - "The dispatch origin for this call must be _Signed_ and can only be called by the Id of", - "the account going in front of `lighter`.", - "", - "Only works if", - "- both nodes are within the same bag,", - "- and `origin` has a greater `Score` than `lighter`." - ] - } - ] - } - }, - "docs": [ - "Contains one variant per dispatchable that can be called by an extrinsic." - ] - } - }, - { - "id": 351, - "type": { - "path": [ - "pallet_vesting", - "pallet", - "Call" - ], - "params": [ - { - "name": "T", - "type": null - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "vest", - "fields": [], - "index": 0, - "docs": [ - "Unlock any vested funds of the sender account.", - "", - "The dispatch origin for this call must be _Signed_ and the sender must have funds still", - "locked under this pallet.", - "", - "Emits either `VestingCompleted` or `VestingUpdated`.", - "", - "# ", - "- `O(1)`.", - "- DbWeight: 2 Reads, 2 Writes", - " - Reads: Vesting Storage, Balances Locks, [Sender Account]", - " - Writes: Vesting Storage, Balances Locks, [Sender Account]", - "# " - ] - }, - { - "name": "vest_other", - "fields": [ - { - "name": "target", - "type": 0, - "typeName": "::Source", - "docs": [] - } - ], - "index": 1, - "docs": [ - "Unlock any vested funds of a `target` account.", - "", - "The dispatch origin for this call must be _Signed_.", - "", - "- `target`: The account whose vested funds should be unlocked. Must have funds still", - "locked under this pallet.", - "", - "Emits either `VestingCompleted` or `VestingUpdated`.", - "", - "# ", - "- `O(1)`.", - "- DbWeight: 3 Reads, 3 Writes", - " - Reads: Vesting Storage, Balances Locks, Target Account", - " - Writes: Vesting Storage, Balances Locks, Target Account", - "# " - ] - }, - { - "name": "vested_transfer", - "fields": [ - { - "name": "target", - "type": 0, - "typeName": "::Source", - "docs": [] - }, - { - "name": "schedule", - "type": 352, - "typeName": "VestingInfo, T::BlockNumber>", - "docs": [] - } - ], - "index": 2, - "docs": [ - "Create a vested transfer.", - "", - "The dispatch origin for this call must be _Signed_.", - "", - "- `target`: The account receiving the vested funds.", - "- `schedule`: The vesting schedule attached to the transfer.", - "", - "Emits `VestingCreated`.", - "", - "NOTE: This will unlock all schedules through the current block.", - "", - "# ", - "- `O(1)`.", - "- DbWeight: 3 Reads, 3 Writes", - " - Reads: Vesting Storage, Balances Locks, Target Account, [Sender Account]", - " - Writes: Vesting Storage, Balances Locks, Target Account, [Sender Account]", - "# " - ] - }, - { - "name": "force_vested_transfer", - "fields": [ - { - "name": "source", - "type": 0, - "typeName": "::Source", - "docs": [] - }, - { - "name": "target", - "type": 0, - "typeName": "::Source", - "docs": [] - }, - { - "name": "schedule", - "type": 352, - "typeName": "VestingInfo, T::BlockNumber>", - "docs": [] - } - ], - "index": 3, - "docs": [ - "Force a vested transfer.", - "", - "The dispatch origin for this call must be _Root_.", - "", - "- `source`: The account whose funds should be transferred.", - "- `target`: The account that should be transferred the vested funds.", - "- `schedule`: The vesting schedule attached to the transfer.", - "", - "Emits `VestingCreated`.", - "", - "NOTE: This will unlock all schedules through the current block.", - "", - "# ", - "- `O(1)`.", - "- DbWeight: 4 Reads, 4 Writes", - " - Reads: Vesting Storage, Balances Locks, Target Account, Source Account", - " - Writes: Vesting Storage, Balances Locks, Target Account, Source Account", - "# " - ] - }, - { - "name": "merge_schedules", - "fields": [ - { - "name": "schedule1_index", - "type": 4, - "typeName": "u32", - "docs": [] - }, - { - "name": "schedule2_index", - "type": 4, - "typeName": "u32", - "docs": [] - } - ], - "index": 4, - "docs": [ - "Merge two vesting schedules together, creating a new vesting schedule that unlocks over", - "the highest possible start and end blocks. If both schedules have already started the", - "current block will be used as the schedule start; with the caveat that if one schedule", - "is finished by the current block, the other will be treated as the new merged schedule,", - "unmodified.", - "", - "NOTE: If `schedule1_index == schedule2_index` this is a no-op.", - "NOTE: This will unlock all schedules through the current block prior to merging.", - "NOTE: If both schedules have ended by the current block, no new schedule will be created", - "and both will be removed.", - "", - "Merged schedule attributes:", - "- `starting_block`: `MAX(schedule1.starting_block, scheduled2.starting_block,", - " current_block)`.", - "- `ending_block`: `MAX(schedule1.ending_block, schedule2.ending_block)`.", - "- `locked`: `schedule1.locked_at(current_block) + schedule2.locked_at(current_block)`.", - "", - "The dispatch origin for this call must be _Signed_.", - "", - "- `schedule1_index`: index of the first schedule to merge.", - "- `schedule2_index`: index of the second schedule to merge." - ] - } - ] - } - }, - "docs": [ - "Contains one variant per dispatchable that can be called by an extrinsic." - ] - } - }, - { - "id": 352, - "type": { - "path": [ - "pallet_vesting", - "vesting_info", - "VestingInfo" - ], - "params": [ - { - "name": "Balance", - "type": 6 - }, - { - "name": "BlockNumber", - "type": 4 - } - ], - "def": { - "composite": { - "fields": [ - { - "name": "locked", - "type": 6, - "typeName": "Balance", - "docs": [] - }, - { - "name": "per_block", - "type": 6, - "typeName": "Balance", - "docs": [] - }, - { - "name": "starting_block", - "type": 4, - "typeName": "BlockNumber", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 353, - "type": { - "path": [ - "pallet_council", - "Call" - ], - "params": [ - { - "name": "T", - "type": null - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "announce_candidacy", - "fields": [ - { - "name": "membership_id", - "type": 8, - "typeName": "T::MemberId", - "docs": [] - }, - { - "name": "staking_account_id", - "type": 0, - "typeName": "T::AccountId", - "docs": [] - }, - { - "name": "reward_account_id", - "type": 0, - "typeName": "T::AccountId", - "docs": [] - }, - { - "name": "stake", - "type": 6, - "typeName": "Balance", - "docs": [] - } - ], - "index": 0, - "docs": [ - "Subscribe candidate", - "", - "# ", - "", - "## weight", - "`O (1)`", - "- db:", - " - `O(1)` doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "release_candidacy_stake", - "fields": [ - { - "name": "membership_id", - "type": 8, - "typeName": "T::MemberId", - "docs": [] - } - ], - "index": 1, - "docs": [ - "Release candidacy stake that is no longer needed.", - "", - "# ", - "", - "## weight", - "`O (1)`", - "- db:", - " - `O(1)` doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "withdraw_candidacy", - "fields": [ - { - "name": "membership_id", - "type": 8, - "typeName": "T::MemberId", - "docs": [] - } - ], - "index": 2, - "docs": [ - "Withdraw candidacy and release candidacy stake.", - "", - "# ", - "", - "## weight", - "`O (1)`", - "- db:", - " - `O(1)` doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "set_candidacy_note", - "fields": [ - { - "name": "membership_id", - "type": 8, - "typeName": "T::MemberId", - "docs": [] - }, - { - "name": "note", - "type": 10, - "typeName": "Vec", - "docs": [] - } - ], - "index": 3, - "docs": [ - "Set short description for the user's candidacy. Can be called anytime during user's candidacy.", - "", - "# ", - "", - "## weight", - "`O (N)` where:", - "`N` is the length of `note`", - "- db:", - " - `O(1)` doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "set_budget", - "fields": [ - { - "name": "balance", - "type": 6, - "typeName": "Balance", - "docs": [] - } - ], - "index": 4, - "docs": [ - "Sets the budget balance.", - "", - "# ", - "", - "## weight", - "`O (1)`", - "- db:", - " - `O(1)` doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "plan_budget_refill", - "fields": [ - { - "name": "next_refill", - "type": 4, - "typeName": "T::BlockNumber", - "docs": [] - } - ], - "index": 5, - "docs": [ - "Plan the next budget refill.", - "", - "# ", - "", - "## weight", - "`O (1)`", - "- db:", - " - `O(1)` doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "set_budget_increment", - "fields": [ - { - "name": "budget_increment", - "type": 6, - "typeName": "Balance", - "docs": [] - } - ], - "index": 6, - "docs": [ - "Sets the budget refill amount", - "", - "# ", - "", - "## weight", - "`O (1)`", - "- db:", - " - `O(1)` doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "set_councilor_reward", - "fields": [ - { - "name": "councilor_reward", - "type": 6, - "typeName": "Balance", - "docs": [] - } - ], - "index": 7, - "docs": [ - "Sets the councilor reward per block", - "", - "# ", - "", - "## weight", - "`O (1)`", - "- db:", - " - `O(1)` doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "funding_request", - "fields": [ - { - "name": "funding_requests", - "type": 185, - "typeName": "Vec, T::AccountId>>", - "docs": [] - } - ], - "index": 8, - "docs": [ - "Transfers funds from council budget to account", - "", - "# ", - "", - "## weight", - "`O (F)` where:", - "`F` is the length of `funding_requests`", - "- db:", - " - `O(1)` doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "fund_council_budget", - "fields": [ - { - "name": "member_id", - "type": 8, - "typeName": "MemberId", - "docs": [] - }, - { - "name": "amount", - "type": 6, - "typeName": "Balance", - "docs": [] - }, - { - "name": "rationale", - "type": 10, - "typeName": "Vec", - "docs": [] - } - ], - "index": 9, - "docs": [ - "Fund the council budget by a member.", - "", - "", - "## Weight", - "`O (1)` Doesn't depend on the state or parameters", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "councilor_remark", - "fields": [ - { - "name": "councilor_id", - "type": 8, - "typeName": "T::MemberId", - "docs": [] - }, - { - "name": "msg", - "type": 10, - "typeName": "Vec", - "docs": [] - } - ], - "index": 10, - "docs": [ - "Councilor makes a remark message", - "", - "# ", - "", - "## weight", - "`O (1)`", - "- db:", - " - `O(1)` doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "candidate_remark", - "fields": [ - { - "name": "candidate_id", - "type": 8, - "typeName": "T::MemberId", - "docs": [] - }, - { - "name": "msg", - "type": 10, - "typeName": "Vec", - "docs": [] - } - ], - "index": 11, - "docs": [ - "Candidate makes a remark message", - "", - "# ", - "", - "## weight", - "`O (1)`", - "- db:", - " - `O(1)` doesn't depend on the state or parameters", - "# " - ] - } - ] - } - }, - "docs": [ - "Dispatchable calls.", - "", - "Each variant of this enum maps to a dispatchable function from the associated module." - ] - } - }, - { - "id": 354, - "type": { - "path": [ - "pallet_referendum", - "Call" - ], - "params": [ - { - "name": "T", - "type": null - }, - { - "name": "I", - "type": null - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "vote", - "fields": [ - { - "name": "commitment", - "type": 9, - "typeName": "T::Hash", - "docs": [] - }, - { - "name": "stake", - "type": 6, - "typeName": "BalanceOf", - "docs": [] - } - ], - "index": 0, - "docs": [ - "Cast a sealed vote in the referendum.", - "", - "# ", - "", - "## weight", - "`O (1)`", - "- db:", - " - `O(1)` doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "reveal_vote", - "fields": [ - { - "name": "salt", - "type": 10, - "typeName": "Vec", - "docs": [] - }, - { - "name": "vote_option_id", - "type": 8, - "typeName": "::MemberId", - "docs": [] - } - ], - "index": 1, - "docs": [ - "Reveal a sealed vote in the referendum.", - "", - "# ", - "", - "## Weight", - "`O (W)` where:", - "- `W` is the number of `intermediate_winners` stored in the current", - " `Stage::::get()`", - "- DB:", - " - `O(1)` doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "release_vote_stake", - "fields": [], - "index": 2, - "docs": [ - "Release a locked stake.", - "# ", - "", - "## weight", - "`O (1)`", - "- db:", - " - `O(1)` doesn't depend on the state or parameters", - "# " - ] - } - ] - } - }, - "docs": [ - "Dispatchable calls.", - "", - "Each variant of this enum maps to a dispatchable function from the associated module." - ] - } - }, - { - "id": 355, - "type": { - "path": [ - "pallet_membership", - "Call" - ], - "params": [ - { - "name": "T", - "type": null - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "buy_membership", - "fields": [ - { - "name": "params", - "type": 68, - "typeName": "BuyMembershipParameters", - "docs": [] - } - ], - "index": 0, - "docs": [ - "Non-members can buy membership.", - "", - "", - "", - "## Weight", - "`O (W + V + X + Y)` where:", - "- `W` is the member name", - "- `V` is the member handle", - "- `X` is the member avatar uri", - "- `Y` is the member about", - "- DB:", - " - O(V)", - "# " - ] - }, - { - "name": "update_profile", - "fields": [ - { - "name": "member_id", - "type": 8, - "typeName": "T::MemberId", - "docs": [] - }, - { - "name": "handle", - "type": 69, - "typeName": "Option>", - "docs": [] - }, - { - "name": "metadata", - "type": 69, - "typeName": "Option>", - "docs": [] - } - ], - "index": 1, - "docs": [ - "Update member's all or some of name, handle, avatar and about text.", - "No effect if no changed fields.", - "", - "", - "", - "## Weight", - "`O (W)` where:", - "- `W` is the handle length", - "- DB:", - " - O(W)", - "# " - ] - }, - { - "name": "update_accounts", - "fields": [ - { - "name": "member_id", - "type": 8, - "typeName": "T::MemberId", - "docs": [] - }, - { - "name": "new_root_account", - "type": 58, - "typeName": "Option", - "docs": [] - }, - { - "name": "new_controller_account", - "type": 58, - "typeName": "Option", - "docs": [] - } - ], - "index": 2, - "docs": [ - "Updates member root or controller accounts. No effect if both new accounts are empty.", - "", - "", - "", - "", - "", - "## Weight", - "`O (1)`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "update_profile_verification", - "fields": [ - { - "name": "worker_id", - "type": 8, - "typeName": "T::ActorId", - "docs": [] - }, - { - "name": "target_member_id", - "type": 8, - "typeName": "T::MemberId", - "docs": [] - }, - { - "name": "is_verified", - "type": 34, - "typeName": "bool", - "docs": [] - } - ], - "index": 3, - "docs": [ - "Updates member profile verification status. Requires working group member origin.", - "", - "", - "", - "## Weight", - "`O (1)`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "set_referral_cut", - "fields": [ - { - "name": "percent_value", - "type": 2, - "typeName": "u8", - "docs": [] - } - ], - "index": 4, - "docs": [ - "Updates membership referral cut percent value. Requires root origin.", - "", - "", - "", - "## Weight", - "`O (1)`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "transfer_invites", - "fields": [ - { - "name": "source_member_id", - "type": 8, - "typeName": "T::MemberId", - "docs": [] - }, - { - "name": "target_member_id", - "type": 8, - "typeName": "T::MemberId", - "docs": [] - }, - { - "name": "number_of_invites", - "type": 4, - "typeName": "u32", - "docs": [] - } - ], - "index": 5, - "docs": [ - "Transfers invites from one member to another.", - "", - "", - "", - "## Weight", - "`O (1)`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "invite_member", - "fields": [ - { - "name": "params", - "type": 71, - "typeName": "InviteMembershipParameters", - "docs": [] - } - ], - "index": 6, - "docs": [ - "Invite a new member.", - "", - "", - "", - "## Weight", - "`O (W + V + X + Y)` where:", - "- `W` is the member name", - "- `V` is the member handle", - "- `X` is the member avatar uri", - "- `Y` is the member about", - "- DB:", - " - O(V)", - "# " - ] - }, - { - "name": "set_membership_price", - "fields": [ - { - "name": "new_price", - "type": 6, - "typeName": "BalanceOf", - "docs": [] - } - ], - "index": 7, - "docs": [ - "Updates membership price. Requires root origin.", - "", - "", - "", - "## Weight", - "`O (1)`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "set_leader_invitation_quota", - "fields": [ - { - "name": "invitation_quota", - "type": 4, - "typeName": "u32", - "docs": [] - } - ], - "index": 8, - "docs": [ - "Updates leader invitation quota. Requires root origin.", - "", - "", - "", - "## Weight", - "`O (1)`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "set_initial_invitation_balance", - "fields": [ - { - "name": "new_initial_balance", - "type": 6, - "typeName": "BalanceOf", - "docs": [] - } - ], - "index": 9, - "docs": [ - "Updates initial invitation balance for a invited member. Requires root origin.", - "", - "", - "", - "## Weight", - "`O (1)`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "set_initial_invitation_count", - "fields": [ - { - "name": "new_invitation_count", - "type": 4, - "typeName": "u32", - "docs": [] - } - ], - "index": 10, - "docs": [ - "Updates initial invitation count for a member. Requires root origin.", - "", - "", - "", - "## Weight", - "`O (1)`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "add_staking_account_candidate", - "fields": [ - { - "name": "member_id", - "type": 8, - "typeName": "T::MemberId", - "docs": [] - } - ], - "index": 11, - "docs": [ - "Add staking account candidate for a member.", - "The membership must be confirmed before usage.", - "", - "", - "", - "## Weight", - "`O (1)`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "remove_staking_account", - "fields": [ - { - "name": "member_id", - "type": 8, - "typeName": "T::MemberId", - "docs": [] - } - ], - "index": 12, - "docs": [ - "Remove staking account for a member.", - "", - "", - "", - "## Weight", - "`O (1)`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "confirm_staking_account", - "fields": [ - { - "name": "member_id", - "type": 8, - "typeName": "T::MemberId", - "docs": [] - }, - { - "name": "staking_account_id", - "type": 0, - "typeName": "T::AccountId", - "docs": [] - } - ], - "index": 13, - "docs": [ - "Confirm staking account candidate for a member.", - "", - "", - "", - "## Weight", - "`O (1)`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "member_remark", - "fields": [ - { - "name": "member_id", - "type": 8, - "typeName": "T::MemberId", - "docs": [] - }, - { - "name": "msg", - "type": 10, - "typeName": "Vec", - "docs": [] - } - ], - "index": 14, - "docs": [ - "Member makes a remark", - "", - "", - "", - "## Weight", - "`O (1)`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - } - ] - } - }, - "docs": [ - "Dispatchable calls.", - "", - "Each variant of this enum maps to a dispatchable function from the associated module." - ] - } - }, - { - "id": 356, - "type": { - "path": [ - "pallet_forum", - "Call" - ], - "params": [ - { - "name": "T", - "type": null - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "update_category_membership_of_moderator", - "fields": [ - { - "name": "moderator_id", - "type": 8, - "typeName": "ModeratorId", - "docs": [] - }, - { - "name": "category_id", - "type": 8, - "typeName": "T::CategoryId", - "docs": [] - }, - { - "name": "new_value", - "type": 34, - "typeName": "bool", - "docs": [] - } - ], - "index": 0, - "docs": [ - "Enable a moderator can moderate a category and its sub categories.", - "", - "", - "", - "## Weight", - "`O (1)`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "create_category", - "fields": [ - { - "name": "parent_category_id", - "type": 70, - "typeName": "Option", - "docs": [] - }, - { - "name": "title", - "type": 10, - "typeName": "Vec", - "docs": [] - }, - { - "name": "description", - "type": 10, - "typeName": "Vec", - "docs": [] - } - ], - "index": 1, - "docs": [ - "Add a new category.", - "", - "", - "", - "## Weight", - "`O (W + V + X)` where:", - "- `W` is the category depth", - "- `V` is the length of the category title.", - "- `X` is the length of the category description.", - "- DB:", - " - O(W)", - "# " - ] - }, - { - "name": "update_category_archival_status", - "fields": [ - { - "name": "actor", - "type": 73, - "typeName": "PrivilegedActor", - "docs": [] - }, - { - "name": "category_id", - "type": 8, - "typeName": "T::CategoryId", - "docs": [] - }, - { - "name": "new_archival_status", - "type": 34, - "typeName": "bool", - "docs": [] - } - ], - "index": 2, - "docs": [ - "Update archival status", - "", - "", - "", - "## Weight", - "`O (W)` where:", - "- `W` is the category depth", - "- DB:", - " - O(W)", - "# " - ] - }, - { - "name": "update_category_title", - "fields": [ - { - "name": "actor", - "type": 73, - "typeName": "PrivilegedActor", - "docs": [] - }, - { - "name": "category_id", - "type": 8, - "typeName": "T::CategoryId", - "docs": [] - }, - { - "name": "title", - "type": 10, - "typeName": "Vec", - "docs": [] - } - ], - "index": 3, - "docs": [ - "Update category title", - "", - "", - "", - "## Weight", - "`O (W + V)` where:", - "- `W` is the category depth", - "- `V` is the length of the category title.", - "- DB:", - " - O(W)", - "# " - ] - }, - { - "name": "update_category_description", - "fields": [ - { - "name": "actor", - "type": 73, - "typeName": "PrivilegedActor", - "docs": [] - }, - { - "name": "category_id", - "type": 8, - "typeName": "T::CategoryId", - "docs": [] - }, - { - "name": "description", - "type": 10, - "typeName": "Vec", - "docs": [] - } - ], - "index": 4, - "docs": [ - "Update category description", - "", - "", - "", - "## Weight", - "`O (W)` where:", - "- `W` is the category depth", - "- `V` is the length of the category description.", - "- DB:", - " - O(W)", - "# " - ] - }, - { - "name": "delete_category", - "fields": [ - { - "name": "actor", - "type": 73, - "typeName": "PrivilegedActor", - "docs": [] - }, - { - "name": "category_id", - "type": 8, - "typeName": "T::CategoryId", - "docs": [] - } - ], - "index": 5, - "docs": [ - "Delete category", - "", - "", - "", - "## Weight", - "`O (W)` where:", - "- `W` is the category depth", - "- DB:", - " - O(W)", - "# " - ] - }, - { - "name": "create_thread", - "fields": [ - { - "name": "forum_user_id", - "type": 8, - "typeName": "ForumUserId", - "docs": [] - }, - { - "name": "category_id", - "type": 8, - "typeName": "T::CategoryId", - "docs": [] - }, - { - "name": "metadata", - "type": 10, - "typeName": "Vec", - "docs": [] - }, - { - "name": "text", - "type": 10, - "typeName": "Vec", - "docs": [] - }, - { - "name": "poll_input", - "type": 77, - "typeName": "Option>", - "docs": [] - } - ], - "index": 6, - "docs": [ - "Create new thread in category with poll", - "", - "", - "", - "## Weight", - "`O (W + V + X + Y)` where:", - "- `W` is the category depth", - "- `V` is the length of the thread title.", - "- `X` is the length of the thread text.", - "- `Y` is the number of poll alternatives.", - "- DB:", - " - O(W)", - "# " - ] - }, - { - "name": "edit_thread_metadata", - "fields": [ - { - "name": "forum_user_id", - "type": 8, - "typeName": "ForumUserId", - "docs": [] - }, - { - "name": "category_id", - "type": 8, - "typeName": "T::CategoryId", - "docs": [] - }, - { - "name": "thread_id", - "type": 8, - "typeName": "T::ThreadId", - "docs": [] - }, - { - "name": "new_metadata", - "type": 10, - "typeName": "Vec", - "docs": [] - } - ], - "index": 7, - "docs": [ - "Edit thread metadata", - "", - "", - "", - "## Weight", - "`O (W + V)` where:", - "- `W` is the category depth", - "- `V` is the length of the thread metadata.", - "- DB:", - " - O(W)", - "# " - ] - }, - { - "name": "delete_thread", - "fields": [ - { - "name": "forum_user_id", - "type": 8, - "typeName": "ForumUserId", - "docs": [] - }, - { - "name": "category_id", - "type": 8, - "typeName": "T::CategoryId", - "docs": [] - }, - { - "name": "thread_id", - "type": 8, - "typeName": "T::ThreadId", - "docs": [] - }, - { - "name": "hide", - "type": 34, - "typeName": "bool", - "docs": [] - } - ], - "index": 8, - "docs": [ - "Delete thread", - "", - "", - "", - "## Weight", - "`O (W)` where:", - "- `W` is the category depth", - "- DB:", - " - O(W)", - "# " - ] - }, - { - "name": "move_thread_to_category", - "fields": [ - { - "name": "actor", - "type": 73, - "typeName": "PrivilegedActor", - "docs": [] - }, - { - "name": "category_id", - "type": 8, - "typeName": "T::CategoryId", - "docs": [] - }, - { - "name": "thread_id", - "type": 8, - "typeName": "T::ThreadId", - "docs": [] - }, - { - "name": "new_category_id", - "type": 8, - "typeName": "T::CategoryId", - "docs": [] - } - ], - "index": 9, - "docs": [ - "Move thread to another category", - "", - "", - "", - "## Weight", - "`O (W)` where:", - "- `W` is the category depth", - "- DB:", - " - O(W)", - "# " - ] - }, - { - "name": "vote_on_poll", - "fields": [ - { - "name": "forum_user_id", - "type": 8, - "typeName": "ForumUserId", - "docs": [] - }, - { - "name": "category_id", - "type": 8, - "typeName": "T::CategoryId", - "docs": [] - }, - { - "name": "thread_id", - "type": 8, - "typeName": "T::ThreadId", - "docs": [] - }, - { - "name": "index", - "type": 4, - "typeName": "u32", - "docs": [] - } - ], - "index": 10, - "docs": [ - "Submit a poll", - "", - "", - "", - "## Weight", - "`O (W + V)` where:", - "- `W` is the category depth,", - "- `V` is the number of poll alternatives.", - "- DB:", - " - O(W)", - "# " - ] - }, - { - "name": "moderate_thread", - "fields": [ - { - "name": "actor", - "type": 73, - "typeName": "PrivilegedActor", - "docs": [] - }, - { - "name": "category_id", - "type": 8, - "typeName": "T::CategoryId", - "docs": [] - }, - { - "name": "thread_id", - "type": 8, - "typeName": "T::ThreadId", - "docs": [] - }, - { - "name": "rationale", - "type": 10, - "typeName": "Vec", - "docs": [] - } - ], - "index": 11, - "docs": [ - "Moderate thread", - "", - "", - "", - "## Weight", - "`O (W + V + X)` where:", - "- `W` is the category depth,", - "- `V` is the number of thread posts,", - "- `X` is the length of the rationale", - "- DB:", - " - O(W + V)", - "# " - ] - }, - { - "name": "add_post", - "fields": [ - { - "name": "forum_user_id", - "type": 8, - "typeName": "ForumUserId", - "docs": [] - }, - { - "name": "category_id", - "type": 8, - "typeName": "T::CategoryId", - "docs": [] - }, - { - "name": "thread_id", - "type": 8, - "typeName": "T::ThreadId", - "docs": [] - }, - { - "name": "text", - "type": 10, - "typeName": "Vec", - "docs": [] - }, - { - "name": "editable", - "type": 34, - "typeName": "bool", - "docs": [] - } - ], - "index": 12, - "docs": [ - "Add post", - "", - "", - "", - "## Weight", - "`O (W + V)` where:", - "- `W` is the category depth,", - "- `V` is the length of the text", - "- DB:", - " - O(W)", - "# " - ] - }, - { - "name": "react_post", - "fields": [ - { - "name": "forum_user_id", - "type": 8, - "typeName": "ForumUserId", - "docs": [] - }, - { - "name": "category_id", - "type": 8, - "typeName": "T::CategoryId", - "docs": [] - }, - { - "name": "thread_id", - "type": 8, - "typeName": "T::ThreadId", - "docs": [] - }, - { - "name": "post_id", - "type": 8, - "typeName": "T::PostId", - "docs": [] - }, - { - "name": "react", - "type": 8, - "typeName": "T::PostReactionId", - "docs": [] - } - ], - "index": 13, - "docs": [ - "Like or unlike a post.", - "", - "", - "", - "## Weight", - "`O (W)` where:", - "- `W` is the category depth,", - "- DB:", - " - O(W)", - "# " - ] - }, - { - "name": "edit_post_text", - "fields": [ - { - "name": "forum_user_id", - "type": 8, - "typeName": "ForumUserId", - "docs": [] - }, - { - "name": "category_id", - "type": 8, - "typeName": "T::CategoryId", - "docs": [] - }, - { - "name": "thread_id", - "type": 8, - "typeName": "T::ThreadId", - "docs": [] - }, - { - "name": "post_id", - "type": 8, - "typeName": "T::PostId", - "docs": [] - }, - { - "name": "new_text", - "type": 10, - "typeName": "Vec", - "docs": [] - } - ], - "index": 14, - "docs": [ - "Edit post text", - "", - "", - "", - "## Weight", - "`O (W + V)` where:", - "- `W` is the category depth,", - "- `V` is the length of the new text", - "- DB:", - " - O(W)", - "# " - ] - }, - { - "name": "moderate_post", - "fields": [ - { - "name": "actor", - "type": 73, - "typeName": "PrivilegedActor", - "docs": [] - }, - { - "name": "category_id", - "type": 8, - "typeName": "T::CategoryId", - "docs": [] - }, - { - "name": "thread_id", - "type": 8, - "typeName": "T::ThreadId", - "docs": [] - }, - { - "name": "post_id", - "type": 8, - "typeName": "T::PostId", - "docs": [] - }, - { - "name": "rationale", - "type": 10, - "typeName": "Vec", - "docs": [] - } - ], - "index": 15, - "docs": [ - "Moderate post", - "", - "", - "", - "## Weight", - "`O (W + V)` where:", - "- `W` is the category depth,", - "- `V` is the length of the rationale", - "- DB:", - " - O(W)", - "# " - ] - }, - { - "name": "delete_posts", - "fields": [ - { - "name": "forum_user_id", - "type": 8, - "typeName": "ForumUserId", - "docs": [] - }, - { - "name": "posts", - "type": 78, - "typeName": "BTreeMap, bool>", - "docs": [] - }, - { - "name": "rationale", - "type": 10, - "typeName": "Vec", - "docs": [] - } - ], - "index": 16, - "docs": [ - "Delete post from storage.", - "You need to provide a vector of posts to delete in the form", - "(T::CategoryId, T::ThreadId, T::PostId, bool)", - "where the last bool is whether you want to hide it apart from deleting it", - "", - "## Weight", - "`O (W + V + P)` where:", - "- `W` is the category depth,", - "- `V` is the length of the rationale", - "- `P` is the number of posts to delete", - "- DB:", - " - O(W + P)", - "# " - ] - }, - { - "name": "set_stickied_threads", - "fields": [ - { - "name": "actor", - "type": 73, - "typeName": "PrivilegedActor", - "docs": [] - }, - { - "name": "category_id", - "type": 8, - "typeName": "T::CategoryId", - "docs": [] - }, - { - "name": "stickied_ids", - "type": 62, - "typeName": "Vec", - "docs": [] - } - ], - "index": 17, - "docs": [ - "Set stickied threads for category", - "", - "", - "", - "## Weight", - "`O (W + V)` where:", - "- `W` is the category depth,", - "- `V` is the length of the stickied_ids", - "- DB:", - " - O(W + V)", - "# " - ] - } - ] - } - }, - "docs": [ - "Dispatchable calls.", - "", - "Each variant of this enum maps to a dispatchable function from the associated module." - ] - } - }, - { - "id": 357, - "type": { - "path": [ - "pallet_constitution", - "Call" - ], - "params": [ - { - "name": "T", - "type": null - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "amend_constitution", - "fields": [ - { - "name": "constitution_text", - "type": 10, - "typeName": "Vec", - "docs": [] - } - ], - "index": 0, - "docs": [ - "Sets the current constitution hash. Requires root origin.", - "# ", - "- Complexity: `O(C)` where C is the length of the constitution text.", - "- Db reads: 0", - "- Db writes: 1 (constant value)", - "# " - ] - } - ] - } - }, - "docs": [ - "Dispatchable calls.", - "", - "Each variant of this enum maps to a dispatchable function from the associated module." - ] - } - }, - { - "id": 358, - "type": { - "path": [ - "pallet_utility", - "Call" - ], - "params": [ - { - "name": "T", - "type": null - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "execute_signal_proposal", - "fields": [ - { - "name": "signal", - "type": 10, - "typeName": "Vec", - "docs": [] - } - ], - "index": 0, - "docs": [ - "Signal proposal extrinsic. Should be used as callable object to pass to the `engine` module.", - "", - "", - "", - "## Weight", - "`O (S)` where:", - "- `S` is the length of the signal", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "execute_runtime_upgrade_proposal", - "fields": [ - { - "name": "wasm", - "type": 10, - "typeName": "Vec", - "docs": [] - } - ], - "index": 1, - "docs": [ - "Runtime upgrade proposal extrinsic.", - "Should be used as callable object to pass to the `engine` module.", - "", - "", - "## Weight", - "`O (C)` where:", - "- `C` is the length of `wasm`", - "However, we treat this as a full block as `frame_system::Module::set_code` does", - "# ", - "#[weight = (T::BlockWeights::get().get(DispatchClass::Operational).base_extrinsic, DispatchClass::Operational)]" - ] - }, - { - "name": "update_working_group_budget", - "fields": [ - { - "name": "working_group", - "type": 83, - "typeName": "WorkingGroup", - "docs": [] - }, - { - "name": "amount", - "type": 6, - "typeName": "BalanceOf", - "docs": [] - }, - { - "name": "balance_kind", - "type": 84, - "typeName": "BalanceKind", - "docs": [] - } - ], - "index": 2, - "docs": [ - "Update working group budget", - "", - "", - "## Weight", - "`O (1)` Doesn't depend on the state or parameters", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "burn_account_tokens", - "fields": [ - { - "name": "amount", - "type": 6, - "typeName": "BalanceOf", - "docs": [] - } - ], - "index": 3, - "docs": [ - "Burns token for caller account", - "", - "", - "## Weight", - "`O (1)` Doesn't depend on the state or parameters", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - } - ] - } - }, - "docs": [ - "Dispatchable calls.", - "", - "Each variant of this enum maps to a dispatchable function from the associated module." - ] - } - }, - { - "id": 359, - "type": { - "path": [ - "pallet_content", - "Call" - ], - "params": [ - { - "name": "T", - "type": null - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "create_curator_group", - "fields": [ - { - "name": "is_active", - "type": 34, - "typeName": "bool", - "docs": [] - }, - { - "name": "permissions_by_level", - "type": 124, - "typeName": "ModerationPermissionsByLevel", - "docs": [] - } - ], - "index": 0, - "docs": [ - "Add new curator group to runtime storage" - ] - }, - { - "name": "update_curator_group_permissions", - "fields": [ - { - "name": "curator_group_id", - "type": 8, - "typeName": "T::CuratorGroupId", - "docs": [] - }, - { - "name": "permissions_by_level", - "type": 124, - "typeName": "ModerationPermissionsByLevel", - "docs": [] - } - ], - "index": 1, - "docs": [ - "Update existing curator group's permissions" - ] - }, - { - "name": "set_curator_group_status", - "fields": [ - { - "name": "curator_group_id", - "type": 8, - "typeName": "T::CuratorGroupId", - "docs": [] - }, - { - "name": "is_active", - "type": 34, - "typeName": "bool", - "docs": [] - } - ], - "index": 2, - "docs": [ - "Set `is_active` status for curator group under given `curator_group_id`" - ] - }, - { - "name": "add_curator_to_group", - "fields": [ - { - "name": "curator_group_id", - "type": 8, - "typeName": "T::CuratorGroupId", - "docs": [] - }, - { - "name": "curator_id", - "type": 8, - "typeName": "T::CuratorId", - "docs": [] - }, - { - "name": "permissions", - "type": 90, - "typeName": "ChannelAgentPermissions", - "docs": [] - } - ], - "index": 3, - "docs": [ - "Add curator to curator group under given `curator_group_id`" - ] - }, - { - "name": "remove_curator_from_group", - "fields": [ - { - "name": "curator_group_id", - "type": 8, - "typeName": "T::CuratorGroupId", - "docs": [] - }, - { - "name": "curator_id", - "type": 8, - "typeName": "T::CuratorId", - "docs": [] - } - ], - "index": 4, - "docs": [ - "Remove curator from a given curator group" - ] - }, - { - "name": "create_channel", - "fields": [ - { - "name": "channel_owner", - "type": 88, - "typeName": "ChannelOwner", - "docs": [] - }, - { - "name": "params", - "type": 111, - "typeName": "ChannelCreationParameters", - "docs": [] - } - ], - "index": 5, - "docs": [] - }, - { - "name": "update_channel", - "fields": [ - { - "name": "actor", - "type": 86, - "typeName": "ContentActor", - "docs": [] - }, - { - "name": "channel_id", - "type": 8, - "typeName": "T::ChannelId", - "docs": [] - }, - { - "name": "params", - "type": 119, - "typeName": "ChannelUpdateParameters", - "docs": [] - } - ], - "index": 6, - "docs": [] - }, - { - "name": "update_channel_privilege_level", - "fields": [ - { - "name": "channel_id", - "type": 8, - "typeName": "T::ChannelId", - "docs": [] - }, - { - "name": "new_privilege_level", - "type": 2, - "typeName": "T::ChannelPrivilegeLevel", - "docs": [] - } - ], - "index": 7, - "docs": [] - }, - { - "name": "set_channel_paused_features_as_moderator", - "fields": [ - { - "name": "actor", - "type": 86, - "typeName": "ContentActor", - "docs": [] - }, - { - "name": "channel_id", - "type": 8, - "typeName": "T::ChannelId", - "docs": [] - }, - { - "name": "new_paused_features", - "type": 95, - "typeName": "BTreeSet", - "docs": [] - }, - { - "name": "rationale", - "type": 10, - "typeName": "Vec", - "docs": [] - } - ], - "index": 8, - "docs": [] - }, - { - "name": "delete_channel", - "fields": [ - { - "name": "actor", - "type": 86, - "typeName": "ContentActor", - "docs": [] - }, - { - "name": "channel_id", - "type": 8, - "typeName": "T::ChannelId", - "docs": [] - }, - { - "name": "num_objects_to_delete", - "type": 8, - "typeName": "u64", - "docs": [] - } - ], - "index": 9, - "docs": [] - }, - { - "name": "delete_channel_assets_as_moderator", - "fields": [ - { - "name": "actor", - "type": 86, - "typeName": "ContentActor", - "docs": [] - }, - { - "name": "channel_id", - "type": 8, - "typeName": "T::ChannelId", - "docs": [] - }, - { - "name": "assets_to_remove", - "type": 101, - "typeName": "BTreeSet>", - "docs": [] - }, - { - "name": "rationale", - "type": 10, - "typeName": "Vec", - "docs": [] - } - ], - "index": 10, - "docs": [] - }, - { - "name": "delete_channel_as_moderator", - "fields": [ - { - "name": "actor", - "type": 86, - "typeName": "ContentActor", - "docs": [] - }, - { - "name": "channel_id", - "type": 8, - "typeName": "T::ChannelId", - "docs": [] - }, - { - "name": "num_objects_to_delete", - "type": 8, - "typeName": "u64", - "docs": [] - }, - { - "name": "rationale", - "type": 10, - "typeName": "Vec", - "docs": [] - } - ], - "index": 11, - "docs": [] - }, - { - "name": "set_channel_visibility_as_moderator", - "fields": [ - { - "name": "actor", - "type": 86, - "typeName": "ContentActor", - "docs": [] - }, - { - "name": "channel_id", - "type": 8, - "typeName": "T::ChannelId", - "docs": [] - }, - { - "name": "is_hidden", - "type": 34, - "typeName": "bool", - "docs": [] - }, - { - "name": "rationale", - "type": 10, - "typeName": "Vec", - "docs": [] - } - ], - "index": 12, - "docs": [] - }, - { - "name": "create_video", - "fields": [ - { - "name": "actor", - "type": 86, - "typeName": "ContentActor", - "docs": [] - }, - { - "name": "channel_id", - "type": 8, - "typeName": "T::ChannelId", - "docs": [] - }, - { - "name": "params", - "type": 121, - "typeName": "VideoCreationParameters", - "docs": [] - } - ], - "index": 13, - "docs": [] - }, - { - "name": "update_video", - "fields": [ - { - "name": "actor", - "type": 86, - "typeName": "ContentActor", - "docs": [] - }, - { - "name": "video_id", - "type": 8, - "typeName": "T::VideoId", - "docs": [] - }, - { - "name": "params", - "type": 123, - "typeName": "VideoUpdateParameters", - "docs": [] - } - ], - "index": 14, - "docs": [] - }, - { - "name": "delete_video", - "fields": [ - { - "name": "actor", - "type": 86, - "typeName": "ContentActor", - "docs": [] - }, - { - "name": "video_id", - "type": 8, - "typeName": "T::VideoId", - "docs": [] - }, - { - "name": "num_objects_to_delete", - "type": 8, - "typeName": "u64", - "docs": [] - } - ], - "index": 15, - "docs": [] - }, - { - "name": "delete_video_assets_as_moderator", - "fields": [ - { - "name": "actor", - "type": 86, - "typeName": "ContentActor", - "docs": [] - }, - { - "name": "video_id", - "type": 8, - "typeName": "T::VideoId", - "docs": [] - }, - { - "name": "assets_to_remove", - "type": 101, - "typeName": "BTreeSet>", - "docs": [] - }, - { - "name": "rationale", - "type": 10, - "typeName": "Vec", - "docs": [] - } - ], - "index": 16, - "docs": [] - }, - { - "name": "delete_video_as_moderator", - "fields": [ - { - "name": "actor", - "type": 86, - "typeName": "ContentActor", - "docs": [] - }, - { - "name": "video_id", - "type": 8, - "typeName": "T::VideoId", - "docs": [] - }, - { - "name": "num_objects_to_delete", - "type": 8, - "typeName": "u64", - "docs": [] - }, - { - "name": "rationale", - "type": 10, - "typeName": "Vec", - "docs": [] - } - ], - "index": 17, - "docs": [] - }, - { - "name": "set_video_visibility_as_moderator", - "fields": [ - { - "name": "actor", - "type": 86, - "typeName": "ContentActor", - "docs": [] - }, - { - "name": "video_id", - "type": 8, - "typeName": "T::VideoId", - "docs": [] - }, - { - "name": "is_hidden", - "type": 34, - "typeName": "bool", - "docs": [] - }, - { - "name": "rationale", - "type": 10, - "typeName": "Vec", - "docs": [] - } - ], - "index": 18, - "docs": [] - }, - { - "name": "update_channel_payouts", - "fields": [ - { - "name": "params", - "type": 130, - "typeName": "UpdateChannelPayoutsParameters", - "docs": [] - } - ], - "index": 19, - "docs": [] - }, - { - "name": "claim_channel_reward", - "fields": [ - { - "name": "actor", - "type": 86, - "typeName": "ContentActor", - "docs": [] - }, - { - "name": "proof", - "type": 360, - "typeName": "Vec>", - "docs": [] - }, - { - "name": "item", - "type": 363, - "typeName": "PullPayment", - "docs": [] - } - ], - "index": 20, - "docs": [] - }, - { - "name": "withdraw_from_channel_balance", - "fields": [ - { - "name": "actor", - "type": 86, - "typeName": "ContentActor", - "docs": [] - }, - { - "name": "channel_id", - "type": 8, - "typeName": "T::ChannelId", - "docs": [] - }, - { - "name": "amount", - "type": 6, - "typeName": "BalanceOf", - "docs": [] - } - ], - "index": 21, - "docs": [] - }, - { - "name": "update_channel_state_bloat_bond", - "fields": [ - { - "name": "new_channel_state_bloat_bond", - "type": 6, - "typeName": "BalanceOf", - "docs": [] - } - ], - "index": 22, - "docs": [ - "Updates channel state bloat bond value.", - "Only lead can upload this value" - ] - }, - { - "name": "update_video_state_bloat_bond", - "fields": [ - { - "name": "new_video_state_bloat_bond", - "type": 6, - "typeName": "BalanceOf", - "docs": [] - } - ], - "index": 23, - "docs": [ - "Updates video state bloat bond value.", - "Only lead can upload this value" - ] - }, - { - "name": "claim_and_withdraw_channel_reward", - "fields": [ - { - "name": "actor", - "type": 86, - "typeName": "ContentActor", - "docs": [] - }, - { - "name": "proof", - "type": 360, - "typeName": "Vec>", - "docs": [] - }, - { - "name": "item", - "type": 363, - "typeName": "PullPayment", - "docs": [] - } - ], - "index": 24, - "docs": [] - }, - { - "name": "issue_nft", - "fields": [ - { - "name": "actor", - "type": 86, - "typeName": "ContentActor", - "docs": [] - }, - { - "name": "video_id", - "type": 8, - "typeName": "T::VideoId", - "docs": [] - }, - { - "name": "params", - "type": 108, - "typeName": "NftIssuanceParameters", - "docs": [] - } - ], - "index": 25, - "docs": [ - "Issue NFT" - ] - }, - { - "name": "destroy_nft", - "fields": [ - { - "name": "actor", - "type": 86, - "typeName": "ContentActor", - "docs": [] - }, - { - "name": "video_id", - "type": 8, - "typeName": "T::VideoId", - "docs": [] - } - ], - "index": 26, - "docs": [ - "Destroy NFT" - ] - }, - { - "name": "start_open_auction", - "fields": [ - { - "name": "owner_id", - "type": 86, - "typeName": "ContentActor", - "docs": [] - }, - { - "name": "video_id", - "type": 8, - "typeName": "T::VideoId", - "docs": [] - }, - { - "name": "auction_params", - "type": 107, - "typeName": "OpenAuctionParams", - "docs": [] - } - ], - "index": 27, - "docs": [ - "Start video nft open auction" - ] - }, - { - "name": "start_english_auction", - "fields": [ - { - "name": "owner_id", - "type": 86, - "typeName": "ContentActor", - "docs": [] - }, - { - "name": "video_id", - "type": 8, - "typeName": "T::VideoId", - "docs": [] - }, - { - "name": "auction_params", - "type": 104, - "typeName": "EnglishAuctionParams", - "docs": [] - } - ], - "index": 28, - "docs": [ - "Start video nft english auction" - ] - }, - { - "name": "cancel_english_auction", - "fields": [ - { - "name": "owner_id", - "type": 86, - "typeName": "ContentActor", - "docs": [] - }, - { - "name": "video_id", - "type": 8, - "typeName": "T::VideoId", - "docs": [] - } - ], - "index": 29, - "docs": [] - }, - { - "name": "cancel_open_auction", - "fields": [ - { - "name": "owner_id", - "type": 86, - "typeName": "ContentActor", - "docs": [] - }, - { - "name": "video_id", - "type": 8, - "typeName": "T::VideoId", - "docs": [] - } - ], - "index": 30, - "docs": [] - }, - { - "name": "cancel_offer", - "fields": [ - { - "name": "owner_id", - "type": 86, - "typeName": "ContentActor", - "docs": [] - }, - { - "name": "video_id", - "type": 8, - "typeName": "T::VideoId", - "docs": [] - } - ], - "index": 31, - "docs": [ - "Cancel Nft offer" - ] - }, - { - "name": "cancel_buy_now", - "fields": [ - { - "name": "owner_id", - "type": 86, - "typeName": "ContentActor", - "docs": [] - }, - { - "name": "video_id", - "type": 8, - "typeName": "T::VideoId", - "docs": [] - } - ], - "index": 32, - "docs": [ - "Cancel Nft sell order" - ] - }, - { - "name": "update_buy_now_price", - "fields": [ - { - "name": "owner_id", - "type": 86, - "typeName": "ContentActor", - "docs": [] - }, - { - "name": "video_id", - "type": 8, - "typeName": "T::VideoId", - "docs": [] - }, - { - "name": "new_price", - "type": 6, - "typeName": "BalanceOf", - "docs": [] - } - ], - "index": 33, - "docs": [ - "Update Buy now nft price" - ] - }, - { - "name": "make_open_auction_bid", - "fields": [ - { - "name": "participant_id", - "type": 8, - "typeName": "T::MemberId", - "docs": [] - }, - { - "name": "video_id", - "type": 8, - "typeName": "T::VideoId", - "docs": [] - }, - { - "name": "bid_amount", - "type": 6, - "typeName": "BalanceOf", - "docs": [] - } - ], - "index": 34, - "docs": [ - "Make auction bid" - ] - }, - { - "name": "make_english_auction_bid", - "fields": [ - { - "name": "participant_id", - "type": 8, - "typeName": "T::MemberId", - "docs": [] - }, - { - "name": "video_id", - "type": 8, - "typeName": "T::VideoId", - "docs": [] - }, - { - "name": "bid_amount", - "type": 6, - "typeName": "BalanceOf", - "docs": [] - } - ], - "index": 35, - "docs": [ - "Make auction bid" - ] - }, - { - "name": "cancel_open_auction_bid", - "fields": [ - { - "name": "participant_id", - "type": 8, - "typeName": "T::MemberId", - "docs": [] - }, - { - "name": "video_id", - "type": 8, - "typeName": "T::VideoId", - "docs": [] - } - ], - "index": 36, - "docs": [ - "Cancel open auction bid" - ] - }, - { - "name": "settle_english_auction", - "fields": [ - { - "name": "video_id", - "type": 8, - "typeName": "T::VideoId", - "docs": [] - } - ], - "index": 37, - "docs": [ - "Claim won english auction", - "Can be called by anyone" - ] - }, - { - "name": "pick_open_auction_winner", - "fields": [ - { - "name": "owner_id", - "type": 86, - "typeName": "ContentActor", - "docs": [] - }, - { - "name": "video_id", - "type": 8, - "typeName": "T::VideoId", - "docs": [] - }, - { - "name": "winner_id", - "type": 8, - "typeName": "T::MemberId", - "docs": [] - }, - { - "name": "commit", - "type": 6, - "typeName": "BalanceOf", - "docs": [] - } - ], - "index": 38, - "docs": [ - "Accept open auction bid", - "Should only be called by auctioneer" - ] - }, - { - "name": "offer_nft", - "fields": [ - { - "name": "video_id", - "type": 8, - "typeName": "T::VideoId", - "docs": [] - }, - { - "name": "owner_id", - "type": 86, - "typeName": "ContentActor", - "docs": [] - }, - { - "name": "to", - "type": 8, - "typeName": "T::MemberId", - "docs": [] - }, - { - "name": "price", - "type": 105, - "typeName": "Option>", - "docs": [] - } - ], - "index": 39, - "docs": [ - "Offer Nft" - ] - }, - { - "name": "sling_nft_back", - "fields": [ - { - "name": "video_id", - "type": 8, - "typeName": "T::VideoId", - "docs": [] - }, - { - "name": "owner_id", - "type": 86, - "typeName": "ContentActor", - "docs": [] - } - ], - "index": 40, - "docs": [ - "Return Nft back to the original artist at no cost" - ] - }, - { - "name": "accept_incoming_offer", - "fields": [ - { - "name": "video_id", - "type": 8, - "typeName": "T::VideoId", - "docs": [] - }, - { - "name": "witness_price", - "type": 105, - "typeName": "Option<::Balance>", - "docs": [] - } - ], - "index": 41, - "docs": [ - "Accept incoming Nft offer" - ] - }, - { - "name": "sell_nft", - "fields": [ - { - "name": "video_id", - "type": 8, - "typeName": "T::VideoId", - "docs": [] - }, - { - "name": "owner_id", - "type": 86, - "typeName": "ContentActor", - "docs": [] - }, - { - "name": "price", - "type": 6, - "typeName": "BalanceOf", - "docs": [] - } - ], - "index": 42, - "docs": [ - "Sell Nft" - ] - }, - { - "name": "buy_nft", - "fields": [ - { - "name": "video_id", - "type": 8, - "typeName": "T::VideoId", - "docs": [] - }, - { - "name": "participant_id", - "type": 8, - "typeName": "T::MemberId", - "docs": [] - }, - { - "name": "witness_price", - "type": 6, - "typeName": "BalanceOf", - "docs": [] - } - ], - "index": 43, - "docs": [ - "Buy Nft" - ] - }, - { - "name": "toggle_nft_limits", - "fields": [ - { - "name": "enabled", - "type": 34, - "typeName": "bool", - "docs": [] - } - ], - "index": 44, - "docs": [ - "Only Council can toggle nft issuance limits constraints" - ] - }, - { - "name": "channel_owner_remark", - "fields": [ - { - "name": "channel_id", - "type": 8, - "typeName": "T::ChannelId", - "docs": [] - }, - { - "name": "msg", - "type": 10, - "typeName": "Vec", - "docs": [] - } - ], - "index": 45, - "docs": [ - "Channel owner remark" - ] - }, - { - "name": "channel_agent_remark", - "fields": [ - { - "name": "actor", - "type": 86, - "typeName": "ContentActor", - "docs": [] - }, - { - "name": "channel_id", - "type": 8, - "typeName": "T::ChannelId", - "docs": [] - }, - { - "name": "msg", - "type": 10, - "typeName": "Vec", - "docs": [] - } - ], - "index": 46, - "docs": [ - "Channel collaborator remark" - ] - }, - { - "name": "nft_owner_remark", - "fields": [ - { - "name": "actor", - "type": 86, - "typeName": "ContentActor", - "docs": [] - }, - { - "name": "video_id", - "type": 8, - "typeName": "T::VideoId", - "docs": [] - }, - { - "name": "msg", - "type": 10, - "typeName": "Vec", - "docs": [] - } - ], - "index": 47, - "docs": [ - "NFT owner remark" - ] - }, - { - "name": "initialize_channel_transfer", - "fields": [ - { - "name": "channel_id", - "type": 8, - "typeName": "T::ChannelId", - "docs": [] - }, - { - "name": "actor", - "type": 86, - "typeName": "ContentActor", - "docs": [] - }, - { - "name": "transfer_params", - "type": 364, - "typeName": "InitTransferParametersOf", - "docs": [] - } - ], - "index": 48, - "docs": [ - "Start a channel transfer with specified characteristics" - ] - }, - { - "name": "cancel_channel_transfer", - "fields": [ - { - "name": "channel_id", - "type": 8, - "typeName": "T::ChannelId", - "docs": [] - }, - { - "name": "actor", - "type": 86, - "typeName": "ContentActor", - "docs": [] - } - ], - "index": 49, - "docs": [ - "cancel channel transfer" - ] - }, - { - "name": "accept_channel_transfer", - "fields": [ - { - "name": "channel_id", - "type": 8, - "typeName": "T::ChannelId", - "docs": [] - }, - { - "name": "commitment_params", - "type": 100, - "typeName": "TransferCommitmentParameters, T::TransferId\n>", - "docs": [] - } - ], - "index": 50, - "docs": [ - "Accepts channel transfer.", - "`commitment_params` is required to prevent changing the transfer conditions." - ] - }, - { - "name": "update_global_nft_limit", - "fields": [ - { - "name": "nft_limit_period", - "type": 136, - "typeName": "NftLimitPeriod", - "docs": [] - }, - { - "name": "limit", - "type": 8, - "typeName": "u64", - "docs": [] - } - ], - "index": 51, - "docs": [ - "Updates global NFT limit." - ] - }, - { - "name": "update_channel_nft_limit", - "fields": [ - { - "name": "actor", - "type": 86, - "typeName": "ContentActor", - "docs": [] - }, - { - "name": "nft_limit_period", - "type": 136, - "typeName": "NftLimitPeriod", - "docs": [] - }, - { - "name": "channel_id", - "type": 8, - "typeName": "T::ChannelId", - "docs": [] - }, - { - "name": "limit", - "type": 8, - "typeName": "u64", - "docs": [] - } - ], - "index": 52, - "docs": [ - "Updates channel's NFT limit." - ] - }, - { - "name": "issue_creator_token", - "fields": [ - { - "name": "actor", - "type": 86, - "typeName": "ContentActor", - "docs": [] - }, - { - "name": "channel_id", - "type": 8, - "typeName": "T::ChannelId", - "docs": [] - }, - { - "name": "params", - "type": 150, - "typeName": "TokenIssuanceParametersOf", - "docs": [] - } - ], - "index": 53, - "docs": [ - "Issue creator token" - ] - }, - { - "name": "init_creator_token_sale", - "fields": [ - { - "name": "actor", - "type": 86, - "typeName": "ContentActor", - "docs": [] - }, - { - "name": "channel_id", - "type": 8, - "typeName": "T::ChannelId", - "docs": [] - }, - { - "name": "params", - "type": 365, - "typeName": "TokenSaleParamsOf", - "docs": [] - } - ], - "index": 54, - "docs": [ - "Initialize creator token sale" - ] - }, - { - "name": "update_upcoming_creator_token_sale", - "fields": [ - { - "name": "actor", - "type": 86, - "typeName": "ContentActor", - "docs": [] - }, - { - "name": "channel_id", - "type": 8, - "typeName": "T::ChannelId", - "docs": [] - }, - { - "name": "new_start_block", - "type": 106, - "typeName": "Option", - "docs": [] - }, - { - "name": "new_duration", - "type": 106, - "typeName": "Option", - "docs": [] - } - ], - "index": 55, - "docs": [ - "Update upcoming creator token sale" - ] - }, - { - "name": "creator_token_issuer_transfer", - "fields": [ - { - "name": "actor", - "type": 86, - "typeName": "ContentActor", - "docs": [] - }, - { - "name": "channel_id", - "type": 8, - "typeName": "T::ChannelId", - "docs": [] - }, - { - "name": "outputs", - "type": 366, - "typeName": "TransfersWithVestingOf", - "docs": [] - } - ], - "index": 56, - "docs": [ - "Perform transfer of tokens as creator token issuer" - ] - }, - { - "name": "make_creator_token_permissionless", - "fields": [ - { - "name": "actor", - "type": 86, - "typeName": "ContentActor", - "docs": [] - }, - { - "name": "channel_id", - "type": 8, - "typeName": "T::ChannelId", - "docs": [] - } - ], - "index": 57, - "docs": [ - "Make channel's creator token permissionless" - ] - }, - { - "name": "reduce_creator_token_patronage_rate_to", - "fields": [ - { - "name": "actor", - "type": 86, - "typeName": "ContentActor", - "docs": [] - }, - { - "name": "channel_id", - "type": 8, - "typeName": "T::ChannelId", - "docs": [] - }, - { - "name": "target_rate", - "type": 162, - "typeName": "YearlyRate", - "docs": [] - } - ], - "index": 58, - "docs": [ - "Reduce channel's creator token patronage rate to given value" - ] - }, - { - "name": "claim_creator_token_patronage_credit", - "fields": [ - { - "name": "actor", - "type": 86, - "typeName": "ContentActor", - "docs": [] - }, - { - "name": "channel_id", - "type": 8, - "typeName": "T::ChannelId", - "docs": [] - } - ], - "index": 59, - "docs": [ - "Claim channel's creator token patronage credit" - ] - }, - { - "name": "issue_revenue_split", - "fields": [ - { - "name": "actor", - "type": 86, - "typeName": "ContentActor", - "docs": [] - }, - { - "name": "channel_id", - "type": 8, - "typeName": "T::ChannelId", - "docs": [] - }, - { - "name": "start", - "type": 106, - "typeName": "Option", - "docs": [] - }, - { - "name": "duration", - "type": 4, - "typeName": "T::BlockNumber", - "docs": [] - } - ], - "index": 60, - "docs": [ - "Issue revenue split for a channel" - ] - }, - { - "name": "finalize_revenue_split", - "fields": [ - { - "name": "actor", - "type": 86, - "typeName": "ContentActor", - "docs": [] - }, - { - "name": "channel_id", - "type": 8, - "typeName": "T::ChannelId", - "docs": [] - } - ], - "index": 61, - "docs": [ - "Finalize an ended revenue split" - ] - }, - { - "name": "finalize_creator_token_sale", - "fields": [ - { - "name": "actor", - "type": 86, - "typeName": "ContentActor", - "docs": [] - }, - { - "name": "channel_id", - "type": 8, - "typeName": "T::ChannelId", - "docs": [] - } - ], - "index": 62, - "docs": [ - "Finalize an ended creator token sale" - ] - }, - { - "name": "deissue_creator_token", - "fields": [ - { - "name": "actor", - "type": 86, - "typeName": "ContentActor", - "docs": [] - }, - { - "name": "channel_id", - "type": 8, - "typeName": "T::ChannelId", - "docs": [] - } - ], - "index": 63, - "docs": [ - "Deissue channel's creator token" - ] - } - ] - } - }, - "docs": [ - "Dispatchable calls.", - "", - "Each variant of this enum maps to a dispatchable function from the associated module." - ] - } - }, - { - "id": 360, - "type": { - "path": [], - "params": [], - "def": { - "sequence": { - "type": 361 - } - }, - "docs": [] - } - }, - { - "id": 361, - "type": { - "path": [ - "pallet_content", - "types", - "ProofElementRecord" - ], - "params": [ - { - "name": "Hash", - "type": 9 - }, - { - "name": "Side", - "type": 362 - } - ], - "def": { - "composite": { - "fields": [ - { - "name": "hash", - "type": 9, - "typeName": "Hash", - "docs": [] - }, - { - "name": "side", - "type": 362, - "typeName": "Side", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 362, - "type": { - "path": [ - "pallet_content", - "types", - "Side" - ], - "params": [], - "def": { - "variant": { - "variants": [ - { - "name": "Left", - "fields": [], - "index": 0, - "docs": [] - }, - { - "name": "Right", - "fields": [], - "index": 1, - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 363, - "type": { - "path": [ - "pallet_content", - "types", - "PullPaymentElement" - ], - "params": [ - { - "name": "ChannelId", - "type": 8 - }, - { - "name": "Balance", - "type": 6 - }, - { - "name": "Hash", - "type": 9 - } - ], - "def": { - "composite": { - "fields": [ - { - "name": "channel_id", - "type": 8, - "typeName": "ChannelId", - "docs": [] - }, - { - "name": "cumulative_reward_earned", - "type": 6, - "typeName": "Balance", - "docs": [] - }, - { - "name": "reason", - "type": 9, - "typeName": "Hash", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 364, - "type": { - "path": [ - "pallet_content", - "types", - "InitTransferParameters" - ], - "params": [ - { - "name": "MemberId", - "type": 8 - }, - { - "name": "CuratorGroupId", - "type": 8 - }, - { - "name": "Balance", - "type": 6 - } - ], - "def": { - "composite": { - "fields": [ - { - "name": "new_collaborators", - "type": 89, - "typeName": "BTreeMap", - "docs": [] - }, - { - "name": "price", - "type": 6, - "typeName": "Balance", - "docs": [] - }, - { - "name": "new_owner", - "type": 88, - "typeName": "ChannelOwner", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 365, - "type": { - "path": [ - "pallet_project_token", - "types", - "TokenSaleParams" - ], - "params": [ - { - "name": "JoyBalance", - "type": 6 - }, - { - "name": "Balance", - "type": 6 - }, - { - "name": "BlockNumber", - "type": 4 - }, - { - "name": "VestingScheduleParams", - "type": 152 - } - ], - "def": { - "composite": { - "fields": [ - { - "name": "unit_price", - "type": 6, - "typeName": "JoyBalance", - "docs": [] - }, - { - "name": "upper_bound_quantity", - "type": 6, - "typeName": "Balance", - "docs": [] - }, - { - "name": "starts_at", - "type": 106, - "typeName": "Option", - "docs": [] - }, - { - "name": "duration", - "type": 4, - "typeName": "BlockNumber", - "docs": [] - }, - { - "name": "vesting_schedule_params", - "type": 154, - "typeName": "Option", - "docs": [] - }, - { - "name": "cap_per_member", - "type": 105, - "typeName": "Option", - "docs": [] - }, - { - "name": "metadata", - "type": 69, - "typeName": "Option>", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 366, - "type": { - "path": [ - "pallet_project_token", - "types", - "Transfers" - ], - "params": [ - { - "name": "MemberId", - "type": 8 - }, - { - "name": "Payment", - "type": 166 - } - ], - "def": { - "composite": { - "fields": [ - { - "name": null, - "type": 367, - "typeName": "BTreeMap", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 367, - "type": { - "path": [ - "BTreeMap" - ], - "params": [ - { - "name": "K", - "type": 8 - }, - { - "name": "V", - "type": 166 - } - ], - "def": { - "composite": { - "fields": [ - { - "name": null, - "type": 368, - "typeName": null, - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 368, - "type": { - "path": [], - "params": [], - "def": { - "sequence": { - "type": 369 - } - }, - "docs": [] - } - }, - { - "id": 369, - "type": { - "path": [], - "params": [], - "def": { - "tuple": [ - 8, - 166 - ] - }, - "docs": [] - } - }, - { - "id": 370, - "type": { - "path": [ - "pallet_storage", - "Call" - ], - "params": [ - { - "name": "T", - "type": null - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "delete_storage_bucket", - "fields": [ - { - "name": "storage_bucket_id", - "type": 8, - "typeName": "T::StorageBucketId", - "docs": [] - } - ], - "index": 0, - "docs": [ - "Delete storage bucket. Must be empty. Storage operator must be missing.", - "", - "", - "## Weight", - "`O (1)`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "update_uploading_blocked_status", - "fields": [ - { - "name": "new_status", - "type": 34, - "typeName": "bool", - "docs": [] - } - ], - "index": 1, - "docs": [ - "Updates global uploading flag.", - "", - "", - "## Weight", - "`O (1)`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "update_data_size_fee", - "fields": [ - { - "name": "new_data_size_fee", - "type": 6, - "typeName": "BalanceOf", - "docs": [] - } - ], - "index": 2, - "docs": [ - "Updates size-based pricing of new objects uploaded.", - "", - "", - "## Weight", - "`O (1)`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "update_storage_buckets_per_bag_limit", - "fields": [ - { - "name": "new_limit", - "type": 8, - "typeName": "u64", - "docs": [] - } - ], - "index": 3, - "docs": [ - "Updates \"Storage buckets per bag\" number limit.", - "", - "", - "## Weight", - "`O (1)`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "update_storage_buckets_voucher_max_limits", - "fields": [ - { - "name": "new_objects_size", - "type": 8, - "typeName": "u64", - "docs": [] - }, - { - "name": "new_objects_number", - "type": 8, - "typeName": "u64", - "docs": [] - } - ], - "index": 4, - "docs": [ - "Updates \"Storage buckets voucher max limits\".", - "", - "", - "## Weight", - "`O (1)`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "update_data_object_state_bloat_bond", - "fields": [ - { - "name": "state_bloat_bond", - "type": 6, - "typeName": "BalanceOf", - "docs": [] - } - ], - "index": 5, - "docs": [ - "Updates data object state bloat bond value.", - "", - "", - "## Weight", - "`O (1)`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "update_number_of_storage_buckets_in_dynamic_bag_creation_policy", - "fields": [ - { - "name": "dynamic_bag_type", - "type": 144, - "typeName": "DynamicBagType", - "docs": [] - }, - { - "name": "number_of_storage_buckets", - "type": 8, - "typeName": "u64", - "docs": [] - } - ], - "index": 6, - "docs": [ - "Update number of storage buckets used in given dynamic bag creation policy.", - "", - "", - "## Weight", - "`O (1)`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "update_blacklist", - "fields": [ - { - "name": "remove_hashes", - "type": 142, - "typeName": "BTreeSet", - "docs": [] - }, - { - "name": "add_hashes", - "type": 142, - "typeName": "BTreeSet", - "docs": [] - } - ], - "index": 7, - "docs": [ - "Add and remove hashes to the current blacklist.", - "", - "", - "## Weight", - "`O (W + V)` where:", - "- `W` is the number of items in `remove_hashes`", - "- `V` is the number of items in `add_hashes`", - "- DB:", - " - `O(W)` - from the the generated weights", - "# " - ] - }, - { - "name": "create_storage_bucket", - "fields": [ - { - "name": "invite_worker", - "type": 70, - "typeName": "Option>", - "docs": [] - }, - { - "name": "accepting_new_bags", - "type": 34, - "typeName": "bool", - "docs": [] - }, - { - "name": "size_limit", - "type": 8, - "typeName": "u64", - "docs": [] - }, - { - "name": "objects_limit", - "type": 8, - "typeName": "u64", - "docs": [] - } - ], - "index": 8, - "docs": [ - "Create storage bucket.", - "", - "", - "## Weight", - "`O (1)`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "update_storage_buckets_for_bag", - "fields": [ - { - "name": "bag_id", - "type": 139, - "typeName": "BagId", - "docs": [] - }, - { - "name": "add_buckets", - "type": 101, - "typeName": "BTreeSet", - "docs": [] - }, - { - "name": "remove_buckets", - "type": 101, - "typeName": "BTreeSet", - "docs": [] - } - ], - "index": 9, - "docs": [ - "Updates storage buckets for a bag.", - "", - "", - "## Weight", - "`O (W + V)` where:", - "- `W` is the number of items in `add_buckets`", - "- `V` is the number of items in `remove_buckets`", - "- DB:", - " - `O(V + W)` - from the the generated weights", - "# " - ] - }, - { - "name": "cancel_storage_bucket_operator_invite", - "fields": [ - { - "name": "storage_bucket_id", - "type": 8, - "typeName": "T::StorageBucketId", - "docs": [] - } - ], - "index": 10, - "docs": [ - "Cancel pending storage bucket invite. An invitation must be pending.", - "", - "", - "## Weight", - "`O (1)`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "invite_storage_bucket_operator", - "fields": [ - { - "name": "storage_bucket_id", - "type": 8, - "typeName": "T::StorageBucketId", - "docs": [] - }, - { - "name": "operator_id", - "type": 8, - "typeName": "WorkerId", - "docs": [] - } - ], - "index": 11, - "docs": [ - "Invite storage bucket operator. Must be missing.", - "", - "", - "## Weight", - "`O (1)`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "remove_storage_bucket_operator", - "fields": [ - { - "name": "storage_bucket_id", - "type": 8, - "typeName": "T::StorageBucketId", - "docs": [] - } - ], - "index": 12, - "docs": [ - "Removes storage bucket operator.", - "", - "", - "## Weight", - "`O (1)`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "update_storage_bucket_status", - "fields": [ - { - "name": "storage_bucket_id", - "type": 8, - "typeName": "T::StorageBucketId", - "docs": [] - }, - { - "name": "accepting_new_bags", - "type": 34, - "typeName": "bool", - "docs": [] - } - ], - "index": 13, - "docs": [ - "Update whether new bags are being accepted for storage.", - "", - "", - "## Weight", - "`O (1)`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "set_storage_bucket_voucher_limits", - "fields": [ - { - "name": "storage_bucket_id", - "type": 8, - "typeName": "T::StorageBucketId", - "docs": [] - }, - { - "name": "new_objects_size_limit", - "type": 8, - "typeName": "u64", - "docs": [] - }, - { - "name": "new_objects_number_limit", - "type": 8, - "typeName": "u64", - "docs": [] - } - ], - "index": 14, - "docs": [ - "Sets storage bucket voucher limits.", - "", - "", - "## Weight", - "`O (1)`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "accept_storage_bucket_invitation", - "fields": [ - { - "name": "worker_id", - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": "storage_bucket_id", - "type": 8, - "typeName": "T::StorageBucketId", - "docs": [] - }, - { - "name": "transactor_account_id", - "type": 0, - "typeName": "T::AccountId", - "docs": [] - } - ], - "index": 15, - "docs": [ - "Accept the storage bucket invitation. An invitation must match the worker_id parameter.", - "It accepts an additional account ID (transactor) for accepting data objects to prevent", - "transaction nonce collisions.", - "", - "", - "## Weight", - "`O (1)`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "set_storage_operator_metadata", - "fields": [ - { - "name": "worker_id", - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": "storage_bucket_id", - "type": 8, - "typeName": "T::StorageBucketId", - "docs": [] - }, - { - "name": "metadata", - "type": 10, - "typeName": "Vec", - "docs": [] - } - ], - "index": 16, - "docs": [ - "Sets storage operator metadata (eg.: storage node URL).", - "", - "", - "## Weight", - "`O (W)` where:", - "- `W` is length of the `metadata`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "accept_pending_data_objects", - "fields": [ - { - "name": "worker_id", - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": "storage_bucket_id", - "type": 8, - "typeName": "T::StorageBucketId", - "docs": [] - }, - { - "name": "bag_id", - "type": 139, - "typeName": "BagId", - "docs": [] - }, - { - "name": "data_objects", - "type": 101, - "typeName": "BTreeSet", - "docs": [] - } - ], - "index": 17, - "docs": [ - "A storage provider signals that the data object was successfully uploaded to its storage.", - "", - "", - "## Weight", - "`O (W )` where:", - "- `W` is the number of items in `data_objects`", - "- DB:", - " - `O(W)` - from the the generated weights", - "# " - ] - }, - { - "name": "create_distribution_bucket_family", - "fields": [], - "index": 18, - "docs": [ - "Create a distribution bucket family.", - "", - "", - "## Weight", - "`O (1)`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "delete_distribution_bucket_family", - "fields": [ - { - "name": "family_id", - "type": 8, - "typeName": "T::DistributionBucketFamilyId", - "docs": [] - } - ], - "index": 19, - "docs": [ - "Deletes a distribution bucket family.", - "", - "", - "## Weight", - "`O (1)`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "create_distribution_bucket", - "fields": [ - { - "name": "family_id", - "type": 8, - "typeName": "T::DistributionBucketFamilyId", - "docs": [] - }, - { - "name": "accepting_new_bags", - "type": 34, - "typeName": "bool", - "docs": [] - } - ], - "index": 20, - "docs": [ - "Create a distribution bucket.", - "", - "", - "## Weight", - "`O (1)`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "update_distribution_bucket_status", - "fields": [ - { - "name": "bucket_id", - "type": 115, - "typeName": "DistributionBucketId", - "docs": [] - }, - { - "name": "accepting_new_bags", - "type": 34, - "typeName": "bool", - "docs": [] - } - ], - "index": 21, - "docs": [ - "Updates a distribution bucket 'accepts new bags' flag.", - "", - "", - "## Weight", - "`O (1)`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "delete_distribution_bucket", - "fields": [ - { - "name": "bucket_id", - "type": 115, - "typeName": "DistributionBucketId", - "docs": [] - } - ], - "index": 22, - "docs": [ - "Delete distribution bucket. Must be empty.", - "", - "", - "## Weight", - "`O (1)`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "update_distribution_buckets_for_bag", - "fields": [ - { - "name": "bag_id", - "type": 139, - "typeName": "BagId", - "docs": [] - }, - { - "name": "family_id", - "type": 8, - "typeName": "T::DistributionBucketFamilyId", - "docs": [] - }, - { - "name": "add_buckets_indices", - "type": 101, - "typeName": "BTreeSet", - "docs": [] - }, - { - "name": "remove_buckets_indices", - "type": 101, - "typeName": "BTreeSet", - "docs": [] - } - ], - "index": 23, - "docs": [ - "Updates distribution buckets for a bag.", - "", - "", - "## Weight", - "`O (W + V)` where:", - "- `W` is the number of items in `add_buckets_indices`", - "- `V` is the number of items in `remove_buckets_indices`", - "- DB:", - " - `O(V + W)` - from the the generated weights", - "# " - ] - }, - { - "name": "update_distribution_buckets_per_bag_limit", - "fields": [ - { - "name": "new_limit", - "type": 8, - "typeName": "u64", - "docs": [] - } - ], - "index": 24, - "docs": [ - "Updates \"Distribution buckets per bag\" number limit.", - "", - "", - "## Weight", - "`O (1)`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "update_distribution_bucket_mode", - "fields": [ - { - "name": "bucket_id", - "type": 115, - "typeName": "DistributionBucketId", - "docs": [] - }, - { - "name": "distributing", - "type": 34, - "typeName": "bool", - "docs": [] - } - ], - "index": 25, - "docs": [ - "Updates 'distributing' flag for the distributing flag.", - "", - "", - "## Weight", - "`O (1)`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "update_families_in_dynamic_bag_creation_policy", - "fields": [ - { - "name": "dynamic_bag_type", - "type": 144, - "typeName": "DynamicBagType", - "docs": [] - }, - { - "name": "families", - "type": 145, - "typeName": "BTreeMap", - "docs": [] - } - ], - "index": 26, - "docs": [ - "Update number of distributed buckets used in given dynamic bag creation policy.", - "Updates distribution buckets for a bag.", - "", - "", - "## Weight", - "`O (W)` where:", - "- `W` is the number of items in `families`", - "- DB:", - " - `O(W)` - from the the generated weights", - "# " - ] - }, - { - "name": "invite_distribution_bucket_operator", - "fields": [ - { - "name": "bucket_id", - "type": 115, - "typeName": "DistributionBucketId", - "docs": [] - }, - { - "name": "operator_worker_id", - "type": 8, - "typeName": "WorkerId", - "docs": [] - } - ], - "index": 27, - "docs": [ - "Invite an operator. Must be missing.", - "", - "", - "## Weight", - "`O (1)`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "cancel_distribution_bucket_operator_invite", - "fields": [ - { - "name": "bucket_id", - "type": 115, - "typeName": "DistributionBucketId", - "docs": [] - }, - { - "name": "operator_worker_id", - "type": 8, - "typeName": "WorkerId", - "docs": [] - } - ], - "index": 28, - "docs": [ - "Cancel pending invite. Must be pending.", - "", - "", - "## Weight", - "`O (1)`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "remove_distribution_bucket_operator", - "fields": [ - { - "name": "bucket_id", - "type": 115, - "typeName": "DistributionBucketId", - "docs": [] - }, - { - "name": "operator_worker_id", - "type": 8, - "typeName": "WorkerId", - "docs": [] - } - ], - "index": 29, - "docs": [ - "Removes distribution bucket operator.", - "", - "", - "## Weight", - "`O (1)`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "set_distribution_bucket_family_metadata", - "fields": [ - { - "name": "family_id", - "type": 8, - "typeName": "T::DistributionBucketFamilyId", - "docs": [] - }, - { - "name": "metadata", - "type": 10, - "typeName": "Vec", - "docs": [] - } - ], - "index": 30, - "docs": [ - "Set distribution bucket family metadata.", - "", - "", - "## Weight", - "`O (W)` where:", - "- `W` is length of the `metadata`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "accept_distribution_bucket_invitation", - "fields": [ - { - "name": "worker_id", - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": "bucket_id", - "type": 115, - "typeName": "DistributionBucketId", - "docs": [] - } - ], - "index": 31, - "docs": [ - "Accept pending invite.", - "", - "", - "## Weight", - "`O (1)`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "set_distribution_operator_metadata", - "fields": [ - { - "name": "worker_id", - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": "bucket_id", - "type": 115, - "typeName": "DistributionBucketId", - "docs": [] - }, - { - "name": "metadata", - "type": 10, - "typeName": "Vec", - "docs": [] - } - ], - "index": 32, - "docs": [ - "Set distribution operator metadata for the distribution bucket.", - "", - "", - "## Weight", - "`O (W)` where:", - "- `W` is length of the `metadata`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "sudo_upload_data_objects", - "fields": [ - { - "name": "params", - "type": 138, - "typeName": "UploadParameters", - "docs": [] - } - ], - "index": 33, - "docs": [ - "Upload new data objects. Development mode." - ] - }, - { - "name": "sudo_create_dynamic_bag", - "fields": [ - { - "name": "params", - "type": 371, - "typeName": "DynBagCreationParameters", - "docs": [] - } - ], - "index": 34, - "docs": [ - "Create a dynamic bag. Development mode." - ] - }, - { - "name": "storage_operator_remark", - "fields": [ - { - "name": "worker_id", - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": "storage_bucket_id", - "type": 8, - "typeName": "T::StorageBucketId", - "docs": [] - }, - { - "name": "msg", - "type": 10, - "typeName": "Vec", - "docs": [] - } - ], - "index": 35, - "docs": [ - "Create a dynamic bag. Development mode.", - "", - "", - "## Weight", - "`O (W)` where:", - "- `W` is length of the `message`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "distribution_operator_remark", - "fields": [ - { - "name": "worker_id", - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": "distribution_bucket_id", - "type": 115, - "typeName": "DistributionBucketId", - "docs": [] - }, - { - "name": "msg", - "type": 10, - "typeName": "Vec", - "docs": [] - } - ], - "index": 36, - "docs": [ - "Create a dynamic bag. Development mode.", - "", - "", - "## Weight", - "`O (W)` where:", - "- `W` is length of the `message`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - } - ] - } - }, - "docs": [ - "Dispatchable calls.", - "", - "Each variant of this enum maps to a dispatchable function from the associated module." - ] - } - }, - { - "id": 371, - "type": { - "path": [ - "pallet_storage", - "DynBagCreationParametersRecord" - ], - "params": [ - { - "name": "BagId", - "type": 141 - }, - { - "name": "AccountId", - "type": 0 - }, - { - "name": "Balance", - "type": 6 - }, - { - "name": "StorageBucketId", - "type": 8 - }, - { - "name": "DistributionBucketId", - "type": 115 - } - ], - "def": { - "composite": { - "fields": [ - { - "name": "bag_id", - "type": 141, - "typeName": "BagId", - "docs": [] - }, - { - "name": "object_creation_list", - "type": 113, - "typeName": "Vec", - "docs": [] - }, - { - "name": "state_bloat_bond_source_account_id", - "type": 0, - "typeName": "AccountId", - "docs": [] - }, - { - "name": "expected_data_size_fee", - "type": 6, - "typeName": "Balance", - "docs": [] - }, - { - "name": "expected_data_object_state_bloat_bond", - "type": 6, - "typeName": "Balance", - "docs": [] - }, - { - "name": "storage_buckets", - "type": 101, - "typeName": "BTreeSet", - "docs": [] - }, - { - "name": "distribution_buckets", - "type": 117, - "typeName": "BTreeSet", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 372, - "type": { - "path": [ - "pallet_project_token", - "Call" - ], - "params": [ - { - "name": "T", - "type": null - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "transfer", - "fields": [ - { - "name": "src_member_id", - "type": 8, - "typeName": "T::MemberId", - "docs": [] - }, - { - "name": "token_id", - "type": 8, - "typeName": "T::TokenId", - "docs": [] - }, - { - "name": "outputs", - "type": 373, - "typeName": "TransfersOf", - "docs": [] - } - ], - "index": 0, - "docs": [ - "Allow to transfer from `src_member_id` account to the various `outputs` beneficiaries", - "in the specified amounts.", - "", - "Preconditions:", - "- origin signer must be `src_member_id` controller account", - "- token by `token_id` must exists", - "- account of `src_member_id` must exist for `token_id`", - "- sender must have enough JOYs to cover the total bloat bond required in case of", - " destination(s) not existing.", - "- source account must have enough token funds to cover all the transfer(s)", - "- `outputs` must designate existing destination(s) for \"Permissioned\" transfers.", - "Postconditions:", - "- source account's tokens amount is decreased by `amount`.", - "- total bloat bond transferred from sender's JOY balance into the treasury account", - " in case destination(s) have been added to storage", - "- `outputs.beneficiary` tokens amount increased by `amount`" - ] - }, - { - "name": "burn", - "fields": [ - { - "name": "token_id", - "type": 8, - "typeName": "T::TokenId", - "docs": [] - }, - { - "name": "member_id", - "type": 8, - "typeName": "T::MemberId", - "docs": [] - }, - { - "name": "amount", - "type": 6, - "typeName": "TokenBalanceOf", - "docs": [] - } - ], - "index": 1, - "docs": [ - "Burn tokens from specified account", - "", - "Preconditions:", - "- `amount` is > 0", - "- origin signer is a controller account of `member_id` member", - "- token by `token_id` exists", - "- an account exists for `token_id` x `member_id`", - "- account's tokens amount is >= `amount`", - "- token supply can be modified (there is no active revenue split)", - "", - "Postconditions:", - "- starting with `unprocessed` beeing equal to `amount`, account's vesting schedules", - " are iterated over and:", - " - updated with `burned_amount += uprocessed` if vesting schedule's unvested amount is", - " greater than `uprocessed`", - " - removed otherwise", - " (after each iteration `unprocessed` is reduced by the amount of unvested tokens", - " burned during that iteration)", - "- if the account has any `split_staking_status`, the `split_staking_status.amount`", - " is reduced by `min(amount, split_staking_status.amount)`", - "- `account.amount` is reduced by `amount`", - "- token supply is reduced by `amount`" - ] - }, - { - "name": "dust_account", - "fields": [ - { - "name": "token_id", - "type": 8, - "typeName": "T::TokenId", - "docs": [] - }, - { - "name": "member_id", - "type": 8, - "typeName": "T::MemberId", - "docs": [] - } - ], - "index": 2, - "docs": [ - "Allow any user to remove an account", - "", - "Preconditions:", - "- token by `token_id` must exist", - "- an account must exist for `token_id` x `member_id`", - "- if Permissioned token: `origin` signer must be `member_id` member's", - " controller account", - "- `token_id` x `member_id` account must be an empty account", - " (`account_data.amount` == 0)", - "Postconditions:", - "- Account information for `token_id` x `member_id` removed from storage", - "- bloat bond refunded to `member_id` controller account" - ] - }, - { - "name": "join_whitelist", - "fields": [ - { - "name": "member_id", - "type": 8, - "typeName": "T::MemberId", - "docs": [] - }, - { - "name": "token_id", - "type": 8, - "typeName": "T::TokenId", - "docs": [] - }, - { - "name": "proof", - "type": 378, - "typeName": "MerkleProofOf", - "docs": [] - } - ], - "index": 3, - "docs": [ - "Join whitelist for permissioned case: used to add accounts for token", - "Preconditions:", - "- 'token_id' must be valid", - "- `origin` signer must be a controller account of `member_id`", - "- account for `member_id` must not already exist", - "- transfer policy is `Permissioned` and merkle proof must be valid", - "", - "Postconditions:", - "- account for `member_id` created and added to pallet storage", - "- `bloat_bond` transferred from sender to treasury account" - ] - }, - { - "name": "purchase_tokens_on_sale", - "fields": [ - { - "name": "token_id", - "type": 8, - "typeName": "T::TokenId", - "docs": [] - }, - { - "name": "member_id", - "type": 8, - "typeName": "T::MemberId", - "docs": [] - }, - { - "name": "amount", - "type": 6, - "typeName": "TokenBalanceOf", - "docs": [] - } - ], - "index": 4, - "docs": [ - "Purchase tokens on active token sale.", - "", - "Preconditions:", - "- token by `token_id` must exist", - "- token by `token_id` must be in OfferingState::Sale", - "- `amount` cannot exceed number of tokens remaining on sale", - "- `origin` signer must be controller account of `member_id` member", - "- sender's available JOY balance must be:", - " - >= `joy_existential_deposit + amount * sale.unit_price`", - " if AccountData already exist", - " - >= `joy_existential_deposit + amount * sale.unit_price + bloat_bond`", - " if AccountData does not exist", - "- let `fee_amount` be `sale_platform_fee.mul_floor(amount * sale.unit_price)`", - "- if `sale.earnings_destination.is_some()` and `sale.earnings_destination` account has", - " zero balance:", - " - the amount to be transferred from `sender` to `sale.earnings_destination`,", - " which is equal to `amount * sale.unit_price - fee_amount`, must be greater than", - " `joy_existential_deposit`", - "- total number of tokens already purchased by the member on the current sale", - " PLUS `amount` must not exceed sale's purchase cap per member", - "- if Permissioned token:", - " - AccountInfoByTokenAndMember(token_id, &member_id) must exist", - "- if `sale.vesting_schedule.is_some()`:", - " - number of sender account's ongoing vesting schedules", - " must be < MaxVestingSchedulesPerAccountPerToken", - "", - "Postconditions:", - "- if `sale.earnings_destination.is_some()`:", - " - `amount * sale.unit_price - fee_amount` JOY tokens are transfered from `sender`", - " to `sale.earnings_destination`", - " - `fee_amount` JOY is slashed from `sender` balance", - "- if `sale.earnings_destination.is_none()`:", - " - `amount * sale.unit_price` JOY is slashed from `sender` balance", - "- if new token account created: `bloat_bond` transferred from `sender` to treasury", - "- if `sale.vesting_schedule.is_some()`:", - " - if buyer has no `vesting_schedule` related to the current sale:", - " - a new vesting schedule (`sale.get_vesting_schedule(purchase_amount)`) is added to", - " buyer's `vesing_schedules`", - " - some finished vesting schedule is removed from buyer's account_data in case the", - " number of buyer's vesting_schedules was == MaxVestingSchedulesPerAccountPerToken", - " - if buyer already has a `vesting_schedule` related to the current sale:", - " - current vesting schedule's `cliff_amount` is increased by", - " `sale.get_vesting_schedule(purchase_amount).cliff_amount`", - " - current vesting schedule's `post_cliff_total_amount` is increased by", - " `sale.get_vesting_schedule(purchase_amount).post_cliff_total_amount`", - "- if `sale.vesting_schedule.is_none()`:", - " - buyer's account token amount increased by `amount`", - "- if `token_data.sale.quantity_left - amount == 0` and `sale.auto_finalize` is `true`", - " `token_data.sale` is set to None, otherwise `token_data.sale.quantity_left` is", - " decreased by `amount` and `token_data.sale.funds_collected` in increased by", - " `amount * sale.unit_price`" - ] - }, - { - "name": "participate_in_split", - "fields": [ - { - "name": "token_id", - "type": 8, - "typeName": "T::TokenId", - "docs": [] - }, - { - "name": "member_id", - "type": 8, - "typeName": "T::MemberId", - "docs": [] - }, - { - "name": "amount", - "type": 6, - "typeName": "TokenBalanceOf", - "docs": [] - } - ], - "index": 5, - "docs": [ - "Participate in the *latest* token revenue split (if ongoing)", - "Preconditions:", - "- `token` must exist for `token_id`", - "- `origin` signer must be `member_id` member controller account", - "- `amount` must be > 0", - "- `account` must exist for `(token_id, member_id)`", - "- `token.split_status` must be active AND THEN current_block in", - " [split.start, split.start + split_duration)", - "- `account.staking_status.is_none()` OR `account.staking_status.split_id` refers to a past split", - "- `account.amount` >= `amount`", - "- let `dividend = split_allocation * account.staked_amount / token.supply``", - " then `treasury` must be able to transfer `dividend` amount of JOY.", - " (This condition technically, should always be satisfied)", - "", - "Postconditions", - "- `dividend` amount of JOYs transferred from `treasury_account` to `sender`", - "- `token` revenue split dividends payed tracking variable increased by `dividend`", - "- `account.staking_status` set to Some(..) with `amount` and `token.latest_split`" - ] - }, - { - "name": "exit_revenue_split", - "fields": [ - { - "name": "token_id", - "type": 8, - "typeName": "T::TokenId", - "docs": [] - }, - { - "name": "member_id", - "type": 8, - "typeName": "T::MemberId", - "docs": [] - } - ], - "index": 6, - "docs": [ - "Split-participating user leaves revenue split", - "Preconditions", - "- `token` must exist for `token_id`", - "- `origin` signer must be `member_id` member controller account", - "- `account` must exist for `(token_id, member_id)`", - "- `account.staking status.is_some()'", - "- if `(account.staking_status.split_id == token.next_revenue_split_id - 1`", - " AND `token.revenue_split` is active) THEN split staking period must be ended", - "", - "Postconditions", - "- `account.staking_status` set to None" - ] - } - ] - } - }, - "docs": [ - "Dispatchable calls.", - "", - "Each variant of this enum maps to a dispatchable function from the associated module." - ] - } - }, - { - "id": 373, - "type": { - "path": [ - "pallet_project_token", - "types", - "Transfers" - ], - "params": [ - { - "name": "MemberId", - "type": 8 - }, - { - "name": "Payment", - "type": 374 - } - ], - "def": { - "composite": { - "fields": [ - { - "name": null, - "type": 375, - "typeName": "BTreeMap", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 374, - "type": { - "path": [ - "pallet_project_token", - "types", - "Payment" - ], - "params": [ - { - "name": "Balance", - "type": 6 - } - ], - "def": { - "composite": { - "fields": [ - { - "name": "remark", - "type": 10, - "typeName": "Vec", - "docs": [] - }, - { - "name": "amount", - "type": 6, - "typeName": "Balance", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 375, - "type": { - "path": [ - "BTreeMap" - ], - "params": [ - { - "name": "K", - "type": 8 - }, - { - "name": "V", - "type": 374 - } - ], - "def": { - "composite": { - "fields": [ - { - "name": null, - "type": 376, - "typeName": null, - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 376, - "type": { - "path": [], - "params": [], - "def": { - "sequence": { - "type": 377 - } - }, - "docs": [] - } - }, - { - "id": 377, - "type": { - "path": [], - "params": [], - "def": { - "tuple": [ - 8, - 374 - ] - }, - "docs": [] - } - }, - { - "id": 378, - "type": { - "path": [ - "pallet_project_token", - "types", - "MerkleProof" - ], - "params": [ - { - "name": "Hasher", - "type": 245 - } - ], - "def": { - "composite": { - "fields": [ - { - "name": null, - "type": 379, - "typeName": "Vec<(Hasher::Output, MerkleSide)>", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 379, - "type": { - "path": [], - "params": [], - "def": { - "sequence": { - "type": 380 - } - }, - "docs": [] - } - }, - { - "id": 380, - "type": { - "path": [], - "params": [], - "def": { - "tuple": [ - 9, - 381 - ] - }, - "docs": [] - } - }, - { - "id": 381, - "type": { - "path": [ - "pallet_project_token", - "types", - "MerkleSide" - ], - "params": [], - "def": { - "variant": { - "variants": [ - { - "name": "Right", - "fields": [], - "index": 0, - "docs": [] - }, - { - "name": "Left", - "fields": [], - "index": 1, - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 382, - "type": { - "path": [ - "pallet_proposals_engine", - "Call" - ], - "params": [ - { - "name": "T", - "type": null - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "vote", - "fields": [ - { - "name": "voter_id", - "type": 8, - "typeName": "MemberId", - "docs": [] - }, - { - "name": "proposal_id", - "type": 4, - "typeName": "T::ProposalId", - "docs": [] - }, - { - "name": "vote", - "type": 179, - "typeName": "VoteKind", - "docs": [] - }, - { - "name": "rationale", - "type": 10, - "typeName": "Vec", - "docs": [] - } - ], - "index": 0, - "docs": [ - "Vote extrinsic. Conditions: origin must allow votes.", - "", - "", - "", - "## Weight", - "`O (R)` where:", - "- `R` is the length of `rationale`", - "- DB:", - " - O(1) doesn't depend on the state or paraemters", - "# " - ] - }, - { - "name": "cancel_proposal", - "fields": [ - { - "name": "proposer_id", - "type": 8, - "typeName": "MemberId", - "docs": [] - }, - { - "name": "proposal_id", - "type": 4, - "typeName": "T::ProposalId", - "docs": [] - } - ], - "index": 1, - "docs": [ - "Cancel a proposal by its original proposer.", - "", - "", - "", - "## Weight", - "`O (L)` where:", - "- `L` is the total number of locks in `Balances`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "veto_proposal", - "fields": [ - { - "name": "proposal_id", - "type": 4, - "typeName": "T::ProposalId", - "docs": [] - } - ], - "index": 2, - "docs": [ - "Veto a proposal. Must be root.", - "", - "", - "", - "## Weight", - "`O (1)` doesn't depend on the state or parameters", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "proposer_remark", - "fields": [ - { - "name": "proposal_id", - "type": 4, - "typeName": "T::ProposalId", - "docs": [] - }, - { - "name": "proposer_id", - "type": 8, - "typeName": "MemberId", - "docs": [] - }, - { - "name": "msg", - "type": 10, - "typeName": "Vec", - "docs": [] - } - ], - "index": 3, - "docs": [ - "Proposer Remark", - "", - "", - "", - "## Weight", - "`O (1)` doesn't depend on the state or parameters", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - } - ] - } - }, - "docs": [ - "Dispatchable calls.", - "", - "Each variant of this enum maps to a dispatchable function from the associated module." - ] - } - }, - { - "id": 383, - "type": { - "path": [ - "pallet_proposals_discussion", - "Call" - ], - "params": [ - { - "name": "T", - "type": null - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "add_post", - "fields": [ - { - "name": "post_author_id", - "type": 8, - "typeName": "MemberId", - "docs": [] - }, - { - "name": "thread_id", - "type": 8, - "typeName": "T::ThreadId", - "docs": [] - }, - { - "name": "text", - "type": 10, - "typeName": "Vec", - "docs": [] - }, - { - "name": "editable", - "type": 34, - "typeName": "bool", - "docs": [] - } - ], - "index": 0, - "docs": [ - "Adds a post with author origin check.", - "", - "", - "", - "## Weight", - "`O (L)` where:", - "- `L` is the length of `text`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "delete_post", - "fields": [ - { - "name": "deleter_id", - "type": 8, - "typeName": "MemberId", - "docs": [] - }, - { - "name": "post_id", - "type": 8, - "typeName": "T::PostId", - "docs": [] - }, - { - "name": "thread_id", - "type": 8, - "typeName": "T::ThreadId", - "docs": [] - }, - { - "name": "hide", - "type": 34, - "typeName": "bool", - "docs": [] - } - ], - "index": 1, - "docs": [ - "Remove post from storage, with the last parameter indicating whether to also hide it", - "in the UI.", - "", - "", - "", - "## Weight", - "`O (1)`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "update_post", - "fields": [ - { - "name": "thread_id", - "type": 8, - "typeName": "T::ThreadId", - "docs": [] - }, - { - "name": "post_id", - "type": 8, - "typeName": "T::PostId", - "docs": [] - }, - { - "name": "text", - "type": 10, - "typeName": "Vec", - "docs": [] - } - ], - "index": 2, - "docs": [ - "Updates a post with author origin check. Update attempts number is limited.", - "", - "", - "", - "## Weight", - "`O (L)` where:", - "- `L` is the length of `text`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "change_thread_mode", - "fields": [ - { - "name": "member_id", - "type": 8, - "typeName": "MemberId", - "docs": [] - }, - { - "name": "thread_id", - "type": 8, - "typeName": "T::ThreadId", - "docs": [] - }, - { - "name": "mode", - "type": 181, - "typeName": "ThreadMode>", - "docs": [] - } - ], - "index": 3, - "docs": [ - "Changes thread permission mode.", - "", - "", - "", - "## Weight", - "`O (W)` if ThreadMode is close or O(1) otherwise where:", - "- `W` is the number of whitelisted members in `mode`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - } - ] - } - }, - "docs": [ - "Dispatchable calls.", - "", - "Each variant of this enum maps to a dispatchable function from the associated module." - ] - } - }, - { - "id": 384, - "type": { - "path": [ - "pallet_proposals_codex", - "Call" - ], - "params": [ - { - "name": "T", - "type": null - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "create_proposal", - "fields": [ - { - "name": "general_proposal_parameters", - "type": 183, - "typeName": "GeneralProposalParameters", - "docs": [] - }, - { - "name": "proposal_details", - "type": 184, - "typeName": "ProposalDetailsOf", - "docs": [] - } - ], - "index": 0, - "docs": [ - "Create a proposal, the type of proposal depends on the `proposal_details` variant", - "", - "", - "", - "## Weight", - "`O (T + D + I)` where:", - "- `T` is the length of the title", - "- `D` is the length of the description", - "- `I` is the length of any parameter in `proposal_details`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - } - ] - } - }, - "docs": [ - "Dispatchable calls.", - "", - "Each variant of this enum maps to a dispatchable function from the associated module." - ] - } - }, - { - "id": 385, - "type": { - "path": [ - "pallet_working_group", - "Call" - ], - "params": [ - { - "name": "T", - "type": null - }, - { - "name": "I", - "type": null - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "add_opening", - "fields": [ - { - "name": "description", - "type": 10, - "typeName": "Vec", - "docs": [] - }, - { - "name": "opening_type", - "type": 195, - "typeName": "OpeningType", - "docs": [] - }, - { - "name": "stake_policy", - "type": 188, - "typeName": "StakePolicy>", - "docs": [] - }, - { - "name": "reward_per_block", - "type": 105, - "typeName": "Option>", - "docs": [] - } - ], - "index": 0, - "docs": [ - "Add a job opening for a regular worker/lead role.", - "Require signed leader origin or the root (to add opening for the leader position).", - "", - "# ", - "", - "## Weight", - "`O (D)` where:", - "- `D` is the length of `description`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "apply_on_opening", - "fields": [ - { - "name": "p", - "type": 196, - "typeName": "ApplyOnOpeningParameters", - "docs": [] - } - ], - "index": 1, - "docs": [ - "Apply on a worker opening.", - "", - "# ", - "", - "## Weight", - "`O (D)` where:", - "- `D` is the length of `p.description`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "fill_opening", - "fields": [ - { - "name": "opening_id", - "type": 8, - "typeName": "OpeningId", - "docs": [] - }, - { - "name": "successful_application_ids", - "type": 101, - "typeName": "BTreeSet", - "docs": [] - } - ], - "index": 2, - "docs": [ - "Fill opening for the regular/lead position.", - "Require signed leader origin or the root (to fill opening for the leader position).", - "# ", - "", - "## Weight", - "`O (A)` where:", - "- `A` is the length of `successful_application_ids`", - "- DB:", - " - O(A)", - "# " - ] - }, - { - "name": "update_role_account", - "fields": [ - { - "name": "worker_id", - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": "new_role_account_id", - "type": 0, - "typeName": "T::AccountId", - "docs": [] - } - ], - "index": 3, - "docs": [ - "Update the associated role account of the active regular worker/lead.", - "", - "# ", - "", - "## Weight", - "`O (1)`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "leave_role", - "fields": [ - { - "name": "worker_id", - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": "rationale", - "type": 69, - "typeName": "Option>", - "docs": [] - } - ], - "index": 4, - "docs": [ - "Leave the role by the active worker.", - "# ", - "", - "## Weight", - "`O (1)`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "terminate_role", - "fields": [ - { - "name": "worker_id", - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": "penalty", - "type": 105, - "typeName": "Option>", - "docs": [] - }, - { - "name": "rationale", - "type": 69, - "typeName": "Option>", - "docs": [] - } - ], - "index": 5, - "docs": [ - "Terminate the active worker by the lead.", - "Requires signed leader origin or the root (to terminate the leader role).", - "# ", - "", - "## Weight", - "`O (P)` where:", - "- `P` is the length of `penalty.slashing_text`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "slash_stake", - "fields": [ - { - "name": "worker_id", - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": "penalty", - "type": 6, - "typeName": "BalanceOf", - "docs": [] - }, - { - "name": "rationale", - "type": 69, - "typeName": "Option>", - "docs": [] - } - ], - "index": 6, - "docs": [ - "Slashes the regular worker stake, demands a leader origin. No limits, no actions on zero stake.", - "If slashing balance greater than the existing stake - stake is slashed to zero.", - "Requires signed leader origin or the root (to slash the leader stake).", - "# ", - "", - "## Weight", - "`O (P)` where:", - "- `P` is the length of `penality.slashing_text`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "decrease_stake", - "fields": [ - { - "name": "worker_id", - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": "stake_balance_delta", - "type": 6, - "typeName": "BalanceOf", - "docs": [] - } - ], - "index": 7, - "docs": [ - "Decreases the regular worker/lead stake and returns the remainder to the", - "worker staking_account_id. Can be decreased to zero, no actions on zero stake.", - "Accepts the stake amount to decrease.", - "Requires signed leader origin or the root (to decrease the leader stake).", - "", - "# ", - "", - "## Weight", - "`O (1)`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "increase_stake", - "fields": [ - { - "name": "worker_id", - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": "stake_balance_delta", - "type": 6, - "typeName": "BalanceOf", - "docs": [] - } - ], - "index": 8, - "docs": [ - "Increases the regular worker/lead stake, demands a worker origin.", - "Locks tokens from the worker staking_account_id equal to new stake. No limits on the stake.", - "", - "# ", - "", - "## Weight", - "`O (1)`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "withdraw_application", - "fields": [ - { - "name": "application_id", - "type": 8, - "typeName": "ApplicationId", - "docs": [] - } - ], - "index": 9, - "docs": [ - "Withdraw the worker application. Can be done by the worker only.", - "", - "# ", - "", - "## Weight", - "`O (1)`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "cancel_opening", - "fields": [ - { - "name": "opening_id", - "type": 8, - "typeName": "OpeningId", - "docs": [] - } - ], - "index": 10, - "docs": [ - "Cancel an opening for the regular worker/lead position.", - "Require signed leader origin or the root (to cancel opening for the leader position).", - "", - "# ", - "", - "## Weight", - "`O (1)`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "set_budget", - "fields": [ - { - "name": "new_budget", - "type": 6, - "typeName": "BalanceOf", - "docs": [] - } - ], - "index": 11, - "docs": [ - "Sets a new budget for the working group.", - "Requires root origin.", - "", - "# ", - "", - "## Weight", - "`O (1)`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "update_reward_account", - "fields": [ - { - "name": "worker_id", - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": "new_reward_account_id", - "type": 0, - "typeName": "T::AccountId", - "docs": [] - } - ], - "index": 12, - "docs": [ - "Update the reward account associated with a set reward relationship for the active worker.", - "", - "# ", - "", - "## Weight", - "`O (1)`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "update_reward_amount", - "fields": [ - { - "name": "worker_id", - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": "reward_per_block", - "type": 105, - "typeName": "Option>", - "docs": [] - } - ], - "index": 13, - "docs": [ - "Update the reward per block for the active worker.", - "Require signed leader origin or the root (to update leader's reward amount).", - "", - "# ", - "", - "## Weight", - "`O (1)`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "set_status_text", - "fields": [ - { - "name": "status_text", - "type": 69, - "typeName": "Option>", - "docs": [] - } - ], - "index": 14, - "docs": [ - "Sets a new status text for the working group.", - "Requires root origin.", - "", - "# ", - "", - "## Weight", - "`O (S)` where:", - "- `S` is the length of the contents of `status_text` when it is not none", - "", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "spend_from_budget", - "fields": [ - { - "name": "account_id", - "type": 0, - "typeName": "T::AccountId", - "docs": [] - }, - { - "name": "amount", - "type": 6, - "typeName": "BalanceOf", - "docs": [] - }, - { - "name": "rationale", - "type": 69, - "typeName": "Option>", - "docs": [] - } - ], - "index": 15, - "docs": [ - "Transfers specified amount to any account.", - "Requires leader origin.", - "", - "# ", - "", - "## Weight", - "`O (1)`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "update_role_storage", - "fields": [ - { - "name": "worker_id", - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": "storage", - "type": 10, - "typeName": "Vec", - "docs": [] - } - ], - "index": 16, - "docs": [ - "Update the associated role storage." - ] - }, - { - "name": "fund_working_group_budget", - "fields": [ - { - "name": "member_id", - "type": 8, - "typeName": "MemberId", - "docs": [] - }, - { - "name": "amount", - "type": 6, - "typeName": "BalanceOf", - "docs": [] - }, - { - "name": "rationale", - "type": 10, - "typeName": "Vec", - "docs": [] - } - ], - "index": 17, - "docs": [ - "Fund working group budget by a member.", - "", - "", - "## Weight", - "`O (1)` Doesn't depend on the state or parameters", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "lead_remark", - "fields": [ - { - "name": "msg", - "type": 10, - "typeName": "Vec", - "docs": [] - } - ], - "index": 18, - "docs": [ - "Lead remark message", - "", - "# ", - "", - "## Weight", - "`O (1)`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "worker_remark", - "fields": [ - { - "name": "worker_id", - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": "msg", - "type": 10, - "typeName": "Vec", - "docs": [] - } - ], - "index": 19, - "docs": [ - "Worker remark message", - "", - "# ", - "", - "## Weight", - "`O (1)`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - } - ] - } - }, - "docs": [ - "Dispatchable calls.", - "", - "Each variant of this enum maps to a dispatchable function from the associated module." - ] - } - }, - { - "id": 386, - "type": { - "path": [ - "pallet_working_group", - "Call" - ], - "params": [ - { - "name": "T", - "type": null - }, - { - "name": "I", - "type": null - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "add_opening", - "fields": [ - { - "name": "description", - "type": 10, - "typeName": "Vec", - "docs": [] - }, - { - "name": "opening_type", - "type": 195, - "typeName": "OpeningType", - "docs": [] - }, - { - "name": "stake_policy", - "type": 188, - "typeName": "StakePolicy>", - "docs": [] - }, - { - "name": "reward_per_block", - "type": 105, - "typeName": "Option>", - "docs": [] - } - ], - "index": 0, - "docs": [ - "Add a job opening for a regular worker/lead role.", - "Require signed leader origin or the root (to add opening for the leader position).", - "", - "# ", - "", - "## Weight", - "`O (D)` where:", - "- `D` is the length of `description`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "apply_on_opening", - "fields": [ - { - "name": "p", - "type": 196, - "typeName": "ApplyOnOpeningParameters", - "docs": [] - } - ], - "index": 1, - "docs": [ - "Apply on a worker opening.", - "", - "# ", - "", - "## Weight", - "`O (D)` where:", - "- `D` is the length of `p.description`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "fill_opening", - "fields": [ - { - "name": "opening_id", - "type": 8, - "typeName": "OpeningId", - "docs": [] - }, - { - "name": "successful_application_ids", - "type": 101, - "typeName": "BTreeSet", - "docs": [] - } - ], - "index": 2, - "docs": [ - "Fill opening for the regular/lead position.", - "Require signed leader origin or the root (to fill opening for the leader position).", - "# ", - "", - "## Weight", - "`O (A)` where:", - "- `A` is the length of `successful_application_ids`", - "- DB:", - " - O(A)", - "# " - ] - }, - { - "name": "update_role_account", - "fields": [ - { - "name": "worker_id", - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": "new_role_account_id", - "type": 0, - "typeName": "T::AccountId", - "docs": [] - } - ], - "index": 3, - "docs": [ - "Update the associated role account of the active regular worker/lead.", - "", - "# ", - "", - "## Weight", - "`O (1)`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "leave_role", - "fields": [ - { - "name": "worker_id", - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": "rationale", - "type": 69, - "typeName": "Option>", - "docs": [] - } - ], - "index": 4, - "docs": [ - "Leave the role by the active worker.", - "# ", - "", - "## Weight", - "`O (1)`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "terminate_role", - "fields": [ - { - "name": "worker_id", - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": "penalty", - "type": 105, - "typeName": "Option>", - "docs": [] - }, - { - "name": "rationale", - "type": 69, - "typeName": "Option>", - "docs": [] - } - ], - "index": 5, - "docs": [ - "Terminate the active worker by the lead.", - "Requires signed leader origin or the root (to terminate the leader role).", - "# ", - "", - "## Weight", - "`O (P)` where:", - "- `P` is the length of `penalty.slashing_text`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "slash_stake", - "fields": [ - { - "name": "worker_id", - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": "penalty", - "type": 6, - "typeName": "BalanceOf", - "docs": [] - }, - { - "name": "rationale", - "type": 69, - "typeName": "Option>", - "docs": [] - } - ], - "index": 6, - "docs": [ - "Slashes the regular worker stake, demands a leader origin. No limits, no actions on zero stake.", - "If slashing balance greater than the existing stake - stake is slashed to zero.", - "Requires signed leader origin or the root (to slash the leader stake).", - "# ", - "", - "## Weight", - "`O (P)` where:", - "- `P` is the length of `penality.slashing_text`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "decrease_stake", - "fields": [ - { - "name": "worker_id", - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": "stake_balance_delta", - "type": 6, - "typeName": "BalanceOf", - "docs": [] - } - ], - "index": 7, - "docs": [ - "Decreases the regular worker/lead stake and returns the remainder to the", - "worker staking_account_id. Can be decreased to zero, no actions on zero stake.", - "Accepts the stake amount to decrease.", - "Requires signed leader origin or the root (to decrease the leader stake).", - "", - "# ", - "", - "## Weight", - "`O (1)`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "increase_stake", - "fields": [ - { - "name": "worker_id", - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": "stake_balance_delta", - "type": 6, - "typeName": "BalanceOf", - "docs": [] - } - ], - "index": 8, - "docs": [ - "Increases the regular worker/lead stake, demands a worker origin.", - "Locks tokens from the worker staking_account_id equal to new stake. No limits on the stake.", - "", - "# ", - "", - "## Weight", - "`O (1)`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "withdraw_application", - "fields": [ - { - "name": "application_id", - "type": 8, - "typeName": "ApplicationId", - "docs": [] - } - ], - "index": 9, - "docs": [ - "Withdraw the worker application. Can be done by the worker only.", - "", - "# ", - "", - "## Weight", - "`O (1)`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "cancel_opening", - "fields": [ - { - "name": "opening_id", - "type": 8, - "typeName": "OpeningId", - "docs": [] - } - ], - "index": 10, - "docs": [ - "Cancel an opening for the regular worker/lead position.", - "Require signed leader origin or the root (to cancel opening for the leader position).", - "", - "# ", - "", - "## Weight", - "`O (1)`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "set_budget", - "fields": [ - { - "name": "new_budget", - "type": 6, - "typeName": "BalanceOf", - "docs": [] - } - ], - "index": 11, - "docs": [ - "Sets a new budget for the working group.", - "Requires root origin.", - "", - "# ", - "", - "## Weight", - "`O (1)`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "update_reward_account", - "fields": [ - { - "name": "worker_id", - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": "new_reward_account_id", - "type": 0, - "typeName": "T::AccountId", - "docs": [] - } - ], - "index": 12, - "docs": [ - "Update the reward account associated with a set reward relationship for the active worker.", - "", - "# ", - "", - "## Weight", - "`O (1)`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "update_reward_amount", - "fields": [ - { - "name": "worker_id", - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": "reward_per_block", - "type": 105, - "typeName": "Option>", - "docs": [] - } - ], - "index": 13, - "docs": [ - "Update the reward per block for the active worker.", - "Require signed leader origin or the root (to update leader's reward amount).", - "", - "# ", - "", - "## Weight", - "`O (1)`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "set_status_text", - "fields": [ - { - "name": "status_text", - "type": 69, - "typeName": "Option>", - "docs": [] - } - ], - "index": 14, - "docs": [ - "Sets a new status text for the working group.", - "Requires root origin.", - "", - "# ", - "", - "## Weight", - "`O (S)` where:", - "- `S` is the length of the contents of `status_text` when it is not none", - "", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "spend_from_budget", - "fields": [ - { - "name": "account_id", - "type": 0, - "typeName": "T::AccountId", - "docs": [] - }, - { - "name": "amount", - "type": 6, - "typeName": "BalanceOf", - "docs": [] - }, - { - "name": "rationale", - "type": 69, - "typeName": "Option>", - "docs": [] - } - ], - "index": 15, - "docs": [ - "Transfers specified amount to any account.", - "Requires leader origin.", - "", - "# ", - "", - "## Weight", - "`O (1)`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "update_role_storage", - "fields": [ - { - "name": "worker_id", - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": "storage", - "type": 10, - "typeName": "Vec", - "docs": [] - } - ], - "index": 16, - "docs": [ - "Update the associated role storage." - ] - }, - { - "name": "fund_working_group_budget", - "fields": [ - { - "name": "member_id", - "type": 8, - "typeName": "MemberId", - "docs": [] - }, - { - "name": "amount", - "type": 6, - "typeName": "BalanceOf", - "docs": [] - }, - { - "name": "rationale", - "type": 10, - "typeName": "Vec", - "docs": [] - } - ], - "index": 17, - "docs": [ - "Fund working group budget by a member.", - "", - "", - "## Weight", - "`O (1)` Doesn't depend on the state or parameters", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "lead_remark", - "fields": [ - { - "name": "msg", - "type": 10, - "typeName": "Vec", - "docs": [] - } - ], - "index": 18, - "docs": [ - "Lead remark message", - "", - "# ", - "", - "## Weight", - "`O (1)`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "worker_remark", - "fields": [ - { - "name": "worker_id", - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": "msg", - "type": 10, - "typeName": "Vec", - "docs": [] - } - ], - "index": 19, - "docs": [ - "Worker remark message", - "", - "# ", - "", - "## Weight", - "`O (1)`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - } - ] - } - }, - "docs": [ - "Dispatchable calls.", - "", - "Each variant of this enum maps to a dispatchable function from the associated module." - ] - } - }, - { - "id": 387, - "type": { - "path": [ - "pallet_working_group", - "Call" - ], - "params": [ - { - "name": "T", - "type": null - }, - { - "name": "I", - "type": null - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "add_opening", - "fields": [ - { - "name": "description", - "type": 10, - "typeName": "Vec", - "docs": [] - }, - { - "name": "opening_type", - "type": 195, - "typeName": "OpeningType", - "docs": [] - }, - { - "name": "stake_policy", - "type": 188, - "typeName": "StakePolicy>", - "docs": [] - }, - { - "name": "reward_per_block", - "type": 105, - "typeName": "Option>", - "docs": [] - } - ], - "index": 0, - "docs": [ - "Add a job opening for a regular worker/lead role.", - "Require signed leader origin or the root (to add opening for the leader position).", - "", - "# ", - "", - "## Weight", - "`O (D)` where:", - "- `D` is the length of `description`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "apply_on_opening", - "fields": [ - { - "name": "p", - "type": 196, - "typeName": "ApplyOnOpeningParameters", - "docs": [] - } - ], - "index": 1, - "docs": [ - "Apply on a worker opening.", - "", - "# ", - "", - "## Weight", - "`O (D)` where:", - "- `D` is the length of `p.description`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "fill_opening", - "fields": [ - { - "name": "opening_id", - "type": 8, - "typeName": "OpeningId", - "docs": [] - }, - { - "name": "successful_application_ids", - "type": 101, - "typeName": "BTreeSet", - "docs": [] - } - ], - "index": 2, - "docs": [ - "Fill opening for the regular/lead position.", - "Require signed leader origin or the root (to fill opening for the leader position).", - "# ", - "", - "## Weight", - "`O (A)` where:", - "- `A` is the length of `successful_application_ids`", - "- DB:", - " - O(A)", - "# " - ] - }, - { - "name": "update_role_account", - "fields": [ - { - "name": "worker_id", - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": "new_role_account_id", - "type": 0, - "typeName": "T::AccountId", - "docs": [] - } - ], - "index": 3, - "docs": [ - "Update the associated role account of the active regular worker/lead.", - "", - "# ", - "", - "## Weight", - "`O (1)`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "leave_role", - "fields": [ - { - "name": "worker_id", - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": "rationale", - "type": 69, - "typeName": "Option>", - "docs": [] - } - ], - "index": 4, - "docs": [ - "Leave the role by the active worker.", - "# ", - "", - "## Weight", - "`O (1)`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "terminate_role", - "fields": [ - { - "name": "worker_id", - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": "penalty", - "type": 105, - "typeName": "Option>", - "docs": [] - }, - { - "name": "rationale", - "type": 69, - "typeName": "Option>", - "docs": [] - } - ], - "index": 5, - "docs": [ - "Terminate the active worker by the lead.", - "Requires signed leader origin or the root (to terminate the leader role).", - "# ", - "", - "## Weight", - "`O (P)` where:", - "- `P` is the length of `penalty.slashing_text`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "slash_stake", - "fields": [ - { - "name": "worker_id", - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": "penalty", - "type": 6, - "typeName": "BalanceOf", - "docs": [] - }, - { - "name": "rationale", - "type": 69, - "typeName": "Option>", - "docs": [] - } - ], - "index": 6, - "docs": [ - "Slashes the regular worker stake, demands a leader origin. No limits, no actions on zero stake.", - "If slashing balance greater than the existing stake - stake is slashed to zero.", - "Requires signed leader origin or the root (to slash the leader stake).", - "# ", - "", - "## Weight", - "`O (P)` where:", - "- `P` is the length of `penality.slashing_text`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "decrease_stake", - "fields": [ - { - "name": "worker_id", - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": "stake_balance_delta", - "type": 6, - "typeName": "BalanceOf", - "docs": [] - } - ], - "index": 7, - "docs": [ - "Decreases the regular worker/lead stake and returns the remainder to the", - "worker staking_account_id. Can be decreased to zero, no actions on zero stake.", - "Accepts the stake amount to decrease.", - "Requires signed leader origin or the root (to decrease the leader stake).", - "", - "# ", - "", - "## Weight", - "`O (1)`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "increase_stake", - "fields": [ - { - "name": "worker_id", - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": "stake_balance_delta", - "type": 6, - "typeName": "BalanceOf", - "docs": [] - } - ], - "index": 8, - "docs": [ - "Increases the regular worker/lead stake, demands a worker origin.", - "Locks tokens from the worker staking_account_id equal to new stake. No limits on the stake.", - "", - "# ", - "", - "## Weight", - "`O (1)`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "withdraw_application", - "fields": [ - { - "name": "application_id", - "type": 8, - "typeName": "ApplicationId", - "docs": [] - } - ], - "index": 9, - "docs": [ - "Withdraw the worker application. Can be done by the worker only.", - "", - "# ", - "", - "## Weight", - "`O (1)`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "cancel_opening", - "fields": [ - { - "name": "opening_id", - "type": 8, - "typeName": "OpeningId", - "docs": [] - } - ], - "index": 10, - "docs": [ - "Cancel an opening for the regular worker/lead position.", - "Require signed leader origin or the root (to cancel opening for the leader position).", - "", - "# ", - "", - "## Weight", - "`O (1)`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "set_budget", - "fields": [ - { - "name": "new_budget", - "type": 6, - "typeName": "BalanceOf", - "docs": [] - } - ], - "index": 11, - "docs": [ - "Sets a new budget for the working group.", - "Requires root origin.", - "", - "# ", - "", - "## Weight", - "`O (1)`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "update_reward_account", - "fields": [ - { - "name": "worker_id", - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": "new_reward_account_id", - "type": 0, - "typeName": "T::AccountId", - "docs": [] - } - ], - "index": 12, - "docs": [ - "Update the reward account associated with a set reward relationship for the active worker.", - "", - "# ", - "", - "## Weight", - "`O (1)`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "update_reward_amount", - "fields": [ - { - "name": "worker_id", - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": "reward_per_block", - "type": 105, - "typeName": "Option>", - "docs": [] - } - ], - "index": 13, - "docs": [ - "Update the reward per block for the active worker.", - "Require signed leader origin or the root (to update leader's reward amount).", - "", - "# ", - "", - "## Weight", - "`O (1)`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "set_status_text", - "fields": [ - { - "name": "status_text", - "type": 69, - "typeName": "Option>", - "docs": [] - } - ], - "index": 14, - "docs": [ - "Sets a new status text for the working group.", - "Requires root origin.", - "", - "# ", - "", - "## Weight", - "`O (S)` where:", - "- `S` is the length of the contents of `status_text` when it is not none", - "", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "spend_from_budget", - "fields": [ - { - "name": "account_id", - "type": 0, - "typeName": "T::AccountId", - "docs": [] - }, - { - "name": "amount", - "type": 6, - "typeName": "BalanceOf", - "docs": [] - }, - { - "name": "rationale", - "type": 69, - "typeName": "Option>", - "docs": [] - } - ], - "index": 15, - "docs": [ - "Transfers specified amount to any account.", - "Requires leader origin.", - "", - "# ", - "", - "## Weight", - "`O (1)`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "update_role_storage", - "fields": [ - { - "name": "worker_id", - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": "storage", - "type": 10, - "typeName": "Vec", - "docs": [] - } - ], - "index": 16, - "docs": [ - "Update the associated role storage." - ] - }, - { - "name": "fund_working_group_budget", - "fields": [ - { - "name": "member_id", - "type": 8, - "typeName": "MemberId", - "docs": [] - }, - { - "name": "amount", - "type": 6, - "typeName": "BalanceOf", - "docs": [] - }, - { - "name": "rationale", - "type": 10, - "typeName": "Vec", - "docs": [] - } - ], - "index": 17, - "docs": [ - "Fund working group budget by a member.", - "", - "", - "## Weight", - "`O (1)` Doesn't depend on the state or parameters", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "lead_remark", - "fields": [ - { - "name": "msg", - "type": 10, - "typeName": "Vec", - "docs": [] - } - ], - "index": 18, - "docs": [ - "Lead remark message", - "", - "# ", - "", - "## Weight", - "`O (1)`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "worker_remark", - "fields": [ - { - "name": "worker_id", - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": "msg", - "type": 10, - "typeName": "Vec", - "docs": [] - } - ], - "index": 19, - "docs": [ - "Worker remark message", - "", - "# ", - "", - "## Weight", - "`O (1)`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - } - ] - } - }, - "docs": [ - "Dispatchable calls.", - "", - "Each variant of this enum maps to a dispatchable function from the associated module." - ] - } - }, - { - "id": 388, - "type": { - "path": [ - "pallet_working_group", - "Call" - ], - "params": [ - { - "name": "T", - "type": null - }, - { - "name": "I", - "type": null - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "add_opening", - "fields": [ - { - "name": "description", - "type": 10, - "typeName": "Vec", - "docs": [] - }, - { - "name": "opening_type", - "type": 195, - "typeName": "OpeningType", - "docs": [] - }, - { - "name": "stake_policy", - "type": 188, - "typeName": "StakePolicy>", - "docs": [] - }, - { - "name": "reward_per_block", - "type": 105, - "typeName": "Option>", - "docs": [] - } - ], - "index": 0, - "docs": [ - "Add a job opening for a regular worker/lead role.", - "Require signed leader origin or the root (to add opening for the leader position).", - "", - "# ", - "", - "## Weight", - "`O (D)` where:", - "- `D` is the length of `description`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "apply_on_opening", - "fields": [ - { - "name": "p", - "type": 196, - "typeName": "ApplyOnOpeningParameters", - "docs": [] - } - ], - "index": 1, - "docs": [ - "Apply on a worker opening.", - "", - "# ", - "", - "## Weight", - "`O (D)` where:", - "- `D` is the length of `p.description`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "fill_opening", - "fields": [ - { - "name": "opening_id", - "type": 8, - "typeName": "OpeningId", - "docs": [] - }, - { - "name": "successful_application_ids", - "type": 101, - "typeName": "BTreeSet", - "docs": [] - } - ], - "index": 2, - "docs": [ - "Fill opening for the regular/lead position.", - "Require signed leader origin or the root (to fill opening for the leader position).", - "# ", - "", - "## Weight", - "`O (A)` where:", - "- `A` is the length of `successful_application_ids`", - "- DB:", - " - O(A)", - "# " - ] - }, - { - "name": "update_role_account", - "fields": [ - { - "name": "worker_id", - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": "new_role_account_id", - "type": 0, - "typeName": "T::AccountId", - "docs": [] - } - ], - "index": 3, - "docs": [ - "Update the associated role account of the active regular worker/lead.", - "", - "# ", - "", - "## Weight", - "`O (1)`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "leave_role", - "fields": [ - { - "name": "worker_id", - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": "rationale", - "type": 69, - "typeName": "Option>", - "docs": [] - } - ], - "index": 4, - "docs": [ - "Leave the role by the active worker.", - "# ", - "", - "## Weight", - "`O (1)`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "terminate_role", - "fields": [ - { - "name": "worker_id", - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": "penalty", - "type": 105, - "typeName": "Option>", - "docs": [] - }, - { - "name": "rationale", - "type": 69, - "typeName": "Option>", - "docs": [] - } - ], - "index": 5, - "docs": [ - "Terminate the active worker by the lead.", - "Requires signed leader origin or the root (to terminate the leader role).", - "# ", - "", - "## Weight", - "`O (P)` where:", - "- `P` is the length of `penalty.slashing_text`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "slash_stake", - "fields": [ - { - "name": "worker_id", - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": "penalty", - "type": 6, - "typeName": "BalanceOf", - "docs": [] - }, - { - "name": "rationale", - "type": 69, - "typeName": "Option>", - "docs": [] - } - ], - "index": 6, - "docs": [ - "Slashes the regular worker stake, demands a leader origin. No limits, no actions on zero stake.", - "If slashing balance greater than the existing stake - stake is slashed to zero.", - "Requires signed leader origin or the root (to slash the leader stake).", - "# ", - "", - "## Weight", - "`O (P)` where:", - "- `P` is the length of `penality.slashing_text`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "decrease_stake", - "fields": [ - { - "name": "worker_id", - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": "stake_balance_delta", - "type": 6, - "typeName": "BalanceOf", - "docs": [] - } - ], - "index": 7, - "docs": [ - "Decreases the regular worker/lead stake and returns the remainder to the", - "worker staking_account_id. Can be decreased to zero, no actions on zero stake.", - "Accepts the stake amount to decrease.", - "Requires signed leader origin or the root (to decrease the leader stake).", - "", - "# ", - "", - "## Weight", - "`O (1)`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "increase_stake", - "fields": [ - { - "name": "worker_id", - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": "stake_balance_delta", - "type": 6, - "typeName": "BalanceOf", - "docs": [] - } - ], - "index": 8, - "docs": [ - "Increases the regular worker/lead stake, demands a worker origin.", - "Locks tokens from the worker staking_account_id equal to new stake. No limits on the stake.", - "", - "# ", - "", - "## Weight", - "`O (1)`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "withdraw_application", - "fields": [ - { - "name": "application_id", - "type": 8, - "typeName": "ApplicationId", - "docs": [] - } - ], - "index": 9, - "docs": [ - "Withdraw the worker application. Can be done by the worker only.", - "", - "# ", - "", - "## Weight", - "`O (1)`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "cancel_opening", - "fields": [ - { - "name": "opening_id", - "type": 8, - "typeName": "OpeningId", - "docs": [] - } - ], - "index": 10, - "docs": [ - "Cancel an opening for the regular worker/lead position.", - "Require signed leader origin or the root (to cancel opening for the leader position).", - "", - "# ", - "", - "## Weight", - "`O (1)`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "set_budget", - "fields": [ - { - "name": "new_budget", - "type": 6, - "typeName": "BalanceOf", - "docs": [] - } - ], - "index": 11, - "docs": [ - "Sets a new budget for the working group.", - "Requires root origin.", - "", - "# ", - "", - "## Weight", - "`O (1)`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "update_reward_account", - "fields": [ - { - "name": "worker_id", - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": "new_reward_account_id", - "type": 0, - "typeName": "T::AccountId", - "docs": [] - } - ], - "index": 12, - "docs": [ - "Update the reward account associated with a set reward relationship for the active worker.", - "", - "# ", - "", - "## Weight", - "`O (1)`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "update_reward_amount", - "fields": [ - { - "name": "worker_id", - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": "reward_per_block", - "type": 105, - "typeName": "Option>", - "docs": [] - } - ], - "index": 13, - "docs": [ - "Update the reward per block for the active worker.", - "Require signed leader origin or the root (to update leader's reward amount).", - "", - "# ", - "", - "## Weight", - "`O (1)`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "set_status_text", - "fields": [ - { - "name": "status_text", - "type": 69, - "typeName": "Option>", - "docs": [] - } - ], - "index": 14, - "docs": [ - "Sets a new status text for the working group.", - "Requires root origin.", - "", - "# ", - "", - "## Weight", - "`O (S)` where:", - "- `S` is the length of the contents of `status_text` when it is not none", - "", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "spend_from_budget", - "fields": [ - { - "name": "account_id", - "type": 0, - "typeName": "T::AccountId", - "docs": [] - }, - { - "name": "amount", - "type": 6, - "typeName": "BalanceOf", - "docs": [] - }, - { - "name": "rationale", - "type": 69, - "typeName": "Option>", - "docs": [] - } - ], - "index": 15, - "docs": [ - "Transfers specified amount to any account.", - "Requires leader origin.", - "", - "# ", - "", - "## Weight", - "`O (1)`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "update_role_storage", - "fields": [ - { - "name": "worker_id", - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": "storage", - "type": 10, - "typeName": "Vec", - "docs": [] - } - ], - "index": 16, - "docs": [ - "Update the associated role storage." - ] - }, - { - "name": "fund_working_group_budget", - "fields": [ - { - "name": "member_id", - "type": 8, - "typeName": "MemberId", - "docs": [] - }, - { - "name": "amount", - "type": 6, - "typeName": "BalanceOf", - "docs": [] - }, - { - "name": "rationale", - "type": 10, - "typeName": "Vec", - "docs": [] - } - ], - "index": 17, - "docs": [ - "Fund working group budget by a member.", - "", - "", - "## Weight", - "`O (1)` Doesn't depend on the state or parameters", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "lead_remark", - "fields": [ - { - "name": "msg", - "type": 10, - "typeName": "Vec", - "docs": [] - } - ], - "index": 18, - "docs": [ - "Lead remark message", - "", - "# ", - "", - "## Weight", - "`O (1)`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "worker_remark", - "fields": [ - { - "name": "worker_id", - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": "msg", - "type": 10, - "typeName": "Vec", - "docs": [] - } - ], - "index": 19, - "docs": [ - "Worker remark message", - "", - "# ", - "", - "## Weight", - "`O (1)`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - } - ] - } - }, - "docs": [ - "Dispatchable calls.", - "", - "Each variant of this enum maps to a dispatchable function from the associated module." - ] - } - }, - { - "id": 389, - "type": { - "path": [ - "pallet_working_group", - "Call" - ], - "params": [ - { - "name": "T", - "type": null - }, - { - "name": "I", - "type": null - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "add_opening", - "fields": [ - { - "name": "description", - "type": 10, - "typeName": "Vec", - "docs": [] - }, - { - "name": "opening_type", - "type": 195, - "typeName": "OpeningType", - "docs": [] - }, - { - "name": "stake_policy", - "type": 188, - "typeName": "StakePolicy>", - "docs": [] - }, - { - "name": "reward_per_block", - "type": 105, - "typeName": "Option>", - "docs": [] - } - ], - "index": 0, - "docs": [ - "Add a job opening for a regular worker/lead role.", - "Require signed leader origin or the root (to add opening for the leader position).", - "", - "# ", - "", - "## Weight", - "`O (D)` where:", - "- `D` is the length of `description`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "apply_on_opening", - "fields": [ - { - "name": "p", - "type": 196, - "typeName": "ApplyOnOpeningParameters", - "docs": [] - } - ], - "index": 1, - "docs": [ - "Apply on a worker opening.", - "", - "# ", - "", - "## Weight", - "`O (D)` where:", - "- `D` is the length of `p.description`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "fill_opening", - "fields": [ - { - "name": "opening_id", - "type": 8, - "typeName": "OpeningId", - "docs": [] - }, - { - "name": "successful_application_ids", - "type": 101, - "typeName": "BTreeSet", - "docs": [] - } - ], - "index": 2, - "docs": [ - "Fill opening for the regular/lead position.", - "Require signed leader origin or the root (to fill opening for the leader position).", - "# ", - "", - "## Weight", - "`O (A)` where:", - "- `A` is the length of `successful_application_ids`", - "- DB:", - " - O(A)", - "# " - ] - }, - { - "name": "update_role_account", - "fields": [ - { - "name": "worker_id", - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": "new_role_account_id", - "type": 0, - "typeName": "T::AccountId", - "docs": [] - } - ], - "index": 3, - "docs": [ - "Update the associated role account of the active regular worker/lead.", - "", - "# ", - "", - "## Weight", - "`O (1)`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "leave_role", - "fields": [ - { - "name": "worker_id", - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": "rationale", - "type": 69, - "typeName": "Option>", - "docs": [] - } - ], - "index": 4, - "docs": [ - "Leave the role by the active worker.", - "# ", - "", - "## Weight", - "`O (1)`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "terminate_role", - "fields": [ - { - "name": "worker_id", - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": "penalty", - "type": 105, - "typeName": "Option>", - "docs": [] - }, - { - "name": "rationale", - "type": 69, - "typeName": "Option>", - "docs": [] - } - ], - "index": 5, - "docs": [ - "Terminate the active worker by the lead.", - "Requires signed leader origin or the root (to terminate the leader role).", - "# ", - "", - "## Weight", - "`O (P)` where:", - "- `P` is the length of `penalty.slashing_text`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "slash_stake", - "fields": [ - { - "name": "worker_id", - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": "penalty", - "type": 6, - "typeName": "BalanceOf", - "docs": [] - }, - { - "name": "rationale", - "type": 69, - "typeName": "Option>", - "docs": [] - } - ], - "index": 6, - "docs": [ - "Slashes the regular worker stake, demands a leader origin. No limits, no actions on zero stake.", - "If slashing balance greater than the existing stake - stake is slashed to zero.", - "Requires signed leader origin or the root (to slash the leader stake).", - "# ", - "", - "## Weight", - "`O (P)` where:", - "- `P` is the length of `penality.slashing_text`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "decrease_stake", - "fields": [ - { - "name": "worker_id", - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": "stake_balance_delta", - "type": 6, - "typeName": "BalanceOf", - "docs": [] - } - ], - "index": 7, - "docs": [ - "Decreases the regular worker/lead stake and returns the remainder to the", - "worker staking_account_id. Can be decreased to zero, no actions on zero stake.", - "Accepts the stake amount to decrease.", - "Requires signed leader origin or the root (to decrease the leader stake).", - "", - "# ", - "", - "## Weight", - "`O (1)`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "increase_stake", - "fields": [ - { - "name": "worker_id", - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": "stake_balance_delta", - "type": 6, - "typeName": "BalanceOf", - "docs": [] - } - ], - "index": 8, - "docs": [ - "Increases the regular worker/lead stake, demands a worker origin.", - "Locks tokens from the worker staking_account_id equal to new stake. No limits on the stake.", - "", - "# ", - "", - "## Weight", - "`O (1)`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "withdraw_application", - "fields": [ - { - "name": "application_id", - "type": 8, - "typeName": "ApplicationId", - "docs": [] - } - ], - "index": 9, - "docs": [ - "Withdraw the worker application. Can be done by the worker only.", - "", - "# ", - "", - "## Weight", - "`O (1)`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "cancel_opening", - "fields": [ - { - "name": "opening_id", - "type": 8, - "typeName": "OpeningId", - "docs": [] - } - ], - "index": 10, - "docs": [ - "Cancel an opening for the regular worker/lead position.", - "Require signed leader origin or the root (to cancel opening for the leader position).", - "", - "# ", - "", - "## Weight", - "`O (1)`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "set_budget", - "fields": [ - { - "name": "new_budget", - "type": 6, - "typeName": "BalanceOf", - "docs": [] - } - ], - "index": 11, - "docs": [ - "Sets a new budget for the working group.", - "Requires root origin.", - "", - "# ", - "", - "## Weight", - "`O (1)`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "update_reward_account", - "fields": [ - { - "name": "worker_id", - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": "new_reward_account_id", - "type": 0, - "typeName": "T::AccountId", - "docs": [] - } - ], - "index": 12, - "docs": [ - "Update the reward account associated with a set reward relationship for the active worker.", - "", - "# ", - "", - "## Weight", - "`O (1)`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "update_reward_amount", - "fields": [ - { - "name": "worker_id", - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": "reward_per_block", - "type": 105, - "typeName": "Option>", - "docs": [] - } - ], - "index": 13, - "docs": [ - "Update the reward per block for the active worker.", - "Require signed leader origin or the root (to update leader's reward amount).", - "", - "# ", - "", - "## Weight", - "`O (1)`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "set_status_text", - "fields": [ - { - "name": "status_text", - "type": 69, - "typeName": "Option>", - "docs": [] - } - ], - "index": 14, - "docs": [ - "Sets a new status text for the working group.", - "Requires root origin.", - "", - "# ", - "", - "## Weight", - "`O (S)` where:", - "- `S` is the length of the contents of `status_text` when it is not none", - "", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "spend_from_budget", - "fields": [ - { - "name": "account_id", - "type": 0, - "typeName": "T::AccountId", - "docs": [] - }, - { - "name": "amount", - "type": 6, - "typeName": "BalanceOf", - "docs": [] - }, - { - "name": "rationale", - "type": 69, - "typeName": "Option>", - "docs": [] - } - ], - "index": 15, - "docs": [ - "Transfers specified amount to any account.", - "Requires leader origin.", - "", - "# ", - "", - "## Weight", - "`O (1)`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "update_role_storage", - "fields": [ - { - "name": "worker_id", - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": "storage", - "type": 10, - "typeName": "Vec", - "docs": [] - } - ], - "index": 16, - "docs": [ - "Update the associated role storage." - ] - }, - { - "name": "fund_working_group_budget", - "fields": [ - { - "name": "member_id", - "type": 8, - "typeName": "MemberId", - "docs": [] - }, - { - "name": "amount", - "type": 6, - "typeName": "BalanceOf", - "docs": [] - }, - { - "name": "rationale", - "type": 10, - "typeName": "Vec", - "docs": [] - } - ], - "index": 17, - "docs": [ - "Fund working group budget by a member.", - "", - "", - "## Weight", - "`O (1)` Doesn't depend on the state or parameters", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "lead_remark", - "fields": [ - { - "name": "msg", - "type": 10, - "typeName": "Vec", - "docs": [] - } - ], - "index": 18, - "docs": [ - "Lead remark message", - "", - "# ", - "", - "## Weight", - "`O (1)`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "worker_remark", - "fields": [ - { - "name": "worker_id", - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": "msg", - "type": 10, - "typeName": "Vec", - "docs": [] - } - ], - "index": 19, - "docs": [ - "Worker remark message", - "", - "# ", - "", - "## Weight", - "`O (1)`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - } - ] - } - }, - "docs": [ - "Dispatchable calls.", - "", - "Each variant of this enum maps to a dispatchable function from the associated module." - ] - } - }, - { - "id": 390, - "type": { - "path": [ - "pallet_working_group", - "Call" - ], - "params": [ - { - "name": "T", - "type": null - }, - { - "name": "I", - "type": null - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "add_opening", - "fields": [ - { - "name": "description", - "type": 10, - "typeName": "Vec", - "docs": [] - }, - { - "name": "opening_type", - "type": 195, - "typeName": "OpeningType", - "docs": [] - }, - { - "name": "stake_policy", - "type": 188, - "typeName": "StakePolicy>", - "docs": [] - }, - { - "name": "reward_per_block", - "type": 105, - "typeName": "Option>", - "docs": [] - } - ], - "index": 0, - "docs": [ - "Add a job opening for a regular worker/lead role.", - "Require signed leader origin or the root (to add opening for the leader position).", - "", - "# ", - "", - "## Weight", - "`O (D)` where:", - "- `D` is the length of `description`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "apply_on_opening", - "fields": [ - { - "name": "p", - "type": 196, - "typeName": "ApplyOnOpeningParameters", - "docs": [] - } - ], - "index": 1, - "docs": [ - "Apply on a worker opening.", - "", - "# ", - "", - "## Weight", - "`O (D)` where:", - "- `D` is the length of `p.description`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "fill_opening", - "fields": [ - { - "name": "opening_id", - "type": 8, - "typeName": "OpeningId", - "docs": [] - }, - { - "name": "successful_application_ids", - "type": 101, - "typeName": "BTreeSet", - "docs": [] - } - ], - "index": 2, - "docs": [ - "Fill opening for the regular/lead position.", - "Require signed leader origin or the root (to fill opening for the leader position).", - "# ", - "", - "## Weight", - "`O (A)` where:", - "- `A` is the length of `successful_application_ids`", - "- DB:", - " - O(A)", - "# " - ] - }, - { - "name": "update_role_account", - "fields": [ - { - "name": "worker_id", - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": "new_role_account_id", - "type": 0, - "typeName": "T::AccountId", - "docs": [] - } - ], - "index": 3, - "docs": [ - "Update the associated role account of the active regular worker/lead.", - "", - "# ", - "", - "## Weight", - "`O (1)`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "leave_role", - "fields": [ - { - "name": "worker_id", - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": "rationale", - "type": 69, - "typeName": "Option>", - "docs": [] - } - ], - "index": 4, - "docs": [ - "Leave the role by the active worker.", - "# ", - "", - "## Weight", - "`O (1)`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "terminate_role", - "fields": [ - { - "name": "worker_id", - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": "penalty", - "type": 105, - "typeName": "Option>", - "docs": [] - }, - { - "name": "rationale", - "type": 69, - "typeName": "Option>", - "docs": [] - } - ], - "index": 5, - "docs": [ - "Terminate the active worker by the lead.", - "Requires signed leader origin or the root (to terminate the leader role).", - "# ", - "", - "## Weight", - "`O (P)` where:", - "- `P` is the length of `penalty.slashing_text`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "slash_stake", - "fields": [ - { - "name": "worker_id", - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": "penalty", - "type": 6, - "typeName": "BalanceOf", - "docs": [] - }, - { - "name": "rationale", - "type": 69, - "typeName": "Option>", - "docs": [] - } - ], - "index": 6, - "docs": [ - "Slashes the regular worker stake, demands a leader origin. No limits, no actions on zero stake.", - "If slashing balance greater than the existing stake - stake is slashed to zero.", - "Requires signed leader origin or the root (to slash the leader stake).", - "# ", - "", - "## Weight", - "`O (P)` where:", - "- `P` is the length of `penality.slashing_text`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "decrease_stake", - "fields": [ - { - "name": "worker_id", - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": "stake_balance_delta", - "type": 6, - "typeName": "BalanceOf", - "docs": [] - } - ], - "index": 7, - "docs": [ - "Decreases the regular worker/lead stake and returns the remainder to the", - "worker staking_account_id. Can be decreased to zero, no actions on zero stake.", - "Accepts the stake amount to decrease.", - "Requires signed leader origin or the root (to decrease the leader stake).", - "", - "# ", - "", - "## Weight", - "`O (1)`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "increase_stake", - "fields": [ - { - "name": "worker_id", - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": "stake_balance_delta", - "type": 6, - "typeName": "BalanceOf", - "docs": [] - } - ], - "index": 8, - "docs": [ - "Increases the regular worker/lead stake, demands a worker origin.", - "Locks tokens from the worker staking_account_id equal to new stake. No limits on the stake.", - "", - "# ", - "", - "## Weight", - "`O (1)`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "withdraw_application", - "fields": [ - { - "name": "application_id", - "type": 8, - "typeName": "ApplicationId", - "docs": [] - } - ], - "index": 9, - "docs": [ - "Withdraw the worker application. Can be done by the worker only.", - "", - "# ", - "", - "## Weight", - "`O (1)`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "cancel_opening", - "fields": [ - { - "name": "opening_id", - "type": 8, - "typeName": "OpeningId", - "docs": [] - } - ], - "index": 10, - "docs": [ - "Cancel an opening for the regular worker/lead position.", - "Require signed leader origin or the root (to cancel opening for the leader position).", - "", - "# ", - "", - "## Weight", - "`O (1)`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "set_budget", - "fields": [ - { - "name": "new_budget", - "type": 6, - "typeName": "BalanceOf", - "docs": [] - } - ], - "index": 11, - "docs": [ - "Sets a new budget for the working group.", - "Requires root origin.", - "", - "# ", - "", - "## Weight", - "`O (1)`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "update_reward_account", - "fields": [ - { - "name": "worker_id", - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": "new_reward_account_id", - "type": 0, - "typeName": "T::AccountId", - "docs": [] - } - ], - "index": 12, - "docs": [ - "Update the reward account associated with a set reward relationship for the active worker.", - "", - "# ", - "", - "## Weight", - "`O (1)`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "update_reward_amount", - "fields": [ - { - "name": "worker_id", - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": "reward_per_block", - "type": 105, - "typeName": "Option>", - "docs": [] - } - ], - "index": 13, - "docs": [ - "Update the reward per block for the active worker.", - "Require signed leader origin or the root (to update leader's reward amount).", - "", - "# ", - "", - "## Weight", - "`O (1)`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "set_status_text", - "fields": [ - { - "name": "status_text", - "type": 69, - "typeName": "Option>", - "docs": [] - } - ], - "index": 14, - "docs": [ - "Sets a new status text for the working group.", - "Requires root origin.", - "", - "# ", - "", - "## Weight", - "`O (S)` where:", - "- `S` is the length of the contents of `status_text` when it is not none", - "", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "spend_from_budget", - "fields": [ - { - "name": "account_id", - "type": 0, - "typeName": "T::AccountId", - "docs": [] - }, - { - "name": "amount", - "type": 6, - "typeName": "BalanceOf", - "docs": [] - }, - { - "name": "rationale", - "type": 69, - "typeName": "Option>", - "docs": [] - } - ], - "index": 15, - "docs": [ - "Transfers specified amount to any account.", - "Requires leader origin.", - "", - "# ", - "", - "## Weight", - "`O (1)`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "update_role_storage", - "fields": [ - { - "name": "worker_id", - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": "storage", - "type": 10, - "typeName": "Vec", - "docs": [] - } - ], - "index": 16, - "docs": [ - "Update the associated role storage." - ] - }, - { - "name": "fund_working_group_budget", - "fields": [ - { - "name": "member_id", - "type": 8, - "typeName": "MemberId", - "docs": [] - }, - { - "name": "amount", - "type": 6, - "typeName": "BalanceOf", - "docs": [] - }, - { - "name": "rationale", - "type": 10, - "typeName": "Vec", - "docs": [] - } - ], - "index": 17, - "docs": [ - "Fund working group budget by a member.", - "", - "", - "## Weight", - "`O (1)` Doesn't depend on the state or parameters", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "lead_remark", - "fields": [ - { - "name": "msg", - "type": 10, - "typeName": "Vec", - "docs": [] - } - ], - "index": 18, - "docs": [ - "Lead remark message", - "", - "# ", - "", - "## Weight", - "`O (1)`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "worker_remark", - "fields": [ - { - "name": "worker_id", - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": "msg", - "type": 10, - "typeName": "Vec", - "docs": [] - } - ], - "index": 19, - "docs": [ - "Worker remark message", - "", - "# ", - "", - "## Weight", - "`O (1)`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - } - ] - } - }, - "docs": [ - "Dispatchable calls.", - "", - "Each variant of this enum maps to a dispatchable function from the associated module." - ] - } - }, - { - "id": 391, - "type": { - "path": [ - "pallet_working_group", - "Call" - ], - "params": [ - { - "name": "T", - "type": null - }, - { - "name": "I", - "type": null - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "add_opening", - "fields": [ - { - "name": "description", - "type": 10, - "typeName": "Vec", - "docs": [] - }, - { - "name": "opening_type", - "type": 195, - "typeName": "OpeningType", - "docs": [] - }, - { - "name": "stake_policy", - "type": 188, - "typeName": "StakePolicy>", - "docs": [] - }, - { - "name": "reward_per_block", - "type": 105, - "typeName": "Option>", - "docs": [] - } - ], - "index": 0, - "docs": [ - "Add a job opening for a regular worker/lead role.", - "Require signed leader origin or the root (to add opening for the leader position).", - "", - "# ", - "", - "## Weight", - "`O (D)` where:", - "- `D` is the length of `description`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "apply_on_opening", - "fields": [ - { - "name": "p", - "type": 196, - "typeName": "ApplyOnOpeningParameters", - "docs": [] - } - ], - "index": 1, - "docs": [ - "Apply on a worker opening.", - "", - "# ", - "", - "## Weight", - "`O (D)` where:", - "- `D` is the length of `p.description`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "fill_opening", - "fields": [ - { - "name": "opening_id", - "type": 8, - "typeName": "OpeningId", - "docs": [] - }, - { - "name": "successful_application_ids", - "type": 101, - "typeName": "BTreeSet", - "docs": [] - } - ], - "index": 2, - "docs": [ - "Fill opening for the regular/lead position.", - "Require signed leader origin or the root (to fill opening for the leader position).", - "# ", - "", - "## Weight", - "`O (A)` where:", - "- `A` is the length of `successful_application_ids`", - "- DB:", - " - O(A)", - "# " - ] - }, - { - "name": "update_role_account", - "fields": [ - { - "name": "worker_id", - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": "new_role_account_id", - "type": 0, - "typeName": "T::AccountId", - "docs": [] - } - ], - "index": 3, - "docs": [ - "Update the associated role account of the active regular worker/lead.", - "", - "# ", - "", - "## Weight", - "`O (1)`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "leave_role", - "fields": [ - { - "name": "worker_id", - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": "rationale", - "type": 69, - "typeName": "Option>", - "docs": [] - } - ], - "index": 4, - "docs": [ - "Leave the role by the active worker.", - "# ", - "", - "## Weight", - "`O (1)`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "terminate_role", - "fields": [ - { - "name": "worker_id", - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": "penalty", - "type": 105, - "typeName": "Option>", - "docs": [] - }, - { - "name": "rationale", - "type": 69, - "typeName": "Option>", - "docs": [] - } - ], - "index": 5, - "docs": [ - "Terminate the active worker by the lead.", - "Requires signed leader origin or the root (to terminate the leader role).", - "# ", - "", - "## Weight", - "`O (P)` where:", - "- `P` is the length of `penalty.slashing_text`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "slash_stake", - "fields": [ - { - "name": "worker_id", - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": "penalty", - "type": 6, - "typeName": "BalanceOf", - "docs": [] - }, - { - "name": "rationale", - "type": 69, - "typeName": "Option>", - "docs": [] - } - ], - "index": 6, - "docs": [ - "Slashes the regular worker stake, demands a leader origin. No limits, no actions on zero stake.", - "If slashing balance greater than the existing stake - stake is slashed to zero.", - "Requires signed leader origin or the root (to slash the leader stake).", - "# ", - "", - "## Weight", - "`O (P)` where:", - "- `P` is the length of `penality.slashing_text`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "decrease_stake", - "fields": [ - { - "name": "worker_id", - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": "stake_balance_delta", - "type": 6, - "typeName": "BalanceOf", - "docs": [] - } - ], - "index": 7, - "docs": [ - "Decreases the regular worker/lead stake and returns the remainder to the", - "worker staking_account_id. Can be decreased to zero, no actions on zero stake.", - "Accepts the stake amount to decrease.", - "Requires signed leader origin or the root (to decrease the leader stake).", - "", - "# ", - "", - "## Weight", - "`O (1)`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "increase_stake", - "fields": [ - { - "name": "worker_id", - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": "stake_balance_delta", - "type": 6, - "typeName": "BalanceOf", - "docs": [] - } - ], - "index": 8, - "docs": [ - "Increases the regular worker/lead stake, demands a worker origin.", - "Locks tokens from the worker staking_account_id equal to new stake. No limits on the stake.", - "", - "# ", - "", - "## Weight", - "`O (1)`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "withdraw_application", - "fields": [ - { - "name": "application_id", - "type": 8, - "typeName": "ApplicationId", - "docs": [] - } - ], - "index": 9, - "docs": [ - "Withdraw the worker application. Can be done by the worker only.", - "", - "# ", - "", - "## Weight", - "`O (1)`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "cancel_opening", - "fields": [ - { - "name": "opening_id", - "type": 8, - "typeName": "OpeningId", - "docs": [] - } - ], - "index": 10, - "docs": [ - "Cancel an opening for the regular worker/lead position.", - "Require signed leader origin or the root (to cancel opening for the leader position).", - "", - "# ", - "", - "## Weight", - "`O (1)`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "set_budget", - "fields": [ - { - "name": "new_budget", - "type": 6, - "typeName": "BalanceOf", - "docs": [] - } - ], - "index": 11, - "docs": [ - "Sets a new budget for the working group.", - "Requires root origin.", - "", - "# ", - "", - "## Weight", - "`O (1)`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "update_reward_account", - "fields": [ - { - "name": "worker_id", - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": "new_reward_account_id", - "type": 0, - "typeName": "T::AccountId", - "docs": [] - } - ], - "index": 12, - "docs": [ - "Update the reward account associated with a set reward relationship for the active worker.", - "", - "# ", - "", - "## Weight", - "`O (1)`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "update_reward_amount", - "fields": [ - { - "name": "worker_id", - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": "reward_per_block", - "type": 105, - "typeName": "Option>", - "docs": [] - } - ], - "index": 13, - "docs": [ - "Update the reward per block for the active worker.", - "Require signed leader origin or the root (to update leader's reward amount).", - "", - "# ", - "", - "## Weight", - "`O (1)`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "set_status_text", - "fields": [ - { - "name": "status_text", - "type": 69, - "typeName": "Option>", - "docs": [] - } - ], - "index": 14, - "docs": [ - "Sets a new status text for the working group.", - "Requires root origin.", - "", - "# ", - "", - "## Weight", - "`O (S)` where:", - "- `S` is the length of the contents of `status_text` when it is not none", - "", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "spend_from_budget", - "fields": [ - { - "name": "account_id", - "type": 0, - "typeName": "T::AccountId", - "docs": [] - }, - { - "name": "amount", - "type": 6, - "typeName": "BalanceOf", - "docs": [] - }, - { - "name": "rationale", - "type": 69, - "typeName": "Option>", - "docs": [] - } - ], - "index": 15, - "docs": [ - "Transfers specified amount to any account.", - "Requires leader origin.", - "", - "# ", - "", - "## Weight", - "`O (1)`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "update_role_storage", - "fields": [ - { - "name": "worker_id", - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": "storage", - "type": 10, - "typeName": "Vec", - "docs": [] - } - ], - "index": 16, - "docs": [ - "Update the associated role storage." - ] - }, - { - "name": "fund_working_group_budget", - "fields": [ - { - "name": "member_id", - "type": 8, - "typeName": "MemberId", - "docs": [] - }, - { - "name": "amount", - "type": 6, - "typeName": "BalanceOf", - "docs": [] - }, - { - "name": "rationale", - "type": 10, - "typeName": "Vec", - "docs": [] - } - ], - "index": 17, - "docs": [ - "Fund working group budget by a member.", - "", - "", - "## Weight", - "`O (1)` Doesn't depend on the state or parameters", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "lead_remark", - "fields": [ - { - "name": "msg", - "type": 10, - "typeName": "Vec", - "docs": [] - } - ], - "index": 18, - "docs": [ - "Lead remark message", - "", - "# ", - "", - "## Weight", - "`O (1)`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "worker_remark", - "fields": [ - { - "name": "worker_id", - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": "msg", - "type": 10, - "typeName": "Vec", - "docs": [] - } - ], - "index": 19, - "docs": [ - "Worker remark message", - "", - "# ", - "", - "## Weight", - "`O (1)`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - } - ] - } - }, - "docs": [ - "Dispatchable calls.", - "", - "Each variant of this enum maps to a dispatchable function from the associated module." - ] - } - }, - { - "id": 392, - "type": { - "path": [ - "pallet_working_group", - "Call" - ], - "params": [ - { - "name": "T", - "type": null - }, - { - "name": "I", - "type": null - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "add_opening", - "fields": [ - { - "name": "description", - "type": 10, - "typeName": "Vec", - "docs": [] - }, - { - "name": "opening_type", - "type": 195, - "typeName": "OpeningType", - "docs": [] - }, - { - "name": "stake_policy", - "type": 188, - "typeName": "StakePolicy>", - "docs": [] - }, - { - "name": "reward_per_block", - "type": 105, - "typeName": "Option>", - "docs": [] - } - ], - "index": 0, - "docs": [ - "Add a job opening for a regular worker/lead role.", - "Require signed leader origin or the root (to add opening for the leader position).", - "", - "# ", - "", - "## Weight", - "`O (D)` where:", - "- `D` is the length of `description`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "apply_on_opening", - "fields": [ - { - "name": "p", - "type": 196, - "typeName": "ApplyOnOpeningParameters", - "docs": [] - } - ], - "index": 1, - "docs": [ - "Apply on a worker opening.", - "", - "# ", - "", - "## Weight", - "`O (D)` where:", - "- `D` is the length of `p.description`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "fill_opening", - "fields": [ - { - "name": "opening_id", - "type": 8, - "typeName": "OpeningId", - "docs": [] - }, - { - "name": "successful_application_ids", - "type": 101, - "typeName": "BTreeSet", - "docs": [] - } - ], - "index": 2, - "docs": [ - "Fill opening for the regular/lead position.", - "Require signed leader origin or the root (to fill opening for the leader position).", - "# ", - "", - "## Weight", - "`O (A)` where:", - "- `A` is the length of `successful_application_ids`", - "- DB:", - " - O(A)", - "# " - ] - }, - { - "name": "update_role_account", - "fields": [ - { - "name": "worker_id", - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": "new_role_account_id", - "type": 0, - "typeName": "T::AccountId", - "docs": [] - } - ], - "index": 3, - "docs": [ - "Update the associated role account of the active regular worker/lead.", - "", - "# ", - "", - "## Weight", - "`O (1)`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "leave_role", - "fields": [ - { - "name": "worker_id", - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": "rationale", - "type": 69, - "typeName": "Option>", - "docs": [] - } - ], - "index": 4, - "docs": [ - "Leave the role by the active worker.", - "# ", - "", - "## Weight", - "`O (1)`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "terminate_role", - "fields": [ - { - "name": "worker_id", - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": "penalty", - "type": 105, - "typeName": "Option>", - "docs": [] - }, - { - "name": "rationale", - "type": 69, - "typeName": "Option>", - "docs": [] - } - ], - "index": 5, - "docs": [ - "Terminate the active worker by the lead.", - "Requires signed leader origin or the root (to terminate the leader role).", - "# ", - "", - "## Weight", - "`O (P)` where:", - "- `P` is the length of `penalty.slashing_text`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "slash_stake", - "fields": [ - { - "name": "worker_id", - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": "penalty", - "type": 6, - "typeName": "BalanceOf", - "docs": [] - }, - { - "name": "rationale", - "type": 69, - "typeName": "Option>", - "docs": [] - } - ], - "index": 6, - "docs": [ - "Slashes the regular worker stake, demands a leader origin. No limits, no actions on zero stake.", - "If slashing balance greater than the existing stake - stake is slashed to zero.", - "Requires signed leader origin or the root (to slash the leader stake).", - "# ", - "", - "## Weight", - "`O (P)` where:", - "- `P` is the length of `penality.slashing_text`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "decrease_stake", - "fields": [ - { - "name": "worker_id", - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": "stake_balance_delta", - "type": 6, - "typeName": "BalanceOf", - "docs": [] - } - ], - "index": 7, - "docs": [ - "Decreases the regular worker/lead stake and returns the remainder to the", - "worker staking_account_id. Can be decreased to zero, no actions on zero stake.", - "Accepts the stake amount to decrease.", - "Requires signed leader origin or the root (to decrease the leader stake).", - "", - "# ", - "", - "## Weight", - "`O (1)`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "increase_stake", - "fields": [ - { - "name": "worker_id", - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": "stake_balance_delta", - "type": 6, - "typeName": "BalanceOf", - "docs": [] - } - ], - "index": 8, - "docs": [ - "Increases the regular worker/lead stake, demands a worker origin.", - "Locks tokens from the worker staking_account_id equal to new stake. No limits on the stake.", - "", - "# ", - "", - "## Weight", - "`O (1)`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "withdraw_application", - "fields": [ - { - "name": "application_id", - "type": 8, - "typeName": "ApplicationId", - "docs": [] - } - ], - "index": 9, - "docs": [ - "Withdraw the worker application. Can be done by the worker only.", - "", - "# ", - "", - "## Weight", - "`O (1)`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "cancel_opening", - "fields": [ - { - "name": "opening_id", - "type": 8, - "typeName": "OpeningId", - "docs": [] - } - ], - "index": 10, - "docs": [ - "Cancel an opening for the regular worker/lead position.", - "Require signed leader origin or the root (to cancel opening for the leader position).", - "", - "# ", - "", - "## Weight", - "`O (1)`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "set_budget", - "fields": [ - { - "name": "new_budget", - "type": 6, - "typeName": "BalanceOf", - "docs": [] - } - ], - "index": 11, - "docs": [ - "Sets a new budget for the working group.", - "Requires root origin.", - "", - "# ", - "", - "## Weight", - "`O (1)`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "update_reward_account", - "fields": [ - { - "name": "worker_id", - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": "new_reward_account_id", - "type": 0, - "typeName": "T::AccountId", - "docs": [] - } - ], - "index": 12, - "docs": [ - "Update the reward account associated with a set reward relationship for the active worker.", - "", - "# ", - "", - "## Weight", - "`O (1)`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "update_reward_amount", - "fields": [ - { - "name": "worker_id", - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": "reward_per_block", - "type": 105, - "typeName": "Option>", - "docs": [] - } - ], - "index": 13, - "docs": [ - "Update the reward per block for the active worker.", - "Require signed leader origin or the root (to update leader's reward amount).", - "", - "# ", - "", - "## Weight", - "`O (1)`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "set_status_text", - "fields": [ - { - "name": "status_text", - "type": 69, - "typeName": "Option>", - "docs": [] - } - ], - "index": 14, - "docs": [ - "Sets a new status text for the working group.", - "Requires root origin.", - "", - "# ", - "", - "## Weight", - "`O (S)` where:", - "- `S` is the length of the contents of `status_text` when it is not none", - "", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "spend_from_budget", - "fields": [ - { - "name": "account_id", - "type": 0, - "typeName": "T::AccountId", - "docs": [] - }, - { - "name": "amount", - "type": 6, - "typeName": "BalanceOf", - "docs": [] - }, - { - "name": "rationale", - "type": 69, - "typeName": "Option>", - "docs": [] - } - ], - "index": 15, - "docs": [ - "Transfers specified amount to any account.", - "Requires leader origin.", - "", - "# ", - "", - "## Weight", - "`O (1)`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "update_role_storage", - "fields": [ - { - "name": "worker_id", - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": "storage", - "type": 10, - "typeName": "Vec", - "docs": [] - } - ], - "index": 16, - "docs": [ - "Update the associated role storage." - ] - }, - { - "name": "fund_working_group_budget", - "fields": [ - { - "name": "member_id", - "type": 8, - "typeName": "MemberId", - "docs": [] - }, - { - "name": "amount", - "type": 6, - "typeName": "BalanceOf", - "docs": [] - }, - { - "name": "rationale", - "type": 10, - "typeName": "Vec", - "docs": [] - } - ], - "index": 17, - "docs": [ - "Fund working group budget by a member.", - "", - "", - "## Weight", - "`O (1)` Doesn't depend on the state or parameters", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "lead_remark", - "fields": [ - { - "name": "msg", - "type": 10, - "typeName": "Vec", - "docs": [] - } - ], - "index": 18, - "docs": [ - "Lead remark message", - "", - "# ", - "", - "## Weight", - "`O (1)`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "worker_remark", - "fields": [ - { - "name": "worker_id", - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": "msg", - "type": 10, - "typeName": "Vec", - "docs": [] - } - ], - "index": 19, - "docs": [ - "Worker remark message", - "", - "# ", - "", - "## Weight", - "`O (1)`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - } - ] - } - }, - "docs": [ - "Dispatchable calls.", - "", - "Each variant of this enum maps to a dispatchable function from the associated module." - ] - } - }, - { - "id": 393, - "type": { - "path": [ - "pallet_working_group", - "Call" - ], - "params": [ - { - "name": "T", - "type": null - }, - { - "name": "I", - "type": null - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "add_opening", - "fields": [ - { - "name": "description", - "type": 10, - "typeName": "Vec", - "docs": [] - }, - { - "name": "opening_type", - "type": 195, - "typeName": "OpeningType", - "docs": [] - }, - { - "name": "stake_policy", - "type": 188, - "typeName": "StakePolicy>", - "docs": [] - }, - { - "name": "reward_per_block", - "type": 105, - "typeName": "Option>", - "docs": [] - } - ], - "index": 0, - "docs": [ - "Add a job opening for a regular worker/lead role.", - "Require signed leader origin or the root (to add opening for the leader position).", - "", - "# ", - "", - "## Weight", - "`O (D)` where:", - "- `D` is the length of `description`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "apply_on_opening", - "fields": [ - { - "name": "p", - "type": 196, - "typeName": "ApplyOnOpeningParameters", - "docs": [] - } - ], - "index": 1, - "docs": [ - "Apply on a worker opening.", - "", - "# ", - "", - "## Weight", - "`O (D)` where:", - "- `D` is the length of `p.description`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "fill_opening", - "fields": [ - { - "name": "opening_id", - "type": 8, - "typeName": "OpeningId", - "docs": [] - }, - { - "name": "successful_application_ids", - "type": 101, - "typeName": "BTreeSet", - "docs": [] - } - ], - "index": 2, - "docs": [ - "Fill opening for the regular/lead position.", - "Require signed leader origin or the root (to fill opening for the leader position).", - "# ", - "", - "## Weight", - "`O (A)` where:", - "- `A` is the length of `successful_application_ids`", - "- DB:", - " - O(A)", - "# " - ] - }, - { - "name": "update_role_account", - "fields": [ - { - "name": "worker_id", - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": "new_role_account_id", - "type": 0, - "typeName": "T::AccountId", - "docs": [] - } - ], - "index": 3, - "docs": [ - "Update the associated role account of the active regular worker/lead.", - "", - "# ", - "", - "## Weight", - "`O (1)`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "leave_role", - "fields": [ - { - "name": "worker_id", - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": "rationale", - "type": 69, - "typeName": "Option>", - "docs": [] - } - ], - "index": 4, - "docs": [ - "Leave the role by the active worker.", - "# ", - "", - "## Weight", - "`O (1)`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "terminate_role", - "fields": [ - { - "name": "worker_id", - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": "penalty", - "type": 105, - "typeName": "Option>", - "docs": [] - }, - { - "name": "rationale", - "type": 69, - "typeName": "Option>", - "docs": [] - } - ], - "index": 5, - "docs": [ - "Terminate the active worker by the lead.", - "Requires signed leader origin or the root (to terminate the leader role).", - "# ", - "", - "## Weight", - "`O (P)` where:", - "- `P` is the length of `penalty.slashing_text`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "slash_stake", - "fields": [ - { - "name": "worker_id", - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": "penalty", - "type": 6, - "typeName": "BalanceOf", - "docs": [] - }, - { - "name": "rationale", - "type": 69, - "typeName": "Option>", - "docs": [] - } - ], - "index": 6, - "docs": [ - "Slashes the regular worker stake, demands a leader origin. No limits, no actions on zero stake.", - "If slashing balance greater than the existing stake - stake is slashed to zero.", - "Requires signed leader origin or the root (to slash the leader stake).", - "# ", - "", - "## Weight", - "`O (P)` where:", - "- `P` is the length of `penality.slashing_text`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "decrease_stake", - "fields": [ - { - "name": "worker_id", - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": "stake_balance_delta", - "type": 6, - "typeName": "BalanceOf", - "docs": [] - } - ], - "index": 7, - "docs": [ - "Decreases the regular worker/lead stake and returns the remainder to the", - "worker staking_account_id. Can be decreased to zero, no actions on zero stake.", - "Accepts the stake amount to decrease.", - "Requires signed leader origin or the root (to decrease the leader stake).", - "", - "# ", - "", - "## Weight", - "`O (1)`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "increase_stake", - "fields": [ - { - "name": "worker_id", - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": "stake_balance_delta", - "type": 6, - "typeName": "BalanceOf", - "docs": [] - } - ], - "index": 8, - "docs": [ - "Increases the regular worker/lead stake, demands a worker origin.", - "Locks tokens from the worker staking_account_id equal to new stake. No limits on the stake.", - "", - "# ", - "", - "## Weight", - "`O (1)`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "withdraw_application", - "fields": [ - { - "name": "application_id", - "type": 8, - "typeName": "ApplicationId", - "docs": [] - } - ], - "index": 9, - "docs": [ - "Withdraw the worker application. Can be done by the worker only.", - "", - "# ", - "", - "## Weight", - "`O (1)`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "cancel_opening", - "fields": [ - { - "name": "opening_id", - "type": 8, - "typeName": "OpeningId", - "docs": [] - } - ], - "index": 10, - "docs": [ - "Cancel an opening for the regular worker/lead position.", - "Require signed leader origin or the root (to cancel opening for the leader position).", - "", - "# ", - "", - "## Weight", - "`O (1)`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "set_budget", - "fields": [ - { - "name": "new_budget", - "type": 6, - "typeName": "BalanceOf", - "docs": [] - } - ], - "index": 11, - "docs": [ - "Sets a new budget for the working group.", - "Requires root origin.", - "", - "# ", - "", - "## Weight", - "`O (1)`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "update_reward_account", - "fields": [ - { - "name": "worker_id", - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": "new_reward_account_id", - "type": 0, - "typeName": "T::AccountId", - "docs": [] - } - ], - "index": 12, - "docs": [ - "Update the reward account associated with a set reward relationship for the active worker.", - "", - "# ", - "", - "## Weight", - "`O (1)`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "update_reward_amount", - "fields": [ - { - "name": "worker_id", - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": "reward_per_block", - "type": 105, - "typeName": "Option>", - "docs": [] - } - ], - "index": 13, - "docs": [ - "Update the reward per block for the active worker.", - "Require signed leader origin or the root (to update leader's reward amount).", - "", - "# ", - "", - "## Weight", - "`O (1)`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "set_status_text", - "fields": [ - { - "name": "status_text", - "type": 69, - "typeName": "Option>", - "docs": [] - } - ], - "index": 14, - "docs": [ - "Sets a new status text for the working group.", - "Requires root origin.", - "", - "# ", - "", - "## Weight", - "`O (S)` where:", - "- `S` is the length of the contents of `status_text` when it is not none", - "", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "spend_from_budget", - "fields": [ - { - "name": "account_id", - "type": 0, - "typeName": "T::AccountId", - "docs": [] - }, - { - "name": "amount", - "type": 6, - "typeName": "BalanceOf", - "docs": [] - }, - { - "name": "rationale", - "type": 69, - "typeName": "Option>", - "docs": [] - } - ], - "index": 15, - "docs": [ - "Transfers specified amount to any account.", - "Requires leader origin.", - "", - "# ", - "", - "## Weight", - "`O (1)`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "update_role_storage", - "fields": [ - { - "name": "worker_id", - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": "storage", - "type": 10, - "typeName": "Vec", - "docs": [] - } - ], - "index": 16, - "docs": [ - "Update the associated role storage." - ] - }, - { - "name": "fund_working_group_budget", - "fields": [ - { - "name": "member_id", - "type": 8, - "typeName": "MemberId", - "docs": [] - }, - { - "name": "amount", - "type": 6, - "typeName": "BalanceOf", - "docs": [] - }, - { - "name": "rationale", - "type": 10, - "typeName": "Vec", - "docs": [] - } - ], - "index": 17, - "docs": [ - "Fund working group budget by a member.", - "", - "", - "## Weight", - "`O (1)` Doesn't depend on the state or parameters", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "lead_remark", - "fields": [ - { - "name": "msg", - "type": 10, - "typeName": "Vec", - "docs": [] - } - ], - "index": 18, - "docs": [ - "Lead remark message", - "", - "# ", - "", - "## Weight", - "`O (1)`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - }, - { - "name": "worker_remark", - "fields": [ - { - "name": "worker_id", - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": "msg", - "type": 10, - "typeName": "Vec", - "docs": [] - } - ], - "index": 19, - "docs": [ - "Worker remark message", - "", - "# ", - "", - "## Weight", - "`O (1)`", - "- DB:", - " - O(1) doesn't depend on the state or parameters", - "# " - ] - } - ] - } - }, - "docs": [ - "Dispatchable calls.", - "", - "Each variant of this enum maps to a dispatchable function from the associated module." - ] - } - }, - { - "id": 394, - "type": { - "path": [ - "joystream_node_runtime", - "OriginCaller" - ], - "params": [], - "def": { - "variant": { - "variants": [ - { - "name": "system", - "fields": [ - { - "name": null, - "type": 395, - "typeName": "frame_system::Origin", - "docs": [] - } - ], - "index": 0, - "docs": [] - }, - { - "name": "Void", - "fields": [ - { - "name": null, - "type": 396, - "typeName": "self::sp_api_hidden_includes_construct_runtime::hidden_include::Void", - "docs": [] - } - ], - "index": 1, - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 395, - "type": { - "path": [ - "frame_support", - "dispatch", - "RawOrigin" - ], - "params": [ - { - "name": "AccountId", - "type": 0 - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "Root", - "fields": [], - "index": 0, - "docs": [] - }, - { - "name": "Signed", - "fields": [ - { - "name": null, - "type": 0, - "typeName": "AccountId", - "docs": [] - } - ], - "index": 1, - "docs": [] - }, - { - "name": "None", - "fields": [], - "index": 2, - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 396, - "type": { - "path": [ - "sp_core", - "Void" - ], - "params": [], - "def": { - "variant": { - "variants": [] - } - }, - "docs": [] - } - }, - { - "id": 397, - "type": { - "path": [ - "pallet_utility", - "pallet", - "Error" - ], - "params": [ - { - "name": "T", - "type": null - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "TooManyCalls", - "fields": [], - "index": 0, - "docs": [ - "Too many calls batched." - ] - } - ] - } - }, - "docs": [ - "\n\t\t\tCustom [dispatch errors](https://docs.substrate.io/v3/runtime/events-and-errors)\n\t\t\tof this pallet.\n\t\t\t" - ] - } - }, - { - "id": 398, - "type": { - "path": [ - "frame_support", - "storage", - "weak_bounded_vec", - "WeakBoundedVec" - ], - "params": [ - { - "name": "T", - "type": 399 - }, - { - "name": "S", - "type": null - } - ], - "def": { - "composite": { - "fields": [ - { - "name": null, - "type": 400, - "typeName": "Vec", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 399, - "type": { - "path": [], - "params": [], - "def": { - "tuple": [ - 246, - 8 - ] - }, - "docs": [] - } - }, - { - "id": 400, - "type": { - "path": [], - "params": [], - "def": { - "sequence": { - "type": 399 - } - }, - "docs": [] - } - }, - { - "id": 401, - "type": { - "path": [ - "frame_support", - "storage", - "bounded_vec", - "BoundedVec" - ], - "params": [ - { - "name": "T", - "type": 1 - }, - { - "name": "S", - "type": null - } - ], - "def": { - "composite": { - "fields": [ - { - "name": null, - "type": 402, - "typeName": "Vec", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 402, - "type": { - "path": [], - "params": [], - "def": { - "sequence": { - "type": 1 - } - }, - "docs": [] - } - }, - { - "id": 403, - "type": { - "path": [ - "Option" - ], - "params": [ - { - "name": "T", - "type": 404 - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "None", - "fields": [], - "index": 0, - "docs": [] - }, - { - "name": "Some", - "fields": [ - { - "name": null, - "type": 404, - "typeName": null, - "docs": [] - } - ], - "index": 1, - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 404, - "type": { - "path": [ - "sp_consensus_babe", - "digests", - "PreDigest" - ], - "params": [], - "def": { - "variant": { - "variants": [ - { - "name": "Primary", - "fields": [ - { - "name": null, - "type": 405, - "typeName": "PrimaryPreDigest", - "docs": [] - } - ], - "index": 1, - "docs": [] - }, - { - "name": "SecondaryPlain", - "fields": [ - { - "name": null, - "type": 406, - "typeName": "SecondaryPlainPreDigest", - "docs": [] - } - ], - "index": 2, - "docs": [] - }, - { - "name": "SecondaryVRF", - "fields": [ - { - "name": null, - "type": 407, - "typeName": "SecondaryVRFPreDigest", - "docs": [] - } - ], - "index": 3, - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 405, - "type": { - "path": [ - "sp_consensus_babe", - "digests", - "PrimaryPreDigest" - ], - "params": [], - "def": { - "composite": { - "fields": [ - { - "name": "authority_index", - "type": 4, - "typeName": "super::AuthorityIndex", - "docs": [] - }, - { - "name": "slot", - "type": 247, - "typeName": "Slot", - "docs": [] - }, - { - "name": "vrf_output", - "type": 1, - "typeName": "VRFOutput", - "docs": [] - }, - { - "name": "vrf_proof", - "type": 336, - "typeName": "VRFProof", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 406, - "type": { - "path": [ - "sp_consensus_babe", - "digests", - "SecondaryPlainPreDigest" - ], - "params": [], - "def": { - "composite": { - "fields": [ - { - "name": "authority_index", - "type": 4, - "typeName": "super::AuthorityIndex", - "docs": [] - }, - { - "name": "slot", - "type": 247, - "typeName": "Slot", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 407, - "type": { - "path": [ - "sp_consensus_babe", - "digests", - "SecondaryVRFPreDigest" - ], - "params": [], - "def": { - "composite": { - "fields": [ - { - "name": "authority_index", - "type": 4, - "typeName": "super::AuthorityIndex", - "docs": [] - }, - { - "name": "slot", - "type": 247, - "typeName": "Slot", - "docs": [] - }, - { - "name": "vrf_output", - "type": 1, - "typeName": "VRFOutput", - "docs": [] - }, - { - "name": "vrf_proof", - "type": 336, - "typeName": "VRFProof", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 408, - "type": { - "path": [ - "Option" - ], - "params": [ - { - "name": "T", - "type": 1 - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "None", - "fields": [], - "index": 0, - "docs": [] - }, - { - "name": "Some", - "fields": [ - { - "name": null, - "type": 1, - "typeName": null, - "docs": [] - } - ], - "index": 1, - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 409, - "type": { - "path": [ - "sp_consensus_babe", - "BabeEpochConfiguration" - ], - "params": [], - "def": { - "composite": { - "fields": [ - { - "name": "c", - "type": 194, - "typeName": "(u64, u64)", - "docs": [] - }, - { - "name": "allowed_slots", - "type": 250, - "typeName": "AllowedSlots", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 410, - "type": { - "path": [ - "pallet_babe", - "pallet", - "Error" - ], - "params": [ - { - "name": "T", - "type": null - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "InvalidEquivocationProof", - "fields": [], - "index": 0, - "docs": [ - "An equivocation proof provided as part of an equivocation report is invalid." - ] - }, - { - "name": "InvalidKeyOwnershipProof", - "fields": [], - "index": 1, - "docs": [ - "A key ownership proof provided as part of an equivocation report is invalid." - ] - }, - { - "name": "DuplicateOffenceReport", - "fields": [], - "index": 2, - "docs": [ - "A given equivocation report is valid but already previously reported." - ] - }, - { - "name": "InvalidConfiguration", - "fields": [], - "index": 3, - "docs": [ - "Submitted configuration is invalid." - ] - } - ] - } - }, - "docs": [ - "\n\t\t\tCustom [dispatch errors](https://docs.substrate.io/v3/runtime/events-and-errors)\n\t\t\tof this pallet.\n\t\t\t" - ] - } - }, - { - "id": 411, - "type": { - "path": [], - "params": [], - "def": { - "sequence": { - "type": 412 - } - }, - "docs": [] - } - }, - { - "id": 412, - "type": { - "path": [ - "pallet_authorship", - "UncleEntryItem" - ], - "params": [ - { - "name": "BlockNumber", - "type": 4 - }, - { - "name": "Hash", - "type": 9 - }, - { - "name": "Author", - "type": 0 - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "InclusionHeight", - "fields": [ - { - "name": null, - "type": 4, - "typeName": "BlockNumber", - "docs": [] - } - ], - "index": 0, - "docs": [] - }, - { - "name": "Uncle", - "fields": [ - { - "name": null, - "type": 9, - "typeName": "Hash", - "docs": [] - }, - { - "name": null, - "type": 58, - "typeName": "Option", - "docs": [] - } - ], - "index": 1, - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 413, - "type": { - "path": [ - "pallet_authorship", - "pallet", - "Error" - ], - "params": [ - { - "name": "T", - "type": null - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "InvalidUncleParent", - "fields": [], - "index": 0, - "docs": [ - "The uncle parent not in the chain." - ] - }, - { - "name": "UnclesAlreadySet", - "fields": [], - "index": 1, - "docs": [ - "Uncles already set in the block." - ] - }, - { - "name": "TooManyUncles", - "fields": [], - "index": 2, - "docs": [ - "Too many uncles." - ] - }, - { - "name": "GenesisUncle", - "fields": [], - "index": 3, - "docs": [ - "The uncle is genesis." - ] - }, - { - "name": "TooHighUncle", - "fields": [], - "index": 4, - "docs": [ - "The uncle is too high in chain." - ] - }, - { - "name": "UncleAlreadyIncluded", - "fields": [], - "index": 5, - "docs": [ - "The uncle is already included." - ] - }, - { - "name": "OldUncle", - "fields": [], - "index": 6, - "docs": [ - "The uncle isn't recent enough to be included." - ] - } - ] - } - }, - "docs": [ - "\n\t\t\tCustom [dispatch errors](https://docs.substrate.io/v3/runtime/events-and-errors)\n\t\t\tof this pallet.\n\t\t\t" - ] - } - }, - { - "id": 414, - "type": { - "path": [ - "frame_support", - "storage", - "weak_bounded_vec", - "WeakBoundedVec" - ], - "params": [ - { - "name": "T", - "type": 415 - }, - { - "name": "S", - "type": null - } - ], - "def": { - "composite": { - "fields": [ - { - "name": null, - "type": 417, - "typeName": "Vec", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 415, - "type": { - "path": [ - "pallet_balances", - "BalanceLock" - ], - "params": [ - { - "name": "Balance", - "type": 6 - } - ], - "def": { - "composite": { - "fields": [ - { - "name": "id", - "type": 236, - "typeName": "LockIdentifier", - "docs": [] - }, - { - "name": "amount", - "type": 6, - "typeName": "Balance", - "docs": [] - }, - { - "name": "reasons", - "type": 416, - "typeName": "Reasons", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 416, - "type": { - "path": [ - "pallet_balances", - "Reasons" - ], - "params": [], - "def": { - "variant": { - "variants": [ - { - "name": "Fee", - "fields": [], - "index": 0, - "docs": [] - }, - { - "name": "Misc", - "fields": [], - "index": 1, - "docs": [] - }, - { - "name": "All", - "fields": [], - "index": 2, - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 417, - "type": { - "path": [], - "params": [], - "def": { - "sequence": { - "type": 415 - } - }, - "docs": [] - } - }, - { - "id": 418, - "type": { - "path": [ - "frame_support", - "storage", - "bounded_vec", - "BoundedVec" - ], - "params": [ - { - "name": "T", - "type": 419 - }, - { - "name": "S", - "type": null - } - ], - "def": { - "composite": { - "fields": [ - { - "name": null, - "type": 420, - "typeName": "Vec", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 419, - "type": { - "path": [ - "pallet_balances", - "ReserveData" - ], - "params": [ - { - "name": "ReserveIdentifier", - "type": 236 - }, - { - "name": "Balance", - "type": 6 - } - ], - "def": { - "composite": { - "fields": [ - { - "name": "id", - "type": 236, - "typeName": "ReserveIdentifier", - "docs": [] - }, - { - "name": "amount", - "type": 6, - "typeName": "Balance", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 420, - "type": { - "path": [], - "params": [], - "def": { - "sequence": { - "type": 419 - } - }, - "docs": [] - } - }, - { - "id": 421, - "type": { - "path": [ - "pallet_balances", - "Releases" - ], - "params": [], - "def": { - "variant": { - "variants": [ - { - "name": "V1_0_0", - "fields": [], - "index": 0, - "docs": [] - }, - { - "name": "V2_0_0", - "fields": [], - "index": 1, - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 422, - "type": { - "path": [ - "pallet_balances", - "pallet", - "Error" - ], - "params": [ - { - "name": "T", - "type": null - }, - { - "name": "I", - "type": null - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "VestingBalance", - "fields": [], - "index": 0, - "docs": [ - "Vesting balance too high to send value" - ] - }, - { - "name": "LiquidityRestrictions", - "fields": [], - "index": 1, - "docs": [ - "Account liquidity restrictions prevent withdrawal" - ] - }, - { - "name": "InsufficientBalance", - "fields": [], - "index": 2, - "docs": [ - "Balance too low to send value" - ] - }, - { - "name": "ExistentialDeposit", - "fields": [], - "index": 3, - "docs": [ - "Value too low to create account due to existential deposit" - ] - }, - { - "name": "KeepAlive", - "fields": [], - "index": 4, - "docs": [ - "Transfer/payment would kill account" - ] - }, - { - "name": "ExistingVestingSchedule", - "fields": [], - "index": 5, - "docs": [ - "A vesting schedule already exists for this account" - ] - }, - { - "name": "DeadAccount", - "fields": [], - "index": 6, - "docs": [ - "Beneficiary account must pre-exist" - ] - }, - { - "name": "TooManyReserves", - "fields": [], - "index": 7, - "docs": [ - "Number of named reserves exceed MaxReserves" - ] - } - ] - } - }, - "docs": [ - "\n\t\t\tCustom [dispatch errors](https://docs.substrate.io/v3/runtime/events-and-errors)\n\t\t\tof this pallet.\n\t\t\t" - ] - } - }, - { - "id": 423, - "type": { - "path": [ - "sp_arithmetic", - "fixed_point", - "FixedU128" - ], - "params": [], - "def": { - "composite": { - "fields": [ - { - "name": null, - "type": 6, - "typeName": "u128", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 424, - "type": { - "path": [ - "pallet_transaction_payment", - "Releases" - ], - "params": [], - "def": { - "variant": { - "variants": [ - { - "name": "V1Ancient", - "fields": [], - "index": 0, - "docs": [] - }, - { - "name": "V2", - "fields": [], - "index": 1, - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 425, - "type": { - "path": [ - "pallet_election_provider_multi_phase", - "Phase" - ], - "params": [ - { - "name": "Bn", - "type": 4 - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "Off", - "fields": [], - "index": 0, - "docs": [] - }, - { - "name": "Signed", - "fields": [], - "index": 1, - "docs": [] - }, - { - "name": "Unsigned", - "fields": [ - { - "name": null, - "type": 426, - "typeName": "(bool, Bn)", - "docs": [] - } - ], - "index": 2, - "docs": [] - }, - { - "name": "Emergency", - "fields": [], - "index": 3, - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 426, - "type": { - "path": [], - "params": [], - "def": { - "tuple": [ - 34, - 4 - ] - }, - "docs": [] - } - }, - { - "id": 427, - "type": { - "path": [ - "pallet_election_provider_multi_phase", - "ReadySolution" - ], - "params": [ - { - "name": "A", - "type": 0 - } - ], - "def": { - "composite": { - "fields": [ - { - "name": "supports", - "type": 312, - "typeName": "Supports", - "docs": [] - }, - { - "name": "score", - "type": 309, - "typeName": "ElectionScore", - "docs": [] - }, - { - "name": "compute", - "type": 33, - "typeName": "ElectionCompute", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 428, - "type": { - "path": [ - "pallet_election_provider_multi_phase", - "RoundSnapshot" - ], - "params": [ - { - "name": "T", - "type": null - } - ], - "def": { - "composite": { - "fields": [ - { - "name": "voters", - "type": 429, - "typeName": "Vec>", - "docs": [] - }, - { - "name": "targets", - "type": 319, - "typeName": "Vec", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 429, - "type": { - "path": [], - "params": [], - "def": { - "sequence": { - "type": 430 - } - }, - "docs": [] - } - }, - { - "id": 430, - "type": { - "path": [], - "params": [], - "def": { - "tuple": [ - 0, - 8, - 431 - ] - }, - "docs": [] - } - }, - { - "id": 431, - "type": { - "path": [ - "frame_support", - "storage", - "bounded_vec", - "BoundedVec" - ], - "params": [ - { - "name": "T", - "type": 0 - }, - { - "name": "S", - "type": null - } - ], - "def": { - "composite": { - "fields": [ - { - "name": null, - "type": 319, - "typeName": "Vec", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 432, - "type": { - "path": [ - "frame_support", - "storage", - "bounded_btree_map", - "BoundedBTreeMap" - ], - "params": [ - { - "name": "K", - "type": 309 - }, - { - "name": "V", - "type": 4 - }, - { - "name": "S", - "type": null - } - ], - "def": { - "composite": { - "fields": [ - { - "name": null, - "type": 433, - "typeName": "BTreeMap", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 433, - "type": { - "path": [ - "BTreeMap" - ], - "params": [ - { - "name": "K", - "type": 309 - }, - { - "name": "V", - "type": 4 - } - ], - "def": { - "composite": { - "fields": [ - { - "name": null, - "type": 434, - "typeName": null, - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 434, - "type": { - "path": [], - "params": [], - "def": { - "sequence": { - "type": 435 - } - }, - "docs": [] - } - }, - { - "id": 435, - "type": { - "path": [], - "params": [], - "def": { - "tuple": [ - 309, - 4 - ] - }, - "docs": [] - } - }, - { - "id": 436, - "type": { - "path": [ - "pallet_election_provider_multi_phase", - "signed", - "SignedSubmission" - ], - "params": [ - { - "name": "AccountId", - "type": 0 - }, - { - "name": "Balance", - "type": 6 - }, - { - "name": "Solution", - "type": 258 - } - ], - "def": { - "composite": { - "fields": [ - { - "name": "who", - "type": 0, - "typeName": "AccountId", - "docs": [] - }, - { - "name": "deposit", - "type": 6, - "typeName": "Balance", - "docs": [] - }, - { - "name": "raw_solution", - "type": 257, - "typeName": "RawSolution", - "docs": [] - }, - { - "name": "call_fee", - "type": 6, - "typeName": "Balance", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 437, - "type": { - "path": [ - "pallet_election_provider_multi_phase", - "pallet", - "Error" - ], - "params": [ - { - "name": "T", - "type": null - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "PreDispatchEarlySubmission", - "fields": [], - "index": 0, - "docs": [ - "Submission was too early." - ] - }, - { - "name": "PreDispatchWrongWinnerCount", - "fields": [], - "index": 1, - "docs": [ - "Wrong number of winners presented." - ] - }, - { - "name": "PreDispatchWeakSubmission", - "fields": [], - "index": 2, - "docs": [ - "Submission was too weak, score-wise." - ] - }, - { - "name": "SignedQueueFull", - "fields": [], - "index": 3, - "docs": [ - "The queue was full, and the solution was not better than any of the existing ones." - ] - }, - { - "name": "SignedCannotPayDeposit", - "fields": [], - "index": 4, - "docs": [ - "The origin failed to pay the deposit." - ] - }, - { - "name": "SignedInvalidWitness", - "fields": [], - "index": 5, - "docs": [ - "Witness data to dispatchable is invalid." - ] - }, - { - "name": "SignedTooMuchWeight", - "fields": [], - "index": 6, - "docs": [ - "The signed submission consumes too much weight" - ] - }, - { - "name": "OcwCallWrongEra", - "fields": [], - "index": 7, - "docs": [ - "OCW submitted solution for wrong round" - ] - }, - { - "name": "MissingSnapshotMetadata", - "fields": [], - "index": 8, - "docs": [ - "Snapshot metadata should exist but didn't." - ] - }, - { - "name": "InvalidSubmissionIndex", - "fields": [], - "index": 9, - "docs": [ - "`Self::insert_submission` returned an invalid index." - ] - }, - { - "name": "CallNotAllowed", - "fields": [], - "index": 10, - "docs": [ - "The call is not allowed at this point." - ] - }, - { - "name": "FallbackFailed", - "fields": [], - "index": 11, - "docs": [ - "The fallback failed" - ] - } - ] - } - }, - "docs": [ - "Error of the pallet that can be returned in response to dispatches." - ] - } - }, - { - "id": 438, - "type": { - "path": [ - "pallet_staking", - "StakingLedger" - ], - "params": [ - { - "name": "T", - "type": null - } - ], - "def": { - "composite": { - "fields": [ - { - "name": "stash", - "type": 0, - "typeName": "T::AccountId", - "docs": [] - }, - { - "name": "total", - "type": 52, - "typeName": "BalanceOf", - "docs": [] - }, - { - "name": "active", - "type": 52, - "typeName": "BalanceOf", - "docs": [] - }, - { - "name": "unlocking", - "type": 439, - "typeName": "BoundedVec>, MaxUnlockingChunks>", - "docs": [] - }, - { - "name": "claimed_rewards", - "type": 321, - "typeName": "Vec", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 439, - "type": { - "path": [ - "frame_support", - "storage", - "bounded_vec", - "BoundedVec" - ], - "params": [ - { - "name": "T", - "type": 440 - }, - { - "name": "S", - "type": null - } - ], - "def": { - "composite": { - "fields": [ - { - "name": null, - "type": 441, - "typeName": "Vec", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 440, - "type": { - "path": [ - "pallet_staking", - "UnlockChunk" - ], - "params": [ - { - "name": "Balance", - "type": 6 - } - ], - "def": { - "composite": { - "fields": [ - { - "name": "value", - "type": 52, - "typeName": "Balance", - "docs": [] - }, - { - "name": "era", - "type": 221, - "typeName": "EraIndex", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 441, - "type": { - "path": [], - "params": [], - "def": { - "sequence": { - "type": 440 - } - }, - "docs": [] - } - }, - { - "id": 442, - "type": { - "path": [ - "pallet_staking", - "Nominations" - ], - "params": [ - { - "name": "T", - "type": null - } - ], - "def": { - "composite": { - "fields": [ - { - "name": "targets", - "type": 431, - "typeName": "BoundedVec", - "docs": [] - }, - { - "name": "submitted_in", - "type": 4, - "typeName": "EraIndex", - "docs": [] - }, - { - "name": "suppressed", - "type": 34, - "typeName": "bool", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 443, - "type": { - "path": [ - "pallet_staking", - "ActiveEraInfo" - ], - "params": [], - "def": { - "composite": { - "fields": [ - { - "name": "index", - "type": 4, - "typeName": "EraIndex", - "docs": [] - }, - { - "name": "start", - "type": 70, - "typeName": "Option", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 444, - "type": { - "path": [], - "params": [], - "def": { - "tuple": [ - 4, - 0 - ] - }, - "docs": [] - } - }, - { - "id": 445, - "type": { - "path": [ - "pallet_staking", - "EraRewardPoints" - ], - "params": [ - { - "name": "AccountId", - "type": 0 - } - ], - "def": { - "composite": { - "fields": [ - { - "name": "total", - "type": 4, - "typeName": "RewardPoint", - "docs": [] - }, - { - "name": "individual", - "type": 446, - "typeName": "BTreeMap", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 446, - "type": { - "path": [ - "BTreeMap" - ], - "params": [ - { - "name": "K", - "type": 0 - }, - { - "name": "V", - "type": 4 - } - ], - "def": { - "composite": { - "fields": [ - { - "name": null, - "type": 447, - "typeName": null, - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 447, - "type": { - "path": [], - "params": [], - "def": { - "sequence": { - "type": 448 - } - }, - "docs": [] - } - }, - { - "id": 448, - "type": { - "path": [], - "params": [], - "def": { - "tuple": [ - 0, - 4 - ] - }, - "docs": [] - } - }, - { - "id": 449, - "type": { - "path": [ - "pallet_staking", - "Forcing" - ], - "params": [], - "def": { - "variant": { - "variants": [ - { - "name": "NotForcing", - "fields": [], - "index": 0, - "docs": [] - }, - { - "name": "ForceNew", - "fields": [], - "index": 1, - "docs": [] - }, - { - "name": "ForceNone", - "fields": [], - "index": 2, - "docs": [] - }, - { - "name": "ForceAlways", - "fields": [], - "index": 3, - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 450, - "type": { - "path": [], - "params": [], - "def": { - "sequence": { - "type": 451 - } - }, - "docs": [] - } - }, - { - "id": 451, - "type": { - "path": [ - "pallet_staking", - "UnappliedSlash" - ], - "params": [ - { - "name": "AccountId", - "type": 0 - }, - { - "name": "Balance", - "type": 6 - } - ], - "def": { - "composite": { - "fields": [ - { - "name": "validator", - "type": 0, - "typeName": "AccountId", - "docs": [] - }, - { - "name": "own", - "type": 6, - "typeName": "Balance", - "docs": [] - }, - { - "name": "others", - "type": 315, - "typeName": "Vec<(AccountId, Balance)>", - "docs": [] - }, - { - "name": "reporters", - "type": 319, - "typeName": "Vec", - "docs": [] - }, - { - "name": "payout", - "type": 6, - "typeName": "Balance", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 452, - "type": { - "path": [], - "params": [], - "def": { - "tuple": [ - 39, - 6 - ] - }, - "docs": [] - } - }, - { - "id": 453, - "type": { - "path": [ - "pallet_staking", - "slashing", - "SlashingSpans" - ], - "params": [], - "def": { - "composite": { - "fields": [ - { - "name": "span_index", - "type": 4, - "typeName": "SpanIndex", - "docs": [] - }, - { - "name": "last_start", - "type": 4, - "typeName": "EraIndex", - "docs": [] - }, - { - "name": "last_nonzero_slash", - "type": 4, - "typeName": "EraIndex", - "docs": [] - }, - { - "name": "prior", - "type": 321, - "typeName": "Vec", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 454, - "type": { - "path": [ - "pallet_staking", - "slashing", - "SpanRecord" - ], - "params": [ - { - "name": "Balance", - "type": 6 - } - ], - "def": { - "composite": { - "fields": [ - { - "name": "slashed", - "type": 6, - "typeName": "Balance", - "docs": [] - }, - { - "name": "paid_out", - "type": 6, - "typeName": "Balance", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 455, - "type": { - "path": [], - "params": [], - "def": { - "sequence": { - "type": 456 - } - }, - "docs": [] - } - }, - { - "id": 456, - "type": { - "path": [], - "params": [], - "def": { - "tuple": [ - 4, - 34 - ] - }, - "docs": [] - } - }, - { - "id": 457, - "type": { - "path": [ - "pallet_staking", - "Releases" - ], - "params": [], - "def": { - "variant": { - "variants": [ - { - "name": "V1_0_0Ancient", - "fields": [], - "index": 0, - "docs": [] - }, - { - "name": "V2_0_0", - "fields": [], - "index": 1, - "docs": [] - }, - { - "name": "V3_0_0", - "fields": [], - "index": 2, - "docs": [] - }, - { - "name": "V4_0_0", - "fields": [], - "index": 3, - "docs": [] - }, - { - "name": "V5_0_0", - "fields": [], - "index": 4, - "docs": [] - }, - { - "name": "V6_0_0", - "fields": [], - "index": 5, - "docs": [] - }, - { - "name": "V7_0_0", - "fields": [], - "index": 6, - "docs": [] - }, - { - "name": "V8_0_0", - "fields": [], - "index": 7, - "docs": [] - }, - { - "name": "V9_0_0", - "fields": [], - "index": 8, - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 458, - "type": { - "path": [ - "pallet_staking", - "pallet", - "pallet", - "Error" - ], - "params": [ - { - "name": "T", - "type": null - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "NotController", - "fields": [], - "index": 0, - "docs": [ - "Not a controller account." - ] - }, - { - "name": "NotStash", - "fields": [], - "index": 1, - "docs": [ - "Not a stash account." - ] - }, - { - "name": "AlreadyBonded", - "fields": [], - "index": 2, - "docs": [ - "Stash is already bonded." - ] - }, - { - "name": "AlreadyPaired", - "fields": [], - "index": 3, - "docs": [ - "Controller is already paired." - ] - }, - { - "name": "EmptyTargets", - "fields": [], - "index": 4, - "docs": [ - "Targets cannot be empty." - ] - }, - { - "name": "DuplicateIndex", - "fields": [], - "index": 5, - "docs": [ - "Duplicate index." - ] - }, - { - "name": "InvalidSlashIndex", - "fields": [], - "index": 6, - "docs": [ - "Slash record index out of bounds." - ] - }, - { - "name": "InsufficientBond", - "fields": [], - "index": 7, - "docs": [ - "Cannot have a validator or nominator role, with value less than the minimum defined by", - "governance (see `MinValidatorBond` and `MinNominatorBond`). If unbonding is the", - "intention, `chill` first to remove one's role as validator/nominator." - ] - }, - { - "name": "NoMoreChunks", - "fields": [], - "index": 8, - "docs": [ - "Can not schedule more unlock chunks." - ] - }, - { - "name": "NoUnlockChunk", - "fields": [], - "index": 9, - "docs": [ - "Can not rebond without unlocking chunks." - ] - }, - { - "name": "FundedTarget", - "fields": [], - "index": 10, - "docs": [ - "Attempting to target a stash that still has funds." - ] - }, - { - "name": "InvalidEraToReward", - "fields": [], - "index": 11, - "docs": [ - "Invalid era to reward." - ] - }, - { - "name": "InvalidNumberOfNominations", - "fields": [], - "index": 12, - "docs": [ - "Invalid number of nominations." - ] - }, - { - "name": "NotSortedAndUnique", - "fields": [], - "index": 13, - "docs": [ - "Items are not sorted and unique." - ] - }, - { - "name": "AlreadyClaimed", - "fields": [], - "index": 14, - "docs": [ - "Rewards for this era have already been claimed for this validator." - ] - }, - { - "name": "IncorrectHistoryDepth", - "fields": [], - "index": 15, - "docs": [ - "Incorrect previous history depth input provided." - ] - }, - { - "name": "IncorrectSlashingSpans", - "fields": [], - "index": 16, - "docs": [ - "Incorrect number of slashing spans provided." - ] - }, - { - "name": "BadState", - "fields": [], - "index": 17, - "docs": [ - "Internal state has become somehow corrupted and the operation cannot continue." - ] - }, - { - "name": "TooManyTargets", - "fields": [], - "index": 18, - "docs": [ - "Too many nomination targets supplied." - ] - }, - { - "name": "BadTarget", - "fields": [], - "index": 19, - "docs": [ - "A nomination target was supplied that was blocked or otherwise not a validator." - ] - }, - { - "name": "CannotChillOther", - "fields": [], - "index": 20, - "docs": [ - "The user has enough bond and thus cannot be chilled forcefully by an external person." - ] - }, - { - "name": "TooManyNominators", - "fields": [], - "index": 21, - "docs": [ - "There are too many nominators in the system. Governance needs to adjust the staking", - "settings to keep things safe for the runtime." - ] - }, - { - "name": "TooManyValidators", - "fields": [], - "index": 22, - "docs": [ - "There are too many validators in the system. Governance needs to adjust the staking", - "settings to keep things safe for the runtime." - ] - }, - { - "name": "CommissionTooLow", - "fields": [], - "index": 23, - "docs": [ - "Commission is too low. Must be at least `MinCommission`." - ] - } - ] - } - }, - "docs": [ - "\n\t\t\tCustom [dispatch errors](https://docs.substrate.io/v3/runtime/events-and-errors)\n\t\t\tof this pallet.\n\t\t\t" - ] - } - }, - { - "id": 459, - "type": { - "path": [], - "params": [], - "def": { - "sequence": { - "type": 460 - } - }, - "docs": [] - } - }, - { - "id": 460, - "type": { - "path": [], - "params": [], - "def": { - "tuple": [ - 0, - 327 - ] - }, - "docs": [] - } - }, - { - "id": 461, - "type": { - "path": [], - "params": [], - "def": { - "tuple": [ - 462, - 10 - ] - }, - "docs": [] - } - }, - { - "id": 462, - "type": { - "path": [ - "sp_core", - "crypto", - "KeyTypeId" - ], - "params": [], - "def": { - "composite": { - "fields": [ - { - "name": null, - "type": 14, - "typeName": "[u8; 4]", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 463, - "type": { - "path": [ - "pallet_session", - "pallet", - "Error" - ], - "params": [ - { - "name": "T", - "type": null - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "InvalidProof", - "fields": [], - "index": 0, - "docs": [ - "Invalid ownership proof." - ] - }, - { - "name": "NoAssociatedValidatorId", - "fields": [], - "index": 1, - "docs": [ - "No associated validator ID for account." - ] - }, - { - "name": "DuplicatedKey", - "fields": [], - "index": 2, - "docs": [ - "Registered duplicate key." - ] - }, - { - "name": "NoKeys", - "fields": [], - "index": 3, - "docs": [ - "No keys are associated with this account." - ] - }, - { - "name": "NoAccount", - "fields": [], - "index": 4, - "docs": [ - "Key setting account is not live, so it's impossible to associate keys." - ] - } - ] - } - }, - "docs": [ - "Error for the session pallet." - ] - } - }, - { - "id": 464, - "type": { - "path": [], - "params": [], - "def": { - "tuple": [ - 9, - 4 - ] - }, - "docs": [] - } - }, - { - "id": 465, - "type": { - "path": [ - "pallet_grandpa", - "StoredState" - ], - "params": [ - { - "name": "N", - "type": 4 - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "Live", - "fields": [], - "index": 0, - "docs": [] - }, - { - "name": "PendingPause", - "fields": [ - { - "name": "scheduled_at", - "type": 4, - "typeName": "N", - "docs": [] - }, - { - "name": "delay", - "type": 4, - "typeName": "N", - "docs": [] - } - ], - "index": 1, - "docs": [] - }, - { - "name": "Paused", - "fields": [], - "index": 2, - "docs": [] - }, - { - "name": "PendingResume", - "fields": [ - { - "name": "scheduled_at", - "type": 4, - "typeName": "N", - "docs": [] - }, - { - "name": "delay", - "type": 4, - "typeName": "N", - "docs": [] - } - ], - "index": 3, - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 466, - "type": { - "path": [ - "pallet_grandpa", - "StoredPendingChange" - ], - "params": [ - { - "name": "N", - "type": 4 - }, - { - "name": "Limit", - "type": null - } - ], - "def": { - "composite": { - "fields": [ - { - "name": "scheduled_at", - "type": 4, - "typeName": "N", - "docs": [] - }, - { - "name": "delay", - "type": 4, - "typeName": "N", - "docs": [] - }, - { - "name": "next_authorities", - "type": 467, - "typeName": "BoundedAuthorityList", - "docs": [] - }, - { - "name": "forced", - "type": 106, - "typeName": "Option", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 467, - "type": { - "path": [ - "frame_support", - "storage", - "weak_bounded_vec", - "WeakBoundedVec" - ], - "params": [ - { - "name": "T", - "type": 43 - }, - { - "name": "S", - "type": null - } - ], - "def": { - "composite": { - "fields": [ - { - "name": null, - "type": 42, - "typeName": "Vec", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 468, - "type": { - "path": [ - "pallet_grandpa", - "pallet", - "Error" - ], - "params": [ - { - "name": "T", - "type": null - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "PauseFailed", - "fields": [], - "index": 0, - "docs": [ - "Attempt to signal GRANDPA pause when the authority set isn't live", - "(either paused or already pending pause)." - ] - }, - { - "name": "ResumeFailed", - "fields": [], - "index": 1, - "docs": [ - "Attempt to signal GRANDPA resume when the authority set isn't paused", - "(either live or already pending resume)." - ] - }, - { - "name": "ChangePending", - "fields": [], - "index": 2, - "docs": [ - "Attempt to signal GRANDPA change with one already pending." - ] - }, - { - "name": "TooSoon", - "fields": [], - "index": 3, - "docs": [ - "Cannot signal forced change so soon after last." - ] - }, - { - "name": "InvalidKeyOwnershipProof", - "fields": [], - "index": 4, - "docs": [ - "A key ownership proof provided as part of an equivocation report is invalid." - ] - }, - { - "name": "InvalidEquivocationProof", - "fields": [], - "index": 5, - "docs": [ - "An equivocation proof provided as part of an equivocation report is invalid." - ] - }, - { - "name": "DuplicateOffenceReport", - "fields": [], - "index": 6, - "docs": [ - "A given equivocation report is valid but already previously reported." - ] - } - ] - } - }, - "docs": [ - "\n\t\t\tCustom [dispatch errors](https://docs.substrate.io/v3/runtime/events-and-errors)\n\t\t\tof this pallet.\n\t\t\t" - ] - } - }, - { - "id": 469, - "type": { - "path": [ - "frame_support", - "storage", - "weak_bounded_vec", - "WeakBoundedVec" - ], - "params": [ - { - "name": "T", - "type": 328 - }, - { - "name": "S", - "type": null - } - ], - "def": { - "composite": { - "fields": [ - { - "name": null, - "type": 470, - "typeName": "Vec", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 470, - "type": { - "path": [], - "params": [], - "def": { - "sequence": { - "type": 328 - } - }, - "docs": [] - } - }, - { - "id": 471, - "type": { - "path": [ - "frame_support", - "storage", - "weak_bounded_vec", - "WeakBoundedVec" - ], - "params": [ - { - "name": "T", - "type": 47 - }, - { - "name": "S", - "type": null - } - ], - "def": { - "composite": { - "fields": [ - { - "name": null, - "type": 472, - "typeName": "Vec", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 472, - "type": { - "path": [], - "params": [], - "def": { - "sequence": { - "type": 47 - } - }, - "docs": [] - } - }, - { - "id": 473, - "type": { - "path": [ - "frame_support", - "traits", - "misc", - "WrapperOpaque" - ], - "params": [ - { - "name": "T", - "type": 474 - } - ], - "def": { - "composite": { - "fields": [ - { - "name": null, - "type": 221, - "typeName": null, - "docs": [] - }, - { - "name": null, - "type": 474, - "typeName": "T", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 474, - "type": { - "path": [ - "pallet_im_online", - "BoundedOpaqueNetworkState" - ], - "params": [ - { - "name": "PeerIdEncodingLimit", - "type": null - }, - { - "name": "MultiAddrEncodingLimit", - "type": null - }, - { - "name": "AddressesLimit", - "type": null - } - ], - "def": { - "composite": { - "fields": [ - { - "name": "peer_id", - "type": 475, - "typeName": "WeakBoundedVec", - "docs": [] - }, - { - "name": "external_addresses", - "type": 476, - "typeName": "WeakBoundedVec, AddressesLimit\n>", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 475, - "type": { - "path": [ - "frame_support", - "storage", - "weak_bounded_vec", - "WeakBoundedVec" - ], - "params": [ - { - "name": "T", - "type": 2 - }, - { - "name": "S", - "type": null - } - ], - "def": { - "composite": { - "fields": [ - { - "name": null, - "type": 10, - "typeName": "Vec", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 476, - "type": { - "path": [ - "frame_support", - "storage", - "weak_bounded_vec", - "WeakBoundedVec" - ], - "params": [ - { - "name": "T", - "type": 475 - }, - { - "name": "S", - "type": null - } - ], - "def": { - "composite": { - "fields": [ - { - "name": null, - "type": 477, - "typeName": "Vec", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 477, - "type": { - "path": [], - "params": [], - "def": { - "sequence": { - "type": 475 - } - }, - "docs": [] - } - }, - { - "id": 478, - "type": { - "path": [ - "pallet_im_online", - "pallet", - "Error" - ], - "params": [ - { - "name": "T", - "type": null - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "InvalidKey", - "fields": [], - "index": 0, - "docs": [ - "Non existent public key." - ] - }, - { - "name": "DuplicatedHeartbeat", - "fields": [], - "index": 1, - "docs": [ - "Duplicated heartbeat." - ] - } - ] - } - }, - "docs": [ - "\n\t\t\tCustom [dispatch errors](https://docs.substrate.io/v3/runtime/events-and-errors)\n\t\t\tof this pallet.\n\t\t\t" - ] - } - }, - { - "id": 479, - "type": { - "path": [ - "sp_staking", - "offence", - "OffenceDetails" - ], - "params": [ - { - "name": "Reporter", - "type": 0 - }, - { - "name": "Offender", - "type": 50 - } - ], - "def": { - "composite": { - "fields": [ - { - "name": "offender", - "type": 50, - "typeName": "Offender", - "docs": [] - }, - { - "name": "reporters", - "type": 319, - "typeName": "Vec", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 480, - "type": { - "path": [], - "params": [], - "def": { - "tuple": [ - 56, - 10 - ] - }, - "docs": [] - } - }, - { - "id": 481, - "type": { - "path": [ - "frame_support", - "storage", - "bounded_vec", - "BoundedVec" - ], - "params": [ - { - "name": "T", - "type": 9 - }, - { - "name": "S", - "type": null - } - ], - "def": { - "composite": { - "fields": [ - { - "name": null, - "type": 217, - "typeName": "Vec", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 482, - "type": { - "path": [ - "pallet_sudo", - "pallet", - "Error" - ], - "params": [ - { - "name": "T", - "type": null - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "RequireSudo", - "fields": [], - "index": 0, - "docs": [ - "Sender must be the Sudo account" - ] - } - ] - } - }, - "docs": [ - "Error for the Sudo pallet" - ] - } - }, - { - "id": 483, - "type": { - "path": [ - "pallet_bags_list", - "list", - "Node" - ], - "params": [ - { - "name": "T", - "type": null - }, - { - "name": "I", - "type": null - } - ], - "def": { - "composite": { - "fields": [ - { - "name": "id", - "type": 0, - "typeName": "T::AccountId", - "docs": [] - }, - { - "name": "prev", - "type": 58, - "typeName": "Option", - "docs": [] - }, - { - "name": "next", - "type": 58, - "typeName": "Option", - "docs": [] - }, - { - "name": "bag_upper", - "type": 8, - "typeName": "T::Score", - "docs": [] - }, - { - "name": "score", - "type": 8, - "typeName": "T::Score", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 484, - "type": { - "path": [ - "pallet_bags_list", - "list", - "Bag" - ], - "params": [ - { - "name": "T", - "type": null - }, - { - "name": "I", - "type": null - } - ], - "def": { - "composite": { - "fields": [ - { - "name": "head", - "type": 58, - "typeName": "Option", - "docs": [] - }, - { - "name": "tail", - "type": 58, - "typeName": "Option", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 485, - "type": { - "path": [ - "pallet_bags_list", - "pallet", - "Error" - ], - "params": [ - { - "name": "T", - "type": null - }, - { - "name": "I", - "type": null - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "List", - "fields": [ - { - "name": null, - "type": 486, - "typeName": "ListError", - "docs": [] - } - ], - "index": 0, - "docs": [ - "A error in the list interface implementation." - ] - } - ] - } - }, - "docs": [ - "\n\t\t\tCustom [dispatch errors](https://docs.substrate.io/v3/runtime/events-and-errors)\n\t\t\tof this pallet.\n\t\t\t" - ] - } - }, - { - "id": 486, - "type": { - "path": [ - "pallet_bags_list", - "list", - "ListError" - ], - "params": [], - "def": { - "variant": { - "variants": [ - { - "name": "Duplicate", - "fields": [], - "index": 0, - "docs": [] - }, - { - "name": "NotHeavier", - "fields": [], - "index": 1, - "docs": [] - }, - { - "name": "NotInSameBag", - "fields": [], - "index": 2, - "docs": [] - }, - { - "name": "NodeNotFound", - "fields": [], - "index": 3, - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 487, - "type": { - "path": [ - "frame_support", - "storage", - "bounded_vec", - "BoundedVec" - ], - "params": [ - { - "name": "T", - "type": 352 - }, - { - "name": "S", - "type": null - } - ], - "def": { - "composite": { - "fields": [ - { - "name": null, - "type": 488, - "typeName": "Vec", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 488, - "type": { - "path": [], - "params": [], - "def": { - "sequence": { - "type": 352 - } - }, - "docs": [] - } - }, - { - "id": 489, - "type": { - "path": [ - "pallet_vesting", - "Releases" - ], - "params": [], - "def": { - "variant": { - "variants": [ - { - "name": "V0", - "fields": [], - "index": 0, - "docs": [] - }, - { - "name": "V1", - "fields": [], - "index": 1, - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 490, - "type": { - "path": [ - "pallet_vesting", - "pallet", - "Error" - ], - "params": [ - { - "name": "T", - "type": null - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "NotVesting", - "fields": [], - "index": 0, - "docs": [ - "The account given is not vesting." - ] - }, - { - "name": "AtMaxVestingSchedules", - "fields": [], - "index": 1, - "docs": [ - "The account already has `MaxVestingSchedules` count of schedules and thus", - "cannot add another one. Consider merging existing schedules in order to add another." - ] - }, - { - "name": "AmountLow", - "fields": [], - "index": 2, - "docs": [ - "Amount being transferred is too low to create a vesting schedule." - ] - }, - { - "name": "ScheduleIndexOutOfBounds", - "fields": [], - "index": 3, - "docs": [ - "An index was out of bounds of the vesting schedules." - ] - }, - { - "name": "InvalidScheduleParams", - "fields": [], - "index": 4, - "docs": [ - "Failed to create a new schedule because some parameter was invalid." - ] - } - ] - } - }, - "docs": [ - "Error for the vesting pallet." - ] - } - }, - { - "id": 491, - "type": { - "path": [ - "pallet_council", - "CouncilStageUpdate" - ], - "params": [ - { - "name": "BlockNumber", - "type": 4 - } - ], - "def": { - "composite": { - "fields": [ - { - "name": "stage", - "type": 492, - "typeName": "CouncilStage", - "docs": [] - }, - { - "name": "changed_at", - "type": 4, - "typeName": "BlockNumber", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 492, - "type": { - "path": [ - "pallet_council", - "CouncilStage" - ], - "params": [], - "def": { - "variant": { - "variants": [ - { - "name": "Announcing", - "fields": [ - { - "name": null, - "type": 493, - "typeName": "CouncilStageAnnouncing", - "docs": [] - } - ], - "index": 0, - "docs": [] - }, - { - "name": "Election", - "fields": [ - { - "name": null, - "type": 494, - "typeName": "CouncilStageElection", - "docs": [] - } - ], - "index": 1, - "docs": [] - }, - { - "name": "Idle", - "fields": [], - "index": 2, - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 493, - "type": { - "path": [ - "pallet_council", - "CouncilStageAnnouncing" - ], - "params": [], - "def": { - "composite": { - "fields": [ - { - "name": "candidates_count", - "type": 8, - "typeName": "u64", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 494, - "type": { - "path": [ - "pallet_council", - "CouncilStageElection" - ], - "params": [], - "def": { - "composite": { - "fields": [ - { - "name": "candidates_count", - "type": 8, - "typeName": "u64", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 495, - "type": { - "path": [], - "params": [], - "def": { - "sequence": { - "type": 496 - } - }, - "docs": [] - } - }, - { - "id": 496, - "type": { - "path": [ - "pallet_council", - "CouncilMember" - ], - "params": [ - { - "name": "AccountId", - "type": 0 - }, - { - "name": "MemberId", - "type": 8 - }, - { - "name": "Balance", - "type": 6 - }, - { - "name": "BlockNumber", - "type": 4 - } - ], - "def": { - "composite": { - "fields": [ - { - "name": "staking_account_id", - "type": 0, - "typeName": "AccountId", - "docs": [] - }, - { - "name": "reward_account_id", - "type": 0, - "typeName": "AccountId", - "docs": [] - }, - { - "name": "membership_id", - "type": 8, - "typeName": "MemberId", - "docs": [] - }, - { - "name": "stake", - "type": 6, - "typeName": "Balance", - "docs": [] - }, - { - "name": "last_payment_block", - "type": 4, - "typeName": "BlockNumber", - "docs": [] - }, - { - "name": "unpaid_reward", - "type": 6, - "typeName": "Balance", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 497, - "type": { - "path": [ - "pallet_council", - "Candidate" - ], - "params": [ - { - "name": "AccountId", - "type": 0 - }, - { - "name": "Balance", - "type": 6 - }, - { - "name": "Hash", - "type": 9 - }, - { - "name": "VotePower", - "type": 6 - } - ], - "def": { - "composite": { - "fields": [ - { - "name": "staking_account_id", - "type": 0, - "typeName": "AccountId", - "docs": [] - }, - { - "name": "reward_account_id", - "type": 0, - "typeName": "AccountId", - "docs": [] - }, - { - "name": "cycle_id", - "type": 8, - "typeName": "u64", - "docs": [] - }, - { - "name": "stake", - "type": 6, - "typeName": "Balance", - "docs": [] - }, - { - "name": "vote_power", - "type": 6, - "typeName": "VotePower", - "docs": [] - }, - { - "name": "note_hash", - "type": 132, - "typeName": "Option", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 498, - "type": { - "path": [ - "pallet_council", - "Error" - ], - "params": [ - { - "name": "T", - "type": null - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "BadOrigin", - "fields": [], - "index": 0, - "docs": [ - "Origin is invalid." - ] - }, - { - "name": "CantCandidateNow", - "fields": [], - "index": 1, - "docs": [ - "User tried to announce candidacy outside of the candidacy announcement period." - ] - }, - { - "name": "CantReleaseStakeNow", - "fields": [], - "index": 2, - "docs": [ - "User tried to release stake outside of the revealing period." - ] - }, - { - "name": "CandidacyStakeTooLow", - "fields": [], - "index": 3, - "docs": [ - "Candidate haven't provided sufficient stake." - ] - }, - { - "name": "CantCandidateTwice", - "fields": [], - "index": 4, - "docs": [ - "User tried to announce candidacy twice in the same elections." - ] - }, - { - "name": "ConflictingStake", - "fields": [], - "index": 5, - "docs": [ - "User tried to announce candidacy with an account that has the conflicting type of stake", - "with candidacy stake and has not enough balance for staking for both purposes." - ] - }, - { - "name": "StakeStillNeeded", - "fields": [], - "index": 6, - "docs": [ - "Council member and candidates can't withdraw stake yet." - ] - }, - { - "name": "NoStake", - "fields": [], - "index": 7, - "docs": [ - "User tried to release stake when no stake exists." - ] - }, - { - "name": "InsufficientBalanceForStaking", - "fields": [], - "index": 8, - "docs": [ - "Insufficient balance for candidacy staking." - ] - }, - { - "name": "CantVoteForYourself", - "fields": [], - "index": 9, - "docs": [ - "Candidate can't vote for himself." - ] - }, - { - "name": "MemberIdNotMatchAccount", - "fields": [], - "index": 10, - "docs": [ - "Invalid membership." - ] - }, - { - "name": "InvalidAccountToStakeReuse", - "fields": [], - "index": 11, - "docs": [ - "The combination of membership id and account id is invalid for unstaking an existing", - "candidacy stake." - ] - }, - { - "name": "NotCandidatingNow", - "fields": [], - "index": 12, - "docs": [ - "User tried to withdraw candidacy when not candidating." - ] - }, - { - "name": "CantWithdrawCandidacyNow", - "fields": [], - "index": 13, - "docs": [ - "Can't withdraw candidacy outside of the candidacy announcement period." - ] - }, - { - "name": "NotCouncilor", - "fields": [], - "index": 14, - "docs": [ - "The member is not a councilor." - ] - }, - { - "name": "InsufficientFundsForFundingRequest", - "fields": [], - "index": 15, - "docs": [ - "Insufficent funds in council for executing 'Funding Request'" - ] - }, - { - "name": "ZeroBalanceFundRequest", - "fields": [], - "index": 16, - "docs": [ - "Fund request no balance" - ] - }, - { - "name": "RepeatedFundRequestAccount", - "fields": [], - "index": 17, - "docs": [ - "The same account is recieving funds from the same request twice" - ] - }, - { - "name": "EmptyFundingRequests", - "fields": [], - "index": 18, - "docs": [ - "Funding requests without recieving accounts" - ] - }, - { - "name": "InsufficientTokensForFunding", - "fields": [], - "index": 19, - "docs": [ - "Insufficient tokens for funding (on member controller account)" - ] - }, - { - "name": "ZeroTokensFunding", - "fields": [], - "index": 20, - "docs": [ - "Trying to fund with zero tokens" - ] - }, - { - "name": "CandidateDoesNotExist", - "fields": [], - "index": 21, - "docs": [ - "Candidate id not found" - ] - }, - { - "name": "InsufficientBalanceForTransfer", - "fields": [], - "index": 22, - "docs": [ - "Cannot withdraw: insufficient budget balance." - ] - } - ] - } - }, - "docs": [ - "Council errors" - ] - } - }, - { - "id": 499, - "type": { - "path": [ - "pallet_referendum", - "ReferendumStage" - ], - "params": [ - { - "name": "BlockNumber", - "type": 4 - }, - { - "name": "MemberId", - "type": 8 - }, - { - "name": "VotePower", - "type": 6 - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "Inactive", - "fields": [], - "index": 0, - "docs": [] - }, - { - "name": "Voting", - "fields": [ - { - "name": null, - "type": 500, - "typeName": "ReferendumStageVoting", - "docs": [] - } - ], - "index": 1, - "docs": [] - }, - { - "name": "Revealing", - "fields": [ - { - "name": null, - "type": 501, - "typeName": "ReferendumStageRevealing", - "docs": [] - } - ], - "index": 2, - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 500, - "type": { - "path": [ - "pallet_referendum", - "ReferendumStageVoting" - ], - "params": [ - { - "name": "BlockNumber", - "type": 4 - } - ], - "def": { - "composite": { - "fields": [ - { - "name": "started", - "type": 4, - "typeName": "BlockNumber", - "docs": [] - }, - { - "name": "winning_target_count", - "type": 8, - "typeName": "u64", - "docs": [] - }, - { - "name": "current_cycle_id", - "type": 8, - "typeName": "u64", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 501, - "type": { - "path": [ - "pallet_referendum", - "ReferendumStageRevealing" - ], - "params": [ - { - "name": "BlockNumber", - "type": 4 - }, - { - "name": "MemberId", - "type": 8 - }, - { - "name": "VotePower", - "type": 6 - } - ], - "def": { - "composite": { - "fields": [ - { - "name": "started", - "type": 4, - "typeName": "BlockNumber", - "docs": [] - }, - { - "name": "winning_target_count", - "type": 8, - "typeName": "u64", - "docs": [] - }, - { - "name": "intermediate_winners", - "type": 65, - "typeName": "Vec>", - "docs": [] - }, - { - "name": "current_cycle_id", - "type": 8, - "typeName": "u64", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 502, - "type": { - "path": [ - "pallet_referendum", - "CastVote" - ], - "params": [ - { - "name": "Hash", - "type": 9 - }, - { - "name": "Currency", - "type": 6 - }, - { - "name": "MemberId", - "type": 8 - } - ], - "def": { - "composite": { - "fields": [ - { - "name": "commitment", - "type": 9, - "typeName": "Hash", - "docs": [] - }, - { - "name": "cycle_id", - "type": 8, - "typeName": "u64", - "docs": [] - }, - { - "name": "stake", - "type": 6, - "typeName": "Currency", - "docs": [] - }, - { - "name": "vote_for", - "type": 70, - "typeName": "Option", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 503, - "type": { - "path": [ - "pallet_referendum", - "Error" - ], - "params": [ - { - "name": "T", - "type": null - }, - { - "name": "I", - "type": null - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "BadOrigin", - "fields": [], - "index": 0, - "docs": [ - "Origin is invalid" - ] - }, - { - "name": "ReferendumNotRunning", - "fields": [], - "index": 1, - "docs": [ - "Referendum is not running when expected to" - ] - }, - { - "name": "RevealingNotInProgress", - "fields": [], - "index": 2, - "docs": [ - "Revealing stage is not in progress right now" - ] - }, - { - "name": "ConflictStakesOnAccount", - "fields": [], - "index": 3, - "docs": [ - "Staking account contains conflicting stakes." - ] - }, - { - "name": "InsufficientBalanceToStake", - "fields": [], - "index": 4, - "docs": [ - "Account Insufficient Free Balance (now)" - ] - }, - { - "name": "InsufficientStake", - "fields": [], - "index": 5, - "docs": [ - "Insufficient stake provided to cast a vote" - ] - }, - { - "name": "InvalidReveal", - "fields": [], - "index": 6, - "docs": [ - "Salt and referendum option provided don't correspond to the commitment" - ] - }, - { - "name": "InvalidVote", - "fields": [], - "index": 7, - "docs": [ - "Vote for not existing option was revealed" - ] - }, - { - "name": "VoteNotExisting", - "fields": [], - "index": 8, - "docs": [ - "Trying to reveal vote that was not cast" - ] - }, - { - "name": "AlreadyVotedThisCycle", - "fields": [], - "index": 9, - "docs": [ - "Trying to vote multiple time in the same cycle" - ] - }, - { - "name": "UnstakingVoteInSameCycle", - "fields": [], - "index": 10, - "docs": [ - "Invalid time to release the locked stake" - ] - }, - { - "name": "SaltTooLong", - "fields": [], - "index": 11, - "docs": [ - "Salt is too long" - ] - }, - { - "name": "UnstakingForbidden", - "fields": [], - "index": 12, - "docs": [ - "Unstaking has been forbidden for the user (at least for now)" - ] - } - ] - } - }, - "docs": [ - "Referendum errors" - ] - } - }, - { - "id": 504, - "type": { - "path": [ - "pallet_membership", - "MembershipObject" - ], - "params": [ - { - "name": "AccountId", - "type": 0 - } - ], - "def": { - "composite": { - "fields": [ - { - "name": "handle_hash", - "type": 10, - "typeName": "Vec", - "docs": [] - }, - { - "name": "root_account", - "type": 0, - "typeName": "AccountId", - "docs": [] - }, - { - "name": "controller_account", - "type": 0, - "typeName": "AccountId", - "docs": [] - }, - { - "name": "verified", - "type": 34, - "typeName": "bool", - "docs": [] - }, - { - "name": "invites", - "type": 4, - "typeName": "u32", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 505, - "type": { - "path": [ - "pallet_membership", - "StakingAccountMemberBinding" - ], - "params": [ - { - "name": "MemberId", - "type": 8 - } - ], - "def": { - "composite": { - "fields": [ - { - "name": "member_id", - "type": 8, - "typeName": "MemberId", - "docs": [] - }, - { - "name": "confirmed", - "type": 34, - "typeName": "bool", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 506, - "type": { - "path": [ - "pallet_membership", - "Error" - ], - "params": [ - { - "name": "T", - "type": null - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "NotEnoughBalanceToBuyMembership", - "fields": [], - "index": 0, - "docs": [ - "Not enough balance to buy membership." - ] - }, - { - "name": "ControllerAccountRequired", - "fields": [], - "index": 1, - "docs": [ - "Controller account required." - ] - }, - { - "name": "RootAccountRequired", - "fields": [], - "index": 2, - "docs": [ - "Root account required." - ] - }, - { - "name": "UnsignedOrigin", - "fields": [], - "index": 3, - "docs": [ - "Invalid origin." - ] - }, - { - "name": "MemberProfileNotFound", - "fields": [], - "index": 4, - "docs": [ - "Member profile not found (invalid member id)." - ] - }, - { - "name": "HandleAlreadyRegistered", - "fields": [], - "index": 5, - "docs": [ - "Handle already registered." - ] - }, - { - "name": "HandleMustBeProvidedDuringRegistration", - "fields": [], - "index": 6, - "docs": [ - "Handle must be provided during registration." - ] - }, - { - "name": "ReferrerIsNotMember", - "fields": [], - "index": 7, - "docs": [ - "Cannot find a membership for a provided referrer id." - ] - }, - { - "name": "CannotTransferInvitesForNotMember", - "fields": [], - "index": 8, - "docs": [ - "Should be a member to receive invites." - ] - }, - { - "name": "NotEnoughInvites", - "fields": [], - "index": 9, - "docs": [ - "Not enough invites to perform an operation." - ] - }, - { - "name": "WorkingGroupLeaderNotSet", - "fields": [], - "index": 10, - "docs": [ - "Membership working group leader is not set." - ] - }, - { - "name": "StakingAccountIsAlreadyRegistered", - "fields": [], - "index": 11, - "docs": [ - "Staking account is registered for some member." - ] - }, - { - "name": "StakingAccountDoesntExist", - "fields": [], - "index": 12, - "docs": [ - "Staking account for membership doesn't exist." - ] - }, - { - "name": "StakingAccountAlreadyConfirmed", - "fields": [], - "index": 13, - "docs": [ - "Staking account has already been confirmed." - ] - }, - { - "name": "WorkingGroupBudgetIsNotSufficientForInviting", - "fields": [], - "index": 14, - "docs": [ - "Cannot invite a member. Working group balance is not sufficient to set the default", - "balance." - ] - }, - { - "name": "ConflictingLock", - "fields": [], - "index": 15, - "docs": [ - "Cannot invite a member. The controller account has an existing conflicting lock." - ] - }, - { - "name": "CannotExceedReferralCutPercentLimit", - "fields": [], - "index": 16, - "docs": [ - "Cannot set a referral cut percent value. The limit was exceeded." - ] - }, - { - "name": "ConflictStakesOnAccount", - "fields": [], - "index": 17, - "docs": [ - "Staking account contains conflicting stakes." - ] - }, - { - "name": "InsufficientBalanceToCoverStake", - "fields": [], - "index": 18, - "docs": [ - "Insufficient balance to cover stake." - ] - } - ] - } - }, - "docs": [ - "Membership module predefined errors" - ] - } - }, - { - "id": 507, - "type": { - "path": [ - "pallet_forum", - "Category" - ], - "params": [ - { - "name": "CategoryId", - "type": 8 - }, - { - "name": "ThreadId", - "type": 8 - }, - { - "name": "Hash", - "type": 9 - } - ], - "def": { - "composite": { - "fields": [ - { - "name": "title_hash", - "type": 9, - "typeName": "Hash", - "docs": [] - }, - { - "name": "description_hash", - "type": 9, - "typeName": "Hash", - "docs": [] - }, - { - "name": "archived", - "type": 34, - "typeName": "bool", - "docs": [] - }, - { - "name": "num_direct_subcategories", - "type": 4, - "typeName": "u32", - "docs": [] - }, - { - "name": "num_direct_threads", - "type": 4, - "typeName": "u32", - "docs": [] - }, - { - "name": "num_direct_moderators", - "type": 4, - "typeName": "u32", - "docs": [] - }, - { - "name": "parent_category_id", - "type": 70, - "typeName": "Option", - "docs": [] - }, - { - "name": "sticky_thread_ids", - "type": 62, - "typeName": "Vec", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 508, - "type": { - "path": [ - "pallet_forum", - "Thread" - ], - "params": [ - { - "name": "ForumUserId", - "type": 8 - }, - { - "name": "CategoryId", - "type": 8 - }, - { - "name": "Moment", - "type": 8 - }, - { - "name": "Hash", - "type": 9 - }, - { - "name": "Balance", - "type": 6 - } - ], - "def": { - "composite": { - "fields": [ - { - "name": "category_id", - "type": 8, - "typeName": "CategoryId", - "docs": [] - }, - { - "name": "author_id", - "type": 8, - "typeName": "ForumUserId", - "docs": [] - }, - { - "name": "poll", - "type": 509, - "typeName": "Option>", - "docs": [] - }, - { - "name": "cleanup_pay_off", - "type": 6, - "typeName": "Balance", - "docs": [] - }, - { - "name": "number_of_posts", - "type": 8, - "typeName": "NumberOfPosts", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 509, - "type": { - "path": [ - "Option" - ], - "params": [ - { - "name": "T", - "type": 510 - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "None", - "fields": [], - "index": 0, - "docs": [] - }, - { - "name": "Some", - "fields": [ - { - "name": null, - "type": 510, - "typeName": null, - "docs": [] - } - ], - "index": 1, - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 510, - "type": { - "path": [ - "pallet_forum", - "Poll" - ], - "params": [ - { - "name": "Timestamp", - "type": 8 - }, - { - "name": "Hash", - "type": 9 - } - ], - "def": { - "composite": { - "fields": [ - { - "name": "description_hash", - "type": 9, - "typeName": "Hash", - "docs": [] - }, - { - "name": "end_time", - "type": 8, - "typeName": "Timestamp", - "docs": [] - }, - { - "name": "poll_alternatives", - "type": 511, - "typeName": "Vec>", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 511, - "type": { - "path": [], - "params": [], - "def": { - "sequence": { - "type": 512 - } - }, - "docs": [] - } - }, - { - "id": 512, - "type": { - "path": [ - "pallet_forum", - "PollAlternative" - ], - "params": [ - { - "name": "Hash", - "type": 9 - } - ], - "def": { - "composite": { - "fields": [ - { - "name": "alternative_text_hash", - "type": 9, - "typeName": "Hash", - "docs": [] - }, - { - "name": "vote_count", - "type": 4, - "typeName": "u32", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 513, - "type": { - "path": [ - "pallet_forum", - "Post" - ], - "params": [ - { - "name": "ForumUserId", - "type": 8 - }, - { - "name": "ThreadId", - "type": 8 - }, - { - "name": "Hash", - "type": 9 - }, - { - "name": "Balance", - "type": 6 - }, - { - "name": "BlockNumber", - "type": 4 - } - ], - "def": { - "composite": { - "fields": [ - { - "name": "thread_id", - "type": 8, - "typeName": "ThreadId", - "docs": [] - }, - { - "name": "text_hash", - "type": 9, - "typeName": "Hash", - "docs": [] - }, - { - "name": "author_id", - "type": 8, - "typeName": "ForumUserId", - "docs": [] - }, - { - "name": "cleanup_pay_off", - "type": 6, - "typeName": "Balance", - "docs": [] - }, - { - "name": "last_edited", - "type": 4, - "typeName": "BlockNumber", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 514, - "type": { - "path": [ - "pallet_forum", - "Error" - ], - "params": [ - { - "name": "T", - "type": null - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "OriginNotForumLead", - "fields": [], - "index": 0, - "docs": [ - "Origin doesn't correspond to any lead account" - ] - }, - { - "name": "ForumUserIdNotMatchAccount", - "fields": [], - "index": 1, - "docs": [ - "Forum user id not match its account." - ] - }, - { - "name": "ModeratorIdNotMatchAccount", - "fields": [], - "index": 2, - "docs": [ - "Moderator id not match its account." - ] - }, - { - "name": "AccountDoesNotMatchThreadAuthor", - "fields": [], - "index": 3, - "docs": [ - "Thread not authored by the given user." - ] - }, - { - "name": "ThreadDoesNotExist", - "fields": [], - "index": 4, - "docs": [ - "Thread does not exist" - ] - }, - { - "name": "ModeratorModerateOriginCategory", - "fields": [], - "index": 5, - "docs": [ - "Moderator can't moderate category containing thread." - ] - }, - { - "name": "ModeratorModerateDestinationCategory", - "fields": [], - "index": 6, - "docs": [ - "Moderator can't moderate destination category." - ] - }, - { - "name": "ThreadMoveInvalid", - "fields": [], - "index": 7, - "docs": [ - "Origin is the same as the destination." - ] - }, - { - "name": "ThreadNotBeingUpdated", - "fields": [], - "index": 8, - "docs": [ - "Thread not being updated." - ] - }, - { - "name": "InsufficientBalanceForThreadCreation", - "fields": [], - "index": 9, - "docs": [ - "Not enough balance to create thread" - ] - }, - { - "name": "CannotDeleteThreadWithOutstandingPosts", - "fields": [], - "index": 10, - "docs": [ - "A thread with outstanding posts cannot be removed" - ] - }, - { - "name": "PostDoesNotExist", - "fields": [], - "index": 11, - "docs": [ - "Post does not exist." - ] - }, - { - "name": "AccountDoesNotMatchPostAuthor", - "fields": [], - "index": 12, - "docs": [ - "Account does not match post author." - ] - }, - { - "name": "InsufficientBalanceForPost", - "fields": [], - "index": 13, - "docs": [ - "Not enough balance to post" - ] - }, - { - "name": "CategoryNotBeingUpdated", - "fields": [], - "index": 14, - "docs": [ - "Category not being updated." - ] - }, - { - "name": "AncestorCategoryImmutable", - "fields": [], - "index": 15, - "docs": [ - "Ancestor category immutable, i.e. deleted or archived" - ] - }, - { - "name": "MaxValidCategoryDepthExceeded", - "fields": [], - "index": 16, - "docs": [ - "Maximum valid category depth exceeded." - ] - }, - { - "name": "CategoryDoesNotExist", - "fields": [], - "index": 17, - "docs": [ - "Category does not exist." - ] - }, - { - "name": "CategoryModeratorDoesNotExist", - "fields": [], - "index": 18, - "docs": [ - "Provided moderator is not given category moderator" - ] - }, - { - "name": "CategoryNotEmptyThreads", - "fields": [], - "index": 19, - "docs": [ - "Category still contains some threads." - ] - }, - { - "name": "CategoryNotEmptyCategories", - "fields": [], - "index": 20, - "docs": [ - "Category still contains some subcategories." - ] - }, - { - "name": "ModeratorCantDeleteCategory", - "fields": [], - "index": 21, - "docs": [ - "No permissions to delete category." - ] - }, - { - "name": "ModeratorCantUpdateCategory", - "fields": [], - "index": 22, - "docs": [ - "No permissions to update category." - ] - }, - { - "name": "StickiedThreadIdsDuplicates", - "fields": [], - "index": 23, - "docs": [ - "Duplicates for the stickied thread id collection." - ] - }, - { - "name": "PollAlternativesTooShort", - "fields": [], - "index": 24, - "docs": [ - "Poll items number too short." - ] - }, - { - "name": "PollNotExist", - "fields": [], - "index": 25, - "docs": [ - "Poll not exist." - ] - }, - { - "name": "PollTimeSetting", - "fields": [], - "index": 26, - "docs": [ - "Poll date setting is wrong." - ] - }, - { - "name": "PollData", - "fields": [], - "index": 27, - "docs": [ - "Poll data committed is wrong." - ] - }, - { - "name": "PollCommitExpired", - "fields": [], - "index": 28, - "docs": [ - "Poll data committed after poll expired." - ] - }, - { - "name": "AlreadyVotedOnPoll", - "fields": [], - "index": 29, - "docs": [ - "Forum user has already voted." - ] - }, - { - "name": "DataMigrationNotDone", - "fields": [], - "index": 30, - "docs": [ - "data migration not done yet." - ] - }, - { - "name": "MapSizeLimit", - "fields": [], - "index": 31, - "docs": [ - "Maximum size of storage map exceeded" - ] - }, - { - "name": "PathLengthShouldBeGreaterThanZero", - "fields": [], - "index": 32, - "docs": [ - "Category path len should be greater than zero" - ] - } - ] - } - }, - "docs": [ - "Forum predefined errors" - ] - } - }, - { - "id": 515, - "type": { - "path": [ - "pallet_constitution", - "ConstitutionInfo" - ], - "params": [], - "def": { - "composite": { - "fields": [ - { - "name": "text_hash", - "type": 10, - "typeName": "Vec", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 516, - "type": { - "path": [ - "pallet_utility", - "Error" - ], - "params": [ - { - "name": "T", - "type": null - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "InsufficientFundsForBudgetUpdate", - "fields": [], - "index": 0, - "docs": [ - "Insufficient funds for 'Update Working Group Budget' proposal execution" - ] - }, - { - "name": "ZeroTokensBurn", - "fields": [], - "index": 1, - "docs": [ - "Trying to burn zero tokens" - ] - }, - { - "name": "InsufficientFundsForBurn", - "fields": [], - "index": 2, - "docs": [ - "Insufficient funds for burning" - ] - } - ] - } - }, - "docs": [ - "Codex module predefined errors" - ] - } - }, - { - "id": 517, - "type": { - "path": [ - "pallet_content", - "types", - "VideoRecord" - ], - "params": [ - { - "name": "ChannelId", - "type": 8 - }, - { - "name": "OwnedNft", - "type": 518 - }, - { - "name": "DataObjectId", - "type": 8 - }, - { - "name": "Balance", - "type": 6 - } - ], - "def": { - "composite": { - "fields": [ - { - "name": "in_channel", - "type": 8, - "typeName": "ChannelId", - "docs": [] - }, - { - "name": "nft_status", - "type": 525, - "typeName": "Option", - "docs": [] - }, - { - "name": "data_objects", - "type": 101, - "typeName": "BTreeSet", - "docs": [] - }, - { - "name": "video_state_bloat_bond", - "type": 6, - "typeName": "Balance", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 518, - "type": { - "path": [ - "pallet_content", - "nft", - "types", - "OwnedNft" - ], - "params": [ - { - "name": "TransactionalStatus", - "type": 519 - }, - { - "name": "MemberId", - "type": 8 - }, - { - "name": "AuctionId", - "type": 8 - } - ], - "def": { - "composite": { - "fields": [ - { - "name": "owner", - "type": 524, - "typeName": "NftOwner", - "docs": [] - }, - { - "name": "transactional_status", - "type": 519, - "typeName": "TransactionalStatus", - "docs": [] - }, - { - "name": "creator_royalty", - "type": 110, - "typeName": "Option", - "docs": [] - }, - { - "name": "open_auctions_nonce", - "type": 8, - "typeName": "AuctionId", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 519, - "type": { - "path": [ - "pallet_content", - "nft", - "types", - "TransactionalStatusRecord" - ], - "params": [ - { - "name": "MemberId", - "type": 8 - }, - { - "name": "Balance", - "type": 6 - }, - { - "name": "EnglishAuctionType", - "type": 520 - }, - { - "name": "OpenAuctionType", - "type": 523 - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "Idle", - "fields": [], - "index": 0, - "docs": [] - }, - { - "name": "InitiatedOfferToMember", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "MemberId", - "docs": [] - }, - { - "name": null, - "type": 105, - "typeName": "Option", - "docs": [] - } - ], - "index": 1, - "docs": [] - }, - { - "name": "EnglishAuction", - "fields": [ - { - "name": null, - "type": 520, - "typeName": "EnglishAuctionType", - "docs": [] - } - ], - "index": 2, - "docs": [] - }, - { - "name": "OpenAuction", - "fields": [ - { - "name": null, - "type": 523, - "typeName": "OpenAuctionType", - "docs": [] - } - ], - "index": 3, - "docs": [] - }, - { - "name": "BuyNow", - "fields": [ - { - "name": null, - "type": 6, - "typeName": "Balance", - "docs": [] - } - ], - "index": 4, - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 520, - "type": { - "path": [ - "pallet_content", - "nft", - "types", - "EnglishAuctionRecord" - ], - "params": [ - { - "name": "BlockNumber", - "type": 4 - }, - { - "name": "Balance", - "type": 6 - }, - { - "name": "MemberId", - "type": 8 - } - ], - "def": { - "composite": { - "fields": [ - { - "name": "starting_price", - "type": 6, - "typeName": "Balance", - "docs": [] - }, - { - "name": "buy_now_price", - "type": 105, - "typeName": "Option", - "docs": [] - }, - { - "name": "whitelist", - "type": 101, - "typeName": "BTreeSet", - "docs": [] - }, - { - "name": "end", - "type": 4, - "typeName": "BlockNumber", - "docs": [] - }, - { - "name": "start", - "type": 4, - "typeName": "BlockNumber", - "docs": [] - }, - { - "name": "extension_period", - "type": 4, - "typeName": "BlockNumber", - "docs": [] - }, - { - "name": "min_bid_step", - "type": 6, - "typeName": "Balance", - "docs": [] - }, - { - "name": "top_bid", - "type": 521, - "typeName": "Option>", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 521, - "type": { - "path": [ - "Option" - ], - "params": [ - { - "name": "T", - "type": 522 - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "None", - "fields": [], - "index": 0, - "docs": [] - }, - { - "name": "Some", - "fields": [ - { - "name": null, - "type": 522, - "typeName": null, - "docs": [] - } - ], - "index": 1, - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 522, - "type": { - "path": [ - "pallet_content", - "nft", - "types", - "EnglishAuctionBid" - ], - "params": [ - { - "name": "Balance", - "type": 6 - }, - { - "name": "MemberId", - "type": 8 - } - ], - "def": { - "composite": { - "fields": [ - { - "name": "amount", - "type": 6, - "typeName": "Balance", - "docs": [] - }, - { - "name": "bidder_id", - "type": 8, - "typeName": "MemberId", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 523, - "type": { - "path": [ - "pallet_content", - "nft", - "types", - "OpenAuctionRecord" - ], - "params": [ - { - "name": "BlockNumber", - "type": 4 - }, - { - "name": "AuctionId", - "type": 8 - }, - { - "name": "Balance", - "type": 6 - }, - { - "name": "MemberId", - "type": 8 - } - ], - "def": { - "composite": { - "fields": [ - { - "name": "starting_price", - "type": 6, - "typeName": "Balance", - "docs": [] - }, - { - "name": "buy_now_price", - "type": 105, - "typeName": "Option", - "docs": [] - }, - { - "name": "whitelist", - "type": 101, - "typeName": "BTreeSet", - "docs": [] - }, - { - "name": "bid_lock_duration", - "type": 4, - "typeName": "BlockNumber", - "docs": [] - }, - { - "name": "auction_id", - "type": 8, - "typeName": "AuctionId", - "docs": [] - }, - { - "name": "start", - "type": 4, - "typeName": "BlockNumber", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 524, - "type": { - "path": [ - "pallet_content", - "nft", - "types", - "NftOwner" - ], - "params": [ - { - "name": "MemberId", - "type": 8 - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "ChannelOwner", - "fields": [], - "index": 0, - "docs": [] - }, - { - "name": "Member", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "MemberId", - "docs": [] - } - ], - "index": 1, - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 525, - "type": { - "path": [ - "Option" - ], - "params": [ - { - "name": "T", - "type": 518 - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "None", - "fields": [], - "index": 0, - "docs": [] - }, - { - "name": "Some", - "fields": [ - { - "name": null, - "type": 518, - "typeName": null, - "docs": [] - } - ], - "index": 1, - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 526, - "type": { - "path": [ - "pallet_content", - "permissions", - "curator_group", - "CuratorGroup" - ], - "params": [ - { - "name": "T", - "type": null - } - ], - "def": { - "composite": { - "fields": [ - { - "name": "curators", - "type": 89, - "typeName": "BTreeMap", - "docs": [] - }, - { - "name": "active", - "type": 34, - "typeName": "bool", - "docs": [] - }, - { - "name": "permissions_by_level", - "type": 124, - "typeName": "ModerationPermissionsByLevel", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 527, - "type": { - "path": [ - "pallet_content", - "nft", - "types", - "OpenAuctionBidRecord" - ], - "params": [ - { - "name": "Balance", - "type": 6 - }, - { - "name": "BlockNumber", - "type": 4 - }, - { - "name": "AuctionId", - "type": 8 - } - ], - "def": { - "composite": { - "fields": [ - { - "name": "amount", - "type": 6, - "typeName": "Balance", - "docs": [] - }, - { - "name": "made_at_block", - "type": 4, - "typeName": "BlockNumber", - "docs": [] - }, - { - "name": "auction_id", - "type": 8, - "typeName": "AuctionId", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 528, - "type": { - "path": [ - "pallet_content", - "errors", - "Error" - ], - "params": [ - { - "name": "T", - "type": null - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "ChannelStateBloatBondChanged", - "fields": [], - "index": 0, - "docs": [ - "Invalid extrinsic call: Channel state bloat bond changed." - ] - }, - { - "name": "VideoStateBloatBondChanged", - "fields": [], - "index": 1, - "docs": [ - "Invalid extrinsic call: video state bloat bond changed." - ] - }, - { - "name": "MinCashoutValueTooLow", - "fields": [], - "index": 2, - "docs": [ - "Attempt to set minimum cashout allowed below the limit" - ] - }, - { - "name": "MaxCashoutValueTooHigh", - "fields": [], - "index": 3, - "docs": [ - "Attempt to set minimum cashout allowed above the limit" - ] - }, - { - "name": "CuratorIsNotAMemberOfGivenCuratorGroup", - "fields": [], - "index": 4, - "docs": [ - "Curator under provided curator id is not a member of curaror group under given id" - ] - }, - { - "name": "CuratorIsAlreadyAMemberOfGivenCuratorGroup", - "fields": [], - "index": 5, - "docs": [ - "Curator under provided curator id is already a member of curaror group under given id" - ] - }, - { - "name": "CuratorGroupDoesNotExist", - "fields": [], - "index": 6, - "docs": [ - "Given curator group does not exist" - ] - }, - { - "name": "CuratorsPerGroupLimitReached", - "fields": [], - "index": 7, - "docs": [ - "Max number of curators per group limit reached" - ] - }, - { - "name": "CuratorGroupIsNotActive", - "fields": [], - "index": 8, - "docs": [ - "Curator group is not active" - ] - }, - { - "name": "CuratorIdInvalid", - "fields": [], - "index": 9, - "docs": [ - "Curator id is not a worker id in content working group" - ] - }, - { - "name": "LeadAuthFailed", - "fields": [], - "index": 10, - "docs": [ - "Lead authentication failed" - ] - }, - { - "name": "MemberAuthFailed", - "fields": [], - "index": 11, - "docs": [ - "Member authentication failed" - ] - }, - { - "name": "CuratorAuthFailed", - "fields": [], - "index": 12, - "docs": [ - "Curator authentication failed" - ] - }, - { - "name": "BadOrigin", - "fields": [], - "index": 13, - "docs": [ - "Expected root or signed origin" - ] - }, - { - "name": "ActorNotAuthorized", - "fields": [], - "index": 14, - "docs": [ - "Operation cannot be perfomed with this Actor" - ] - }, - { - "name": "CategoryDoesNotExist", - "fields": [], - "index": 15, - "docs": [ - "A Channel or Video Category does not exist." - ] - }, - { - "name": "ChannelDoesNotExist", - "fields": [], - "index": 16, - "docs": [ - "Channel does not exist" - ] - }, - { - "name": "VideoDoesNotExist", - "fields": [], - "index": 17, - "docs": [ - "Video does not exist" - ] - }, - { - "name": "VideoInSeason", - "fields": [], - "index": 18, - "docs": [ - "Vfdeo in season can`t be removed (because order is important)" - ] - }, - { - "name": "ActorCannotBeLead", - "fields": [], - "index": 19, - "docs": [ - "Actor cannot authorize as lead for given extrinsic" - ] - }, - { - "name": "ActorCannotOwnChannel", - "fields": [], - "index": 20, - "docs": [ - "Actor cannot Own channel" - ] - }, - { - "name": "NftAlreadyExists", - "fields": [], - "index": 21, - "docs": [ - "Nft for given video id already exists" - ] - }, - { - "name": "NftDoesNotExist", - "fields": [], - "index": 22, - "docs": [ - "Nft for given video id does not exist" - ] - }, - { - "name": "OverflowOrUnderflowHappened", - "fields": [], - "index": 23, - "docs": [ - "Overflow or underflow error happened" - ] - }, - { - "name": "DoesNotOwnNft", - "fields": [], - "index": 24, - "docs": [ - "Given origin does not own nft" - ] - }, - { - "name": "RoyaltyUpperBoundExceeded", - "fields": [], - "index": 25, - "docs": [ - "Royalty Upper Bound Exceeded" - ] - }, - { - "name": "RoyaltyLowerBoundExceeded", - "fields": [], - "index": 26, - "docs": [ - "Royalty Lower Bound Exceeded" - ] - }, - { - "name": "AuctionDurationUpperBoundExceeded", - "fields": [], - "index": 27, - "docs": [ - "Auction duration upper bound exceeded" - ] - }, - { - "name": "AuctionDurationLowerBoundExceeded", - "fields": [], - "index": 28, - "docs": [ - "Auction duration lower bound exceeded" - ] - }, - { - "name": "ExtensionPeriodUpperBoundExceeded", - "fields": [], - "index": 29, - "docs": [ - "Auction extension period upper bound exceeded" - ] - }, - { - "name": "ExtensionPeriodLowerBoundExceeded", - "fields": [], - "index": 30, - "docs": [ - "Auction extension period lower bound exceeded" - ] - }, - { - "name": "BidLockDurationUpperBoundExceeded", - "fields": [], - "index": 31, - "docs": [ - "Bid lock duration upper bound exceeded" - ] - }, - { - "name": "BidLockDurationLowerBoundExceeded", - "fields": [], - "index": 32, - "docs": [ - "Bid lock duration lower bound exceeded" - ] - }, - { - "name": "StartingPriceUpperBoundExceeded", - "fields": [], - "index": 33, - "docs": [ - "Starting price upper bound exceeded" - ] - }, - { - "name": "StartingPriceLowerBoundExceeded", - "fields": [], - "index": 34, - "docs": [ - "Starting price lower bound exceeded" - ] - }, - { - "name": "AuctionBidStepUpperBoundExceeded", - "fields": [], - "index": 35, - "docs": [ - "Auction bid step upper bound exceeded" - ] - }, - { - "name": "AuctionBidStepLowerBoundExceeded", - "fields": [], - "index": 36, - "docs": [ - "Auction bid step lower bound exceeded" - ] - }, - { - "name": "InsufficientBalance", - "fields": [], - "index": 37, - "docs": [ - "Insufficient balance" - ] - }, - { - "name": "BidStepConstraintViolated", - "fields": [], - "index": 38, - "docs": [ - "Minimal auction bid step constraint violated." - ] - }, - { - "name": "InvalidBidAmountSpecified", - "fields": [], - "index": 39, - "docs": [ - "Commit verification for bid amount" - ] - }, - { - "name": "StartingPriceConstraintViolated", - "fields": [], - "index": 40, - "docs": [ - "Auction starting price constraint violated." - ] - }, - { - "name": "ActionHasBidsAlready", - "fields": [], - "index": 41, - "docs": [ - "Already active auction cannot be cancelled" - ] - }, - { - "name": "NftIsNotIdle", - "fields": [], - "index": 42, - "docs": [ - "Can not create auction for Nft, if auction have been already started or nft is locked for the transfer" - ] - }, - { - "name": "PendingOfferDoesNotExist", - "fields": [], - "index": 43, - "docs": [ - "No pending offers for given Nft" - ] - }, - { - "name": "RewardAccountIsNotSet", - "fields": [], - "index": 44, - "docs": [ - "Creator royalty requires reward account to be set." - ] - }, - { - "name": "ActorIsNotBidder", - "fields": [], - "index": 45, - "docs": [ - "Actor is not a last bidder" - ] - }, - { - "name": "AuctionCannotBeCompleted", - "fields": [], - "index": 46, - "docs": [ - "Auction cannot be completed" - ] - }, - { - "name": "BidDoesNotExist", - "fields": [], - "index": 47, - "docs": [ - "Auction does not have bids" - ] - }, - { - "name": "BidIsForPastAuction", - "fields": [], - "index": 48, - "docs": [ - "Selected Bid is for past open auction" - ] - }, - { - "name": "StartsAtLowerBoundExceeded", - "fields": [], - "index": 49, - "docs": [ - "Auction starts at lower bound exceeded" - ] - }, - { - "name": "StartsAtUpperBoundExceeded", - "fields": [], - "index": 50, - "docs": [ - "Auction starts at upper bound exceeded" - ] - }, - { - "name": "AuctionDidNotStart", - "fields": [], - "index": 51, - "docs": [ - "Auction did not started" - ] - }, - { - "name": "NotInAuctionState", - "fields": [], - "index": 52, - "docs": [ - "Nft is not in auction state" - ] - }, - { - "name": "MemberIsNotAllowedToParticipate", - "fields": [], - "index": 53, - "docs": [ - "Member is not allowed to participate in auction" - ] - }, - { - "name": "MemberProfileNotFound", - "fields": [], - "index": 54, - "docs": [ - "Member profile not found" - ] - }, - { - "name": "NftNotInBuyNowState", - "fields": [], - "index": 55, - "docs": [ - "Given video nft is not in buy now state" - ] - }, - { - "name": "InvalidBuyNowWitnessPriceProvided", - "fields": [], - "index": 56, - "docs": [ - "`witness_price` provided to `buy_now` extrinsic does not match the current sell price" - ] - }, - { - "name": "IsNotOpenAuctionType", - "fields": [], - "index": 57, - "docs": [ - "Auction type is not `Open`" - ] - }, - { - "name": "IsNotEnglishAuctionType", - "fields": [], - "index": 58, - "docs": [ - "Auction type is not `English`" - ] - }, - { - "name": "BidLockDurationIsNotExpired", - "fields": [], - "index": 59, - "docs": [ - "Bid lock duration is not expired" - ] - }, - { - "name": "NftAuctionIsAlreadyExpired", - "fields": [], - "index": 60, - "docs": [ - "Nft auction is already expired" - ] - }, - { - "name": "BuyNowIsLessThenStartingPrice", - "fields": [], - "index": 61, - "docs": [ - "Auction buy now is less then starting price" - ] - }, - { - "name": "TargetMemberDoesNotExist", - "fields": [], - "index": 62, - "docs": [ - "Nft offer target member does not exist" - ] - }, - { - "name": "InvalidNftOfferWitnessPriceProvided", - "fields": [], - "index": 63, - "docs": [ - "Current nft offer price does not match the provided `witness_price`" - ] - }, - { - "name": "MaxAuctionWhiteListLengthUpperBoundExceeded", - "fields": [], - "index": 64, - "docs": [ - "Max auction whitelist length upper bound exceeded" - ] - }, - { - "name": "WhitelistHasOnlyOneMember", - "fields": [], - "index": 65, - "docs": [ - "Auction whitelist has only one member" - ] - }, - { - "name": "ExtensionPeriodIsGreaterThenAuctionDuration", - "fields": [], - "index": 66, - "docs": [ - "Extension period is greater then auction duration" - ] - }, - { - "name": "NoAssetsSpecified", - "fields": [], - "index": 67, - "docs": [ - "No assets to be removed have been specified" - ] - }, - { - "name": "InvalidAssetsProvided", - "fields": [], - "index": 68, - "docs": [ - "Channel assets feasibility" - ] - }, - { - "name": "ChannelContainsVideos", - "fields": [], - "index": 69, - "docs": [ - "Channel Contains Video" - ] - }, - { - "name": "ChannelContainsAssets", - "fields": [], - "index": 70, - "docs": [ - "Channel Contains Assets" - ] - }, - { - "name": "InvalidBagSizeSpecified", - "fields": [], - "index": 71, - "docs": [ - "Bag Size specified is not valid" - ] - }, - { - "name": "MigrationNotFinished", - "fields": [], - "index": 72, - "docs": [ - "Migration not done yet" - ] - }, - { - "name": "ReplyDoesNotExist", - "fields": [], - "index": 73, - "docs": [ - "Partecipant is not a member" - ] - }, - { - "name": "UnsufficientBalance", - "fields": [], - "index": 74, - "docs": [ - "Insufficient balance" - ] - }, - { - "name": "InsufficientTreasuryBalance", - "fields": [], - "index": 75, - "docs": [ - "Insufficient treasury balance" - ] - }, - { - "name": "InvalidMemberProvided", - "fields": [], - "index": 76, - "docs": [ - "Invalid member id specified" - ] - }, - { - "name": "ActorNotAMember", - "fields": [], - "index": 77, - "docs": [ - "Actor is not A Member" - ] - }, - { - "name": "PaymentProofVerificationFailed", - "fields": [], - "index": 78, - "docs": [ - "Payment Proof verification failed" - ] - }, - { - "name": "CashoutAmountExceedsMaximumAmount", - "fields": [], - "index": 79, - "docs": [ - "Channel cashout amount is too high to be claimed" - ] - }, - { - "name": "CashoutAmountBelowMinimumAmount", - "fields": [], - "index": 80, - "docs": [ - "Channel cashout amount is too low to be claimed" - ] - }, - { - "name": "WithdrawFromChannelAmountExceedsBalanceMinusExistentialDeposit", - "fields": [], - "index": 81, - "docs": [ - "An attempt to withdraw funds from channel account failed, because the specified amount", - "exceeds the account's balance minus ExistantialDeposit" - ] - }, - { - "name": "WithdrawFromChannelAmountIsZero", - "fields": [], - "index": 82, - "docs": [ - "An attempt to withdraw funds from channel account failed, because the specified amount", - "is zero" - ] - }, - { - "name": "ChannelCashoutsDisabled", - "fields": [], - "index": 83, - "docs": [ - "Channel cashouts are currently disabled" - ] - }, - { - "name": "MinCashoutAllowedExceedsMaxCashoutAllowed", - "fields": [], - "index": 84, - "docs": [ - "New values for min_cashout_allowed/max_cashout_allowed are invalid", - "min_cashout_allowed cannot exceed max_cashout_allowed" - ] - }, - { - "name": "CuratorModerationActionNotAllowed", - "fields": [], - "index": 85, - "docs": [ - "Curator does not have permissions to perform given moderation action" - ] - }, - { - "name": "CuratorGroupMaxPermissionsByLevelMapSizeExceeded", - "fields": [], - "index": 86, - "docs": [ - "Curator group's permissions by level map exceeded the maximum allowed size" - ] - }, - { - "name": "ChannelFeaturePaused", - "fields": [], - "index": 87, - "docs": [ - "Operation cannot be executed, because this channel feature has been paused by a curator" - ] - }, - { - "name": "ChannelBagMissing", - "fields": [], - "index": 88, - "docs": [ - "Unexpected runtime state: missing channel bag during delete_channel attempt" - ] - }, - { - "name": "AssetsToRemoveBeyondEntityAssetsSet", - "fields": [], - "index": 89, - "docs": [ - "List of assets to remove provided for update_channel / update_video contains assets that don't belong to the specified entity" - ] - }, - { - "name": "InvalidVideoDataObjectsCountProvided", - "fields": [], - "index": 90, - "docs": [ - "Invalid number of objects to delete provided for delete_video" - ] - }, - { - "name": "InvalidChannelTransferStatus", - "fields": [], - "index": 91, - "docs": [ - "Invalid channel transfer status for operations." - ] - }, - { - "name": "InvalidChannelTransferAcceptor", - "fields": [], - "index": 92, - "docs": [ - "Incorrect actor tries to accept the channel transfer." - ] - }, - { - "name": "InvalidChannelTransferCommitmentParams", - "fields": [], - "index": 93, - "docs": [ - "Cannot accept the channel transfer: provided commitment parameters doesn't match with", - "channel pending transfer parameters." - ] - }, - { - "name": "ChannelAgentInsufficientPermissions", - "fields": [], - "index": 94, - "docs": [] - }, - { - "name": "InvalidChannelOwner", - "fields": [], - "index": 95, - "docs": [ - "Incorrect channel owner for an operation." - ] - }, - { - "name": "ZeroReward", - "fields": [], - "index": 96, - "docs": [ - "Cannot claim zero reward." - ] - }, - { - "name": "InsufficientBalanceForTransfer", - "fields": [], - "index": 97, - "docs": [ - "Cannot transfer the channel: channel owner has insufficient balance (budget for WGs)" - ] - }, - { - "name": "InsufficientBalanceForChannelCreation", - "fields": [], - "index": 98, - "docs": [ - "Cannot create the channel: channel creator has insufficient balance", - "(budget for channel state bloat bond + channel data objs state bloat bonds + data objs storage fees)" - ] - }, - { - "name": "InsufficientBalanceForVideoCreation", - "fields": [], - "index": 99, - "docs": [ - "Cannot create the video: video creator has insufficient balance", - "(budget for video state bloat bond + video data objs state bloat bonds + data objs storage fees)" - ] - }, - { - "name": "InsufficientCouncilBudget", - "fields": [], - "index": 100, - "docs": [] - }, - { - "name": "GlobalNftDailyLimitExceeded", - "fields": [], - "index": 101, - "docs": [] - }, - { - "name": "GlobalNftWeeklyLimitExceeded", - "fields": [], - "index": 102, - "docs": [] - }, - { - "name": "ChannelNftDailyLimitExceeded", - "fields": [], - "index": 103, - "docs": [] - }, - { - "name": "ChannelNftWeeklyLimitExceeded", - "fields": [], - "index": 104, - "docs": [] - }, - { - "name": "CreatorTokenAlreadyIssued", - "fields": [], - "index": 105, - "docs": [ - "Creator token was already issued for this channel" - ] - }, - { - "name": "CreatorTokenNotIssued", - "fields": [], - "index": 106, - "docs": [ - "Creator token wasn't issued for this channel" - ] - }, - { - "name": "MemberIdCouldNotBeDerivedFromActor", - "fields": [], - "index": 107, - "docs": [ - "Member id could not be derived from the provided ContentActor context" - ] - }, - { - "name": "CannotWithdrawFromChannelWithCreatorTokenIssued", - "fields": [], - "index": 108, - "docs": [ - "Cannot directly withdraw funds from a channel account when the channel has", - "a creator token issued" - ] - }, - { - "name": "PatronageCanOnlyBeClaimedForMemberOwnedChannels", - "fields": [], - "index": 109, - "docs": [ - "Patronage can only be claimed if channel is owned by a member" - ] - }, - { - "name": "ChannelTransfersBlockedDuringRevenueSplits", - "fields": [], - "index": 110, - "docs": [ - "Channel Transfers are blocked during revenue splits" - ] - }, - { - "name": "ChannelTransfersBlockedDuringTokenSales", - "fields": [], - "index": 111, - "docs": [ - "Channel Transfers are blocked during token sales" - ] - } - ] - } - }, - "docs": [ - "Content directory errors" - ] - } - }, - { - "id": 529, - "type": { - "path": [ - "pallet_storage", - "BagRecord" - ], - "params": [ - { - "name": "StorageBucketId", - "type": 8 - }, - { - "name": "DistributionBucketId", - "type": 115 - } - ], - "def": { - "composite": { - "fields": [ - { - "name": "stored_by", - "type": 101, - "typeName": "BTreeSet", - "docs": [] - }, - { - "name": "distributed_by", - "type": 117, - "typeName": "BTreeSet", - "docs": [] - }, - { - "name": "objects_total_size", - "type": 8, - "typeName": "u64", - "docs": [] - }, - { - "name": "objects_number", - "type": 8, - "typeName": "u64", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 530, - "type": { - "path": [ - "pallet_storage", - "StorageBucketRecord" - ], - "params": [ - { - "name": "WorkerId", - "type": 8 - }, - { - "name": "AccountId", - "type": 0 - } - ], - "def": { - "composite": { - "fields": [ - { - "name": "operator_status", - "type": 531, - "typeName": "StorageBucketOperatorStatus", - "docs": [] - }, - { - "name": "accepting_new_bags", - "type": 34, - "typeName": "bool", - "docs": [] - }, - { - "name": "voucher", - "type": 143, - "typeName": "Voucher", - "docs": [] - }, - { - "name": "assigned_bags", - "type": 8, - "typeName": "u64", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 531, - "type": { - "path": [ - "pallet_storage", - "StorageBucketOperatorStatus" - ], - "params": [ - { - "name": "WorkerId", - "type": 8 - }, - { - "name": "AccountId", - "type": 0 - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "Missing", - "fields": [], - "index": 0, - "docs": [] - }, - { - "name": "InvitedStorageWorker", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "WorkerId", - "docs": [] - } - ], - "index": 1, - "docs": [] - }, - { - "name": "StorageWorker", - "fields": [ - { - "name": null, - "type": 8, - "typeName": "WorkerId", - "docs": [] - }, - { - "name": null, - "type": 0, - "typeName": "AccountId", - "docs": [] - } - ], - "index": 2, - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 532, - "type": { - "path": [ - "pallet_storage", - "DynamicBagCreationPolicy" - ], - "params": [ - { - "name": "DistributionBucketFamilyId", - "type": 8 - } - ], - "def": { - "composite": { - "fields": [ - { - "name": "number_of_storage_buckets", - "type": 8, - "typeName": "u64", - "docs": [] - }, - { - "name": "families", - "type": 145, - "typeName": "BTreeMap", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 533, - "type": { - "path": [], - "params": [], - "def": { - "tuple": [ - 139, - 8 - ] - }, - "docs": [] - } - }, - { - "id": 534, - "type": { - "path": [ - "pallet_storage", - "DataObject" - ], - "params": [ - { - "name": "Balance", - "type": 6 - } - ], - "def": { - "composite": { - "fields": [ - { - "name": "accepted", - "type": 34, - "typeName": "bool", - "docs": [] - }, - { - "name": "state_bloat_bond", - "type": 6, - "typeName": "Balance", - "docs": [] - }, - { - "name": "size", - "type": 8, - "typeName": "u64", - "docs": [] - }, - { - "name": "ipfs_content_id", - "type": 10, - "typeName": "Vec", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 535, - "type": { - "path": [ - "pallet_storage", - "DistributionBucketFamilyRecord" - ], - "params": [ - { - "name": "DistributionBucketIndex", - "type": 8 - } - ], - "def": { - "composite": { - "fields": [ - { - "name": "next_distribution_bucket_index", - "type": 8, - "typeName": "DistributionBucketIndex", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 536, - "type": { - "path": [ - "pallet_storage", - "DistributionBucketRecord" - ], - "params": [ - { - "name": "WorkerId", - "type": 8 - } - ], - "def": { - "composite": { - "fields": [ - { - "name": "accepting_new_bags", - "type": 34, - "typeName": "bool", - "docs": [] - }, - { - "name": "distributing", - "type": 34, - "typeName": "bool", - "docs": [] - }, - { - "name": "pending_invitations", - "type": 101, - "typeName": "BTreeSet", - "docs": [] - }, - { - "name": "operators", - "type": 101, - "typeName": "BTreeSet", - "docs": [] - }, - { - "name": "assigned_bags", - "type": 8, - "typeName": "u64", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 537, - "type": { - "path": [ - "pallet_common", - "constraints", - "BoundedValueConstraint" - ], - "params": [ - { - "name": "Val", - "type": 8 - } - ], - "def": { - "composite": { - "fields": [ - { - "name": "min", - "type": 8, - "typeName": "Val", - "docs": [] - }, - { - "name": "max_min_diff", - "type": 8, - "typeName": "Val", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 538, - "type": { - "path": [ - "pallet_storage", - "Error" - ], - "params": [ - { - "name": "T", - "type": null - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "InvalidCidLength", - "fields": [], - "index": 0, - "docs": [ - "Invalid CID length (must be 46 bytes)" - ] - }, - { - "name": "NoObjectsOnUpload", - "fields": [], - "index": 1, - "docs": [ - "Empty \"data object creation\" collection." - ] - }, - { - "name": "StorageBucketDoesntExist", - "fields": [], - "index": 2, - "docs": [ - "The requested storage bucket doesn't exist." - ] - }, - { - "name": "StorageBucketIsNotBoundToBag", - "fields": [], - "index": 3, - "docs": [ - "The requested storage bucket is not bound to a bag." - ] - }, - { - "name": "StorageBucketIsBoundToBag", - "fields": [], - "index": 4, - "docs": [ - "The requested storage bucket is already bound to a bag." - ] - }, - { - "name": "NoStorageBucketInvitation", - "fields": [], - "index": 5, - "docs": [ - "Invalid operation with invites: there is no storage bucket invitation." - ] - }, - { - "name": "StorageProviderAlreadySet", - "fields": [], - "index": 6, - "docs": [ - "Invalid operation with invites: storage provider was already set." - ] - }, - { - "name": "StorageProviderMustBeSet", - "fields": [], - "index": 7, - "docs": [ - "Storage provider must be set." - ] - }, - { - "name": "DifferentStorageProviderInvited", - "fields": [], - "index": 8, - "docs": [ - "Invalid operation with invites: another storage provider was invited." - ] - }, - { - "name": "InvitedStorageProvider", - "fields": [], - "index": 9, - "docs": [ - "Invalid operation with invites: storage provider was already invited." - ] - }, - { - "name": "StorageBucketIdCollectionsAreEmpty", - "fields": [], - "index": 10, - "docs": [ - "Storage bucket id collections are empty." - ] - }, - { - "name": "StorageBucketsNumberViolatesDynamicBagCreationPolicy", - "fields": [], - "index": 11, - "docs": [ - "Storage bucket id collection provided contradicts the existing dynamic bag", - "creation policy." - ] - }, - { - "name": "DistributionBucketsViolatesDynamicBagCreationPolicy", - "fields": [], - "index": 12, - "docs": [ - "Distribution bucket id collection provided contradicts the existing dynamic bag", - "creation policy." - ] - }, - { - "name": "EmptyContentId", - "fields": [], - "index": 13, - "docs": [ - "Upload data error: empty content ID provided." - ] - }, - { - "name": "ZeroObjectSize", - "fields": [], - "index": 14, - "docs": [ - "Upload data error: zero object size." - ] - }, - { - "name": "InvalidStateBloatBondSourceAccount", - "fields": [], - "index": 15, - "docs": [ - "Upload data error: invalid state bloat bond source account." - ] - }, - { - "name": "InvalidStorageProvider", - "fields": [], - "index": 16, - "docs": [ - "Invalid storage provider for bucket." - ] - }, - { - "name": "InsufficientBalance", - "fields": [], - "index": 17, - "docs": [ - "Insufficient balance for an operation." - ] - }, - { - "name": "DataObjectDoesntExist", - "fields": [], - "index": 18, - "docs": [ - "Data object doesn't exist." - ] - }, - { - "name": "UploadingBlocked", - "fields": [], - "index": 19, - "docs": [ - "Uploading of the new object is blocked." - ] - }, - { - "name": "DataObjectIdCollectionIsEmpty", - "fields": [], - "index": 20, - "docs": [ - "Data object id collection is empty." - ] - }, - { - "name": "SourceAndDestinationBagsAreEqual", - "fields": [], - "index": 21, - "docs": [ - "Cannot move objects within the same bag." - ] - }, - { - "name": "DataObjectBlacklisted", - "fields": [], - "index": 22, - "docs": [ - "Data object hash is part of the blacklist." - ] - }, - { - "name": "BlacklistSizeLimitExceeded", - "fields": [], - "index": 23, - "docs": [ - "Blacklist size limit exceeded." - ] - }, - { - "name": "VoucherMaxObjectSizeLimitExceeded", - "fields": [], - "index": 24, - "docs": [ - "Max object size limit exceeded for voucher." - ] - }, - { - "name": "VoucherMaxObjectNumberLimitExceeded", - "fields": [], - "index": 25, - "docs": [ - "Max object number limit exceeded for voucher." - ] - }, - { - "name": "StorageBucketObjectNumberLimitReached", - "fields": [], - "index": 26, - "docs": [ - "Object number limit for the storage bucket reached." - ] - }, - { - "name": "StorageBucketObjectSizeLimitReached", - "fields": [], - "index": 27, - "docs": [ - "Objects total size limit for the storage bucket reached." - ] - }, - { - "name": "InsufficientTreasuryBalance", - "fields": [], - "index": 28, - "docs": [ - "Insufficient module treasury balance for an operation." - ] - }, - { - "name": "CannotDeleteNonEmptyStorageBucket", - "fields": [], - "index": 29, - "docs": [ - "Cannot delete a non-empty storage bucket." - ] - }, - { - "name": "DataObjectIdParamsAreEmpty", - "fields": [], - "index": 30, - "docs": [ - "The `data_object_ids` extrinsic parameter collection is empty." - ] - }, - { - "name": "StorageBucketsPerBagLimitTooLow", - "fields": [], - "index": 31, - "docs": [ - "The new `StorageBucketsPerBagLimit` number is too low." - ] - }, - { - "name": "StorageBucketsPerBagLimitTooHigh", - "fields": [], - "index": 32, - "docs": [ - "The new `StorageBucketsPerBagLimit` number is too high." - ] - }, - { - "name": "StorageBucketPerBagLimitExceeded", - "fields": [], - "index": 33, - "docs": [ - "`StorageBucketsPerBagLimit` was exceeded for a bag." - ] - }, - { - "name": "StorageBucketDoesntAcceptNewBags", - "fields": [], - "index": 34, - "docs": [ - "The storage bucket doesn't accept new bags." - ] - }, - { - "name": "DynamicBagExists", - "fields": [], - "index": 35, - "docs": [ - "Cannot create the dynamic bag: dynamic bag exists." - ] - }, - { - "name": "DynamicBagDoesntExist", - "fields": [], - "index": 36, - "docs": [ - "Dynamic bag doesn't exist." - ] - }, - { - "name": "StorageProviderOperatorDoesntExist", - "fields": [], - "index": 37, - "docs": [ - "Storage provider operator doesn't exist." - ] - }, - { - "name": "DataSizeFeeChanged", - "fields": [], - "index": 38, - "docs": [ - "Invalid extrinsic call: data size fee changed." - ] - }, - { - "name": "DataObjectStateBloatBondChanged", - "fields": [], - "index": 39, - "docs": [ - "Invalid extrinsic call: data object state bloat bond changed." - ] - }, - { - "name": "CannotDeleteNonEmptyDynamicBag", - "fields": [], - "index": 40, - "docs": [ - "Cannot delete non empty dynamic bag." - ] - }, - { - "name": "MaxDistributionBucketFamilyNumberLimitExceeded", - "fields": [], - "index": 41, - "docs": [ - "Max distribution bucket family number limit exceeded." - ] - }, - { - "name": "DistributionBucketFamilyDoesntExist", - "fields": [], - "index": 42, - "docs": [ - "Distribution bucket family doesn't exist." - ] - }, - { - "name": "DistributionBucketDoesntExist", - "fields": [], - "index": 43, - "docs": [ - "Distribution bucket doesn't exist." - ] - }, - { - "name": "DistributionBucketIdCollectionsAreEmpty", - "fields": [], - "index": 44, - "docs": [ - "Distribution bucket id collections are empty." - ] - }, - { - "name": "DistributionBucketDoesntAcceptNewBags", - "fields": [], - "index": 45, - "docs": [ - "Distribution bucket doesn't accept new bags." - ] - }, - { - "name": "MaxDistributionBucketNumberPerBagLimitExceeded", - "fields": [], - "index": 46, - "docs": [ - "Max distribution bucket number per bag limit exceeded." - ] - }, - { - "name": "DistributionBucketIsNotBoundToBag", - "fields": [], - "index": 47, - "docs": [ - "Distribution bucket is not bound to a bag." - ] - }, - { - "name": "DistributionBucketIsBoundToBag", - "fields": [], - "index": 48, - "docs": [ - "Distribution bucket is bound to a bag." - ] - }, - { - "name": "DistributionBucketsPerBagLimitTooLow", - "fields": [], - "index": 49, - "docs": [ - "The new `DistributionBucketsPerBagLimit` number is too low." - ] - }, - { - "name": "DistributionBucketsPerBagLimitTooHigh", - "fields": [], - "index": 50, - "docs": [ - "The new `DistributionBucketsPerBagLimit` number is too high." - ] - }, - { - "name": "DistributionProviderOperatorDoesntExist", - "fields": [], - "index": 51, - "docs": [ - "Distribution provider operator doesn't exist." - ] - }, - { - "name": "DistributionProviderOperatorAlreadyInvited", - "fields": [], - "index": 52, - "docs": [ - "Distribution provider operator already invited." - ] - }, - { - "name": "DistributionProviderOperatorSet", - "fields": [], - "index": 53, - "docs": [ - "Distribution provider operator already set." - ] - }, - { - "name": "NoDistributionBucketInvitation", - "fields": [], - "index": 54, - "docs": [ - "No distribution bucket invitation." - ] - }, - { - "name": "MustBeDistributionProviderOperatorForBucket", - "fields": [], - "index": 55, - "docs": [ - "Invalid operations: must be a distribution provider operator for a bucket." - ] - }, - { - "name": "MaxNumberOfPendingInvitationsLimitForDistributionBucketReached", - "fields": [], - "index": 56, - "docs": [ - "Max number of pending invitations limit for a distribution bucket reached." - ] - }, - { - "name": "DistributionFamilyBoundToBagCreationPolicy", - "fields": [], - "index": 57, - "docs": [ - "Distribution family bound to a bag creation policy." - ] - }, - { - "name": "MaxDataObjectSizeExceeded", - "fields": [], - "index": 58, - "docs": [ - "Max data object size exceeded." - ] - }, - { - "name": "InvalidTransactorAccount", - "fields": [], - "index": 59, - "docs": [ - "Invalid transactor account ID for this bucket." - ] - }, - { - "name": "NumberOfStorageBucketsOutsideOfAllowedContraints", - "fields": [], - "index": 60, - "docs": [ - "Not allowed 'number of storage buckets'" - ] - }, - { - "name": "NumberOfDistributionBucketsOutsideOfAllowedContraints", - "fields": [], - "index": 61, - "docs": [ - "Not allowed 'number of distribution buckets'" - ] - } - ] - } - }, - "docs": [ - "Storage module predefined errors" - ] - } - }, - { - "id": 539, - "type": { - "path": [ - "pallet_project_token", - "types", - "AccountData" - ], - "params": [ - { - "name": "VestingSchedule", - "type": 540 - }, - { - "name": "Balance", - "type": 6 - }, - { - "name": "StakingStatus", - "type": 541 - }, - { - "name": "JoyBalance", - "type": 6 - } - ], - "def": { - "composite": { - "fields": [ - { - "name": "vesting_schedules", - "type": 542, - "typeName": "BTreeMap", - "docs": [] - }, - { - "name": "amount", - "type": 6, - "typeName": "Balance", - "docs": [] - }, - { - "name": "split_staking_status", - "type": 545, - "typeName": "Option", - "docs": [] - }, - { - "name": "bloat_bond", - "type": 6, - "typeName": "JoyBalance", - "docs": [] - }, - { - "name": "next_vesting_transfer_id", - "type": 8, - "typeName": "u64", - "docs": [] - }, - { - "name": "last_sale_total_purchased_amount", - "type": 546, - "typeName": "Option<(TokenSaleId, Balance)>", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 540, - "type": { - "path": [ - "pallet_project_token", - "types", - "VestingSchedule" - ], - "params": [ - { - "name": "BlockNumber", - "type": 4 - }, - { - "name": "Balance", - "type": 6 - } - ], - "def": { - "composite": { - "fields": [ - { - "name": "linear_vesting_start_block", - "type": 4, - "typeName": "BlockNumber", - "docs": [] - }, - { - "name": "linear_vesting_duration", - "type": 4, - "typeName": "BlockNumber", - "docs": [] - }, - { - "name": "cliff_amount", - "type": 6, - "typeName": "Balance", - "docs": [] - }, - { - "name": "post_cliff_total_amount", - "type": 6, - "typeName": "Balance", - "docs": [] - }, - { - "name": "burned_amount", - "type": 6, - "typeName": "Balance", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 541, - "type": { - "path": [ - "pallet_project_token", - "types", - "StakingStatus" - ], - "params": [ - { - "name": "Balance", - "type": 6 - } - ], - "def": { - "composite": { - "fields": [ - { - "name": "split_id", - "type": 4, - "typeName": "RevenueSplitId", - "docs": [] - }, - { - "name": "amount", - "type": 6, - "typeName": "Balance", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 542, - "type": { - "path": [ - "BTreeMap" - ], - "params": [ - { - "name": "K", - "type": 168 - }, - { - "name": "V", - "type": 540 - } - ], - "def": { - "composite": { - "fields": [ - { - "name": null, - "type": 543, - "typeName": null, - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 543, - "type": { - "path": [], - "params": [], - "def": { - "sequence": { - "type": 544 - } - }, - "docs": [] - } - }, - { - "id": 544, - "type": { - "path": [], - "params": [], - "def": { - "tuple": [ - 168, - 540 - ] - }, - "docs": [] - } - }, - { - "id": 545, - "type": { - "path": [ - "Option" - ], - "params": [ - { - "name": "T", - "type": 541 - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "None", - "fields": [], - "index": 0, - "docs": [] - }, - { - "name": "Some", - "fields": [ - { - "name": null, - "type": 541, - "typeName": null, - "docs": [] - } - ], - "index": 1, - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 546, - "type": { - "path": [ - "Option" - ], - "params": [ - { - "name": "T", - "type": 547 - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "None", - "fields": [], - "index": 0, - "docs": [] - }, - { - "name": "Some", - "fields": [ - { - "name": null, - "type": 547, - "typeName": null, - "docs": [] - } - ], - "index": 1, - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 547, - "type": { - "path": [], - "params": [], - "def": { - "tuple": [ - 4, - 6 - ] - }, - "docs": [] - } - }, - { - "id": 548, - "type": { - "path": [ - "pallet_project_token", - "types", - "TokenData" - ], - "params": [ - { - "name": "Balance", - "type": 6 - }, - { - "name": "Hash", - "type": 9 - }, - { - "name": "BlockNumber", - "type": 4 - }, - { - "name": "TokenSale", - "type": 172 - }, - { - "name": "RevenueSplitState", - "type": 549 - } - ], - "def": { - "composite": { - "fields": [ - { - "name": "total_supply", - "type": 6, - "typeName": "Balance", - "docs": [] - }, - { - "name": "tokens_issued", - "type": 6, - "typeName": "Balance", - "docs": [] - }, - { - "name": "next_sale_id", - "type": 4, - "typeName": "TokenSaleId", - "docs": [] - }, - { - "name": "sale", - "type": 552, - "typeName": "Option", - "docs": [] - }, - { - "name": "transfer_policy", - "type": 149, - "typeName": "TransferPolicy", - "docs": [] - }, - { - "name": "symbol", - "type": 9, - "typeName": "Hash", - "docs": [] - }, - { - "name": "patronage_info", - "type": 553, - "typeName": "PatronageData", - "docs": [] - }, - { - "name": "accounts_number", - "type": 8, - "typeName": "u64", - "docs": [] - }, - { - "name": "revenue_split_rate", - "type": 153, - "typeName": "Permill", - "docs": [] - }, - { - "name": "revenue_split", - "type": 549, - "typeName": "RevenueSplitState", - "docs": [] - }, - { - "name": "next_revenue_split_id", - "type": 4, - "typeName": "RevenueSplitId", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 549, - "type": { - "path": [ - "pallet_project_token", - "types", - "RevenueSplitState" - ], - "params": [ - { - "name": "JoyBalance", - "type": 6 - }, - { - "name": "BlockNumber", - "type": 4 - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "Inactive", - "fields": [], - "index": 0, - "docs": [] - }, - { - "name": "Active", - "fields": [ - { - "name": null, - "type": 550, - "typeName": "RevenueSplitInfo", - "docs": [] - } - ], - "index": 1, - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 550, - "type": { - "path": [ - "pallet_project_token", - "types", - "RevenueSplitInfo" - ], - "params": [ - { - "name": "JoyBalance", - "type": 6 - }, - { - "name": "BlockNumber", - "type": 4 - } - ], - "def": { - "composite": { - "fields": [ - { - "name": "allocation", - "type": 6, - "typeName": "JoyBalance", - "docs": [] - }, - { - "name": "timeline", - "type": 551, - "typeName": "Timeline", - "docs": [] - }, - { - "name": "dividends_claimed", - "type": 6, - "typeName": "JoyBalance", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 551, - "type": { - "path": [ - "pallet_project_token", - "types", - "Timeline" - ], - "params": [ - { - "name": "BlockNumber", - "type": 4 - } - ], - "def": { - "composite": { - "fields": [ - { - "name": "start", - "type": 4, - "typeName": "BlockNumber", - "docs": [] - }, - { - "name": "duration", - "type": 4, - "typeName": "BlockNumber", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 552, - "type": { - "path": [ - "Option" - ], - "params": [ - { - "name": "T", - "type": 172 - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "None", - "fields": [], - "index": 0, - "docs": [] - }, - { - "name": "Some", - "fields": [ - { - "name": null, - "type": 172, - "typeName": null, - "docs": [] - } - ], - "index": 1, - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 553, - "type": { - "path": [ - "pallet_project_token", - "types", - "PatronageData" - ], - "params": [ - { - "name": "Balance", - "type": 6 - }, - { - "name": "BlockNumber", - "type": 4 - } - ], - "def": { - "composite": { - "fields": [ - { - "name": "rate", - "type": 554, - "typeName": "BlockRate", - "docs": [] - }, - { - "name": "unclaimed_patronage_tally_amount", - "type": 6, - "typeName": "Balance", - "docs": [] - }, - { - "name": "last_unclaimed_patronage_tally_block", - "type": 4, - "typeName": "BlockNumber", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 554, - "type": { - "path": [ - "pallet_project_token", - "types", - "BlockRate" - ], - "params": [], - "def": { - "composite": { - "fields": [ - { - "name": null, - "type": 173, - "typeName": "Perquintill", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 555, - "type": { - "path": [ - "pallet_project_token", - "errors", - "Error" - ], - "params": [ - { - "name": "T", - "type": null - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "InsufficientTransferrableBalance", - "fields": [], - "index": 0, - "docs": [ - "Account's transferrable balance is insufficient to perform the transfer or initialize token sale" - ] - }, - { - "name": "TokenDoesNotExist", - "fields": [], - "index": 1, - "docs": [ - "Requested token does not exist" - ] - }, - { - "name": "AccountInformationDoesNotExist", - "fields": [], - "index": 2, - "docs": [ - "Requested account data does not exist" - ] - }, - { - "name": "MerkleProofVerificationFailure", - "fields": [], - "index": 3, - "docs": [ - "Merkle proof verification failed" - ] - }, - { - "name": "TargetPatronageRateIsHigherThanCurrentRate", - "fields": [], - "index": 4, - "docs": [ - "Target Rate is higher than current patronage rate" - ] - }, - { - "name": "TokenSymbolAlreadyInUse", - "fields": [], - "index": 5, - "docs": [ - "Symbol already in use" - ] - }, - { - "name": "AccountAlreadyExists", - "fields": [], - "index": 6, - "docs": [ - "Account Already exists" - ] - }, - { - "name": "TransferDestinationMemberDoesNotExist", - "fields": [], - "index": 7, - "docs": [ - "Transfer destination member id invalid" - ] - }, - { - "name": "TokenIssuanceNotInIdleState", - "fields": [], - "index": 8, - "docs": [ - "Token's current offering state is not Idle" - ] - }, - { - "name": "InsufficientJoyBalance", - "fields": [], - "index": 9, - "docs": [ - "Insufficient JOY Balance to cover the transaction costs" - ] - }, - { - "name": "JoyTransferSubjectToDusting", - "fields": [], - "index": 10, - "docs": [ - "The amount of JOY to be transferred is not enough to keep the destination account alive" - ] - }, - { - "name": "AttemptToRemoveNonOwnedAccountUnderPermissionedMode", - "fields": [], - "index": 11, - "docs": [ - "Attempt to remove non owned account under permissioned mode" - ] - }, - { - "name": "AttemptToRemoveNonEmptyAccount", - "fields": [], - "index": 12, - "docs": [ - "Attempt to remove an account with some outstanding tokens" - ] - }, - { - "name": "CannotJoinWhitelistInPermissionlessMode", - "fields": [], - "index": 13, - "docs": [ - "Cannot join whitelist in permissionless mode" - ] - }, - { - "name": "CannotDeissueTokenWithOutstandingAccounts", - "fields": [], - "index": 14, - "docs": [ - "Cannot Deissue Token with outstanding accounts" - ] - }, - { - "name": "NoUpcomingSale", - "fields": [], - "index": 15, - "docs": [ - "The token has no upcoming sale" - ] - }, - { - "name": "NoActiveSale", - "fields": [], - "index": 16, - "docs": [ - "The token has no active sale at the moment" - ] - }, - { - "name": "InsufficientBalanceForTokenPurchase", - "fields": [], - "index": 17, - "docs": [ - "Account's JOY balance is insufficient to make the token purchase" - ] - }, - { - "name": "NotEnoughTokensOnSale", - "fields": [], - "index": 18, - "docs": [ - "Amount of tokens to purchase on sale exceeds the quantity of tokens still available on the sale" - ] - }, - { - "name": "SaleStartingBlockInThePast", - "fields": [], - "index": 19, - "docs": [ - "Specified sale starting block is in the past" - ] - }, - { - "name": "SaleAccessProofRequired", - "fields": [], - "index": 20, - "docs": [ - "Only whitelisted participants are allowed to access the sale, therefore access proof is required" - ] - }, - { - "name": "SaleAccessProofParticipantIsNotSender", - "fields": [], - "index": 21, - "docs": [ - "Participant in sale access proof provided during `purchase_tokens_on_sale`", - "does not match the sender account" - ] - }, - { - "name": "SalePurchaseCapExceeded", - "fields": [], - "index": 22, - "docs": [ - "Sale participant's cap (either cap_per_member or whitelisted participant's specific cap)", - "was exceeded with the purchase" - ] - }, - { - "name": "MaxVestingSchedulesPerAccountPerTokenReached", - "fields": [], - "index": 23, - "docs": [ - "Cannot add another vesting schedule to an account.", - "Maximum number of vesting schedules for this account-token pair was reached." - ] - }, - { - "name": "PreviousSaleNotFinalized", - "fields": [], - "index": 24, - "docs": [ - "Previous sale was still not finalized, finalize it first." - ] - }, - { - "name": "NoTokensToRecover", - "fields": [], - "index": 25, - "docs": [ - "There are no remaining tokes to recover from the previous token sale." - ] - }, - { - "name": "SaleDurationTooShort", - "fields": [], - "index": 26, - "docs": [ - "Specified sale duration is shorter than MinSaleDuration" - ] - }, - { - "name": "SaleDurationIsZero", - "fields": [], - "index": 27, - "docs": [ - "Sale duration cannot be zero" - ] - }, - { - "name": "SaleUpperBoundQuantityIsZero", - "fields": [], - "index": 28, - "docs": [ - "Upper bound quantity cannot be zero" - ] - }, - { - "name": "SaleCapPerMemberIsZero", - "fields": [], - "index": 29, - "docs": [ - "Purchase cap per member cannot be zero" - ] - }, - { - "name": "SaleUnitPriceIsZero", - "fields": [], - "index": 30, - "docs": [ - "Token's unit price cannot be zero" - ] - }, - { - "name": "SalePurchaseAmountIsZero", - "fields": [], - "index": 31, - "docs": [ - "Amount of tokens to purchase on sale cannot be zero" - ] - }, - { - "name": "RevenueSplitTimeToStartTooShort", - "fields": [], - "index": 32, - "docs": [ - "Specified revenue split starting block is in the past" - ] - }, - { - "name": "RevenueSplitDurationTooShort", - "fields": [], - "index": 33, - "docs": [ - "Revenue Split duration is too short" - ] - }, - { - "name": "RevenueSplitAlreadyActiveForToken", - "fields": [], - "index": 34, - "docs": [ - "Attempt to activate split with one ongoing" - ] - }, - { - "name": "RevenueSplitNotActiveForToken", - "fields": [], - "index": 35, - "docs": [ - "Attempt to make revenue split operations with token not in active split state" - ] - }, - { - "name": "RevenueSplitDidNotEnd", - "fields": [], - "index": 36, - "docs": [ - "Revenue Split has not ended yet" - ] - }, - { - "name": "RevenueSplitNotOngoing", - "fields": [], - "index": 37, - "docs": [ - "Revenue Split for token active, but not ongoing" - ] - }, - { - "name": "UserAlreadyParticipating", - "fields": [], - "index": 38, - "docs": [ - "User already participating in the revenue split" - ] - }, - { - "name": "InsufficientBalanceForSplitParticipation", - "fields": [], - "index": 39, - "docs": [ - "User does not posses enough balance to participate in the revenue split" - ] - }, - { - "name": "UserNotParticipantingInAnySplit", - "fields": [], - "index": 40, - "docs": [ - "User is not participating in any split" - ] - }, - { - "name": "CannotParticipateInSplitWithZeroAmount", - "fields": [], - "index": 41, - "docs": [ - "Attempt to participate in a split with zero token to stake" - ] - }, - { - "name": "CannotIssueSplitWithZeroAllocationAmount", - "fields": [], - "index": 42, - "docs": [ - "Attempt to issue in a split with zero allocation amount" - ] - }, - { - "name": "CannotModifySupplyWhenRevenueSplitsAreActive", - "fields": [], - "index": 43, - "docs": [ - "Attempt to modify supply when revenue split is active" - ] - }, - { - "name": "RevenueSplitRateIsZero", - "fields": [], - "index": 44, - "docs": [ - "Revenue split rate cannot be 0" - ] - }, - { - "name": "BurnAmountIsZero", - "fields": [], - "index": 45, - "docs": [ - "Provided amount to burn is == 0" - ] - }, - { - "name": "BurnAmountGreaterThanAccountTokensAmount", - "fields": [], - "index": 46, - "docs": [ - "Amount of tokens to burn exceeds total amount of tokens owned by the account" - ] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 556, - "type": { - "path": [ - "pallet_proposals_engine", - "types", - "Proposal" - ], - "params": [ - { - "name": "BlockNumber", - "type": 4 - }, - { - "name": "ProposerId", - "type": 8 - }, - { - "name": "Balance", - "type": 6 - }, - { - "name": "AccountId", - "type": 0 - } - ], - "def": { - "composite": { - "fields": [ - { - "name": "parameters", - "type": 557, - "typeName": "ProposalParameters", - "docs": [] - }, - { - "name": "proposer_id", - "type": 8, - "typeName": "ProposerId", - "docs": [] - }, - { - "name": "activated_at", - "type": 4, - "typeName": "BlockNumber", - "docs": [] - }, - { - "name": "status", - "type": 175, - "typeName": "ProposalStatus", - "docs": [] - }, - { - "name": "voting_results", - "type": 558, - "typeName": "VotingResults", - "docs": [] - }, - { - "name": "exact_execution_block", - "type": 106, - "typeName": "Option", - "docs": [] - }, - { - "name": "nr_of_council_confirmations", - "type": 4, - "typeName": "u32", - "docs": [] - }, - { - "name": "staking_account_id", - "type": 58, - "typeName": "Option", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 557, - "type": { - "path": [ - "pallet_proposals_engine", - "types", - "ProposalParameters" - ], - "params": [ - { - "name": "BlockNumber", - "type": 4 - }, - { - "name": "Balance", - "type": 6 - } - ], - "def": { - "composite": { - "fields": [ - { - "name": "voting_period", - "type": 4, - "typeName": "BlockNumber", - "docs": [] - }, - { - "name": "grace_period", - "type": 4, - "typeName": "BlockNumber", - "docs": [] - }, - { - "name": "approval_quorum_percentage", - "type": 4, - "typeName": "u32", - "docs": [] - }, - { - "name": "approval_threshold_percentage", - "type": 4, - "typeName": "u32", - "docs": [] - }, - { - "name": "slashing_quorum_percentage", - "type": 4, - "typeName": "u32", - "docs": [] - }, - { - "name": "slashing_threshold_percentage", - "type": 4, - "typeName": "u32", - "docs": [] - }, - { - "name": "required_stake", - "type": 105, - "typeName": "Option", - "docs": [] - }, - { - "name": "constitutionality", - "type": 4, - "typeName": "u32", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 558, - "type": { - "path": [ - "pallet_proposals_engine", - "types", - "VotingResults" - ], - "params": [], - "def": { - "composite": { - "fields": [ - { - "name": "abstentions", - "type": 4, - "typeName": "u32", - "docs": [] - }, - { - "name": "approvals", - "type": 4, - "typeName": "u32", - "docs": [] - }, - { - "name": "rejections", - "type": 4, - "typeName": "u32", - "docs": [] - }, - { - "name": "slashes", - "type": 4, - "typeName": "u32", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 559, - "type": { - "path": [], - "params": [], - "def": { - "tuple": [ - 4, - 8 - ] - }, - "docs": [] - } - }, - { - "id": 560, - "type": { - "path": [ - "pallet_proposals_engine", - "Error" - ], - "params": [ - { - "name": "T", - "type": null - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "EmptyTitleProvided", - "fields": [], - "index": 0, - "docs": [ - "Proposal cannot have an empty title\"" - ] - }, - { - "name": "EmptyDescriptionProvided", - "fields": [], - "index": 1, - "docs": [ - "Proposal cannot have an empty body" - ] - }, - { - "name": "TitleIsTooLong", - "fields": [], - "index": 2, - "docs": [ - "Title is too long" - ] - }, - { - "name": "DescriptionIsTooLong", - "fields": [], - "index": 3, - "docs": [ - "Description is too long" - ] - }, - { - "name": "ProposalNotFound", - "fields": [], - "index": 4, - "docs": [ - "The proposal does not exist" - ] - }, - { - "name": "ProposalFinalized", - "fields": [], - "index": 5, - "docs": [ - "Proposal is finalized already" - ] - }, - { - "name": "AlreadyVoted", - "fields": [], - "index": 6, - "docs": [ - "The proposal have been already voted on" - ] - }, - { - "name": "NotAuthor", - "fields": [], - "index": 7, - "docs": [ - "Not an author" - ] - }, - { - "name": "MaxActiveProposalNumberExceeded", - "fields": [], - "index": 8, - "docs": [ - "Max active proposals number exceeded" - ] - }, - { - "name": "EmptyStake", - "fields": [], - "index": 9, - "docs": [ - "Stake cannot be empty with this proposal" - ] - }, - { - "name": "StakeShouldBeEmpty", - "fields": [], - "index": 10, - "docs": [ - "Stake should be empty for this proposal" - ] - }, - { - "name": "StakeDiffersFromRequired", - "fields": [], - "index": 11, - "docs": [ - "Stake differs from the proposal requirements" - ] - }, - { - "name": "InvalidParameterApprovalThreshold", - "fields": [], - "index": 12, - "docs": [ - "Approval threshold cannot be zero" - ] - }, - { - "name": "InvalidParameterSlashingThreshold", - "fields": [], - "index": 13, - "docs": [ - "Slashing threshold cannot be zero" - ] - }, - { - "name": "RequireRootOrigin", - "fields": [], - "index": 14, - "docs": [ - "Require root origin in extrinsics" - ] - }, - { - "name": "ProposalHasVotes", - "fields": [], - "index": 15, - "docs": [ - "Disallow to cancel the proposal if there are any votes on it." - ] - }, - { - "name": "ZeroExactExecutionBlock", - "fields": [], - "index": 16, - "docs": [ - "Exact execution block cannot be zero." - ] - }, - { - "name": "InvalidExactExecutionBlock", - "fields": [], - "index": 17, - "docs": [ - "Exact execution block cannot be less than current_block." - ] - }, - { - "name": "InsufficientBalanceForStake", - "fields": [], - "index": 18, - "docs": [ - "There is not enough balance for a stake." - ] - }, - { - "name": "ConflictingStakes", - "fields": [], - "index": 19, - "docs": [ - "The conflicting stake discovered. Cannot stake." - ] - }, - { - "name": "InvalidStakingAccountForMember", - "fields": [], - "index": 20, - "docs": [ - "Staking account doesn't belong to a member." - ] - } - ] - } - }, - "docs": [ - "Engine module predefined errors" - ] - } - }, - { - "id": 561, - "type": { - "path": [ - "pallet_proposals_discussion", - "types", - "DiscussionThread" - ], - "params": [ - { - "name": "ThreadAuthorId", - "type": 8 - }, - { - "name": "BlockNumber", - "type": 4 - }, - { - "name": "MemberId", - "type": 8 - } - ], - "def": { - "composite": { - "fields": [ - { - "name": "activated_at", - "type": 4, - "typeName": "BlockNumber", - "docs": [] - }, - { - "name": "author_id", - "type": 8, - "typeName": "ThreadAuthorId", - "docs": [] - }, - { - "name": "mode", - "type": 181, - "typeName": "ThreadMode", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 562, - "type": { - "path": [ - "pallet_proposals_discussion", - "types", - "DiscussionPost" - ], - "params": [ - { - "name": "PostAuthorId", - "type": 8 - }, - { - "name": "Balance", - "type": 6 - }, - { - "name": "BlockNumber", - "type": 4 - } - ], - "def": { - "composite": { - "fields": [ - { - "name": "author_id", - "type": 8, - "typeName": "PostAuthorId", - "docs": [] - }, - { - "name": "cleanup_pay_off", - "type": 6, - "typeName": "Balance", - "docs": [] - }, - { - "name": "last_edited", - "type": 4, - "typeName": "BlockNumber", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 563, - "type": { - "path": [ - "pallet_proposals_discussion", - "Error" - ], - "params": [ - { - "name": "T", - "type": null - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "ThreadDoesntExist", - "fields": [], - "index": 0, - "docs": [ - "Thread doesn't exist" - ] - }, - { - "name": "PostDoesntExist", - "fields": [], - "index": 1, - "docs": [ - "Post doesn't exist" - ] - }, - { - "name": "RequireRootOrigin", - "fields": [], - "index": 2, - "docs": [ - "Require root origin in extrinsics" - ] - }, - { - "name": "CannotPostOnClosedThread", - "fields": [], - "index": 3, - "docs": [ - "The thread has Closed mode. And post author doesn't belong to council or allowed members." - ] - }, - { - "name": "NotAuthorOrCouncilor", - "fields": [], - "index": 4, - "docs": [ - "Should be thread author or councilor." - ] - }, - { - "name": "MaxWhiteListSizeExceeded", - "fields": [], - "index": 5, - "docs": [ - "Max allowed authors list limit exceeded." - ] - }, - { - "name": "InsufficientBalanceForPost", - "fields": [], - "index": 6, - "docs": [ - "Account has insufficient balance to create a post" - ] - }, - { - "name": "CannotDeletePost", - "fields": [], - "index": 7, - "docs": [ - "Account can't delete post at the moment" - ] - } - ] - } - }, - "docs": [ - "Discussion module predefined errors" - ] - } - }, - { - "id": 564, - "type": { - "path": [ - "pallet_proposals_codex", - "Error" - ], - "params": [ - { - "name": "T", - "type": null - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "SignalProposalIsEmpty", - "fields": [], - "index": 0, - "docs": [ - "Provided text for text proposal is empty" - ] - }, - { - "name": "RuntimeProposalIsEmpty", - "fields": [], - "index": 1, - "docs": [ - "Provided WASM code for the runtime upgrade proposal is empty" - ] - }, - { - "name": "InvalidFundingRequestProposalBalance", - "fields": [], - "index": 2, - "docs": [ - "Invalid balance value for the spending proposal" - ] - }, - { - "name": "InvalidValidatorCount", - "fields": [], - "index": 3, - "docs": [ - "Invalid validator count for the 'set validator count' proposal" - ] - }, - { - "name": "RequireRootOrigin", - "fields": [], - "index": 4, - "docs": [ - "Require root origin in extrinsics" - ] - }, - { - "name": "InvalidCouncilElectionParameterCouncilSize", - "fields": [], - "index": 5, - "docs": [ - "Invalid council election parameter - council_size" - ] - }, - { - "name": "InvalidCouncilElectionParameterCandidacyLimit", - "fields": [], - "index": 6, - "docs": [ - "Invalid council election parameter - candidacy-limit" - ] - }, - { - "name": "InvalidCouncilElectionParameterMinVotingStake", - "fields": [], - "index": 7, - "docs": [ - "Invalid council election parameter - min-voting_stake" - ] - }, - { - "name": "InvalidCouncilElectionParameterNewTermDuration", - "fields": [], - "index": 8, - "docs": [ - "Invalid council election parameter - new_term_duration" - ] - }, - { - "name": "InvalidCouncilElectionParameterMinCouncilStake", - "fields": [], - "index": 9, - "docs": [ - "Invalid council election parameter - min_council_stake" - ] - }, - { - "name": "InvalidCouncilElectionParameterRevealingPeriod", - "fields": [], - "index": 10, - "docs": [ - "Invalid council election parameter - revealing_period" - ] - }, - { - "name": "InvalidCouncilElectionParameterVotingPeriod", - "fields": [], - "index": 11, - "docs": [ - "Invalid council election parameter - voting_period" - ] - }, - { - "name": "InvalidCouncilElectionParameterAnnouncingPeriod", - "fields": [], - "index": 12, - "docs": [ - "Invalid council election parameter - announcing_period" - ] - }, - { - "name": "InvalidWorkingGroupBudgetCapacity", - "fields": [], - "index": 13, - "docs": [ - "Invalid working group budget capacity parameter" - ] - }, - { - "name": "InvalidSetLeadParameterCannotBeCouncilor", - "fields": [], - "index": 14, - "docs": [ - "Invalid 'set lead proposal' parameter - proposed lead cannot be a councilor" - ] - }, - { - "name": "SlashingStakeIsZero", - "fields": [], - "index": 15, - "docs": [ - "Invalid 'slash stake proposal' parameter - cannot slash by zero balance." - ] - }, - { - "name": "DecreasingStakeIsZero", - "fields": [], - "index": 16, - "docs": [ - "Invalid 'decrease stake proposal' parameter - cannot decrease by zero balance." - ] - }, - { - "name": "InsufficientFundsForBudgetUpdate", - "fields": [], - "index": 17, - "docs": [ - "Insufficient funds for 'Update Working Group Budget' proposal execution" - ] - }, - { - "name": "InvalidFundingRequestProposalNumberOfAccount", - "fields": [], - "index": 18, - "docs": [ - "Invalid number of accounts recieving funding request for 'Funding Request' proposal." - ] - }, - { - "name": "InvalidFundingRequestProposalRepeatedAccount", - "fields": [], - "index": 19, - "docs": [ - "Repeated account in 'Funding Request' proposal." - ] - }, - { - "name": "InvalidChannelPayoutsProposalMinCashoutExceedsMaxCashout", - "fields": [], - "index": 20, - "docs": [] - } - ] - } - }, - "docs": [ - "Codex module predefined errors" - ] - } - }, - { - "id": 565, - "type": { - "path": [ - "pallet_working_group", - "types", - "Opening" - ], - "params": [ - { - "name": "BlockNumber", - "type": 4 - }, - { - "name": "Balance", - "type": 6 - } - ], - "def": { - "composite": { - "fields": [ - { - "name": "opening_type", - "type": 195, - "typeName": "OpeningType", - "docs": [] - }, - { - "name": "created", - "type": 4, - "typeName": "BlockNumber", - "docs": [] - }, - { - "name": "description_hash", - "type": 10, - "typeName": "Vec", - "docs": [] - }, - { - "name": "stake_policy", - "type": 188, - "typeName": "StakePolicy", - "docs": [] - }, - { - "name": "reward_per_block", - "type": 105, - "typeName": "Option", - "docs": [] - }, - { - "name": "creation_stake", - "type": 6, - "typeName": "Balance", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 566, - "type": { - "path": [ - "pallet_working_group", - "types", - "JobApplication" - ], - "params": [ - { - "name": "AccountId", - "type": 0 - }, - { - "name": "MemberId", - "type": 8 - } - ], - "def": { - "composite": { - "fields": [ - { - "name": "role_account_id", - "type": 0, - "typeName": "AccountId", - "docs": [] - }, - { - "name": "reward_account_id", - "type": 0, - "typeName": "AccountId", - "docs": [] - }, - { - "name": "staking_account_id", - "type": 0, - "typeName": "AccountId", - "docs": [] - }, - { - "name": "member_id", - "type": 8, - "typeName": "MemberId", - "docs": [] - }, - { - "name": "description_hash", - "type": 10, - "typeName": "Vec", - "docs": [] - }, - { - "name": "opening_id", - "type": 8, - "typeName": "OpeningId", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 567, - "type": { - "path": [ - "pallet_working_group", - "types", - "GroupWorker" - ], - "params": [ - { - "name": "AccountId", - "type": 0 - }, - { - "name": "MemberId", - "type": 8 - }, - { - "name": "BlockNumber", - "type": 4 - }, - { - "name": "Balance", - "type": 6 - } - ], - "def": { - "composite": { - "fields": [ - { - "name": "member_id", - "type": 8, - "typeName": "MemberId", - "docs": [] - }, - { - "name": "role_account_id", - "type": 0, - "typeName": "AccountId", - "docs": [] - }, - { - "name": "staking_account_id", - "type": 0, - "typeName": "AccountId", - "docs": [] - }, - { - "name": "reward_account_id", - "type": 0, - "typeName": "AccountId", - "docs": [] - }, - { - "name": "started_leaving_at", - "type": 106, - "typeName": "Option", - "docs": [] - }, - { - "name": "job_unstaking_period", - "type": 4, - "typeName": "BlockNumber", - "docs": [] - }, - { - "name": "reward_per_block", - "type": 105, - "typeName": "Option", - "docs": [] - }, - { - "name": "missed_reward", - "type": 105, - "typeName": "Option", - "docs": [] - }, - { - "name": "created_at", - "type": 4, - "typeName": "BlockNumber", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 568, - "type": { - "path": [ - "pallet_working_group", - "errors", - "Error" - ], - "params": [ - { - "name": "T", - "type": null - }, - { - "name": "I", - "type": null - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "StakeBalanceCannotBeZero", - "fields": [], - "index": 0, - "docs": [ - "Provided stake balance cannot be zero." - ] - }, - { - "name": "OpeningDoesNotExist", - "fields": [], - "index": 1, - "docs": [ - "Opening does not exist." - ] - }, - { - "name": "CannotHireMultipleLeaders", - "fields": [], - "index": 2, - "docs": [ - "Cannot fill opening with multiple applications." - ] - }, - { - "name": "WorkerApplicationDoesNotExist", - "fields": [], - "index": 3, - "docs": [ - "Worker application does not exist." - ] - }, - { - "name": "MaxActiveWorkerNumberExceeded", - "fields": [], - "index": 4, - "docs": [ - "Working group size limit exceeded." - ] - }, - { - "name": "SuccessfulWorkerApplicationDoesNotExist", - "fields": [], - "index": 5, - "docs": [ - "Successful worker application does not exist." - ] - }, - { - "name": "CannotHireLeaderWhenLeaderExists", - "fields": [], - "index": 6, - "docs": [ - "There is leader already, cannot hire another one." - ] - }, - { - "name": "IsNotLeadAccount", - "fields": [], - "index": 7, - "docs": [ - "Not a lead account." - ] - }, - { - "name": "CurrentLeadNotSet", - "fields": [], - "index": 8, - "docs": [ - "Current lead is not set." - ] - }, - { - "name": "WorkerDoesNotExist", - "fields": [], - "index": 9, - "docs": [ - "Worker does not exist." - ] - }, - { - "name": "InvalidMemberOrigin", - "fields": [], - "index": 10, - "docs": [ - "Invalid origin for a member." - ] - }, - { - "name": "SignerIsNotWorkerRoleAccount", - "fields": [], - "index": 11, - "docs": [ - "Signer is not worker role account." - ] - }, - { - "name": "BelowMinimumStakes", - "fields": [], - "index": 12, - "docs": [ - "Staking less than the lower bound." - ] - }, - { - "name": "InsufficientBalanceToCoverStake", - "fields": [], - "index": 13, - "docs": [ - "Insufficient balance to cover stake." - ] - }, - { - "name": "ApplicationStakeDoesntMatchOpening", - "fields": [], - "index": 14, - "docs": [ - "Application stake is less than required opening stake." - ] - }, - { - "name": "OriginIsNotApplicant", - "fields": [], - "index": 15, - "docs": [ - "Origin is not applicant." - ] - }, - { - "name": "WorkerIsLeaving", - "fields": [], - "index": 16, - "docs": [ - "Invalid operation - worker is leaving." - ] - }, - { - "name": "CannotRewardWithZero", - "fields": [], - "index": 17, - "docs": [ - "Reward could not be zero." - ] - }, - { - "name": "InvalidStakingAccountForMember", - "fields": [], - "index": 18, - "docs": [ - "Staking account doesn't belong to a member." - ] - }, - { - "name": "ConflictStakesOnAccount", - "fields": [], - "index": 19, - "docs": [ - "Staking account contains conflicting stakes." - ] - }, - { - "name": "WorkerHasNoReward", - "fields": [], - "index": 20, - "docs": [ - "Worker has no recurring reward." - ] - }, - { - "name": "UnstakingPeriodLessThanMinimum", - "fields": [], - "index": 21, - "docs": [ - "Specified unstaking period is less then minimum set for the group." - ] - }, - { - "name": "CannotSpendZero", - "fields": [], - "index": 22, - "docs": [ - "Invalid spending amount." - ] - }, - { - "name": "InsufficientBudgetForSpending", - "fields": [], - "index": 23, - "docs": [ - "It's not enough budget for this spending." - ] - }, - { - "name": "NoApplicationsProvided", - "fields": [], - "index": 24, - "docs": [ - "Cannot fill opening - no applications provided." - ] - }, - { - "name": "CannotDecreaseStakeDeltaGreaterThanStake", - "fields": [], - "index": 25, - "docs": [ - "Cannot decrease stake - stake delta greater than initial stake." - ] - }, - { - "name": "ApplicationsNotForOpening", - "fields": [], - "index": 26, - "docs": [ - "Trying to fill opening with an application for other opening" - ] - }, - { - "name": "WorkerStorageValueTooLong", - "fields": [], - "index": 27, - "docs": [ - "Worker storage text is too long." - ] - }, - { - "name": "InsufficientTokensForFunding", - "fields": [], - "index": 28, - "docs": [ - "Insufficient tokens for funding (on member controller account)" - ] - }, - { - "name": "ZeroTokensFunding", - "fields": [], - "index": 29, - "docs": [ - "Trying to fund with zero tokens" - ] - }, - { - "name": "InsufficientBalanceForTransfer", - "fields": [], - "index": 30, - "docs": [ - "Cannot withdraw: insufficient budget balance." - ] - } - ] - } - }, - "docs": [ - "Discussion module predefined errors" - ] - } - }, - { - "id": 569, - "type": { - "path": [ - "pallet_working_group", - "errors", - "Error" - ], - "params": [ - { - "name": "T", - "type": null - }, - { - "name": "I", - "type": null - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "StakeBalanceCannotBeZero", - "fields": [], - "index": 0, - "docs": [ - "Provided stake balance cannot be zero." - ] - }, - { - "name": "OpeningDoesNotExist", - "fields": [], - "index": 1, - "docs": [ - "Opening does not exist." - ] - }, - { - "name": "CannotHireMultipleLeaders", - "fields": [], - "index": 2, - "docs": [ - "Cannot fill opening with multiple applications." - ] - }, - { - "name": "WorkerApplicationDoesNotExist", - "fields": [], - "index": 3, - "docs": [ - "Worker application does not exist." - ] - }, - { - "name": "MaxActiveWorkerNumberExceeded", - "fields": [], - "index": 4, - "docs": [ - "Working group size limit exceeded." - ] - }, - { - "name": "SuccessfulWorkerApplicationDoesNotExist", - "fields": [], - "index": 5, - "docs": [ - "Successful worker application does not exist." - ] - }, - { - "name": "CannotHireLeaderWhenLeaderExists", - "fields": [], - "index": 6, - "docs": [ - "There is leader already, cannot hire another one." - ] - }, - { - "name": "IsNotLeadAccount", - "fields": [], - "index": 7, - "docs": [ - "Not a lead account." - ] - }, - { - "name": "CurrentLeadNotSet", - "fields": [], - "index": 8, - "docs": [ - "Current lead is not set." - ] - }, - { - "name": "WorkerDoesNotExist", - "fields": [], - "index": 9, - "docs": [ - "Worker does not exist." - ] - }, - { - "name": "InvalidMemberOrigin", - "fields": [], - "index": 10, - "docs": [ - "Invalid origin for a member." - ] - }, - { - "name": "SignerIsNotWorkerRoleAccount", - "fields": [], - "index": 11, - "docs": [ - "Signer is not worker role account." - ] - }, - { - "name": "BelowMinimumStakes", - "fields": [], - "index": 12, - "docs": [ - "Staking less than the lower bound." - ] - }, - { - "name": "InsufficientBalanceToCoverStake", - "fields": [], - "index": 13, - "docs": [ - "Insufficient balance to cover stake." - ] - }, - { - "name": "ApplicationStakeDoesntMatchOpening", - "fields": [], - "index": 14, - "docs": [ - "Application stake is less than required opening stake." - ] - }, - { - "name": "OriginIsNotApplicant", - "fields": [], - "index": 15, - "docs": [ - "Origin is not applicant." - ] - }, - { - "name": "WorkerIsLeaving", - "fields": [], - "index": 16, - "docs": [ - "Invalid operation - worker is leaving." - ] - }, - { - "name": "CannotRewardWithZero", - "fields": [], - "index": 17, - "docs": [ - "Reward could not be zero." - ] - }, - { - "name": "InvalidStakingAccountForMember", - "fields": [], - "index": 18, - "docs": [ - "Staking account doesn't belong to a member." - ] - }, - { - "name": "ConflictStakesOnAccount", - "fields": [], - "index": 19, - "docs": [ - "Staking account contains conflicting stakes." - ] - }, - { - "name": "WorkerHasNoReward", - "fields": [], - "index": 20, - "docs": [ - "Worker has no recurring reward." - ] - }, - { - "name": "UnstakingPeriodLessThanMinimum", - "fields": [], - "index": 21, - "docs": [ - "Specified unstaking period is less then minimum set for the group." - ] - }, - { - "name": "CannotSpendZero", - "fields": [], - "index": 22, - "docs": [ - "Invalid spending amount." - ] - }, - { - "name": "InsufficientBudgetForSpending", - "fields": [], - "index": 23, - "docs": [ - "It's not enough budget for this spending." - ] - }, - { - "name": "NoApplicationsProvided", - "fields": [], - "index": 24, - "docs": [ - "Cannot fill opening - no applications provided." - ] - }, - { - "name": "CannotDecreaseStakeDeltaGreaterThanStake", - "fields": [], - "index": 25, - "docs": [ - "Cannot decrease stake - stake delta greater than initial stake." - ] - }, - { - "name": "ApplicationsNotForOpening", - "fields": [], - "index": 26, - "docs": [ - "Trying to fill opening with an application for other opening" - ] - }, - { - "name": "WorkerStorageValueTooLong", - "fields": [], - "index": 27, - "docs": [ - "Worker storage text is too long." - ] - }, - { - "name": "InsufficientTokensForFunding", - "fields": [], - "index": 28, - "docs": [ - "Insufficient tokens for funding (on member controller account)" - ] - }, - { - "name": "ZeroTokensFunding", - "fields": [], - "index": 29, - "docs": [ - "Trying to fund with zero tokens" - ] - }, - { - "name": "InsufficientBalanceForTransfer", - "fields": [], - "index": 30, - "docs": [ - "Cannot withdraw: insufficient budget balance." - ] - } - ] - } - }, - "docs": [ - "Discussion module predefined errors" - ] - } - }, - { - "id": 570, - "type": { - "path": [ - "pallet_working_group", - "errors", - "Error" - ], - "params": [ - { - "name": "T", - "type": null - }, - { - "name": "I", - "type": null - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "StakeBalanceCannotBeZero", - "fields": [], - "index": 0, - "docs": [ - "Provided stake balance cannot be zero." - ] - }, - { - "name": "OpeningDoesNotExist", - "fields": [], - "index": 1, - "docs": [ - "Opening does not exist." - ] - }, - { - "name": "CannotHireMultipleLeaders", - "fields": [], - "index": 2, - "docs": [ - "Cannot fill opening with multiple applications." - ] - }, - { - "name": "WorkerApplicationDoesNotExist", - "fields": [], - "index": 3, - "docs": [ - "Worker application does not exist." - ] - }, - { - "name": "MaxActiveWorkerNumberExceeded", - "fields": [], - "index": 4, - "docs": [ - "Working group size limit exceeded." - ] - }, - { - "name": "SuccessfulWorkerApplicationDoesNotExist", - "fields": [], - "index": 5, - "docs": [ - "Successful worker application does not exist." - ] - }, - { - "name": "CannotHireLeaderWhenLeaderExists", - "fields": [], - "index": 6, - "docs": [ - "There is leader already, cannot hire another one." - ] - }, - { - "name": "IsNotLeadAccount", - "fields": [], - "index": 7, - "docs": [ - "Not a lead account." - ] - }, - { - "name": "CurrentLeadNotSet", - "fields": [], - "index": 8, - "docs": [ - "Current lead is not set." - ] - }, - { - "name": "WorkerDoesNotExist", - "fields": [], - "index": 9, - "docs": [ - "Worker does not exist." - ] - }, - { - "name": "InvalidMemberOrigin", - "fields": [], - "index": 10, - "docs": [ - "Invalid origin for a member." - ] - }, - { - "name": "SignerIsNotWorkerRoleAccount", - "fields": [], - "index": 11, - "docs": [ - "Signer is not worker role account." - ] - }, - { - "name": "BelowMinimumStakes", - "fields": [], - "index": 12, - "docs": [ - "Staking less than the lower bound." - ] - }, - { - "name": "InsufficientBalanceToCoverStake", - "fields": [], - "index": 13, - "docs": [ - "Insufficient balance to cover stake." - ] - }, - { - "name": "ApplicationStakeDoesntMatchOpening", - "fields": [], - "index": 14, - "docs": [ - "Application stake is less than required opening stake." - ] - }, - { - "name": "OriginIsNotApplicant", - "fields": [], - "index": 15, - "docs": [ - "Origin is not applicant." - ] - }, - { - "name": "WorkerIsLeaving", - "fields": [], - "index": 16, - "docs": [ - "Invalid operation - worker is leaving." - ] - }, - { - "name": "CannotRewardWithZero", - "fields": [], - "index": 17, - "docs": [ - "Reward could not be zero." - ] - }, - { - "name": "InvalidStakingAccountForMember", - "fields": [], - "index": 18, - "docs": [ - "Staking account doesn't belong to a member." - ] - }, - { - "name": "ConflictStakesOnAccount", - "fields": [], - "index": 19, - "docs": [ - "Staking account contains conflicting stakes." - ] - }, - { - "name": "WorkerHasNoReward", - "fields": [], - "index": 20, - "docs": [ - "Worker has no recurring reward." - ] - }, - { - "name": "UnstakingPeriodLessThanMinimum", - "fields": [], - "index": 21, - "docs": [ - "Specified unstaking period is less then minimum set for the group." - ] - }, - { - "name": "CannotSpendZero", - "fields": [], - "index": 22, - "docs": [ - "Invalid spending amount." - ] - }, - { - "name": "InsufficientBudgetForSpending", - "fields": [], - "index": 23, - "docs": [ - "It's not enough budget for this spending." - ] - }, - { - "name": "NoApplicationsProvided", - "fields": [], - "index": 24, - "docs": [ - "Cannot fill opening - no applications provided." - ] - }, - { - "name": "CannotDecreaseStakeDeltaGreaterThanStake", - "fields": [], - "index": 25, - "docs": [ - "Cannot decrease stake - stake delta greater than initial stake." - ] - }, - { - "name": "ApplicationsNotForOpening", - "fields": [], - "index": 26, - "docs": [ - "Trying to fill opening with an application for other opening" - ] - }, - { - "name": "WorkerStorageValueTooLong", - "fields": [], - "index": 27, - "docs": [ - "Worker storage text is too long." - ] - }, - { - "name": "InsufficientTokensForFunding", - "fields": [], - "index": 28, - "docs": [ - "Insufficient tokens for funding (on member controller account)" - ] - }, - { - "name": "ZeroTokensFunding", - "fields": [], - "index": 29, - "docs": [ - "Trying to fund with zero tokens" - ] - }, - { - "name": "InsufficientBalanceForTransfer", - "fields": [], - "index": 30, - "docs": [ - "Cannot withdraw: insufficient budget balance." - ] - } - ] - } - }, - "docs": [ - "Discussion module predefined errors" - ] - } - }, - { - "id": 571, - "type": { - "path": [ - "pallet_working_group", - "errors", - "Error" - ], - "params": [ - { - "name": "T", - "type": null - }, - { - "name": "I", - "type": null - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "StakeBalanceCannotBeZero", - "fields": [], - "index": 0, - "docs": [ - "Provided stake balance cannot be zero." - ] - }, - { - "name": "OpeningDoesNotExist", - "fields": [], - "index": 1, - "docs": [ - "Opening does not exist." - ] - }, - { - "name": "CannotHireMultipleLeaders", - "fields": [], - "index": 2, - "docs": [ - "Cannot fill opening with multiple applications." - ] - }, - { - "name": "WorkerApplicationDoesNotExist", - "fields": [], - "index": 3, - "docs": [ - "Worker application does not exist." - ] - }, - { - "name": "MaxActiveWorkerNumberExceeded", - "fields": [], - "index": 4, - "docs": [ - "Working group size limit exceeded." - ] - }, - { - "name": "SuccessfulWorkerApplicationDoesNotExist", - "fields": [], - "index": 5, - "docs": [ - "Successful worker application does not exist." - ] - }, - { - "name": "CannotHireLeaderWhenLeaderExists", - "fields": [], - "index": 6, - "docs": [ - "There is leader already, cannot hire another one." - ] - }, - { - "name": "IsNotLeadAccount", - "fields": [], - "index": 7, - "docs": [ - "Not a lead account." - ] - }, - { - "name": "CurrentLeadNotSet", - "fields": [], - "index": 8, - "docs": [ - "Current lead is not set." - ] - }, - { - "name": "WorkerDoesNotExist", - "fields": [], - "index": 9, - "docs": [ - "Worker does not exist." - ] - }, - { - "name": "InvalidMemberOrigin", - "fields": [], - "index": 10, - "docs": [ - "Invalid origin for a member." - ] - }, - { - "name": "SignerIsNotWorkerRoleAccount", - "fields": [], - "index": 11, - "docs": [ - "Signer is not worker role account." - ] - }, - { - "name": "BelowMinimumStakes", - "fields": [], - "index": 12, - "docs": [ - "Staking less than the lower bound." - ] - }, - { - "name": "InsufficientBalanceToCoverStake", - "fields": [], - "index": 13, - "docs": [ - "Insufficient balance to cover stake." - ] - }, - { - "name": "ApplicationStakeDoesntMatchOpening", - "fields": [], - "index": 14, - "docs": [ - "Application stake is less than required opening stake." - ] - }, - { - "name": "OriginIsNotApplicant", - "fields": [], - "index": 15, - "docs": [ - "Origin is not applicant." - ] - }, - { - "name": "WorkerIsLeaving", - "fields": [], - "index": 16, - "docs": [ - "Invalid operation - worker is leaving." - ] - }, - { - "name": "CannotRewardWithZero", - "fields": [], - "index": 17, - "docs": [ - "Reward could not be zero." - ] - }, - { - "name": "InvalidStakingAccountForMember", - "fields": [], - "index": 18, - "docs": [ - "Staking account doesn't belong to a member." - ] - }, - { - "name": "ConflictStakesOnAccount", - "fields": [], - "index": 19, - "docs": [ - "Staking account contains conflicting stakes." - ] - }, - { - "name": "WorkerHasNoReward", - "fields": [], - "index": 20, - "docs": [ - "Worker has no recurring reward." - ] - }, - { - "name": "UnstakingPeriodLessThanMinimum", - "fields": [], - "index": 21, - "docs": [ - "Specified unstaking period is less then minimum set for the group." - ] - }, - { - "name": "CannotSpendZero", - "fields": [], - "index": 22, - "docs": [ - "Invalid spending amount." - ] - }, - { - "name": "InsufficientBudgetForSpending", - "fields": [], - "index": 23, - "docs": [ - "It's not enough budget for this spending." - ] - }, - { - "name": "NoApplicationsProvided", - "fields": [], - "index": 24, - "docs": [ - "Cannot fill opening - no applications provided." - ] - }, - { - "name": "CannotDecreaseStakeDeltaGreaterThanStake", - "fields": [], - "index": 25, - "docs": [ - "Cannot decrease stake - stake delta greater than initial stake." - ] - }, - { - "name": "ApplicationsNotForOpening", - "fields": [], - "index": 26, - "docs": [ - "Trying to fill opening with an application for other opening" - ] - }, - { - "name": "WorkerStorageValueTooLong", - "fields": [], - "index": 27, - "docs": [ - "Worker storage text is too long." - ] - }, - { - "name": "InsufficientTokensForFunding", - "fields": [], - "index": 28, - "docs": [ - "Insufficient tokens for funding (on member controller account)" - ] - }, - { - "name": "ZeroTokensFunding", - "fields": [], - "index": 29, - "docs": [ - "Trying to fund with zero tokens" - ] - }, - { - "name": "InsufficientBalanceForTransfer", - "fields": [], - "index": 30, - "docs": [ - "Cannot withdraw: insufficient budget balance." - ] - } - ] - } - }, - "docs": [ - "Discussion module predefined errors" - ] - } - }, - { - "id": 572, - "type": { - "path": [ - "pallet_working_group", - "errors", - "Error" - ], - "params": [ - { - "name": "T", - "type": null - }, - { - "name": "I", - "type": null - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "StakeBalanceCannotBeZero", - "fields": [], - "index": 0, - "docs": [ - "Provided stake balance cannot be zero." - ] - }, - { - "name": "OpeningDoesNotExist", - "fields": [], - "index": 1, - "docs": [ - "Opening does not exist." - ] - }, - { - "name": "CannotHireMultipleLeaders", - "fields": [], - "index": 2, - "docs": [ - "Cannot fill opening with multiple applications." - ] - }, - { - "name": "WorkerApplicationDoesNotExist", - "fields": [], - "index": 3, - "docs": [ - "Worker application does not exist." - ] - }, - { - "name": "MaxActiveWorkerNumberExceeded", - "fields": [], - "index": 4, - "docs": [ - "Working group size limit exceeded." - ] - }, - { - "name": "SuccessfulWorkerApplicationDoesNotExist", - "fields": [], - "index": 5, - "docs": [ - "Successful worker application does not exist." - ] - }, - { - "name": "CannotHireLeaderWhenLeaderExists", - "fields": [], - "index": 6, - "docs": [ - "There is leader already, cannot hire another one." - ] - }, - { - "name": "IsNotLeadAccount", - "fields": [], - "index": 7, - "docs": [ - "Not a lead account." - ] - }, - { - "name": "CurrentLeadNotSet", - "fields": [], - "index": 8, - "docs": [ - "Current lead is not set." - ] - }, - { - "name": "WorkerDoesNotExist", - "fields": [], - "index": 9, - "docs": [ - "Worker does not exist." - ] - }, - { - "name": "InvalidMemberOrigin", - "fields": [], - "index": 10, - "docs": [ - "Invalid origin for a member." - ] - }, - { - "name": "SignerIsNotWorkerRoleAccount", - "fields": [], - "index": 11, - "docs": [ - "Signer is not worker role account." - ] - }, - { - "name": "BelowMinimumStakes", - "fields": [], - "index": 12, - "docs": [ - "Staking less than the lower bound." - ] - }, - { - "name": "InsufficientBalanceToCoverStake", - "fields": [], - "index": 13, - "docs": [ - "Insufficient balance to cover stake." - ] - }, - { - "name": "ApplicationStakeDoesntMatchOpening", - "fields": [], - "index": 14, - "docs": [ - "Application stake is less than required opening stake." - ] - }, - { - "name": "OriginIsNotApplicant", - "fields": [], - "index": 15, - "docs": [ - "Origin is not applicant." - ] - }, - { - "name": "WorkerIsLeaving", - "fields": [], - "index": 16, - "docs": [ - "Invalid operation - worker is leaving." - ] - }, - { - "name": "CannotRewardWithZero", - "fields": [], - "index": 17, - "docs": [ - "Reward could not be zero." - ] - }, - { - "name": "InvalidStakingAccountForMember", - "fields": [], - "index": 18, - "docs": [ - "Staking account doesn't belong to a member." - ] - }, - { - "name": "ConflictStakesOnAccount", - "fields": [], - "index": 19, - "docs": [ - "Staking account contains conflicting stakes." - ] - }, - { - "name": "WorkerHasNoReward", - "fields": [], - "index": 20, - "docs": [ - "Worker has no recurring reward." - ] - }, - { - "name": "UnstakingPeriodLessThanMinimum", - "fields": [], - "index": 21, - "docs": [ - "Specified unstaking period is less then minimum set for the group." - ] - }, - { - "name": "CannotSpendZero", - "fields": [], - "index": 22, - "docs": [ - "Invalid spending amount." - ] - }, - { - "name": "InsufficientBudgetForSpending", - "fields": [], - "index": 23, - "docs": [ - "It's not enough budget for this spending." - ] - }, - { - "name": "NoApplicationsProvided", - "fields": [], - "index": 24, - "docs": [ - "Cannot fill opening - no applications provided." - ] - }, - { - "name": "CannotDecreaseStakeDeltaGreaterThanStake", - "fields": [], - "index": 25, - "docs": [ - "Cannot decrease stake - stake delta greater than initial stake." - ] - }, - { - "name": "ApplicationsNotForOpening", - "fields": [], - "index": 26, - "docs": [ - "Trying to fill opening with an application for other opening" - ] - }, - { - "name": "WorkerStorageValueTooLong", - "fields": [], - "index": 27, - "docs": [ - "Worker storage text is too long." - ] - }, - { - "name": "InsufficientTokensForFunding", - "fields": [], - "index": 28, - "docs": [ - "Insufficient tokens for funding (on member controller account)" - ] - }, - { - "name": "ZeroTokensFunding", - "fields": [], - "index": 29, - "docs": [ - "Trying to fund with zero tokens" - ] - }, - { - "name": "InsufficientBalanceForTransfer", - "fields": [], - "index": 30, - "docs": [ - "Cannot withdraw: insufficient budget balance." - ] - } - ] - } - }, - "docs": [ - "Discussion module predefined errors" - ] - } - }, - { - "id": 573, - "type": { - "path": [ - "pallet_working_group", - "errors", - "Error" - ], - "params": [ - { - "name": "T", - "type": null - }, - { - "name": "I", - "type": null - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "StakeBalanceCannotBeZero", - "fields": [], - "index": 0, - "docs": [ - "Provided stake balance cannot be zero." - ] - }, - { - "name": "OpeningDoesNotExist", - "fields": [], - "index": 1, - "docs": [ - "Opening does not exist." - ] - }, - { - "name": "CannotHireMultipleLeaders", - "fields": [], - "index": 2, - "docs": [ - "Cannot fill opening with multiple applications." - ] - }, - { - "name": "WorkerApplicationDoesNotExist", - "fields": [], - "index": 3, - "docs": [ - "Worker application does not exist." - ] - }, - { - "name": "MaxActiveWorkerNumberExceeded", - "fields": [], - "index": 4, - "docs": [ - "Working group size limit exceeded." - ] - }, - { - "name": "SuccessfulWorkerApplicationDoesNotExist", - "fields": [], - "index": 5, - "docs": [ - "Successful worker application does not exist." - ] - }, - { - "name": "CannotHireLeaderWhenLeaderExists", - "fields": [], - "index": 6, - "docs": [ - "There is leader already, cannot hire another one." - ] - }, - { - "name": "IsNotLeadAccount", - "fields": [], - "index": 7, - "docs": [ - "Not a lead account." - ] - }, - { - "name": "CurrentLeadNotSet", - "fields": [], - "index": 8, - "docs": [ - "Current lead is not set." - ] - }, - { - "name": "WorkerDoesNotExist", - "fields": [], - "index": 9, - "docs": [ - "Worker does not exist." - ] - }, - { - "name": "InvalidMemberOrigin", - "fields": [], - "index": 10, - "docs": [ - "Invalid origin for a member." - ] - }, - { - "name": "SignerIsNotWorkerRoleAccount", - "fields": [], - "index": 11, - "docs": [ - "Signer is not worker role account." - ] - }, - { - "name": "BelowMinimumStakes", - "fields": [], - "index": 12, - "docs": [ - "Staking less than the lower bound." - ] - }, - { - "name": "InsufficientBalanceToCoverStake", - "fields": [], - "index": 13, - "docs": [ - "Insufficient balance to cover stake." - ] - }, - { - "name": "ApplicationStakeDoesntMatchOpening", - "fields": [], - "index": 14, - "docs": [ - "Application stake is less than required opening stake." - ] - }, - { - "name": "OriginIsNotApplicant", - "fields": [], - "index": 15, - "docs": [ - "Origin is not applicant." - ] - }, - { - "name": "WorkerIsLeaving", - "fields": [], - "index": 16, - "docs": [ - "Invalid operation - worker is leaving." - ] - }, - { - "name": "CannotRewardWithZero", - "fields": [], - "index": 17, - "docs": [ - "Reward could not be zero." - ] - }, - { - "name": "InvalidStakingAccountForMember", - "fields": [], - "index": 18, - "docs": [ - "Staking account doesn't belong to a member." - ] - }, - { - "name": "ConflictStakesOnAccount", - "fields": [], - "index": 19, - "docs": [ - "Staking account contains conflicting stakes." - ] - }, - { - "name": "WorkerHasNoReward", - "fields": [], - "index": 20, - "docs": [ - "Worker has no recurring reward." - ] - }, - { - "name": "UnstakingPeriodLessThanMinimum", - "fields": [], - "index": 21, - "docs": [ - "Specified unstaking period is less then minimum set for the group." - ] - }, - { - "name": "CannotSpendZero", - "fields": [], - "index": 22, - "docs": [ - "Invalid spending amount." - ] - }, - { - "name": "InsufficientBudgetForSpending", - "fields": [], - "index": 23, - "docs": [ - "It's not enough budget for this spending." - ] - }, - { - "name": "NoApplicationsProvided", - "fields": [], - "index": 24, - "docs": [ - "Cannot fill opening - no applications provided." - ] - }, - { - "name": "CannotDecreaseStakeDeltaGreaterThanStake", - "fields": [], - "index": 25, - "docs": [ - "Cannot decrease stake - stake delta greater than initial stake." - ] - }, - { - "name": "ApplicationsNotForOpening", - "fields": [], - "index": 26, - "docs": [ - "Trying to fill opening with an application for other opening" - ] - }, - { - "name": "WorkerStorageValueTooLong", - "fields": [], - "index": 27, - "docs": [ - "Worker storage text is too long." - ] - }, - { - "name": "InsufficientTokensForFunding", - "fields": [], - "index": 28, - "docs": [ - "Insufficient tokens for funding (on member controller account)" - ] - }, - { - "name": "ZeroTokensFunding", - "fields": [], - "index": 29, - "docs": [ - "Trying to fund with zero tokens" - ] - }, - { - "name": "InsufficientBalanceForTransfer", - "fields": [], - "index": 30, - "docs": [ - "Cannot withdraw: insufficient budget balance." - ] - } - ] - } - }, - "docs": [ - "Discussion module predefined errors" - ] - } - }, - { - "id": 574, - "type": { - "path": [ - "pallet_working_group", - "errors", - "Error" - ], - "params": [ - { - "name": "T", - "type": null - }, - { - "name": "I", - "type": null - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "StakeBalanceCannotBeZero", - "fields": [], - "index": 0, - "docs": [ - "Provided stake balance cannot be zero." - ] - }, - { - "name": "OpeningDoesNotExist", - "fields": [], - "index": 1, - "docs": [ - "Opening does not exist." - ] - }, - { - "name": "CannotHireMultipleLeaders", - "fields": [], - "index": 2, - "docs": [ - "Cannot fill opening with multiple applications." - ] - }, - { - "name": "WorkerApplicationDoesNotExist", - "fields": [], - "index": 3, - "docs": [ - "Worker application does not exist." - ] - }, - { - "name": "MaxActiveWorkerNumberExceeded", - "fields": [], - "index": 4, - "docs": [ - "Working group size limit exceeded." - ] - }, - { - "name": "SuccessfulWorkerApplicationDoesNotExist", - "fields": [], - "index": 5, - "docs": [ - "Successful worker application does not exist." - ] - }, - { - "name": "CannotHireLeaderWhenLeaderExists", - "fields": [], - "index": 6, - "docs": [ - "There is leader already, cannot hire another one." - ] - }, - { - "name": "IsNotLeadAccount", - "fields": [], - "index": 7, - "docs": [ - "Not a lead account." - ] - }, - { - "name": "CurrentLeadNotSet", - "fields": [], - "index": 8, - "docs": [ - "Current lead is not set." - ] - }, - { - "name": "WorkerDoesNotExist", - "fields": [], - "index": 9, - "docs": [ - "Worker does not exist." - ] - }, - { - "name": "InvalidMemberOrigin", - "fields": [], - "index": 10, - "docs": [ - "Invalid origin for a member." - ] - }, - { - "name": "SignerIsNotWorkerRoleAccount", - "fields": [], - "index": 11, - "docs": [ - "Signer is not worker role account." - ] - }, - { - "name": "BelowMinimumStakes", - "fields": [], - "index": 12, - "docs": [ - "Staking less than the lower bound." - ] - }, - { - "name": "InsufficientBalanceToCoverStake", - "fields": [], - "index": 13, - "docs": [ - "Insufficient balance to cover stake." - ] - }, - { - "name": "ApplicationStakeDoesntMatchOpening", - "fields": [], - "index": 14, - "docs": [ - "Application stake is less than required opening stake." - ] - }, - { - "name": "OriginIsNotApplicant", - "fields": [], - "index": 15, - "docs": [ - "Origin is not applicant." - ] - }, - { - "name": "WorkerIsLeaving", - "fields": [], - "index": 16, - "docs": [ - "Invalid operation - worker is leaving." - ] - }, - { - "name": "CannotRewardWithZero", - "fields": [], - "index": 17, - "docs": [ - "Reward could not be zero." - ] - }, - { - "name": "InvalidStakingAccountForMember", - "fields": [], - "index": 18, - "docs": [ - "Staking account doesn't belong to a member." - ] - }, - { - "name": "ConflictStakesOnAccount", - "fields": [], - "index": 19, - "docs": [ - "Staking account contains conflicting stakes." - ] - }, - { - "name": "WorkerHasNoReward", - "fields": [], - "index": 20, - "docs": [ - "Worker has no recurring reward." - ] - }, - { - "name": "UnstakingPeriodLessThanMinimum", - "fields": [], - "index": 21, - "docs": [ - "Specified unstaking period is less then minimum set for the group." - ] - }, - { - "name": "CannotSpendZero", - "fields": [], - "index": 22, - "docs": [ - "Invalid spending amount." - ] - }, - { - "name": "InsufficientBudgetForSpending", - "fields": [], - "index": 23, - "docs": [ - "It's not enough budget for this spending." - ] - }, - { - "name": "NoApplicationsProvided", - "fields": [], - "index": 24, - "docs": [ - "Cannot fill opening - no applications provided." - ] - }, - { - "name": "CannotDecreaseStakeDeltaGreaterThanStake", - "fields": [], - "index": 25, - "docs": [ - "Cannot decrease stake - stake delta greater than initial stake." - ] - }, - { - "name": "ApplicationsNotForOpening", - "fields": [], - "index": 26, - "docs": [ - "Trying to fill opening with an application for other opening" - ] - }, - { - "name": "WorkerStorageValueTooLong", - "fields": [], - "index": 27, - "docs": [ - "Worker storage text is too long." - ] - }, - { - "name": "InsufficientTokensForFunding", - "fields": [], - "index": 28, - "docs": [ - "Insufficient tokens for funding (on member controller account)" - ] - }, - { - "name": "ZeroTokensFunding", - "fields": [], - "index": 29, - "docs": [ - "Trying to fund with zero tokens" - ] - }, - { - "name": "InsufficientBalanceForTransfer", - "fields": [], - "index": 30, - "docs": [ - "Cannot withdraw: insufficient budget balance." - ] - } - ] - } - }, - "docs": [ - "Discussion module predefined errors" - ] - } - }, - { - "id": 575, - "type": { - "path": [ - "pallet_working_group", - "errors", - "Error" - ], - "params": [ - { - "name": "T", - "type": null - }, - { - "name": "I", - "type": null - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "StakeBalanceCannotBeZero", - "fields": [], - "index": 0, - "docs": [ - "Provided stake balance cannot be zero." - ] - }, - { - "name": "OpeningDoesNotExist", - "fields": [], - "index": 1, - "docs": [ - "Opening does not exist." - ] - }, - { - "name": "CannotHireMultipleLeaders", - "fields": [], - "index": 2, - "docs": [ - "Cannot fill opening with multiple applications." - ] - }, - { - "name": "WorkerApplicationDoesNotExist", - "fields": [], - "index": 3, - "docs": [ - "Worker application does not exist." - ] - }, - { - "name": "MaxActiveWorkerNumberExceeded", - "fields": [], - "index": 4, - "docs": [ - "Working group size limit exceeded." - ] - }, - { - "name": "SuccessfulWorkerApplicationDoesNotExist", - "fields": [], - "index": 5, - "docs": [ - "Successful worker application does not exist." - ] - }, - { - "name": "CannotHireLeaderWhenLeaderExists", - "fields": [], - "index": 6, - "docs": [ - "There is leader already, cannot hire another one." - ] - }, - { - "name": "IsNotLeadAccount", - "fields": [], - "index": 7, - "docs": [ - "Not a lead account." - ] - }, - { - "name": "CurrentLeadNotSet", - "fields": [], - "index": 8, - "docs": [ - "Current lead is not set." - ] - }, - { - "name": "WorkerDoesNotExist", - "fields": [], - "index": 9, - "docs": [ - "Worker does not exist." - ] - }, - { - "name": "InvalidMemberOrigin", - "fields": [], - "index": 10, - "docs": [ - "Invalid origin for a member." - ] - }, - { - "name": "SignerIsNotWorkerRoleAccount", - "fields": [], - "index": 11, - "docs": [ - "Signer is not worker role account." - ] - }, - { - "name": "BelowMinimumStakes", - "fields": [], - "index": 12, - "docs": [ - "Staking less than the lower bound." - ] - }, - { - "name": "InsufficientBalanceToCoverStake", - "fields": [], - "index": 13, - "docs": [ - "Insufficient balance to cover stake." - ] - }, - { - "name": "ApplicationStakeDoesntMatchOpening", - "fields": [], - "index": 14, - "docs": [ - "Application stake is less than required opening stake." - ] - }, - { - "name": "OriginIsNotApplicant", - "fields": [], - "index": 15, - "docs": [ - "Origin is not applicant." - ] - }, - { - "name": "WorkerIsLeaving", - "fields": [], - "index": 16, - "docs": [ - "Invalid operation - worker is leaving." - ] - }, - { - "name": "CannotRewardWithZero", - "fields": [], - "index": 17, - "docs": [ - "Reward could not be zero." - ] - }, - { - "name": "InvalidStakingAccountForMember", - "fields": [], - "index": 18, - "docs": [ - "Staking account doesn't belong to a member." - ] - }, - { - "name": "ConflictStakesOnAccount", - "fields": [], - "index": 19, - "docs": [ - "Staking account contains conflicting stakes." - ] - }, - { - "name": "WorkerHasNoReward", - "fields": [], - "index": 20, - "docs": [ - "Worker has no recurring reward." - ] - }, - { - "name": "UnstakingPeriodLessThanMinimum", - "fields": [], - "index": 21, - "docs": [ - "Specified unstaking period is less then minimum set for the group." - ] - }, - { - "name": "CannotSpendZero", - "fields": [], - "index": 22, - "docs": [ - "Invalid spending amount." - ] - }, - { - "name": "InsufficientBudgetForSpending", - "fields": [], - "index": 23, - "docs": [ - "It's not enough budget for this spending." - ] - }, - { - "name": "NoApplicationsProvided", - "fields": [], - "index": 24, - "docs": [ - "Cannot fill opening - no applications provided." - ] - }, - { - "name": "CannotDecreaseStakeDeltaGreaterThanStake", - "fields": [], - "index": 25, - "docs": [ - "Cannot decrease stake - stake delta greater than initial stake." - ] - }, - { - "name": "ApplicationsNotForOpening", - "fields": [], - "index": 26, - "docs": [ - "Trying to fill opening with an application for other opening" - ] - }, - { - "name": "WorkerStorageValueTooLong", - "fields": [], - "index": 27, - "docs": [ - "Worker storage text is too long." - ] - }, - { - "name": "InsufficientTokensForFunding", - "fields": [], - "index": 28, - "docs": [ - "Insufficient tokens for funding (on member controller account)" - ] - }, - { - "name": "ZeroTokensFunding", - "fields": [], - "index": 29, - "docs": [ - "Trying to fund with zero tokens" - ] - }, - { - "name": "InsufficientBalanceForTransfer", - "fields": [], - "index": 30, - "docs": [ - "Cannot withdraw: insufficient budget balance." - ] - } - ] - } - }, - "docs": [ - "Discussion module predefined errors" - ] - } - }, - { - "id": 576, - "type": { - "path": [ - "pallet_working_group", - "errors", - "Error" - ], - "params": [ - { - "name": "T", - "type": null - }, - { - "name": "I", - "type": null - } - ], - "def": { - "variant": { - "variants": [ - { - "name": "StakeBalanceCannotBeZero", - "fields": [], - "index": 0, - "docs": [ - "Provided stake balance cannot be zero." - ] - }, - { - "name": "OpeningDoesNotExist", - "fields": [], - "index": 1, - "docs": [ - "Opening does not exist." - ] - }, - { - "name": "CannotHireMultipleLeaders", - "fields": [], - "index": 2, - "docs": [ - "Cannot fill opening with multiple applications." - ] - }, - { - "name": "WorkerApplicationDoesNotExist", - "fields": [], - "index": 3, - "docs": [ - "Worker application does not exist." - ] - }, - { - "name": "MaxActiveWorkerNumberExceeded", - "fields": [], - "index": 4, - "docs": [ - "Working group size limit exceeded." - ] - }, - { - "name": "SuccessfulWorkerApplicationDoesNotExist", - "fields": [], - "index": 5, - "docs": [ - "Successful worker application does not exist." - ] - }, - { - "name": "CannotHireLeaderWhenLeaderExists", - "fields": [], - "index": 6, - "docs": [ - "There is leader already, cannot hire another one." - ] - }, - { - "name": "IsNotLeadAccount", - "fields": [], - "index": 7, - "docs": [ - "Not a lead account." - ] - }, - { - "name": "CurrentLeadNotSet", - "fields": [], - "index": 8, - "docs": [ - "Current lead is not set." - ] - }, - { - "name": "WorkerDoesNotExist", - "fields": [], - "index": 9, - "docs": [ - "Worker does not exist." - ] - }, - { - "name": "InvalidMemberOrigin", - "fields": [], - "index": 10, - "docs": [ - "Invalid origin for a member." - ] - }, - { - "name": "SignerIsNotWorkerRoleAccount", - "fields": [], - "index": 11, - "docs": [ - "Signer is not worker role account." - ] - }, - { - "name": "BelowMinimumStakes", - "fields": [], - "index": 12, - "docs": [ - "Staking less than the lower bound." - ] - }, - { - "name": "InsufficientBalanceToCoverStake", - "fields": [], - "index": 13, - "docs": [ - "Insufficient balance to cover stake." - ] - }, - { - "name": "ApplicationStakeDoesntMatchOpening", - "fields": [], - "index": 14, - "docs": [ - "Application stake is less than required opening stake." - ] - }, - { - "name": "OriginIsNotApplicant", - "fields": [], - "index": 15, - "docs": [ - "Origin is not applicant." - ] - }, - { - "name": "WorkerIsLeaving", - "fields": [], - "index": 16, - "docs": [ - "Invalid operation - worker is leaving." - ] - }, - { - "name": "CannotRewardWithZero", - "fields": [], - "index": 17, - "docs": [ - "Reward could not be zero." - ] - }, - { - "name": "InvalidStakingAccountForMember", - "fields": [], - "index": 18, - "docs": [ - "Staking account doesn't belong to a member." - ] - }, - { - "name": "ConflictStakesOnAccount", - "fields": [], - "index": 19, - "docs": [ - "Staking account contains conflicting stakes." - ] - }, - { - "name": "WorkerHasNoReward", - "fields": [], - "index": 20, - "docs": [ - "Worker has no recurring reward." - ] - }, - { - "name": "UnstakingPeriodLessThanMinimum", - "fields": [], - "index": 21, - "docs": [ - "Specified unstaking period is less then minimum set for the group." - ] - }, - { - "name": "CannotSpendZero", - "fields": [], - "index": 22, - "docs": [ - "Invalid spending amount." - ] - }, - { - "name": "InsufficientBudgetForSpending", - "fields": [], - "index": 23, - "docs": [ - "It's not enough budget for this spending." - ] - }, - { - "name": "NoApplicationsProvided", - "fields": [], - "index": 24, - "docs": [ - "Cannot fill opening - no applications provided." - ] - }, - { - "name": "CannotDecreaseStakeDeltaGreaterThanStake", - "fields": [], - "index": 25, - "docs": [ - "Cannot decrease stake - stake delta greater than initial stake." - ] - }, - { - "name": "ApplicationsNotForOpening", - "fields": [], - "index": 26, - "docs": [ - "Trying to fill opening with an application for other opening" - ] - }, - { - "name": "WorkerStorageValueTooLong", - "fields": [], - "index": 27, - "docs": [ - "Worker storage text is too long." - ] - }, - { - "name": "InsufficientTokensForFunding", - "fields": [], - "index": 28, - "docs": [ - "Insufficient tokens for funding (on member controller account)" - ] - }, - { - "name": "ZeroTokensFunding", - "fields": [], - "index": 29, - "docs": [ - "Trying to fund with zero tokens" - ] - }, - { - "name": "InsufficientBalanceForTransfer", - "fields": [], - "index": 30, - "docs": [ - "Cannot withdraw: insufficient budget balance." - ] - } - ] - } - }, - "docs": [ - "Discussion module predefined errors" - ] - } - }, - { - "id": 577, - "type": { - "path": [ - "sp_runtime", - "generic", - "unchecked_extrinsic", - "UncheckedExtrinsic" - ], - "params": [ - { - "name": "Address", - "type": 0 - }, - { - "name": "Call", - "type": 241 - }, - { - "name": "Signature", - "type": 578 - }, - { - "name": "Extra", - "type": 581 - } - ], - "def": { - "composite": { - "fields": [ - { - "name": null, - "type": 10, - "typeName": null, - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 578, - "type": { - "path": [ - "sp_runtime", - "MultiSignature" - ], - "params": [], - "def": { - "variant": { - "variants": [ - { - "name": "Ed25519", - "fields": [ - { - "name": null, - "type": 335, - "typeName": "ed25519::Signature", - "docs": [] - } - ], - "index": 0, - "docs": [] - }, - { - "name": "Sr25519", - "fields": [ - { - "name": null, - "type": 348, - "typeName": "sr25519::Signature", - "docs": [] - } - ], - "index": 1, - "docs": [] - }, - { - "name": "Ecdsa", - "fields": [ - { - "name": null, - "type": 579, - "typeName": "ecdsa::Signature", - "docs": [] - } - ], - "index": 2, - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 579, - "type": { - "path": [ - "sp_core", - "ecdsa", - "Signature" - ], - "params": [], - "def": { - "composite": { - "fields": [ - { - "name": null, - "type": 580, - "typeName": "[u8; 65]", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 580, - "type": { - "path": [], - "params": [], - "def": { - "array": { - "len": 65, - "type": 2 - } - }, - "docs": [] - } - }, - { - "id": 581, - "type": { - "path": [], - "params": [], - "def": { - "tuple": [ - 582, - 583, - 584, - 585, - 586, - 588, - 589, - 590 - ] - }, - "docs": [] - } - }, - { - "id": 582, - "type": { - "path": [ - "frame_system", - "extensions", - "check_non_zero_sender", - "CheckNonZeroSender" - ], - "params": [ - { - "name": "T", - "type": null - } - ], - "def": { - "composite": { - "fields": [] - } - }, - "docs": [] - } - }, - { - "id": 583, - "type": { - "path": [ - "frame_system", - "extensions", - "check_spec_version", - "CheckSpecVersion" - ], - "params": [ - { - "name": "T", - "type": null - } - ], - "def": { - "composite": { - "fields": [] - } - }, - "docs": [] - } - }, - { - "id": 584, - "type": { - "path": [ - "frame_system", - "extensions", - "check_tx_version", - "CheckTxVersion" - ], - "params": [ - { - "name": "T", - "type": null - } - ], - "def": { - "composite": { - "fields": [] - } - }, - "docs": [] - } - }, - { - "id": 585, - "type": { - "path": [ - "frame_system", - "extensions", - "check_genesis", - "CheckGenesis" - ], - "params": [ - { - "name": "T", - "type": null - } - ], - "def": { - "composite": { - "fields": [] - } - }, - "docs": [] - } - }, - { - "id": 586, - "type": { - "path": [ - "frame_system", - "extensions", - "check_mortality", - "CheckMortality" - ], - "params": [ - { - "name": "T", - "type": null - } - ], - "def": { - "composite": { - "fields": [ - { - "name": null, - "type": 587, - "typeName": "Era", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 587, - "type": { - "path": [ - "sp_runtime", - "generic", - "era", - "Era" - ], - "params": [], - "def": { - "variant": { - "variants": [ - { - "name": "Immortal", - "fields": [], - "index": 0, - "docs": [] - }, - { - "name": "Mortal1", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 1, - "docs": [] - }, - { - "name": "Mortal2", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 2, - "docs": [] - }, - { - "name": "Mortal3", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 3, - "docs": [] - }, - { - "name": "Mortal4", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 4, - "docs": [] - }, - { - "name": "Mortal5", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 5, - "docs": [] - }, - { - "name": "Mortal6", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 6, - "docs": [] - }, - { - "name": "Mortal7", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 7, - "docs": [] - }, - { - "name": "Mortal8", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 8, - "docs": [] - }, - { - "name": "Mortal9", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 9, - "docs": [] - }, - { - "name": "Mortal10", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 10, - "docs": [] - }, - { - "name": "Mortal11", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 11, - "docs": [] - }, - { - "name": "Mortal12", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 12, - "docs": [] - }, - { - "name": "Mortal13", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 13, - "docs": [] - }, - { - "name": "Mortal14", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 14, - "docs": [] - }, - { - "name": "Mortal15", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 15, - "docs": [] - }, - { - "name": "Mortal16", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 16, - "docs": [] - }, - { - "name": "Mortal17", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 17, - "docs": [] - }, - { - "name": "Mortal18", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 18, - "docs": [] - }, - { - "name": "Mortal19", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 19, - "docs": [] - }, - { - "name": "Mortal20", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 20, - "docs": [] - }, - { - "name": "Mortal21", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 21, - "docs": [] - }, - { - "name": "Mortal22", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 22, - "docs": [] - }, - { - "name": "Mortal23", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 23, - "docs": [] - }, - { - "name": "Mortal24", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 24, - "docs": [] - }, - { - "name": "Mortal25", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 25, - "docs": [] - }, - { - "name": "Mortal26", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 26, - "docs": [] - }, - { - "name": "Mortal27", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 27, - "docs": [] - }, - { - "name": "Mortal28", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 28, - "docs": [] - }, - { - "name": "Mortal29", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 29, - "docs": [] - }, - { - "name": "Mortal30", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 30, - "docs": [] - }, - { - "name": "Mortal31", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 31, - "docs": [] - }, - { - "name": "Mortal32", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 32, - "docs": [] - }, - { - "name": "Mortal33", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 33, - "docs": [] - }, - { - "name": "Mortal34", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 34, - "docs": [] - }, - { - "name": "Mortal35", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 35, - "docs": [] - }, - { - "name": "Mortal36", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 36, - "docs": [] - }, - { - "name": "Mortal37", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 37, - "docs": [] - }, - { - "name": "Mortal38", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 38, - "docs": [] - }, - { - "name": "Mortal39", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 39, - "docs": [] - }, - { - "name": "Mortal40", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 40, - "docs": [] - }, - { - "name": "Mortal41", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 41, - "docs": [] - }, - { - "name": "Mortal42", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 42, - "docs": [] - }, - { - "name": "Mortal43", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 43, - "docs": [] - }, - { - "name": "Mortal44", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 44, - "docs": [] - }, - { - "name": "Mortal45", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 45, - "docs": [] - }, - { - "name": "Mortal46", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 46, - "docs": [] - }, - { - "name": "Mortal47", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 47, - "docs": [] - }, - { - "name": "Mortal48", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 48, - "docs": [] - }, - { - "name": "Mortal49", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 49, - "docs": [] - }, - { - "name": "Mortal50", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 50, - "docs": [] - }, - { - "name": "Mortal51", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 51, - "docs": [] - }, - { - "name": "Mortal52", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 52, - "docs": [] - }, - { - "name": "Mortal53", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 53, - "docs": [] - }, - { - "name": "Mortal54", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 54, - "docs": [] - }, - { - "name": "Mortal55", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 55, - "docs": [] - }, - { - "name": "Mortal56", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 56, - "docs": [] - }, - { - "name": "Mortal57", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 57, - "docs": [] - }, - { - "name": "Mortal58", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 58, - "docs": [] - }, - { - "name": "Mortal59", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 59, - "docs": [] - }, - { - "name": "Mortal60", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 60, - "docs": [] - }, - { - "name": "Mortal61", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 61, - "docs": [] - }, - { - "name": "Mortal62", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 62, - "docs": [] - }, - { - "name": "Mortal63", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 63, - "docs": [] - }, - { - "name": "Mortal64", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 64, - "docs": [] - }, - { - "name": "Mortal65", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 65, - "docs": [] - }, - { - "name": "Mortal66", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 66, - "docs": [] - }, - { - "name": "Mortal67", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 67, - "docs": [] - }, - { - "name": "Mortal68", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 68, - "docs": [] - }, - { - "name": "Mortal69", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 69, - "docs": [] - }, - { - "name": "Mortal70", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 70, - "docs": [] - }, - { - "name": "Mortal71", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 71, - "docs": [] - }, - { - "name": "Mortal72", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 72, - "docs": [] - }, - { - "name": "Mortal73", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 73, - "docs": [] - }, - { - "name": "Mortal74", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 74, - "docs": [] - }, - { - "name": "Mortal75", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 75, - "docs": [] - }, - { - "name": "Mortal76", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 76, - "docs": [] - }, - { - "name": "Mortal77", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 77, - "docs": [] - }, - { - "name": "Mortal78", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 78, - "docs": [] - }, - { - "name": "Mortal79", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 79, - "docs": [] - }, - { - "name": "Mortal80", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 80, - "docs": [] - }, - { - "name": "Mortal81", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 81, - "docs": [] - }, - { - "name": "Mortal82", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 82, - "docs": [] - }, - { - "name": "Mortal83", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 83, - "docs": [] - }, - { - "name": "Mortal84", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 84, - "docs": [] - }, - { - "name": "Mortal85", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 85, - "docs": [] - }, - { - "name": "Mortal86", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 86, - "docs": [] - }, - { - "name": "Mortal87", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 87, - "docs": [] - }, - { - "name": "Mortal88", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 88, - "docs": [] - }, - { - "name": "Mortal89", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 89, - "docs": [] - }, - { - "name": "Mortal90", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 90, - "docs": [] - }, - { - "name": "Mortal91", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 91, - "docs": [] - }, - { - "name": "Mortal92", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 92, - "docs": [] - }, - { - "name": "Mortal93", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 93, - "docs": [] - }, - { - "name": "Mortal94", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 94, - "docs": [] - }, - { - "name": "Mortal95", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 95, - "docs": [] - }, - { - "name": "Mortal96", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 96, - "docs": [] - }, - { - "name": "Mortal97", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 97, - "docs": [] - }, - { - "name": "Mortal98", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 98, - "docs": [] - }, - { - "name": "Mortal99", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 99, - "docs": [] - }, - { - "name": "Mortal100", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 100, - "docs": [] - }, - { - "name": "Mortal101", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 101, - "docs": [] - }, - { - "name": "Mortal102", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 102, - "docs": [] - }, - { - "name": "Mortal103", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 103, - "docs": [] - }, - { - "name": "Mortal104", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 104, - "docs": [] - }, - { - "name": "Mortal105", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 105, - "docs": [] - }, - { - "name": "Mortal106", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 106, - "docs": [] - }, - { - "name": "Mortal107", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 107, - "docs": [] - }, - { - "name": "Mortal108", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 108, - "docs": [] - }, - { - "name": "Mortal109", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 109, - "docs": [] - }, - { - "name": "Mortal110", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 110, - "docs": [] - }, - { - "name": "Mortal111", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 111, - "docs": [] - }, - { - "name": "Mortal112", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 112, - "docs": [] - }, - { - "name": "Mortal113", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 113, - "docs": [] - }, - { - "name": "Mortal114", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 114, - "docs": [] - }, - { - "name": "Mortal115", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 115, - "docs": [] - }, - { - "name": "Mortal116", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 116, - "docs": [] - }, - { - "name": "Mortal117", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 117, - "docs": [] - }, - { - "name": "Mortal118", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 118, - "docs": [] - }, - { - "name": "Mortal119", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 119, - "docs": [] - }, - { - "name": "Mortal120", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 120, - "docs": [] - }, - { - "name": "Mortal121", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 121, - "docs": [] - }, - { - "name": "Mortal122", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 122, - "docs": [] - }, - { - "name": "Mortal123", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 123, - "docs": [] - }, - { - "name": "Mortal124", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 124, - "docs": [] - }, - { - "name": "Mortal125", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 125, - "docs": [] - }, - { - "name": "Mortal126", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 126, - "docs": [] - }, - { - "name": "Mortal127", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 127, - "docs": [] - }, - { - "name": "Mortal128", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 128, - "docs": [] - }, - { - "name": "Mortal129", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 129, - "docs": [] - }, - { - "name": "Mortal130", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 130, - "docs": [] - }, - { - "name": "Mortal131", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 131, - "docs": [] - }, - { - "name": "Mortal132", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 132, - "docs": [] - }, - { - "name": "Mortal133", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 133, - "docs": [] - }, - { - "name": "Mortal134", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 134, - "docs": [] - }, - { - "name": "Mortal135", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 135, - "docs": [] - }, - { - "name": "Mortal136", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 136, - "docs": [] - }, - { - "name": "Mortal137", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 137, - "docs": [] - }, - { - "name": "Mortal138", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 138, - "docs": [] - }, - { - "name": "Mortal139", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 139, - "docs": [] - }, - { - "name": "Mortal140", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 140, - "docs": [] - }, - { - "name": "Mortal141", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 141, - "docs": [] - }, - { - "name": "Mortal142", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 142, - "docs": [] - }, - { - "name": "Mortal143", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 143, - "docs": [] - }, - { - "name": "Mortal144", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 144, - "docs": [] - }, - { - "name": "Mortal145", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 145, - "docs": [] - }, - { - "name": "Mortal146", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 146, - "docs": [] - }, - { - "name": "Mortal147", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 147, - "docs": [] - }, - { - "name": "Mortal148", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 148, - "docs": [] - }, - { - "name": "Mortal149", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 149, - "docs": [] - }, - { - "name": "Mortal150", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 150, - "docs": [] - }, - { - "name": "Mortal151", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 151, - "docs": [] - }, - { - "name": "Mortal152", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 152, - "docs": [] - }, - { - "name": "Mortal153", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 153, - "docs": [] - }, - { - "name": "Mortal154", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 154, - "docs": [] - }, - { - "name": "Mortal155", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 155, - "docs": [] - }, - { - "name": "Mortal156", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 156, - "docs": [] - }, - { - "name": "Mortal157", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 157, - "docs": [] - }, - { - "name": "Mortal158", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 158, - "docs": [] - }, - { - "name": "Mortal159", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 159, - "docs": [] - }, - { - "name": "Mortal160", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 160, - "docs": [] - }, - { - "name": "Mortal161", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 161, - "docs": [] - }, - { - "name": "Mortal162", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 162, - "docs": [] - }, - { - "name": "Mortal163", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 163, - "docs": [] - }, - { - "name": "Mortal164", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 164, - "docs": [] - }, - { - "name": "Mortal165", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 165, - "docs": [] - }, - { - "name": "Mortal166", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 166, - "docs": [] - }, - { - "name": "Mortal167", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 167, - "docs": [] - }, - { - "name": "Mortal168", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 168, - "docs": [] - }, - { - "name": "Mortal169", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 169, - "docs": [] - }, - { - "name": "Mortal170", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 170, - "docs": [] - }, - { - "name": "Mortal171", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 171, - "docs": [] - }, - { - "name": "Mortal172", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 172, - "docs": [] - }, - { - "name": "Mortal173", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 173, - "docs": [] - }, - { - "name": "Mortal174", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 174, - "docs": [] - }, - { - "name": "Mortal175", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 175, - "docs": [] - }, - { - "name": "Mortal176", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 176, - "docs": [] - }, - { - "name": "Mortal177", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 177, - "docs": [] - }, - { - "name": "Mortal178", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 178, - "docs": [] - }, - { - "name": "Mortal179", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 179, - "docs": [] - }, - { - "name": "Mortal180", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 180, - "docs": [] - }, - { - "name": "Mortal181", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 181, - "docs": [] - }, - { - "name": "Mortal182", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 182, - "docs": [] - }, - { - "name": "Mortal183", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 183, - "docs": [] - }, - { - "name": "Mortal184", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 184, - "docs": [] - }, - { - "name": "Mortal185", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 185, - "docs": [] - }, - { - "name": "Mortal186", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 186, - "docs": [] - }, - { - "name": "Mortal187", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 187, - "docs": [] - }, - { - "name": "Mortal188", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 188, - "docs": [] - }, - { - "name": "Mortal189", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 189, - "docs": [] - }, - { - "name": "Mortal190", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 190, - "docs": [] - }, - { - "name": "Mortal191", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 191, - "docs": [] - }, - { - "name": "Mortal192", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 192, - "docs": [] - }, - { - "name": "Mortal193", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 193, - "docs": [] - }, - { - "name": "Mortal194", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 194, - "docs": [] - }, - { - "name": "Mortal195", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 195, - "docs": [] - }, - { - "name": "Mortal196", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 196, - "docs": [] - }, - { - "name": "Mortal197", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 197, - "docs": [] - }, - { - "name": "Mortal198", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 198, - "docs": [] - }, - { - "name": "Mortal199", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 199, - "docs": [] - }, - { - "name": "Mortal200", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 200, - "docs": [] - }, - { - "name": "Mortal201", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 201, - "docs": [] - }, - { - "name": "Mortal202", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 202, - "docs": [] - }, - { - "name": "Mortal203", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 203, - "docs": [] - }, - { - "name": "Mortal204", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 204, - "docs": [] - }, - { - "name": "Mortal205", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 205, - "docs": [] - }, - { - "name": "Mortal206", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 206, - "docs": [] - }, - { - "name": "Mortal207", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 207, - "docs": [] - }, - { - "name": "Mortal208", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 208, - "docs": [] - }, - { - "name": "Mortal209", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 209, - "docs": [] - }, - { - "name": "Mortal210", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 210, - "docs": [] - }, - { - "name": "Mortal211", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 211, - "docs": [] - }, - { - "name": "Mortal212", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 212, - "docs": [] - }, - { - "name": "Mortal213", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 213, - "docs": [] - }, - { - "name": "Mortal214", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 214, - "docs": [] - }, - { - "name": "Mortal215", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 215, - "docs": [] - }, - { - "name": "Mortal216", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 216, - "docs": [] - }, - { - "name": "Mortal217", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 217, - "docs": [] - }, - { - "name": "Mortal218", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 218, - "docs": [] - }, - { - "name": "Mortal219", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 219, - "docs": [] - }, - { - "name": "Mortal220", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 220, - "docs": [] - }, - { - "name": "Mortal221", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 221, - "docs": [] - }, - { - "name": "Mortal222", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 222, - "docs": [] - }, - { - "name": "Mortal223", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 223, - "docs": [] - }, - { - "name": "Mortal224", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 224, - "docs": [] - }, - { - "name": "Mortal225", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 225, - "docs": [] - }, - { - "name": "Mortal226", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 226, - "docs": [] - }, - { - "name": "Mortal227", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 227, - "docs": [] - }, - { - "name": "Mortal228", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 228, - "docs": [] - }, - { - "name": "Mortal229", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 229, - "docs": [] - }, - { - "name": "Mortal230", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 230, - "docs": [] - }, - { - "name": "Mortal231", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 231, - "docs": [] - }, - { - "name": "Mortal232", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 232, - "docs": [] - }, - { - "name": "Mortal233", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 233, - "docs": [] - }, - { - "name": "Mortal234", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 234, - "docs": [] - }, - { - "name": "Mortal235", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 235, - "docs": [] - }, - { - "name": "Mortal236", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 236, - "docs": [] - }, - { - "name": "Mortal237", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 237, - "docs": [] - }, - { - "name": "Mortal238", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 238, - "docs": [] - }, - { - "name": "Mortal239", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 239, - "docs": [] - }, - { - "name": "Mortal240", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 240, - "docs": [] - }, - { - "name": "Mortal241", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 241, - "docs": [] - }, - { - "name": "Mortal242", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 242, - "docs": [] - }, - { - "name": "Mortal243", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 243, - "docs": [] - }, - { - "name": "Mortal244", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 244, - "docs": [] - }, - { - "name": "Mortal245", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 245, - "docs": [] - }, - { - "name": "Mortal246", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 246, - "docs": [] - }, - { - "name": "Mortal247", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 247, - "docs": [] - }, - { - "name": "Mortal248", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 248, - "docs": [] - }, - { - "name": "Mortal249", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 249, - "docs": [] - }, - { - "name": "Mortal250", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 250, - "docs": [] - }, - { - "name": "Mortal251", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 251, - "docs": [] - }, - { - "name": "Mortal252", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 252, - "docs": [] - }, - { - "name": "Mortal253", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 253, - "docs": [] - }, - { - "name": "Mortal254", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 254, - "docs": [] - }, - { - "name": "Mortal255", - "fields": [ - { - "name": null, - "type": 2, - "typeName": null, - "docs": [] - } - ], - "index": 255, - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 588, - "type": { - "path": [ - "frame_system", - "extensions", - "check_nonce", - "CheckNonce" - ], - "params": [ - { - "name": "T", - "type": null - } - ], - "def": { - "composite": { - "fields": [ - { - "name": null, - "type": 221, - "typeName": "T::Index", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 589, - "type": { - "path": [ - "frame_system", - "extensions", - "check_weight", - "CheckWeight" - ], - "params": [ - { - "name": "T", - "type": null - } - ], - "def": { - "composite": { - "fields": [] - } - }, - "docs": [] - } - }, - { - "id": 590, - "type": { - "path": [ - "pallet_transaction_payment", - "ChargeTransactionPayment" - ], - "params": [ - { - "name": "T", - "type": null - } - ], - "def": { - "composite": { - "fields": [ - { - "name": null, - "type": 52, - "typeName": "BalanceOf", - "docs": [] - } - ] - } - }, - "docs": [] - } - }, - { - "id": 591, - "type": { - "path": [ - "joystream_node_runtime", - "Runtime" - ], - "params": [], - "def": { - "composite": { - "fields": [] - } - }, - "docs": [] - } - } - ] - }, - "pallets": [ - { - "name": "System", - "storage": { - "prefix": "System", - "items": [ - { - "name": "Account", - "modifier": "Default", - "type": { - "map": { - "hashers": [ - "Blake2_128Concat" - ], - "key": 0, - "value": 3 - } - }, - "fallback": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "docs": [ - " The full account information for a particular account ID." - ] - }, - { - "name": "ExtrinsicCount", - "modifier": "Optional", - "type": { - "plain": 4 - }, - "fallback": "0x00", - "docs": [ - " Total extrinsics count for the current block." - ] - }, - { - "name": "BlockWeight", - "modifier": "Default", - "type": { - "plain": 7 - }, - "fallback": "0x000000000000000000000000000000000000000000000000", - "docs": [ - " The current weight for the block." - ] - }, - { - "name": "AllExtrinsicsLen", - "modifier": "Optional", - "type": { - "plain": 4 - }, - "fallback": "0x00", - "docs": [ - " Total length (in bytes) for all extrinsics put together, for the current block." - ] - }, - { - "name": "BlockHash", - "modifier": "Default", - "type": { - "map": { - "hashers": [ - "Twox64Concat" - ], - "key": 4, - "value": 9 - } - }, - "fallback": "0x0000000000000000000000000000000000000000000000000000000000000000", - "docs": [ - " Map of block numbers to block hashes." - ] - }, - { - "name": "ExtrinsicData", - "modifier": "Default", - "type": { - "map": { - "hashers": [ - "Twox64Concat" - ], - "key": 4, - "value": 10 - } - }, - "fallback": "0x00", - "docs": [ - " Extrinsics data for the current block (maps an extrinsic's index to its data)." - ] - }, - { - "name": "Number", - "modifier": "Default", - "type": { - "plain": 4 - }, - "fallback": "0x00000000", - "docs": [ - " The current block number being processed. Set by `execute_block`." - ] - }, - { - "name": "ParentHash", - "modifier": "Default", - "type": { - "plain": 9 - }, - "fallback": "0x0000000000000000000000000000000000000000000000000000000000000000", - "docs": [ - " Hash of the previous block." - ] - }, - { - "name": "Digest", - "modifier": "Default", - "type": { - "plain": 11 - }, - "fallback": "0x00", - "docs": [ - " Digest of the current block, also part of the block header." - ] - }, - { - "name": "Events", - "modifier": "Default", - "type": { - "plain": 15 - }, - "fallback": "0x00", - "docs": [ - " Events deposited for the current block.", - "", - " NOTE: The item is unbound and should therefore never be read on chain.", - " It could otherwise inflate the PoV size of a block.", - "", - " Events have a large in-memory size. Box the events to not go out-of-memory", - " just in case someone still reads them from within the runtime." - ] - }, - { - "name": "EventCount", - "modifier": "Default", - "type": { - "plain": 4 - }, - "fallback": "0x00000000", - "docs": [ - " The number of events in the `Events` list." - ] - }, - { - "name": "EventTopics", - "modifier": "Default", - "type": { - "map": { - "hashers": [ - "Blake2_128Concat" - ], - "key": 9, - "value": 218 - } - }, - "fallback": "0x00", - "docs": [ - " Mapping between a topic (represented by T::Hash) and a vector of indexes", - " of events in the `>` list.", - "", - " All topic vectors have deterministic storage locations depending on the topic. This", - " allows light-clients to leverage the changes trie storage tracking mechanism and", - " in case of changes fetch the list of events of interest.", - "", - " The value has the type `(T::BlockNumber, EventIndex)` because if we used only just", - " the `EventIndex` then in case if the topic has the same contents on the next block", - " no notification will be triggered thus the event might be lost." - ] - }, - { - "name": "LastRuntimeUpgrade", - "modifier": "Optional", - "type": { - "plain": 220 - }, - "fallback": "0x00", - "docs": [ - " Stores the `spec_version` and `spec_name` of when the last runtime upgrade happened." - ] - }, - { - "name": "UpgradedToU32RefCount", - "modifier": "Default", - "type": { - "plain": 34 - }, - "fallback": "0x00", - "docs": [ - " True if we have upgraded so that `type RefCount` is `u32`. False (default) if not." - ] - }, - { - "name": "UpgradedToTripleRefCount", - "modifier": "Default", - "type": { - "plain": 34 - }, - "fallback": "0x00", - "docs": [ - " True if we have upgraded so that AccountInfo contains three types of `RefCount`. False", - " (default) if not." - ] - }, - { - "name": "ExecutionPhase", - "modifier": "Optional", - "type": { - "plain": 216 - }, - "fallback": "0x00", - "docs": [ - " The execution phase of the block." - ] - } - ] - }, - "calls": { - "type": 223 - }, - "events": { - "type": 18 - }, - "constants": [ - { - "name": "BlockWeights", - "type": 226, - "value": "0xe0687c3e0100000000204aa9d1010000b8201d05000000000148a7eca82e010000010098f73e5d010000010000000000000000b8201d050000000001482f3f13a30100000100204aa9d1010000010088526a74000000b8201d0500000000000000", - "docs": [ - " Block & extrinsics weights: base values and limits." - ] - }, - { - "name": "BlockLength", - "type": 229, - "value": "0x00003c000000500000005000", - "docs": [ - " The maximum length of a block (in bytes)." - ] - }, - { - "name": "BlockHashCount", - "type": 4, - "value": "0x60090000", - "docs": [ - " Maximum number of block number to block hash mappings to keep (oldest pruned first)." - ] - }, - { - "name": "DbWeight", - "type": 231, - "value": "0x40787d010000000000e1f50500000000", - "docs": [ - " The weight of runtime database operations the runtime can invoke." - ] - }, - { - "name": "Version", - "type": 232, - "value": "0x386a6f7973747265616d2d6e6f6465386a6f7973747265616d2d6e6f64650b00000000000000000000002cdf6acb689907609b0400000037e397fc7c91f5e40100000040fe3ad401f8959a06000000d2bc9897eed08f1503000000f78b278be53f454c02000000ed99c5acb25eedf503000000cbca25e39f14238702000000687ad44ad37f03c201000000bc9d89904f5b923f0100000037c8bb1350a9a2a801000000ab3c0572291feb8b010000000100000001", - "docs": [ - " Get the chain's current version." - ] - }, - { - "name": "SS58Prefix", - "type": 237, - "value": "0x7e00", - "docs": [ - " The designated SS85 prefix of this chain.", - "", - " This replaces the \"ss58Format\" property declared in the chain spec. Reason is", - " that the runtime should know about the prefix in order to make use of it as", - " an identifier of the chain." - ] - } - ], - "errors": { - "type": 238 - }, - "index": 0 - }, - { - "name": "Utility", - "storage": null, - "calls": { - "type": 239 - }, - "events": { - "type": 27 - }, - "constants": [ - { - "name": "batched_calls_limit", - "type": 4, - "value": "0xaa2a0000", - "docs": [ - " The limit on the number of batched calls." - ] - } - ], - "errors": { - "type": 397 - }, - "index": 1 - }, - { - "name": "Babe", - "storage": { - "prefix": "Babe", - "items": [ - { - "name": "EpochIndex", - "modifier": "Default", - "type": { - "plain": 8 - }, - "fallback": "0x0000000000000000", - "docs": [ - " Current epoch index." - ] - }, - { - "name": "Authorities", - "modifier": "Default", - "type": { - "plain": 398 - }, - "fallback": "0x00", - "docs": [ - " Current epoch authorities." - ] - }, - { - "name": "GenesisSlot", - "modifier": "Default", - "type": { - "plain": 247 - }, - "fallback": "0x0000000000000000", - "docs": [ - " The slot at which the first epoch actually started. This is 0", - " until the first block of the chain." - ] - }, - { - "name": "CurrentSlot", - "modifier": "Default", - "type": { - "plain": 247 - }, - "fallback": "0x0000000000000000", - "docs": [ - " Current slot number." - ] - }, - { - "name": "Randomness", - "modifier": "Default", - "type": { - "plain": 1 - }, - "fallback": "0x0000000000000000000000000000000000000000000000000000000000000000", - "docs": [ - " The epoch randomness for the *current* epoch.", - "", - " # Security", - "", - " This MUST NOT be used for gambling, as it can be influenced by a", - " malicious validator in the short term. It MAY be used in many", - " cryptographic protocols, however, so long as one remembers that this", - " (like everything else on-chain) it is public. For example, it can be", - " used where a number is needed that cannot have been chosen by an", - " adversary, for purposes such as public-coin zero-knowledge proofs." - ] - }, - { - "name": "PendingEpochConfigChange", - "modifier": "Optional", - "type": { - "plain": 249 - }, - "fallback": "0x00", - "docs": [ - " Pending epoch configuration change that will be applied when the next epoch is enacted." - ] - }, - { - "name": "NextRandomness", - "modifier": "Default", - "type": { - "plain": 1 - }, - "fallback": "0x0000000000000000000000000000000000000000000000000000000000000000", - "docs": [ - " Next epoch randomness." - ] - }, - { - "name": "NextAuthorities", - "modifier": "Default", - "type": { - "plain": 398 - }, - "fallback": "0x00", - "docs": [ - " Next epoch authorities." - ] - }, - { - "name": "SegmentIndex", - "modifier": "Default", - "type": { - "plain": 4 - }, - "fallback": "0x00000000", - "docs": [ - " Randomness under construction.", - "", - " We make a trade-off between storage accesses and list length.", - " We store the under-construction randomness in segments of up to", - " `UNDER_CONSTRUCTION_SEGMENT_LENGTH`.", - "", - " Once a segment reaches this length, we begin the next one.", - " We reset all segments and return to `0` at the beginning of every", - " epoch." - ] - }, - { - "name": "UnderConstruction", - "modifier": "Default", - "type": { - "map": { - "hashers": [ - "Twox64Concat" - ], - "key": 4, - "value": 401 - } - }, - "fallback": "0x00", - "docs": [ - " TWOX-NOTE: `SegmentIndex` is an increasing integer, so this is okay." - ] - }, - { - "name": "Initialized", - "modifier": "Optional", - "type": { - "plain": 403 - }, - "fallback": "0x00", - "docs": [ - " Temporary value (cleared at block finalization) which is `Some`", - " if per-block initialization has already been called for current block." - ] - }, - { - "name": "AuthorVrfRandomness", - "modifier": "Default", - "type": { - "plain": 408 - }, - "fallback": "0x00", - "docs": [ - " This field should always be populated during block processing unless", - " secondary plain slots are enabled (which don't contain a VRF output).", - "", - " It is set in `on_finalize`, before it will contain the value from the last block." - ] - }, - { - "name": "EpochStart", - "modifier": "Default", - "type": { - "plain": 219 - }, - "fallback": "0x0000000000000000", - "docs": [ - " The block numbers when the last and current epoch have started, respectively `N-1` and", - " `N`.", - " NOTE: We track this is in order to annotate the block number when a given pool of", - " entropy was fixed (i.e. it was known to chain observers). Since epochs are defined in", - " slots, which may be skipped, the block numbers may not line up with the slot numbers." - ] - }, - { - "name": "Lateness", - "modifier": "Default", - "type": { - "plain": 4 - }, - "fallback": "0x00000000", - "docs": [ - " How late the current block is compared to its parent.", - "", - " This entry is populated as part of block execution and is cleaned up", - " on block finalization. Querying this storage entry outside of block", - " execution context should always yield zero." - ] - }, - { - "name": "EpochConfig", - "modifier": "Optional", - "type": { - "plain": 409 - }, - "fallback": "0x00", - "docs": [ - " The configuration for the current epoch. Should never be `None` as it is initialized in", - " genesis." - ] - }, - { - "name": "NextEpochConfig", - "modifier": "Optional", - "type": { - "plain": 409 - }, - "fallback": "0x00", - "docs": [ - " The configuration for the next epoch, `None` if the config will not change", - " (you can fallback to `EpochConfig` instead in that case)." - ] - } - ] - }, - "calls": { - "type": 242 - }, - "events": null, - "constants": [ - { - "name": "EpochDuration", - "type": 8, - "value": "0x6400000000000000", - "docs": [ - " The amount of time, in slots, that each epoch should last.", - " NOTE: Currently it is not possible to change the epoch duration after", - " the chain has started. Attempting to do so will brick block production." - ] - }, - { - "name": "ExpectedBlockTime", - "type": 8, - "value": "0x7017000000000000", - "docs": [ - " The expected average block time at which BABE should be creating", - " blocks. Since BABE is probabilistic it is not trivial to figure out", - " what the expected average block time should be based on the slot", - " duration and the security parameter `c` (where `1 - c` represents", - " the probability of a slot being empty)." - ] - }, - { - "name": "MaxAuthorities", - "type": 4, - "value": "0x64000000", - "docs": [ - " Max number of authorities allowed" - ] - } - ], - "errors": { - "type": 410 - }, - "index": 2 - }, - { - "name": "Timestamp", - "storage": { - "prefix": "Timestamp", - "items": [ - { - "name": "Now", - "modifier": "Default", - "type": { - "plain": 8 - }, - "fallback": "0x0000000000000000", - "docs": [ - " Current time for the current block." - ] - }, - { - "name": "DidUpdate", - "modifier": "Default", - "type": { - "plain": 34 - }, - "fallback": "0x00", - "docs": [ - " Did the timestamp get updated in this block?" - ] - } - ] - }, - "calls": { - "type": 251 - }, - "events": null, - "constants": [ - { - "name": "MinimumPeriod", - "type": 8, - "value": "0xb80b000000000000", - "docs": [ - " The minimum period between blocks. Beware that this is different to the *expected*", - " period that the block production apparatus provides. Your chosen consensus system will", - " generally work with this to determine a sensible block time. e.g. For Aura, it will be", - " double this period on default settings." - ] - } - ], - "errors": null, - "index": 3 - }, - { - "name": "Authorship", - "storage": { - "prefix": "Authorship", - "items": [ - { - "name": "Uncles", - "modifier": "Default", - "type": { - "plain": 411 - }, - "fallback": "0x00", - "docs": [ - " Uncles" - ] - }, - { - "name": "Author", - "modifier": "Optional", - "type": { - "plain": 0 - }, - "fallback": "0x00", - "docs": [ - " Author of current block." - ] - }, - { - "name": "DidSetUncles", - "modifier": "Default", - "type": { - "plain": 34 - }, - "fallback": "0x00", - "docs": [ - " Whether uncles were already set in this block." - ] - } - ] - }, - "calls": { - "type": 253 - }, - "events": null, - "constants": [ - { - "name": "UncleGenerations", - "type": 4, - "value": "0x00000000", - "docs": [ - " The number of blocks back we should accept uncles.", - " This means that we will deal with uncle-parents that are", - " `UncleGenerations + 1` before `now`." - ] - } - ], - "errors": { - "type": 413 - }, - "index": 4 - }, - { - "name": "Balances", - "storage": { - "prefix": "Balances", - "items": [ - { - "name": "TotalIssuance", - "modifier": "Default", - "type": { - "plain": 6 - }, - "fallback": "0x00000000000000000000000000000000", - "docs": [ - " The total units issued in the system." - ] - }, - { - "name": "Account", - "modifier": "Default", - "type": { - "map": { - "hashers": [ - "Blake2_128Concat" - ], - "key": 0, - "value": 5 - } - }, - "fallback": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "docs": [ - " The Balances pallet example of storing the balance of an account.", - "", - " # Example", - "", - " ```nocompile", - " impl pallet_balances::Config for Runtime {", - " type AccountStore = StorageMapShim, frame_system::Provider, AccountId, Self::AccountData>", - " }", - " ```", - "", - " You can also store the balance of an account in the `System` pallet.", - "", - " # Example", - "", - " ```nocompile", - " impl pallet_balances::Config for Runtime {", - " type AccountStore = System", - " }", - " ```", - "", - " But this comes with tradeoffs, storing account balances in the system pallet stores", - " `frame_system` data alongside the account data contrary to storing account balances in the", - " `Balances` pallet, which uses a `StorageMap` to store balances data only.", - " NOTE: This is only used in the case that this pallet is used to store balances." - ] - }, - { - "name": "Locks", - "modifier": "Default", - "type": { - "map": { - "hashers": [ - "Blake2_128Concat" - ], - "key": 0, - "value": 414 - } - }, - "fallback": "0x00", - "docs": [ - " Any liquidity locks on some account balances.", - " NOTE: Should only be accessed when setting, changing and freeing a lock." - ] - }, - { - "name": "Reserves", - "modifier": "Default", - "type": { - "map": { - "hashers": [ - "Blake2_128Concat" - ], - "key": 0, - "value": 418 - } - }, - "fallback": "0x00", - "docs": [ - " Named reserves on some account balances." - ] - }, - { - "name": "StorageVersion", - "modifier": "Default", - "type": { - "plain": 421 - }, - "fallback": "0x00", - "docs": [ - " Storage version of the pallet.", - "", - " This is set to v2.0.0 for new networks." - ] - } - ] - }, - "calls": { - "type": 255 - }, - "events": { - "type": 30 - }, - "constants": [ - { - "name": "ExistentialDeposit", - "type": 6, - "value": "0x01000000000000000000000000000000", - "docs": [ - " The minimum amount required to keep an account open." - ] - }, - { - "name": "MaxLocks", - "type": 4, - "value": "0x32000000", - "docs": [ - " The maximum number of locks that should exist on an account.", - " Not strictly enforced, but used for weight estimation." - ] - }, - { - "name": "MaxReserves", - "type": 4, - "value": "0x32000000", - "docs": [ - " The maximum number of named reserves that can exist on an account." - ] - } - ], - "errors": { - "type": 422 - }, - "index": 5 - }, - { - "name": "TransactionPayment", - "storage": { - "prefix": "TransactionPayment", - "items": [ - { - "name": "NextFeeMultiplier", - "modifier": "Default", - "type": { - "plain": 423 - }, - "fallback": "0x000064a7b3b6e00d0000000000000000", - "docs": [] - }, - { - "name": "StorageVersion", - "modifier": "Default", - "type": { - "plain": 424 - }, - "fallback": "0x00", - "docs": [] - } - ] - }, - "calls": null, - "events": null, - "constants": [ - { - "name": "OperationalFeeMultiplier", - "type": 2, - "value": "0x01", - "docs": [ - " A fee mulitplier for `Operational` extrinsics to compute \"virtual tip\" to boost their", - " `priority`", - "", - " This value is multipled by the `final_fee` to obtain a \"virtual tip\" that is later", - " added to a tip component in regular `priority` calculations.", - " It means that a `Normal` transaction can front-run a similarly-sized `Operational`", - " extrinsic (with no tip), by including a tip value greater than the virtual tip.", - "", - " ```rust,ignore", - " // For `Normal`", - " let priority = priority_calc(tip);", - "", - " // For `Operational`", - " let virtual_tip = (inclusion_fee + tip) * OperationalFeeMultiplier;", - " let priority = priority_calc(tip + virtual_tip);", - " ```", - "", - " Note that since we use `final_fee` the multiplier applies also to the regular `tip`", - " sent with the transaction. So, not only does the transaction get a priority bump based", - " on the `inclusion_fee`, but we also amplify the impact of tips applied to `Operational`", - " transactions." - ] - } - ], - "errors": null, - "index": 6 - }, - { - "name": "ElectionProviderMultiPhase", - "storage": { - "prefix": "ElectionProviderMultiPhase", - "items": [ - { - "name": "Round", - "modifier": "Default", - "type": { - "plain": 4 - }, - "fallback": "0x01000000", - "docs": [ - " Internal counter for the number of rounds.", - "", - " This is useful for de-duplication of transactions submitted to the pool, and general", - " diagnostics of the pallet.", - "", - " This is merely incremented once per every time that an upstream `elect` is called." - ] - }, - { - "name": "CurrentPhase", - "modifier": "Default", - "type": { - "plain": 425 - }, - "fallback": "0x00", - "docs": [ - " Current phase." - ] - }, - { - "name": "QueuedSolution", - "modifier": "Optional", - "type": { - "plain": 427 - }, - "fallback": "0x00", - "docs": [ - " Current best solution, signed or unsigned, queued to be returned upon `elect`." - ] - }, - { - "name": "Snapshot", - "modifier": "Optional", - "type": { - "plain": 428 - }, - "fallback": "0x00", - "docs": [ - " Snapshot data of the round.", - "", - " This is created at the beginning of the signed phase and cleared upon calling `elect`." - ] - }, - { - "name": "DesiredTargets", - "modifier": "Optional", - "type": { - "plain": 4 - }, - "fallback": "0x00", - "docs": [ - " Desired number of targets to elect for this round.", - "", - " Only exists when [`Snapshot`] is present." - ] - }, - { - "name": "SnapshotMetadata", - "modifier": "Optional", - "type": { - "plain": 310 - }, - "fallback": "0x00", - "docs": [ - " The metadata of the [`RoundSnapshot`]", - "", - " Only exists when [`Snapshot`] is present." - ] - }, - { - "name": "SignedSubmissionNextIndex", - "modifier": "Default", - "type": { - "plain": 4 - }, - "fallback": "0x00000000", - "docs": [ - " The next index to be assigned to an incoming signed submission.", - "", - " Every accepted submission is assigned a unique index; that index is bound to that particular", - " submission for the duration of the election. On election finalization, the next index is", - " reset to 0.", - "", - " We can't just use `SignedSubmissionIndices.len()`, because that's a bounded set; past its", - " capacity, it will simply saturate. We can't just iterate over `SignedSubmissionsMap`,", - " because iteration is slow. Instead, we store the value here." - ] - }, - { - "name": "SignedSubmissionIndices", - "modifier": "Default", - "type": { - "plain": 432 - }, - "fallback": "0x00", - "docs": [ - " A sorted, bounded set of `(score, index)`, where each `index` points to a value in", - " `SignedSubmissions`.", - "", - " We never need to process more than a single signed submission at a time. Signed submissions", - " can be quite large, so we're willing to pay the cost of multiple database accesses to access", - " them one at a time instead of reading and decoding all of them at once." - ] - }, - { - "name": "SignedSubmissionsMap", - "modifier": "Optional", - "type": { - "map": { - "hashers": [ - "Twox64Concat" - ], - "key": 4, - "value": 436 - } - }, - "fallback": "0x00", - "docs": [ - " Unchecked, signed solutions.", - "", - " Together with `SubmissionIndices`, this stores a bounded set of `SignedSubmissions` while", - " allowing us to keep only a single one in memory at a time.", - "", - " Twox note: the key of the map is an auto-incrementing index which users cannot inspect or", - " affect; we shouldn't need a cryptographically secure hasher." - ] - }, - { - "name": "MinimumUntrustedScore", - "modifier": "Optional", - "type": { - "plain": 309 - }, - "fallback": "0x00", - "docs": [ - " The minimum score that each 'untrusted' solution must attain in order to be considered", - " feasible.", - "", - " Can be set via `set_minimum_untrusted_score`." - ] - } - ] - }, - "calls": { - "type": 256 - }, - "events": { - "type": 32 - }, - "constants": [ - { - "name": "UnsignedPhase", - "type": 4, - "value": "0x19000000", - "docs": [ - " Duration of the unsigned phase." - ] - }, - { - "name": "SignedPhase", - "type": 4, - "value": "0x19000000", - "docs": [ - " Duration of the signed phase." - ] - }, - { - "name": "BetterSignedThreshold", - "type": 39, - "value": "0x00000000", - "docs": [ - " The minimum amount of improvement to the solution score that defines a solution as", - " \"better\" in the Signed phase." - ] - }, - { - "name": "BetterUnsignedThreshold", - "type": 39, - "value": "0xa0860100", - "docs": [ - " The minimum amount of improvement to the solution score that defines a solution as", - " \"better\" in the Unsigned phase." - ] - }, - { - "name": "OffchainRepeat", - "type": 4, - "value": "0x05000000", - "docs": [ - " The repeat threshold of the offchain worker.", - "", - " For example, if it is 5, that means that at least 5 blocks will elapse between attempts", - " to submit the worker's solution." - ] - }, - { - "name": "MinerTxPriority", - "type": 8, - "value": "0xfeffffffffffff7f", - "docs": [ - " The priority of the unsigned transaction submitted in the unsigned-phase" - ] - }, - { - "name": "SignedMaxSubmissions", - "type": 4, - "value": "0x0a000000", - "docs": [ - " Maximum number of signed submissions that can be queued.", - "", - " It is best to avoid adjusting this during an election, as it impacts downstream data", - " structures. In particular, `SignedSubmissionIndices` is bounded on this value. If you", - " update this value during an election, you _must_ ensure that", - " `SignedSubmissionIndices.len()` is less than or equal to the new value. Otherwise,", - " attempts to submit new solutions may cause a runtime panic." - ] - }, - { - "name": "SignedMaxWeight", - "type": 8, - "value": "0x683e706a2d010000", - "docs": [ - " Maximum weight of a signed solution.", - "", - " If [`Config::MinerConfig`] is being implemented to submit signed solutions (outside of", - " this pallet), then [`MinerConfig::solution_weight`] is used to compare against", - " this value." - ] - }, - { - "name": "SignedMaxRefunds", - "type": 4, - "value": "0x03000000", - "docs": [ - " The maximum amount of unchecked solutions to refund the call fee for." - ] - }, - { - "name": "SignedRewardBase", - "type": 6, - "value": "0x204e0000000000000000000000000000", - "docs": [ - " Base reward for a signed solution" - ] - }, - { - "name": "SignedDepositBase", - "type": 6, - "value": "0x204e0000000000000000000000000000", - "docs": [ - " Base deposit for a signed solution." - ] - }, - { - "name": "SignedDepositByte", - "type": 6, - "value": "0xc8000000000000000000000000000000", - "docs": [ - " Per-byte deposit for a signed solution." - ] - }, - { - "name": "SignedDepositWeight", - "type": 6, - "value": "0x00000000000000000000000000000000", - "docs": [ - " Per-weight deposit for a signed solution." - ] - }, - { - "name": "MaxElectingVoters", - "type": 4, - "value": "0x10270000", - "docs": [ - " The maximum number of electing voters to put in the snapshot. At the moment, snapshots", - " are only over a single block, but once multi-block elections are introduced they will", - " take place over multiple blocks." - ] - }, - { - "name": "MaxElectableTargets", - "type": 237, - "value": "0xffff", - "docs": [ - " The maximum number of electable targets to put in the snapshot." - ] - } - ], - "errors": { - "type": 437 - }, - "index": 7 - }, - { - "name": "Staking", - "storage": { - "prefix": "Staking", - "items": [ - { - "name": "HistoryDepth", - "modifier": "Default", - "type": { - "plain": 4 - }, - "fallback": "0x54000000", - "docs": [ - " Number of eras to keep in history.", - "", - " Information is kept for eras in `[current_era - history_depth; current_era]`.", - "", - " Must be more than the number of eras delayed by session otherwise. I.e. active era must", - " always be in history. I.e. `active_era > current_era - history_depth` must be", - " guaranteed." - ] - }, - { - "name": "ValidatorCount", - "modifier": "Default", - "type": { - "plain": 4 - }, - "fallback": "0x00000000", - "docs": [ - " The ideal number of staking participants." - ] - }, - { - "name": "MinimumValidatorCount", - "modifier": "Default", - "type": { - "plain": 4 - }, - "fallback": "0x00000000", - "docs": [ - " Minimum number of staking participants before emergency conditions are imposed." - ] - }, - { - "name": "Invulnerables", - "modifier": "Default", - "type": { - "plain": 319 - }, - "fallback": "0x00", - "docs": [ - " Any validators that may never be slashed or forcibly kicked. It's a Vec since they're", - " easy to initialize and the performance hit is minimal (we expect no more than four", - " invulnerables) and restricted to testnets." - ] - }, - { - "name": "Bonded", - "modifier": "Optional", - "type": { - "map": { - "hashers": [ - "Twox64Concat" - ], - "key": 0, - "value": 0 - } - }, - "fallback": "0x00", - "docs": [ - " Map from all locked \"stash\" accounts to the controller account." - ] - }, - { - "name": "MinNominatorBond", - "modifier": "Default", - "type": { - "plain": 6 - }, - "fallback": "0x00000000000000000000000000000000", - "docs": [ - " The minimum active bond to become and maintain the role of a nominator." - ] - }, - { - "name": "MinValidatorBond", - "modifier": "Default", - "type": { - "plain": 6 - }, - "fallback": "0x00000000000000000000000000000000", - "docs": [ - " The minimum active bond to become and maintain the role of a validator." - ] - }, - { - "name": "MinCommission", - "modifier": "Default", - "type": { - "plain": 39 - }, - "fallback": "0x00000000", - "docs": [ - " The minimum amount of commission that validators can set.", - "", - " If set to `0`, no limit exists." - ] - }, - { - "name": "Ledger", - "modifier": "Optional", - "type": { - "map": { - "hashers": [ - "Blake2_128Concat" - ], - "key": 0, - "value": 438 - } - }, - "fallback": "0x00", - "docs": [ - " Map from all (unlocked) \"controller\" accounts to the info regarding the staking." - ] - }, - { - "name": "Payee", - "modifier": "Default", - "type": { - "map": { - "hashers": [ - "Twox64Concat" - ], - "key": 0, - "value": 318 - } - }, - "fallback": "0x00", - "docs": [ - " Where the reward payment should be made. Keyed by stash." - ] - }, - { - "name": "Validators", - "modifier": "Default", - "type": { - "map": { - "hashers": [ - "Twox64Concat" - ], - "key": 0, - "value": 37 - } - }, - "fallback": "0x0000", - "docs": [ - " The map from (wannabe) validator stash key to the preferences of that validator." - ] - }, - { - "name": "CounterForValidators", - "modifier": "Default", - "type": { - "plain": 4 - }, - "fallback": "0x00000000", - "docs": [ - "Counter for the related counted storage map" - ] - }, - { - "name": "MaxValidatorsCount", - "modifier": "Optional", - "type": { - "plain": 4 - }, - "fallback": "0x00", - "docs": [ - " The maximum validator count before we stop allowing new validators to join.", - "", - " When this value is not set, no limits are enforced." - ] - }, - { - "name": "Nominators", - "modifier": "Optional", - "type": { - "map": { - "hashers": [ - "Twox64Concat" - ], - "key": 0, - "value": 442 - } - }, - "fallback": "0x00", - "docs": [ - " The map from nominator stash key to their nomination preferences, namely the validators that", - " they wish to support.", - "", - " Note that the keys of this storage map might become non-decodable in case the", - " [`Config::MaxNominations`] configuration is decreased. In this rare case, these nominators", - " are still existent in storage, their key is correct and retrievable (i.e. `contains_key`", - " indicates that they exist), but their value cannot be decoded. Therefore, the non-decodable", - " nominators will effectively not-exist, until they re-submit their preferences such that it", - " is within the bounds of the newly set `Config::MaxNominations`.", - "", - " This implies that `::iter_keys().count()` and `::iter().count()` might return different", - " values for this map. Moreover, the main `::count()` is aligned with the former, namely the", - " number of keys that exist.", - "", - " Lastly, if any of the nominators become non-decodable, they can be chilled immediately via", - " [`Call::chill_other`] dispatchable by anyone." - ] - }, - { - "name": "CounterForNominators", - "modifier": "Default", - "type": { - "plain": 4 - }, - "fallback": "0x00000000", - "docs": [ - "Counter for the related counted storage map" - ] - }, - { - "name": "MaxNominatorsCount", - "modifier": "Optional", - "type": { - "plain": 4 - }, - "fallback": "0x00", - "docs": [ - " The maximum nominator count before we stop allowing new validators to join.", - "", - " When this value is not set, no limits are enforced." - ] - }, - { - "name": "CurrentEra", - "modifier": "Optional", - "type": { - "plain": 4 - }, - "fallback": "0x00", - "docs": [ - " The current era index.", - "", - " This is the latest planned era, depending on how the Session pallet queues the validator", - " set, it might be active or not." - ] - }, - { - "name": "ActiveEra", - "modifier": "Optional", - "type": { - "plain": 443 - }, - "fallback": "0x00", - "docs": [ - " The active era information, it holds index and start.", - "", - " The active era is the era being currently rewarded. Validator set of this era must be", - " equal to [`SessionInterface::validators`]." - ] - }, - { - "name": "ErasStartSessionIndex", - "modifier": "Optional", - "type": { - "map": { - "hashers": [ - "Twox64Concat" - ], - "key": 4, - "value": 4 - } - }, - "fallback": "0x00", - "docs": [ - " The session index at which the era start for the last `HISTORY_DEPTH` eras.", - "", - " Note: This tracks the starting session (i.e. session index when era start being active)", - " for the eras in `[CurrentEra - HISTORY_DEPTH, CurrentEra]`." - ] - }, - { - "name": "ErasStakers", - "modifier": "Default", - "type": { - "map": { - "hashers": [ - "Twox64Concat", - "Twox64Concat" - ], - "key": 444, - "value": 51 - } - }, - "fallback": "0x000000", - "docs": [ - " Exposure of validator at era.", - "", - " This is keyed first by the era index to allow bulk deletion and then the stash account.", - "", - " Is it removed after `HISTORY_DEPTH` eras.", - " If stakers hasn't been set or has been removed then empty exposure is returned." - ] - }, - { - "name": "ErasStakersClipped", - "modifier": "Default", - "type": { - "map": { - "hashers": [ - "Twox64Concat", - "Twox64Concat" - ], - "key": 444, - "value": 51 - } - }, - "fallback": "0x000000", - "docs": [ - " Clipped Exposure of validator at era.", - "", - " This is similar to [`ErasStakers`] but number of nominators exposed is reduced to the", - " `T::MaxNominatorRewardedPerValidator` biggest stakers.", - " (Note: the field `total` and `own` of the exposure remains unchanged).", - " This is used to limit the i/o cost for the nominator payout.", - "", - " This is keyed fist by the era index to allow bulk deletion and then the stash account.", - "", - " Is it removed after `HISTORY_DEPTH` eras.", - " If stakers hasn't been set or has been removed then empty exposure is returned." - ] - }, - { - "name": "ErasValidatorPrefs", - "modifier": "Default", - "type": { - "map": { - "hashers": [ - "Twox64Concat", - "Twox64Concat" - ], - "key": 444, - "value": 37 - } - }, - "fallback": "0x0000", - "docs": [ - " Similar to `ErasStakers`, this holds the preferences of validators.", - "", - " This is keyed first by the era index to allow bulk deletion and then the stash account.", - "", - " Is it removed after `HISTORY_DEPTH` eras." - ] - }, - { - "name": "ErasValidatorReward", - "modifier": "Optional", - "type": { - "map": { - "hashers": [ - "Twox64Concat" - ], - "key": 4, - "value": 6 - } - }, - "fallback": "0x00", - "docs": [ - " The total validator era payout for the last `HISTORY_DEPTH` eras.", - "", - " Eras that haven't finished yet or has been removed doesn't have reward." - ] - }, - { - "name": "ErasRewardPoints", - "modifier": "Default", - "type": { - "map": { - "hashers": [ - "Twox64Concat" - ], - "key": 4, - "value": 445 - } - }, - "fallback": "0x0000000000", - "docs": [ - " Rewards for the last `HISTORY_DEPTH` eras.", - " If reward hasn't been set or has been removed then 0 reward is returned." - ] - }, - { - "name": "ErasTotalStake", - "modifier": "Default", - "type": { - "map": { - "hashers": [ - "Twox64Concat" - ], - "key": 4, - "value": 6 - } - }, - "fallback": "0x00000000000000000000000000000000", - "docs": [ - " The total amount staked for the last `HISTORY_DEPTH` eras.", - " If total hasn't been set or has been removed then 0 stake is returned." - ] - }, - { - "name": "ForceEra", - "modifier": "Default", - "type": { - "plain": 449 - }, - "fallback": "0x00", - "docs": [ - " Mode of era forcing." - ] - }, - { - "name": "SlashRewardFraction", - "modifier": "Default", - "type": { - "plain": 39 - }, - "fallback": "0x00000000", - "docs": [ - " The percentage of the slash that is distributed to reporters.", - "", - " The rest of the slashed value is handled by the `Slash`." - ] - }, - { - "name": "CanceledSlashPayout", - "modifier": "Default", - "type": { - "plain": 6 - }, - "fallback": "0x00000000000000000000000000000000", - "docs": [ - " The amount of currency given to reporters of a slash event which was", - " canceled by extraordinary circumstances (e.g. governance)." - ] - }, - { - "name": "UnappliedSlashes", - "modifier": "Default", - "type": { - "map": { - "hashers": [ - "Twox64Concat" - ], - "key": 4, - "value": 450 - } - }, - "fallback": "0x00", - "docs": [ - " All unapplied slashes that are queued for later." - ] - }, - { - "name": "BondedEras", - "modifier": "Default", - "type": { - "plain": 218 - }, - "fallback": "0x00", - "docs": [ - " A mapping from still-bonded eras to the first session index of that era.", - "", - " Must contains information for eras for the range:", - " `[active_era - bounding_duration; active_era]`" - ] - }, - { - "name": "ValidatorSlashInEra", - "modifier": "Optional", - "type": { - "map": { - "hashers": [ - "Twox64Concat", - "Twox64Concat" - ], - "key": 444, - "value": 452 - } - }, - "fallback": "0x00", - "docs": [ - " All slashing events on validators, mapped by era to the highest slash proportion", - " and slash value of the era." - ] - }, - { - "name": "NominatorSlashInEra", - "modifier": "Optional", - "type": { - "map": { - "hashers": [ - "Twox64Concat", - "Twox64Concat" - ], - "key": 444, - "value": 6 - } - }, - "fallback": "0x00", - "docs": [ - " All slashing events on nominators, mapped by era to the highest slash value of the era." - ] - }, - { - "name": "SlashingSpans", - "modifier": "Optional", - "type": { - "map": { - "hashers": [ - "Twox64Concat" - ], - "key": 0, - "value": 453 - } - }, - "fallback": "0x00", - "docs": [ - " Slashing spans for stash accounts." - ] - }, - { - "name": "SpanSlash", - "modifier": "Default", - "type": { - "map": { - "hashers": [ - "Twox64Concat" - ], - "key": 448, - "value": 454 - } - }, - "fallback": "0x0000000000000000000000000000000000000000000000000000000000000000", - "docs": [ - " Records information about the maximum slash of a stash within a slashing span,", - " as well as how much reward has been paid out." - ] - }, - { - "name": "EarliestUnappliedSlash", - "modifier": "Optional", - "type": { - "plain": 4 - }, - "fallback": "0x00", - "docs": [ - " The earliest era for which we have a pending, unapplied slash." - ] - }, - { - "name": "CurrentPlannedSession", - "modifier": "Default", - "type": { - "plain": 4 - }, - "fallback": "0x00000000", - "docs": [ - " The last planned session scheduled by the session pallet.", - "", - " This is basically in sync with the call to [`pallet_session::SessionManager::new_session`]." - ] - }, - { - "name": "OffendingValidators", - "modifier": "Default", - "type": { - "plain": 455 - }, - "fallback": "0x00", - "docs": [ - " Indices of validators that have offended in the active era and whether they are currently", - " disabled.", - "", - " This value should be a superset of disabled validators since not all offences lead to the", - " validator being disabled (if there was no slash). This is needed to track the percentage of", - " validators that have offended in the current era, ensuring a new era is forced if", - " `OffendingValidatorsThreshold` is reached. The vec is always kept sorted so that we can find", - " whether a given validator has previously offended using binary search. It gets cleared when", - " the era ends." - ] - }, - { - "name": "StorageVersion", - "modifier": "Default", - "type": { - "plain": 457 - }, - "fallback": "0x07", - "docs": [ - " True if network has been upgraded to this version.", - " Storage version of the pallet.", - "", - " This is set to v7.0.0 for new networks." - ] - }, - { - "name": "ChillThreshold", - "modifier": "Optional", - "type": { - "plain": 320 - }, - "fallback": "0x00", - "docs": [ - " The threshold for when users can start calling `chill_other` for other validators /", - " nominators. The threshold is compared to the actual number of validators / nominators", - " (`CountFor*`) in the system compared to the configured max (`Max*Count`)." - ] - } - ] - }, - "calls": { - "type": 317 - }, - "events": { - "type": 36 - }, - "constants": [ - { - "name": "MaxNominations", - "type": 4, - "value": "0x10000000", - "docs": [ - " Maximum number of nominations per nominator." - ] - }, - { - "name": "SessionsPerEra", - "type": 4, - "value": "0x06000000", - "docs": [ - " Number of sessions per era." - ] - }, - { - "name": "BondingDuration", - "type": 4, - "value": "0xa8000000", - "docs": [ - " Number of eras that staked funds must remain bonded for." - ] - }, - { - "name": "SlashDeferDuration", - "type": 4, - "value": "0xa7000000", - "docs": [ - " Number of eras that slashes are deferred by, after computation.", - "", - " This should be less than the bonding duration. Set to 0 if slashes", - " should be applied immediately, without opportunity for intervention." - ] - }, - { - "name": "MaxNominatorRewardedPerValidator", - "type": 4, - "value": "0x00010000", - "docs": [ - " The maximum number of nominators rewarded for each validator.", - "", - " For each validator only the `$MaxNominatorRewardedPerValidator` biggest stakers can", - " claim their reward. This used to limit the i/o cost for the nominator payout." - ] - }, - { - "name": "MaxUnlockingChunks", - "type": 4, - "value": "0x20000000", - "docs": [ - " The maximum number of `unlocking` chunks a [`StakingLedger`] can have. Effectively", - " determines how many unique eras a staker may be unbonding in." - ] - } - ], - "errors": { - "type": 458 - }, - "index": 8 - }, - { - "name": "Session", - "storage": { - "prefix": "Session", - "items": [ - { - "name": "Validators", - "modifier": "Default", - "type": { - "plain": 319 - }, - "fallback": "0x00", - "docs": [ - " The current set of validators." - ] - }, - { - "name": "CurrentIndex", - "modifier": "Default", - "type": { - "plain": 4 - }, - "fallback": "0x00000000", - "docs": [ - " Current index of the session." - ] - }, - { - "name": "QueuedChanged", - "modifier": "Default", - "type": { - "plain": 34 - }, - "fallback": "0x00", - "docs": [ - " True if the underlying economic identities or weighting behind the validators", - " has changed in the queued validator set." - ] - }, - { - "name": "QueuedKeys", - "modifier": "Default", - "type": { - "plain": 459 - }, - "fallback": "0x00", - "docs": [ - " The queued keys for the next session. When the next session begins, these keys", - " will be used to determine the validator's session keys." - ] - }, - { - "name": "DisabledValidators", - "modifier": "Default", - "type": { - "plain": 321 - }, - "fallback": "0x00", - "docs": [ - " Indices of disabled validators.", - "", - " The vec is always kept sorted so that we can find whether a given validator is", - " disabled using binary search. It gets cleared when `on_session_ending` returns", - " a new set of identities." - ] - }, - { - "name": "NextKeys", - "modifier": "Optional", - "type": { - "map": { - "hashers": [ - "Twox64Concat" - ], - "key": 0, - "value": 327 - } - }, - "fallback": "0x00", - "docs": [ - " The next session keys for a validator." - ] - }, - { - "name": "KeyOwner", - "modifier": "Optional", - "type": { - "map": { - "hashers": [ - "Twox64Concat" - ], - "key": 461, - "value": 0 - } - }, - "fallback": "0x00", - "docs": [ - " The owner of a key. The key is the `KeyTypeId` + the encoded key." - ] - } - ] - }, - "calls": { - "type": 326 - }, - "events": { - "type": 40 - }, - "constants": [], - "errors": { - "type": 463 - }, - "index": 9 - }, - { - "name": "Historical", - "storage": { - "prefix": "Historical", - "items": [ - { - "name": "HistoricalSessions", - "modifier": "Optional", - "type": { - "map": { - "hashers": [ - "Twox64Concat" - ], - "key": 4, - "value": 464 - } - }, - "fallback": "0x00", - "docs": [ - " Mapping from historical session indices to session-data root hash and validator count." - ] - }, - { - "name": "StoredRange", - "modifier": "Optional", - "type": { - "plain": 219 - }, - "fallback": "0x00", - "docs": [ - " The range of historical sessions we store. [first, last)" - ] - } - ] - }, - "calls": null, - "events": null, - "constants": [], - "errors": null, - "index": 10 - }, - { - "name": "Grandpa", - "storage": { - "prefix": "Grandpa", - "items": [ - { - "name": "State", - "modifier": "Default", - "type": { - "plain": 465 - }, - "fallback": "0x00", - "docs": [ - " State of the current authority set." - ] - }, - { - "name": "PendingChange", - "modifier": "Optional", - "type": { - "plain": 466 - }, - "fallback": "0x00", - "docs": [ - " Pending change: (signaled at, scheduled change)." - ] - }, - { - "name": "NextForced", - "modifier": "Optional", - "type": { - "plain": 4 - }, - "fallback": "0x00", - "docs": [ - " next block number where we can force a change." - ] - }, - { - "name": "Stalled", - "modifier": "Optional", - "type": { - "plain": 219 - }, - "fallback": "0x00", - "docs": [ - " `true` if we are currently stalled." - ] - }, - { - "name": "CurrentSetId", - "modifier": "Default", - "type": { - "plain": 8 - }, - "fallback": "0x0000000000000000", - "docs": [ - " The number of changes (both in terms of keys and underlying economic responsibilities)", - " in the \"set\" of Grandpa validators from genesis." - ] - }, - { - "name": "SetIdSession", - "modifier": "Optional", - "type": { - "map": { - "hashers": [ - "Twox64Concat" - ], - "key": 8, - "value": 4 - } - }, - "fallback": "0x00", - "docs": [ - " A mapping from grandpa set ID to the index of the *most recent* session for which its", - " members were responsible.", - "", - " TWOX-NOTE: `SetId` is not under user control." - ] - } - ] - }, - "calls": { - "type": 329 - }, - "events": { - "type": 41 - }, - "constants": [ - { - "name": "MaxAuthorities", - "type": 4, - "value": "0x64000000", - "docs": [ - " Max Authorities in use" - ] - } - ], - "errors": { - "type": 468 - }, - "index": 11 - }, - { - "name": "AuthorityDiscovery", - "storage": { - "prefix": "AuthorityDiscovery", - "items": [ - { - "name": "Keys", - "modifier": "Default", - "type": { - "plain": 469 - }, - "fallback": "0x00", - "docs": [ - " Keys of the current authority set." - ] - }, - { - "name": "NextKeys", - "modifier": "Default", - "type": { - "plain": 469 - }, - "fallback": "0x00", - "docs": [ - " Keys of the next authority set." - ] - } - ] - }, - "calls": null, - "events": null, - "constants": [], - "errors": null, - "index": 12 - }, - { - "name": "ImOnline", - "storage": { - "prefix": "ImOnline", - "items": [ - { - "name": "HeartbeatAfter", - "modifier": "Default", - "type": { - "plain": 4 - }, - "fallback": "0x00000000", - "docs": [ - " The block number after which it's ok to send heartbeats in the current", - " session.", - "", - " At the beginning of each session we set this to a value that should fall", - " roughly in the middle of the session duration. The idea is to first wait for", - " the validators to produce a block in the current session, so that the", - " heartbeat later on will not be necessary.", - "", - " This value will only be used as a fallback if we fail to get a proper session", - " progress estimate from `NextSessionRotation`, as those estimates should be", - " more accurate then the value we calculate for `HeartbeatAfter`." - ] - }, - { - "name": "Keys", - "modifier": "Default", - "type": { - "plain": 471 - }, - "fallback": "0x00", - "docs": [ - " The current set of keys that may issue a heartbeat." - ] - }, - { - "name": "ReceivedHeartbeats", - "modifier": "Optional", - "type": { - "map": { - "hashers": [ - "Twox64Concat", - "Twox64Concat" - ], - "key": 219, - "value": 473 - } - }, - "fallback": "0x00", - "docs": [ - " For each session index, we keep a mapping of `SessionIndex` and `AuthIndex` to", - " `WrapperOpaque`." - ] - }, - { - "name": "AuthoredBlocks", - "modifier": "Default", - "type": { - "map": { - "hashers": [ - "Twox64Concat", - "Twox64Concat" - ], - "key": 444, - "value": 4 - } - }, - "fallback": "0x00000000", - "docs": [ - " For each session index, we keep a mapping of `ValidatorId` to the", - " number of blocks authored by the given authority." - ] - } - ] - }, - "calls": { - "type": 341 - }, - "events": { - "type": 46 - }, - "constants": [ - { - "name": "UnsignedPriority", - "type": 8, - "value": "0xffffffffffffffff", - "docs": [ - " A configuration for base priority of unsigned transactions.", - "", - " This is exposed so that it can be tuned for particular runtime, when", - " multiple pallets send unsigned transactions." - ] - } - ], - "errors": { - "type": 478 - }, - "index": 13 - }, - { - "name": "Offences", - "storage": { - "prefix": "Offences", - "items": [ - { - "name": "Reports", - "modifier": "Optional", - "type": { - "map": { - "hashers": [ - "Twox64Concat" - ], - "key": 9, - "value": 479 - } - }, - "fallback": "0x00", - "docs": [ - " The primary structure that holds all offence records keyed by report identifiers." - ] - }, - { - "name": "ConcurrentReportsIndex", - "modifier": "Default", - "type": { - "map": { - "hashers": [ - "Twox64Concat", - "Twox64Concat" - ], - "key": 480, - "value": 217 - } - }, - "fallback": "0x00", - "docs": [ - " A vector of reports of the same kind that happened at the same time slot." - ] - }, - { - "name": "ReportsByKindIndex", - "modifier": "Default", - "type": { - "map": { - "hashers": [ - "Twox64Concat" - ], - "key": 56, - "value": 10 - } - }, - "fallback": "0x00", - "docs": [ - " Enumerates all reports of a kind along with the time they happened.", - "", - " All reports are sorted by the time of offence.", - "", - " Note that the actual type of this mapping is `Vec`, this is because values of", - " different types are not supported at the moment so we are doing the manual serialization." - ] - } - ] - }, - "calls": null, - "events": { - "type": 55 - }, - "constants": [], - "errors": null, - "index": 14 - }, - { - "name": "RandomnessCollectiveFlip", - "storage": { - "prefix": "RandomnessCollectiveFlip", - "items": [ - { - "name": "RandomMaterial", - "modifier": "Default", - "type": { - "plain": 481 - }, - "fallback": "0x00", - "docs": [ - " Series of block headers from the last 81 blocks that acts as random seed material. This", - " is arranged as a ring buffer with `block_number % 81` being the index into the `Vec` of", - " the oldest hash." - ] - } - ] - }, - "calls": null, - "events": null, - "constants": [], - "errors": null, - "index": 15 - }, - { - "name": "Sudo", - "storage": { - "prefix": "Sudo", - "items": [ - { - "name": "Key", - "modifier": "Optional", - "type": { - "plain": 0 - }, - "fallback": "0x00", - "docs": [ - " The `AccountId` of the sudo key." - ] - } - ] - }, - "calls": { - "type": 349 - }, - "events": { - "type": 57 - }, - "constants": [], - "errors": { - "type": 482 - }, - "index": 16 - }, - { - "name": "BagsList", - "storage": { - "prefix": "BagsList", - "items": [ - { - "name": "ListNodes", - "modifier": "Optional", - "type": { - "map": { - "hashers": [ - "Twox64Concat" - ], - "key": 0, - "value": 483 - } - }, - "fallback": "0x00", - "docs": [ - " A single node, within some bag.", - "", - " Nodes store links forward and back within their respective bags." - ] - }, - { - "name": "CounterForListNodes", - "modifier": "Default", - "type": { - "plain": 4 - }, - "fallback": "0x00000000", - "docs": [ - "Counter for the related counted storage map" - ] - }, - { - "name": "ListBags", - "modifier": "Optional", - "type": { - "map": { - "hashers": [ - "Twox64Concat" - ], - "key": 8, - "value": 484 - } - }, - "fallback": "0x00", - "docs": [ - " A bag stored in storage.", - "", - " Stores a `Bag` struct, which stores head and tail pointers to itself." - ] - } - ] - }, - "calls": { - "type": 350 - }, - "events": { - "type": 59 - }, - "constants": [ - { - "name": "BagThresholds", - "type": 62, - "value": "0x210300407a10f35a00006a70ccd4a96000009ef3397fbc660000a907ccd5306d00003d9a67fb0c740000a9bfa275577b0000a6fdf73217830000034f5d91538b0000132445651494000078081001629d00000302f63c45a70000392e6f7fc7b10000f59c23c6f2bc00004ae76aafd1c80000598a64846fd50000129fb243d8e200003f22e1ac18f1000033a4844c3e000100e2e51b895710010076a2c0b0732101006789b407a3330100793ed8d7f646010078131b81815b01000c1cf38a567101004437eeb68a8801009eb56d1434a10100335e9f156abb010067c3c7a545d701003218f340e1f40100de0b230d59140200699c11f5ca350200ad50a2c4565902009ae41c471e7f0200d0244e6745a70200f984ad51f2d10200ace7a7984dff0200a118325b822f0300ffa4c76dbe620300580bfd8532990300a9afce6812d30300109ad81b95100400d9caa519f551040038df488970970400bee1727949e10400cc73401fc62f0500b304f91831830500828bffb4d9db05001235383d143a0600a5b42a473a9e060036662d09ab080700f73aeab4cb790700b87e93d707f20700ffec23c0d1710800b84b0beca2f90800c9dcae7afc89090091752ba867230a0064f1cd4f76c60a003609be76c3730b0078655fdff32b0c00a407f5a5b6ef0c0052f61be7c5bf0d00da71bb70e79c0e000de9127eed870f001477987fb7811000ebee65ef328b11001269fe325ca5120033f8428b3fd113008ba57a13fa0f15001b2b60d0ba6216000d1d37d0c3ca17006c64fa5c6b4919002622c7411de01a00045bb9245c901c00233d83f6c25b1e00c8771c79064420003013fddef64a2200aa8b6e848172240082c096c4b2bc260016a3faebb72b29008296524ae1c12b00a636a865a4812e00d0e2d4509e6d31009c0a9a2796883400e4faafb27fd53700e6e64d367e573b000e4bd66de7113f0088b17db746084300b07def72603e470034de249635b84b00d48bd57b077a5000d0bd20ef5b885500b8f0467801e85a0010f88aee139e60003892925301b066009c95e4fc8e236d00b4126d10dffe730028b43e5976487b00a08a1c7a42078300b09ab083a0428b002846b2f463029400c861a42ade4e9d0050d23d4ae630a700805101a7e1b1b10038e501b2ccdbbc002016527844b9c800388924ba9055d50070ca35a4aebce200805fb1355cfbf0008035685d241f0001a0c3dcd96b361001d07862e87e50210160e852d09f7d330190662c5816cf460110274c3340575b01804be277a22971013082b92dfc5a880180d276075a01a101b0f511592b34bb014031745f580cd701802f6cee59a4f40140ff799b521814026075607d2986350260fde999a60d590200e5e71c91d07e02c0df2575cff2a602a07fd975899ad102a067009d4cf0fe0220dc29a1321f2f0320ff526b0a5562038088caa383c29803e05683fb5c9bd203401dd75d9516100400317e39a06e5104c0b071129de1960480b48c9192b1e00480e8124aad242f05c007ca7082858205007c13c45623db0540836fe869523906c0700f81466c9d0640f09c5017d00707c0e624b301e37807c0332ac78510f10780074ca1e4ca700800d5a9eb8c8bf80800a849588ed3880900804254142c220a80a25170e826c50a00e8d5fafc5e720b801df64e00792a0c80d4fe64f923ee0c006dd038ee19be0d001e90a494209b0e0010bf570e0a860f00da6a9db0b57f1000bf64afd810891100bb5b60cd17a31200f963f3aed6ce1300d5f004766a0d1500e099770202601600103d663bdfc71700de3e2d4158461900ecdbadb2d8dc1a0045c70007e38c1c00b8bde0fc11581e00ba5c2a211a402000407de46dcb462200dea55b03136e2400aaf1f3fcfcb7260014226f63b62629006492803e8fbc2b008486a6c7fc7b2e002cf05fc09b673100da63f7ed32823400f0b13fbdb5ce3700f291c41047503b00422a1a3c3c0a3f002c24212f20004300ac9342d4b6354700cc6ed7a400af4b00c4d022773e70500020017d89f57d5500f86387cef3dc5a008c4c7f7e54926000206207f284a36600cc1e05cb49166d00b42a7a70c4f07300d43a90e278397b0038f461ec53f78200a07264b9b1318b0048c9b3d464f09300007fe998bd3b9d0010058f17921ca70000dfaf7f469cb100e80c880bd6c4bc0058bdcb7ddca0c80038d18d37a03bd50030d55bf01ca1e200704ac01a0fdef0ffffffffffffffff", - "docs": [ - " The list of thresholds separating the various bags.", - "", - " Ids are separated into unsorted bags according to their score. This specifies the", - " thresholds separating the bags. An id's bag is the largest bag for which the id's score", - " is less than or equal to its upper threshold.", - "", - " When ids are iterated, higher bags are iterated completely before lower bags. This means", - " that iteration is _semi-sorted_: ids of higher score tend to come before ids of lower", - " score, but peer ids within a particular bag are sorted in insertion order.", - "", - " # Expressing the constant", - "", - " This constant must be sorted in strictly increasing order. Duplicate items are not", - " permitted.", - "", - " There is an implied upper limit of `Score::MAX`; that value does not need to be", - " specified within the bag. For any two threshold lists, if one ends with", - " `Score::MAX`, the other one does not, and they are otherwise equal, the two", - " lists will behave identically.", - "", - " # Calculation", - "", - " It is recommended to generate the set of thresholds in a geometric series, such that", - " there exists some constant ratio such that `threshold[k + 1] == (threshold[k] *", - " constant_ratio).max(threshold[k] + 1)` for all `k`.", - "", - " The helpers in the `/utils/frame/generate-bags` module can simplify this calculation.", - "", - " # Examples", - "", - " - If `BagThresholds::get().is_empty()`, then all ids are put into the same bag, and", - " iteration is strictly in insertion order.", - " - If `BagThresholds::get().len() == 64`, and the thresholds are determined according to", - " the procedure given above, then the constant ratio is equal to 2.", - " - If `BagThresholds::get().len() == 200`, and the thresholds are determined according to", - " the procedure given above, then the constant ratio is approximately equal to 1.248.", - " - If the threshold list begins `[1, 2, 3, ...]`, then an id with score 0 or 1 will fall", - " into bag 0, an id with score 2 will fall into bag 1, etc.", - "", - " # Migration", - "", - " In the event that this list ever changes, a copy of the old bags list must be retained.", - " With that `List::migrate` can be called, which will perform the appropriate migration." - ] - } - ], - "errors": { - "type": 485 - }, - "index": 17 - }, - { - "name": "Vesting", - "storage": { - "prefix": "Vesting", - "items": [ - { - "name": "Vesting", - "modifier": "Optional", - "type": { - "map": { - "hashers": [ - "Blake2_128Concat" - ], - "key": 0, - "value": 487 - } - }, - "fallback": "0x00", - "docs": [ - " Information regarding the vesting of a given account." - ] - }, - { - "name": "StorageVersion", - "modifier": "Default", - "type": { - "plain": 489 - }, - "fallback": "0x00", - "docs": [ - " Storage version of the pallet.", - "", - " New networks start with latest version, as determined by the genesis build." - ] - } - ] - }, - "calls": { - "type": 351 - }, - "events": { - "type": 60 - }, - "constants": [ - { - "name": "MinVestedTransfer", - "type": 6, - "value": "0x64000000000000000000000000000000", - "docs": [ - " The minimum amount transferred to call `vested_transfer`." - ] - }, - { - "name": "MaxVestingSchedules", - "type": 4, - "value": "0x1c000000", - "docs": [] - } - ], - "errors": { - "type": 490 - }, - "index": 18 - }, - { - "name": "Council", - "storage": { - "prefix": "Council", - "items": [ - { - "name": "Stage", - "modifier": "Default", - "type": { - "plain": 491 - }, - "fallback": "0x00000000000000000000000000", - "docs": [ - " Current council voting stage" - ] - }, - { - "name": "CouncilMembers", - "modifier": "Default", - "type": { - "plain": 495 - }, - "fallback": "0x00", - "docs": [ - " Current council members" - ] - }, - { - "name": "Candidates", - "modifier": "Optional", - "type": { - "map": { - "hashers": [ - "Blake2_128Concat" - ], - "key": 8, - "value": 497 - } - }, - "fallback": "0x00", - "docs": [ - " Map of all candidates that ever candidated and haven't unstake yet." - ] - }, - { - "name": "AnnouncementPeriodNr", - "modifier": "Default", - "type": { - "plain": 8 - }, - "fallback": "0x0000000000000000", - "docs": [ - " Index of the current candidacy period. It is incremented everytime announcement period", - " starts." - ] - }, - { - "name": "Budget", - "modifier": "Default", - "type": { - "plain": 6 - }, - "fallback": "0x00000000000000000000000000000000", - "docs": [ - " Budget for the council's elected members rewards." - ] - }, - { - "name": "NextRewardPayments", - "modifier": "Default", - "type": { - "plain": 4 - }, - "fallback": "0x00000000", - "docs": [ - " The next block in which the elected council member rewards will be payed." - ] - }, - { - "name": "NextBudgetRefill", - "modifier": "Default", - "type": { - "plain": 4 - }, - "fallback": "0x00000000", - "docs": [ - " The next block in which the budget will be increased." - ] - }, - { - "name": "BudgetIncrement", - "modifier": "Default", - "type": { - "plain": 6 - }, - "fallback": "0x00000000000000000000000000000000", - "docs": [ - " Amount of balance to be refilled every budget period" - ] - }, - { - "name": "CouncilorReward", - "modifier": "Default", - "type": { - "plain": 6 - }, - "fallback": "0x00000000000000000000000000000000", - "docs": [ - " Councilor reward per block" - ] - } - ] - }, - "calls": { - "type": 353 - }, - "events": { - "type": 61 - }, - "constants": [ - { - "name": "MinNumberOfExtraCandidates", - "type": 8, - "value": "0x0100000000000000", - "docs": [ - " Minimum number of extra candidates needed for the valid election.", - " Number of total candidates is equal to council size plus extra candidates." - ] - }, - { - "name": "CouncilSize", - "type": 8, - "value": "0x0500000000000000", - "docs": [ - " Council member count" - ] - }, - { - "name": "MinCandidateStake", - "type": 6, - "value": "0xf82a0000000000000000000000000000", - "docs": [ - " Minimum stake candidate has to lock" - ] - }, - { - "name": "AnnouncingPeriodDuration", - "type": 4, - "value": "0x40380000", - "docs": [ - " Duration of annoncing period" - ] - }, - { - "name": "IdlePeriodDuration", - "type": 4, - "value": "0x00e10000", - "docs": [ - " Duration of idle period" - ] - }, - { - "name": "ElectedMemberRewardPeriod", - "type": 4, - "value": "0x40380000", - "docs": [ - " Interval for automatic reward payments." - ] - }, - { - "name": "BudgetRefillPeriod", - "type": 4, - "value": "0x40380000", - "docs": [ - " Interval between automatic budget refills." - ] - }, - { - "name": "CandidacyLockId", - "type": 236, - "value": "0x63616e6469646163", - "docs": [ - " Exports const - candidacy lock id." - ] - }, - { - "name": "CouncilorLockId", - "type": 236, - "value": "0x636f756e63696c6f", - "docs": [ - " Exports const - councilor lock id." - ] - } - ], - "errors": { - "type": 498 - }, - "index": 19 - }, - { - "name": "Referendum", - "storage": { - "prefix": "Instance1Referendum", - "items": [ - { - "name": "Stage", - "modifier": "Default", - "type": { - "plain": 499 - }, - "fallback": "0x00", - "docs": [ - " Current referendum stage." - ] - }, - { - "name": "Votes", - "modifier": "Default", - "type": { - "map": { - "hashers": [ - "Blake2_128Concat" - ], - "key": 0, - "value": 502 - } - }, - "fallback": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "docs": [ - " Votes cast in the referendum. A new record is added to this map when a user casts a", - " sealed vote.", - " It is modified when a user reveals the vote's commitment proof.", - " A record is finally removed when the user unstakes, which can happen during a voting", - " stage or after the current cycle ends.", - " A stake for a vote can be reused in future referendum cycles." - ] - } - ] - }, - "calls": { - "type": 354 - }, - "events": { - "type": 63 - }, - "constants": [ - { - "name": "MaxSaltLength", - "type": 8, - "value": "0x2000000000000000", - "docs": [ - " Maximum length of vote commitment salt. Use length that ensures uniqueness for hashing", - " e.g. std::u64::MAX." - ] - }, - { - "name": "VoteStageDuration", - "type": 4, - "value": "0x40380000", - "docs": [ - " Duration of voting stage (number of blocks)" - ] - }, - { - "name": "RevealStageDuration", - "type": 4, - "value": "0x40380000", - "docs": [ - " Duration of revealing stage (number of blocks)" - ] - }, - { - "name": "MinimumStake", - "type": 6, - "value": "0x10270000000000000000000000000000", - "docs": [ - " Minimum stake needed for voting" - ] - }, - { - "name": "StakingHandlerLockId", - "type": 236, - "value": "0x766f74696e672020", - "docs": [ - " Exports const - staking handler lock id." - ] - } - ], - "errors": { - "type": 503 - }, - "index": 20 - }, - { - "name": "Members", - "storage": { - "prefix": "Membership", - "items": [ - { - "name": "NextMemberId", - "modifier": "Default", - "type": { - "plain": 8 - }, - "fallback": "0x0000000000000000", - "docs": [ - " MemberId to assign to next member that is added to the registry, and is also the", - " total number of members created. MemberIds start at Zero." - ] - }, - { - "name": "MembershipById", - "modifier": "Optional", - "type": { - "map": { - "hashers": [ - "Blake2_128Concat" - ], - "key": 8, - "value": 504 - } - }, - "fallback": "0x00", - "docs": [ - " Mapping of member's id to their membership profile." - ] - }, - { - "name": "MemberIdByHandleHash", - "modifier": "Default", - "type": { - "map": { - "hashers": [ - "Blake2_128Concat" - ], - "key": 10, - "value": 8 - } - }, - "fallback": "0x0000000000000000", - "docs": [ - " Registered unique handles hash and their mapping to their owner." - ] - }, - { - "name": "ReferralCut", - "modifier": "Default", - "type": { - "plain": 2 - }, - "fallback": "0x00", - "docs": [ - " Referral cut percent of the membership fee to receive on buying the membership." - ] - }, - { - "name": "MembershipPrice", - "modifier": "Default", - "type": { - "plain": 6 - }, - "fallback": "0x64000000000000000000000000000000", - "docs": [ - " Current membership price." - ] - }, - { - "name": "InitialInvitationCount", - "modifier": "Default", - "type": { - "plain": 4 - }, - "fallback": "0x05000000", - "docs": [ - " Initial invitation count for the newly bought membership." - ] - }, - { - "name": "InitialInvitationBalance", - "modifier": "Default", - "type": { - "plain": 6 - }, - "fallback": "0x64000000000000000000000000000000", - "docs": [ - " Initial invitation balance for the invited member." - ] - }, - { - "name": "StakingAccountIdMemberStatus", - "modifier": "Default", - "type": { - "map": { - "hashers": [ - "Blake2_128Concat" - ], - "key": 0, - "value": 505 - } - }, - "fallback": "0x000000000000000000", - "docs": [ - " Double of a staking account id and member id to the confirmation status." - ] - } - ] - }, - "calls": { - "type": 355 - }, - "events": { - "type": 67 - }, - "constants": [ - { - "name": "DefaultMembershipPrice", - "type": 6, - "value": "0x64000000000000000000000000000000", - "docs": [ - " Exports const - default membership fee." - ] - }, - { - "name": "ReferralCutMaximumPercent", - "type": 2, - "value": "0x32", - "docs": [ - " Exports const - maximum percent value of the membership fee for the referral cut." - ] - }, - { - "name": "DefaultInitialInvitationBalance", - "type": 6, - "value": "0x64000000000000000000000000000000", - "docs": [ - " Exports const - default balance for the invited member." - ] - }, - { - "name": "CandidateStake", - "type": 6, - "value": "0xc8000000000000000000000000000000", - "docs": [ - " Exports const - Stake needed to candidate as staking account." - ] - }, - { - "name": "InvitedMemberLockId", - "type": 236, - "value": "0x696e766974656d62", - "docs": [ - " Exports const - invited member lock id." - ] - }, - { - "name": "StakingCandidateLockId", - "type": 236, - "value": "0x626f756e64737461", - "docs": [ - " Exports const - staking candidate lock id." - ] - } - ], - "errors": { - "type": 506 - }, - "index": 21 - }, - { - "name": "Forum", - "storage": { - "prefix": "Forum_1_1", - "items": [ - { - "name": "CategoryById", - "modifier": "Default", - "type": { - "map": { - "hashers": [ - "Blake2_128Concat" - ], - "key": 8, - "value": 507 - } - }, - "fallback": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "docs": [ - " Map category identifier to corresponding category." - ] - }, - { - "name": "NextCategoryId", - "modifier": "Default", - "type": { - "plain": 8 - }, - "fallback": "0x0000000000000000", - "docs": [ - " Category identifier value to be used for the next Category created." - ] - }, - { - "name": "CategoryCounter", - "modifier": "Default", - "type": { - "plain": 8 - }, - "fallback": "0x0000000000000000", - "docs": [ - " Counter for all existing categories." - ] - }, - { - "name": "ThreadById", - "modifier": "Default", - "type": { - "map": { - "hashers": [ - "Blake2_128Concat", - "Blake2_128Concat" - ], - "key": 194, - "value": 508 - } - }, - "fallback": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "docs": [ - " Map thread identifier to corresponding thread." - ] - }, - { - "name": "NextThreadId", - "modifier": "Default", - "type": { - "plain": 8 - }, - "fallback": "0x0000000000000000", - "docs": [ - " Thread identifier value to be used for next Thread in threadById." - ] - }, - { - "name": "NextPostId", - "modifier": "Default", - "type": { - "plain": 8 - }, - "fallback": "0x0000000000000000", - "docs": [ - " Post identifier value to be used for for next post created." - ] - }, - { - "name": "CategoryByModerator", - "modifier": "Default", - "type": { - "map": { - "hashers": [ - "Blake2_128Concat", - "Blake2_128Concat" - ], - "key": 194, - "value": 29 - } - }, - "fallback": "0x", - "docs": [ - " Moderator set for each Category" - ] - }, - { - "name": "DataMigrationDone", - "modifier": "Default", - "type": { - "plain": 34 - }, - "fallback": "0x00", - "docs": [ - " If data migration is done, set as configible for unit test purpose" - ] - }, - { - "name": "PollVotes", - "modifier": "Default", - "type": { - "map": { - "hashers": [ - "Blake2_128Concat", - "Blake2_128Concat" - ], - "key": 194, - "value": 34 - } - }, - "fallback": "0x00", - "docs": [ - " Unique thread poll voters. This private double map prevents double voting." - ] - }, - { - "name": "PostById", - "modifier": "Default", - "type": { - "map": { - "hashers": [ - "Blake2_128Concat", - "Blake2_128Concat" - ], - "key": 194, - "value": 513 - } - }, - "fallback": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "docs": [ - " Map post identifier to corresponding post." - ] - } - ] - }, - "calls": { - "type": 356 - }, - "events": { - "type": 72 - }, - "constants": [ - { - "name": "PostDeposit", - "type": 6, - "value": "0x0a000000000000000000000000000000", - "docs": [ - " Exports const", - " Deposit needed to create a post" - ] - }, - { - "name": "ThreadDeposit", - "type": 6, - "value": "0x1e000000000000000000000000000000", - "docs": [ - " Deposit needed to create a thread" - ] - }, - { - "name": "MaxSubcategories", - "type": 8, - "value": "0x2800000000000000", - "docs": [ - " MaxSubcategories" - ] - }, - { - "name": "MaxCategories", - "type": 8, - "value": "0x2800000000000000", - "docs": [ - " MaxCategories" - ] - } - ], - "errors": { - "type": 514 - }, - "index": 22 - }, - { - "name": "Constitution", - "storage": { - "prefix": "Constitution", - "items": [ - { - "name": "Constitution", - "modifier": "Default", - "type": { - "plain": 515 - }, - "fallback": "0x00", - "docs": [] - } - ] - }, - "calls": { - "type": 357 - }, - "events": { - "type": 81 - }, - "constants": [], - "errors": null, - "index": 23 - }, - { - "name": "JoystreamUtility", - "storage": null, - "calls": { - "type": 358 - }, - "events": { - "type": 82 - }, - "constants": [], - "errors": { - "type": 516 - }, - "index": 24 - }, - { - "name": "Content", - "storage": { - "prefix": "Content", - "items": [ - { - "name": "ChannelById", - "modifier": "Default", - "type": { - "map": { - "hashers": [ - "Blake2_128Concat" - ], - "key": 8, - "value": 87 - } - }, - "fallback": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "docs": [] - }, - { - "name": "VideoById", - "modifier": "Default", - "type": { - "map": { - "hashers": [ - "Blake2_128Concat" - ], - "key": 8, - "value": 517 - } - }, - "fallback": "0x0000000000000000000000000000000000000000000000000000", - "docs": [] - }, - { - "name": "NextChannelId", - "modifier": "Default", - "type": { - "plain": 8 - }, - "fallback": "0x0000000000000000", - "docs": [] - }, - { - "name": "NextVideoId", - "modifier": "Default", - "type": { - "plain": 8 - }, - "fallback": "0x0000000000000000", - "docs": [] - }, - { - "name": "NextTransferId", - "modifier": "Default", - "type": { - "plain": 8 - }, - "fallback": "0x0000000000000000", - "docs": [] - }, - { - "name": "NextCuratorGroupId", - "modifier": "Default", - "type": { - "plain": 8 - }, - "fallback": "0x0000000000000000", - "docs": [] - }, - { - "name": "CuratorGroupById", - "modifier": "Default", - "type": { - "map": { - "hashers": [ - "Blake2_128Concat" - ], - "key": 8, - "value": 526 - } - }, - "fallback": "0x000000", - "docs": [] - }, - { - "name": "Commitment", - "modifier": "Default", - "type": { - "plain": 9 - }, - "fallback": "0x0000000000000000000000000000000000000000000000000000000000000000", - "docs": [] - }, - { - "name": "ChannelStateBloatBondValue", - "modifier": "Default", - "type": { - "plain": 6 - }, - "fallback": "0x00000000000000000000000000000000", - "docs": [ - " The state bloat bond for the channel (helps preventing the state bloat)." - ] - }, - { - "name": "VideoStateBloatBondValue", - "modifier": "Default", - "type": { - "plain": 6 - }, - "fallback": "0x00000000000000000000000000000000", - "docs": [ - "The state bloat bond for the video (helps preventing the state bloat)." - ] - }, - { - "name": "MaxCashoutAllowed", - "modifier": "Default", - "type": { - "plain": 6 - }, - "fallback": "0x00000000000000000000000000000000", - "docs": [] - }, - { - "name": "MinCashoutAllowed", - "modifier": "Default", - "type": { - "plain": 6 - }, - "fallback": "0x00000000000000000000000000000000", - "docs": [] - }, - { - "name": "ChannelCashoutsEnabled", - "modifier": "Default", - "type": { - "plain": 34 - }, - "fallback": "0x00", - "docs": [] - }, - { - "name": "MinAuctionDuration", - "modifier": "Default", - "type": { - "plain": 4 - }, - "fallback": "0x00000000", - "docs": [ - " Min auction duration" - ] - }, - { - "name": "MaxAuctionDuration", - "modifier": "Default", - "type": { - "plain": 4 - }, - "fallback": "0x00000000", - "docs": [ - " Max auction duration" - ] - }, - { - "name": "MinAuctionExtensionPeriod", - "modifier": "Default", - "type": { - "plain": 4 - }, - "fallback": "0x00000000", - "docs": [ - " Min auction extension period" - ] - }, - { - "name": "MaxAuctionExtensionPeriod", - "modifier": "Default", - "type": { - "plain": 4 - }, - "fallback": "0x00000000", - "docs": [ - " Max auction extension period" - ] - }, - { - "name": "MinBidLockDuration", - "modifier": "Default", - "type": { - "plain": 4 - }, - "fallback": "0x00000000", - "docs": [ - " Min bid lock duration" - ] - }, - { - "name": "MaxBidLockDuration", - "modifier": "Default", - "type": { - "plain": 4 - }, - "fallback": "0x00000000", - "docs": [ - " Max bid lock duration" - ] - }, - { - "name": "MinStartingPrice", - "modifier": "Default", - "type": { - "plain": 6 - }, - "fallback": "0x00000000000000000000000000000000", - "docs": [ - " Min auction staring price" - ] - }, - { - "name": "MaxStartingPrice", - "modifier": "Default", - "type": { - "plain": 6 - }, - "fallback": "0x00000000000000000000000000000000", - "docs": [ - " Max auction staring price" - ] - }, - { - "name": "MinCreatorRoyalty", - "modifier": "Default", - "type": { - "plain": 39 - }, - "fallback": "0x00000000", - "docs": [ - " Min creator royalty percentage" - ] - }, - { - "name": "MaxCreatorRoyalty", - "modifier": "Default", - "type": { - "plain": 39 - }, - "fallback": "0x00000000", - "docs": [ - " Max creator royalty percentage" - ] - }, - { - "name": "MinBidStep", - "modifier": "Default", - "type": { - "plain": 6 - }, - "fallback": "0x00000000000000000000000000000000", - "docs": [ - " Min auction bid step" - ] - }, - { - "name": "MaxBidStep", - "modifier": "Default", - "type": { - "plain": 6 - }, - "fallback": "0x00000000000000000000000000000000", - "docs": [ - " Max auction bid step" - ] - }, - { - "name": "PlatfromFeePercentage", - "modifier": "Default", - "type": { - "plain": 39 - }, - "fallback": "0x00000000", - "docs": [ - " Platform fee percentage" - ] - }, - { - "name": "AuctionStartsAtMaxDelta", - "modifier": "Default", - "type": { - "plain": 4 - }, - "fallback": "0x00000000", - "docs": [ - " Max delta between current block and starts at" - ] - }, - { - "name": "MaxAuctionWhiteListLength", - "modifier": "Default", - "type": { - "plain": 4 - }, - "fallback": "0x00000000", - "docs": [ - " Max nft auction whitelist length" - ] - }, - { - "name": "OpenAuctionBidByVideoAndMember", - "modifier": "Default", - "type": { - "map": { - "hashers": [ - "Blake2_128Concat", - "Blake2_128Concat" - ], - "key": 194, - "value": 527 - } - }, - "fallback": "0x00000000000000000000000000000000000000000000000000000000", - "docs": [ - " Bids for open auctions" - ] - }, - { - "name": "GlobalDailyNftCounter", - "modifier": "Default", - "type": { - "plain": 103 - }, - "fallback": "0x000000000000000000000000", - "docs": [ - " Global daily NFT counter." - ] - }, - { - "name": "GlobalWeeklyNftCounter", - "modifier": "Default", - "type": { - "plain": 103 - }, - "fallback": "0x000000000000000000000000", - "docs": [ - " Global weekly NFT counter." - ] - }, - { - "name": "GlobalDailyNftLimit", - "modifier": "Default", - "type": { - "plain": 102 - }, - "fallback": "0x000000000000000000000000", - "docs": [ - " Global daily NFT limit." - ] - }, - { - "name": "GlobalWeeklyNftLimit", - "modifier": "Default", - "type": { - "plain": 102 - }, - "fallback": "0x000000000000000000000000", - "docs": [ - " Global weekly NFT limit." - ] - }, - { - "name": "NftLimitsEnabled", - "modifier": "Default", - "type": { - "plain": 34 - }, - "fallback": "0x00", - "docs": [ - " NFT limits enabled or not", - " Can be updated in flight by the Council" - ] - } - ] - }, - "calls": { - "type": 359 - }, - "events": { - "type": 85 - }, - "constants": [ - { - "name": "MaxNumberOfCuratorsPerGroup", - "type": 4, - "value": "0x32000000", - "docs": [ - " Exports const - max number of curators per group" - ] - }, - { - "name": "MaxKeysPerCuratorGroupPermissionsByLevelMap", - "type": 2, - "value": "0x19", - "docs": [ - " Exports const - max number of keys per curator_group.permissions_by_level map instance" - ] - }, - { - "name": "DefaultGlobalDailyNftLimit", - "type": 102, - "value": "0x102700000000000040380000", - "docs": [ - " Exports const - default global daily NFT limit." - ] - }, - { - "name": "DefaultGlobalWeeklyNftLimit", - "type": 102, - "value": "0x102700000000000040380000", - "docs": [ - " Exports const - default global weekly NFT limit." - ] - }, - { - "name": "DefaultChannelDailyNftLimit", - "type": 102, - "value": "0x102700000000000040380000", - "docs": [ - " Exports const - default channel daily NFT limit." - ] - }, - { - "name": "DefaultChannelWeeklyNftLimit", - "type": 102, - "value": "0x102700000000000040380000", - "docs": [ - " Exports const - default channel weekly NFT limit." - ] - } - ], - "errors": { - "type": 528 - }, - "index": 25 - }, - { - "name": "Storage", - "storage": { - "prefix": "Storage", - "items": [ - { - "name": "UploadingBlocked", - "modifier": "Default", - "type": { - "plain": 34 - }, - "fallback": "0x00", - "docs": [ - " Defines whether all new uploads blocked" - ] - }, - { - "name": "Bags", - "modifier": "Default", - "type": { - "map": { - "hashers": [ - "Blake2_128Concat" - ], - "key": 139, - "value": 529 - } - }, - "fallback": "0x000000000000000000000000000000000000", - "docs": [ - " Bags storage map." - ] - }, - { - "name": "NextStorageBucketId", - "modifier": "Default", - "type": { - "plain": 8 - }, - "fallback": "0x0000000000000000", - "docs": [ - " Storage bucket id counter. Starts at zero." - ] - }, - { - "name": "NextDataObjectId", - "modifier": "Default", - "type": { - "plain": 8 - }, - "fallback": "0x0000000000000000", - "docs": [ - " Data object id counter. Starts at zero." - ] - }, - { - "name": "StorageBucketById", - "modifier": "Optional", - "type": { - "map": { - "hashers": [ - "Blake2_128Concat" - ], - "key": 8, - "value": 530 - } - }, - "fallback": "0x00", - "docs": [ - " Storage buckets." - ] - }, - { - "name": "Blacklist", - "modifier": "Default", - "type": { - "map": { - "hashers": [ - "Blake2_128Concat" - ], - "key": 10, - "value": 29 - } - }, - "fallback": "0x", - "docs": [ - " Blacklisted data object hashes." - ] - }, - { - "name": "CurrentBlacklistSize", - "modifier": "Default", - "type": { - "plain": 8 - }, - "fallback": "0x0000000000000000", - "docs": [ - " Blacklist collection counter." - ] - }, - { - "name": "DataObjectPerMegabyteFee", - "modifier": "Default", - "type": { - "plain": 6 - }, - "fallback": "0x00000000000000000000000000000000", - "docs": [ - " Size based pricing of new objects uploaded." - ] - }, - { - "name": "StorageBucketsPerBagLimit", - "modifier": "Default", - "type": { - "plain": 8 - }, - "fallback": "0x0000000000000000", - "docs": [ - " \"Storage buckets per bag\" number limit." - ] - }, - { - "name": "VoucherMaxObjectsSizeLimit", - "modifier": "Default", - "type": { - "plain": 8 - }, - "fallback": "0x0000000000000000", - "docs": [ - " \"Max objects size for a storage bucket voucher\" number limit." - ] - }, - { - "name": "VoucherMaxObjectsNumberLimit", - "modifier": "Default", - "type": { - "plain": 8 - }, - "fallback": "0x0000000000000000", - "docs": [ - " \"Max objects number for a storage bucket voucher\" number limit." - ] - }, - { - "name": "DataObjectStateBloatBondValue", - "modifier": "Default", - "type": { - "plain": 6 - }, - "fallback": "0x00000000000000000000000000000000", - "docs": [ - " The state bloat bond for the data objects (helps preventing the state bloat)." - ] - }, - { - "name": "DynamicBagCreationPolicies", - "modifier": "Default", - "type": { - "map": { - "hashers": [ - "Blake2_128Concat" - ], - "key": 144, - "value": 532 - } - }, - "fallback": "0x000000000000000000", - "docs": [ - " DynamicBagCreationPolicy by bag type storage map." - ] - }, - { - "name": "DataObjectsById", - "modifier": "Default", - "type": { - "map": { - "hashers": [ - "Blake2_128Concat", - "Blake2_128Concat" - ], - "key": 533, - "value": 534 - } - }, - "fallback": "0x0000000000000000000000000000000000000000000000000000", - "docs": [ - " 'Data objects for bags' storage double map." - ] - }, - { - "name": "NextDistributionBucketFamilyId", - "modifier": "Default", - "type": { - "plain": 8 - }, - "fallback": "0x0000000000000000", - "docs": [ - " Distribution bucket family id counter. Starts at zero." - ] - }, - { - "name": "DistributionBucketFamilyById", - "modifier": "Default", - "type": { - "map": { - "hashers": [ - "Blake2_128Concat" - ], - "key": 8, - "value": 535 - } - }, - "fallback": "0x0000000000000000", - "docs": [ - " Distribution bucket families." - ] - }, - { - "name": "DistributionBucketByFamilyIdById", - "modifier": "Default", - "type": { - "map": { - "hashers": [ - "Blake2_128Concat", - "Blake2_128Concat" - ], - "key": 194, - "value": 536 - } - }, - "fallback": "0x000000000000000000000000", - "docs": [ - " 'Distribution bucket' storage double map." - ] - }, - { - "name": "DistributionBucketFamilyNumber", - "modifier": "Default", - "type": { - "plain": 8 - }, - "fallback": "0x0000000000000000", - "docs": [ - " Total number of distribution bucket families in the system." - ] - }, - { - "name": "DistributionBucketsPerBagLimit", - "modifier": "Default", - "type": { - "plain": 8 - }, - "fallback": "0x0000000000000000", - "docs": [ - " \"Distribution buckets per bag\" number limit." - ] - } - ] - }, - "calls": { - "type": 370 - }, - "events": { - "type": 137 - }, - "constants": [ - { - "name": "BlacklistSizeLimit", - "type": 8, - "value": "0x1027000000000000", - "docs": [ - " Exports const - maximum size of the \"hash blacklist\" collection." - ] - }, - { - "name": "StorageBucketsPerBagValueConstraint", - "type": 537, - "value": "0x05000000000000000f00000000000000", - "docs": [ - " Exports const - \"Storage buckets per bag\" value constraint." - ] - }, - { - "name": "DefaultMemberDynamicBagNumberOfStorageBuckets", - "type": 8, - "value": "0x0500000000000000", - "docs": [ - " Exports const - the default dynamic bag creation policy for members (storage bucket", - " number)." - ] - }, - { - "name": "DefaultChannelDynamicBagNumberOfStorageBuckets", - "type": 8, - "value": "0x0500000000000000", - "docs": [ - " Exports const - the default dynamic bag creation policy for channels (storage bucket", - " number)." - ] - }, - { - "name": "MaxDistributionBucketFamilyNumber", - "type": 8, - "value": "0xc800000000000000", - "docs": [ - " Exports const - max allowed distribution bucket family number." - ] - }, - { - "name": "DistributionBucketsPerBagValueConstraint", - "type": 537, - "value": "0x01000000000000006400000000000000", - "docs": [ - " Exports const - \"Distribution buckets per bag\" value constraint." - ] - }, - { - "name": "MaxNumberOfPendingInvitationsPerDistributionBucket", - "type": 8, - "value": "0x1400000000000000", - "docs": [ - " Exports const - max number of pending invitations per distribution bucket." - ] - }, - { - "name": "MaxDataObjectSize", - "type": 8, - "value": "0x0000008002000000", - "docs": [ - " Exports const - max data object size in bytes." - ] - } - ], - "errors": { - "type": 538 - }, - "index": 26 - }, - { - "name": "ProjectToken", - "storage": { - "prefix": "Token", - "items": [ - { - "name": "AccountInfoByTokenAndMember", - "modifier": "Default", - "type": { - "map": { - "hashers": [ - "Blake2_128Concat", - "Blake2_128Concat" - ], - "key": 194, - "value": 539 - } - }, - "fallback": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "docs": [ - " Double map TokenId x MemberId => AccountData for managing account data" - ] - }, - { - "name": "TokenInfoById", - "modifier": "Default", - "type": { - "map": { - "hashers": [ - "Blake2_128Concat" - ], - "key": 8, - "value": 548 - } - }, - "fallback": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "docs": [ - " map TokenId => TokenData to retrieve token information" - ] - }, - { - "name": "NextTokenId", - "modifier": "Default", - "type": { - "plain": 8 - }, - "fallback": "0x0000000000000000", - "docs": [ - " Token Id nonce" - ] - }, - { - "name": "SymbolsUsed", - "modifier": "Default", - "type": { - "map": { - "hashers": [ - "Blake2_128Concat" - ], - "key": 9, - "value": 29 - } - }, - "fallback": "0x", - "docs": [ - " Set for the tokens symbols" - ] - }, - { - "name": "BloatBond", - "modifier": "Default", - "type": { - "plain": 6 - }, - "fallback": "0x00000000000000000000000000000000", - "docs": [ - " Bloat Bond value used during account creation" - ] - }, - { - "name": "MinSaleDuration", - "modifier": "Default", - "type": { - "plain": 4 - }, - "fallback": "0x00000000", - "docs": [ - " Minimum duration of a token sale" - ] - }, - { - "name": "MinRevenueSplitDuration", - "modifier": "Default", - "type": { - "plain": 4 - }, - "fallback": "0x00000000", - "docs": [ - " Minimum revenue split duration constraint" - ] - }, - { - "name": "MinRevenueSplitTimeToStart", - "modifier": "Default", - "type": { - "plain": 4 - }, - "fallback": "0x00000000", - "docs": [ - " Minimum revenue split time to start constraint" - ] - }, - { - "name": "SalePlatformFee", - "modifier": "Default", - "type": { - "plain": 153 - }, - "fallback": "0x00000000", - "docs": [ - " Platform fee (percentage) charged on top of each sale purchase (in JOY) and burned" - ] - } - ] - }, - "calls": { - "type": 372 - }, - "events": { - "type": 148 - }, - "constants": [], - "errors": { - "type": 555 - }, - "index": 27 - }, - { - "name": "ProposalsEngine", - "storage": { - "prefix": "ProposalEngine", - "items": [ - { - "name": "Proposals", - "modifier": "Default", - "type": { - "map": { - "hashers": [ - "Blake2_128Concat" - ], - "key": 4, - "value": 556 - } - }, - "fallback": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "docs": [ - " Map proposal by its id." - ] - }, - { - "name": "ProposalCount", - "modifier": "Default", - "type": { - "plain": 4 - }, - "fallback": "0x00000000", - "docs": [ - " Count of all proposals that have been created." - ] - }, - { - "name": "DispatchableCallCode", - "modifier": "Default", - "type": { - "map": { - "hashers": [ - "Blake2_128Concat" - ], - "key": 4, - "value": 10 - } - }, - "fallback": "0x00", - "docs": [ - " Map proposal executable code by proposal id." - ] - }, - { - "name": "ActiveProposalCount", - "modifier": "Default", - "type": { - "plain": 4 - }, - "fallback": "0x00000000", - "docs": [ - " Count of active proposals." - ] - }, - { - "name": "VoteExistsByProposalByVoter", - "modifier": "Default", - "type": { - "map": { - "hashers": [ - "Blake2_128Concat", - "Blake2_128Concat" - ], - "key": 559, - "value": 179 - } - }, - "fallback": "0x01", - "docs": [ - " Double map for preventing duplicate votes. Should be cleaned after usage." - ] - } - ] - }, - "calls": { - "type": 382 - }, - "events": { - "type": 174 - }, - "constants": [ - { - "name": "CancellationFee", - "type": 6, - "value": "0x10270000000000000000000000000000", - "docs": [ - " Exports const - the fee is applied when cancel the proposal. A fee would be slashed (burned)." - ] - }, - { - "name": "RejectionFee", - "type": 6, - "value": "0x88130000000000000000000000000000", - "docs": [ - " Exports const - the fee is applied when the proposal gets rejected. A fee would", - " be slashed (burned)." - ] - }, - { - "name": "TitleMaxLength", - "type": 4, - "value": "0x28000000", - "docs": [ - " Exports const - max allowed proposal title length." - ] - }, - { - "name": "DescriptionMaxLength", - "type": 4, - "value": "0xb80b0000", - "docs": [ - " Exports const - max allowed proposal description length." - ] - }, - { - "name": "MaxActiveProposalLimit", - "type": 4, - "value": "0x14000000", - "docs": [ - " Exports const - max simultaneous active proposals number." - ] - }, - { - "name": "StakingHandlerLockId", - "type": 236, - "value": "0x70726f706f73616c", - "docs": [ - " Exports const - staking handler lock id." - ] - } - ], - "errors": { - "type": 560 - }, - "index": 28 - }, - { - "name": "ProposalsDiscussion", - "storage": { - "prefix": "ProposalDiscussion", - "items": [ - { - "name": "ThreadById", - "modifier": "Default", - "type": { - "map": { - "hashers": [ - "Blake2_128Concat" - ], - "key": 8, - "value": 561 - } - }, - "fallback": "0x00000000000000000000000000", - "docs": [ - " Map thread identifier to corresponding thread." - ] - }, - { - "name": "ThreadCount", - "modifier": "Default", - "type": { - "plain": 8 - }, - "fallback": "0x0000000000000000", - "docs": [ - " Count of all threads that have been created." - ] - }, - { - "name": "PostThreadIdByPostId", - "modifier": "Default", - "type": { - "map": { - "hashers": [ - "Blake2_128Concat", - "Blake2_128Concat" - ], - "key": 194, - "value": 562 - } - }, - "fallback": "0x00000000000000000000000000000000000000000000000000000000", - "docs": [ - " Map thread id and post id to corresponding post." - ] - }, - { - "name": "PostCount", - "modifier": "Default", - "type": { - "plain": 8 - }, - "fallback": "0x0000000000000000", - "docs": [ - " Count of all posts that have been created." - ] - } - ] - }, - "calls": { - "type": 383 - }, - "events": { - "type": 180 - }, - "constants": [ - { - "name": "MaxWhiteListSize", - "type": 4, - "value": "0x14000000", - "docs": [ - " Exports const - author list size limit for the Closed discussion." - ] - }, - { - "name": "PostDeposit", - "type": 6, - "value": "0xd0070000000000000000000000000000", - "docs": [ - " Exports const - fee for creating a post" - ] - }, - { - "name": "PostLifeTime", - "type": 4, - "value": "0x100e0000", - "docs": [ - " Exports const - maximum number of blocks before a post can be erased by anyone" - ] - } - ], - "errors": { - "type": 563 - }, - "index": 29 - }, - { - "name": "ProposalsCodex", - "storage": { - "prefix": "ProposalsCodex", - "items": [ - { - "name": "ThreadIdByProposalId", - "modifier": "Default", - "type": { - "map": { - "hashers": [ - "Blake2_128Concat" - ], - "key": 4, - "value": 8 - } - }, - "fallback": "0x0000000000000000", - "docs": [ - " Map proposal id to its discussion thread id" - ] - } - ] - }, - "calls": { - "type": 384 - }, - "events": { - "type": 182 - }, - "constants": [ - { - "name": "SetMaxValidatorCountProposalParameters", - "type": 557, - "value": "0xc0a800000000000042000000500000003c0000005000000001a086010000000000000000000000000001000000", - "docs": [ - " Exports 'Set Max Validator Count' proposal parameters." - ] - }, - { - "name": "RuntimeUpgradeProposalParameters", - "type": 557, - "value": "0x807000004038000050000000640000003c00000050000000018096980000000000000000000000000001000000", - "docs": [ - " Exports 'Runtime Upgrade' proposal parameters." - ] - }, - { - "name": "SignalProposalParameters", - "type": 557, - "value": "0x40190100000000003c000000500000003c0000005000000001a861000000000000000000000000000001000000", - "docs": [ - " Exports 'Signal' proposal parameters." - ] - }, - { - "name": "FundingRequestProposalParameters", - "type": 557, - "value": "0x40190100000000003c000000500000003c0000005000000001a861000000000000000000000000000001000000", - "docs": [ - " Exports 'Funding Request' proposal parameters." - ] - }, - { - "name": "CreateWorkingGroupLeadOpeningProposalParameters", - "type": 557, - "value": "0x40190100000000003c000000500000003c0000005000000001a086010000000000000000000000000001000000", - "docs": [ - " Exports 'Create Working Group Lead Opening' proposal parameters." - ] - }, - { - "name": "FillWorkingGroupOpeningProposalParameters", - "type": 557, - "value": "0xc0a80000000000003c0000004b0000003c000000500000000150c3000000000000000000000000000001000000", - "docs": [ - " Exports 'Fill Working Group Lead Opening' proposal parameters." - ] - }, - { - "name": "UpdateWorkingGroupBudgetProposalParameters", - "type": 557, - "value": "0xc0a80000000000003c0000004b0000003c000000500000000150c3000000000000000000000000000001000000", - "docs": [ - " Exports 'Update Working Group Budget' proposal parameters." - ] - }, - { - "name": "DecreaseWorkingGroupLeadStakeProposalParameters", - "type": 557, - "value": "0xc0a80000000000003c0000004b0000003c000000500000000150c3000000000000000000000000000001000000", - "docs": [ - " Exports 'Decrease Working Group Lead Stake' proposal parameters." - ] - }, - { - "name": "SlashWorkingGroupLeadProposalParameters", - "type": 557, - "value": "0xc0a80000000000003c0000004b0000003c000000500000000150c3000000000000000000000000000001000000", - "docs": [ - " Exports 'Slash Working Group Lead' proposal parameters." - ] - }, - { - "name": "SetWorkingGroupLeadRewardProposalParameters", - "type": 557, - "value": "0xc0a80000000000003c0000004b0000003c000000500000000150c3000000000000000000000000000001000000", - "docs": [ - " Exports 'Set Working Group Lead Reward' proposal parameters." - ] - }, - { - "name": "TerminateWorkingGroupLeadProposalParameters", - "type": 557, - "value": "0x081a01000000000042000000500000003c0000005000000001a086010000000000000000000000000001000000", - "docs": [ - " Exports 'Terminate Working Group Lead' proposal parameters." - ] - }, - { - "name": "AmendConstitutionProposalParameters", - "type": 557, - "value": "0x081a01004038000050000000640000003c000000500000000140420f0000000000000000000000000002000000", - "docs": [ - " Exports 'Amend Constitution' proposal parameters." - ] - }, - { - "name": "CancelWorkingGroupLeadOpeningProposalParameters", - "type": 557, - "value": "0xc0a80000000000003c0000004b0000003c000000500000000150c3000000000000000000000000000001000000", - "docs": [ - " Exports 'Cancel Working Group Lead Opening' proposal parameters." - ] - }, - { - "name": "SetMembershipPriceProposalParameters", - "type": 557, - "value": "0xc0a80000000000003c0000004b0000003c000000500000000150c3000000000000000000000000000001000000", - "docs": [ - " Exports 'Set Membership Price' proposal parameters." - ] - }, - { - "name": "SetCouncilBudgetIncrementProposalParameters", - "type": 557, - "value": "0x401901004038000042000000500000003c0000005000000001400d030000000000000000000000000001000000", - "docs": [ - " Exports `Set Council Budget Increment` proposal parameters." - ] - }, - { - "name": "SetCouncilorRewardProposalParameters", - "type": 557, - "value": "0x40190100c089010042000000500000003c0000005000000001400d030000000000000000000000000002000000", - "docs": [ - " Exports `Set Councilor Reward Proposal Parameters` proposal parameters." - ] - }, - { - "name": "SetInitialInvitationBalanceProposalParameters", - "type": 557, - "value": "0x40190100000000003c0000004b0000003c000000500000000150c3000000000000000000000000000001000000", - "docs": [ - " Exports `Set Initial Invitation Balance` proposal parameters." - ] - }, - { - "name": "SetInvitationCountProposalParameters", - "type": 557, - "value": "0x40190100000000003c0000004b0000003c000000500000000150c3000000000000000000000000000001000000", - "docs": [] - }, - { - "name": "SetMembershipLeadInvitationQuotaProposalParameters", - "type": 557, - "value": "0x40190100000000003c0000004b0000003c000000500000000150c3000000000000000000000000000001000000", - "docs": [] - }, - { - "name": "SetReferralCutProposalParameters", - "type": 557, - "value": "0xc0a80000000000003c0000004b0000003c000000500000000150c3000000000000000000000000000001000000", - "docs": [] - }, - { - "name": "VetoProposalProposalParameters", - "type": 557, - "value": "0xc0890100000000004b000000500000003c000000420000000140420f0000000000000000000000000001000000", - "docs": [] - }, - { - "name": "UpdateGlobalNftLimitProposalParameters", - "type": 557, - "value": "0x40190100000000003c000000500000003c0000005000000001a086010000000000000000000000000001000000", - "docs": [] - }, - { - "name": "UpdateChannelPayoutsProposalParameters", - "type": 557, - "value": "0x40190100000000003c000000500000003c0000005000000001a086010000000000000000000000000001000000", - "docs": [] - } - ], - "errors": { - "type": 564 - }, - "index": 30 - }, - { - "name": "ForumWorkingGroup", - "storage": { - "prefix": "Instance1WorkingGroup", - "items": [ - { - "name": "NextOpeningId", - "modifier": "Default", - "type": { - "plain": 8 - }, - "fallback": "0x0000000000000000", - "docs": [ - " Next identifier value for new job opening." - ] - }, - { - "name": "OpeningById", - "modifier": "Default", - "type": { - "map": { - "hashers": [ - "Blake2_128Concat" - ], - "key": 8, - "value": 565 - } - }, - "fallback": "0x01000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "docs": [ - " Maps identifier to job opening." - ] - }, - { - "name": "ActiveWorkerCount", - "modifier": "Default", - "type": { - "plain": 4 - }, - "fallback": "0x00000000", - "docs": [ - " Count of active workers." - ] - }, - { - "name": "ApplicationById", - "modifier": "Optional", - "type": { - "map": { - "hashers": [ - "Blake2_128Concat" - ], - "key": 8, - "value": 566 - } - }, - "fallback": "0x00", - "docs": [ - " Maps identifier to worker application on opening." - ] - }, - { - "name": "NextApplicationId", - "modifier": "Default", - "type": { - "plain": 8 - }, - "fallback": "0x0000000000000000", - "docs": [ - " Next identifier value for new worker application." - ] - }, - { - "name": "NextWorkerId", - "modifier": "Default", - "type": { - "plain": 8 - }, - "fallback": "0x0000000000000000", - "docs": [ - " Next identifier for a new worker." - ] - }, - { - "name": "WorkerById", - "modifier": "Optional", - "type": { - "map": { - "hashers": [ - "Blake2_128Concat" - ], - "key": 8, - "value": 567 - } - }, - "fallback": "0x00", - "docs": [ - " Maps identifier to corresponding worker." - ] - }, - { - "name": "CurrentLead", - "modifier": "Optional", - "type": { - "plain": 8 - }, - "fallback": "0x00", - "docs": [ - " Current group lead." - ] - }, - { - "name": "Budget", - "modifier": "Default", - "type": { - "plain": 6 - }, - "fallback": "0x00000000000000000000000000000000", - "docs": [ - " Budget for the working group." - ] - }, - { - "name": "StatusTextHash", - "modifier": "Default", - "type": { - "plain": 10 - }, - "fallback": "0x00", - "docs": [ - " Status text hash." - ] - }, - { - "name": "WorkerStorage", - "modifier": "Default", - "type": { - "map": { - "hashers": [ - "Blake2_128Concat" - ], - "key": 8, - "value": 10 - } - }, - "fallback": "0x00", - "docs": [ - " Maps identifier to corresponding worker storage." - ] - }, - { - "name": "WorkerStorageSize", - "modifier": "Default", - "type": { - "plain": 237 - }, - "fallback": "0x0008", - "docs": [ - " Worker storage size upper bound." - ] - } - ] - }, - "calls": { - "type": 385 - }, - "events": { - "type": 191 - }, - "constants": [ - { - "name": "MaxWorkerNumberLimit", - "type": 4, - "value": "0x64000000", - "docs": [ - " Exports const", - " Max simultaneous active worker number." - ] - }, - { - "name": "MinUnstakingPeriodLimit", - "type": 4, - "value": "0xc0a80000", - "docs": [ - " Defines min unstaking period in the group." - ] - }, - { - "name": "MinimumApplicationStake", - "type": 6, - "value": "0xd0070000000000000000000000000000", - "docs": [ - " Minimum stake required for applying into an opening." - ] - }, - { - "name": "LeaderOpeningStake", - "type": 6, - "value": "0xd0070000000000000000000000000000", - "docs": [ - " Stake needed to create an opening." - ] - }, - { - "name": "RewardPeriod", - "type": 4, - "value": "0x4a380000", - "docs": [ - " Defines the period every worker gets paid in blocks." - ] - }, - { - "name": "StakingHandlerLockId", - "type": 236, - "value": "0x77672d666f72756d", - "docs": [ - " Staking handler lock id." - ] - } - ], - "errors": { - "type": 568 - }, - "index": 31 - }, - { - "name": "StorageWorkingGroup", - "storage": { - "prefix": "Instance2WorkingGroup", - "items": [ - { - "name": "NextOpeningId", - "modifier": "Default", - "type": { - "plain": 8 - }, - "fallback": "0x0000000000000000", - "docs": [ - " Next identifier value for new job opening." - ] - }, - { - "name": "OpeningById", - "modifier": "Default", - "type": { - "map": { - "hashers": [ - "Blake2_128Concat" - ], - "key": 8, - "value": 565 - } - }, - "fallback": "0x01000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "docs": [ - " Maps identifier to job opening." - ] - }, - { - "name": "ActiveWorkerCount", - "modifier": "Default", - "type": { - "plain": 4 - }, - "fallback": "0x00000000", - "docs": [ - " Count of active workers." - ] - }, - { - "name": "ApplicationById", - "modifier": "Optional", - "type": { - "map": { - "hashers": [ - "Blake2_128Concat" - ], - "key": 8, - "value": 566 - } - }, - "fallback": "0x00", - "docs": [ - " Maps identifier to worker application on opening." - ] - }, - { - "name": "NextApplicationId", - "modifier": "Default", - "type": { - "plain": 8 - }, - "fallback": "0x0000000000000000", - "docs": [ - " Next identifier value for new worker application." - ] - }, - { - "name": "NextWorkerId", - "modifier": "Default", - "type": { - "plain": 8 - }, - "fallback": "0x0000000000000000", - "docs": [ - " Next identifier for a new worker." - ] - }, - { - "name": "WorkerById", - "modifier": "Optional", - "type": { - "map": { - "hashers": [ - "Blake2_128Concat" - ], - "key": 8, - "value": 567 - } - }, - "fallback": "0x00", - "docs": [ - " Maps identifier to corresponding worker." - ] - }, - { - "name": "CurrentLead", - "modifier": "Optional", - "type": { - "plain": 8 - }, - "fallback": "0x00", - "docs": [ - " Current group lead." - ] - }, - { - "name": "Budget", - "modifier": "Default", - "type": { - "plain": 6 - }, - "fallback": "0x00000000000000000000000000000000", - "docs": [ - " Budget for the working group." - ] - }, - { - "name": "StatusTextHash", - "modifier": "Default", - "type": { - "plain": 10 - }, - "fallback": "0x00", - "docs": [ - " Status text hash." - ] - }, - { - "name": "WorkerStorage", - "modifier": "Default", - "type": { - "map": { - "hashers": [ - "Blake2_128Concat" - ], - "key": 8, - "value": 10 - } - }, - "fallback": "0x00", - "docs": [ - " Maps identifier to corresponding worker storage." - ] - }, - { - "name": "WorkerStorageSize", - "modifier": "Default", - "type": { - "plain": 237 - }, - "fallback": "0x0008", - "docs": [ - " Worker storage size upper bound." - ] - } - ] - }, - "calls": { - "type": 386 - }, - "events": { - "type": 200 - }, - "constants": [ - { - "name": "MaxWorkerNumberLimit", - "type": 4, - "value": "0x64000000", - "docs": [ - " Exports const", - " Max simultaneous active worker number." - ] - }, - { - "name": "MinUnstakingPeriodLimit", - "type": 4, - "value": "0xc0a80000", - "docs": [ - " Defines min unstaking period in the group." - ] - }, - { - "name": "MinimumApplicationStake", - "type": 6, - "value": "0xd0070000000000000000000000000000", - "docs": [ - " Minimum stake required for applying into an opening." - ] - }, - { - "name": "LeaderOpeningStake", - "type": 6, - "value": "0xd0070000000000000000000000000000", - "docs": [ - " Stake needed to create an opening." - ] - }, - { - "name": "RewardPeriod", - "type": 4, - "value": "0x54380000", - "docs": [ - " Defines the period every worker gets paid in blocks." - ] - }, - { - "name": "StakingHandlerLockId", - "type": 236, - "value": "0x77672d73746f7267", - "docs": [ - " Staking handler lock id." - ] - } - ], - "errors": { - "type": 569 - }, - "index": 32 - }, - { - "name": "ContentWorkingGroup", - "storage": { - "prefix": "Instance3WorkingGroup", - "items": [ - { - "name": "NextOpeningId", - "modifier": "Default", - "type": { - "plain": 8 - }, - "fallback": "0x0000000000000000", - "docs": [ - " Next identifier value for new job opening." - ] - }, - { - "name": "OpeningById", - "modifier": "Default", - "type": { - "map": { - "hashers": [ - "Blake2_128Concat" - ], - "key": 8, - "value": 565 - } - }, - "fallback": "0x01000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "docs": [ - " Maps identifier to job opening." - ] - }, - { - "name": "ActiveWorkerCount", - "modifier": "Default", - "type": { - "plain": 4 - }, - "fallback": "0x00000000", - "docs": [ - " Count of active workers." - ] - }, - { - "name": "ApplicationById", - "modifier": "Optional", - "type": { - "map": { - "hashers": [ - "Blake2_128Concat" - ], - "key": 8, - "value": 566 - } - }, - "fallback": "0x00", - "docs": [ - " Maps identifier to worker application on opening." - ] - }, - { - "name": "NextApplicationId", - "modifier": "Default", - "type": { - "plain": 8 - }, - "fallback": "0x0000000000000000", - "docs": [ - " Next identifier value for new worker application." - ] - }, - { - "name": "NextWorkerId", - "modifier": "Default", - "type": { - "plain": 8 - }, - "fallback": "0x0000000000000000", - "docs": [ - " Next identifier for a new worker." - ] - }, - { - "name": "WorkerById", - "modifier": "Optional", - "type": { - "map": { - "hashers": [ - "Blake2_128Concat" - ], - "key": 8, - "value": 567 - } - }, - "fallback": "0x00", - "docs": [ - " Maps identifier to corresponding worker." - ] - }, - { - "name": "CurrentLead", - "modifier": "Optional", - "type": { - "plain": 8 - }, - "fallback": "0x00", - "docs": [ - " Current group lead." - ] - }, - { - "name": "Budget", - "modifier": "Default", - "type": { - "plain": 6 - }, - "fallback": "0x00000000000000000000000000000000", - "docs": [ - " Budget for the working group." - ] - }, - { - "name": "StatusTextHash", - "modifier": "Default", - "type": { - "plain": 10 - }, - "fallback": "0x00", - "docs": [ - " Status text hash." - ] - }, - { - "name": "WorkerStorage", - "modifier": "Default", - "type": { - "map": { - "hashers": [ - "Blake2_128Concat" - ], - "key": 8, - "value": 10 - } - }, - "fallback": "0x00", - "docs": [ - " Maps identifier to corresponding worker storage." - ] - }, - { - "name": "WorkerStorageSize", - "modifier": "Default", - "type": { - "plain": 237 - }, - "fallback": "0x0008", - "docs": [ - " Worker storage size upper bound." - ] - } - ] - }, - "calls": { - "type": 387 - }, - "events": { - "type": 202 - }, - "constants": [ - { - "name": "MaxWorkerNumberLimit", - "type": 4, - "value": "0x64000000", - "docs": [ - " Exports const", - " Max simultaneous active worker number." - ] - }, - { - "name": "MinUnstakingPeriodLimit", - "type": 4, - "value": "0xc0a80000", - "docs": [ - " Defines min unstaking period in the group." - ] - }, - { - "name": "MinimumApplicationStake", - "type": 6, - "value": "0xd0070000000000000000000000000000", - "docs": [ - " Minimum stake required for applying into an opening." - ] - }, - { - "name": "LeaderOpeningStake", - "type": 6, - "value": "0xd0070000000000000000000000000000", - "docs": [ - " Stake needed to create an opening." - ] - }, - { - "name": "RewardPeriod", - "type": 4, - "value": "0x5e380000", - "docs": [ - " Defines the period every worker gets paid in blocks." - ] - }, - { - "name": "StakingHandlerLockId", - "type": 236, - "value": "0x77672d636f6e7474", - "docs": [ - " Staking handler lock id." - ] - } - ], - "errors": { - "type": 570 - }, - "index": 33 - }, - { - "name": "OperationsWorkingGroupAlpha", - "storage": { - "prefix": "Instance4WorkingGroup", - "items": [ - { - "name": "NextOpeningId", - "modifier": "Default", - "type": { - "plain": 8 - }, - "fallback": "0x0000000000000000", - "docs": [ - " Next identifier value for new job opening." - ] - }, - { - "name": "OpeningById", - "modifier": "Default", - "type": { - "map": { - "hashers": [ - "Blake2_128Concat" - ], - "key": 8, - "value": 565 - } - }, - "fallback": "0x01000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "docs": [ - " Maps identifier to job opening." - ] - }, - { - "name": "ActiveWorkerCount", - "modifier": "Default", - "type": { - "plain": 4 - }, - "fallback": "0x00000000", - "docs": [ - " Count of active workers." - ] - }, - { - "name": "ApplicationById", - "modifier": "Optional", - "type": { - "map": { - "hashers": [ - "Blake2_128Concat" - ], - "key": 8, - "value": 566 - } - }, - "fallback": "0x00", - "docs": [ - " Maps identifier to worker application on opening." - ] - }, - { - "name": "NextApplicationId", - "modifier": "Default", - "type": { - "plain": 8 - }, - "fallback": "0x0000000000000000", - "docs": [ - " Next identifier value for new worker application." - ] - }, - { - "name": "NextWorkerId", - "modifier": "Default", - "type": { - "plain": 8 - }, - "fallback": "0x0000000000000000", - "docs": [ - " Next identifier for a new worker." - ] - }, - { - "name": "WorkerById", - "modifier": "Optional", - "type": { - "map": { - "hashers": [ - "Blake2_128Concat" - ], - "key": 8, - "value": 567 - } - }, - "fallback": "0x00", - "docs": [ - " Maps identifier to corresponding worker." - ] - }, - { - "name": "CurrentLead", - "modifier": "Optional", - "type": { - "plain": 8 - }, - "fallback": "0x00", - "docs": [ - " Current group lead." - ] - }, - { - "name": "Budget", - "modifier": "Default", - "type": { - "plain": 6 - }, - "fallback": "0x00000000000000000000000000000000", - "docs": [ - " Budget for the working group." - ] - }, - { - "name": "StatusTextHash", - "modifier": "Default", - "type": { - "plain": 10 - }, - "fallback": "0x00", - "docs": [ - " Status text hash." - ] - }, - { - "name": "WorkerStorage", - "modifier": "Default", - "type": { - "map": { - "hashers": [ - "Blake2_128Concat" - ], - "key": 8, - "value": 10 - } - }, - "fallback": "0x00", - "docs": [ - " Maps identifier to corresponding worker storage." - ] - }, - { - "name": "WorkerStorageSize", - "modifier": "Default", - "type": { - "plain": 237 - }, - "fallback": "0x0008", - "docs": [ - " Worker storage size upper bound." - ] - } - ] - }, - "calls": { - "type": 388 - }, - "events": { - "type": 204 - }, - "constants": [ - { - "name": "MaxWorkerNumberLimit", - "type": 4, - "value": "0x64000000", - "docs": [ - " Exports const", - " Max simultaneous active worker number." - ] - }, - { - "name": "MinUnstakingPeriodLimit", - "type": 4, - "value": "0xc0a80000", - "docs": [ - " Defines min unstaking period in the group." - ] - }, - { - "name": "MinimumApplicationStake", - "type": 6, - "value": "0xd0070000000000000000000000000000", - "docs": [ - " Minimum stake required for applying into an opening." - ] - }, - { - "name": "LeaderOpeningStake", - "type": 6, - "value": "0xd0070000000000000000000000000000", - "docs": [ - " Stake needed to create an opening." - ] - }, - { - "name": "RewardPeriod", - "type": 4, - "value": "0x7c380000", - "docs": [ - " Defines the period every worker gets paid in blocks." - ] - }, - { - "name": "StakingHandlerLockId", - "type": 236, - "value": "0x77672d6f70657261", - "docs": [ - " Staking handler lock id." - ] - } - ], - "errors": { - "type": 571 - }, - "index": 34 - }, - { - "name": "AppWorkingGroup", - "storage": { - "prefix": "Instance5WorkingGroup", - "items": [ - { - "name": "NextOpeningId", - "modifier": "Default", - "type": { - "plain": 8 - }, - "fallback": "0x0000000000000000", - "docs": [ - " Next identifier value for new job opening." - ] - }, - { - "name": "OpeningById", - "modifier": "Default", - "type": { - "map": { - "hashers": [ - "Blake2_128Concat" - ], - "key": 8, - "value": 565 - } - }, - "fallback": "0x01000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "docs": [ - " Maps identifier to job opening." - ] - }, - { - "name": "ActiveWorkerCount", - "modifier": "Default", - "type": { - "plain": 4 - }, - "fallback": "0x00000000", - "docs": [ - " Count of active workers." - ] - }, - { - "name": "ApplicationById", - "modifier": "Optional", - "type": { - "map": { - "hashers": [ - "Blake2_128Concat" - ], - "key": 8, - "value": 566 - } - }, - "fallback": "0x00", - "docs": [ - " Maps identifier to worker application on opening." - ] - }, - { - "name": "NextApplicationId", - "modifier": "Default", - "type": { - "plain": 8 - }, - "fallback": "0x0000000000000000", - "docs": [ - " Next identifier value for new worker application." - ] - }, - { - "name": "NextWorkerId", - "modifier": "Default", - "type": { - "plain": 8 - }, - "fallback": "0x0000000000000000", - "docs": [ - " Next identifier for a new worker." - ] - }, - { - "name": "WorkerById", - "modifier": "Optional", - "type": { - "map": { - "hashers": [ - "Blake2_128Concat" - ], - "key": 8, - "value": 567 - } - }, - "fallback": "0x00", - "docs": [ - " Maps identifier to corresponding worker." - ] - }, - { - "name": "CurrentLead", - "modifier": "Optional", - "type": { - "plain": 8 - }, - "fallback": "0x00", - "docs": [ - " Current group lead." - ] - }, - { - "name": "Budget", - "modifier": "Default", - "type": { - "plain": 6 - }, - "fallback": "0x00000000000000000000000000000000", - "docs": [ - " Budget for the working group." - ] - }, - { - "name": "StatusTextHash", - "modifier": "Default", - "type": { - "plain": 10 - }, - "fallback": "0x00", - "docs": [ - " Status text hash." - ] - }, - { - "name": "WorkerStorage", - "modifier": "Default", - "type": { - "map": { - "hashers": [ - "Blake2_128Concat" - ], - "key": 8, - "value": 10 - } - }, - "fallback": "0x00", - "docs": [ - " Maps identifier to corresponding worker storage." - ] - }, - { - "name": "WorkerStorageSize", - "modifier": "Default", - "type": { - "plain": 237 - }, - "fallback": "0x0008", - "docs": [ - " Worker storage size upper bound." - ] - } - ] - }, - "calls": { - "type": 389 - }, - "events": { - "type": 206 - }, - "constants": [ - { - "name": "MaxWorkerNumberLimit", - "type": 4, - "value": "0x64000000", - "docs": [ - " Exports const", - " Max simultaneous active worker number." - ] - }, - { - "name": "MinUnstakingPeriodLimit", - "type": 4, - "value": "0xc0a80000", - "docs": [ - " Defines min unstaking period in the group." - ] - }, - { - "name": "MinimumApplicationStake", - "type": 6, - "value": "0xd0070000000000000000000000000000", - "docs": [ - " Minimum stake required for applying into an opening." - ] - }, - { - "name": "LeaderOpeningStake", - "type": 6, - "value": "0xd0070000000000000000000000000000", - "docs": [ - " Stake needed to create an opening." - ] - }, - { - "name": "RewardPeriod", - "type": 4, - "value": "0x72380000", - "docs": [ - " Defines the period every worker gets paid in blocks." - ] - }, - { - "name": "StakingHandlerLockId", - "type": 236, - "value": "0x77672d6761746577", - "docs": [ - " Staking handler lock id." - ] - } - ], - "errors": { - "type": 572 - }, - "index": 35 - }, - { - "name": "MembershipWorkingGroup", - "storage": { - "prefix": "Instance6WorkingGroup", - "items": [ - { - "name": "NextOpeningId", - "modifier": "Default", - "type": { - "plain": 8 - }, - "fallback": "0x0000000000000000", - "docs": [ - " Next identifier value for new job opening." - ] - }, - { - "name": "OpeningById", - "modifier": "Default", - "type": { - "map": { - "hashers": [ - "Blake2_128Concat" - ], - "key": 8, - "value": 565 - } - }, - "fallback": "0x01000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "docs": [ - " Maps identifier to job opening." - ] - }, - { - "name": "ActiveWorkerCount", - "modifier": "Default", - "type": { - "plain": 4 - }, - "fallback": "0x00000000", - "docs": [ - " Count of active workers." - ] - }, - { - "name": "ApplicationById", - "modifier": "Optional", - "type": { - "map": { - "hashers": [ - "Blake2_128Concat" - ], - "key": 8, - "value": 566 - } - }, - "fallback": "0x00", - "docs": [ - " Maps identifier to worker application on opening." - ] - }, - { - "name": "NextApplicationId", - "modifier": "Default", - "type": { - "plain": 8 - }, - "fallback": "0x0000000000000000", - "docs": [ - " Next identifier value for new worker application." - ] - }, - { - "name": "NextWorkerId", - "modifier": "Default", - "type": { - "plain": 8 - }, - "fallback": "0x0000000000000000", - "docs": [ - " Next identifier for a new worker." - ] - }, - { - "name": "WorkerById", - "modifier": "Optional", - "type": { - "map": { - "hashers": [ - "Blake2_128Concat" - ], - "key": 8, - "value": 567 - } - }, - "fallback": "0x00", - "docs": [ - " Maps identifier to corresponding worker." - ] - }, - { - "name": "CurrentLead", - "modifier": "Optional", - "type": { - "plain": 8 - }, - "fallback": "0x00", - "docs": [ - " Current group lead." - ] - }, - { - "name": "Budget", - "modifier": "Default", - "type": { - "plain": 6 - }, - "fallback": "0x00000000000000000000000000000000", - "docs": [ - " Budget for the working group." - ] - }, - { - "name": "StatusTextHash", - "modifier": "Default", - "type": { - "plain": 10 - }, - "fallback": "0x00", - "docs": [ - " Status text hash." - ] - }, - { - "name": "WorkerStorage", - "modifier": "Default", - "type": { - "map": { - "hashers": [ - "Blake2_128Concat" - ], - "key": 8, - "value": 10 - } - }, - "fallback": "0x00", - "docs": [ - " Maps identifier to corresponding worker storage." - ] - }, - { - "name": "WorkerStorageSize", - "modifier": "Default", - "type": { - "plain": 237 - }, - "fallback": "0x0008", - "docs": [ - " Worker storage size upper bound." - ] - } - ] - }, - "calls": { - "type": 390 - }, - "events": { - "type": 208 - }, - "constants": [ - { - "name": "MaxWorkerNumberLimit", - "type": 4, - "value": "0x64000000", - "docs": [ - " Exports const", - " Max simultaneous active worker number." - ] - }, - { - "name": "MinUnstakingPeriodLimit", - "type": 4, - "value": "0xc0a80000", - "docs": [ - " Defines min unstaking period in the group." - ] - }, - { - "name": "MinimumApplicationStake", - "type": 6, - "value": "0xd0070000000000000000000000000000", - "docs": [ - " Minimum stake required for applying into an opening." - ] - }, - { - "name": "LeaderOpeningStake", - "type": 6, - "value": "0xd0070000000000000000000000000000", - "docs": [ - " Stake needed to create an opening." - ] - }, - { - "name": "RewardPeriod", - "type": 4, - "value": "0x68380000", - "docs": [ - " Defines the period every worker gets paid in blocks." - ] - }, - { - "name": "StakingHandlerLockId", - "type": 236, - "value": "0x77672d6d656d6272", - "docs": [ - " Staking handler lock id." - ] - } - ], - "errors": { - "type": 573 - }, - "index": 36 - }, - { - "name": "OperationsWorkingGroupBeta", - "storage": { - "prefix": "Instance7WorkingGroup", - "items": [ - { - "name": "NextOpeningId", - "modifier": "Default", - "type": { - "plain": 8 - }, - "fallback": "0x0000000000000000", - "docs": [ - " Next identifier value for new job opening." - ] - }, - { - "name": "OpeningById", - "modifier": "Default", - "type": { - "map": { - "hashers": [ - "Blake2_128Concat" - ], - "key": 8, - "value": 565 - } - }, - "fallback": "0x01000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "docs": [ - " Maps identifier to job opening." - ] - }, - { - "name": "ActiveWorkerCount", - "modifier": "Default", - "type": { - "plain": 4 - }, - "fallback": "0x00000000", - "docs": [ - " Count of active workers." - ] - }, - { - "name": "ApplicationById", - "modifier": "Optional", - "type": { - "map": { - "hashers": [ - "Blake2_128Concat" - ], - "key": 8, - "value": 566 - } - }, - "fallback": "0x00", - "docs": [ - " Maps identifier to worker application on opening." - ] - }, - { - "name": "NextApplicationId", - "modifier": "Default", - "type": { - "plain": 8 - }, - "fallback": "0x0000000000000000", - "docs": [ - " Next identifier value for new worker application." - ] - }, - { - "name": "NextWorkerId", - "modifier": "Default", - "type": { - "plain": 8 - }, - "fallback": "0x0000000000000000", - "docs": [ - " Next identifier for a new worker." - ] - }, - { - "name": "WorkerById", - "modifier": "Optional", - "type": { - "map": { - "hashers": [ - "Blake2_128Concat" - ], - "key": 8, - "value": 567 - } - }, - "fallback": "0x00", - "docs": [ - " Maps identifier to corresponding worker." - ] - }, - { - "name": "CurrentLead", - "modifier": "Optional", - "type": { - "plain": 8 - }, - "fallback": "0x00", - "docs": [ - " Current group lead." - ] - }, - { - "name": "Budget", - "modifier": "Default", - "type": { - "plain": 6 - }, - "fallback": "0x00000000000000000000000000000000", - "docs": [ - " Budget for the working group." - ] - }, - { - "name": "StatusTextHash", - "modifier": "Default", - "type": { - "plain": 10 - }, - "fallback": "0x00", - "docs": [ - " Status text hash." - ] - }, - { - "name": "WorkerStorage", - "modifier": "Default", - "type": { - "map": { - "hashers": [ - "Blake2_128Concat" - ], - "key": 8, - "value": 10 - } - }, - "fallback": "0x00", - "docs": [ - " Maps identifier to corresponding worker storage." - ] - }, - { - "name": "WorkerStorageSize", - "modifier": "Default", - "type": { - "plain": 237 - }, - "fallback": "0x0008", - "docs": [ - " Worker storage size upper bound." - ] - } - ] - }, - "calls": { - "type": 391 - }, - "events": { - "type": 210 - }, - "constants": [ - { - "name": "MaxWorkerNumberLimit", - "type": 4, - "value": "0x64000000", - "docs": [ - " Exports const", - " Max simultaneous active worker number." - ] - }, - { - "name": "MinUnstakingPeriodLimit", - "type": 4, - "value": "0xc0a80000", - "docs": [ - " Defines min unstaking period in the group." - ] - }, - { - "name": "MinimumApplicationStake", - "type": 6, - "value": "0xd0070000000000000000000000000000", - "docs": [ - " Minimum stake required for applying into an opening." - ] - }, - { - "name": "LeaderOpeningStake", - "type": 6, - "value": "0xd0070000000000000000000000000000", - "docs": [ - " Stake needed to create an opening." - ] - }, - { - "name": "RewardPeriod", - "type": 4, - "value": "0x86380000", - "docs": [ - " Defines the period every worker gets paid in blocks." - ] - }, - { - "name": "StakingHandlerLockId", - "type": 236, - "value": "0x77672d6f70657262", - "docs": [ - " Staking handler lock id." - ] - } - ], - "errors": { - "type": 574 - }, - "index": 37 - }, - { - "name": "OperationsWorkingGroupGamma", - "storage": { - "prefix": "Instance8WorkingGroup", - "items": [ - { - "name": "NextOpeningId", - "modifier": "Default", - "type": { - "plain": 8 - }, - "fallback": "0x0000000000000000", - "docs": [ - " Next identifier value for new job opening." - ] - }, - { - "name": "OpeningById", - "modifier": "Default", - "type": { - "map": { - "hashers": [ - "Blake2_128Concat" - ], - "key": 8, - "value": 565 - } - }, - "fallback": "0x01000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "docs": [ - " Maps identifier to job opening." - ] - }, - { - "name": "ActiveWorkerCount", - "modifier": "Default", - "type": { - "plain": 4 - }, - "fallback": "0x00000000", - "docs": [ - " Count of active workers." - ] - }, - { - "name": "ApplicationById", - "modifier": "Optional", - "type": { - "map": { - "hashers": [ - "Blake2_128Concat" - ], - "key": 8, - "value": 566 - } - }, - "fallback": "0x00", - "docs": [ - " Maps identifier to worker application on opening." - ] - }, - { - "name": "NextApplicationId", - "modifier": "Default", - "type": { - "plain": 8 - }, - "fallback": "0x0000000000000000", - "docs": [ - " Next identifier value for new worker application." - ] - }, - { - "name": "NextWorkerId", - "modifier": "Default", - "type": { - "plain": 8 - }, - "fallback": "0x0000000000000000", - "docs": [ - " Next identifier for a new worker." - ] - }, - { - "name": "WorkerById", - "modifier": "Optional", - "type": { - "map": { - "hashers": [ - "Blake2_128Concat" - ], - "key": 8, - "value": 567 - } - }, - "fallback": "0x00", - "docs": [ - " Maps identifier to corresponding worker." - ] - }, - { - "name": "CurrentLead", - "modifier": "Optional", - "type": { - "plain": 8 - }, - "fallback": "0x00", - "docs": [ - " Current group lead." - ] - }, - { - "name": "Budget", - "modifier": "Default", - "type": { - "plain": 6 - }, - "fallback": "0x00000000000000000000000000000000", - "docs": [ - " Budget for the working group." - ] - }, - { - "name": "StatusTextHash", - "modifier": "Default", - "type": { - "plain": 10 - }, - "fallback": "0x00", - "docs": [ - " Status text hash." - ] - }, - { - "name": "WorkerStorage", - "modifier": "Default", - "type": { - "map": { - "hashers": [ - "Blake2_128Concat" - ], - "key": 8, - "value": 10 - } - }, - "fallback": "0x00", - "docs": [ - " Maps identifier to corresponding worker storage." - ] - }, - { - "name": "WorkerStorageSize", - "modifier": "Default", - "type": { - "plain": 237 - }, - "fallback": "0x0008", - "docs": [ - " Worker storage size upper bound." - ] - } - ] - }, - "calls": { - "type": 392 - }, - "events": { - "type": 212 - }, - "constants": [ - { - "name": "MaxWorkerNumberLimit", - "type": 4, - "value": "0x64000000", - "docs": [ - " Exports const", - " Max simultaneous active worker number." - ] - }, - { - "name": "MinUnstakingPeriodLimit", - "type": 4, - "value": "0xc0a80000", - "docs": [ - " Defines min unstaking period in the group." - ] - }, - { - "name": "MinimumApplicationStake", - "type": 6, - "value": "0xd0070000000000000000000000000000", - "docs": [ - " Minimum stake required for applying into an opening." - ] - }, - { - "name": "LeaderOpeningStake", - "type": 6, - "value": "0xd0070000000000000000000000000000", - "docs": [ - " Stake needed to create an opening." - ] - }, - { - "name": "RewardPeriod", - "type": 4, - "value": "0x90380000", - "docs": [ - " Defines the period every worker gets paid in blocks." - ] - }, - { - "name": "StakingHandlerLockId", - "type": 236, - "value": "0x77672d6f70657267", - "docs": [ - " Staking handler lock id." - ] - } - ], - "errors": { - "type": 575 - }, - "index": 38 - }, - { - "name": "DistributionWorkingGroup", - "storage": { - "prefix": "Instance9WorkingGroup", - "items": [ - { - "name": "NextOpeningId", - "modifier": "Default", - "type": { - "plain": 8 - }, - "fallback": "0x0000000000000000", - "docs": [ - " Next identifier value for new job opening." - ] - }, - { - "name": "OpeningById", - "modifier": "Default", - "type": { - "map": { - "hashers": [ - "Blake2_128Concat" - ], - "key": 8, - "value": 565 - } - }, - "fallback": "0x01000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "docs": [ - " Maps identifier to job opening." - ] - }, - { - "name": "ActiveWorkerCount", - "modifier": "Default", - "type": { - "plain": 4 - }, - "fallback": "0x00000000", - "docs": [ - " Count of active workers." - ] - }, - { - "name": "ApplicationById", - "modifier": "Optional", - "type": { - "map": { - "hashers": [ - "Blake2_128Concat" - ], - "key": 8, - "value": 566 - } - }, - "fallback": "0x00", - "docs": [ - " Maps identifier to worker application on opening." - ] - }, - { - "name": "NextApplicationId", - "modifier": "Default", - "type": { - "plain": 8 - }, - "fallback": "0x0000000000000000", - "docs": [ - " Next identifier value for new worker application." - ] - }, - { - "name": "NextWorkerId", - "modifier": "Default", - "type": { - "plain": 8 - }, - "fallback": "0x0000000000000000", - "docs": [ - " Next identifier for a new worker." - ] - }, - { - "name": "WorkerById", - "modifier": "Optional", - "type": { - "map": { - "hashers": [ - "Blake2_128Concat" - ], - "key": 8, - "value": 567 - } - }, - "fallback": "0x00", - "docs": [ - " Maps identifier to corresponding worker." - ] - }, - { - "name": "CurrentLead", - "modifier": "Optional", - "type": { - "plain": 8 - }, - "fallback": "0x00", - "docs": [ - " Current group lead." - ] - }, - { - "name": "Budget", - "modifier": "Default", - "type": { - "plain": 6 - }, - "fallback": "0x00000000000000000000000000000000", - "docs": [ - " Budget for the working group." - ] - }, - { - "name": "StatusTextHash", - "modifier": "Default", - "type": { - "plain": 10 - }, - "fallback": "0x00", - "docs": [ - " Status text hash." - ] - }, - { - "name": "WorkerStorage", - "modifier": "Default", - "type": { - "map": { - "hashers": [ - "Blake2_128Concat" - ], - "key": 8, - "value": 10 - } - }, - "fallback": "0x00", - "docs": [ - " Maps identifier to corresponding worker storage." - ] - }, - { - "name": "WorkerStorageSize", - "modifier": "Default", - "type": { - "plain": 237 - }, - "fallback": "0x0008", - "docs": [ - " Worker storage size upper bound." - ] - } - ] - }, - "calls": { - "type": 393 - }, - "events": { - "type": 214 - }, - "constants": [ - { - "name": "MaxWorkerNumberLimit", - "type": 4, - "value": "0x64000000", - "docs": [ - " Exports const", - " Max simultaneous active worker number." - ] - }, - { - "name": "MinUnstakingPeriodLimit", - "type": 4, - "value": "0xc0a80000", - "docs": [ - " Defines min unstaking period in the group." - ] - }, - { - "name": "MinimumApplicationStake", - "type": 6, - "value": "0xd0070000000000000000000000000000", - "docs": [ - " Minimum stake required for applying into an opening." - ] - }, - { - "name": "LeaderOpeningStake", - "type": 6, - "value": "0xd0070000000000000000000000000000", - "docs": [ - " Stake needed to create an opening." - ] - }, - { - "name": "RewardPeriod", - "type": 4, - "value": "0x9a380000", - "docs": [ - " Defines the period every worker gets paid in blocks." - ] - }, - { - "name": "StakingHandlerLockId", - "type": 236, - "value": "0x77672d6469737472", - "docs": [ - " Staking handler lock id." - ] - } - ], - "errors": { - "type": 576 - }, - "index": 39 - } - ], - "extrinsic": { - "type": 577, - "version": 4, - "signedExtensions": [ - { - "identifier": "CheckNonZeroSender", - "type": 582, - "additionalSigned": 29 - }, - { - "identifier": "CheckSpecVersion", - "type": 583, - "additionalSigned": 4 - }, - { - "identifier": "CheckTxVersion", - "type": 584, - "additionalSigned": 4 - }, - { - "identifier": "CheckGenesis", - "type": 585, - "additionalSigned": 9 - }, - { - "identifier": "CheckMortality", - "type": 586, - "additionalSigned": 9 - }, - { - "identifier": "CheckNonce", - "type": 588, - "additionalSigned": 29 - }, - { - "identifier": "CheckWeight", - "type": 589, - "additionalSigned": 29 - }, - { - "identifier": "ChargeTransactionPayment", - "type": 590, - "additionalSigned": 29 - } - ] - }, - "type": 591 - } - } -} -Done in 3.12s. diff --git a/utils/api-scripts/package.json b/utils/api-scripts/package.json index 3ec0477e9b..032223a57b 100644 --- a/utils/api-scripts/package.json +++ b/utils/api-scripts/package.json @@ -8,26 +8,25 @@ "status": "ts-node src/status", "script": "ts-node src/script", "tsnode-strict": "node -r ts-node/register --unhandled-rejections=strict", - "initialize-lead": "ts-node src/initialize-lead", "initialize-worker": "ts-node src/initialize-worker", "buy-membership": "ts-node src/buy-membership", - "sudo-set-multisig": "ts-node src/sudo-set-multisig", "storage-dev-init": "./dev-init-storage.sh" }, "dependencies": { - "@joystream/types": "^2.0.0", + "@joystream/types": "^4.0.0", "@mongodb-js/zstd": "^1.1.0", - "@polkadot/api": "8.9.1", - "@polkadot/keyring": "9.5.1", - "@polkadot/types": "8.9.1", - "@polkadot/util": "9.5.1", - "@polkadot/util-crypto": "9.5.1", + "@polkadot/api": "10.1.4", + "@polkadot/keyring": "11.1.1", + "@polkadot/types": "10.1.4", + "@polkadot/util": "11.1.1", + "@polkadot/util-crypto": "11.1.1", "@types/bn.js": "^5.1.0", + "bfj": "^8.0.0", "bn.js": "^5.2.1" }, "devDependencies": { "ts-node": "^10.2.1", - "typescript": "^4.4.3" + "typescript": "^5.0.2" }, "volta": { "extends": "../../package.json" diff --git a/utils/api-scripts/scripts/test-transfer.js b/utils/api-scripts/scripts/test-transfer.js index c5c58bae35..a109391474 100644 --- a/utils/api-scripts/scripts/test-transfer.js +++ b/utils/api-scripts/scripts/test-transfer.js @@ -8,8 +8,8 @@ // const script = async ({ api, keyring, userAddress }) => { - const sudoAddress = (await api.query.sudo.key()).toString() - const destination = userAddress || sudoAddress + const alice = '5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY' + const destination = userAddress || alice let sender if (typeof window === 'undefined') { // In node, get the keyPair if the keyring was provided diff --git a/utils/api-scripts/src/dev-set-runtime-code.ts b/utils/api-scripts/src/dev-set-runtime-code.ts deleted file mode 100644 index f4fccbfa8e..0000000000 --- a/utils/api-scripts/src/dev-set-runtime-code.ts +++ /dev/null @@ -1,108 +0,0 @@ -import { ApiPromise, WsProvider } from '@polkadot/api' -import { Keyring } from '@polkadot/keyring' -import { ISubmittableResult } from '@polkadot/types/types/' -import { DispatchError, DispatchResult } from '@polkadot/types/interfaces/system' -import { TypeRegistry } from '@polkadot/types' -import fs from 'fs' -import { compactAddLength } from '@polkadot/util' - -function onApiDisconnected() { - process.exit(2) -} - -function onApiError() { - process.exit(3) -} - -async function main() { - const file = process.argv[2] - - if (!file) { - console.log('No wasm file argument provided.') - process.exit(1) - } - - const wasm = Uint8Array.from(fs.readFileSync(file)) - console.log('WASM bytes:', wasm.byteLength) - - const provider = new WsProvider('ws://127.0.0.1:9944') - - let api: ApiPromise - let retry = 6 - while (true) { - try { - api = new ApiPromise({ provider }) - await api.isReadyOrError - break - } catch (err) { - // failed to connect to node - // Exceptions are not being caught!? - } - - if (retry-- === 0) { - process.exit(-1) - } - - await new Promise((resolve) => { - setTimeout(resolve, 5000) - }) - } - - const keyring = new Keyring() - const sudo = keyring.addFromUri('//Alice', undefined, 'sr25519') - - // DO NOT SET UNCHECKED! - // const tx = api.tx.system.setCodeWithoutChecks(wasm) - - const setCodeTx = api.tx.system.setCode(compactAddLength(wasm)) - const sudoTx = api.tx.sudo.sudoUncheckedWeight(setCodeTx, 1) - const nonce = (await api.query.system.account(sudo.address)).nonce - const signedTx = sudoTx.sign(sudo, { nonce }) - - // console.log('Tx size:', signedTx.length) - // const wasmCodeInTxArg = (signedTx.method.args[0] as Call).args[0] - // console.log('WASM code arg byte length:', (wasmCodeInTxArg as Bytes).byteLength) - - await signedTx.send((result: ISubmittableResult) => { - if (result.status.isInBlock && result.events !== undefined) { - result.events.forEach((event) => { - if (event.event.method === 'ExtrinsicFailed') { - console.log('ExtrinsicFailed', (event.event.data[0] as DispatchError).toHuman()) - process.exit(4) - } - - if (event.event.method === 'Sudid') { - const result = event.event.data[0] as DispatchResult - if (result.isOk) { - process.exit(0) - } else if (result.isError) { - const err = result.asError - console.log('Error:', err.toHuman()) - if (err.isModule) { - const { name } = (api.registry as TypeRegistry).findMetaError(err.asModule) - console.log(`${name}\n`) - } - process.exit(5) - } else { - console.log('Sudid result:', result.toHuman()) - process.exit(-1) - } - } - }) - - // Wait a few seconds to display new runtime changes - setTimeout(() => { - process.exit(0) - }, 12000) - } - }) - - api.on('disconnected', onApiDisconnected) - api.on('error', onApiError) - - await new Promise(() => { - // wait until transaction finalizes - }) -} - -main().catch(console.error) diff --git a/utils/api-scripts/src/fork-off.ts b/utils/api-scripts/src/fork-off.ts index fdf6f5569c..4135a4d1df 100644 --- a/utils/api-scripts/src/fork-off.ts +++ b/utils/api-scripts/src/fork-off.ts @@ -1,8 +1,9 @@ import { ApiPromise, WsProvider } from '@polkadot/api' import { xxhashAsHex } from '@polkadot/util-crypto' -import fs from 'fs' import path from 'path' +const bfj = require('bfj') + /** * All module prefixes except those mentioned in the skippedModulesPrefix will be added to this by the script. * If you want to add any past module or part of a skipped module, add the prefix here manually. @@ -26,6 +27,8 @@ const skippedModulesPrefix = [ 'FinalityTracker', 'Authorship', 'Sudo', + 'Staking', + 'BagsList', // Joystream specific 'Council', // empty council 'Referendum', @@ -33,6 +36,12 @@ const skippedModulesPrefix = [ 'Instance3WorkingGroup', // empty content working group 'Instance9WorkingGroup', // empty distribution working group ] +const skippedKeys = [ + // encoded storage key for `minAuctionDuration` key + '0xb5a494c92fa4747cc071573e93b32b87f9ad4eaa35a4c52d9289acbc42eba9d9', + // encoded storage key for `nftLimitsEnabled` key + '0xb5a494c92fa4747cc071573e93b32b87d2c14024f1b303fdc87019c4c1facfde' +] async function main() { // paths & env variables @@ -60,22 +69,20 @@ async function main() { }) // blank starting chainspec guaranteed to exist - const storage: Storage = JSON.parse(fs.readFileSync(storagePath, 'utf8')) - const chainSpec = JSON.parse(fs.readFileSync(specPath, 'utf8')) + console.error('Loading state storage') + const storage: Storage = await bfj.read(storagePath, { bufferLength: 4096 }) + console.error('Loading raw chain spec') + const chainSpec = await bfj.read(specPath) // Grab the items to be moved, then iterate through and insert into storage - storage.result - .filter((i) => prefixes.some((prefix) => i[0].startsWith(prefix))) - .forEach(([key, value]) => { - if ( - // encoded storage key for `minAuctionDuration` key - key !== '0xb5a494c92fa4747cc071573e93b32b87f9ad4eaa35a4c52d9289acbc42eba9d9' && - // encoded storage key for `nftLimitsEnabled` key - key !== '0xb5a494c92fa4747cc071573e93b32b87d2c14024f1b303fdc87019c4c1facfde' - ) { - chainSpec.genesis.raw.top[key] = value - } - }) + // We are not using a storage.result.forEach to preserve memory + console.error('constructing final genesis chainspec') + for (let pair; pair = storage.result.pop();) { + const [key, value] = pair + if (skippedKeys.includes(key)) continue + if (!prefixes.some((prefix) => key.startsWith(prefix))) continue + chainSpec.genesis.raw.top[key] = value + } // Delete System.LastRuntimeUpgrade to ensure that the on_runtime_upgrade event is triggered delete chainSpec.genesis.raw.top['0x26aa394eea5630e07c48ae0c9558cef7f9cce9c888469bb1a0dceaa129672ef8'] @@ -83,12 +90,11 @@ async function main() { // To prevent the validator set from changing mid-test, set Staking.ForceEra to ForceNone ('0x02') chainSpec.genesis.raw.top['0x5f3e4907f716ac89b6347d15ececedcaf7dad0317324aecae8744b87fc95f2f3'] = '0x02' - fs.writeFileSync(forkedSpecPath, JSON.stringify(chainSpec, null, 4)) - - process.exit() + console.error('Writing chainspec to', forkedSpecPath) + await bfj.write(forkedSpecPath, chainSpec, { space: 4, bufferLength: 4096 }) } -main().catch(console.error) +main().catch(console.error).finally(() => process.exit()) interface Storage { 'jsonrpc': string diff --git a/utils/api-scripts/src/helpers/extrinsics.ts b/utils/api-scripts/src/helpers/extrinsics.ts index c568adc2db..c2fe557c63 100644 --- a/utils/api-scripts/src/helpers/extrinsics.ts +++ b/utils/api-scripts/src/helpers/extrinsics.ts @@ -41,33 +41,6 @@ export class ExtrinsicsHelper { return nonce } - async sendAndCheckSudo( - tx: SubmittableExtrinsic<'promise'>, - errorMsg?: string, - wrap = true - ): Promise { - const sudoUri = process.env.SUDO_URI || '//Alice' - const sudoMultiKeys = (process.env.SUDO_MULTISIG_KEYS || '').split(',').filter((v) => v) - const sudoMultiUris = (process.env.SUDO_MULTISIG_URIS || '').split(',').filter((v) => v) - tx = wrap ? this.api.tx.sudo.sudo(tx) : tx - - if (sudoMultiKeys.length && sudoMultiUris.length) { - const sudoSigners = sudoMultiUris.map((u) => getKeyFromSuri(u)) - console.log(`Using multisig sudo`) - console.log('Multisig keys:', sudoMultiKeys) - console.log('Multisig threshold', sudoSigners.length) - console.log( - 'Signers:', - sudoSigners.map((s) => s.address) - ) - return this.sendAndCheckMulisig(sudoSigners, sudoMultiKeys, tx, errorMsg) - } else { - const sudoKey = getKeyFromSuri(sudoUri) - console.log(`Using sudo key: ${sudoKey.address}`) - return (await this.sendAndCheck(sudoKey, [tx], errorMsg))[0] - } - } - async sendAndCheckMulisig( signers: KeyringPair[], keys: string[], diff --git a/utils/api-scripts/src/sudo-set-multisig.ts b/utils/api-scripts/src/sudo-set-multisig.ts deleted file mode 100644 index fb0ba01b4a..0000000000 --- a/utils/api-scripts/src/sudo-set-multisig.ts +++ /dev/null @@ -1,44 +0,0 @@ -import { JOYSTREAM_ADDRESS_PREFIX } from '@joystream/types' -import { ApiPromise, WsProvider } from '@polkadot/api' -import { encodeMultiAddress } from '@polkadot/util-crypto' -import { ExtrinsicsHelper } from './helpers/extrinsics' - -async function main() { - const sudoMultiKeys = (process.env.NEW_SUDO_MULTISIG_KEYS || '').split(',').filter((v) => v) - const sudoMultisigThreshold = parseInt(process.env.SUDO_MULTISIG_THRESHOLD || '') - const wsUri = process.env.WS_URI || 'ws://127.0.0.1:9944' - - console.log('Multisig keys:', sudoMultiKeys) - console.log('Multisig threshold:', sudoMultisigThreshold) - - if (sudoMultiKeys.length < 2) { - throw new Error('Provide SUDO_MULTISIG_KEYS env with at least 2 keys in order to generate multisig address') - } - - if (sudoMultisigThreshold < 1) { - throw new Error('The SUDO_MULTISIG_THRESHOLD should be at least 1') - } - - const provider = new WsProvider(wsUri) - const api = await ApiPromise.create({ provider }) - - let multisigAddr: string - try { - multisigAddr = encodeMultiAddress(sudoMultiKeys, sudoMultisigThreshold, JOYSTREAM_ADDRESS_PREFIX) - } catch (e) { - throw new Error(`Failed to generate multisig address: ${(e as Error).message}`) - } - - console.log('Multisig address:', multisigAddr) - - const txHelper = new ExtrinsicsHelper(api) - - console.log('Updating the sudo key...') - await txHelper.sendAndCheckSudo(api.tx.sudo.setKey(multisigAddr), 'sudo.setKey failed', false) - - console.log(`Sudo key changed to: ${multisigAddr}`) -} - -main() - .then(() => process.exit(0)) - .catch(console.error) diff --git a/utils/api-scripts/test-sudo-multisig.sh b/utils/api-scripts/test-sudo-multisig.sh deleted file mode 100755 index 8999a37c73..0000000000 --- a/utils/api-scripts/test-sudo-multisig.sh +++ /dev/null @@ -1,31 +0,0 @@ -#!/usr/bin/env bash -set -e - -SCRIPT_PATH="$(dirname "${BASH_SOURCE[0]}")" -cd $SCRIPT_PATH - -# Setup 3-of-4 multisig sudo with //Alice, //Bob, //Charlie and //Dave -export NEW_SUDO_MULTISIG_KEYS=j4W7rVcUCxi2crhhjRq46fNDRbVHTjJrz6bKxZwehEMQxZeSf,j4UYhDYJ4pz2ihhDDzu69v2JTVeGaGmTebmBdWaX2ANVinXyE,j4UbMHiS79yvMLJctXggUugkkKmwxG5LW2YSy3ap8SmgF5qW9,j4SR5Mty5Mzy2dPTunA6TD4gBTwbSb8wRTabvu2gsLqC271d4 -export SUDO_MULTISIG_THRESHOLD=3 -yarn workspace api-scripts sudo-set-multisig - -# Use //Alice, //Bob and //Charlie as sudo multisig signers and execute initialize-lead script -export SUDO_MULTISIG_KEYS=$NEW_SUDO_MULTISIG_KEYS -export SUDO_MULTISIG_URIS=//Alice,//Bob,//Charlie -GROUP=operationsWorkingGroupAlpha yarn workspace api-scripts initialize-lead - -# Change multisig threshold to 2 -export SUDO_MULTISIG_THRESHOLD=2 -yarn workspace api-scripts sudo-set-multisig - -# Use //Charlie and //Dave as sudo multisig signers and execute initialize-lead script -export SUDO_MULTISIG_URIS=//Charlie,//Dave -GROUP=operationsWorkingGroupBeta yarn workspace api-scripts initialize-lead - -# Change multisig threshold to 1 -export SUDO_MULTISIG_THRESHOLD=1 -yarn workspace api-scripts sudo-set-multisig - -# Use //Bob as sudo multisig signer and execute initialize-lead script -export SUDO_MULTISIG_URIS=//Bob -GROUP=operationsWorkingGroupGamma yarn workspace api-scripts initialize-lead \ No newline at end of file diff --git a/utils/migration-scripts/.eslintignore b/utils/migration-scripts/.eslintignore deleted file mode 100644 index a29b344a11..0000000000 --- a/utils/migration-scripts/.eslintignore +++ /dev/null @@ -1 +0,0 @@ -src/olympia-carthage/olympia-query-node/generated diff --git a/utils/migration-scripts/.gitignore b/utils/migration-scripts/.gitignore deleted file mode 100644 index 6773f1365b..0000000000 --- a/utils/migration-scripts/.gitignore +++ /dev/null @@ -1,9 +0,0 @@ -*-debug.log -*-error.log -/.nyc_output -/dist -/lib -/package-lock.json -/tmp -node_modules -results diff --git a/utils/migration-scripts/.prettierignore b/utils/migration-scripts/.prettierignore deleted file mode 100644 index 6ae4dfa780..0000000000 --- a/utils/migration-scripts/.prettierignore +++ /dev/null @@ -1,3 +0,0 @@ -lib -results -src/sumer-giza/sumer-query-node/generated diff --git a/utils/migration-scripts/README.md b/utils/migration-scripts/README.md deleted file mode 100644 index 87c8f225ff..0000000000 --- a/utils/migration-scripts/README.md +++ /dev/null @@ -1,237 +0,0 @@ -migrations -========== - -Joystream migrations scripts - -[![oclif](https://img.shields.io/badge/cli-oclif-brightgreen.svg)](https://oclif.io) -[![Version](https://img.shields.io/npm/v/migrations.svg)](https://npmjs.org/package/migrations) -[![Downloads/week](https://img.shields.io/npm/dw/migrations.svg)](https://npmjs.org/package/migrations) -[![License](https://img.shields.io/npm/l/migrations.svg)](https://github.com/Joystream/joystream/blob/master/package.json) - - -* [Usage](#usage) -* [Commands](#commands) - -# Usage - -```sh-session -$ npm install -g migration-scripts -$ migration-scripts COMMAND -running command... -$ migration-scripts (-v|--version|version) -migration-scripts/0.1.0 linux-x64 node-v14.18.0 -$ migration-scripts --help [COMMAND] -USAGE - $ migration-scripts COMMAND -... -``` - -# Commands - -* [`migration-scripts giza-olympia:createContentDirectorySnapshot`](#migration-scripts-giza-olympiacreatecontentdirectorysnapshot) -* [`migration-scripts giza-olympia:createMembershipsSnapshot`](#migration-scripts-giza-olympiacreatemembershipssnapshot) -* [`migration-scripts giza-olympia:fetchAllObjects`](#migration-scripts-giza-olympiafetchallobjects) -* [`migration-scripts giza-olympia:migrateContent`](#migration-scripts-giza-olympiamigratecontent) -* [`migration-scripts giza-olympia:migrateMembers`](#migration-scripts-giza-olympiamigratemembers) -* [`migration-scripts help [COMMAND]`](#migration-scripts-help-command) -* [`migration-scripts sumer-giza:migrateContent`](#migration-scripts-sumer-gizamigratecontent) -* [`migration-scripts sumer-giza:retryFailedUploads`](#migration-scripts-sumer-gizaretryfaileduploads) - -## `migration-scripts giza-olympia:createContentDirectorySnapshot` - -``` -USAGE - $ migration-scripts giza-olympia:createContentDirectorySnapshot - -OPTIONS - -o, --output=output Output file path - --queryNodeUri=queryNodeUri [default: https://hydra.joystream.org/graphql] Giza query node uri -``` - -_See code: [src/commands/giza-olympia/createContentDirectorySnapshot.ts](https://github.com/Joystream/joystream/blob/v0.1.0/src/commands/giza-olympia/createContentDirectorySnapshot.ts)_ - -## `migration-scripts giza-olympia:createMembershipsSnapshot` - -``` -USAGE - $ migration-scripts giza-olympia:createMembershipsSnapshot - -OPTIONS - -o, --output=output Output file path - --queryNodeUri=queryNodeUri [default: https://hydra.joystream.org/graphql] Giza query node uri -``` - -_See code: [src/commands/giza-olympia/createMembershipsSnapshot.ts](https://github.com/Joystream/joystream/blob/v0.1.0/src/commands/giza-olympia/createMembershipsSnapshot.ts)_ - -## `migration-scripts giza-olympia:fetchAllObjects` - -``` -USAGE - $ migration-scripts giza-olympia:fetchAllObjects - -OPTIONS - --continously Whether the script should run continously - --dataDir=dataDir [default: /tmp/joystream/giza-olympia-migration] Directory for storing data objects - - --idleTime=idleTime [default: 300] Time (in seconds) to remain idle in case no new data objects were - found - - --objectsPerBatch=objectsPerBatch [default: 20] Max. number of storage objects to fetch simultaneously - - --queryNodeUri=queryNodeUri [default: https://hydra.joystream.org/graphql] Giza query node uri -``` - -_See code: [src/commands/giza-olympia/fetchAllObjects.ts](https://github.com/Joystream/joystream/blob/v0.1.0/src/commands/giza-olympia/fetchAllObjects.ts)_ - -## `migration-scripts giza-olympia:migrateContent` - -``` -USAGE - $ migration-scripts giza-olympia:migrateContent - -OPTIONS - -c, --channelIds=channelIds (required) Channel ids to migrate - --channelBatchSize=channelBatchSize [default: 20] Channel batch size - - --dataDir=dataDir (required) Directory where data objects to upload are - stored - - --excludeVideoIds=excludeVideoIds [default: ] Video ids to exclude from migration - - --forceChannelOwnerMemberId=forceChannelOwnerMemberId Can be used to force a specific channel owner for all - channels, allowing to easily test the script in dev - environment - - --membershipsMigrationResultPath=membershipsMigrationResultPath (required) JSON artifact produced by membership - migration - - --migrationStatePath=migrationStatePath [default: - /home/leszek/projects/joystream/joystream-ws-2/utils/ - migration-scripts/results/giza-olympia] Path to - migration results directory - - --snapshotFilePath=snapshotFilePath (required) Path to giza content directory snapshot - (json) - - --sudoUri=sudoUri [default: //Alice] Sudo key Substrate uri - - --uploadSpBucketId=uploadSpBucketId [default: 0] Olympia storage bucket id - - --uploadSpEndpoint=uploadSpEndpoint [default: http://localhost:3333] Olympia storage node - endpoint to use for uploading - - --videoBatchSize=videoBatchSize [default: 20] Video batch size - - --wsProviderEndpointUri=wsProviderEndpointUri [default: ws://localhost:9944] WS provider endpoint - uri (Olympia) -``` - -_See code: [src/commands/giza-olympia/migrateContent.ts](https://github.com/Joystream/joystream/blob/v0.1.0/src/commands/giza-olympia/migrateContent.ts)_ - -## `migration-scripts giza-olympia:migrateMembers` - -``` -USAGE - $ migration-scripts giza-olympia:migrateMembers - -OPTIONS - --batchSize=batchSize [default: 100] Members batch size - - --migrationStatePath=migrationStatePath [default: - /home/leszek/projects/joystream/joystream-ws-2/utils/migration-scripts/ - results/giza-olympia] Path to migration results directory - - --snapshotFilePath=snapshotFilePath (required) Path to giza memberships snapshot (json) - - --sudoUri=sudoUri [default: //Alice] Sudo key Substrate uri - - --wsProviderEndpointUri=wsProviderEndpointUri [default: ws://localhost:9944] WS provider endpoint uri (Olympia) -``` - -_See code: [src/commands/giza-olympia/migrateMembers.ts](https://github.com/Joystream/joystream/blob/v0.1.0/src/commands/giza-olympia/migrateMembers.ts)_ - -## `migration-scripts help [COMMAND]` - -display help for migration-scripts - -``` -USAGE - $ migration-scripts help [COMMAND] - -ARGUMENTS - COMMAND command to show help for - -OPTIONS - --all see all commands in CLI -``` - -_See code: [@oclif/plugin-help](https://github.com/oclif/plugin-help/blob/v3.2.3/src/commands/help.ts)_ - -## `migration-scripts sumer-giza:migrateContent` - -``` -USAGE - $ migration-scripts sumer-giza:migrateContent - -OPTIONS - -c, --channelIds=channelIds (required) Channel ids to migrate - --channelBatchSize=channelBatchSize [default: 20] Channel batch size - - --dataDir=dataDir [default: /tmp/joystream/sumer-giza-migration] Directory - for storing data objects to upload - - --excludeVideoIds=excludeVideoIds [default: ] Video ids to exclude from migration - - --forceChannelOwnerMemberId=forceChannelOwnerMemberId Can be used to force a specific channel owner for all - channels, allowing to easily test the script in dev - environment - - --migrationStatePath=migrationStatePath [default: - /home/leszek/projects/joystream/joystream-ws-2/utils/migr - ation-scripts/results/sumer-giza] Path to migration - results directory - - --preferredDownloadSpEndpoints=preferredDownloadSpEndpoints [default: https://storage-1.joystream.org/storage] - Preferred storage node endpoints when downloading data - objects - - --queryNodeUri=queryNodeUri [default: https://hydra.joystream.org/graphql] Query node - uri - - --sudoUri=sudoUri [default: //Alice] Sudo key Substrate uri - - --uploadSpBucketId=uploadSpBucketId [default: 0] Giza storage bucket id - - --uploadSpEndpoint=uploadSpEndpoint [default: http://localhost:3333] Giza storage node - endpoint to use for uploading - - --videoBatchSize=videoBatchSize [default: 20] Video batch size - - --wsProviderEndpointUri=wsProviderEndpointUri [default: ws://localhost:9944] WS provider endpoint uri - (Giza) -``` - -_See code: [src/commands/sumer-giza/migrateContent.ts](https://github.com/Joystream/joystream/blob/v0.1.0/src/commands/sumer-giza/migrateContent.ts)_ - -## `migration-scripts sumer-giza:retryFailedUploads` - -``` -USAGE - $ migration-scripts sumer-giza:retryFailedUploads - -OPTIONS - -f, --failedUploadsPath=failedUploadsPath (required) Path to failed uploads file - - --dataDir=dataDir [default: /tmp/joystream/sumer-giza-migration] Directory where data - objects to upload are stored - - --uploadSpBucketId=uploadSpBucketId [default: 0] Giza storage bucket id - - --uploadSpEndpoint=uploadSpEndpoint [default: http://localhost:3333] Giza storage node endpoint to use for - uploading - - --wsProviderEndpointUri=wsProviderEndpointUri [default: ws://localhost:9944] WS provider endpoint uri (Giza) -``` - -_See code: [src/commands/sumer-giza/retryFailedUploads.ts](https://github.com/Joystream/joystream/blob/v0.1.0/src/commands/sumer-giza/retryFailedUploads.ts)_ - diff --git a/utils/migration-scripts/bin/run b/utils/migration-scripts/bin/run deleted file mode 100755 index e332faed17..0000000000 --- a/utils/migration-scripts/bin/run +++ /dev/null @@ -1,3 +0,0 @@ -#!/usr/bin/env node - -require('@oclif/command').run().then(require('@oclif/command/flush')).catch(require('@oclif/errors/handle')) diff --git a/utils/migration-scripts/bin/run.cmd b/utils/migration-scripts/bin/run.cmd deleted file mode 100644 index 968fc30758..0000000000 --- a/utils/migration-scripts/bin/run.cmd +++ /dev/null @@ -1,3 +0,0 @@ -@echo off - -node "%~dp0\run" %* diff --git a/utils/migration-scripts/disabled-commands/giza-olympia/createContentDirectorySnapshot.ts b/utils/migration-scripts/disabled-commands/giza-olympia/createContentDirectorySnapshot.ts deleted file mode 100644 index e7105ffb16..0000000000 --- a/utils/migration-scripts/disabled-commands/giza-olympia/createContentDirectorySnapshot.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { Command, flags } from '@oclif/command' -import { writeFileSync } from 'fs' -import { QueryNodeApi } from '../../giza-olympia/giza-query-node/api' -import { SnapshotManager } from '../../giza-olympia/SnapshotManager' - -export class CreateContentDirectorySnapshotCommand extends Command { - static flags = { - queryNodeUri: flags.string({ - description: 'Giza query node uri', - default: 'https://hydra.joystream.org/graphql', - }), - output: flags.string({ - char: 'o', - required: false, - description: 'Output file path', - }), - } - - async run(): Promise { - const { queryNodeUri, output } = this.parse(CreateContentDirectorySnapshotCommand).flags - const queryNodeApi = new QueryNodeApi(queryNodeUri) - - const snapshotManager = new SnapshotManager({ queryNodeApi }) - const snapshot = await snapshotManager.createContentDirectorySnapshot() - if (output) { - writeFileSync(output, JSON.stringify(snapshot, null, 2)) - } else { - this.log(JSON.stringify(snapshot, null, 2)) - } - this.exit(0) - } -} diff --git a/utils/migration-scripts/disabled-commands/giza-olympia/createMembershipsSnapshot.ts b/utils/migration-scripts/disabled-commands/giza-olympia/createMembershipsSnapshot.ts deleted file mode 100644 index 57f6fa342f..0000000000 --- a/utils/migration-scripts/disabled-commands/giza-olympia/createMembershipsSnapshot.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { Command, flags } from '@oclif/command' -import { writeFileSync } from 'fs' -import { QueryNodeApi } from '../../giza-olympia/giza-query-node/api' -import { SnapshotManager } from '../../giza-olympia/SnapshotManager' - -export class CreateMembershipsSnapshotCommand extends Command { - static flags = { - queryNodeUri: flags.string({ - description: 'Giza query node uri', - default: 'https://hydra.joystream.org/graphql', - }), - output: flags.string({ - char: 'o', - required: false, - description: 'Output file path', - }), - } - - async run(): Promise { - const { queryNodeUri, output } = this.parse(CreateMembershipsSnapshotCommand).flags - const queryNodeApi = new QueryNodeApi(queryNodeUri) - - const snapshotManager = new SnapshotManager({ queryNodeApi }) - const snapshot = await snapshotManager.createMembershipsSnapshot() - if (output) { - writeFileSync(output, JSON.stringify(snapshot, null, 2)) - } else { - this.log(JSON.stringify(snapshot, null, 2)) - } - this.exit(0) - } -} diff --git a/utils/migration-scripts/disabled-commands/giza-olympia/fetchAllObjects.ts b/utils/migration-scripts/disabled-commands/giza-olympia/fetchAllObjects.ts deleted file mode 100644 index 475894f5cd..0000000000 --- a/utils/migration-scripts/disabled-commands/giza-olympia/fetchAllObjects.ts +++ /dev/null @@ -1,42 +0,0 @@ -import { Command, flags } from '@oclif/command' -import path from 'path' -import os from 'os' -import { QueryNodeApi } from '../../giza-olympia/giza-query-node/api' -import { DownloadManager } from '../../giza-olympia/DownloadManager' - -export class FetchAllObjectsCommand extends Command { - static flags = { - queryNodeUri: flags.string({ - description: 'Giza query node uri', - default: 'https://hydra.joystream.org/graphql', - }), - dataDir: flags.string({ - description: 'Directory for storing data objects', - default: path.join(os.tmpdir(), 'joystream/giza-olympia-migration'), - }), - continously: flags.boolean({ - description: 'Whether the script should run continously', - default: true, - }), - objectsPerBatch: flags.integer({ - required: false, - description: 'Max. number of storage objects to fetch simultaneously', - default: 20, - }), - idleTime: flags.integer({ - required: false, - description: 'Time (in seconds) to remain idle in case no new data objects were found', - default: 300, - dependsOn: ['continously'], - }), - } - - async run(): Promise { - const opts = this.parse(FetchAllObjectsCommand).flags - const queryNodeApi = new QueryNodeApi(opts.queryNodeUri) - - const downloadManager = new DownloadManager({ queryNodeApi, config: opts }) - await downloadManager.fetchAllDataObjects(undefined, opts.continously, opts.idleTime) - this.exit(0) - } -} diff --git a/utils/migration-scripts/disabled-commands/giza-olympia/migrateContent.ts b/utils/migration-scripts/disabled-commands/giza-olympia/migrateContent.ts deleted file mode 100644 index 994fac747f..0000000000 --- a/utils/migration-scripts/disabled-commands/giza-olympia/migrateContent.ts +++ /dev/null @@ -1,77 +0,0 @@ -import { Command, flags } from '@oclif/command' -import path from 'path' -import { ContentMigration } from '../../giza-olympia/ContentMigration' - -export class MigrateContentCommand extends Command { - static flags = { - snapshotFilePath: flags.string({ - required: true, - description: 'Path to giza content directory snapshot (json)', - }), - membershipsMigrationResultPath: flags.string({ - required: true, - description: 'JSON artifact produced by membership migration', - }), - wsProviderEndpointUri: flags.string({ - description: 'WS provider endpoint uri (Olympia)', - default: 'ws://localhost:9944', - }), - sudoUri: flags.string({ - description: 'Sudo key Substrate uri', - default: '//Alice', - }), - channelIds: flags.integer({ - char: 'c', - multiple: true, - description: 'Channel ids to migrate', - required: true, - }), - dataDir: flags.string({ - required: true, - description: 'Directory where data objects to upload are stored', - }), - channelBatchSize: flags.integer({ - description: 'Channel batch size', - default: 20, - }), - videoBatchSize: flags.integer({ - description: 'Video batch size', - default: 20, - }), - forceChannelOwnerMemberId: flags.integer({ - description: - 'Can be used to force a specific channel owner for all channels, allowing to easily test the script in dev environment', - required: false, - }), - uploadSpEndpoint: flags.string({ - description: 'Olympia storage node endpoint to use for uploading', - default: 'http://localhost:3333', - }), - uploadSpBucketId: flags.integer({ - description: 'Olympia storage bucket id', - default: 0, - }), - migrationStatePath: flags.string({ - description: 'Path to migration results directory', - default: path.join(__dirname, '../../../results/giza-olympia'), - }), - excludeVideoIds: flags.integer({ - multiple: true, - description: 'Video ids to exclude from migration', - required: false, - default: [], - }), - } - - async run(): Promise { - const opts = this.parse(MigrateContentCommand).flags - try { - const migration = new ContentMigration(opts) - await migration.run() - } catch (e) { - console.error(e) - this.exit(-1) - } - this.exit(0) - } -} diff --git a/utils/migration-scripts/disabled-commands/giza-olympia/migrateMembers.ts b/utils/migration-scripts/disabled-commands/giza-olympia/migrateMembers.ts deleted file mode 100644 index ca62419cef..0000000000 --- a/utils/migration-scripts/disabled-commands/giza-olympia/migrateMembers.ts +++ /dev/null @@ -1,51 +0,0 @@ -import { Command, flags } from '@oclif/command' -import { WsProvider } from '@polkadot/api' -import { readFileSync } from 'fs' -import path from 'path' -import { MembershipMigration } from '../../giza-olympia/MembershipMigration' -import { MembershipsSnapshot } from '../../giza-olympia/SnapshotManager' -import { RuntimeApi } from '../../RuntimeApi' - -export class MigrateMembersCommand extends Command { - static flags = { - snapshotFilePath: flags.string({ - required: true, - description: 'Path to giza memberships snapshot (json)', - }), - wsProviderEndpointUri: flags.string({ - description: 'WS provider endpoint uri (Olympia)', - default: 'ws://localhost:9944', - }), - sudoUri: flags.string({ - description: 'Sudo key Substrate uri', - default: '//Alice', - }), - batchSize: flags.integer({ - description: 'Members batch size', - default: 100, - }), - migrationStatePath: flags.string({ - description: 'Path to migration results directory', - default: path.join(__dirname, '../../../results/giza-olympia'), - }), - } - - async run(): Promise { - const opts = this.parse(MigrateMembersCommand).flags - try { - const api = new RuntimeApi({ provider: new WsProvider(opts.wsProviderEndpointUri) }) - await api.isReadyOrError - const snapshot = JSON.parse(readFileSync(opts.snapshotFilePath).toString()) as MembershipsSnapshot - const migration = new MembershipMigration({ - api, - snapshot, - config: opts, - }) - await migration.run() - } catch (e) { - console.error(e) - this.exit(-1) - } - this.exit(0) - } -} diff --git a/utils/migration-scripts/disabled-commands/sumer-giza/migrateContent.ts b/utils/migration-scripts/disabled-commands/sumer-giza/migrateContent.ts deleted file mode 100644 index 5376c6bbed..0000000000 --- a/utils/migration-scripts/disabled-commands/sumer-giza/migrateContent.ts +++ /dev/null @@ -1,79 +0,0 @@ -import { Command, flags } from '@oclif/command' -import path from 'path' -import os from 'os' -import { ContentMigration } from '../../sumer-giza/ContentMigration' - -export class MigrateContentCommand extends Command { - static flags = { - queryNodeUri: flags.string({ - description: 'Query node uri', - default: 'https://hydra.joystream.org/graphql', - }), - wsProviderEndpointUri: flags.string({ - description: 'WS provider endpoint uri (Giza)', - default: 'ws://localhost:9944', - }), - sudoUri: flags.string({ - description: 'Sudo key Substrate uri', - default: '//Alice', - }), - channelIds: flags.integer({ - char: 'c', - multiple: true, - description: 'Channel ids to migrate', - required: true, - }), - dataDir: flags.string({ - description: 'Directory for storing data objects to upload', - default: path.join(os.tmpdir(), 'joystream/sumer-giza-migration'), - }), - channelBatchSize: flags.integer({ - description: 'Channel batch size', - default: 20, - }), - videoBatchSize: flags.integer({ - description: 'Video batch size', - default: 20, - }), - forceChannelOwnerMemberId: flags.integer({ - description: - 'Can be used to force a specific channel owner for all channels, allowing to easily test the script in dev environment', - required: false, - }), - preferredDownloadSpEndpoints: flags.string({ - multiple: true, - description: 'Preferred storage node endpoints when downloading data objects', - default: ['https://storage-1.joystream.org/storage'], - }), - uploadSpEndpoint: flags.string({ - description: 'Giza storage node endpoint to use for uploading', - default: 'http://localhost:3333', - }), - uploadSpBucketId: flags.integer({ - description: 'Giza storage bucket id', - default: 0, - }), - migrationStatePath: flags.string({ - description: 'Path to migration results directory', - default: path.join(__dirname, '../../../results/sumer-giza'), - }), - excludeVideoIds: flags.integer({ - multiple: true, - description: 'Video ids to exclude from migration', - required: false, - default: [], - }), - } - - async run(): Promise { - const opts = this.parse(MigrateContentCommand).flags - try { - const migration = new ContentMigration(opts) - await migration.run() - } catch (e) { - console.error(e) - this.exit(-1) - } - this.exit(0) - } -} diff --git a/utils/migration-scripts/disabled-commands/sumer-giza/retryFailedUploads.ts b/utils/migration-scripts/disabled-commands/sumer-giza/retryFailedUploads.ts deleted file mode 100644 index 1825c95a44..0000000000 --- a/utils/migration-scripts/disabled-commands/sumer-giza/retryFailedUploads.ts +++ /dev/null @@ -1,54 +0,0 @@ -import { Command, flags } from '@oclif/command' -import path from 'path' -import os from 'os' -import { WsProvider } from '@polkadot/rpc-provider' -import { RuntimeApi } from '../../RuntimeApi' -import { AssetsManager } from '../../sumer-giza/AssetsManager' - -export class RetryFailedUploadsCommand extends Command { - static flags = { - wsProviderEndpointUri: flags.string({ - description: 'WS provider endpoint uri (Giza)', - default: 'ws://localhost:9944', - }), - dataDir: flags.string({ - description: 'Directory where data objects to upload are stored', - default: path.join(os.tmpdir(), 'joystream/sumer-giza-migration'), - }), - uploadSpEndpoint: flags.string({ - description: 'Giza storage node endpoint to use for uploading', - default: 'http://localhost:3333', - }), - uploadSpBucketId: flags.integer({ - description: 'Giza storage bucket id', - default: 0, - }), - failedUploadsPath: flags.string({ - char: 'f', - description: 'Path to failed uploads file', - required: true, - }), - } - - async run(): Promise { - const opts = this.parse(RetryFailedUploadsCommand).flags - try { - const provider = new WsProvider(opts.wsProviderEndpointUri) - const api = new RuntimeApi({ provider }) - await api.isReadyOrError - const assetsManager = await AssetsManager.create({ - api, - config: { - ...opts, - migrationStatePath: path.dirname(opts.failedUploadsPath), - }, - }) - assetsManager.loadQueue(opts.failedUploadsPath) - await assetsManager.processQueuedUploads() - } catch (e) { - console.error(e) - this.exit(-1) - } - this.exit(0) - } -} diff --git a/utils/migration-scripts/disabled-migrations/giza-olympia/AssetsBase.ts b/utils/migration-scripts/disabled-migrations/giza-olympia/AssetsBase.ts deleted file mode 100644 index 330922f916..0000000000 --- a/utils/migration-scripts/disabled-migrations/giza-olympia/AssetsBase.ts +++ /dev/null @@ -1,94 +0,0 @@ -import axios from 'axios' -import stringify from 'fast-safe-stringify' -import { createReadStream, existsSync, statSync, mkdirSync } from 'fs' -import path from 'path' -import { Readable } from 'stream' -import { Logger } from 'winston' -import { createLogger } from '../logging' -import { ContentHash } from './ContentHash' -import { StorageDataObjectFieldsFragment } from './giza-query-node/generated/queries' - -export type AssetsBaseConfig = { - dataDir: string -} - -export type AssetsBaseParams = { - config: AssetsBaseConfig -} - -export abstract class AssetsBase { - protected config: AssetsBaseConfig - protected logger: Logger - - protected constructor(params: AssetsBaseParams) { - const { config } = params - this.config = config - this.logger = createLogger('Assets Base') - mkdirSync(this.tmpAssetPath(''), { recursive: true }) - mkdirSync(this.assetPath(''), { recursive: true }) - } - - protected tmpAssetPath(dataObjectId: string): string { - return path.join(this.config.dataDir, 'tmp', dataObjectId) - } - - protected assetPath(contentHash: string): string { - return path.join(this.config.dataDir, 'objects', contentHash) - } - - protected calcContentHash(assetPath: string): Promise { - return new Promise((resolve, reject) => { - const fReadStream = createReadStream(assetPath) - const hash = new ContentHash() - fReadStream.on('data', (chunk) => hash.update(chunk)) - fReadStream.on('end', () => resolve(hash.digest())) - fReadStream.on('error', (err) => reject(err)) - }) - } - - protected async isAssetMissing(dataObject: StorageDataObjectFieldsFragment): Promise { - const assetPath = this.assetPath(dataObject.ipfsHash) - if (!existsSync(assetPath)) { - this.logger.debug(`isAssetMissing: ${assetPath} not found`) - return true - } - const { size } = statSync(assetPath) - if (size.toString() !== dataObject.size) { - this.logger.debug(`isAssetMissing: Unexpected size (expected: ${dataObject.size}, got: ${size.toString()})`) - return true - } - const hash = await this.calcContentHash(assetPath) - if (hash !== dataObject.ipfsHash) { - this.logger.debug(`isAssetMissing: Unexpected hash (expected: ${dataObject.ipfsHash}, got: ${hash})`) - return true - } - return false - } - - private streamToString(stream: Readable) { - const chunks: Uint8Array[] = [] - return new Promise((resolve, reject) => { - stream.on('data', (chunk) => chunks.push(Buffer.from(chunk))) - stream.on('error', (err) => reject(err)) - stream.on('end', () => resolve(Buffer.concat(chunks).toString('utf8'))) - }) - } - - protected async reqErrorMessage(e: unknown): Promise { - if (axios.isAxiosError(e)) { - let msg = e.message - if (e.response && typeof e.response.data === 'string') { - msg += `: ${e.response.data}` - } - if (e.response && e.response.data && e.response.data.message) { - msg += `: ${e.response.data.message}` - } - if (e.response && e.response.data && e.response.data instanceof Readable) { - msg += `: ${await this.streamToString(e.response.data)}` - } - - return msg - } - return e instanceof Error ? e.message : stringify(e) - } -} diff --git a/utils/migration-scripts/disabled-migrations/giza-olympia/BaseMigration.ts b/utils/migration-scripts/disabled-migrations/giza-olympia/BaseMigration.ts deleted file mode 100644 index 94120f8bbe..0000000000 --- a/utils/migration-scripts/disabled-migrations/giza-olympia/BaseMigration.ts +++ /dev/null @@ -1,194 +0,0 @@ -import { SubmittableResult } from '@polkadot/api' -import { KeyringPair } from '@polkadot/keyring/types' -import { RuntimeApi } from '../RuntimeApi' -import { Keyring } from '@polkadot/keyring' -import { Logger } from 'winston' -import path from 'path' -import nodeCleanup from 'node-cleanup' -import _ from 'lodash' -import fs from 'fs' -import { SubmittableExtrinsic } from '@polkadot/api/types' - -export type MigrationResult = { - idsMap: Map - failedMigrations: number[] -} - -export type MigrationStateJson = { - idsMapEntries: [number, number][] - failedMigrations: number[] -} - -export type BaseMigrationConfig = { - migrationStatePath: string - sudoUri: string -} - -export type BaseMigrationParams = { - api: RuntimeApi - snapshot: T - config: BaseMigrationConfig -} - -export abstract class BaseMigration { - abstract readonly name: string - protected api: RuntimeApi - protected sudo!: KeyringPair - protected config: BaseMigrationConfig - protected snapshot: T - protected failedMigrations: Set - protected idsMap: Map - protected pendingMigrationIteration: Promise | undefined - protected abstract logger: Logger - - public constructor({ api, config, snapshot }: BaseMigrationParams) { - this.api = api - this.config = config - this.failedMigrations = new Set() - this.idsMap = new Map() - this.snapshot = snapshot - fs.mkdirSync(config.migrationStatePath, { recursive: true }) - } - - protected getMigrationStateFilePath(): string { - const { migrationStatePath } = this.config - return path.join(migrationStatePath, `${_.camelCase(this.name)}.json`) - } - - public async init(): Promise { - this.loadMigrationState() - nodeCleanup(this.onExit.bind(this)) - await this.loadSudoKey() - } - - public abstract run(): Promise - - protected abstract migrateBatch(batchTx: SubmittableExtrinsic<'promise'>, batch: { id: string }[]): Promise - - protected getMigrationStateJson(): MigrationStateJson { - return { - idsMapEntries: Array.from(this.idsMap.entries()), - failedMigrations: Array.from(this.failedMigrations), - } - } - - protected loadMigrationState(): void { - const stateFilePath = this.getMigrationStateFilePath() - if (fs.existsSync(stateFilePath)) { - const migrationStateJson = fs.readFileSync(stateFilePath).toString() - const migrationState: MigrationStateJson = JSON.parse(migrationStateJson) - this.idsMap = new Map(migrationState.idsMapEntries) - } - } - - protected onExit(exitCode: number | null, signal: string | null): void | false { - nodeCleanup.uninstall() // don't call cleanup handler again - this.logger.info('Exitting...') - if (signal && this.pendingMigrationIteration) { - this.logger.info('Waiting for currently pending migration iteration to finalize...') - this.pendingMigrationIteration.then(() => { - this.saveMigrationState(true) - this.logger.info('Done.') - process.kill(process.pid, signal) - }) - return false - } else { - this.saveMigrationState(true) - this.logger.info('Done.') - } - } - - protected saveMigrationState(isExitting: boolean): void { - this.logger.info(`Saving ${isExitting ? 'final' : 'intermediate'} migration state...`) - const stateFilePath = this.getMigrationStateFilePath() - const migrationState = this.getMigrationStateJson() - fs.writeFileSync(stateFilePath, JSON.stringify(migrationState, undefined, 2)) - } - - private async loadSudoKey() { - const { sudoUri } = this.config - const keyring = new Keyring({ type: 'sr25519' }) - this.sudo = keyring.createFromUri(sudoUri) - const sudoKey = await this.api.query.sudo.key() - if (sudoKey.toString() !== this.sudo.address) { - throw new Error(`Invalid sudo key! Expected: ${sudoKey.toString()}, Got: ${this.sudo.address}`) - } - } - - protected async executeBatchMigration( - batchTx: SubmittableExtrinsic<'promise'>, - batch: T[] - ): Promise { - this.pendingMigrationIteration = (async () => { - await this.migrateBatch(batchTx, batch) - this.saveMigrationState(false) - })() - await this.pendingMigrationIteration - this.pendingMigrationIteration = undefined - } - - /** - * Extract failed migrations (entity ids) from batch transaction result. - * Assumptions: - * - Each entity is migrated with a constant number of calls (2 by default: balnces.transferKeepAlive and sudo.sudoAs) - * - Ordering of the entities in the `batch` array matches the ordering of the batched calls through which they are migrated - * - If `usesSudoAs===true`: Last call for each entity is always sudo.sudoAs - * - If `usesSudoAs===true`: There is only one sudo.sudoAs call per entity - * - * Entity migration is considered failed if the last call (per entity) failed or was not executed at all, regardless of - * the result of any of the previous calls associated with that entity migration. - * (This means, for example, that regardless of whether balnces.transferKeepAlive failed and interrupted the batch or balnces.transferKeepAlive - * succeeded, but sudo.sudoAs failed - in both cases the migration is considered failed and should be fully re-executed on - * the next script run) - */ - protected extractFailedMigrations( - result: SubmittableResult, - batch: T[], - callsPerEntity = 2, - usesSudoAs = true - ): void { - const { api } = this - const batchInterruptedEvent = api.findEvent(result, 'utility', 'BatchInterrupted') - const numberOfSuccesfulCalls = batchInterruptedEvent - ? batchInterruptedEvent.data[0].toNumber() - : callsPerEntity * batch.length - const numberOfMigratedEntites = Math.floor(numberOfSuccesfulCalls / callsPerEntity) - - const sudoAsDoneEvents = api.findEvents(result, 'sudo', 'SudoAsDone') - if (usesSudoAs && sudoAsDoneEvents.length !== numberOfMigratedEntites) { - throw new Error( - `Unexpected number of SudoAsDone events (expected: ${numberOfMigratedEntites}, got: ${sudoAsDoneEvents.length})! ` + - `Could not extract failed migrations from: ${JSON.stringify(result.toHuman())}` - ) - } - - const failedIds: number[] = [] - batch.forEach((entity, i) => { - const entityId = parseInt(entity.id) - if (i >= numberOfMigratedEntites || (usesSudoAs && sudoAsDoneEvents[i].data[0].isFalse)) { - failedIds.push(entityId) - this.failedMigrations.add(entityId) - } - }) - - if (batchInterruptedEvent) { - this.logger.error( - `Batch interrupted at call ${numberOfSuccesfulCalls}: ${this.api.formatDispatchError( - batchInterruptedEvent.data[1] - )}` - ) - } - - if (failedIds.length) { - this.logger.error(`Failed to migrate:`, { failedIds }) - } - } - - public getResult(): MigrationResult { - const { idsMap, failedMigrations } = this - return { - idsMap: new Map(idsMap.entries()), - failedMigrations: Array.from(failedMigrations), - } - } -} diff --git a/utils/migration-scripts/disabled-migrations/giza-olympia/CategoryMigration.ts b/utils/migration-scripts/disabled-migrations/giza-olympia/CategoryMigration.ts deleted file mode 100644 index dcaa8c8128..0000000000 --- a/utils/migration-scripts/disabled-migrations/giza-olympia/CategoryMigration.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { BaseMigration } from './BaseMigration' -import { ContentDirectorySnapshot } from './SnapshotManager' - -export abstract class CategoryMigration extends BaseMigration { - protected contentLeadKey!: string - - public async init(): Promise { - await super.init() - await this.loadContentLeadKey() - } - - private async loadContentLeadKey(): Promise { - const { api } = this - const leadId = await api.query.contentWorkingGroup.currentLead() - if (!leadId.isSome) { - throw new Error('ContentWorkingGroup lead must be set!') - } - const leadWorker = await api.query.contentWorkingGroup.workerById(leadId.unwrap()) - this.contentLeadKey = leadWorker.role_account_id.toString() - } -} diff --git a/utils/migration-scripts/disabled-migrations/giza-olympia/ChannelCategoriesMigration.ts b/utils/migration-scripts/disabled-migrations/giza-olympia/ChannelCategoriesMigration.ts deleted file mode 100644 index 71fa90c6b1..0000000000 --- a/utils/migration-scripts/disabled-migrations/giza-olympia/ChannelCategoriesMigration.ts +++ /dev/null @@ -1,78 +0,0 @@ -import { ChannelCategoryMetadata } from '@joystream/metadata-protobuf' -import { ChannelCategoryId } from '@joystream/types/content' -import { SubmittableExtrinsic } from '@polkadot/api/types' -import { ISubmittableResult } from '@polkadot/types/types' -import { Logger } from 'winston' -import { createLogger } from '../logging' -import { BaseMigrationParams, MigrationResult } from './BaseMigration' -import { CategoryMigration } from './CategoryMigration' -import { ContentDirectorySnapshot } from './SnapshotManager' - -export class ChannelCategoriesMigration extends CategoryMigration { - name = 'Channel categories migration' - protected logger: Logger - - public constructor(params: BaseMigrationParams) { - super(params) - this.logger = createLogger(this.name) - } - - protected async migrateBatch( - batchTx: SubmittableExtrinsic<'promise', ISubmittableResult>, - batch: { id: string }[] - ): Promise { - const { api } = this - const result = await api.sendExtrinsic(this.sudo, batchTx) - const categoryCreatedEvents = api.findEvents(result, 'content', 'ChannelCategoryCreated') - const createdCategoryIds: ChannelCategoryId[] = categoryCreatedEvents.map((e) => e.data[0]) - - if (createdCategoryIds.length !== batch.length) { - this.extractFailedMigrations(result, batch) - } - - let newCategoryIndex = 0 - batch.forEach((c) => { - if (this.failedMigrations.has(parseInt(c.id))) { - return - } - const newCategoryId = createdCategoryIds[newCategoryIndex++] - this.idsMap.set(parseInt(c.id), newCategoryId.toNumber()) - }) - this.logger.info(`Channel categories map created!`, this.idsMap.entries()) - if (this.failedMigrations.size) { - throw new Error(`Failed to create some channel categories: ${Array.from(this.failedMigrations).join(', ')}`) - } - this.logger.info(`All channel categories succesfully migrated!`) - } - - public async run(): Promise { - await this.init() - const { api } = this - const allCategories = this.snapshot.channelCategories - const categoriesToMigrate = allCategories.filter((c) => !this.idsMap.has(parseInt(c.id))) - - if (!categoriesToMigrate.length) { - this.logger.info('All channel categories already migrated, skipping...') - return this.getResult() - } - - this.logger.info(`Migrating ${categoriesToMigrate.length} channel categories...`) - const txs = categoriesToMigrate - .sort((a, b) => parseInt(a.id) - parseInt(b.id)) - .map((c) => { - const meta = new ChannelCategoryMetadata({ name: c.name }) - const metaBytes = '0x' + Buffer.from(ChannelCategoryMetadata.encode(meta).finish()).toString('hex') - return api.tx.sudo.sudoAs( - this.contentLeadKey, - api.tx.content.createChannelCategory('Lead', { - meta: metaBytes, - }) - ) - }) - - const batchTx = api.tx.utility.batch(txs) - await this.migrateBatch(batchTx, categoriesToMigrate) - - return this.getResult() - } -} diff --git a/utils/migration-scripts/disabled-migrations/giza-olympia/ChannelsMigration.ts b/utils/migration-scripts/disabled-migrations/giza-olympia/ChannelsMigration.ts deleted file mode 100644 index f408f2222b..0000000000 --- a/utils/migration-scripts/disabled-migrations/giza-olympia/ChannelsMigration.ts +++ /dev/null @@ -1,199 +0,0 @@ -import { UploadMigration, UploadMigrationConfig, UploadMigrationParams } from './UploadMigration' -import { ChannelMetadata } from '@joystream/metadata-protobuf' -import { ChannelFieldsFragment } from './giza-query-node/generated/queries' -import { createType } from '@joystream/types' -import Long from 'long' -import { ChannelCreationParameters } from '@joystream/types/content' -import { ChannelId } from '@joystream/types/common' -import _ from 'lodash' -import { MigrationResult } from './BaseMigration' -import { Logger } from 'winston' -import { createLogger } from '../logging' -import { SubmittableExtrinsic } from '@polkadot/api/types' - -export type ChannelsMigrationConfig = UploadMigrationConfig & { - channelIds: number[] - channelBatchSize: number - forceChannelOwnerMemberId: number | undefined - excludeVideoIds: number[] -} - -export type ChannelsMigrationParams = UploadMigrationParams & { - config: ChannelsMigrationConfig - forcedChannelOwner: { id: string; controllerAccount: string } | undefined - categoriesMap: Map - membershipsMap: Map -} - -export type ChannelsMigrationResult = MigrationResult & { - videoIds: number[] -} - -export class ChannelMigration extends UploadMigration { - name = 'Channels migration' - protected config: ChannelsMigrationConfig - protected categoriesMap: Map - protected membershipsMap: Map - protected videoIds: number[] = [] - protected forcedChannelOwner: { id: string; controllerAccount: string } | undefined - protected logger: Logger - - public constructor(params: ChannelsMigrationParams) { - super(params) - this.config = params.config - this.forcedChannelOwner = params.forcedChannelOwner - this.categoriesMap = params.categoriesMap - this.membershipsMap = params.membershipsMap - this.logger = createLogger(this.name) - } - - private getNewCategoryId(oldCategoryId: string | null | undefined): Long | undefined { - if (typeof oldCategoryId !== 'string') { - return undefined - } - const newCategoryId = this.categoriesMap.get(parseInt(oldCategoryId)) - return newCategoryId ? Long.fromNumber(newCategoryId) : undefined - } - - private getChannelOwnerMember({ - id, - ownerMember, - }: ChannelFieldsFragment): Exclude { - if (!ownerMember) { - throw new Error(`Chanel ownerMember missing: ${id}. Only member-owned channels are supported!`) - } - - if (this.forcedChannelOwner) { - return this.forcedChannelOwner - } - - const newMemberId = this.membershipsMap.get(parseInt(ownerMember.id)) - if (newMemberId === undefined) { - throw new Error(`Missing member ${ownerMember.id} (owner of channel ${id}) in the memberships map!`) - } - - return { ...ownerMember, id: newMemberId.toString() } - } - - protected async migrateBatch(tx: SubmittableExtrinsic<'promise'>, channels: ChannelFieldsFragment[]): Promise { - const { api } = this - const result = await api.sendExtrinsic(this.sudo, tx) - const channelCreatedEvents = api.findEvents(result, 'content', 'ChannelCreated') - const newChannelIds: ChannelId[] = channelCreatedEvents.map((e) => e.data[1]) - if (channelCreatedEvents.length !== channels.length) { - this.extractFailedMigrations(result, channels) - } - const newChannelMapEntries: [number, number][] = [] - let newChannelIdIndex = 0 - channels.forEach(({ id }) => { - if (this.failedMigrations.has(parseInt(id))) { - return - } - const newChannelId = newChannelIds[newChannelIdIndex++].toNumber() - this.idsMap.set(parseInt(id), newChannelId) - newChannelMapEntries.push([parseInt(id), newChannelId]) - }) - if (newChannelMapEntries.length) { - this.logger.info('Channel map entries added!', { newChannelMapEntries }) - const dataObjectsUploadedEvents = this.api.findEvents(result, 'storage', 'DataObjectsUploaded') - this.uploadManager.queueUploadsFromEvents(dataObjectsUploadedEvents) - } - } - - public async run(): Promise { - await this.init() - const { - api, - config: { channelIds, channelBatchSize }, - } = this - const ids = channelIds.sort((a, b) => a - b) - while (ids.length) { - const idsBatch = ids.splice(0, channelBatchSize) - this.logger.info(`Preparing a batch of ${idsBatch.length} channels...`) - const channelsBatch = this.snapshot.channels.filter((c) => idsBatch.includes(parseInt(c.id))) - if (channelsBatch.length < idsBatch.length) { - this.logger.warn( - `Some channels were not be found: ${_.difference( - idsBatch, - channelsBatch.map((c) => parseInt(c.id)) - )}` - ) - } - const channelsToMigrate = channelsBatch.filter((c) => !this.idsMap.has(parseInt(c.id))) - if (channelsToMigrate.length < channelsBatch.length) { - this.logger.info( - `${channelsToMigrate.length ? 'Some' : 'All'} channels in this batch were already migrated ` + - `(${channelsBatch.length - channelsToMigrate.length}/${channelsBatch.length})` - ) - } - if (channelsToMigrate.length) { - const calls = _.flatten(await Promise.all(channelsToMigrate.map((c) => this.prepareChannel(c)))) - const batchTx = api.tx.utility.batch(calls) - await this.executeBatchMigration(batchTx, channelsToMigrate) - await this.uploadManager.processQueuedUploads() - } - const videoIdsToMigrate: number[] = channelsBatch.reduce( - (res, { id, videos }) => - this.idsMap.has(parseInt(id)) - ? res.concat(videos.map((v) => parseInt(v.id)).filter((id) => !this.config.excludeVideoIds.includes(id))) - : res, - [] - ) - this.videoIds = this.videoIds.concat(videoIdsToMigrate) - if (videoIdsToMigrate.length) { - this.logger.info(`Added ${videoIdsToMigrate.length} video ids to the list of videos to migrate`) - } - } - return { - ...this.getResult(), - videoIds: [...this.videoIds], - } - } - - private async prepareChannel(channel: ChannelFieldsFragment) { - const { api } = this - const { avatarPhoto, coverPhoto, title, description, categoryId, isPublic, language, collaborators } = channel - - const ownerMember = this.getChannelOwnerMember(channel) - - const assetsToPrepare = { - avatar: avatarPhoto || undefined, - coverPhoto: coverPhoto || undefined, - } - const preparedAssets = await this.uploadManager.prepareAssets(assetsToPrepare) - const meta = new ChannelMetadata({ - title, - description, - category: this.getNewCategoryId(categoryId), - avatarPhoto: preparedAssets.avatar?.index, - coverPhoto: preparedAssets.coverPhoto?.index, - isPublic, - language: language?.iso, - }) - const assetsParams = Object.values(preparedAssets) - .sort((a, b) => a.index - b.index) - .map((a) => a.params) - const channelCreationParams = createType( - 'ChannelCreationParameters', - { - assets: assetsParams.length - ? { - object_creation_list: assetsParams, - expected_data_size_fee: this.uploadManager.dataObjectFeePerMB, - } - : null, - meta: `0x${Buffer.from(ChannelMetadata.encode(meta).finish()).toString('hex')}`, - collaborators: collaborators.map(({ id }) => parseInt(id)), - reward_account: channel.rewardAccount, - } - ) - const feesToCover = this.uploadManager.calcDataObjectsFee(assetsParams) - return [ - api.tx.balances.transferKeepAlive(ownerMember.controllerAccount, feesToCover), - api.tx.sudo.sudoAs( - ownerMember.controllerAccount, - api.tx.content.createChannel({ Member: ownerMember.id }, channelCreationParams) - ), - ] - } -} diff --git a/utils/migration-scripts/disabled-migrations/giza-olympia/ContentHash.ts b/utils/migration-scripts/disabled-migrations/giza-olympia/ContentHash.ts deleted file mode 100644 index e0441ce881..0000000000 --- a/utils/migration-scripts/disabled-migrations/giza-olympia/ContentHash.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { createHash, HashInput, NodeHash } from 'blake3' -import { HashReader } from 'blake3/dist/wasm/nodejs' -import { toB58String, encode } from 'multihashes' - -// Based on distributor node's implementation -export class ContentHash { - private hash: NodeHash - public static readonly algorithm = 'blake3' - - constructor() { - this.hash = createHash() - } - - update(data: HashInput): this { - this.hash.update(data) - return this - } - - digest(): string { - return toB58String(encode(this.hash.digest(), ContentHash.algorithm)) - } -} diff --git a/utils/migration-scripts/disabled-migrations/giza-olympia/ContentMigration.ts b/utils/migration-scripts/disabled-migrations/giza-olympia/ContentMigration.ts deleted file mode 100644 index d4ece92623..0000000000 --- a/utils/migration-scripts/disabled-migrations/giza-olympia/ContentMigration.ts +++ /dev/null @@ -1,99 +0,0 @@ -import { WsProvider } from '@polkadot/api' -import { RuntimeApi } from '../RuntimeApi' -import { VideosMigration } from './VideosMigration' -import { ChannelMigration } from './ChannelsMigration' -import { UploadManager } from './UploadManager' -import { ChannelCategoriesMigration } from './ChannelCategoriesMigration' -import { VideoCategoriesMigration } from './VideoCategoriesMigration' -import { ContentDirectorySnapshot } from './SnapshotManager' -import { readFileSync } from 'fs' -import { MigrationStateJson } from './BaseMigration' - -export type ContentMigrationConfig = { - wsProviderEndpointUri: string - sudoUri: string - channelIds: number[] - dataDir: string - channelBatchSize: number - videoBatchSize: number - forceChannelOwnerMemberId: number | undefined - preferredDownloadSpEndpoints?: string[] - uploadSpBucketId: number - uploadSpEndpoint: string - migrationStatePath: string - excludeVideoIds: number[] - snapshotFilePath: string - membershipsMigrationResultPath: string -} - -export class ContentMigration { - private api: RuntimeApi - private config: ContentMigrationConfig - - constructor(config: ContentMigrationConfig) { - const { wsProviderEndpointUri } = config - const provider = new WsProvider(wsProviderEndpointUri) - this.api = new RuntimeApi({ provider }) - this.config = config - } - - private async getForcedChannelOwner(): Promise<{ id: string; controllerAccount: string } | undefined> { - const { forceChannelOwnerMemberId } = this.config - if (forceChannelOwnerMemberId !== undefined) { - const ownerMember = await this.api.query.members.membershipById(forceChannelOwnerMemberId) - if (ownerMember.isEmpty) { - throw new Error(`Membership by id ${forceChannelOwnerMemberId} not found!`) - } - return { - id: forceChannelOwnerMemberId.toString(), - controllerAccount: ownerMember.controller_account.toString(), - } - } - return undefined - } - - private loadSnapshot(): ContentDirectorySnapshot { - const snapshotJson = readFileSync(this.config.snapshotFilePath).toString() - return JSON.parse(snapshotJson) as ContentDirectorySnapshot - } - - private loadMembershipsMap(): Map { - const resultJson = readFileSync(this.config.membershipsMigrationResultPath).toString() - const mapEntries = (JSON.parse(resultJson) as MigrationStateJson).idsMapEntries - return new Map(mapEntries) - } - - public async run(): Promise { - const { api, config } = this - await this.api.isReadyOrError - const snapshot = this.loadSnapshot() - const membershipsMap = this.loadMembershipsMap() - const { idsMap: channelCategoriesMap } = await new ChannelCategoriesMigration({ api, config, snapshot }).run() - const { idsMap: videoCategoriesMap } = await new VideoCategoriesMigration({ api, config, snapshot }).run() - const forcedChannelOwner = await this.getForcedChannelOwner() - const uploadManager = await UploadManager.create({ - api, - config, - }) - const { idsMap: channelsMap, videoIds } = await new ChannelMigration({ - api, - config, - snapshot, - forcedChannelOwner, - uploadManager, - categoriesMap: channelCategoriesMap, - membershipsMap, - }).run() - await new VideosMigration({ - api, - config, - snapshot, - channelsMap, - videoIds, - forcedChannelOwner, - uploadManager, - categoriesMap: videoCategoriesMap, - membershipsMap, - }).run() - } -} diff --git a/utils/migration-scripts/disabled-migrations/giza-olympia/DownloadManager.ts b/utils/migration-scripts/disabled-migrations/giza-olympia/DownloadManager.ts deleted file mode 100644 index 63aa29e6b9..0000000000 --- a/utils/migration-scripts/disabled-migrations/giza-olympia/DownloadManager.ts +++ /dev/null @@ -1,158 +0,0 @@ -import { Logger } from 'winston' -import { createLogger } from '../logging' -import { MAX_RESULTS_PER_QUERY, QueryNodeApi } from './giza-query-node/api' -import { createWriteStream, renameSync, statSync } from 'fs' -import axios from 'axios' -import { - StorageDataObjectConnectionFieldsFragment, - StorageDataObjectFieldsFragment, -} from './giza-query-node/generated/queries' -import urljoin from 'url-join' -import { pipeline, Readable } from 'stream' -import { promisify } from 'util' -import { DistributionBucketOperatorStatus } from './giza-query-node/generated/schema' -import _ from 'lodash' -import { AssetsBase } from './AssetsBase' -import moment from 'moment' - -export type DownloadManagerConfig = { - objectsPerBatch: number - dataDir: string -} - -export type DownloadManagerParams = { - config: DownloadManagerConfig - queryNodeApi: QueryNodeApi -} - -export class DownloadManager extends AssetsBase { - name = 'Download Manager' - protected logger: Logger - protected config: DownloadManagerConfig - protected queryNodeApi: QueryNodeApi - - public constructor(params: DownloadManagerParams) { - super(params) - this.config = params.config - this.queryNodeApi = params.queryNodeApi - this.logger = createLogger(this.name) - } - - private async fetchAsset(dataObject: StorageDataObjectFieldsFragment, endpoint: string): Promise { - const assetEndpoint = urljoin(endpoint, `api/v1/assets/${dataObject.id}`) - const response = await axios.get(assetEndpoint, { responseType: 'stream', timeout: 5000 }) - const pipe = promisify(pipeline) - const destPath = this.tmpAssetPath(dataObject.id) - const fWriteStream = createWriteStream(destPath) - await pipe(response.data, fWriteStream) - const { size } = statSync(destPath) - if (size !== parseInt(dataObject.size)) { - throw new Error('Invalid file size') - } - const hash = await this.calcContentHash(destPath) - if (hash !== dataObject.ipfsHash) { - throw new Error('Invalid file hash') - } - renameSync(destPath, this.assetPath(dataObject.ipfsHash)) - } - - private async fetchAssetWithRetry( - dataObject: StorageDataObjectFieldsFragment, - distributors: Map - ): Promise { - const endpoints = distributors.get(dataObject.storageBagId) || [] - let lastError: Error | undefined - for (const endpoint of endpoints) { - try { - this.logger.debug(`Trying to fetch data object ${dataObject.id} (${dataObject.ipfsHash}) from ${endpoint}...`) - await this.fetchAsset(dataObject, endpoint) - return - } catch (e) { - this.logger.debug( - `Fetching object ${dataObject.id} (${dataObject.ipfsHash}) from ${endpoint} failed: ${(e as Error).message}` - ) - lastError = e as Error - continue - } - } - this.logger.error( - `Could not fetch data object ${dataObject.id} (${dataObject.ipfsHash}) from any distributor. Last error: ${ - lastError && (await this.reqErrorMessage(lastError)) - }` - ) - } - - private async getDistributors(dataObjects: StorageDataObjectFieldsFragment[]): Promise> { - this.logger.info(`Fetching the distributors for ${dataObjects.length} data objects...`) - const bagIds = _.uniq(dataObjects.map((o) => o.storageBagId)) - const buckets = await this.queryNodeApi.getDistributorsByBagIds(bagIds) - this.logger.info(`Fetched the data of ${buckets.length} unique distribution buckets`) - - const endpointsByBagId = new Map() - for (const bucket of buckets) { - for (const operator of bucket.operators) { - if (operator.status === DistributionBucketOperatorStatus.Active && operator.metadata?.nodeEndpoint) { - for (const bag of bucket.bags) { - const currEndpoints = endpointsByBagId.get(bag.id) || [] - endpointsByBagId.set(bag.id, [...currEndpoints, operator.metadata.nodeEndpoint]) - } - } - } - } - - return endpointsByBagId - } - - protected async fetchIfMissing( - dataObject: StorageDataObjectFieldsFragment, - knownDistributors: Map - ): Promise { - const missing = await this.isAssetMissing(dataObject) - if (missing) { - this.logger.debug(`Object ${dataObject.ipfsHash} missing, fetching...`) - await this.fetchAssetWithRetry(dataObject, knownDistributors) - return true - } - - this.logger.debug(`Object ${dataObject.ipfsHash} already exists, skipping...`) - return false - } - - public async fetchAllDataObjects(updatedAfter?: Date, continously = false, idleTimeSec?: number): Promise { - do { - let currentPage: StorageDataObjectConnectionFieldsFragment | undefined - let lastObjectUpdatedAt: Date | undefined - this.logger.info( - `Fetching all data objects${updatedAfter ? ` updated after ${updatedAfter.toISOString()}` : ''}...` - ) - do { - this.logger.info(`Fetching a page of up to ${MAX_RESULTS_PER_QUERY} data objects from the query node...`) - currentPage = await this.queryNodeApi.getStorageDataObjectsPage( - updatedAfter, - MAX_RESULTS_PER_QUERY, - currentPage?.pageInfo.endCursor || undefined - ) - const objects = currentPage.edges.map((e) => e.node) - const maxUpdatedAt = _.maxBy(objects, (o) => moment(o.updatedAt).unix())?.updatedAt - lastObjectUpdatedAt = maxUpdatedAt ? new Date(maxUpdatedAt) : undefined - this.logger.info(`Fetched ${objects.length} data object rows`) - if (objects.length) { - const distributors = await this.getDistributors(objects) - while (objects.length) { - const batch = objects.splice(0, this.config.objectsPerBatch) - this.logger.info(`Processing a batch of ${batch.length} data objects...`) - const results = await Promise.all(batch.map((o) => this.fetchIfMissing(o, distributors))) - const downloadedObjectsLength = results.reduce((a, b) => a + (b ? 1 : 0), 0) - this.logger.info(`Downloaded ${downloadedObjectsLength} new data objects...`) - } - } - } while (currentPage.pageInfo.hasNextPage) - if (continously && idleTimeSec) { - this.logger.info(`Waiting ${idleTimeSec} seconds...`) - await new Promise((resolve) => setTimeout(resolve, 1000 * idleTimeSec)) - } - updatedAfter = updatedAfter || lastObjectUpdatedAt - // eslint-disable-next-line no-unmodified-loop-condition - } while (continously) - } -} diff --git a/utils/migration-scripts/disabled-migrations/giza-olympia/MembershipMigration.ts b/utils/migration-scripts/disabled-migrations/giza-olympia/MembershipMigration.ts deleted file mode 100644 index ca0da3610c..0000000000 --- a/utils/migration-scripts/disabled-migrations/giza-olympia/MembershipMigration.ts +++ /dev/null @@ -1,102 +0,0 @@ -import { MembershipMetadata } from '@joystream/metadata-protobuf' -import { MembershipFieldsFragment } from './giza-query-node/generated/queries' -import { createType } from '@joystream/types' -import { MemberId } from '@joystream/types/common' -import { BaseMigration, BaseMigrationConfig, BaseMigrationParams, MigrationResult } from './BaseMigration' -import { Logger } from 'winston' -import { createLogger } from '../logging' -import { SubmittableExtrinsic } from '@polkadot/api/types' -import { MembershipsSnapshot } from './SnapshotManager' -import { BuyMembershipParameters } from '@joystream/types/members' - -export type MembershipMigrationConfig = BaseMigrationConfig & { - batchSize: number -} - -export type MembershipMigrationParams = BaseMigrationParams & { - config: MembershipMigrationConfig -} - -export class MembershipMigration extends BaseMigration { - name = 'Membership migration' - protected config: MembershipMigrationConfig - protected logger: Logger - - public constructor(params: MembershipMigrationParams) { - super(params) - this.config = params.config - this.logger = createLogger(this.name) - } - - protected async migrateBatch( - tx: SubmittableExtrinsic<'promise'>, - members: MembershipFieldsFragment[] - ): Promise { - const { api } = this - const result = await api.sendExtrinsic(this.sudo, tx) - const membershipBoughtEvents = api.findEvents(result, 'members', 'MembershipBought') - const newMemberIds: MemberId[] = membershipBoughtEvents.map((e) => e.data[0]) - if (membershipBoughtEvents.length !== members.length) { - this.extractFailedMigrations(result, members, 1, false) - } - const newMembersMapEntries: [number, number][] = [] - let newMemberIdIndex = 0 - members.forEach(({ id }) => { - if (this.failedMigrations.has(parseInt(id))) { - return - } - const newMemberId = newMemberIds[newMemberIdIndex++].toNumber() - this.idsMap.set(parseInt(id), newMemberId) - newMembersMapEntries.push([parseInt(id), newMemberId]) - }) - if (newMembersMapEntries.length) { - this.logger.info('Members map entries added!', { newMembersMapEntries }) - } - } - - public async run(): Promise { - await this.init() - const { - api, - config: { batchSize }, - } = this - let membersBatch: MembershipFieldsFragment[] = [] - while ((membersBatch = this.snapshot.members.splice(0, batchSize)).length) { - this.logger.info(`Preparing a batch of ${membersBatch.length} members...`) - const membersToMigrate = membersBatch.filter((m) => !this.idsMap.has(parseInt(m.id))) - if (membersToMigrate.length < membersBatch.length) { - this.logger.info( - `${membersToMigrate.length ? 'Some' : 'All'} members in this batch were already migrated ` + - `(${membersBatch.length - membersToMigrate.length}/${membersBatch.length})` - ) - } - if (membersToMigrate.length) { - const calls = await Promise.all(membersToMigrate.map((m) => this.prepareMember(m))) - const batchTx = api.tx.utility.batch(calls) - await this.executeBatchMigration(batchTx, membersToMigrate) - } - } - return this.getResult() - } - - private async prepareMember(member: MembershipFieldsFragment) { - const { api } = this - const { handle, rootAccount, controllerAccount, about, avatarUri } = member - - const meta = new MembershipMetadata({ - about, - avatarUri, - }) - const buyMembershipParams = createType( - 'BuyMembershipParameters', - { - handle, - controller_account: controllerAccount, - root_account: rootAccount, - metadata: `0x${Buffer.from(MembershipMetadata.encode(meta).finish()).toString('hex')}`, - } - ) - - return api.tx.members.buyMembership(buyMembershipParams) - } -} diff --git a/utils/migration-scripts/disabled-migrations/giza-olympia/SnapshotManager.ts b/utils/migration-scripts/disabled-migrations/giza-olympia/SnapshotManager.ts deleted file mode 100644 index 9d2bbdf76f..0000000000 --- a/utils/migration-scripts/disabled-migrations/giza-olympia/SnapshotManager.ts +++ /dev/null @@ -1,106 +0,0 @@ -import { Logger } from 'winston' -import { createLogger } from '../logging' -import { MAX_RESULTS_PER_QUERY, QueryNodeApi } from './giza-query-node/api' -import { - ChannelCategoryFieldsFragment, - ChannelConnectionFieldsFragment, - ChannelFieldsFragment, - MembershipConnectionFieldsFragment, - MembershipFieldsFragment, - VideoCategoryFieldsFragment, - VideoConnectionFieldsFragment, - VideoFieldsFragment, -} from './giza-query-node/generated/queries' - -export type SnapshotManagerParams = { - queryNodeApi: QueryNodeApi -} - -export type ContentDirectorySnapshot = { - channelCategories: ChannelCategoryFieldsFragment[] - videoCategories: VideoCategoryFieldsFragment[] - channels: ChannelFieldsFragment[] - videos: VideoFieldsFragment[] -} - -export type MembershipsSnapshot = { - members: MembershipFieldsFragment[] -} - -export class SnapshotManager { - name = 'Snapshot Manager' - protected logger: Logger - protected queryNodeApi: QueryNodeApi - - public constructor(params: SnapshotManagerParams) { - this.queryNodeApi = params.queryNodeApi - this.logger = createLogger(this.name) - } - - private sortEntitiesByIds(entities: T[]): T[] { - return entities.sort((a, b) => parseInt(a.id) - parseInt(b.id)) - } - - public async getChannels(): Promise { - let lastCursor: string | undefined - let currentPage: ChannelConnectionFieldsFragment - let channels: ChannelFieldsFragment[] = [] - do { - this.logger.info(`Fetching a page of up to ${MAX_RESULTS_PER_QUERY} channels...`) - currentPage = await this.queryNodeApi.getChannelsPage(lastCursor) - channels = channels.concat(currentPage.edges.map((e) => e.node)) - this.logger.info(`Total ${channels.length} channels fetched`) - lastCursor = currentPage.pageInfo.endCursor || undefined - } while (currentPage.pageInfo.hasNextPage) - this.logger.info('Finished channels fetching') - - return this.sortEntitiesByIds(channels) - } - - public async getVideos(): Promise { - let lastCursor: string | undefined - let currentPage: VideoConnectionFieldsFragment - let videos: VideoFieldsFragment[] = [] - do { - this.logger.info(`Fetching a page of up to ${MAX_RESULTS_PER_QUERY} videos...`) - currentPage = await this.queryNodeApi.getVideosPage(lastCursor) - videos = videos.concat(currentPage.edges.map((e) => e.node)) - this.logger.info(`Total ${videos.length} videos fetched`) - lastCursor = currentPage.pageInfo.endCursor || undefined - } while (currentPage.pageInfo.hasNextPage) - this.logger.info('Finished videos fetching') - - return this.sortEntitiesByIds(videos) - } - - public async getMemberships(): Promise { - let lastCursor: string | undefined - let currentPage: MembershipConnectionFieldsFragment - let members: MembershipFieldsFragment[] = [] - do { - this.logger.info(`Fetching a page of up to ${MAX_RESULTS_PER_QUERY} members...`) - currentPage = await this.queryNodeApi.getMembershipsPage(lastCursor) - members = members.concat(currentPage.edges.map((e) => e.node)) - this.logger.info(`Total ${members.length} members fetched`) - lastCursor = currentPage.pageInfo.endCursor || undefined - } while (currentPage.pageInfo.hasNextPage) - this.logger.info('Finished members fetching') - - return this.sortEntitiesByIds(members) - } - - public async createContentDirectorySnapshot(): Promise { - const channelCategories = this.sortEntitiesByIds(await this.queryNodeApi.getChannelCategories()) - const videoCategories = this.sortEntitiesByIds(await this.queryNodeApi.getVideoCategories()) - const channels = await this.getChannels() - const videos = await this.getVideos() - return { channelCategories, videoCategories, videos, channels } - } - - public async createMembershipsSnapshot(): Promise { - const members = await this.getMemberships() - return { - members, - } - } -} diff --git a/utils/migration-scripts/disabled-migrations/giza-olympia/UploadManager.ts b/utils/migration-scripts/disabled-migrations/giza-olympia/UploadManager.ts deleted file mode 100644 index 97f3cc4bf9..0000000000 --- a/utils/migration-scripts/disabled-migrations/giza-olympia/UploadManager.ts +++ /dev/null @@ -1,209 +0,0 @@ -import BN from 'bn.js' -import urljoin from 'url-join' -import axios from 'axios' -import fs from 'fs' -import path from 'path' -import { BagId, DataObjectCreationParameters, DataObjectId, UploadParameters } from '@joystream/types/storage' -import { IEvent } from '@polkadot/types/types' -import { Bytes, Vec } from '@polkadot/types' -import { Balance } from '@polkadot/types/interfaces' -import FormData from 'form-data' -import { RuntimeApi } from '../RuntimeApi' -import { Logger } from 'winston' -import { createLogger } from '../logging' -import { AssetsBase } from './AssetsBase' -import { StorageDataObjectFieldsFragment } from './giza-query-node/generated/queries' -import { createType } from '@joystream/types' - -export type UploadManagerConfig = { - uploadSpBucketId: number - uploadSpEndpoint: string - dataDir: string - migrationStatePath: string -} - -export type UploadManagerParams = { - api: RuntimeApi - config: UploadManagerConfig -} - -export type UploadManagerLoadableParams = { - dataObjectFeePerMB: BN -} - -export type AssetsToPrepare = { - [name: string]: StorageDataObjectFieldsFragment | undefined -} - -export type PreparedAsset = { - params: DataObjectCreationParameters - index: number -} - -export class UploadManager extends AssetsBase { - private api: RuntimeApi - protected config: UploadManagerConfig - public readonly dataObjectFeePerMB: BN - private queuedUploads: Set - private isQueueProcessing = false - private queueFilePath: string - protected logger: Logger - - public get queueSize(): number { - return this.queuedUploads.size - } - - public static async create(params: UploadManagerParams): Promise { - const { api } = params - const dataObjectFeePerMB = await api.query.storage.dataObjectPerMegabyteFee() - return new UploadManager(params, { dataObjectFeePerMB }) - } - - private constructor(params: UploadManagerParams, loadableParams: UploadManagerLoadableParams) { - super(params) - const { api, config } = params - const { dataObjectFeePerMB } = loadableParams - this.dataObjectFeePerMB = dataObjectFeePerMB - this.api = api - this.config = config - this.queuedUploads = new Set() - this.logger = createLogger('Assets Manager') - this.queueFilePath = path.join(this.config.migrationStatePath, `unprocessedUploads_${Date.now()}.json`) - this.logger.info(`Failed/pending uploads will be saved to ${this.queueFilePath}`) - } - - public calcDataObjectsFee(params: DataObjectCreationParameters[]): BN { - const { dataObjectFeePerMB, api } = this - const deletionPrize = api.consts.storage.dataObjectDeletionPrize - const totalSize = params - .reduce((a, b) => { - return a.add(b.getField('size')) - }, new BN(0)) - .toNumber() - const totalStorageFee = dataObjectFeePerMB.muln(Math.ceil(totalSize / 1024 / 1024)) - const totalDeletionPrize = deletionPrize.muln(params.length) - return totalStorageFee.add(totalDeletionPrize) - } - - private async uploadDataObject(bagId: string, dataObjectId: number, contentHash: string): Promise { - const { - config: { uploadSpBucketId, uploadSpEndpoint }, - } = this - const dataPath = this.assetPath(contentHash) - if (!fs.existsSync(dataPath)) { - throw new Error(`Cannot upload object: ${dataObjectId} (${contentHash}): ${dataPath} not found`) - } - - const fileStream = fs.createReadStream(dataPath) - const formData = new FormData() - formData.append('dataObjectId', dataObjectId) - formData.append('storageBucketId', uploadSpBucketId) - formData.append('bagId', bagId) - formData.append('file', fileStream, { filename: path.basename(dataPath) }) - let uploadSuccesful: boolean - try { - await axios({ - method: 'POST', - url: urljoin(uploadSpEndpoint, 'api/v1/files'), - data: formData, - maxBodyLength: Infinity, - headers: { - 'content-type': 'multipart/form-data', - ...formData.getHeaders(), - }, - }) - uploadSuccesful = true - } catch (e) { - uploadSuccesful = false - const msg = await this.reqErrorMessage(e) - this.logger.error(`Upload of object ${dataObjectId} (${contentHash}) to ${uploadSpEndpoint} failed: ${msg}`) - } - - if (uploadSuccesful) { - this.finalizeUpload(bagId, dataObjectId, contentHash) - } - } - - public async processQueuedUploads(): Promise { - if (this.isQueueProcessing) { - throw new Error('Uploads queue is already beeing processed!') - } - this.isQueueProcessing = true - this.logger.info(`Uploading ${this.queueSize} data objects...`) - await Promise.all( - Array.from(this.queuedUploads).map((queuedUpload) => { - const [bagId, objectId, contentHash] = queuedUpload.split('|') - return this.uploadDataObject(bagId, parseInt(objectId), contentHash) - }) - ) - this.isQueueProcessing = false - } - - public loadQueue(queueFilePath: string): void { - const queue: string[] = JSON.parse(fs.readFileSync(queueFilePath).toString()) - this.queuedUploads = new Set(queue) - } - - public saveQueue(): void { - fs.writeFileSync(this.queueFilePath, JSON.stringify(Array.from(this.queuedUploads))) - this.logger.debug(`${this.queueFilePath} updated`, { queueSize: this.queuedUploads.size }) - } - - private queueUpload(bagId: BagId, objectId: DataObjectId, contentHash: Bytes): void { - const bagIdStr = `dynamic:channel:${bagId.asType('Dynamic').asType('Channel').toString()}` - const contentHashStr = Buffer.from(contentHash.toU8a(true)).toString() - this.queuedUploads.add(`${bagIdStr}|${objectId.toString()}|${contentHashStr}`) - this.saveQueue() - } - - private finalizeUpload(bagId: string, dataObjectId: number, contentHash: string) { - this.queuedUploads.delete(`${bagId}|${dataObjectId}|${contentHash}`) - this.saveQueue() - } - - public queueUploadsFromEvents(events: IEvent<[Vec, UploadParameters, Balance]>[]): void { - let queuedUploads = 0 - events.map(({ data: [objectIds, uploadParams] }) => { - objectIds.forEach((objectId, i) => { - this.queueUpload(uploadParams.bagId, objectId, uploadParams.objectCreationList[i].ipfsContentId) - ++queuedUploads - }) - }) - this.logger.info(`Added ${queuedUploads} new data object uploads to the upload queue`) - } - - private async prepareAsset( - dataObject: StorageDataObjectFieldsFragment - ): Promise { - if (await this.isAssetMissing(dataObject)) { - this.logger.warn( - `Data object ${dataObject.id} (${dataObject.ipfsHash}) missing in the data directory! Skipping...` - ) - return undefined - } - return createType('DataObjectCreationParameters', { - ipfsContentId: dataObject.ipfsHash, - size: dataObject.size, - }) - } - - public async prepareAssets( - assetsToPrepare: T - ): Promise<{ [K in keyof T]?: PreparedAsset }> { - const preparedAssets: { [K in keyof T]?: PreparedAsset } = {} - let assetIndex = 0 - await Promise.all( - Object.entries(assetsToPrepare).map(async ([assetName, dataObject]) => { - if (!dataObject) { - return - } - const params = await this.prepareAsset(dataObject) - if (!params) { - return - } - preparedAssets[assetName as keyof T] = { params, index: assetIndex++ } - }) - ) - return preparedAssets - } -} diff --git a/utils/migration-scripts/disabled-migrations/giza-olympia/UploadMigration.ts b/utils/migration-scripts/disabled-migrations/giza-olympia/UploadMigration.ts deleted file mode 100644 index e74ba5a154..0000000000 --- a/utils/migration-scripts/disabled-migrations/giza-olympia/UploadMigration.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { BaseMigration, BaseMigrationConfig, BaseMigrationParams } from './BaseMigration' -import { UploadManager } from './UploadManager' -import { ContentDirectorySnapshot } from './SnapshotManager' - -export type UploadMigrationConfig = BaseMigrationConfig - -export type UploadMigrationParams = BaseMigrationParams & { - uploadManager: UploadManager -} - -export abstract class UploadMigration extends BaseMigration { - protected config: UploadMigrationConfig - protected uploadManager: UploadManager - - public constructor({ api, snapshot, config, uploadManager }: UploadMigrationParams) { - super({ api, snapshot, config }) - this.config = config - this.uploadManager = uploadManager - } -} diff --git a/utils/migration-scripts/disabled-migrations/giza-olympia/VideoCategoriesMigration.ts b/utils/migration-scripts/disabled-migrations/giza-olympia/VideoCategoriesMigration.ts deleted file mode 100644 index 6f5efaf954..0000000000 --- a/utils/migration-scripts/disabled-migrations/giza-olympia/VideoCategoriesMigration.ts +++ /dev/null @@ -1,78 +0,0 @@ -import { VideoCategoryMetadata } from '@joystream/metadata-protobuf' -import { VideoCategoryId } from '@joystream/types/content' -import { SubmittableExtrinsic } from '@polkadot/api/types' -import { ISubmittableResult } from '@polkadot/types/types' -import { Logger } from 'winston' -import { createLogger } from '../logging' -import { BaseMigrationParams, MigrationResult } from './BaseMigration' -import { CategoryMigration } from './CategoryMigration' -import { ContentDirectorySnapshot } from './SnapshotManager' - -export class VideoCategoriesMigration extends CategoryMigration { - name = 'Video categories migration' - protected logger: Logger - - public constructor(params: BaseMigrationParams) { - super(params) - this.logger = createLogger(this.name) - } - - protected async migrateBatch( - batchTx: SubmittableExtrinsic<'promise', ISubmittableResult>, - batch: { id: string }[] - ): Promise { - const { api } = this - const result = await api.sendExtrinsic(this.sudo, batchTx) - const categoryCreatedEvents = api.findEvents(result, 'content', 'VideoCategoryCreated') - const createdCategoryIds: VideoCategoryId[] = categoryCreatedEvents.map((e) => e.data[1]) - - if (createdCategoryIds.length !== batch.length) { - this.extractFailedMigrations(result, batch) - } - - let newCategoryIndex = 0 - batch.forEach((c) => { - if (this.failedMigrations.has(parseInt(c.id))) { - return - } - const newCategoryId = createdCategoryIds[newCategoryIndex++] - this.idsMap.set(parseInt(c.id), newCategoryId.toNumber()) - }) - this.logger.info(`Video categories map created!`, this.idsMap.entries()) - if (this.failedMigrations.size) { - throw new Error(`Failed to create some video categories: ${Array.from(this.failedMigrations).join(', ')}`) - } - this.logger.info(`All video categories succesfully migrated!`) - } - - public async run(): Promise { - await this.init() - const { api } = this - const allCategories = await this.snapshot.videoCategories - const categoriesToMigrate = allCategories.filter((c) => !this.idsMap.has(parseInt(c.id))) - - if (!categoriesToMigrate.length) { - this.logger.info('All video categories already migrated, skipping...') - return this.getResult() - } - - this.logger.info(`Migrating ${categoriesToMigrate.length} video categories...`) - const txs = categoriesToMigrate - .sort((a, b) => parseInt(a.id) - parseInt(b.id)) - .map((c) => { - const meta = new VideoCategoryMetadata({ name: c.name }) - const metaBytes = '0x' + Buffer.from(VideoCategoryMetadata.encode(meta).finish()).toString('hex') - return api.tx.sudo.sudoAs( - this.contentLeadKey, - api.tx.content.createVideoCategory('Lead', { - meta: metaBytes, - }) - ) - }) - - const batchTx = api.tx.utility.batch(txs) - await this.migrateBatch(batchTx, categoriesToMigrate) - - return this.getResult() - } -} diff --git a/utils/migration-scripts/disabled-migrations/giza-olympia/VideosMigration.ts b/utils/migration-scripts/disabled-migrations/giza-olympia/VideosMigration.ts deleted file mode 100644 index cf4539b397..0000000000 --- a/utils/migration-scripts/disabled-migrations/giza-olympia/VideosMigration.ts +++ /dev/null @@ -1,225 +0,0 @@ -import { VideoMetadata } from '@joystream/metadata-protobuf' -import { VideoFieldsFragment } from './giza-query-node/generated/queries' -import _ from 'lodash' -import { createType } from '@joystream/types' -import Long from 'long' -import { VideoCreationParameters, VideoId } from '@joystream/types/content' -import moment from 'moment' -import { UploadMigration, UploadMigrationConfig, UploadMigrationParams } from './UploadMigration' -import { MigrationResult } from './BaseMigration' -import { Logger } from 'winston' -import { createLogger } from '../logging' -import { SubmittableExtrinsic } from '@polkadot/api/types' - -export type VideosMigrationConfig = UploadMigrationConfig & { - videoBatchSize: number -} - -export type VideosMigrationParams = UploadMigrationParams & { - config: VideosMigrationConfig - videoIds: number[] - channelsMap: Map - forcedChannelOwner: { id: string; controllerAccount: string } | undefined - categoriesMap: Map - membershipsMap: Map -} - -export class VideosMigration extends UploadMigration { - name = 'Videos migration' - protected config: VideosMigrationConfig - protected categoriesMap: Map - protected channelsMap: Map - protected membershipsMap: Map - protected videoIds: number[] - protected forcedChannelOwner: { id: string; controllerAccount: string } | undefined - protected logger: Logger - - public constructor(params: VideosMigrationParams) { - super(params) - this.config = params.config - this.channelsMap = params.channelsMap - this.videoIds = params.videoIds - this.forcedChannelOwner = params.forcedChannelOwner - this.categoriesMap = params.categoriesMap - this.membershipsMap = params.membershipsMap - this.logger = createLogger(this.name) - } - - private getNewCategoryId(oldCategoryId: string | null | undefined): Long | undefined { - if (typeof oldCategoryId !== 'string') { - return undefined - } - const newCategoryId = this.categoriesMap.get(parseInt(oldCategoryId)) - return newCategoryId ? Long.fromNumber(newCategoryId) : undefined - } - - private getNewChannelId(oldChannelId: number): number { - const newChannelId = this.channelsMap.get(oldChannelId) - if (!newChannelId) { - throw new Error(`Missing new channel id for channel ${oldChannelId} in the channelMap!`) - } - return newChannelId - } - - protected async migrateBatch(tx: SubmittableExtrinsic<'promise'>, videos: VideoFieldsFragment[]): Promise { - const { api } = this - const result = await api.sendExtrinsic(this.sudo, tx) - const videoCreatedEvents = api.findEvents(result, 'content', 'VideoCreated') - const newVideoIds: VideoId[] = videoCreatedEvents.map((e) => e.data[2]) - if (videoCreatedEvents.length !== videos.length) { - this.extractFailedMigrations(result, videos) - } - const newVideoMapEntries: [number, number][] = [] - let newVideoIdIndex = 0 - videos.forEach(({ id }) => { - if (this.failedMigrations.has(parseInt(id))) { - return - } - const newVideoId = newVideoIds[newVideoIdIndex++].toNumber() - this.idsMap.set(parseInt(id), newVideoId) - newVideoMapEntries.push([parseInt(id), newVideoId]) - }) - if (newVideoMapEntries.length) { - this.logger.info('Video map entries added!', { newVideoMapEntries }) - const dataObjectsUploadedEvents = api.findEvents(result, 'storage', 'DataObjectsUploaded') - this.uploadManager.queueUploadsFromEvents(dataObjectsUploadedEvents) - } - } - - public async run(): Promise { - await this.init() - const { - api, - videoIds, - config: { videoBatchSize }, - } = this - const idsToMigrate = videoIds.filter((id) => !this.idsMap.has(id)).sort((a, b) => a - b) - if (idsToMigrate.length < videoIds.length) { - const alreadyMigratedVideosNum = videoIds.length - idsToMigrate.length - this.logger.info( - (idsToMigrate.length ? `${alreadyMigratedVideosNum}/${videoIds.length}` : 'All') + - ' videos already migrated, skippping...' - ) - } - while (idsToMigrate.length) { - const idsBatch = idsToMigrate.splice(0, videoBatchSize) - this.logger.info(`Preparing a batch of ${idsBatch.length} videos...`) - const videosBatch = this.snapshot.videos.filter((v) => idsBatch.includes(parseInt(v.id))) - if (videosBatch.length < idsBatch.length) { - this.logger.warn( - `Some videos were not be found: ${_.difference( - idsBatch, - videosBatch.map((v) => parseInt(v.id)) - )}` - ) - } - const calls = _.flatten(await Promise.all(videosBatch.map((v) => this.prepareVideo(v)))) - const batchTx = api.tx.utility.batch(calls) - await this.executeBatchMigration(batchTx, videosBatch) - await this.uploadManager.processQueuedUploads() - } - return this.getResult() - } - - private getChannelOwner({ - id, - ownerMember, - }: VideoFieldsFragment['channel']): Exclude { - if (!ownerMember) { - throw new Error(`Channel ownerMember missing for channel ${id}`) - } - - if (this.forcedChannelOwner) { - return this.forcedChannelOwner - } - - const newMemberId = this.membershipsMap.get(parseInt(ownerMember.id)) - if (newMemberId === undefined) { - throw new Error(`Missing member ${ownerMember.id} (owner of channel ${id}) in the memberships map!`) - } - - return { ...ownerMember, id: newMemberId.toString() } - } - - private getVideoData(video: VideoFieldsFragment) { - const { id, channel } = video - - if (!channel) { - throw new Error(`Channel data missing for video: ${id}`) - } - - return { ...video, channel: { ...channel, ownerMember: this.getChannelOwner(channel) } } - } - - private async prepareVideo(video: VideoFieldsFragment) { - const { api } = this - - const { - categoryId, - description, - duration, - hasMarketing, - isExplicit, - isPublic, - language, - license, - media, - mediaMetadata, - publishedBeforeJoystream, - thumbnailPhoto, - title, - channel: { ownerMember, id: oldChannelId }, - } = this.getVideoData(video) - - const channelId = this.getNewChannelId(parseInt(oldChannelId)) - - const assetsToPrepare = { - thumbnail: thumbnailPhoto || undefined, - video: media || undefined, - } - const preparedAssets = await this.uploadManager.prepareAssets(assetsToPrepare) - const meta = new VideoMetadata({ - title, - description, - category: this.getNewCategoryId(categoryId), - duration, - hasMarketing, - isExplicit, - isPublic, - language: language?.iso, - license: license, - mediaPixelHeight: mediaMetadata?.pixelHeight, - mediaPixelWidth: mediaMetadata?.pixelWidth, - mediaType: mediaMetadata?.encoding, - publishedBeforeJoystream: { - isPublished: !!publishedBeforeJoystream, - date: moment(publishedBeforeJoystream).format('YYYY-MM-DD'), - }, - thumbnailPhoto: preparedAssets.thumbnail?.index, - video: preparedAssets.video?.index, - }) - const assetsParams = Object.values(preparedAssets) - .sort((a, b) => a.index - b.index) - .map((a) => a.params) - const videoCreationParams = createType( - 'VideoCreationParameters', - { - assets: assetsParams.length - ? { - object_creation_list: assetsParams, - expected_data_size_fee: this.uploadManager.dataObjectFeePerMB, - } - : null, - meta: `0x${Buffer.from(VideoMetadata.encode(meta).finish()).toString('hex')}`, - } - ) - const feesToCover = this.uploadManager.calcDataObjectsFee(assetsParams) - return [ - api.tx.balances.transferKeepAlive(ownerMember.controllerAccount, feesToCover), - api.tx.sudo.sudoAs( - ownerMember.controllerAccount, - api.tx.content.createVideo({ Member: ownerMember.id }, channelId, videoCreationParams) - ), - ] - } -} diff --git a/utils/migration-scripts/disabled-migrations/giza-olympia/giza-query-node/api.ts b/utils/migration-scripts/disabled-migrations/giza-olympia/giza-query-node/api.ts deleted file mode 100644 index 3bf52cbc8b..0000000000 --- a/utils/migration-scripts/disabled-migrations/giza-olympia/giza-query-node/api.ts +++ /dev/null @@ -1,212 +0,0 @@ -import { - ApolloClient, - NormalizedCacheObject, - HttpLink, - InMemoryCache, - DocumentNode, - isApolloError, - ApolloQueryResult, -} from '@apollo/client/core' -import { disableFragmentWarnings } from 'graphql-tag' -import fetch from 'cross-fetch' -import { - ChannelCategoryFieldsFragment, - GetChannelsCategories, - GetChannelsCategoriesQuery, - GetChannelsCategoriesQueryVariables, - GetVideoCategories, - GetVideoCategoriesQuery, - GetVideoCategoriesQueryVariables, - VideoCategoryFieldsFragment, - GetDataObjectsPage, - GetDataObjectsPageQuery, - GetDataObjectsPageQueryVariables, - StorageDataObjectConnectionFieldsFragment, - DistributionBucketFieldsFragment, - GetDistributorsByBagIdsQuery, - GetDistributorsByBagIdsQueryVariables, - GetDistributorsByBagIds, - ChannelConnectionFieldsFragment, - GetChannelsPageQuery, - GetChannelsPageQueryVariables, - GetChannelsPage, - VideoConnectionFieldsFragment, - GetVideosPageQuery, - GetVideosPageQueryVariables, - GetVideosPage, - MembershipConnectionFieldsFragment, - GetMembershipsPageQuery, - GetMembershipsPageQueryVariables, - GetMembershipsPage, -} from './generated/queries' -import { Logger } from 'winston' -import { createLogger } from '../../logging' -import { Maybe } from '../../sumer-giza/sumer-query-node/generated/schema' - -disableFragmentWarnings() - -export const MAX_RESULTS_PER_QUERY = 1000 - -export class QueryNodeApi { - private endpoint: string - private apolloClient: ApolloClient - private retryAttempts: number - private retryIntervalMs: number - private logger: Logger - - public constructor(endpoint: string, retryAttempts = 5, retryIntervalMs = 5000) { - this.endpoint = endpoint - this.retryAttempts = retryAttempts - this.retryIntervalMs = retryIntervalMs - this.apolloClient = new ApolloClient({ - link: new HttpLink({ uri: endpoint, fetch }), - cache: new InMemoryCache({ addTypename: false }), - defaultOptions: { query: { fetchPolicy: 'no-cache', errorPolicy: 'all' } }, - }) - this.logger = createLogger('Query Node Api') - } - - private async query(queryFunc: () => Promise>): Promise> { - let attempts = 0 - while (true) { - try { - const result = await queryFunc() - return result - } catch (e) { - if (e instanceof Error && isApolloError(e) && e.networkError) { - this.logger.error(`${this.endpoint} network error: ${e.networkError.message}`) - if (attempts++ > this.retryAttempts) { - throw new Error(`Maximum number of query retry attempts reached for ${this.endpoint}`) - } - this.logger.info(`Retrying in ${this.retryIntervalMs}ms...`) - await new Promise((resolve) => setTimeout(resolve, this.retryIntervalMs)) - } else { - throw e - } - } - } - } - - // Get entity by unique input - protected async uniqueEntityQuery< - QueryT extends { [k: string]: Maybe> | undefined }, - VariablesT extends Record - >( - query: DocumentNode, - variables: VariablesT, - resultKey: keyof QueryT - ): Promise[keyof QueryT] | null> { - return (await this.apolloClient.query({ query, variables })).data[resultKey] || null - } - - // Query-node: get multiple entities - protected async multipleEntitiesQuery< - QueryT extends { [k: string]: unknown[] }, - VariablesT extends Record - >(query: DocumentNode, variables: VariablesT, resultKey: keyof QueryT): Promise { - const q = this.query(() => this.apolloClient.query({ query, variables })) - return (await q).data[resultKey] - } - - public getChannelCategories(): Promise { - return this.multipleEntitiesQuery( - GetChannelsCategories, - {}, - 'channelCategories' - ) - } - - public getVideoCategories(): Promise { - return this.multipleEntitiesQuery( - GetVideoCategories, - {}, - 'videoCategories' - ) - } - - public async getChannelsPage( - lastCursor?: string, - limit: number = MAX_RESULTS_PER_QUERY - ): Promise { - const conn = await this.uniqueEntityQuery( - GetChannelsPage, - { - limit, - lastCursor, - }, - 'channelsConnection' - ) - if (!conn) { - throw new Error('Cannot get channelsConnection!') - } - - return conn - } - - public async getVideosPage( - lastCursor?: string, - limit: number = MAX_RESULTS_PER_QUERY - ): Promise { - const conn = await this.uniqueEntityQuery( - GetVideosPage, - { - limit, - lastCursor, - }, - 'videosConnection' - ) - if (!conn) { - throw new Error('Cannot get videosConnection!') - } - - return conn - } - - public async getStorageDataObjectsPage( - updatedAfter?: Date, - limit: number = MAX_RESULTS_PER_QUERY, - lastCursor?: string - ): Promise { - const conn = await this.uniqueEntityQuery( - GetDataObjectsPage, - { - updatedAfter, - limit, - lastCursor, - }, - 'storageDataObjectsConnection' - ) - if (!conn) { - throw new Error('Cannot get storageDataObjectsConnection!') - } - - return conn - } - - public async getDistributorsByBagIds(bagIds: string[]): Promise { - return this.multipleEntitiesQuery( - GetDistributorsByBagIds, - { ids: bagIds }, - 'distributionBuckets' - ) - } - - public async getMembershipsPage( - lastCursor?: string, - limit: number = MAX_RESULTS_PER_QUERY - ): Promise { - const conn = await this.uniqueEntityQuery( - GetMembershipsPage, - { - limit, - lastCursor, - }, - 'membershipsConnection' - ) - if (!conn) { - throw new Error('Cannot get membershipsConnection!') - } - - return conn - } -} diff --git a/utils/migration-scripts/disabled-migrations/giza-olympia/giza-query-node/codegen.yml b/utils/migration-scripts/disabled-migrations/giza-olympia/giza-query-node/codegen.yml deleted file mode 100644 index eec6585620..0000000000 --- a/utils/migration-scripts/disabled-migrations/giza-olympia/giza-query-node/codegen.yml +++ /dev/null @@ -1,33 +0,0 @@ -# Paths are relative to root distribution-node directory -overwrite: true - -schema: https://hydra.joystream.org/graphql - -documents: - - 'src/giza-olympia/giza-query-node/queries/*.graphql' - -config: - scalars: - Date: Date - preResolveTypes: true # avoid using Pick - skipTypename: true # skip __typename field in typings unless it's part of the query - -generates: - src/giza-olympia/giza-query-node/generated/schema.ts: - hooks: - afterOneFileWrite: - - prettier --write - - eslint --fix - plugins: - - typescript - src/giza-olympia/giza-query-node/generated/queries.ts: - preset: import-types - presetConfig: - typesPath: ./schema - hooks: - afterOneFileWrite: - - prettier --write - - eslint --fix - plugins: - - typescript-operations - - typescript-document-nodes diff --git a/utils/migration-scripts/disabled-migrations/giza-olympia/giza-query-node/generated/queries.ts b/utils/migration-scripts/disabled-migrations/giza-olympia/giza-query-node/generated/queries.ts deleted file mode 100644 index 61f68ab75e..0000000000 --- a/utils/migration-scripts/disabled-migrations/giza-olympia/giza-query-node/generated/queries.ts +++ /dev/null @@ -1,386 +0,0 @@ -import * as Types from './schema' - -import gql from 'graphql-tag' -export type VideoCategoryFieldsFragment = { id: string; name?: Types.Maybe } - -export type ChannelCategoryFieldsFragment = { id: string; name?: Types.Maybe } - -export type StorageDataObjectFieldsFragment = { - id: string - updatedAt?: Types.Maybe - ipfsHash: string - isAccepted: boolean - size: any - storageBagId: string -} - -export type StorageDataObjectConnectionFieldsFragment = { - edges: Array<{ node: StorageDataObjectFieldsFragment }> - pageInfo: { hasNextPage: boolean; endCursor?: Types.Maybe } -} - -export type VideoFieldsFragment = { - id: string - categoryId?: Types.Maybe - title?: Types.Maybe - description?: Types.Maybe - duration?: Types.Maybe - hasMarketing?: Types.Maybe - publishedBeforeJoystream?: Types.Maybe - isPublic?: Types.Maybe - isCensored: boolean - isExplicit?: Types.Maybe - isFeatured: boolean - thumbnailPhoto?: Types.Maybe - language?: Types.Maybe<{ iso: string }> - license?: Types.Maybe<{ - code?: Types.Maybe - attribution?: Types.Maybe - customText?: Types.Maybe - }> - media?: Types.Maybe - mediaMetadata?: Types.Maybe<{ - pixelWidth?: Types.Maybe - pixelHeight?: Types.Maybe - size?: Types.Maybe - encoding?: Types.Maybe<{ - codecName?: Types.Maybe - container?: Types.Maybe - mimeMediaType?: Types.Maybe - }> - }> - channel: { id: string; ownerMember?: Types.Maybe<{ id: string; controllerAccount: string }> } -} - -export type VideoConnectionFieldsFragment = { - edges: Array<{ node: VideoFieldsFragment }> - pageInfo: { hasNextPage: boolean; endCursor?: Types.Maybe } -} - -export type ChannelFieldsFragment = { - id: string - categoryId?: Types.Maybe - rewardAccount?: Types.Maybe - title?: Types.Maybe - description?: Types.Maybe - isPublic?: Types.Maybe - isCensored: boolean - ownerMember?: Types.Maybe<{ id: string; controllerAccount: string }> - coverPhoto?: Types.Maybe - avatarPhoto?: Types.Maybe - language?: Types.Maybe<{ iso: string }> - videos: Array<{ id: string }> - collaborators: Array<{ id: string }> -} - -export type ChannelConnectionFieldsFragment = { - edges: Array<{ node: ChannelFieldsFragment }> - pageInfo: { hasNextPage: boolean; endCursor?: Types.Maybe } -} - -export type DistributionBucketFieldsFragment = { - distributing: boolean - bags: Array<{ id: string }> - operators: Array<{ - status: Types.DistributionBucketOperatorStatus - metadata?: Types.Maybe<{ nodeEndpoint?: Types.Maybe }> - }> -} - -export type MembershipFieldsFragment = { - id: string - handle: string - avatarUri?: Types.Maybe - about?: Types.Maybe - controllerAccount: string - rootAccount: string -} - -export type MembershipConnectionFieldsFragment = { - edges: Array<{ node: MembershipFieldsFragment }> - pageInfo: { hasNextPage: boolean; endCursor?: Types.Maybe } -} - -export type GetVideoCategoriesQueryVariables = Types.Exact<{ [key: string]: never }> - -export type GetVideoCategoriesQuery = { videoCategories: Array } - -export type GetChannelsCategoriesQueryVariables = Types.Exact<{ [key: string]: never }> - -export type GetChannelsCategoriesQuery = { channelCategories: Array } - -export type GetDistributorsByBagIdsQueryVariables = Types.Exact<{ - ids?: Types.Maybe | Types.Scalars['ID']> -}> - -export type GetDistributorsByBagIdsQuery = { distributionBuckets: Array } - -export type GetDataObjectsPageQueryVariables = Types.Exact<{ - updatedAfter?: Types.Maybe - limit: Types.Scalars['Int'] - lastCursor?: Types.Maybe -}> - -export type GetDataObjectsPageQuery = { storageDataObjectsConnection: StorageDataObjectConnectionFieldsFragment } - -export type GetChannelsPageQueryVariables = Types.Exact<{ - limit: Types.Scalars['Int'] - lastCursor?: Types.Maybe -}> - -export type GetChannelsPageQuery = { channelsConnection: ChannelConnectionFieldsFragment } - -export type GetVideosPageQueryVariables = Types.Exact<{ - limit: Types.Scalars['Int'] - lastCursor?: Types.Maybe -}> - -export type GetVideosPageQuery = { videosConnection: VideoConnectionFieldsFragment } - -export type GetMembershipsPageQueryVariables = Types.Exact<{ - limit: Types.Scalars['Int'] - lastCursor?: Types.Maybe -}> - -export type GetMembershipsPageQuery = { membershipsConnection: MembershipConnectionFieldsFragment } - -export const VideoCategoryFields = gql` - fragment VideoCategoryFields on VideoCategory { - id - name - } -` -export const ChannelCategoryFields = gql` - fragment ChannelCategoryFields on ChannelCategory { - id - name - } -` -export const StorageDataObjectFields = gql` - fragment StorageDataObjectFields on StorageDataObject { - id - updatedAt - ipfsHash - isAccepted - size - storageBagId - } -` -export const StorageDataObjectConnectionFields = gql` - fragment StorageDataObjectConnectionFields on StorageDataObjectConnection { - edges { - node { - ...StorageDataObjectFields - } - } - pageInfo { - hasNextPage - endCursor - } - } - ${StorageDataObjectFields} -` -export const VideoFields = gql` - fragment VideoFields on Video { - id - categoryId - title - description - duration - thumbnailPhoto { - ...StorageDataObjectFields - } - language { - iso - } - hasMarketing - publishedBeforeJoystream - isPublic - isCensored - isExplicit - license { - code - attribution - customText - } - media { - ...StorageDataObjectFields - } - mediaMetadata { - encoding { - codecName - container - mimeMediaType - } - pixelWidth - pixelHeight - size - } - isFeatured - channel { - id - ownerMember { - id - controllerAccount - } - } - } - ${StorageDataObjectFields} -` -export const VideoConnectionFields = gql` - fragment VideoConnectionFields on VideoConnection { - edges { - node { - ...VideoFields - } - } - pageInfo { - hasNextPage - endCursor - } - } - ${VideoFields} -` -export const ChannelFields = gql` - fragment ChannelFields on Channel { - id - ownerMember { - id - controllerAccount - } - categoryId - rewardAccount - title - description - coverPhoto { - ...StorageDataObjectFields - } - avatarPhoto { - ...StorageDataObjectFields - } - isPublic - isCensored - language { - iso - } - videos { - id - } - collaborators { - id - } - } - ${StorageDataObjectFields} -` -export const ChannelConnectionFields = gql` - fragment ChannelConnectionFields on ChannelConnection { - edges { - node { - ...ChannelFields - } - } - pageInfo { - hasNextPage - endCursor - } - } - ${ChannelFields} -` -export const DistributionBucketFields = gql` - fragment DistributionBucketFields on DistributionBucket { - distributing - bags { - id - } - operators { - status - metadata { - nodeEndpoint - } - } - } -` -export const MembershipFields = gql` - fragment MembershipFields on Membership { - id - handle - avatarUri - about - controllerAccount - rootAccount - } -` -export const MembershipConnectionFields = gql` - fragment MembershipConnectionFields on MembershipConnection { - edges { - node { - ...MembershipFields - } - } - pageInfo { - hasNextPage - endCursor - } - } - ${MembershipFields} -` -export const GetVideoCategories = gql` - query getVideoCategories { - videoCategories { - ...VideoCategoryFields - } - } - ${VideoCategoryFields} -` -export const GetChannelsCategories = gql` - query getChannelsCategories { - channelCategories { - ...ChannelCategoryFields - } - } - ${ChannelCategoryFields} -` -export const GetDistributorsByBagIds = gql` - query getDistributorsByBagIds($ids: [ID!]) { - distributionBuckets(where: { bags_some: { id_in: $ids }, distributing_eq: true }) { - ...DistributionBucketFields - } - } - ${DistributionBucketFields} -` -export const GetDataObjectsPage = gql` - query getDataObjectsPage($updatedAfter: DateTime, $limit: Int!, $lastCursor: String) { - storageDataObjectsConnection( - where: { updatedAt_gt: $updatedAfter, isAccepted_eq: true } - first: $limit - after: $lastCursor - ) { - ...StorageDataObjectConnectionFields - } - } - ${StorageDataObjectConnectionFields} -` -export const GetChannelsPage = gql` - query getChannelsPage($limit: Int!, $lastCursor: String) { - channelsConnection(first: $limit, after: $lastCursor) { - ...ChannelConnectionFields - } - } - ${ChannelConnectionFields} -` -export const GetVideosPage = gql` - query getVideosPage($limit: Int!, $lastCursor: String) { - videosConnection(first: $limit, after: $lastCursor) { - ...VideoConnectionFields - } - } - ${VideoConnectionFields} -` -export const GetMembershipsPage = gql` - query getMembershipsPage($limit: Int!, $lastCursor: String) { - membershipsConnection(first: $limit, after: $lastCursor) { - ...MembershipConnectionFields - } - } - ${MembershipConnectionFields} -` diff --git a/utils/migration-scripts/disabled-migrations/giza-olympia/giza-query-node/generated/schema.ts b/utils/migration-scripts/disabled-migrations/giza-olympia/giza-query-node/generated/schema.ts deleted file mode 100644 index 089f5da5a7..0000000000 --- a/utils/migration-scripts/disabled-migrations/giza-olympia/giza-query-node/generated/schema.ts +++ /dev/null @@ -1,3715 +0,0 @@ -export type Maybe = T | null -export type Exact = { [K in keyof T]: T[K] } -export type MakeOptional = Omit & { [SubKey in K]?: Maybe } -export type MakeMaybe = Omit & { [SubKey in K]: Maybe } -/** All built-in and custom scalars, mapped to their actual values */ -export type Scalars = { - ID: string - String: string - Boolean: boolean - Int: number - Float: number - /** The javascript `Date` as string. Type represents date and time as the ISO Date string. */ - DateTime: any - /** GraphQL representation of BigInt */ - BigInt: any - /** The `JSONObject` scalar type represents JSON objects as specified by [ECMA-404](http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-404.pdf). */ - JSONObject: any -} - -export type BaseGraphQlObject = { - id: Scalars['ID'] - createdAt: Scalars['DateTime'] - createdById: Scalars['String'] - updatedAt?: Maybe - updatedById?: Maybe - deletedAt?: Maybe - deletedById?: Maybe - version: Scalars['Int'] -} - -export type BaseModel = BaseGraphQlObject & { - id: Scalars['ID'] - createdAt: Scalars['DateTime'] - createdById: Scalars['String'] - updatedAt?: Maybe - updatedById?: Maybe - deletedAt?: Maybe - deletedById?: Maybe - version: Scalars['Int'] -} - -export type BaseModelUuid = BaseGraphQlObject & { - id: Scalars['ID'] - createdAt: Scalars['DateTime'] - createdById: Scalars['String'] - updatedAt?: Maybe - updatedById?: Maybe - deletedAt?: Maybe - deletedById?: Maybe - version: Scalars['Int'] -} - -export type BaseWhereInput = { - id_eq?: Maybe - id_in?: Maybe> - createdAt_eq?: Maybe - createdAt_lt?: Maybe - createdAt_lte?: Maybe - createdAt_gt?: Maybe - createdAt_gte?: Maybe - createdById_eq?: Maybe - updatedAt_eq?: Maybe - updatedAt_lt?: Maybe - updatedAt_lte?: Maybe - updatedAt_gt?: Maybe - updatedAt_gte?: Maybe - updatedById_eq?: Maybe - deletedAt_all?: Maybe - deletedAt_eq?: Maybe - deletedAt_lt?: Maybe - deletedAt_lte?: Maybe - deletedAt_gt?: Maybe - deletedAt_gte?: Maybe - deletedById_eq?: Maybe -} - -export type Channel = BaseGraphQlObject & { - id: Scalars['ID'] - createdAt: Scalars['DateTime'] - createdById: Scalars['String'] - updatedAt?: Maybe - updatedById?: Maybe - deletedAt?: Maybe - deletedById?: Maybe - version: Scalars['Int'] - ownerMember?: Maybe - ownerMemberId?: Maybe - ownerCuratorGroup?: Maybe - ownerCuratorGroupId?: Maybe - category?: Maybe - categoryId?: Maybe - /** Reward account where revenue is sent if set. */ - rewardAccount?: Maybe - /** The title of the Channel */ - title?: Maybe - /** The description of a Channel */ - description?: Maybe - coverPhoto?: Maybe - coverPhotoId?: Maybe - avatarPhoto?: Maybe - avatarPhotoId?: Maybe - /** Flag signaling whether a channel is public. */ - isPublic?: Maybe - /** Flag signaling whether a channel is censored. */ - isCensored: Scalars['Boolean'] - language?: Maybe - languageId?: Maybe - videos: Array